168 void build_frame(int framesize); |
168 void build_frame(int framesize); |
169 void remove_frame(int framesize); |
169 void remove_frame(int framesize); |
170 |
170 |
171 virtual void _call_Unimplemented(address call_site) { |
171 virtual void _call_Unimplemented(address call_site) { |
172 mov(rscratch2, call_site); |
172 mov(rscratch2, call_site); |
173 haltsim(); |
|
174 } |
173 } |
175 |
174 |
176 #define call_Unimplemented() _call_Unimplemented((address)__PRETTY_FUNCTION__) |
175 #define call_Unimplemented() _call_Unimplemented((address)__PRETTY_FUNCTION__) |
177 |
|
178 virtual void notify(int type); |
|
179 |
176 |
180 // aliases defined in AARCH64 spec |
177 // aliases defined in AARCH64 spec |
181 |
178 |
182 template<class T> |
179 template<class T> |
183 inline void cmpw(Register Rd, T imm) { subsw(zr, Rd, imm); } |
180 inline void cmpw(Register Rd, T imm) { subsw(zr, Rd, imm); } |
1185 // |
1182 // |
1186 |
1183 |
1187 public: |
1184 public: |
1188 // enum used for aarch64--x86 linkage to define return type of x86 function |
1185 // enum used for aarch64--x86 linkage to define return type of x86 function |
1189 enum ret_type { ret_type_void, ret_type_integral, ret_type_float, ret_type_double}; |
1186 enum ret_type { ret_type_void, ret_type_integral, ret_type_float, ret_type_double}; |
1190 |
|
1191 #ifdef BUILTIN_SIM |
|
1192 void c_stub_prolog(int gp_arg_count, int fp_arg_count, int ret_type, address *prolog_ptr = NULL); |
|
1193 #else |
|
1194 void c_stub_prolog(int gp_arg_count, int fp_arg_count, int ret_type) { } |
|
1195 #endif |
|
1196 |
|
1197 // special version of call_VM_leaf_base needed for aarch64 simulator |
|
1198 // where we need to specify both the gp and fp arg counts and the |
|
1199 // return type so that the linkage routine from aarch64 to x86 and |
|
1200 // back knows which aarch64 registers to copy to x86 registers and |
|
1201 // which x86 result register to copy back to an aarch64 register |
|
1202 |
|
1203 void call_VM_leaf_base1( |
|
1204 address entry_point, // the entry point |
|
1205 int number_of_gp_arguments, // the number of gp reg arguments to pass |
|
1206 int number_of_fp_arguments, // the number of fp reg arguments to pass |
|
1207 ret_type type, // the return type for the call |
|
1208 Label* retaddr = NULL |
|
1209 ); |
|
1210 |
1187 |
1211 void ldr_constant(Register dest, const Address &const_addr) { |
1188 void ldr_constant(Register dest, const Address &const_addr) { |
1212 if (NearCpool) { |
1189 if (NearCpool) { |
1213 ldr(dest, const_addr); |
1190 ldr(dest, const_addr); |
1214 } else { |
1191 } else { |