diff options
Diffstat (limited to 'src/3rdparty/v8/src/mips/assembler-mips.h')
-rw-r--r-- | src/3rdparty/v8/src/mips/assembler-mips.h | 46 |
1 files changed, 26 insertions, 20 deletions
diff --git a/src/3rdparty/v8/src/mips/assembler-mips.h b/src/3rdparty/v8/src/mips/assembler-mips.h index 84714e5..fd2ff0d 100644 --- a/src/3rdparty/v8/src/mips/assembler-mips.h +++ b/src/3rdparty/v8/src/mips/assembler-mips.h @@ -318,12 +318,15 @@ const FPURegister f31 = { 31 }; // Register aliases. // cp is assumed to be a callee saved register. -static const Register& kLithiumScratchReg = s3; // Scratch register. -static const Register& kLithiumScratchReg2 = s4; // Scratch register. -static const Register& kRootRegister = s6; // Roots array pointer. -static const Register& cp = s7; // JavaScript context pointer. -static const DoubleRegister& kLithiumScratchDouble = f30; -static const FPURegister& kDoubleRegZero = f28; +// Defined using #define instead of "static const Register&" because Clang +// complains otherwise when a compilation unit that includes this header +// doesn't use the variables. +#define kRootRegister s6 +#define cp s7 +#define kLithiumScratchReg s3 +#define kLithiumScratchReg2 s4 +#define kLithiumScratchDouble f30 +#define kDoubleRegZero f28 // FPU (coprocessor 1) control registers. // Currently only FCSR (#31) is implemented. @@ -522,9 +525,6 @@ class Assembler : public AssemblerBase { Assembler(Isolate* isolate, void* buffer, int buffer_size); ~Assembler(); - // Overrides the default provided by FLAG_debug_code. - void set_emit_debug_code(bool value) { emit_debug_code_ = value; } - // GetCode emits any pending (non-emitted) code and fills the descriptor // desc. GetCode() is idempotent; it returns the same result if no other // Assembler functions are invoked in between GetCode() calls. @@ -568,6 +568,10 @@ class Assembler : public AssemblerBase { static Address target_address_at(Address pc); static void set_target_address_at(Address pc, Address target); + // Return the code target address at a call site from the return address + // of that call in the instruction stream. + inline static Address target_address_from_return_address(Address pc); + static void JumpLabelToJumpRegister(Address pc); static void QuietNaN(HeapObject* nan); @@ -628,6 +632,8 @@ class Assembler : public AssemblerBase { // register. static const int kPcLoadDelta = 4; + static const int kPatchDebugBreakSlotReturnOffset = 4 * kInstrSize; + // Number of instructions used for the JS return sequence. The constant is // used by the debugger to patch the JS return sequence. static const int kJSReturnSequenceInstructions = 7; @@ -660,10 +666,13 @@ class Assembler : public AssemblerBase { FIRST_IC_MARKER = PROPERTY_ACCESS_INLINED }; - // Type == 0 is the default non-marking type. + // Type == 0 is the default non-marking nop. For mips this is a + // sll(zero_reg, zero_reg, 0). We use rt_reg == at for non-zero + // marking, to avoid conflict with ssnop and ehb instructions. void nop(unsigned int type = 0) { ASSERT(type < 32); - sll(zero_reg, zero_reg, type, true); + Register nop_rt_reg = (type == 0) ? zero_reg : at; + sll(zero_reg, nop_rt_reg, type, true); } @@ -909,17 +918,17 @@ class Assembler : public AssemblerBase { // Record the AST id of the CallIC being compiled, so that it can be placed // in the relocation information. - void SetRecordedAstId(unsigned ast_id) { - ASSERT(recorded_ast_id_ == kNoASTId); + void SetRecordedAstId(TypeFeedbackId ast_id) { + ASSERT(recorded_ast_id_.IsNone()); recorded_ast_id_ = ast_id; } - unsigned RecordedAstId() { - ASSERT(recorded_ast_id_ != kNoASTId); + TypeFeedbackId RecordedAstId() { + ASSERT(!recorded_ast_id_.IsNone()); return recorded_ast_id_; } - void ClearRecordedAstId() { recorded_ast_id_ = kNoASTId; } + void ClearRecordedAstId() { recorded_ast_id_ = TypeFeedbackId::None(); } // Record a comment relocation entry that can be used by a disassembler. // Use --code-comments to enable. @@ -1016,9 +1025,7 @@ class Assembler : public AssemblerBase { // Relocation for a type-recording IC has the AST id added to it. This // member variable is a way to pass the information from the call site to // the relocation info. - unsigned recorded_ast_id_; - - bool emit_debug_code() const { return emit_debug_code_; } + TypeFeedbackId recorded_ast_id_; int32_t buffer_space() const { return reloc_info_writer.pos() - pc_; } @@ -1270,7 +1277,6 @@ class Assembler : public AssemblerBase { friend class BlockTrampolinePoolScope; PositionsRecorder positions_recorder_; - bool emit_debug_code_; friend class PositionsRecorder; friend class EnsureSpace; }; |