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