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
|