< prev index next >

src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp

Print this page

 920 
 921   void set_narrow_oop(Register dst, jobject obj);
 922 
 923   void encode_klass_not_null(Register r);
 924   void decode_klass_not_null(Register r);
 925   void encode_klass_not_null(Register dst, Register src);
 926   void decode_klass_not_null(Register dst, Register src);
 927 
 928   void set_narrow_klass(Register dst, Klass* k);
 929 
 930   // if heap base register is used - reinit it with the correct value
 931   void reinit_heapbase();
 932 
 933   DEBUG_ONLY(void verify_heapbase(const char* msg);)
 934 
 935   void push_CPU_state(bool save_vectors = false, bool use_sve = false,
 936                       int sve_vector_size_in_bytes = 0, int total_predicate_in_bytes = 0);
 937   void pop_CPU_state(bool restore_vectors = false, bool use_sve = false,
 938                      int sve_vector_size_in_bytes = 0, int total_predicate_in_bytes = 0);
 939 
 940   void push_cont_fastpath(Register java_thread);
 941   void pop_cont_fastpath(Register java_thread);



 942 
 943   // Round up to a power of two
 944   void round_to(Register reg, int modulus);
 945 
 946   // java.lang.Math::round intrinsics
 947   void java_round_double(Register dst, FloatRegister src, FloatRegister ftmp);
 948   void java_round_float(Register dst, FloatRegister src, FloatRegister ftmp);
 949 
 950   // allocation
 951   void tlab_allocate(
 952     Register obj,                      // result: pointer to object after successful allocation
 953     Register var_size_in_bytes,        // object size in bytes if unknown at compile time; invalid otherwise
 954     int      con_size_in_bytes,        // object size in bytes if   known at compile time
 955     Register t1,                       // temp register
 956     Register t2,                       // temp register
 957     Label&   slow_case                 // continuation point if fast allocation fails
 958   );
 959   void verify_tlab();
 960 
 961   // interface method calling

1071     if (VerifyOops) {
1072       _verify_oop_addr(reg, s, file, line);
1073     }
1074   }
1075 
1076 // TODO: verify method and klass metadata (compare against vptr?)
1077   void _verify_method_ptr(Register reg, const char * msg, const char * file, int line) {}
1078   void _verify_klass_ptr(Register reg, const char * msg, const char * file, int line){}
1079 
1080 #define verify_oop(reg) _verify_oop_checked(reg, "broken oop " #reg, __FILE__, __LINE__)
1081 #define verify_oop_msg(reg, msg) _verify_oop_checked(reg, "broken oop " #reg ", " #msg, __FILE__, __LINE__)
1082 #define verify_oop_addr(addr) _verify_oop_addr_checked(addr, "broken oop addr " #addr, __FILE__, __LINE__)
1083 #define verify_method_ptr(reg) _verify_method_ptr(reg, "broken method " #reg, __FILE__, __LINE__)
1084 #define verify_klass_ptr(reg) _verify_klass_ptr(reg, "broken klass " #reg, __FILE__, __LINE__)
1085 
1086   // Restore cpu control state after JNI call
1087   void restore_cpu_control_state_after_jni(Register tmp1, Register tmp2);
1088 
1089   // prints msg, dumps registers and stops execution
1090   void stop(const char* msg);

