1113
1114 // Debugging
1115 void _verify_oop(Register reg, const char * msg, const char * file, int line);
1116 void _verify_oop_addr(Address addr, const char * msg, const char * file, int line);
1117
1118 // TODO: verify_method and klass metadata (compare against vptr?)
1119 void _verify_method_ptr(Register reg, const char * msg, const char * file, int line) {}
1120 void _verify_klass_ptr(Register reg, const char * msg, const char * file, int line){}
1121
1122 #define verify_oop(reg) _verify_oop(reg, "broken oop " #reg, __FILE__, __LINE__)
1123 #define verify_oop_addr(addr) _verify_oop_addr(addr, "broken oop addr ", __FILE__, __LINE__)
1124 #define verify_method_ptr(reg) _verify_method_ptr(reg, "broken method " #reg, __FILE__, __LINE__)
1125 #define verify_klass_ptr(reg) _verify_klass_ptr(reg, "broken klass " #reg, __FILE__, __LINE__)
1126
1127 // only if +VerifyOops
1128 void verify_FPU(int stack_depth, const char* s = "illegal FPU state");
1129 // only if +VerifyFPU
1130 void stop(const char* msg); // prints msg, dumps registers and stops execution
1131 void warn(const char* msg); // prints msg, but don't stop
1132 void untested(const char* what = "");
1133 void unimplemented(const char* what = "") { char* b = new char[1024]; jio_snprintf(b, 1024, "unimplemented: %s", what); stop(b); }
1134 void should_not_reach_here() { stop("should not reach here"); }
1135 void print_CPU_state();
1136
1137 // oops in code
1138 AddressLiteral allocate_oop_address(jobject obj); // allocate_index
1139 AddressLiteral constant_oop_address(jobject obj); // find_index
1140 inline void set_oop (jobject obj, Register d); // uses allocate_oop_address
1141 inline void set_oop_constant (jobject obj, Register d); // uses constant_oop_address
1142 inline void set_oop (const AddressLiteral& obj_addr, Register d); // same as load_address
1143
1144 // metadata in code that we have to keep track of
1145 AddressLiteral allocate_metadata_address(Metadata* obj); // allocate_index
1146 AddressLiteral constant_metadata_address(Metadata* obj); // find_index
1147 inline void set_metadata (Metadata* obj, Register d); // uses allocate_metadata_address
1148 inline void set_metadata_constant (Metadata* obj, Register d); // uses constant_metadata_address
1149 inline void set_metadata (const AddressLiteral& obj_addr, Register d); // same as load_address
1150
1151 void set_narrow_oop( jobject obj, Register d );
1152 void set_narrow_klass( Klass* k, Register d );
1153
|
1113
1114 // Debugging
1115 void _verify_oop(Register reg, const char * msg, const char * file, int line);
1116 void _verify_oop_addr(Address addr, const char * msg, const char * file, int line);
1117
1118 // TODO: verify_method and klass metadata (compare against vptr?)
1119 void _verify_method_ptr(Register reg, const char * msg, const char * file, int line) {}
1120 void _verify_klass_ptr(Register reg, const char * msg, const char * file, int line){}
1121
1122 #define verify_oop(reg) _verify_oop(reg, "broken oop " #reg, __FILE__, __LINE__)
1123 #define verify_oop_addr(addr) _verify_oop_addr(addr, "broken oop addr ", __FILE__, __LINE__)
1124 #define verify_method_ptr(reg) _verify_method_ptr(reg, "broken method " #reg, __FILE__, __LINE__)
1125 #define verify_klass_ptr(reg) _verify_klass_ptr(reg, "broken klass " #reg, __FILE__, __LINE__)
1126
1127 // only if +VerifyOops
1128 void verify_FPU(int stack_depth, const char* s = "illegal FPU state");
1129 // only if +VerifyFPU
1130 void stop(const char* msg); // prints msg, dumps registers and stops execution
1131 void warn(const char* msg); // prints msg, but don't stop
1132 void untested(const char* what = "");
1133 void unimplemented(const char* what = "");
1134 void should_not_reach_here() { stop("should not reach here"); }
1135 void print_CPU_state();
1136
1137 // oops in code
1138 AddressLiteral allocate_oop_address(jobject obj); // allocate_index
1139 AddressLiteral constant_oop_address(jobject obj); // find_index
1140 inline void set_oop (jobject obj, Register d); // uses allocate_oop_address
1141 inline void set_oop_constant (jobject obj, Register d); // uses constant_oop_address
1142 inline void set_oop (const AddressLiteral& obj_addr, Register d); // same as load_address
1143
1144 // metadata in code that we have to keep track of
1145 AddressLiteral allocate_metadata_address(Metadata* obj); // allocate_index
1146 AddressLiteral constant_metadata_address(Metadata* obj); // find_index
1147 inline void set_metadata (Metadata* obj, Register d); // uses allocate_metadata_address
1148 inline void set_metadata_constant (Metadata* obj, Register d); // uses constant_metadata_address
1149 inline void set_metadata (const AddressLiteral& obj_addr, Register d); // same as load_address
1150
1151 void set_narrow_oop( jobject obj, Register d );
1152 void set_narrow_klass( Klass* k, Register d );
1153
|