< prev index next >

src/hotspot/cpu/x86/macroAssembler_x86.hpp

Print this page




  85  virtual void check_and_handle_earlyret(Register java_thread);
  86 
  87   Address as_Address(AddressLiteral adr);
  88   Address as_Address(ArrayAddress adr);
  89 
  90   // Support for NULL-checks
  91   //
  92   // Generates code that causes a NULL OS exception if the content of reg is NULL.
  93   // If the accessed location is M[reg + offset] and the offset is known, provide the
  94   // offset. No explicit code generation is needed if the offset is within a certain
  95   // range (0 <= offset <= page_size).
  96 
  97   void null_check(Register reg, int offset = -1);
  98   static bool needs_explicit_null_check(intptr_t offset);
  99 
 100   void test_klass_is_value(Register klass, Register temp_reg, Label& is_value);
 101 
 102   void test_field_is_flattenable(Register flags, Register temp_reg, Label& is_flattenable);
 103   void test_field_is_not_flattenable(Register flags, Register temp_reg, Label& notFlattenable);
 104   void test_field_is_flattened(Register flags, Register temp_reg, Label& is_flattened);
 105   void test_value_is_not_buffered(Register value, Register temp_reg, Label& not_buffered);
 106 
 107   // Check klass/oops is flat value type array (oop->_klass->_layout_helper & vt_bit)
 108   void test_flat_array_klass(Register klass, Register temp_reg, Label& is_flat_array);
 109   void test_flat_array_oop(Register oop, Register temp_reg, Label& is_flat_array);
 110 
 111   // Required platform-specific helpers for Label::patch_instructions.
 112   // They _shadow_ the declarations in AbstractAssembler, which are undefined.
 113   void pd_patch_instruction(address branch, address target, const char* file, int line) {
 114     unsigned char op = branch[0];
 115     assert(op == 0xE8 /* call */ ||
 116         op == 0xE9 /* jmp */ ||
 117         op == 0xEB /* short jmp */ ||
 118         (op & 0xF0) == 0x70 /* short jcc */ ||
 119         op == 0x0F && (branch[1] & 0xF0) == 0x80 /* jcc */ ||
 120         op == 0xC7 && branch[1] == 0xF8 /* xbegin */,
 121         "Invalid opcode at patch point");
 122 
 123     if (op == 0xEB || (op & 0xF0) == 0x70) {
 124       // short offset operators (jmp and jcc)
 125       char* disp = (char*) &branch[1];




  85  virtual void check_and_handle_earlyret(Register java_thread);
  86 
  87   Address as_Address(AddressLiteral adr);
  88   Address as_Address(ArrayAddress adr);
  89 
  90   // Support for NULL-checks
  91   //
  92   // Generates code that causes a NULL OS exception if the content of reg is NULL.
  93   // If the accessed location is M[reg + offset] and the offset is known, provide the
  94   // offset. No explicit code generation is needed if the offset is within a certain
  95   // range (0 <= offset <= page_size).
  96 
  97   void null_check(Register reg, int offset = -1);
  98   static bool needs_explicit_null_check(intptr_t offset);
  99 
 100   void test_klass_is_value(Register klass, Register temp_reg, Label& is_value);
 101 
 102   void test_field_is_flattenable(Register flags, Register temp_reg, Label& is_flattenable);
 103   void test_field_is_not_flattenable(Register flags, Register temp_reg, Label& notFlattenable);
 104   void test_field_is_flattened(Register flags, Register temp_reg, Label& is_flattened);

 105 
 106   // Check klass/oops is flat value type array (oop->_klass->_layout_helper & vt_bit)
 107   void test_flat_array_klass(Register klass, Register temp_reg, Label& is_flat_array);
 108   void test_flat_array_oop(Register oop, Register temp_reg, Label& is_flat_array);
 109 
 110   // Required platform-specific helpers for Label::patch_instructions.
 111   // They _shadow_ the declarations in AbstractAssembler, which are undefined.
 112   void pd_patch_instruction(address branch, address target, const char* file, int line) {
 113     unsigned char op = branch[0];
 114     assert(op == 0xE8 /* call */ ||
 115         op == 0xE9 /* jmp */ ||
 116         op == 0xEB /* short jmp */ ||
 117         (op & 0xF0) == 0x70 /* short jcc */ ||
 118         op == 0x0F && (branch[1] & 0xF0) == 0x80 /* jcc */ ||
 119         op == 0xC7 && branch[1] == 0xF8 /* xbegin */,
 120         "Invalid opcode at patch point");
 121 
 122     if (op == 0xEB || (op & 0xF0) == 0x70) {
 123       // short offset operators (jmp and jcc)
 124       char* disp = (char*) &branch[1];


< prev index next >