1 # This Source Code Form is subject to the terms of the Mozilla Public
2 # License, v. 2.0. If a copy of the MPL was not distributed with this
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
5 # [SMDOC] CacheIR Opcodes
6 # =======================
7 # This file defines all CacheIR opcodes and their arguments.
9 # Each op has the following attributes:
13 # Opcode name. Convention is to use a name ending in *Result for ops that store
14 # to the IC's output register.
18 # If true, Baseline and Ion use the same CacheIRCompiler code for this op.
19 # If false, the op must be implemented in both BaselineCacheIRCompiler and
24 # Whether this op can be transpiled to MIR by WarpCacheIRTranspiler.
28 # Score of an individual CacheIR Opcode's contribution to the overall score for
29 # each stub. This score is based off of the cost of the masm calls made by the op's
30 # implementation. The higher the score the more costly the op is.
32 # How to decide the cost estimate for a CacheIROp:
33 # 0 points - Generates no code
34 # 1 point - 1-5 simple masm ops, no callVM or callWithABI
35 # 2 points - 5-20 masm ops, no callVM or callWithABI
36 # 3 points - 20+ masm ops, no callVM or callWithABI
37 # 4 points - callWithABI
39 # 6 points - more than one callWithABI or callVM
41 # In the case of the op not being shared, default to counting the Baseline
44 # If the cost estimate is different based off of what branch of a conditional
45 # is taken, assign the score of the branch with the highest cost.
48 # Currently, the scoring is tentative. It is in place to provide an
49 # estimate for the cost of each op. The scoring will be refined.
51 # custom_writer (optional)
52 # ========================
53 # If true, the generated CacheIRWriter method will be private and has a trailing
54 # '_'. This is useful for ops that need custom CacheIRWriter logic on top of the
59 # List of arguments encoded in the bytecode stream. There are three argument
62 # - Id (ObjId, ValId, ...): refers to either an IC input or a value defined by
63 # a previous CacheIR instruction. This is encoded as integer in the bytecode
66 # - Field (ObjectField, StringField, ...): specific value is stored in the stub
67 # data and the bytecode stream stores the offset of this field. This means the
68 # CacheIR is not specialized for particular values and code can be shared.
70 # - Immediate (BoolImm, Int32Imm, JSOpImm, ...): a value baked directly into
71 # the bytecode stream. This is useful for bits of state that need to be
72 # available to all CacheIR compilers/transpilers.
74 # If there's an argument named 'result', the generated CacheIRWriter method will
75 # return a new OperandId of this type.
91 - name: GuardIsNullOrUndefined
105 - name: GuardIsUndefined
112 - name: GuardIsNotUninitializedLexical
119 - name: GuardToBoolean
127 - name: GuardToString
135 - name: GuardToSymbol
143 - name: GuardToBigInt
151 - name: GuardIsNumber
167 - name: GuardToNonGCThing
174 # If the Value is a boolean, convert it to int32.
175 - name: GuardBooleanToInt32
183 - name: GuardToInt32Index
191 - name: Int32ToIntPtr
199 - name: GuardNumberToIntPtrIndex
208 - name: GuardToInt32ModUint32
216 - name: GuardToUint8Clamped
224 # Note: this doesn't accept doubles to avoid ambiguity about whether it includes
225 # int32 values. Use GuardIsNumber instead.
226 - name: GuardNonDoubleType
240 shape: WeakShapeField
242 - name: GuardMultipleShapes
257 proto: WeakObjectField
259 - name: GuardNullProto
266 # Guard per GuardClassKind.
273 kind: GuardClassKindImm
275 # Guard per GuardClassKind.
276 - name: GuardEitherClass
282 kind1: GuardClassKindImm
283 kind2: GuardClassKindImm
285 # Guard on a realm fuse.
291 fuseWord: RealmFuseIndexImm
293 # Guard on an arbitrary JSClass.
294 - name: GuardAnyClass
300 clasp: RawPointerField
302 - name: GuardGlobalGeneration
307 expected: RawInt32Field
308 generationAddr: RawPointerField
310 - name: HasClassResult
316 clasp: RawPointerField
318 - name: CallRegExpMatcherResult
328 - name: CallRegExpSearcherResult
338 - name: RegExpSearcherLastLimitResult
344 - name: RegExpHasCaptureGroupsResult
352 - name: RegExpBuiltinExecMatchResult
361 - name: RegExpBuiltinExecTestResult
370 - name: RegExpFlagResult
378 - name: CallSubstringKernelResult
387 - name: StringReplaceStringResult
394 replacement: StringId
396 - name: StringSplitStringResult
404 - name: RegExpPrototypeOptimizableResult
411 - name: RegExpInstanceOptimizableResult
419 - name: GetFirstDollarIndexResult
426 # Add a reference to a global in the compartment to keep it alive.
427 - name: GuardCompartment
434 compartment: RawPointerField
436 - name: GuardIsExtensible
443 - name: GuardIsNativeObject
457 - name: GuardIsNotProxy
464 - name: GuardIsNotArrayBufferMaybeShared
471 - name: GuardIsTypedArray
478 - name: GuardIsFixedLengthTypedArray
485 - name: GuardIsResizableTypedArray
492 - name: GuardHasProxyHandler
498 handler: RawPointerField
500 - name: GuardIsNotDOMProxy
507 - name: GuardSpecificObject
513 expected: WeakObjectField
515 - name: GuardObjectIdentity
523 - name: GuardSpecificFunction
530 expected: WeakObjectField
531 nargsAndFlags: RawInt32Field
533 - name: GuardFunctionScript
540 expected: WeakBaseScriptField
541 nargsAndFlags: RawInt32Field
543 - name: GuardSpecificAtom
551 - name: GuardSpecificSymbol
557 expected: SymbolField
559 - name: GuardSpecificInt32
567 - name: GuardNoDenseElements
574 - name: GuardStringToIndex
582 - name: GuardStringToInt32
590 - name: GuardStringToNumber
606 - name: BooleanToNumber
614 - name: GuardHasGetterSetter
621 getterSetter: WeakGetterSetterField
623 - name: GuardInt32IsNonNegative
630 - name: GuardIndexIsValidUpdateOrAdd
638 - name: GuardIndexIsNotDenseElement
646 - name: GuardTagNotEqual
654 - name: GuardXrayExpandoShapeAndDefaultProto
660 shapeWrapper: ObjectField
662 - name: GuardXrayNoExpando
669 # Guard obj[slot] == expected.
670 - name: GuardDynamicSlotIsSpecificObject
679 # Guard obj[slot] is not an object.
680 - name: GuardDynamicSlotIsNotObject
688 - name: GuardFixedSlotValue
694 offset: RawInt32Field
697 - name: GuardDynamicSlotValue
703 offset: RawInt32Field
706 - name: LoadScriptedProxyHandler
714 - name: IdToStringOrSymbol
722 - name: LoadFixedSlot
729 offset: RawInt32Field
731 - name: LoadDynamicSlot
740 - name: GuardNoAllocationMetadataBuilder
745 builderAddr: RawPointerField
747 - name: GuardFunctionHasJitEntry
753 constructing: BoolImm
755 - name: GuardFunctionHasNoJitEntry
762 - name: GuardFunctionIsNonBuiltinCtor
769 - name: GuardFunctionIsConstructor
776 - name: GuardNotClassConstructor
783 - name: GuardArrayIsPacked
790 - name: GuardArgumentsObjectFlags
806 # This is just LoadObject with extra information for the purpose of optimizing
807 # out shape guards if we're just storing to slots of the receiver object.
808 - name: LoadProtoObject
814 protoObj: ObjectField
825 - name: LoadEnclosingEnvironment
833 - name: LoadWrapperTarget
850 - name: LoadArgumentFixedSlot
859 - name: LoadArgumentDynamicSlot
869 - name: TruncateDoubleToUInt32
877 - name: DoubleToUint8Clamped
885 - name: MegamorphicLoadSlotResult
893 - name: MegamorphicLoadSlotByValueResult
901 - name: MegamorphicStoreSlot
911 - name: MegamorphicSetElement
921 - name: MegamorphicHasPropResult
930 # For the case where we have an object with a small number of properties,
931 # we can do better than a megamorphic hasprop if we just run through those
932 # IDs and check for atom pointer equality.
933 - name: SmallObjectVariableKeyHasOwnResult
938 # We don't actually need the object, because we only care about the shape,
939 # which was guarded before this
941 # We include the prop names to speed up and simplify the Baseline case,
942 # but only the shape is used from Ion to achieve an unrolled loop with
943 # comparisons to known atoms
944 propNames: ObjectField
947 - name: ObjectToIteratorResult
953 enumeratorsAddr: RawPointerField
955 - name: ValueToIteratorResult
962 # See CacheIR.cpp 'DOM proxies' comment.
963 - name: LoadDOMExpandoValue
971 - name: LoadDOMExpandoValueGuardGeneration
977 expandoAndGeneration: RawPointerField
978 generation: RawInt64Field
981 - name: LoadDOMExpandoValueIgnoreGeneration
989 - name: GuardDOMExpandoMissingOrGuardShape
997 - name: StoreFixedSlot
1003 offset: RawInt32Field
1006 - name: StoreDynamicSlot
1012 offset: RawInt32Field
1015 - name: AddAndStoreFixedSlot
1021 offset: RawInt32Field
1023 newShape: ShapeField
1025 - name: AddAndStoreDynamicSlot
1031 offset: RawInt32Field
1033 newShape: ShapeField
1035 - name: AllocateAndStoreDynamicSlot
1041 offset: RawInt32Field
1043 newShape: ShapeField
1044 numNewSlots: RawInt32Field
1046 - name: AddSlotAndCallAddPropHook
1053 newShape: ShapeField
1055 - name: StoreDenseElement
1064 - name: StoreDenseElementHole
1082 - name: ArrayJoinResult
1090 - name: ObjectKeysResult
1097 - name: PackedArrayPopResult
1104 - name: PackedArrayShiftResult
1111 - name: PackedArraySliceResult
1116 templateObject: ObjectField
1121 - name: ArgumentsSliceResult
1126 templateObject: ObjectField
1131 - name: IsArrayResult
1138 - name: StoreFixedSlotUndefinedResult
1143 offset: RawInt32Field
1146 - name: IsObjectResult
1153 - name: IsPackedArrayResult
1160 - name: IsCallableResult
1167 - name: IsConstructorResult
1174 - name: IsCrossRealmArrayConstructorResult
1181 - name: IsTypedArrayResult
1187 isPossiblyWrapped: BoolImm
1189 - name: IsTypedArrayConstructorResult
1196 - name: ArrayBufferViewByteOffsetInt32Result
1203 - name: ArrayBufferViewByteOffsetDoubleResult
1210 - name: ResizableTypedArrayByteOffsetMaybeOutOfBoundsInt32Result
1217 - name: ResizableTypedArrayByteOffsetMaybeOutOfBoundsDoubleResult
1224 - name: TypedArrayByteLengthInt32Result
1231 - name: TypedArrayByteLengthDoubleResult
1238 - name: ResizableTypedArrayByteLengthInt32Result
1245 - name: ResizableTypedArrayByteLengthDoubleResult
1252 - name: ResizableTypedArrayLengthInt32Result
1259 - name: ResizableTypedArrayLengthDoubleResult
1266 - name: TypedArrayElementSizeResult
1273 - name: ResizableDataViewByteLengthInt32Result
1280 - name: ResizableDataViewByteLengthDoubleResult
1287 - name: GrowableSharedArrayBufferByteLengthInt32Result
1294 - name: GrowableSharedArrayBufferByteLengthDoubleResult
1301 - name: GuardHasAttachedArrayBuffer
1308 - name: GuardResizableArrayBufferViewInBounds
1315 - name: GuardResizableArrayBufferViewInBoundsOrDetached
1322 - name: NewArrayIteratorResult
1327 templateObject: ObjectField
1329 - name: NewStringIteratorResult
1334 templateObject: ObjectField
1336 - name: NewRegExpStringIteratorResult
1341 templateObject: ObjectField
1343 - name: ObjectCreateResult
1348 templateObject: ObjectField
1350 - name: NewArrayFromLengthResult
1355 templateObject: ObjectField
1358 - name: NewTypedArrayFromLengthResult
1363 templateObject: ObjectField
1366 - name: NewTypedArrayFromArrayBufferResult
1371 templateObject: ObjectField
1376 - name: NewTypedArrayFromArrayResult
1381 templateObject: ObjectField
1384 - name: NewStringObjectResult
1389 templateObject: ObjectField
1392 - name: StringFromCharCodeResult
1399 - name: StringFromCodePointResult
1406 - name: StringIncludesResult
1414 - name: StringIndexOfResult
1422 - name: StringLastIndexOfResult
1430 - name: StringStartsWithResult
1438 - name: StringEndsWithResult
1446 - name: StringToLowerCaseResult
1453 - name: StringToUpperCaseResult
1460 - name: StringTrimResult
1467 - name: StringTrimStartResult
1474 - name: StringTrimEndResult
1481 - name: MathAbsInt32Result
1488 - name: MathAbsNumberResult
1495 - name: MathClz32Result
1502 - name: MathSignInt32Result
1509 - name: MathSignNumberResult
1516 - name: MathSignNumberToInt32Result
1523 - name: MathImulResult
1531 - name: MathSqrtNumberResult
1538 - name: MathFRoundNumberResult
1545 # Because Baseline stub code is shared by all realms in the Zone, this
1546 # instruction loads a pointer to the RNG from a stub field.
1547 - name: MathRandomResult
1552 rng: RawPointerField
1554 - name: MathHypot2NumberResult
1562 - name: MathHypot3NumberResult
1571 - name: MathHypot4NumberResult
1581 - name: MathAtan2NumberResult
1589 - name: MathFloorNumberResult
1596 - name: MathCeilNumberResult
1603 - name: MathTruncNumberResult
1610 - name: MathFloorToInt32Result
1617 - name: MathCeilToInt32Result
1624 - name: MathTruncToInt32Result
1630 - name: MathRoundToInt32Result
1647 - name: NumberMinMax
1657 - name: Int32MinMaxArrayResult
1665 - name: NumberMinMaxArrayResult
1673 - name: MathFunctionNumberResult
1679 fun: UnaryMathFunctionImm
1681 - name: NumberParseIntResult
1689 - name: DoubleParseIntResult
1696 - name: ObjectToStringResult
1703 - name: ReflectGetPrototypeOfResult
1710 - name: StoreTypedArrayElement
1716 elementType: ScalarTypeImm
1720 viewKind: ArrayBufferViewKindImm
1722 - name: AtomicsCompareExchangeResult
1731 elementType: ScalarTypeImm
1732 viewKind: ArrayBufferViewKindImm
1734 - name: AtomicsExchangeResult
1742 elementType: ScalarTypeImm
1743 viewKind: ArrayBufferViewKindImm
1745 - name: AtomicsAddResult
1753 elementType: ScalarTypeImm
1755 viewKind: ArrayBufferViewKindImm
1757 - name: AtomicsSubResult
1765 elementType: ScalarTypeImm
1767 viewKind: ArrayBufferViewKindImm
1769 - name: AtomicsAndResult
1777 elementType: ScalarTypeImm
1779 viewKind: ArrayBufferViewKindImm
1781 - name: AtomicsOrResult
1789 elementType: ScalarTypeImm
1791 viewKind: ArrayBufferViewKindImm
1793 - name: AtomicsXorResult
1801 elementType: ScalarTypeImm
1803 viewKind: ArrayBufferViewKindImm
1805 - name: AtomicsLoadResult
1812 elementType: ScalarTypeImm
1813 viewKind: ArrayBufferViewKindImm
1815 - name: AtomicsStoreResult
1823 elementType: ScalarTypeImm
1824 viewKind: ArrayBufferViewKindImm
1826 - name: AtomicsIsLockFreeResult
1833 - name: CallNativeSetter
1843 nargsAndFlags: RawInt32Field
1845 - name: CallScriptedSetter
1855 nargsAndFlags: RawInt32Field
1857 - name: CallInlinedSetter
1866 icScript: RawPointerField
1868 nargsAndFlags: RawInt32Field
1870 - name: CallDOMSetter
1876 jitInfo: RawPointerField
1879 - name: CallSetArrayLength
1898 - name: ProxySetByValue
1908 - name: CallAddOrUpdateSparseElementHelper
1918 - name: CallInt32ToString
1926 - name: CallNumberToString
1934 - name: Int32ToStringWithBaseResult
1942 - name: BooleanToString
1950 - name: CallScriptedFunction
1959 argcFixed: UInt32Imm
1961 - name: CallBoundScriptedFunction
1970 numBoundArgs: UInt32Imm
1972 - name: CallWasmFunction
1980 argcFixed: UInt32Imm
1981 funcExport: RawPointerField
1982 instance: ObjectField
1984 - name: GuardWasmArg
1990 type: WasmValTypeImm
1992 - name: CallNativeFunction
2001 argcFixed: UInt32Imm
2003 target: RawPointerField
2005 ignoresReturnValue: BoolImm
2008 - name: CallDOMFunction
2018 argcFixed: UInt32Imm
2020 target: RawPointerField
2023 - name: CallClassHook
2032 argcFixed: UInt32Imm
2033 target: RawPointerField
2035 - name: CallInlinedFunction
2043 icScript: RawPointerField
2045 argcFixed: UInt32Imm
2048 - name: CallScriptedProxyGetResult
2059 nargsAndFlags: UInt32Imm
2061 - name: CallScriptedProxyGetByValueResult
2072 nargsAndFlags: UInt32Imm
2075 # Meta ops generate no code, but contain data for the Warp Transpiler.
2076 - name: MetaScriptedThisShape
2082 thisShape: ShapeField
2084 - name: BindFunctionResult
2091 templateObject: ObjectField
2093 - name: SpecializedBindFunctionResult
2100 templateObject: ObjectField
2102 - name: LoadFixedSlotResult
2108 offset: RawInt32Field
2110 - name: LoadFixedSlotTypedResult
2116 offset: RawInt32Field
2119 - name: LoadDynamicSlotResult
2125 offset: RawInt32Field
2127 - name: LoadDenseElementResult
2135 - name: LoadDenseElementHoleResult
2143 - name: CallGetSparseElementResult
2151 - name: LoadDenseElementExistsResult
2159 - name: LoadTypedArrayElementExistsResult
2166 viewKind: ArrayBufferViewKindImm
2168 - name: LoadDenseElementHoleExistsResult
2176 - name: LoadTypedArrayElementResult
2183 elementType: ScalarTypeImm
2185 forceDoubleForUint32: BoolImm
2186 viewKind: ArrayBufferViewKindImm
2188 - name: LoadDataViewValueResult
2195 littleEndian: BooleanId
2196 elementType: ScalarTypeImm
2197 forceDoubleForUint32: BoolImm
2198 viewKind: ArrayBufferViewKindImm
2200 - name: StoreDataViewValueResult
2208 littleEndian: BooleanId
2209 elementType: ScalarTypeImm
2210 viewKind: ArrayBufferViewKindImm
2212 - name: LoadInt32ArrayLengthResult
2219 - name: LoadInt32ArrayLength
2227 - name: LoadArgumentsObjectArgResult
2235 - name: LoadArgumentsObjectArgHoleResult
2243 - name: LoadArgumentsObjectArgExistsResult
2251 - name: LoadArgumentsObjectLengthResult
2258 - name: LoadArgumentsObjectLength
2266 - name: LoadFunctionLengthResult
2273 - name: LoadFunctionNameResult
2280 - name: LoadBoundFunctionNumArgs
2288 - name: LoadBoundFunctionTarget
2296 - name: GuardBoundFunctionIsConstructor
2303 - name: LoadArrayBufferByteLengthInt32Result
2310 - name: LoadArrayBufferByteLengthDoubleResult
2317 - name: LoadArrayBufferViewLengthInt32Result
2324 - name: LoadArrayBufferViewLengthDoubleResult
2331 - name: LinearizeForCharAccess
2340 - name: LinearizeForCodePointAccess
2349 - name: ToRelativeStringIndex
2358 - name: LoadStringCharResult
2367 - name: LoadStringAtResult
2376 - name: LoadStringCharCodeResult
2385 - name: LoadStringCodePointResult
2394 - name: LoadStringLengthResult
2401 - name: FrameIsConstructingResult
2407 - name: LoadObjectResult
2414 - name: LoadStringResult
2421 - name: LoadSymbolResult
2428 - name: LoadInt32Result
2435 - name: LoadDoubleResult
2442 - name: LoadBigIntResult
2449 - name: CallScriptedGetterResult
2458 nargsAndFlags: RawInt32Field
2460 - name: CallInlinedGetterResult
2468 icScript: RawPointerField
2470 nargsAndFlags: RawInt32Field
2472 - name: CallNativeGetterResult
2481 nargsAndFlags: RawInt32Field
2483 - name: CallDOMGetterResult
2489 jitInfo: RawPointerField
2491 - name: ProxyGetResult
2499 - name: ProxyGetByValueResult
2507 - name: ProxyHasPropResult
2516 - name: CallObjectHasSparseElementResult
2524 - name: CallNativeGetElementResult
2532 - name: CallNativeGetElementSuperResult
2541 - name: GetNextMapSetEntryForIteratorResult
2550 - name: LoadUndefinedResult
2556 - name: LoadBooleanResult
2563 - name: LoadInt32Constant
2571 - name: LoadDoubleConstant
2579 - name: LoadBooleanConstant
2587 - name: LoadUndefined
2594 - name: LoadConstantString
2602 - name: LoadConstantStringResult
2609 - name: LoadInstanceOfObjectResult
2617 - name: LoadTypeOfObjectResult
2624 - name: DoubleAddResult
2632 - name: DoubleSubResult
2640 - name: DoubleMulResult
2648 - name: DoubleDivResult
2656 - name: DoubleModResult
2664 - name: DoublePowResult
2672 - name: Int32AddResult
2680 - name: Int32SubResult
2688 - name: Int32MulResult
2696 - name: Int32DivResult
2704 - name: Int32ModResult
2712 - name: Int32PowResult
2720 - name: BigIntAddResult
2728 - name: BigIntSubResult
2736 - name: BigIntMulResult
2744 - name: BigIntDivResult
2752 - name: BigIntModResult
2760 - name: BigIntPowResult
2768 - name: Int32BitOrResult
2776 - name: Int32BitXorResult
2784 - name: Int32BitAndResult
2792 - name: Int32LeftShiftResult
2800 - name: Int32RightShiftResult
2808 - name: Int32URightShiftResult
2815 forceDouble: BoolImm
2817 - name: Int32NotResult
2824 - name: BigIntBitOrResult
2832 - name: BigIntBitXorResult
2840 - name: BigIntBitAndResult
2848 - name: BigIntLeftShiftResult
2856 - name: BigIntRightShiftResult
2864 - name: BigIntNotResult
2871 - name: Int32NegationResult
2878 - name: DoubleNegationResult
2885 - name: BigIntNegationResult
2892 - name: Int32IncResult
2899 - name: Int32DecResult
2906 - name: DoubleIncResult
2913 - name: DoubleDecResult
2920 - name: BigIntIncResult
2927 - name: BigIntDecResult
2934 - name: LoadInt32TruthyResult
2941 - name: LoadDoubleTruthyResult
2948 - name: LoadStringTruthyResult
2955 - name: LoadObjectTruthyResult
2962 - name: LoadBigIntTruthyResult
2969 - name: LoadValueTruthyResult
2976 - name: LoadValueResult
2983 - name: LoadOperandResult
2990 - name: NewPlainObjectResult
2995 numFixedSlots: UInt32Imm
2996 numDynamicSlots: UInt32Imm
2997 allocKind: AllocKindImm
2999 site: AllocSiteField
3001 - name: NewArrayObjectResult
3006 arrayLength: UInt32Imm
3008 site: AllocSiteField
3010 - name: CallStringConcatResult
3018 - name: CallStringObjectConcatResult
3026 - name: CallIsSuspendedGeneratorResult
3033 - name: CompareStringResult
3042 - name: CompareObjectResult
3051 - name: CompareSymbolResult
3060 - name: CompareInt32Result
3069 - name: CompareDoubleResult
3078 - name: CompareBigIntResult
3087 - name: CompareBigIntInt32Result
3096 - name: CompareBigIntNumberResult
3105 - name: CompareBigIntStringResult
3114 - name: CompareNullUndefinedResult
3120 isUndefined: BoolImm
3123 - name: CompareDoubleSameValueResult
3131 - name: SameValueResult
3139 - name: IndirectTruncateInt32Result
3146 - name: BigIntAsIntNResult
3154 - name: BigIntAsUintNResult
3162 - name: SetHasResult
3170 - name: SetHasNonGCThingResult
3178 - name: SetHasStringResult
3186 - name: SetHasSymbolResult
3194 - name: SetHasBigIntResult
3202 - name: SetHasObjectResult
3210 - name: SetSizeResult
3217 - name: MapHasResult
3225 - name: MapHasNonGCThingResult
3233 - name: MapHasStringResult
3241 - name: MapHasSymbolResult
3249 - name: MapHasBigIntResult
3257 - name: MapHasObjectResult
3265 - name: MapGetResult
3273 - name: MapGetNonGCThingResult
3281 - name: MapGetStringResult
3289 - name: MapGetSymbolResult
3297 - name: MapGetBigIntResult
3305 - name: MapGetObjectResult
3313 - name: MapSizeResult
3320 - name: ArrayFromArgumentsObjectResult
3328 - name: CloseIterScriptedResult
3335 kind: CompletionKindImm
3336 targetNargs: UInt32Imm
3338 - name: CallPrintString
3343 str: StaticStringImm
3363 - name: AssertRecoveredOnBailoutResult
3369 mustBeRecovered: BoolImm
3371 - name: AssertPropertyLookup
3380 #ifdef FUZZING_JS_FUZZILLI
3381 - name: FuzzilliHashResult