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); |