1011 // as only the interpreter handles PopFrame and ForceEarlyReturn requests.
1012 virtual void check_and_handle_popframe(Register java_thread);
1013 virtual void check_and_handle_earlyret(Register java_thread);
1014
1015 void call_VM_helper(Register oop_result,
1016 address entry_point,
1017 int number_of_arguments,
1018 bool check_exceptions = true);
1019
1020 public:
1021 MacroAssembler(CodeBuffer* code) : Assembler(code) {}
1022
1023 // Support for NULL-checks
1024 //
1025 // Generates code that causes a NULL OS exception if the content of
1026 // reg is NULL. If the accessed location is M[reg + offset] and the
1027 // offset is known, provide the offset. No explicit code generation
1028 // is needed if the offset is within a certain range (0 <= offset <=
1029 // page_size).
1030 void null_check(Register reg, int offset = -1);
1031 static bool needs_explicit_null_check(int offset);
1032
1033 // Required platform-specific helpers for Label::patch_instructions.
1034 // They _shadow_ the declarations in AbstractAssembler, which are undefined.
1035 void pd_patch_instruction(address branch, address target);
1036 #ifndef PRODUCT
1037 static void pd_print_patched_instruction(address branch);
1038 #endif
1039
1040
1041 // The following 4 methods return the offset of the appropriate move
1042 // instruction. Note: these are 32 bit instructions
1043
1044 // Support for fast byte/word loading with zero extension (depending
1045 // on particular CPU)
1046 int load_unsigned_byte(Register dst, Address src);
1047 int load_unsigned_word(Register dst, Address src);
1048
1049 // Support for fast byte/word loading with sign extension (depending
1050 // on particular CPU)
1051 int load_signed_byte(Register dst, Address src);
|
1011 // as only the interpreter handles PopFrame and ForceEarlyReturn requests.
1012 virtual void check_and_handle_popframe(Register java_thread);
1013 virtual void check_and_handle_earlyret(Register java_thread);
1014
1015 void call_VM_helper(Register oop_result,
1016 address entry_point,
1017 int number_of_arguments,
1018 bool check_exceptions = true);
1019
1020 public:
1021 MacroAssembler(CodeBuffer* code) : Assembler(code) {}
1022
1023 // Support for NULL-checks
1024 //
1025 // Generates code that causes a NULL OS exception if the content of
1026 // reg is NULL. If the accessed location is M[reg + offset] and the
1027 // offset is known, provide the offset. No explicit code generation
1028 // is needed if the offset is within a certain range (0 <= offset <=
1029 // page_size).
1030 void null_check(Register reg, int offset = -1);
1031 static bool needs_explicit_null_check(intptr_t offset);
1032
1033 // Required platform-specific helpers for Label::patch_instructions.
1034 // They _shadow_ the declarations in AbstractAssembler, which are undefined.
1035 void pd_patch_instruction(address branch, address target);
1036 #ifndef PRODUCT
1037 static void pd_print_patched_instruction(address branch);
1038 #endif
1039
1040
1041 // The following 4 methods return the offset of the appropriate move
1042 // instruction. Note: these are 32 bit instructions
1043
1044 // Support for fast byte/word loading with zero extension (depending
1045 // on particular CPU)
1046 int load_unsigned_byte(Register dst, Address src);
1047 int load_unsigned_word(Register dst, Address src);
1048
1049 // Support for fast byte/word loading with sign extension (depending
1050 // on particular CPU)
1051 int load_signed_byte(Register dst, Address src);
|