src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp
changeset 57565 01bca26734bb
parent 55521 f9a2f93a0c87
child 57597 ec78fddafd88
equal deleted inserted replaced
57564:0a8436eda2fa 57565:01bca26734bb
   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 {