src/cpu/x86/vm/interp_masm_x86_32.hpp

changeset 739
dc7f315e41f7
parent 435
a61af66fc99e
child 772
9ee9cf798b59
equal deleted inserted replaced
738:fa4d1d240383 739:dc7f315e41f7
63 // Helpers for runtime call arguments/results 63 // Helpers for runtime call arguments/results
64 void get_method(Register reg); 64 void get_method(Register reg);
65 65
66 #else 66 #else
67 67
68 void save_bcp() { movl(Address(rbp, frame::interpreter_frame_bcx_offset * wordSize), rsi); } 68 void save_bcp() { movptr(Address(rbp, frame::interpreter_frame_bcx_offset * wordSize), rsi); }
69 void restore_bcp() { movl(rsi, Address(rbp, frame::interpreter_frame_bcx_offset * wordSize)); } 69 void restore_bcp() { movptr(rsi, Address(rbp, frame::interpreter_frame_bcx_offset * wordSize)); }
70 void restore_locals() { movl(rdi, Address(rbp, frame::interpreter_frame_locals_offset * wordSize)); } 70 void restore_locals() { movptr(rdi, Address(rbp, frame::interpreter_frame_locals_offset * wordSize)); }
71 71
72 // Helpers for runtime call arguments/results 72 // Helpers for runtime call arguments/results
73 void get_method(Register reg) { movl(reg, Address(rbp, frame::interpreter_frame_method_offset * wordSize)); } 73 void get_method(Register reg) { movptr(reg, Address(rbp, frame::interpreter_frame_method_offset * wordSize)); }
74 void get_constant_pool(Register reg) { get_method(reg); movl(reg, Address(reg, methodOopDesc::constants_offset())); } 74 void get_constant_pool(Register reg) { get_method(reg); movptr(reg, Address(reg, methodOopDesc::constants_offset())); }
75 void get_constant_pool_cache(Register reg) { get_constant_pool(reg); movl(reg, Address(reg, constantPoolOopDesc::cache_offset_in_bytes())); } 75 void get_constant_pool_cache(Register reg) { get_constant_pool(reg); movptr(reg, Address(reg, constantPoolOopDesc::cache_offset_in_bytes())); }
76 void get_cpool_and_tags(Register cpool, Register tags) { get_constant_pool(cpool); movl(tags, Address(cpool, constantPoolOopDesc::tags_offset_in_bytes())); 76 void get_cpool_and_tags(Register cpool, Register tags) { get_constant_pool(cpool); movptr(tags, Address(cpool, constantPoolOopDesc::tags_offset_in_bytes()));
77 } 77 }
78 void get_unsigned_2_byte_index_at_bcp(Register reg, int bcp_offset); 78 void get_unsigned_2_byte_index_at_bcp(Register reg, int bcp_offset);
79 void get_cache_and_index_at_bcp(Register cache, Register index, int bcp_offset); 79 void get_cache_and_index_at_bcp(Register cache, Register index, int bcp_offset);
80 void get_cache_entry_pointer_at_bcp(Register cache, Register tmp, int bcp_offset); 80 void get_cache_entry_pointer_at_bcp(Register cache, Register tmp, int bcp_offset);
81 81
82 // Expression stack 82 // Expression stack
83 void f2ieee(); // truncate ftos to 32bits 83 void f2ieee(); // truncate ftos to 32bits
84 void d2ieee(); // truncate dtos to 64bits 84 void d2ieee(); // truncate dtos to 64bits
85 #endif // CC_INTERP
86
87 85
88 void pop_ptr(Register r = rax); 86 void pop_ptr(Register r = rax);
89 void pop_ptr(Register r, Register tag); 87 void pop_ptr(Register r, Register tag);
90 void pop_i(Register r = rax); 88 void pop_i(Register r = rax);
91 void pop_l(Register lo = rax, Register hi = rdx); 89 void pop_l(Register lo = rax, Register hi = rdx);
102 void push_f(); 100 void push_f();
103 101
104 void pop(TosState state); // transition vtos -> state 102 void pop(TosState state); // transition vtos -> state
105 void push(TosState state); // transition state -> vtos 103 void push(TosState state); // transition state -> vtos
106 104
105 void pop(Register r ) { ((MacroAssembler*)this)->pop(r); }
106
107 void push(Register r ) { ((MacroAssembler*)this)->push(r); }
108 void push(int32_t imm ) { ((MacroAssembler*)this)->push(imm); }
109
110 // These are dummies to prevent surprise implicit conversions to Register
111 void pop(void* v ); // Add unimplemented ambiguous method
112 void push(void* v ); // Add unimplemented ambiguous method
113
107 DEBUG_ONLY(void verify_stack_tag(frame::Tag t);) 114 DEBUG_ONLY(void verify_stack_tag(frame::Tag t);)
108 115
116 #endif // CC_INTERP
117
109 #ifndef CC_INTERP 118 #ifndef CC_INTERP
110 119
111 void empty_expression_stack() { 120 void empty_expression_stack() {
112 movl(rsp, Address(rbp, frame::interpreter_frame_monitor_block_top_offset * wordSize)); 121 movptr(rsp, Address(rbp, frame::interpreter_frame_monitor_block_top_offset * wordSize));
113 // NULL last_sp until next java call 122 // NULL last_sp until next java call
114 movl(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), NULL_WORD); 123 movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), (int32_t)NULL_WORD);
115 } 124 }
116 125
117 // Tagged stack helpers for swap and dup 126 // Tagged stack helpers for swap and dup
118 void load_ptr_and_tag(int n, Register val, Register tag); 127 void load_ptr_and_tag(int n, Register val, Register tag);
119 void store_ptr_and_tag(int n, Register val, Register tag); 128 void store_ptr_and_tag(int n, Register val, Register tag);

mercurial