1037 virtual void check_and_handle_earlyret(Register java_thread);
1038
1039 void call_VM_helper(Register oop_result, address entry_point, int number_of_arguments, bool check_exceptions = true);
1040
1041 // helpers for FPU flag access
1042 // tmp is a temporary register, if none is available use noreg
1043 void save_rax (Register tmp);
1044 void restore_rax(Register tmp);
1045
1046 public:
1047 MacroAssembler(CodeBuffer* code) : Assembler(code) {}
1048
1049 // Support for NULL-checks
1050 //
1051 // Generates code that causes a NULL OS exception if the content of reg is NULL.
1052 // If the accessed location is M[reg + offset] and the offset is known, provide the
1053 // offset. No explicit code generation is needed if the offset is within a certain
1054 // range (0 <= offset <= page_size).
1055
1056 void null_check(Register reg, int offset = -1);
1057 static bool needs_explicit_null_check(int offset);
1058
1059 // Required platform-specific helpers for Label::patch_instructions.
1060 // They _shadow_ the declarations in AbstractAssembler, which are undefined.
1061 void pd_patch_instruction(address branch, address target);
1062 #ifndef PRODUCT
1063 static void pd_print_patched_instruction(address branch);
1064 #endif
1065
1066 // The following 4 methods return the offset of the appropriate move instruction
1067
1068 // Support for fast byte/word loading with zero extension (depending on particular CPU)
1069 int load_unsigned_byte(Register dst, Address src);
1070 int load_unsigned_word(Register dst, Address src);
1071
1072 // Support for fast byte/word loading with sign extension (depending on particular CPU)
1073 int load_signed_byte(Register dst, Address src);
1074 int load_signed_word(Register dst, Address src);
1075
1076 // Support for sign-extension (hi:lo = extend_sign(lo))
1077 void extend_sign(Register hi, Register lo);
|
1037 virtual void check_and_handle_earlyret(Register java_thread);
1038
1039 void call_VM_helper(Register oop_result, address entry_point, int number_of_arguments, bool check_exceptions = true);
1040
1041 // helpers for FPU flag access
1042 // tmp is a temporary register, if none is available use noreg
1043 void save_rax (Register tmp);
1044 void restore_rax(Register tmp);
1045
1046 public:
1047 MacroAssembler(CodeBuffer* code) : Assembler(code) {}
1048
1049 // Support for NULL-checks
1050 //
1051 // Generates code that causes a NULL OS exception if the content of reg is NULL.
1052 // If the accessed location is M[reg + offset] and the offset is known, provide the
1053 // offset. No explicit code generation is needed if the offset is within a certain
1054 // range (0 <= offset <= page_size).
1055
1056 void null_check(Register reg, int offset = -1);
1057 static bool needs_explicit_null_check(intptr_t offset);
1058
1059 // Required platform-specific helpers for Label::patch_instructions.
1060 // They _shadow_ the declarations in AbstractAssembler, which are undefined.
1061 void pd_patch_instruction(address branch, address target);
1062 #ifndef PRODUCT
1063 static void pd_print_patched_instruction(address branch);
1064 #endif
1065
1066 // The following 4 methods return the offset of the appropriate move instruction
1067
1068 // Support for fast byte/word loading with zero extension (depending on particular CPU)
1069 int load_unsigned_byte(Register dst, Address src);
1070 int load_unsigned_word(Register dst, Address src);
1071
1072 // Support for fast byte/word loading with sign extension (depending on particular CPU)
1073 int load_signed_byte(Register dst, Address src);
1074 int load_signed_word(Register dst, Address src);
1075
1076 // Support for sign-extension (hi:lo = extend_sign(lo))
1077 void extend_sign(Register hi, Register lo);
|