1091 
1092   static void debug64(char* msg, int64_t pc, int64_t regs[]);
1093 
1094   void untested()                                { stop("untested"); }
1095 
1096   void unimplemented(const char* what = "");
1097 
1098   void should_not_reach_here()                   { stop("should not reach here"); }
1099 
1100   void _assert_asm(Condition cc, const char* msg);
1101 #define assert_asm0(cc, msg) _assert_asm(cc, FILE_AND_LINE ": " msg)
1102 #define assert_asm(masm, command, cc, msg) DEBUG_ONLY(command; (masm)->_assert_asm(cc, FILE_AND_LINE ": " #command " " #cc ": " msg))
1103 
1104   // Stack overflow checking
1105   void bang_stack_with_offset(int offset) {
1106     // stack grows down, caller passes positive offset
1107     assert(offset > 0, "must bang with negative offset");
1108     sub(rscratch2, sp, offset);
1109     str(zr, Address(rscratch2));
1110   }

 920 
 921   void set_narrow_oop(Register dst, jobject obj);
 922 
 923   void encode_klass_not_null(Register r);
 924   void decode_klass_not_null(Register r);
 925   void encode_klass_not_null(Register dst, Register src);
 926   void decode_klass_not_null(Register dst, Register src);
 927 
 928   void set_narrow_klass(Register dst, Klass* k);
 929 
 930   // if heap base register is used - reinit it with the correct value
 931   void reinit_heapbase();
 932 
 933   DEBUG_ONLY(void verify_heapbase(const char* msg);)
 934 
 935   void push_CPU_state(bool save_vectors = false, bool use_sve = false,
 936                       int sve_vector_size_in_bytes = 0, int total_predicate_in_bytes = 0);
 937   void pop_CPU_state(bool restore_vectors = false, bool use_sve = false,
 938                      int sve_vector_size_in_bytes = 0, int total_predicate_in_bytes = 0);
 939 
 940   void push_cont_fastpath(Register java_thread = rthread);
 941   void pop_cont_fastpath(Register java_thread = rthread);
 942 
 943   void inc_held_monitor_count();
 944   void dec_held_monitor_count();
 945 
 946   // Round up to a power of two
 947   void round_to(Register reg, int modulus);
 948 
 949   // java.lang.Math::round intrinsics
 950   void java_round_double(Register dst, FloatRegister src, FloatRegister ftmp);
 951   void java_round_float(Register dst, FloatRegister src, FloatRegister ftmp);
 952 
 953   // allocation
 954   void tlab_allocate(
 955     Register obj,                      // result: pointer to object after successful allocation
 956     Register var_size_in_bytes,        // object size in bytes if unknown at compile time; invalid otherwise
 957     int      con_size_in_bytes,        // object size in bytes if   known at compile time
 958     Register t1,                       // temp register
 959     Register t2,                       // temp register
 960     Label&   slow_case                 // continuation point if fast allocation fails
 961   );
 962   void verify_tlab();
 963 
 964   // interface method calling

1074     if (VerifyOops) {
1075       _verify_oop_addr(reg, s, file, line);
1076     }
1077   }
1078 
1079 // TODO: verify method and klass metadata (compare against vptr?)
1080   void _verify_method_ptr(Register reg, const char * msg, const char * file, int line) {}
1081   void _verify_klass_ptr(Register reg, const char * msg, const char * file, int line){}
1082 
1083 #define verify_oop(reg) _verify_oop_checked(reg, "broken oop " #reg, __FILE__, __LINE__)
1084 #define verify_oop_msg(reg, msg) _verify_oop_checked(reg, "broken oop " #reg ", " #msg, __FILE__, __LINE__)
1085 #define verify_oop_addr(addr) _verify_oop_addr_checked(addr, "broken oop addr " #addr, __FILE__, __LINE__)
1086 #define verify_method_ptr(reg) _verify_method_ptr(reg, "broken method " #reg, __FILE__, __LINE__)
1087 #define verify_klass_ptr(reg) _verify_klass_ptr(reg, "broken klass " #reg, __FILE__, __LINE__)
1088 
1089   // Restore cpu control state after JNI call
1090   void restore_cpu_control_state_after_jni(Register tmp1, Register tmp2);
1091 
1092   // prints msg, dumps registers and stops execution
1093   void stop(const char* msg);
1094   void trace(const char* msg);
1095 
1096   static void debug64(char* msg, int64_t pc, int64_t regs[]);
1097 
1098   void untested()                                { stop("untested"); }
1099 
1100   void unimplemented(const char* what = "");
1101 
1102   void should_not_reach_here()                   { stop("should not reach here"); }
1103 
1104   void _assert_asm(Condition cc, const char* msg);
1105 #define assert_asm0(cc, msg) _assert_asm(cc, FILE_AND_LINE ": " msg)
1106 #define assert_asm(masm, command, cc, msg) DEBUG_ONLY(command; (masm)->_assert_asm(cc, FILE_AND_LINE ": " #command " " #cc ": " msg))
1107 
1108   // Stack overflow checking
1109   void bang_stack_with_offset(int offset) {
1110     // stack grows down, caller passes positive offset
1111     assert(offset > 0, "must bang with negative offset");
1112     sub(rscratch2, sp, offset);
1113     str(zr, Address(rscratch2));
1114   }
< prev index next >