src/cpu/x86/vm/interp_masm_x86_64.hpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
8074717 Cdiff src/cpu/x86/vm/interp_masm_x86_64.hpp
src/cpu/x86/vm/interp_masm_x86_64.hpp
Print this page
*** 41,51 ****
// base routine for all dispatches
void dispatch_base(TosState state, address* table, bool verifyoop = true);
#endif // CC_INTERP
public:
! InterpreterMacroAssembler(CodeBuffer* code) : MacroAssembler(code), _locals_register(r14), _bcp_register(r13) {}
void load_earlyret_value(TosState state);
#ifdef CC_INTERP
void save_bcp() { /* not needed in c++ interpreter and harmless */ }
--- 41,53 ----
// base routine for all dispatches
void dispatch_base(TosState state, address* table, bool verifyoop = true);
#endif // CC_INTERP
public:
! InterpreterMacroAssembler(CodeBuffer* code) : MacroAssembler(code),
! _locals_register(LP64_ONLY(r14) NOT_LP64(rdi)),
! _bcp_register(LP64_ONLY(r13) NOT_LP64(rsi)) {}
void load_earlyret_value(TosState state);
#ifdef CC_INTERP
void save_bcp() { /* not needed in c++ interpreter and harmless */ }
*** 56,74 ****
#else
// Interpreter-specific registers
void save_bcp() {
! movptr(Address(rbp, frame::interpreter_frame_bcp_offset * wordSize), r13);
}
void restore_bcp() {
! movptr(r13, Address(rbp, frame::interpreter_frame_bcp_offset * wordSize));
}
void restore_locals() {
! movptr(r14, Address(rbp, frame::interpreter_frame_locals_offset * wordSize));
}
// Helpers for runtime call arguments/results
void get_method(Register reg) {
movptr(reg, Address(rbp, frame::interpreter_frame_method_offset * wordSize));
--- 58,76 ----
#else
// Interpreter-specific registers
void save_bcp() {
! movptr(Address(rbp, frame::interpreter_frame_bcp_offset * wordSize), _bcp_register);
}
void restore_bcp() {
! movptr(_bcp_register, Address(rbp, frame::interpreter_frame_bcp_offset * wordSize));
}
void restore_locals() {
! movptr(_locals_register, Address(rbp, frame::interpreter_frame_locals_offset * wordSize));
}
// Helpers for runtime call arguments/results
void get_method(Register reg) {
movptr(reg, Address(rbp, frame::interpreter_frame_method_offset * wordSize));
*** 93,129 ****
get_constant_pool(cpool);
movptr(tags, Address(cpool, ConstantPool::tags_offset_in_bytes()));
}
void get_unsigned_2_byte_index_at_bcp(Register reg, int bcp_offset);
! void get_cache_and_index_at_bcp(Register cache, Register index, int bcp_offset, size_t index_size = sizeof(u2));
! void get_cache_and_index_and_bytecode_at_bcp(Register cache, Register index, Register bytecode, int byte_no, int bcp_offset, size_t index_size = sizeof(u2));
! void get_cache_entry_pointer_at_bcp(Register cache, Register tmp, int bcp_offset, size_t index_size = sizeof(u2));
! void get_cache_index_at_bcp(Register index, int bcp_offset, size_t index_size = sizeof(u2));
// load cpool->resolved_references(index);
void load_resolved_reference_at_index(Register result, Register index);
void pop_ptr(Register r = rax);
void pop_i(Register r = rax);
void pop_l(Register r = rax);
void pop_f(XMMRegister r = xmm0);
void pop_d(XMMRegister r = xmm0);
- void push_ptr(Register r = rax);
- void push_i(Register r = rax);
void push_l(Register r = rax);
void push_f(XMMRegister r = xmm0);
void push_d(XMMRegister r = xmm0);
! void pop(Register r ) { ((MacroAssembler*)this)->pop(r); }
!
! void push(Register r ) { ((MacroAssembler*)this)->push(r); }
void push(int32_t imm ) { ((MacroAssembler*)this)->push(imm); }
void pop(TosState state); // transition vtos -> state
void push(TosState state); // transition state -> vtos
void empty_expression_stack() {
movptr(rsp, Address(rbp, frame::interpreter_frame_monitor_block_top_offset * wordSize));
// NULL last_sp until next java call
movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), (int32_t)NULL_WORD);
}
--- 95,162 ----
get_constant_pool(cpool);
movptr(tags, Address(cpool, ConstantPool::tags_offset_in_bytes()));
}
void get_unsigned_2_byte_index_at_bcp(Register reg, int bcp_offset);
! void get_cache_and_index_at_bcp(Register cache,
! Register index,
! int bcp_offset,
! size_t index_size = sizeof(u2));
! void get_cache_and_index_and_bytecode_at_bcp(Register cache,
! Register index,
! Register bytecode,
! int byte_no,
! int bcp_offset,
! size_t index_size = sizeof(u2));
! void get_cache_entry_pointer_at_bcp(Register cache,
! Register tmp,
! int bcp_offset,
! size_t index_size = sizeof(u2));
! void get_cache_index_at_bcp(Register index,
! int bcp_offset,
! size_t index_size = sizeof(u2));
// load cpool->resolved_references(index);
void load_resolved_reference_at_index(Register result, Register index);
+ NOT_LP64(void f2ieee();) // truncate ftos to 32bits
+ NOT_LP64(void d2ieee();) // truncate dtos to 64bits
+
+ // Expression stack
void pop_ptr(Register r = rax);
void pop_i(Register r = rax);
+ void push_ptr(Register r = rax);
+ void push_i(Register r = rax);
+
+ #ifdef _LP64
void pop_l(Register r = rax);
void pop_f(XMMRegister r = xmm0);
void pop_d(XMMRegister r = xmm0);
void push_l(Register r = rax);
void push_f(XMMRegister r = xmm0);
void push_d(XMMRegister r = xmm0);
+ #else
+ void pop_l(Register lo = rax, Register hi = rdx);
+ void pop_f();
+ void pop_d();
+
+ void push_l(Register lo = rax, Register hi = rdx);
+ void push_d(Register r = rax);
+ void push_f();
+ #endif // _LP64
! void pop(Register r) { ((MacroAssembler*)this)->pop(r); }
! void push(Register r) { ((MacroAssembler*)this)->push(r); }
void push(int32_t imm ) { ((MacroAssembler*)this)->push(imm); }
void pop(TosState state); // transition vtos -> state
void push(TosState state); // transition state -> vtos
+ // These are dummies to prevent surprise implicit conversions to Register
+ void pop(void* v); // Add unimplemented ambiguous method
+ void push(void* v); // Add unimplemented ambiguous method
+
void empty_expression_stack() {
movptr(rsp, Address(rbp, frame::interpreter_frame_monitor_block_top_offset * wordSize));
// NULL last_sp until next java call
movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), (int32_t)NULL_WORD);
}
*** 137,161 ****
void gen_subtype_check( Register sub_klass, Label &ok_is_subtype );
// Dispatching
void dispatch_prolog(TosState state, int step = 0);
void dispatch_epilog(TosState state, int step = 0);
! // dispatch via ebx (assume ebx is loaded already)
void dispatch_only(TosState state);
! // dispatch normal table via ebx (assume ebx is loaded already)
void dispatch_only_normal(TosState state);
void dispatch_only_noverify(TosState state);
! // load ebx from [esi + step] and dispatch via ebx
void dispatch_next(TosState state, int step = 0);
! // load ebx from [esi] and dispatch via ebx and table
void dispatch_via (TosState state, address* table);
// jump to an invoked target
void prepare_to_jump_from_interpreted();
void jump_from_interpreted(Register method, Register temp);
-
// Returning from interpreted functions
//
// Removes the current activation (incl. unlocking of monitors)
// and sets up the return address. This code is also used for
// exception unwindwing. In that case, we do not want to throw
--- 170,193 ----
void gen_subtype_check( Register sub_klass, Label &ok_is_subtype );
// Dispatching
void dispatch_prolog(TosState state, int step = 0);
void dispatch_epilog(TosState state, int step = 0);
! // dispatch via rbx (assume rbx is loaded already)
void dispatch_only(TosState state);
! // dispatch normal table via rbx (assume rbx is loaded already)
void dispatch_only_normal(TosState state);
void dispatch_only_noverify(TosState state);
! // load rbx from [_bcp_register + step] and dispatch via rbx
void dispatch_next(TosState state, int step = 0);
! // load rbx from [_bcp_register] and dispatch via rbx and table
void dispatch_via (TosState state, address* table);
// jump to an invoked target
void prepare_to_jump_from_interpreted();
void jump_from_interpreted(Register method, Register temp);
// Returning from interpreted functions
//
// Removes the current activation (incl. unlocking of monitors)
// and sets up the return address. This code is also used for
// exception unwindwing. In that case, we do not want to throw
src/cpu/x86/vm/interp_masm_x86_64.hpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File