< prev index next >

src/hotspot/cpu/arm/macroAssembler_arm.hpp

Print this page
rev 52430 : 8213199: GC abstraction for Assembler::needs_explicit_null_check()


 341   void _verify_method_ptr(Register reg, const char * msg, const char * file, int line) {}
 342   void _verify_klass_ptr(Register reg, const char * msg, const char * file, int line) {}
 343 
 344 #define verify_oop(reg) _verify_oop(reg, "broken oop " #reg, __FILE__, __LINE__)
 345 #define verify_oop_addr(addr) _verify_oop_addr(addr, "broken oop ", __FILE__, __LINE__)
 346 #define verify_method_ptr(reg) _verify_method_ptr(reg, "broken method " #reg, __FILE__, __LINE__)
 347 #define verify_klass_ptr(reg) _verify_klass_ptr(reg, "broken klass " #reg, __FILE__, __LINE__)
 348 
 349   void null_check(Register reg, Register tmp, int offset = -1);
 350   inline void null_check(Register reg) { null_check(reg, noreg, -1); } // for C1 lir_null_check
 351 
 352   // Puts address of allocated object into register `obj` and end of allocated object into register `obj_end`.
 353   void eden_allocate(Register obj, Register obj_end, Register tmp1, Register tmp2,
 354                      RegisterOrConstant size_expression, Label& slow_case);
 355   void tlab_allocate(Register obj, Register obj_end, Register tmp1,
 356                      RegisterOrConstant size_expression, Label& slow_case);
 357 
 358   void zero_memory(Register start, Register end, Register tmp);
 359 
 360   static bool needs_explicit_null_check(intptr_t offset);

 361 
 362   void arm_stack_overflow_check(int frame_size_in_bytes, Register tmp);
 363   void arm_stack_overflow_check(Register Rsize, Register tmp);
 364 
 365   void bang_stack_with_offset(int offset) {
 366     ShouldNotReachHere();
 367   }
 368 
 369   // Biased locking support
 370   // lock_reg and obj_reg must be loaded up with the appropriate values.
 371   // swap_reg must be supplied.
 372   // tmp_reg must be supplied.
 373   // Optional slow case is for implementations (interpreter and C1) which branch to
 374   // slow case directly. If slow_case is NULL, then leaves condition
 375   // codes set (for C2's Fast_Lock node) and jumps to done label.
 376   // Falls through for the fast locking attempt.
 377   // Returns offset of first potentially-faulting instruction for null
 378   // check info (currently consumed only by C1). If
 379   // swap_reg_contains_mark is true then returns -1 as it is assumed
 380   // the calling code has already passed any potential faults.


1078 };
1079 
1080 
1081 // The purpose of this class is to build several code fragments of the same size
1082 // in order to allow fast table branch.
1083 
1084 class FixedSizeCodeBlock {
1085 public:
1086   FixedSizeCodeBlock(MacroAssembler* masm, int size_in_instrs, bool enabled);
1087   ~FixedSizeCodeBlock();
1088 
1089 private:
1090   MacroAssembler* _masm;
1091   address _start;
1092   int _size_in_instrs;
1093   bool _enabled;
1094 };
1095 
1096 
1097 #endif // CPU_ARM_VM_MACROASSEMBLER_ARM_HPP
1098 


 341   void _verify_method_ptr(Register reg, const char * msg, const char * file, int line) {}
 342   void _verify_klass_ptr(Register reg, const char * msg, const char * file, int line) {}
 343 
 344 #define verify_oop(reg) _verify_oop(reg, "broken oop " #reg, __FILE__, __LINE__)
 345 #define verify_oop_addr(addr) _verify_oop_addr(addr, "broken oop ", __FILE__, __LINE__)
 346 #define verify_method_ptr(reg) _verify_method_ptr(reg, "broken method " #reg, __FILE__, __LINE__)
 347 #define verify_klass_ptr(reg) _verify_klass_ptr(reg, "broken klass " #reg, __FILE__, __LINE__)
 348 
 349   void null_check(Register reg, Register tmp, int offset = -1);
 350   inline void null_check(Register reg) { null_check(reg, noreg, -1); } // for C1 lir_null_check
 351 
 352   // Puts address of allocated object into register `obj` and end of allocated object into register `obj_end`.
 353   void eden_allocate(Register obj, Register obj_end, Register tmp1, Register tmp2,
 354                      RegisterOrConstant size_expression, Label& slow_case);
 355   void tlab_allocate(Register obj, Register obj_end, Register tmp1,
 356                      RegisterOrConstant size_expression, Label& slow_case);
 357 
 358   void zero_memory(Register start, Register end, Register tmp);
 359 
 360   static bool needs_explicit_null_check(intptr_t offset);
 361   static bool uses_implicit_null_check(void* address);
 362 
 363   void arm_stack_overflow_check(int frame_size_in_bytes, Register tmp);
 364   void arm_stack_overflow_check(Register Rsize, Register tmp);
 365 
 366   void bang_stack_with_offset(int offset) {
 367     ShouldNotReachHere();
 368   }
 369 
 370   // Biased locking support
 371   // lock_reg and obj_reg must be loaded up with the appropriate values.
 372   // swap_reg must be supplied.
 373   // tmp_reg must be supplied.
 374   // Optional slow case is for implementations (interpreter and C1) which branch to
 375   // slow case directly. If slow_case is NULL, then leaves condition
 376   // codes set (for C2's Fast_Lock node) and jumps to done label.
 377   // Falls through for the fast locking attempt.
 378   // Returns offset of first potentially-faulting instruction for null
 379   // check info (currently consumed only by C1). If
 380   // swap_reg_contains_mark is true then returns -1 as it is assumed
 381   // the calling code has already passed any potential faults.


1079 };
1080 
1081 
1082 // The purpose of this class is to build several code fragments of the same size
1083 // in order to allow fast table branch.
1084 
1085 class FixedSizeCodeBlock {
1086 public:
1087   FixedSizeCodeBlock(MacroAssembler* masm, int size_in_instrs, bool enabled);
1088   ~FixedSizeCodeBlock();
1089 
1090 private:
1091   MacroAssembler* _masm;
1092   address _start;
1093   int _size_in_instrs;
1094   bool _enabled;
1095 };
1096 
1097 
1098 #endif // CPU_ARM_VM_MACROASSEMBLER_ARM_HPP

< prev index next >