From 1fc86397cb278889141f70165290783eac5bcbbb Mon Sep 17 00:00:00 2001 From: Dragan Mladjenovic Date: Thu, 1 Feb 2018 00:00:00 +0200 Subject: [PATCH] Bug 1434835 : Port changes from Bug 1432479; r=nbp. --- js/src/jit/mips32/MacroAssembler-mips32.cpp | 8 +++---- js/src/jit/mips32/MacroAssembler-mips32.h | 26 ++++++++++++++++----- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/js/src/jit/mips32/MacroAssembler-mips32.cpp b/js/src/jit/mips32/MacroAssembler-mips32.cpp index 206bb95bd967..d747d3df19e4 100644 --- a/js/src/jit/mips32/MacroAssembler-mips32.cpp +++ b/js/src/jit/mips32/MacroAssembler-mips32.cpp @@ -1264,20 +1264,20 @@ MacroAssemblerMIPSCompat::testUndefinedSet(Condition cond, const ValueOperand& v // unboxing code void -MacroAssemblerMIPSCompat::unboxNonDouble(const ValueOperand& operand, Register dest) +MacroAssemblerMIPSCompat::unboxNonDouble(const ValueOperand& operand, Register dest, JSValueType) { if (operand.payloadReg() != dest) ma_move(dest, operand.payloadReg()); } void -MacroAssemblerMIPSCompat::unboxNonDouble(const Address& src, Register dest) +MacroAssemblerMIPSCompat::unboxNonDouble(const Address& src, Register dest, JSValueType) { ma_lw(dest, Address(src.base, src.offset + PAYLOAD_OFFSET)); } void -MacroAssemblerMIPSCompat::unboxNonDouble(const BaseIndex& src, Register dest) +MacroAssemblerMIPSCompat::unboxNonDouble(const BaseIndex& src, Register dest, JSValueType) { computeScaledAddress(src, SecondScratchReg); ma_lw(dest, Address(SecondScratchReg, src.offset + PAYLOAD_OFFSET)); @@ -1348,7 +1348,7 @@ MacroAssemblerMIPSCompat::unboxObject(const Address& src, Register dest) } void -MacroAssemblerMIPSCompat::unboxValue(const ValueOperand& src, AnyRegister dest) +MacroAssemblerMIPSCompat::unboxValue(const ValueOperand& src, AnyRegister dest, JSValueType) { if (dest.isFloat()) { Label notInt32, end; diff --git a/js/src/jit/mips32/MacroAssembler-mips32.h b/js/src/jit/mips32/MacroAssembler-mips32.h index 5d988ed4cf78..9276aabd9034 100644 --- a/js/src/jit/mips32/MacroAssembler-mips32.h +++ b/js/src/jit/mips32/MacroAssembler-mips32.h @@ -333,9 +333,9 @@ class MacroAssemblerMIPSCompat : public MacroAssemblerMIPS } // unboxing code - void unboxNonDouble(const ValueOperand& operand, Register dest); - void unboxNonDouble(const Address& src, Register dest); - void unboxNonDouble(const BaseIndex& src, Register dest); + void unboxNonDouble(const ValueOperand& operand, Register dest, JSValueType); + void unboxNonDouble(const Address& src, Register dest, JSValueType); + void unboxNonDouble(const BaseIndex& src, Register dest, JSValueType); void unboxInt32(const ValueOperand& operand, Register dest); void unboxInt32(const Address& src, Register dest); void unboxBoolean(const ValueOperand& operand, Register dest); @@ -346,10 +346,18 @@ class MacroAssemblerMIPSCompat : public MacroAssemblerMIPS void unboxString(const Address& src, Register dest); void unboxObject(const ValueOperand& src, Register dest); void unboxObject(const Address& src, Register dest); - void unboxObject(const BaseIndex& src, Register dest) { unboxNonDouble(src, dest); } - void unboxValue(const ValueOperand& src, AnyRegister dest); + void unboxObject(const BaseIndex& src, Register dest) + { + unboxNonDouble(src, dest, JSVAL_TYPE_OBJECT); + } + void unboxValue(const ValueOperand& src, AnyRegister dest, JSValueType); void unboxPrivate(const ValueOperand& src, Register dest); + void unboxGCThingForPreBarrierTrampoline(const Address& src, Register dest) + { + unboxObject(src, dest); + } + void notBoolean(const ValueOperand& val) { as_xori(val.payloadReg(), val.payloadReg(), 1); } @@ -365,6 +373,12 @@ class MacroAssemblerMIPSCompat : public MacroAssemblerMIPS Register extractObject(const ValueOperand& value, Register scratch) { return value.payloadReg(); } + Register extractString(const ValueOperand& value, Register scratch) { + return value.payloadReg(); + } + Register extractSymbol(const ValueOperand& value, Register scratch) { + return value.payloadReg(); + } Register extractInt32(const ValueOperand& value, Register scratch) { return value.payloadReg(); } @@ -437,7 +451,7 @@ class MacroAssemblerMIPSCompat : public MacroAssemblerMIPS MIRType slotType); template - void storeUnboxedPayload(ValueOperand value, T address, size_t nbytes) { + void storeUnboxedPayload(ValueOperand value, T address, size_t nbytes, JSValueType) { switch (nbytes) { case 4: store32(value.payloadReg(), address);