diff --git a/Source/JavaScriptCore/assembler/MacroAssemblerARM64.h b/Source/JavaScriptCore/assembler/MacroAssemblerARM64.h index 95f186c028c3..d8f645d692ce 100644 --- a/Source/JavaScriptCore/assembler/MacroAssemblerARM64.h +++ b/Source/JavaScriptCore/assembler/MacroAssemblerARM64.h @@ -4023,6 +4023,7 @@ class MacroAssemblerARM64 : public AbstractMacroAssembler { Jump branchAdd64(RelationalCondition cond, TrustedImm32 imm, RegisterID dest) { + // This is not supporting -imm.m_value UInt12. Thus we are not listing BranchAdd64 RelCond, Imm, Tmp in AirOpcode.opcodes. ASSERT(isUInt12(imm.m_value)); m_assembler.add<64, S>(dest, dest, UInt12(imm.m_value)); return Jump(makeBranch(cond)); @@ -4175,12 +4176,12 @@ class MacroAssemblerARM64 : public AbstractMacroAssembler { Jump branchSub64(RelationalCondition cond, TrustedImm32 imm, RegisterID dest) { + // This is not supporting -imm.m_value UInt12. Thus we are not listing BranchSub64 RelCond, Imm, Tmp in AirOpcode.opcodes. ASSERT(isUInt12(imm.m_value)); m_assembler.sub<64, S>(dest, dest, UInt12(imm.m_value)); return Jump(makeBranch(cond)); } - // Jumps, calls, returns // duplicate MacroAssembler's loadPtr for loading call targets. diff --git a/Source/JavaScriptCore/b3/B3MoveConstants.cpp b/Source/JavaScriptCore/b3/B3MoveConstants.cpp index 2dcb2dcacf27..bc50cb41e744 100644 --- a/Source/JavaScriptCore/b3/B3MoveConstants.cpp +++ b/Source/JavaScriptCore/b3/B3MoveConstants.cpp @@ -217,8 +217,6 @@ class MoveConstants { int64_t addendConst = addend->asInt(); if (Air::Arg::isValidImmForm(addendConst)) break; - if (addendConst != INT64_MIN && Air::Arg::isValidImmForm(-addendConst)) - break; Value* bestAddend = findBestConstant( [&] (Value* candidateAddend) -> bool { if (candidateAddend->type() != addend->type()) diff --git a/Source/JavaScriptCore/b3/air/AirArg.h b/Source/JavaScriptCore/b3/air/AirArg.h index 9ed1286fc950..d12a573d2181 100644 --- a/Source/JavaScriptCore/b3/air/AirArg.h +++ b/Source/JavaScriptCore/b3/air/AirArg.h @@ -1269,8 +1269,13 @@ class Arg { { if (isX86()) return B3::isRepresentableAs(value); - if (isARM64()) - return isUInt12(value); + if (isARM64()) { + if (isUInt12(value)) + return true; + if (value == INT64_MIN) + return isUInt12(INT64_MIN); + return isUInt12(-value); + } if (isARM_THUMB2()) return isValidARMThumb2Immediate(value); return false;