diff options
Diffstat (limited to 'deps/v8/src/mips/macro-assembler-mips.cc')
-rw-r--r-- | deps/v8/src/mips/macro-assembler-mips.cc | 76 |
1 files changed, 41 insertions, 35 deletions
diff --git a/deps/v8/src/mips/macro-assembler-mips.cc b/deps/v8/src/mips/macro-assembler-mips.cc index de5de02f09..5c89467cd8 100644 --- a/deps/v8/src/mips/macro-assembler-mips.cc +++ b/deps/v8/src/mips/macro-assembler-mips.cc @@ -296,7 +296,7 @@ void MacroAssembler::RecordWrite(Register object, Register address, UseScratchRegisterScope temps(this); Register scratch = temps.Acquire(); lw(scratch, MemOperand(address)); - Assert(eq, kWrongAddressOrValuePassedToRecordWrite, scratch, + Assert(eq, AbortReason::kWrongAddressOrValuePassedToRecordWrite, scratch, Operand(value)); } @@ -825,7 +825,7 @@ void TurboAssembler::Ror(Register rd, Register rs, const Operand& rt) { if (rt.is_reg()) { rotrv(rd, rs, rt.rm()); } else { - rotr(rd, rs, rt.immediate() & 0x1f); + rotr(rd, rs, rt.immediate() & 0x1F); } } else { if (rt.is_reg()) { @@ -841,8 +841,8 @@ void TurboAssembler::Ror(Register rd, Register rs, const Operand& rt) { } else { UseScratchRegisterScope temps(this); Register scratch = temps.Acquire(); - srl(scratch, rs, rt.immediate() & 0x1f); - sll(rd, rs, (0x20 - (rt.immediate() & 0x1f)) & 0x1f); + srl(scratch, rs, rt.immediate() & 0x1F); + sll(rd, rs, (0x20 - (rt.immediate() & 0x1F)) & 0x1F); or_(rd, rd, scratch); } } @@ -3763,9 +3763,11 @@ void MacroAssembler::MaybeDropFrames() { void MacroAssembler::PushStackHandler() { // Adjust this code if not the case. - STATIC_ASSERT(StackHandlerConstants::kSize == 1 * kPointerSize); + STATIC_ASSERT(StackHandlerConstants::kSize == 2 * kPointerSize); STATIC_ASSERT(StackHandlerConstants::kNextOffset == 0 * kPointerSize); + Push(Smi::kZero); // Padding. + // Link the current handler as the next handler. li(t2, Operand(ExternalReference(IsolateAddressId::kHandlerAddress, isolate()))); @@ -3898,7 +3900,8 @@ void TurboAssembler::PrepareForTailCall(const ParameterCount& callee_args_count, } if (FLAG_debug_code) { - Check(lo, kStackAccessBelowStackPointer, src_reg, Operand(dst_reg)); + Check(lo, AbortReason::kStackAccessBelowStackPointer, src_reg, + Operand(dst_reg)); } // Restore caller's frame pointer and return address now as they will be @@ -4491,13 +4494,13 @@ void MacroAssembler::DecrementCounter(StatsCounter* counter, int value, // ----------------------------------------------------------------------------- // Debugging. -void TurboAssembler::Assert(Condition cc, BailoutReason reason, Register rs, +void TurboAssembler::Assert(Condition cc, AbortReason reason, Register rs, Operand rt) { if (emit_debug_code()) Check(cc, reason, rs, rt); } -void TurboAssembler::Check(Condition cc, BailoutReason reason, Register rs, +void TurboAssembler::Check(Condition cc, AbortReason reason, Register rs, Operand rt) { Label L; Branch(&L, cc, rs, rt); @@ -4506,11 +4509,11 @@ void TurboAssembler::Check(Condition cc, BailoutReason reason, Register rs, bind(&L); } -void TurboAssembler::Abort(BailoutReason reason) { +void TurboAssembler::Abort(AbortReason reason) { Label abort_start; bind(&abort_start); #ifdef DEBUG - const char* msg = GetBailoutReason(reason); + const char* msg = GetAbortReason(reason); if (msg != nullptr) { RecordComment("Abort message: "); RecordComment(msg); @@ -4823,7 +4826,7 @@ void MacroAssembler::AssertNotSmi(Register object) { UseScratchRegisterScope temps(this); Register scratch = temps.Acquire(); andi(scratch, object, kSmiTagMask); - Check(ne, kOperandIsASmi, scratch, Operand(zero_reg)); + Check(ne, AbortReason::kOperandIsASmi, scratch, Operand(zero_reg)); } } @@ -4834,7 +4837,7 @@ void MacroAssembler::AssertSmi(Register object) { UseScratchRegisterScope temps(this); Register scratch = temps.Acquire(); andi(scratch, object, kSmiTagMask); - Check(eq, kOperandIsASmi, scratch, Operand(zero_reg)); + Check(eq, AbortReason::kOperandIsASmi, scratch, Operand(zero_reg)); } } @@ -4842,9 +4845,11 @@ void MacroAssembler::AssertFixedArray(Register object) { if (emit_debug_code()) { STATIC_ASSERT(kSmiTag == 0); SmiTst(object, t8); - Check(ne, kOperandIsASmiAndNotAFixedArray, t8, Operand(zero_reg)); + Check(ne, AbortReason::kOperandIsASmiAndNotAFixedArray, t8, + Operand(zero_reg)); GetObjectType(object, t8, t8); - Check(eq, kOperandIsNotAFixedArray, t8, Operand(FIXED_ARRAY_TYPE)); + Check(eq, AbortReason::kOperandIsNotAFixedArray, t8, + Operand(FIXED_ARRAY_TYPE)); } } @@ -4852,9 +4857,11 @@ void MacroAssembler::AssertFunction(Register object) { if (emit_debug_code()) { STATIC_ASSERT(kSmiTag == 0); SmiTst(object, t8); - Check(ne, kOperandIsASmiAndNotAFunction, t8, Operand(zero_reg)); + Check(ne, AbortReason::kOperandIsASmiAndNotAFunction, t8, + Operand(zero_reg)); GetObjectType(object, t8, t8); - Check(eq, kOperandIsNotAFunction, t8, Operand(JS_FUNCTION_TYPE)); + Check(eq, AbortReason::kOperandIsNotAFunction, t8, + Operand(JS_FUNCTION_TYPE)); } } @@ -4863,9 +4870,11 @@ void MacroAssembler::AssertBoundFunction(Register object) { if (emit_debug_code()) { STATIC_ASSERT(kSmiTag == 0); SmiTst(object, t8); - Check(ne, kOperandIsASmiAndNotABoundFunction, t8, Operand(zero_reg)); + Check(ne, AbortReason::kOperandIsASmiAndNotABoundFunction, t8, + Operand(zero_reg)); GetObjectType(object, t8, t8); - Check(eq, kOperandIsNotABoundFunction, t8, Operand(JS_BOUND_FUNCTION_TYPE)); + Check(eq, AbortReason::kOperandIsNotABoundFunction, t8, + Operand(JS_BOUND_FUNCTION_TYPE)); } } @@ -4873,7 +4882,8 @@ void MacroAssembler::AssertGeneratorObject(Register object) { if (!emit_debug_code()) return; STATIC_ASSERT(kSmiTag == 0); SmiTst(object, t8); - Check(ne, kOperandIsASmiAndNotAGeneratorObject, t8, Operand(zero_reg)); + Check(ne, AbortReason::kOperandIsASmiAndNotAGeneratorObject, t8, + Operand(zero_reg)); GetObjectType(object, t8, t8); @@ -4885,7 +4895,7 @@ void MacroAssembler::AssertGeneratorObject(Register object) { // Check if JSAsyncGeneratorObject Branch(&done, eq, t8, Operand(JS_ASYNC_GENERATOR_OBJECT_TYPE)); - Abort(kOperandIsNotAGeneratorObject); + Abort(AbortReason::kOperandIsNotAGeneratorObject); bind(&done); } @@ -4899,7 +4909,7 @@ void MacroAssembler::AssertUndefinedOrAllocationSite(Register object, Branch(&done_checking, eq, object, Operand(scratch)); lw(t8, FieldMemOperand(object, HeapObject::kMapOffset)); LoadRoot(scratch, Heap::kAllocationSiteMapRootIndex); - Assert(eq, kExpectedUndefinedOrCell, t8, Operand(scratch)); + Assert(eq, AbortReason::kExpectedUndefinedOrCell, t8, Operand(scratch)); bind(&done_checking); } } @@ -5127,20 +5137,11 @@ void TurboAssembler::PrepareCallCFunction(int num_reg_arguments, void TurboAssembler::CallCFunction(ExternalReference function, int num_reg_arguments, int num_double_arguments) { - if (IsMipsArchVariant(kMips32r6)) { - uint32_t lui_offset, jialc_offset; - UnpackTargetAddressUnsigned(Operand(function).immediate(), lui_offset, - jialc_offset); - if (MustUseReg(Operand(function).rmode())) { - RecordRelocInfo(Operand(function).rmode(), Operand(function).immediate()); - } - lui(t9, lui_offset); - CallCFunctionHelper(t9, jialc_offset, num_reg_arguments, - num_double_arguments); - } else { - li(t9, Operand(function)); - CallCFunctionHelper(t9, 0, num_reg_arguments, num_double_arguments); - } + // Linux/MIPS convention demands that register t9 contains + // the address of the function being call in case of + // Position independent code + li(t9, Operand(function)); + CallCFunctionHelper(t9, 0, num_reg_arguments, num_double_arguments); } void TurboAssembler::CallCFunction(Register function, int num_reg_arguments, @@ -5197,6 +5198,11 @@ void TurboAssembler::CallCFunctionHelper(Register function_base, function_base = t9; } + if (function_offset != 0) { + addiu(t9, t9, function_offset); + function_offset = 0; + } + Call(function_base, function_offset); int stack_passed_arguments = CalculateStackPassedWords( |