"use strict"; // Generated by opcode_generator.rb from JavaScriptCore/b3/air/AirOpcode.opcodes -- do not edit! const Nop = Symbol("Nop"); const Add32 = Symbol("Add32"); const Add8 = Symbol("Add8"); const Add16 = Symbol("Add16"); const Add64 = Symbol("Add64"); const AddDouble = Symbol("AddDouble"); const AddFloat = Symbol("AddFloat"); const Sub32 = Symbol("Sub32"); const Sub64 = Symbol("Sub64"); const SubDouble = Symbol("SubDouble"); const SubFloat = Symbol("SubFloat"); const Neg32 = Symbol("Neg32"); const Neg64 = Symbol("Neg64"); const NegateDouble = Symbol("NegateDouble"); const Mul32 = Symbol("Mul32"); const Mul64 = Symbol("Mul64"); const MultiplyAdd32 = Symbol("MultiplyAdd32"); const MultiplyAdd64 = Symbol("MultiplyAdd64"); const MultiplySub32 = Symbol("MultiplySub32"); const MultiplySub64 = Symbol("MultiplySub64"); const MultiplyNeg32 = Symbol("MultiplyNeg32"); const MultiplyNeg64 = Symbol("MultiplyNeg64"); const Div32 = Symbol("Div32"); const Div64 = Symbol("Div64"); const MulDouble = Symbol("MulDouble"); const MulFloat = Symbol("MulFloat"); const DivDouble = Symbol("DivDouble"); const DivFloat = Symbol("DivFloat"); const X86ConvertToDoubleWord32 = Symbol("X86ConvertToDoubleWord32"); const X86ConvertToQuadWord64 = Symbol("X86ConvertToQuadWord64"); const X86Div32 = Symbol("X86Div32"); const X86Div64 = Symbol("X86Div64"); const Lea = Symbol("Lea"); const And32 = Symbol("And32"); const And64 = Symbol("And64"); const AndDouble = Symbol("AndDouble"); const AndFloat = Symbol("AndFloat"); const XorDouble = Symbol("XorDouble"); const XorFloat = Symbol("XorFloat"); const Lshift32 = Symbol("Lshift32"); const Lshift64 = Symbol("Lshift64"); const Rshift32 = Symbol("Rshift32"); const Rshift64 = Symbol("Rshift64"); const Urshift32 = Symbol("Urshift32"); const Urshift64 = Symbol("Urshift64"); const Or32 = Symbol("Or32"); const Or64 = Symbol("Or64"); const Xor32 = Symbol("Xor32"); const Xor64 = Symbol("Xor64"); const Not32 = Symbol("Not32"); const Not64 = Symbol("Not64"); const AbsDouble = Symbol("AbsDouble"); const AbsFloat = Symbol("AbsFloat"); const CeilDouble = Symbol("CeilDouble"); const CeilFloat = Symbol("CeilFloat"); const FloorDouble = Symbol("FloorDouble"); const FloorFloat = Symbol("FloorFloat"); const SqrtDouble = Symbol("SqrtDouble"); const SqrtFloat = Symbol("SqrtFloat"); const ConvertInt32ToDouble = Symbol("ConvertInt32ToDouble"); const ConvertInt64ToDouble = Symbol("ConvertInt64ToDouble"); const ConvertInt32ToFloat = Symbol("ConvertInt32ToFloat"); const ConvertInt64ToFloat = Symbol("ConvertInt64ToFloat"); const CountLeadingZeros32 = Symbol("CountLeadingZeros32"); const CountLeadingZeros64 = Symbol("CountLeadingZeros64"); const ConvertDoubleToFloat = Symbol("ConvertDoubleToFloat"); const ConvertFloatToDouble = Symbol("ConvertFloatToDouble"); const Move = Symbol("Move"); const Swap32 = Symbol("Swap32"); const Swap64 = Symbol("Swap64"); const Move32 = Symbol("Move32"); const StoreZero32 = Symbol("StoreZero32"); const SignExtend32ToPtr = Symbol("SignExtend32ToPtr"); const ZeroExtend8To32 = Symbol("ZeroExtend8To32"); const SignExtend8To32 = Symbol("SignExtend8To32"); const ZeroExtend16To32 = Symbol("ZeroExtend16To32"); const SignExtend16To32 = Symbol("SignExtend16To32"); const MoveFloat = Symbol("MoveFloat"); const MoveDouble = Symbol("MoveDouble"); const MoveZeroToDouble = Symbol("MoveZeroToDouble"); const Move64ToDouble = Symbol("Move64ToDouble"); const Move32ToFloat = Symbol("Move32ToFloat"); const MoveDoubleTo64 = Symbol("MoveDoubleTo64"); const MoveFloatTo32 = Symbol("MoveFloatTo32"); const Load8 = Symbol("Load8"); const Store8 = Symbol("Store8"); const Load8SignedExtendTo32 = Symbol("Load8SignedExtendTo32"); const Load16 = Symbol("Load16"); const Load16SignedExtendTo32 = Symbol("Load16SignedExtendTo32"); const Store16 = Symbol("Store16"); const Compare32 = Symbol("Compare32"); const Compare64 = Symbol("Compare64"); const Test32 = Symbol("Test32"); const Test64 = Symbol("Test64"); const CompareDouble = Symbol("CompareDouble"); const CompareFloat = Symbol("CompareFloat"); const Branch8 = Symbol("Branch8"); const Branch32 = Symbol("Branch32"); const Branch64 = Symbol("Branch64"); const BranchTest8 = Symbol("BranchTest8"); const BranchTest32 = Symbol("BranchTest32"); const BranchTest64 = Symbol("BranchTest64"); const BranchDouble = Symbol("BranchDouble"); const BranchFloat = Symbol("BranchFloat"); const BranchAdd32 = Symbol("BranchAdd32"); const BranchAdd64 = Symbol("BranchAdd64"); const BranchMul32 = Symbol("BranchMul32"); const BranchMul64 = Symbol("BranchMul64"); const BranchSub32 = Symbol("BranchSub32"); const BranchSub64 = Symbol("BranchSub64"); const BranchNeg32 = Symbol("BranchNeg32"); const BranchNeg64 = Symbol("BranchNeg64"); const MoveConditionally32 = Symbol("MoveConditionally32"); const MoveConditionally64 = Symbol("MoveConditionally64"); const MoveConditionallyTest32 = Symbol("MoveConditionallyTest32"); const MoveConditionallyTest64 = Symbol("MoveConditionallyTest64"); const MoveConditionallyDouble = Symbol("MoveConditionallyDouble"); const MoveConditionallyFloat = Symbol("MoveConditionallyFloat"); const MoveDoubleConditionally32 = Symbol("MoveDoubleConditionally32"); const MoveDoubleConditionally64 = Symbol("MoveDoubleConditionally64"); const MoveDoubleConditionallyTest32 = Symbol("MoveDoubleConditionallyTest32"); const MoveDoubleConditionallyTest64 = Symbol("MoveDoubleConditionallyTest64"); const MoveDoubleConditionallyDouble = Symbol("MoveDoubleConditionallyDouble"); const MoveDoubleConditionallyFloat = Symbol("MoveDoubleConditionallyFloat"); const Jump = Symbol("Jump"); const Ret32 = Symbol("Ret32"); const Ret64 = Symbol("Ret64"); const RetFloat = Symbol("RetFloat"); const RetDouble = Symbol("RetDouble"); const Oops = Symbol("Oops"); const Shuffle = Symbol("Shuffle"); const Patch = Symbol("Patch"); const CCall = Symbol("CCall"); const ColdCCall = Symbol("ColdCCall"); function Inst_forEachArg(inst, func) { let replacement; switch (inst.opcode) { case Nop: break; break; case Add32: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.ZDef, GP, 32); break; case 2: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.UseZDef, GP, 32); break; default: throw new Error("Bad overload"); break; } break; case Add8: inst.visitArg(0, func, Arg.Use, GP, 8); inst.visitArg(1, func, Arg.UseDef, GP, 8); break; break; case Add16: inst.visitArg(0, func, Arg.Use, GP, 16); inst.visitArg(1, func, Arg.UseDef, GP, 16); break; break; case Add64: switch (inst.args.length) { case 2: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.UseDef, GP, 64); break; case 3: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.Def, GP, 64); break; default: throw new Error("Bad overload"); break; } break; case AddDouble: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, FP, 64); inst.visitArg(1, func, Arg.Use, FP, 64); inst.visitArg(2, func, Arg.Def, FP, 64); break; case 2: inst.visitArg(0, func, Arg.Use, FP, 64); inst.visitArg(1, func, Arg.UseDef, FP, 64); break; default: throw new Error("Bad overload"); break; } break; case AddFloat: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, FP, 32); inst.visitArg(1, func, Arg.Use, FP, 32); inst.visitArg(2, func, Arg.Def, FP, 32); break; case 2: inst.visitArg(0, func, Arg.Use, FP, 32); inst.visitArg(1, func, Arg.UseDef, FP, 32); break; default: throw new Error("Bad overload"); break; } break; case Sub32: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.UseZDef, GP, 32); break; break; case Sub64: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.UseDef, GP, 64); break; break; case SubDouble: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, FP, 64); inst.visitArg(1, func, Arg.Use, FP, 64); inst.visitArg(2, func, Arg.Def, FP, 64); break; case 2: inst.visitArg(0, func, Arg.Use, FP, 64); inst.visitArg(1, func, Arg.UseDef, FP, 64); break; default: throw new Error("Bad overload"); break; } break; case SubFloat: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, FP, 32); inst.visitArg(1, func, Arg.Use, FP, 32); inst.visitArg(2, func, Arg.Def, FP, 32); break; case 2: inst.visitArg(0, func, Arg.Use, FP, 32); inst.visitArg(1, func, Arg.UseDef, FP, 32); break; default: throw new Error("Bad overload"); break; } break; case Neg32: inst.visitArg(0, func, Arg.UseZDef, GP, 32); break; break; case Neg64: inst.visitArg(0, func, Arg.UseDef, GP, 64); break; break; case NegateDouble: inst.visitArg(0, func, Arg.Use, FP, 64); inst.visitArg(1, func, Arg.Def, FP, 64); break; break; case Mul32: switch (inst.args.length) { case 2: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.UseZDef, GP, 32); break; case 3: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.ZDef, GP, 32); break; default: throw new Error("Bad overload"); break; } break; case Mul64: switch (inst.args.length) { case 2: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.UseDef, GP, 64); break; case 3: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.Def, GP, 64); break; default: throw new Error("Bad overload"); break; } break; case MultiplyAdd32: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.Use, GP, 32); inst.visitArg(3, func, Arg.ZDef, GP, 32); break; break; case MultiplyAdd64: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.Use, GP, 64); inst.visitArg(3, func, Arg.Def, GP, 64); break; break; case MultiplySub32: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.Use, GP, 32); inst.visitArg(3, func, Arg.ZDef, GP, 32); break; break; case MultiplySub64: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.Use, GP, 64); inst.visitArg(3, func, Arg.Def, GP, 64); break; break; case MultiplyNeg32: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.ZDef, GP, 32); break; break; case MultiplyNeg64: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.ZDef, GP, 64); break; break; case Div32: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.ZDef, GP, 32); break; break; case Div64: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.Def, GP, 64); break; break; case MulDouble: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, FP, 64); inst.visitArg(1, func, Arg.Use, FP, 64); inst.visitArg(2, func, Arg.Def, FP, 64); break; case 2: inst.visitArg(0, func, Arg.Use, FP, 64); inst.visitArg(1, func, Arg.UseDef, FP, 64); break; default: throw new Error("Bad overload"); break; } break; case MulFloat: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, FP, 32); inst.visitArg(1, func, Arg.Use, FP, 32); inst.visitArg(2, func, Arg.Def, FP, 32); break; case 2: inst.visitArg(0, func, Arg.Use, FP, 32); inst.visitArg(1, func, Arg.UseDef, FP, 32); break; default: throw new Error("Bad overload"); break; } break; case DivDouble: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, FP, 64); inst.visitArg(1, func, Arg.Use, FP, 32); inst.visitArg(2, func, Arg.Def, FP, 64); break; case 2: inst.visitArg(0, func, Arg.Use, FP, 64); inst.visitArg(1, func, Arg.UseDef, FP, 64); break; default: throw new Error("Bad overload"); break; } break; case DivFloat: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, FP, 32); inst.visitArg(1, func, Arg.Use, FP, 32); inst.visitArg(2, func, Arg.Def, FP, 32); break; case 2: inst.visitArg(0, func, Arg.Use, FP, 32); inst.visitArg(1, func, Arg.UseDef, FP, 32); break; default: throw new Error("Bad overload"); break; } break; case X86ConvertToDoubleWord32: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.ZDef, GP, 32); break; break; case X86ConvertToQuadWord64: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.Def, GP, 64); break; break; case X86Div32: inst.visitArg(0, func, Arg.UseZDef, GP, 32); inst.visitArg(1, func, Arg.UseZDef, GP, 32); inst.visitArg(2, func, Arg.Use, GP, 32); break; break; case X86Div64: inst.visitArg(0, func, Arg.UseZDef, GP, 64); inst.visitArg(1, func, Arg.UseZDef, GP, 64); inst.visitArg(2, func, Arg.Use, GP, 64); break; break; case Lea: inst.visitArg(0, func, Arg.UseAddr, GP, Ptr); inst.visitArg(1, func, Arg.Def, GP, Ptr); break; break; case And32: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.ZDef, GP, 32); break; case 2: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.UseZDef, GP, 32); break; default: throw new Error("Bad overload"); break; } break; case And64: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.Def, GP, 64); break; case 2: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.UseDef, GP, 64); break; default: throw new Error("Bad overload"); break; } break; case AndDouble: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, FP, 64); inst.visitArg(1, func, Arg.Use, FP, 64); inst.visitArg(2, func, Arg.Def, FP, 64); break; case 2: inst.visitArg(0, func, Arg.Use, FP, 64); inst.visitArg(1, func, Arg.UseDef, FP, 64); break; default: throw new Error("Bad overload"); break; } break; case AndFloat: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, FP, 32); inst.visitArg(1, func, Arg.Use, FP, 32); inst.visitArg(2, func, Arg.Def, FP, 32); break; case 2: inst.visitArg(0, func, Arg.Use, FP, 32); inst.visitArg(1, func, Arg.UseDef, FP, 32); break; default: throw new Error("Bad overload"); break; } break; case XorDouble: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, FP, 64); inst.visitArg(1, func, Arg.Use, FP, 64); inst.visitArg(2, func, Arg.Def, FP, 64); break; case 2: inst.visitArg(0, func, Arg.Use, FP, 64); inst.visitArg(1, func, Arg.UseDef, FP, 64); break; default: throw new Error("Bad overload"); break; } break; case XorFloat: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, FP, 32); inst.visitArg(1, func, Arg.Use, FP, 32); inst.visitArg(2, func, Arg.Def, FP, 32); break; case 2: inst.visitArg(0, func, Arg.Use, FP, 32); inst.visitArg(1, func, Arg.UseDef, FP, 32); break; default: throw new Error("Bad overload"); break; } break; case Lshift32: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.ZDef, GP, 32); break; case 2: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.UseZDef, GP, 32); break; default: throw new Error("Bad overload"); break; } break; case Lshift64: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.ZDef, GP, 64); break; case 2: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.UseDef, GP, 64); break; default: throw new Error("Bad overload"); break; } break; case Rshift32: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.ZDef, GP, 32); break; case 2: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.UseZDef, GP, 32); break; default: throw new Error("Bad overload"); break; } break; case Rshift64: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.ZDef, GP, 64); break; case 2: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.UseDef, GP, 64); break; default: throw new Error("Bad overload"); break; } break; case Urshift32: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.ZDef, GP, 32); break; case 2: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.UseZDef, GP, 32); break; default: throw new Error("Bad overload"); break; } break; case Urshift64: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.ZDef, GP, 64); break; case 2: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.UseDef, GP, 64); break; default: throw new Error("Bad overload"); break; } break; case Or32: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.ZDef, GP, 32); break; case 2: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.UseZDef, GP, 32); break; default: throw new Error("Bad overload"); break; } break; case Or64: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.Def, GP, 64); break; case 2: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.UseDef, GP, 64); break; default: throw new Error("Bad overload"); break; } break; case Xor32: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.ZDef, GP, 32); break; case 2: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.UseZDef, GP, 32); break; default: throw new Error("Bad overload"); break; } break; case Xor64: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.Def, GP, 64); break; case 2: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.UseDef, GP, 64); break; default: throw new Error("Bad overload"); break; } break; case Not32: switch (inst.args.length) { case 2: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.ZDef, GP, 32); break; case 1: inst.visitArg(0, func, Arg.UseZDef, GP, 32); break; default: throw new Error("Bad overload"); break; } break; case Not64: switch (inst.args.length) { case 2: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.Def, GP, 64); break; case 1: inst.visitArg(0, func, Arg.UseDef, GP, 64); break; default: throw new Error("Bad overload"); break; } break; case AbsDouble: inst.visitArg(0, func, Arg.Use, FP, 64); inst.visitArg(1, func, Arg.Def, FP, 64); break; break; case AbsFloat: inst.visitArg(0, func, Arg.Use, FP, 32); inst.visitArg(1, func, Arg.Def, FP, 32); break; break; case CeilDouble: inst.visitArg(0, func, Arg.Use, FP, 64); inst.visitArg(1, func, Arg.Def, FP, 64); break; break; case CeilFloat: inst.visitArg(0, func, Arg.Use, FP, 32); inst.visitArg(1, func, Arg.Def, FP, 32); break; break; case FloorDouble: inst.visitArg(0, func, Arg.Use, FP, 64); inst.visitArg(1, func, Arg.Def, FP, 64); break; break; case FloorFloat: inst.visitArg(0, func, Arg.Use, FP, 32); inst.visitArg(1, func, Arg.Def, FP, 32); break; break; case SqrtDouble: inst.visitArg(0, func, Arg.Use, FP, 64); inst.visitArg(1, func, Arg.Def, FP, 64); break; break; case SqrtFloat: inst.visitArg(0, func, Arg.Use, FP, 32); inst.visitArg(1, func, Arg.Def, FP, 32); break; break; case ConvertInt32ToDouble: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Def, FP, 64); break; break; case ConvertInt64ToDouble: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.Def, FP, 64); break; break; case ConvertInt32ToFloat: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Def, FP, 32); break; break; case ConvertInt64ToFloat: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.Def, FP, 32); break; break; case CountLeadingZeros32: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.ZDef, GP, 32); break; break; case CountLeadingZeros64: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.Def, GP, 64); break; break; case ConvertDoubleToFloat: inst.visitArg(0, func, Arg.Use, FP, 64); inst.visitArg(1, func, Arg.Def, FP, 32); break; break; case ConvertFloatToDouble: inst.visitArg(0, func, Arg.Use, FP, 32); inst.visitArg(1, func, Arg.Def, FP, 64); break; break; case Move: inst.visitArg(0, func, Arg.Use, GP, Ptr); inst.visitArg(1, func, Arg.Def, GP, Ptr); break; break; case Swap32: inst.visitArg(0, func, Arg.UseDef, GP, 32); inst.visitArg(1, func, Arg.UseDef, GP, 32); break; break; case Swap64: inst.visitArg(0, func, Arg.UseDef, GP, 64); inst.visitArg(1, func, Arg.UseDef, GP, 64); break; break; case Move32: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.ZDef, GP, 32); break; break; case StoreZero32: inst.visitArg(0, func, Arg.Use, GP, 32); break; break; case SignExtend32ToPtr: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Def, GP, Ptr); break; break; case ZeroExtend8To32: inst.visitArg(0, func, Arg.Use, GP, 8); inst.visitArg(1, func, Arg.ZDef, GP, 32); break; break; case SignExtend8To32: inst.visitArg(0, func, Arg.Use, GP, 8); inst.visitArg(1, func, Arg.ZDef, GP, 32); break; break; case ZeroExtend16To32: inst.visitArg(0, func, Arg.Use, GP, 16); inst.visitArg(1, func, Arg.ZDef, GP, 32); break; break; case SignExtend16To32: inst.visitArg(0, func, Arg.Use, GP, 16); inst.visitArg(1, func, Arg.ZDef, GP, 32); break; break; case MoveFloat: inst.visitArg(0, func, Arg.Use, FP, 32); inst.visitArg(1, func, Arg.Def, FP, 32); break; break; case MoveDouble: inst.visitArg(0, func, Arg.Use, FP, 64); inst.visitArg(1, func, Arg.Def, FP, 64); break; break; case MoveZeroToDouble: inst.visitArg(0, func, Arg.Def, FP, 64); break; break; case Move64ToDouble: inst.visitArg(0, func, Arg.Use, GP, 64); inst.visitArg(1, func, Arg.Def, FP, 64); break; break; case Move32ToFloat: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Def, FP, 32); break; break; case MoveDoubleTo64: inst.visitArg(0, func, Arg.Use, FP, 64); inst.visitArg(1, func, Arg.Def, GP, 64); break; break; case MoveFloatTo32: inst.visitArg(0, func, Arg.Use, FP, 32); inst.visitArg(1, func, Arg.Def, GP, 32); break; break; case Load8: inst.visitArg(0, func, Arg.Use, GP, 8); inst.visitArg(1, func, Arg.ZDef, GP, 32); break; break; case Store8: inst.visitArg(0, func, Arg.Use, GP, 8); inst.visitArg(1, func, Arg.Def, GP, 8); break; break; case Load8SignedExtendTo32: inst.visitArg(0, func, Arg.Use, GP, 8); inst.visitArg(1, func, Arg.ZDef, GP, 32); break; break; case Load16: inst.visitArg(0, func, Arg.Use, GP, 16); inst.visitArg(1, func, Arg.ZDef, GP, 32); break; break; case Load16SignedExtendTo32: inst.visitArg(0, func, Arg.Use, GP, 16); inst.visitArg(1, func, Arg.ZDef, GP, 32); break; break; case Store16: inst.visitArg(0, func, Arg.Use, GP, 16); inst.visitArg(1, func, Arg.Def, GP, 16); break; break; case Compare32: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.Use, GP, 32); inst.visitArg(3, func, Arg.ZDef, GP, 32); break; break; case Compare64: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.Use, GP, 64); inst.visitArg(3, func, Arg.ZDef, GP, 32); break; break; case Test32: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.Use, GP, 32); inst.visitArg(3, func, Arg.ZDef, GP, 32); break; break; case Test64: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.Use, GP, 64); inst.visitArg(3, func, Arg.ZDef, GP, 32); break; break; case CompareDouble: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, FP, 64); inst.visitArg(2, func, Arg.Use, FP, 64); inst.visitArg(3, func, Arg.ZDef, GP, 32); break; break; case CompareFloat: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, FP, 32); inst.visitArg(2, func, Arg.Use, FP, 32); inst.visitArg(3, func, Arg.ZDef, GP, 32); break; break; case Branch8: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 8); inst.visitArg(2, func, Arg.Use, GP, 8); break; break; case Branch32: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.Use, GP, 32); break; break; case Branch64: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.Use, GP, 64); break; break; case BranchTest8: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 8); inst.visitArg(2, func, Arg.Use, GP, 8); break; break; case BranchTest32: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.Use, GP, 32); break; break; case BranchTest64: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.Use, GP, 64); break; break; case BranchDouble: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, FP, 64); inst.visitArg(2, func, Arg.Use, FP, 64); break; break; case BranchFloat: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, FP, 32); inst.visitArg(2, func, Arg.Use, FP, 32); break; break; case BranchAdd32: switch (inst.args.length) { case 4: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.Use, GP, 32); inst.visitArg(3, func, Arg.ZDef, GP, 32); break; case 3: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.UseZDef, GP, 32); break; default: throw new Error("Bad overload"); break; } break; case BranchAdd64: switch (inst.args.length) { case 4: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.Use, GP, 64); inst.visitArg(3, func, Arg.ZDef, GP, 64); break; case 3: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.UseDef, GP, 64); break; default: throw new Error("Bad overload"); break; } break; case BranchMul32: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.UseZDef, GP, 32); break; case 4: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.Use, GP, 32); inst.visitArg(3, func, Arg.ZDef, GP, 32); break; case 6: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.Use, GP, 32); inst.visitArg(3, func, Arg.Scratch, GP, 32); inst.visitArg(4, func, Arg.Scratch, GP, 32); inst.visitArg(5, func, Arg.ZDef, GP, 32); break; default: throw new Error("Bad overload"); break; } break; case BranchMul64: switch (inst.args.length) { case 3: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.UseZDef, GP, 64); break; case 6: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.Use, GP, 64); inst.visitArg(3, func, Arg.Scratch, GP, 64); inst.visitArg(4, func, Arg.Scratch, GP, 64); inst.visitArg(5, func, Arg.ZDef, GP, 64); break; default: throw new Error("Bad overload"); break; } break; case BranchSub32: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.UseZDef, GP, 32); break; break; case BranchSub64: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.UseDef, GP, 64); break; break; case BranchNeg32: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.UseZDef, GP, 32); break; break; case BranchNeg64: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.UseZDef, GP, 64); break; break; case MoveConditionally32: switch (inst.args.length) { case 5: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.Use, GP, 32); inst.visitArg(3, func, Arg.Use, GP, Ptr); inst.visitArg(4, func, Arg.UseDef, GP, Ptr); break; case 6: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.Use, GP, 32); inst.visitArg(3, func, Arg.Use, GP, Ptr); inst.visitArg(4, func, Arg.Use, GP, Ptr); inst.visitArg(5, func, Arg.Def, GP, Ptr); break; default: throw new Error("Bad overload"); break; } break; case MoveConditionally64: switch (inst.args.length) { case 5: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.Use, GP, 64); inst.visitArg(3, func, Arg.Use, GP, Ptr); inst.visitArg(4, func, Arg.UseDef, GP, Ptr); break; case 6: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.Use, GP, 64); inst.visitArg(3, func, Arg.Use, GP, Ptr); inst.visitArg(4, func, Arg.Use, GP, Ptr); inst.visitArg(5, func, Arg.Def, GP, Ptr); break; default: throw new Error("Bad overload"); break; } break; case MoveConditionallyTest32: switch (inst.args.length) { case 5: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.Use, GP, 32); inst.visitArg(3, func, Arg.Use, GP, Ptr); inst.visitArg(4, func, Arg.UseDef, GP, Ptr); break; case 6: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.Use, GP, 32); inst.visitArg(3, func, Arg.Use, GP, Ptr); inst.visitArg(4, func, Arg.Use, GP, Ptr); inst.visitArg(5, func, Arg.Def, GP, Ptr); break; default: throw new Error("Bad overload"); break; } break; case MoveConditionallyTest64: switch (inst.args.length) { case 5: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.Use, GP, 64); inst.visitArg(3, func, Arg.Use, GP, Ptr); inst.visitArg(4, func, Arg.UseDef, GP, Ptr); break; case 6: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.Use, GP, 32); inst.visitArg(3, func, Arg.Use, GP, Ptr); inst.visitArg(4, func, Arg.Use, GP, Ptr); inst.visitArg(5, func, Arg.Def, GP, Ptr); break; default: throw new Error("Bad overload"); break; } break; case MoveConditionallyDouble: switch (inst.args.length) { case 6: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, FP, 64); inst.visitArg(2, func, Arg.Use, FP, 64); inst.visitArg(3, func, Arg.Use, GP, Ptr); inst.visitArg(4, func, Arg.Use, GP, Ptr); inst.visitArg(5, func, Arg.Def, GP, Ptr); break; case 5: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, FP, 64); inst.visitArg(2, func, Arg.Use, FP, 64); inst.visitArg(3, func, Arg.Use, GP, Ptr); inst.visitArg(4, func, Arg.UseDef, GP, Ptr); break; default: throw new Error("Bad overload"); break; } break; case MoveConditionallyFloat: switch (inst.args.length) { case 6: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, FP, 32); inst.visitArg(2, func, Arg.Use, FP, 32); inst.visitArg(3, func, Arg.Use, GP, Ptr); inst.visitArg(4, func, Arg.Use, GP, Ptr); inst.visitArg(5, func, Arg.Def, GP, Ptr); break; case 5: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, FP, 32); inst.visitArg(2, func, Arg.Use, FP, 32); inst.visitArg(3, func, Arg.Use, GP, Ptr); inst.visitArg(4, func, Arg.UseDef, GP, Ptr); break; default: throw new Error("Bad overload"); break; } break; case MoveDoubleConditionally32: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.Use, GP, 32); inst.visitArg(3, func, Arg.Use, FP, 64); inst.visitArg(4, func, Arg.Use, FP, 64); inst.visitArg(5, func, Arg.Def, FP, 64); break; break; case MoveDoubleConditionally64: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.Use, GP, 64); inst.visitArg(3, func, Arg.Use, FP, 64); inst.visitArg(4, func, Arg.Use, FP, 64); inst.visitArg(5, func, Arg.Def, FP, 64); break; break; case MoveDoubleConditionallyTest32: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 32); inst.visitArg(2, func, Arg.Use, GP, 32); inst.visitArg(3, func, Arg.Use, FP, 64); inst.visitArg(4, func, Arg.Use, FP, 64); inst.visitArg(5, func, Arg.Def, FP, 64); break; break; case MoveDoubleConditionallyTest64: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, GP, 64); inst.visitArg(2, func, Arg.Use, GP, 64); inst.visitArg(3, func, Arg.Use, FP, 64); inst.visitArg(4, func, Arg.Use, FP, 64); inst.visitArg(5, func, Arg.Def, FP, 64); break; break; case MoveDoubleConditionallyDouble: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, FP, 64); inst.visitArg(2, func, Arg.Use, FP, 64); inst.visitArg(3, func, Arg.Use, FP, 64); inst.visitArg(4, func, Arg.Use, FP, 64); inst.visitArg(5, func, Arg.Def, FP, 64); break; break; case MoveDoubleConditionallyFloat: inst.visitArg(0, func, Arg.Use, GP, 32); inst.visitArg(1, func, Arg.Use, FP, 32); inst.visitArg(2, func, Arg.Use, FP, 32); inst.visitArg(3, func, Arg.Use, FP, 64); inst.visitArg(4, func, Arg.Use, FP, 64); inst.visitArg(5, func, Arg.Def, FP, 64); break; break; case Jump: break; break; case Ret32: inst.visitArg(0, func, Arg.Use, GP, 32); break; break; case Ret64: inst.visitArg(0, func, Arg.Use, GP, 64); break; break; case RetFloat: inst.visitArg(0, func, Arg.Use, FP, 32); break; break; case RetDouble: inst.visitArg(0, func, Arg.Use, FP, 64); break; break; case Oops: break; break; case Shuffle: ShuffleCustom.forEachArg(inst, func); break; case Patch: PatchCustom.forEachArg(inst, func); break; case CCall: CCallCustom.forEachArg(inst, func); break; case ColdCCall: ColdCCallCustom.forEachArg(inst, func); break; default: throw "Bad opcode"; } } function Inst_hasNonArgEffects(inst) { switch (inst.opcode) { case Branch8: case Branch32: case Branch64: case BranchTest8: case BranchTest32: case BranchTest64: case BranchDouble: case BranchFloat: case BranchAdd32: case BranchAdd64: case BranchMul32: case BranchMul64: case BranchSub32: case BranchSub64: case BranchNeg32: case BranchNeg64: case Jump: case Ret32: case Ret64: case RetFloat: case RetDouble: case Oops: return true; case Shuffle: return ShuffleCustom.hasNonArgNonControlEffects(inst); case Patch: return PatchCustom.hasNonArgNonControlEffects(inst); case CCall: return CCallCustom.hasNonArgNonControlEffects(inst); case ColdCCall: return ColdCCallCustom.hasNonArgNonControlEffects(inst); default: return false; } } function opcodeCode(opcode) { switch (opcode) { case AbsDouble: return 0 case AbsFloat: return 1 case Add16: return 2 case Add32: return 3 case Add64: return 4 case Add8: return 5 case AddDouble: return 6 case AddFloat: return 7 case And32: return 8 case And64: return 9 case AndDouble: return 10 case AndFloat: return 11 case Branch32: return 12 case Branch64: return 13 case Branch8: return 14 case BranchAdd32: return 15 case BranchAdd64: return 16 case BranchDouble: return 17 case BranchFloat: return 18 case BranchMul32: return 19 case BranchMul64: return 20 case BranchNeg32: return 21 case BranchNeg64: return 22 case BranchSub32: return 23 case BranchSub64: return 24 case BranchTest32: return 25 case BranchTest64: return 26 case BranchTest8: return 27 case CCall: return 28 case CeilDouble: return 29 case CeilFloat: return 30 case ColdCCall: return 31 case Compare32: return 32 case Compare64: return 33 case CompareDouble: return 34 case CompareFloat: return 35 case ConvertDoubleToFloat: return 36 case ConvertFloatToDouble: return 37 case ConvertInt32ToDouble: return 38 case ConvertInt32ToFloat: return 39 case ConvertInt64ToDouble: return 40 case ConvertInt64ToFloat: return 41 case CountLeadingZeros32: return 42 case CountLeadingZeros64: return 43 case Div32: return 44 case Div64: return 45 case DivDouble: return 46 case DivFloat: return 47 case FloorDouble: return 48 case FloorFloat: return 49 case Jump: return 50 case Lea: return 51 case Load16: return 52 case Load16SignedExtendTo32: return 53 case Load8: return 54 case Load8SignedExtendTo32: return 55 case Lshift32: return 56 case Lshift64: return 57 case Move: return 58 case Move32: return 59 case Move32ToFloat: return 60 case Move64ToDouble: return 61 case MoveConditionally32: return 62 case MoveConditionally64: return 63 case MoveConditionallyDouble: return 64 case MoveConditionallyFloat: return 65 case MoveConditionallyTest32: return 66 case MoveConditionallyTest64: return 67 case MoveDouble: return 68 case MoveDoubleConditionally32: return 69 case MoveDoubleConditionally64: return 70 case MoveDoubleConditionallyDouble: return 71 case MoveDoubleConditionallyFloat: return 72 case MoveDoubleConditionallyTest32: return 73 case MoveDoubleConditionallyTest64: return 74 case MoveDoubleTo64: return 75 case MoveFloat: return 76 case MoveFloatTo32: return 77 case MoveZeroToDouble: return 78 case Mul32: return 79 case Mul64: return 80 case MulDouble: return 81 case MulFloat: return 82 case MultiplyAdd32: return 83 case MultiplyAdd64: return 84 case MultiplyNeg32: return 85 case MultiplyNeg64: return 86 case MultiplySub32: return 87 case MultiplySub64: return 88 case Neg32: return 89 case Neg64: return 90 case NegateDouble: return 91 case Nop: return 92 case Not32: return 93 case Not64: return 94 case Oops: return 95 case Or32: return 96 case Or64: return 97 case Patch: return 98 case Ret32: return 99 case Ret64: return 100 case RetDouble: return 101 case RetFloat: return 102 case Rshift32: return 103 case Rshift64: return 104 case Shuffle: return 105 case SignExtend16To32: return 106 case SignExtend32ToPtr: return 107 case SignExtend8To32: return 108 case SqrtDouble: return 109 case SqrtFloat: return 110 case Store16: return 111 case Store8: return 112 case StoreZero32: return 113 case Sub32: return 114 case Sub64: return 115 case SubDouble: return 116 case SubFloat: return 117 case Swap32: return 118 case Swap64: return 119 case Test32: return 120 case Test64: return 121 case Urshift32: return 122 case Urshift64: return 123 case X86ConvertToDoubleWord32: return 124 case X86ConvertToQuadWord64: return 125 case X86Div32: return 126 case X86Div64: return 127 case Xor32: return 128 case Xor64: return 129 case XorDouble: return 130 case XorFloat: return 131 case ZeroExtend16To32: return 132 case ZeroExtend8To32: return 133 default: throw new Error("bad opcode"); } }