summaryrefslogtreecommitdiff
path: root/deps/v8/src/mips/macro-assembler-mips.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/mips/macro-assembler-mips.cc')
-rw-r--r--deps/v8/src/mips/macro-assembler-mips.cc76
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(