diff options
author | Brian Smith <brian@dbsoft.org> | 2023-09-18 01:10:07 -0500 |
---|---|---|
committer | Brian Smith <brian@dbsoft.org> | 2023-09-18 01:10:07 -0500 |
commit | dca8417ba7fdcf3db8de1c68bd92be54f3036d67 (patch) | |
tree | 37633bf8bff913e86732a10144fe391d00e983f5 /js/src | |
parent | 99184b1764286b99927adba7702620e29fb601f4 (diff) | |
download | uxp-dca8417ba7fdcf3db8de1c68bd92be54f3036d67.tar.gz |
Issue #2308 & #1240 Follow-up - Fill in missing JSOP_INC/DEC cases for Doubles in Ion.
Diffstat (limited to 'js/src')
-rw-r--r-- | js/src/jit/SharedIC.cpp | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/js/src/jit/SharedIC.cpp b/js/src/jit/SharedIC.cpp index 0afc7e12b5..d337534768 100644 --- a/js/src/jit/SharedIC.cpp +++ b/js/src/jit/SharedIC.cpp @@ -1570,12 +1570,8 @@ ICUnaryArith_Double::Compiler::generateStubCode(MacroAssembler& masm) Label failure; masm.ensureDouble(R0, FloatReg0, &failure); - MOZ_ASSERT(op == JSOP_NEG || op == JSOP_BITNOT); - - if (op == JSOP_NEG) { - masm.negateDouble(FloatReg0); - masm.boxDouble(FloatReg0, R0); - } else { + switch (op) { + case JSOP_BITNOT: { // Truncate the double to an int32. Register scratchReg = R1.scratchReg(); @@ -1593,6 +1589,24 @@ ICUnaryArith_Double::Compiler::generateStubCode(MacroAssembler& masm) masm.bind(&doneTruncate); masm.not32(scratchReg); masm.tagValue(JSVAL_TYPE_INT32, scratchReg, R0); + break; + } + case JSOP_NEG: + masm.negateDouble(FloatReg0); + masm.boxDouble(FloatReg0, R0); + break; + case JSOP_INC: + case JSOP_DEC: + masm.loadConstantDouble(1.0, ScratchDoubleReg); + if (op == JSOP_INC) { + masm.addDouble(ScratchDoubleReg, FloatReg0); + } else { + masm.subDouble(ScratchDoubleReg, FloatReg0); + } + masm.boxDouble(FloatReg0, R0); + break; + default: + MOZ_CRASH("Unexpected op"); } EmitReturnFromIC(masm); |