< prev index next >

src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp

Print this page

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



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

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

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

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

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