340 void _verify_method_ptr(Register reg, const char * msg, const char * file, int line) {}
341 void _verify_klass_ptr(Register reg, const char * msg, const char * file, int line) {}
342
343 #define verify_oop(reg) _verify_oop(reg, "broken oop " #reg, __FILE__, __LINE__)
344 #define verify_oop_addr(addr) _verify_oop_addr(addr, "broken oop ", __FILE__, __LINE__)
345 #define verify_method_ptr(reg) _verify_method_ptr(reg, "broken method " #reg, __FILE__, __LINE__)
346 #define verify_klass_ptr(reg) _verify_klass_ptr(reg, "broken klass " #reg, __FILE__, __LINE__)
347
348 void null_check(Register reg, Register tmp, int offset = -1);
349 inline void null_check(Register reg) { null_check(reg, noreg, -1); } // for C1 lir_null_check
350
351 // Puts address of allocated object into register `obj` and end of allocated object into register `obj_end`.
352 void eden_allocate(Register obj, Register obj_end, Register tmp1, Register tmp2,
353 RegisterOrConstant size_expression, Label& slow_case);
354 void tlab_allocate(Register obj, Register obj_end, Register tmp1,
355 RegisterOrConstant size_expression, Label& slow_case);
356
357 void zero_memory(Register start, Register end, Register tmp);
358
359 static bool needs_explicit_null_check(intptr_t offset);
360
361 void arm_stack_overflow_check(int frame_size_in_bytes, Register tmp);
362 void arm_stack_overflow_check(Register Rsize, Register tmp);
363
364 void bang_stack_with_offset(int offset) {
365 ShouldNotReachHere();
366 }
367
368 // Biased locking support
369 // lock_reg and obj_reg must be loaded up with the appropriate values.
370 // swap_reg must be supplied.
371 // tmp_reg must be supplied.
372 // Optional slow case is for implementations (interpreter and C1) which branch to
373 // slow case directly. If slow_case is NULL, then leaves condition
374 // codes set (for C2's Fast_Lock node) and jumps to done label.
375 // Falls through for the fast locking attempt.
376 // Returns offset of first potentially-faulting instruction for null
377 // check info (currently consumed only by C1). If
378 // swap_reg_contains_mark is true then returns -1 as it is assumed
|
340 void _verify_method_ptr(Register reg, const char * msg, const char * file, int line) {}
341 void _verify_klass_ptr(Register reg, const char * msg, const char * file, int line) {}
342
343 #define verify_oop(reg) _verify_oop(reg, "broken oop " #reg, __FILE__, __LINE__)
344 #define verify_oop_addr(addr) _verify_oop_addr(addr, "broken oop ", __FILE__, __LINE__)
345 #define verify_method_ptr(reg) _verify_method_ptr(reg, "broken method " #reg, __FILE__, __LINE__)
346 #define verify_klass_ptr(reg) _verify_klass_ptr(reg, "broken klass " #reg, __FILE__, __LINE__)
347
348 void null_check(Register reg, Register tmp, int offset = -1);
349 inline void null_check(Register reg) { null_check(reg, noreg, -1); } // for C1 lir_null_check
350
351 // Puts address of allocated object into register `obj` and end of allocated object into register `obj_end`.
352 void eden_allocate(Register obj, Register obj_end, Register tmp1, Register tmp2,
353 RegisterOrConstant size_expression, Label& slow_case);
354 void tlab_allocate(Register obj, Register obj_end, Register tmp1,
355 RegisterOrConstant size_expression, Label& slow_case);
356
357 void zero_memory(Register start, Register end, Register tmp);
358
359 static bool needs_explicit_null_check(intptr_t offset);
360 static bool uses_implicit_null_check(void* address);
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
|
1077 };
1078
1079
1080 // The purpose of this class is to build several code fragments of the same size
1081 // in order to allow fast table branch.
1082
1083 class FixedSizeCodeBlock {
1084 public:
1085 FixedSizeCodeBlock(MacroAssembler* masm, int size_in_instrs, bool enabled);
1086 ~FixedSizeCodeBlock();
1087
1088 private:
1089 MacroAssembler* _masm;
1090 address _start;
1091 int _size_in_instrs;
1092 bool _enabled;
1093 };
1094
1095
1096 #endif // CPU_ARM_VM_MACROASSEMBLER_ARM_HPP
1097
|
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 |