Bug 1890750 - Part 1: Include NATIVE_JIT_ENTRY in FunctionFlags::HasJitEntryFlags...
[gecko.git] / js / src / jit / CacheIROps.yaml
blobea9adde9be8214e6c9ee8cae3ab06c8e6991e703
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:
11 # name
12 # ====
13 # Opcode name. Convention is to use a name ending in *Result for ops that store
14 # to the IC's output register.
16 # shared
17 # ======
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
20 # IonCacheIRCompiler.
22 # transpile
23 # =========
24 # Whether this op can be transpiled to MIR by WarpCacheIRTranspiler.
26 # cost_estimate
27 # =========
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
38 # 5 points - callVM
39 # 6 points - more than one callWithABI or callVM
41 # In the case of the op not being shared, default to counting the Baseline
42 # implementation.
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.
47 # Note:
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
55 # generated code.
57 # args
58 # ====
59 # List of arguments encoded in the bytecode stream. There are three argument
60 # kinds:
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
64 #   stream.
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.
77 - name: ReturnFromIC
78   shared: false
79   transpile: true
80   cost_estimate: 1
81   args:
83 - name: GuardToObject
84   shared: true
85   transpile: true
86   cost_estimate: 1
87   custom_writer: true
88   args:
89     input: ValId
91 - name: GuardIsNullOrUndefined
92   shared: true
93   transpile: true
94   cost_estimate: 1
95   args:
96     input: ValId
98 - name: GuardIsNull
99   shared: true
100   transpile: true
101   cost_estimate: 1
102   args:
103     input: ValId
105 - name: GuardIsUndefined
106   shared: true
107   transpile: true
108   cost_estimate: 1
109   args:
110     input: ValId
112 - name: GuardIsNotUninitializedLexical
113   shared: true
114   transpile: true
115   cost_estimate: 1
116   args:
117     val: ValId
119 - name: GuardToBoolean
120   shared: true
121   transpile: true
122   cost_estimate: 1
123   custom_writer: true
124   args:
125     input: ValId
127 - name: GuardToString
128   shared: true
129   transpile: true
130   cost_estimate: 1
131   custom_writer: true
132   args:
133     input: ValId
135 - name: GuardToSymbol
136   shared: true
137   transpile: true
138   cost_estimate: 1
139   custom_writer: true
140   args:
141     input: ValId
143 - name: GuardToBigInt
144   shared: true
145   transpile: true
146   cost_estimate: 1
147   custom_writer: true
148   args:
149     input: ValId
151 - name: GuardIsNumber
152   shared: true
153   transpile: true
154   cost_estimate: 1
155   custom_writer: true
156   args:
157     input: ValId
159 - name: GuardToInt32
160   shared: true
161   transpile: true
162   cost_estimate: 1
163   custom_writer: true
164   args:
165     input: ValId
167 - name: GuardToNonGCThing
168   shared: true
169   transpile: true
170   cost_estimate: 1
171   args:
172     input: ValId
174 # If the Value is a boolean, convert it to int32.
175 - name: GuardBooleanToInt32
176   shared: true
177   transpile: true
178   cost_estimate: 1
179   args:
180     input: ValId
181     result: Int32Id
183 - name: GuardToInt32Index
184   shared: true
185   transpile: true
186   cost_estimate: 1
187   args:
188     input: ValId
189     result: Int32Id
191 - name: Int32ToIntPtr
192   shared: true
193   transpile: true
194   cost_estimate: 1
195   args:
196     input: Int32Id
197     result: IntPtrId
199 - name: GuardNumberToIntPtrIndex
200   shared: true
201   transpile: true
202   cost_estimate: 2
203   args:
204     input: NumberId
205     supportOOB: BoolImm
206     result: IntPtrId
208 - name: GuardToInt32ModUint32
209   shared: true
210   transpile: true
211   cost_estimate: 2
212   args:
213     input: ValId
214     result: Int32Id
216 - name: GuardToUint8Clamped
217   shared: true
218   transpile: true
219   cost_estimate: 2
220   args:
221     input: ValId
222     result: Int32Id
224 # Note: this doesn't accept doubles to avoid ambiguity about whether it includes
225 # int32 values. Use GuardIsNumber instead.
226 - name: GuardNonDoubleType
227   shared: true
228   transpile: true
229   cost_estimate: 1
230   args:
231     input: ValId
232     type: ValueTypeImm
234 - name: GuardShape
235   shared: false
236   transpile: true
237   cost_estimate: 1
238   args:
239     obj: ObjId
240     shape: WeakShapeField
242 - name: GuardMultipleShapes
243   shared: true
244   transpile: true
245   cost_estimate: 2
246   custom_writer: true
247   args:
248     obj: ObjId
249     shapes: ObjectField
251 - name: GuardProto
252   shared: false
253   transpile: true
254   cost_estimate: 1
255   args:
256     obj: ObjId
257     proto: WeakObjectField
259 - name: GuardNullProto
260   shared: true
261   transpile: true
262   cost_estimate: 1
263   args:
264     obj: ObjId
266 # Guard per GuardClassKind.
267 - name: GuardClass
268   shared: true
269   transpile: true
270   cost_estimate: 1
271   args:
272     obj: ObjId
273     kind: GuardClassKindImm
275 # Guard per GuardClassKind.
276 - name: GuardEitherClass
277   shared: true
278   transpile: true
279   cost_estimate: 1
280   args:
281     obj: ObjId
282     kind1: GuardClassKindImm
283     kind2: GuardClassKindImm
285 # Guard on a realm fuse.
286 - name: GuardFuse
287   shared: true
288   transpile: true
289   cost_estimate: 1
290   args:
291     fuseWord: RealmFuseIndexImm
293 # Guard on an arbitrary JSClass.
294 - name: GuardAnyClass
295   shared: false
296   transpile: true
297   cost_estimate: 1
298   args:
299     obj: ObjId
300     clasp: RawPointerField
302 - name: GuardGlobalGeneration
303   shared: true
304   transpile: true
305   cost_estimate: 1
306   args:
307     expected: RawInt32Field
308     generationAddr: RawPointerField
310 - name: HasClassResult
311   shared: false
312   transpile: true
313   cost_estimate: 1
314   args:
315     obj: ObjId
316     clasp: RawPointerField
318 - name: CallRegExpMatcherResult
319   shared: false
320   transpile: true
321   cost_estimate: 5
322   args:
323     regexp: ObjId
324     input: StringId
325     lastIndex: Int32Id
326     stub: JitCodeField
328 - name: CallRegExpSearcherResult
329   shared: false
330   transpile: true
331   cost_estimate: 5
332   args:
333     regexp: ObjId
334     input: StringId
335     lastIndex: Int32Id
336     stub: JitCodeField
338 - name: RegExpSearcherLastLimitResult
339   shared: true
340   transpile: true
341   cost_estimate: 1
342   args:
344 - name: RegExpHasCaptureGroupsResult
345   shared: false
346   transpile: true
347   cost_estimate: 1
348   args:
349     regexp: ObjId
350     input: StringId
352 - name: RegExpBuiltinExecMatchResult
353   shared: false
354   transpile: true
355   cost_estimate: 5
356   args:
357     regexp: ObjId
358     input: StringId
359     stub: JitCodeField
361 - name: RegExpBuiltinExecTestResult
362   shared: false
363   transpile: true
364   cost_estimate: 5
365   args:
366     regexp: ObjId
367     input: StringId
368     stub: JitCodeField
370 - name: RegExpFlagResult
371   shared: true
372   transpile: true
373   cost_estimate: 2
374   args:
375     regexp: ObjId
376     flagsMask: Int32Imm
378 - name: CallSubstringKernelResult
379   shared: true
380   transpile: true
381   cost_estimate: 5
382   args:
383     str: StringId
384     begin: Int32Id
385     length: Int32Id
387 - name: StringReplaceStringResult
388   shared: true
389   transpile: true
390   cost_estimate: 5
391   args:
392     str: StringId
393     pattern: StringId
394     replacement: StringId
396 - name: StringSplitStringResult
397   shared: true
398   transpile: true
399   cost_estimate: 5
400   args:
401     str: StringId
402     separator: StringId
404 - name: RegExpPrototypeOptimizableResult
405   shared: true
406   transpile: true
407   cost_estimate: 4
408   args:
409     proto: ObjId
411 - name: RegExpInstanceOptimizableResult
412   shared: true
413   transpile: true
414   cost_estimate: 4
415   args:
416     regexp: ObjId
417     proto: ObjId
419 - name: GetFirstDollarIndexResult
420   shared: true
421   transpile: true
422   cost_estimate: 5
423   args:
424     str: StringId
426 # Add a reference to a global in the compartment to keep it alive.
427 - name: GuardCompartment
428   shared: false
429   transpile: false
430   cost_estimate: 2
431   args:
432     obj: ObjId
433     global: ObjectField
434     compartment: RawPointerField
436 - name: GuardIsExtensible
437   shared: true
438   transpile: true
439   cost_estimate: 1
440   args:
441     obj: ObjId
443 - name: GuardIsNativeObject
444   shared: true
445   transpile: true
446   cost_estimate: 1
447   args:
448     obj: ObjId
450 - name: GuardIsProxy
451   shared: true
452   transpile: true
453   cost_estimate: 1
454   args:
455     obj: ObjId
457 - name: GuardIsNotProxy
458   shared: true
459   transpile: true
460   cost_estimate: 1
461   args:
462     obj: ObjId
464 - name: GuardIsNotArrayBufferMaybeShared
465   shared: true
466   transpile: true
467   cost_estimate: 1
468   args:
469     obj: ObjId
471 - name: GuardIsTypedArray
472   shared: true
473   transpile: true
474   cost_estimate: 1
475   args:
476     obj: ObjId
478 - name: GuardIsFixedLengthTypedArray
479   shared: true
480   transpile: true
481   cost_estimate: 1
482   args:
483     obj: ObjId
485 - name: GuardIsResizableTypedArray
486   shared: true
487   transpile: true
488   cost_estimate: 1
489   args:
490     obj: ObjId
492 - name: GuardHasProxyHandler
493   shared: false
494   transpile: true
495   cost_estimate: 1
496   args:
497     obj: ObjId
498     handler: RawPointerField
500 - name: GuardIsNotDOMProxy
501   shared: true
502   transpile: true
503   cost_estimate: 1
504   args:
505     obj: ObjId
507 - name: GuardSpecificObject
508   shared: false
509   transpile: true
510   cost_estimate: 1
511   args:
512     obj: ObjId
513     expected: WeakObjectField
515 - name: GuardObjectIdentity
516   shared: true
517   transpile: true
518   cost_estimate: 1
519   args:
520     obj1: ObjId
521     obj2: ObjId
523 - name: GuardSpecificFunction
524   shared: false
525   transpile: true
526   cost_estimate: 1
527   custom_writer: true
528   args:
529     fun: ObjId
530     expected: WeakObjectField
531     nargsAndFlags: RawInt32Field
533 - name: GuardFunctionScript
534   shared: false
535   transpile: true
536   cost_estimate: 1
537   custom_writer: true
538   args:
539     obj: ObjId
540     expected: WeakBaseScriptField
541     nargsAndFlags: RawInt32Field
543 - name: GuardSpecificAtom
544   shared: false
545   transpile: true
546   cost_estimate: 4
547   args:
548     str: StringId
549     expected: AtomField
551 - name: GuardSpecificSymbol
552   shared: false
553   transpile: true
554   cost_estimate: 1
555   args:
556     sym: SymbolId
557     expected: SymbolField
559 - name: GuardSpecificInt32
560   shared: true
561   transpile: true
562   cost_estimate: 1
563   args:
564     num: Int32Id
565     expected: Int32Imm
567 - name: GuardNoDenseElements
568   shared: true
569   transpile: true
570   cost_estimate: 1
571   args:
572     obj: ObjId
574 - name: GuardStringToIndex
575   shared: true
576   transpile: true
577   cost_estimate: 4
578   args:
579     str: StringId
580     result: Int32Id
582 - name: GuardStringToInt32
583   shared: true
584   transpile: true
585   cost_estimate: 4
586   args:
587     str: StringId
588     result: Int32Id
590 - name: GuardStringToNumber
591   shared: true
592   transpile: true
593   cost_estimate: 4
594   args:
595     str: StringId
596     result: NumberId
598 - name: StringToAtom
599   shared: true
600   transpile: true
601   custom_writer: true
602   cost_estimate: 4
603   args:
604     str: StringId
606 - name: BooleanToNumber
607   shared: true
608   transpile: true
609   cost_estimate: 1
610   args:
611     boolean: BooleanId
612     result: NumberId
614 - name: GuardHasGetterSetter
615   shared: true
616   transpile: true
617   cost_estimate: 4
618   args:
619     obj: ObjId
620     id: IdField
621     getterSetter: WeakGetterSetterField
623 - name: GuardInt32IsNonNegative
624   shared: true
625   transpile: true
626   cost_estimate: 1
627   args:
628     index: Int32Id
630 - name: GuardIndexIsValidUpdateOrAdd
631   shared: true
632   transpile: true
633   cost_estimate: 1
634   args:
635     obj: ObjId
636     index: Int32Id
638 - name: GuardIndexIsNotDenseElement
639   shared: true
640   transpile: true
641   cost_estimate: 1
642   args:
643     obj: ObjId
644     index: Int32Id
646 - name: GuardTagNotEqual
647   shared: true
648   transpile: true
649   cost_estimate: 1
650   args:
651     lhs: ValueTagId
652     rhs: ValueTagId
654 - name: GuardXrayExpandoShapeAndDefaultProto
655   shared: true
656   transpile: false
657   cost_estimate: 2
658   args:
659     obj: ObjId
660     shapeWrapper: ObjectField
662 - name: GuardXrayNoExpando
663   shared: true
664   transpile: false
665   cost_estimate: 2
666   args:
667     obj: ObjId
669 # Guard obj[slot] == expected.
670 - name: GuardDynamicSlotIsSpecificObject
671   shared: true
672   transpile: true
673   cost_estimate: 1
674   args:
675     obj: ObjId
676     expected: ObjId
677     slot: RawInt32Field
679 # Guard obj[slot] is not an object.
680 - name: GuardDynamicSlotIsNotObject
681   shared: true
682   transpile: true
683   cost_estimate: 1
684   args:
685     obj: ObjId
686     slot: RawInt32Field
688 - name: GuardFixedSlotValue
689   shared: true
690   transpile: true
691   cost_estimate: 1
692   args:
693     obj: ObjId
694     offset: RawInt32Field
695     val: ValueField
697 - name: GuardDynamicSlotValue
698   shared: true
699   transpile: true
700   cost_estimate: 1
701   args:
702     obj: ObjId
703     offset: RawInt32Field
704     val: ValueField
706 - name: LoadScriptedProxyHandler
707   shared: true
708   transpile: true
709   cost_estimate: 1
710   args:
711     result: ObjId
712     obj: ObjId
714 - name: IdToStringOrSymbol
715   shared: true
716   transpile: true
717   cost_estimate: 2
718   args:
719     result: ValId
720     id: ValId
722 - name: LoadFixedSlot
723   shared: true
724   transpile: true
725   cost_estimate: 1
726   args:
727     result: ValId
728     obj: ObjId
729     offset: RawInt32Field
731 - name: LoadDynamicSlot
732   shared: true
733   transpile: true
734   cost_estimate: 1
735   args:
736     result: ValId
737     obj: ObjId
738     slot: RawInt32Field
740 - name: GuardNoAllocationMetadataBuilder
741   shared: true
742   transpile: true
743   cost_estimate: 1
744   args:
745     builderAddr: RawPointerField
747 - name: GuardFunctionHasJitEntry
748   shared: true
749   transpile: true
750   cost_estimate: 1
751   args:
752     fun: ObjId
754 - name: GuardFunctionHasNoJitEntry
755   shared: true
756   transpile: true
757   cost_estimate: 1
758   args:
759     fun: ObjId
761 - name: GuardFunctionIsNonBuiltinCtor
762   shared: true
763   transpile: true
764   cost_estimate: 1
765   args:
766     fun: ObjId
768 - name: GuardFunctionIsConstructor
769   shared: true
770   transpile: true
771   cost_estimate: 1
772   args:
773     fun: ObjId
775 - name: GuardNotClassConstructor
776   shared: true
777   transpile: true
778   cost_estimate: 1
779   args:
780     fun: ObjId
782 - name: GuardArrayIsPacked
783   shared: true
784   transpile: true
785   cost_estimate: 1
786   args:
787     array: ObjId
789 - name: GuardArgumentsObjectFlags
790   shared: true
791   transpile: true
792   cost_estimate: 1
793   args:
794     obj: ObjId
795     flags: ByteImm
797 - name: LoadObject
798   shared: true
799   transpile: true
800   cost_estimate: 1
801   args:
802     result: ObjId
803     obj: ObjectField
805 # This is just LoadObject with extra information for the purpose of optimizing
806 # out shape guards if we're just storing to slots of the receiver object.
807 - name: LoadProtoObject
808   shared: true
809   transpile: true
810   cost_estimate: 1
811   args:
812     result: ObjId
813     protoObj: ObjectField
814     receiverObj: ObjId
816 - name: LoadProto
817   shared: true
818   transpile: true
819   cost_estimate: 1
820   args:
821     obj: ObjId
822     result: ObjId
824 - name: LoadEnclosingEnvironment
825   shared: true
826   transpile: true
827   cost_estimate: 1
828   args:
829     obj: ObjId
830     result: ObjId
832 - name: LoadWrapperTarget
833   shared: true
834   transpile: true
835   cost_estimate: 1
836   args:
837     obj: ObjId
838     result: ObjId
839     fallible: BoolImm
841 - name: LoadValueTag
842   shared: true
843   transpile: true
844   cost_estimate: 1
845   args:
846     val: ValId
847     result: ValueTagId
849 - name: LoadArgumentFixedSlot
850   shared: false
851   transpile: true
852   cost_estimate: 1
853   custom_writer: true
854   args:
855     result: ValId
856     slotIndex: ByteImm
858 - name: LoadArgumentDynamicSlot
859   shared: false
860   transpile: true
861   cost_estimate: 1
862   custom_writer: true
863   args:
864     result: ValId
865     argc: Int32Id
866     slotIndex: ByteImm
868 - name: TruncateDoubleToUInt32
869   shared: true
870   transpile: true
871   cost_estimate: 4
872   args:
873     input: NumberId
874     result: Int32Id
876 - name: DoubleToUint8Clamped
877   shared: true
878   transpile: true
879   cost_estimate: 2
880   args:
881     input: NumberId
882     result: Int32Id
884 - name: MegamorphicLoadSlotResult
885   shared: true
886   transpile: true
887   cost_estimate: 4
888   args:
889     obj: ObjId
890     name: IdField
892 - name: MegamorphicLoadSlotByValueResult
893   shared: true
894   transpile: true
895   cost_estimate: 4
896   args:
897     obj: ObjId
898     id: ValId
900 - name: MegamorphicStoreSlot
901   shared: true
902   transpile: true
903   cost_estimate: 5
904   args:
905     obj: ObjId
906     name: IdField
907     rhs: ValId
908     strict: BoolImm
910 - name: MegamorphicSetElement
911   shared: false
912   transpile: true
913   cost_estimate: 5
914   args:
915     obj: ObjId
916     id: ValId
917     rhs: ValId
918     strict: BoolImm
920 - name: MegamorphicHasPropResult
921   shared: true
922   transpile: true
923   cost_estimate: 4
924   args:
925     obj: ObjId
926     id: ValId
927     hasOwn: BoolImm
929 # For the case where we have an object with a small number of properties,
930 # we can do better than a megamorphic hasprop if we just run through those
931 # IDs and check for atom pointer equality.
932 - name: SmallObjectVariableKeyHasOwnResult
933   shared: true
934   transpile: true
935   cost_estimate: 4
936   args:
937     # We don't actually need the object, because we only care about the shape,
938     # which was guarded before this
939     id: StringId
940     # We include the prop names to speed up and simplify the Baseline case,
941     # but only the shape is used from Ion to achieve an unrolled loop with
942     # comparisons to known atoms
943     propNames: ObjectField
944     shape: ShapeField
946 - name: ObjectToIteratorResult
947   shared: true
948   transpile: true
949   cost_estimate: 5
950   args:
951     obj: ObjId
952     enumeratorsAddr: RawPointerField
954 - name: ValueToIteratorResult
955   shared: true
956   transpile: true
957   cost_estimate: 5
958   args:
959     val: ValId
961 # See CacheIR.cpp 'DOM proxies' comment.
962 - name: LoadDOMExpandoValue
963   shared: true
964   transpile: true
965   cost_estimate: 1
966   args:
967     obj: ObjId
968     result: ValId
970 - name: LoadDOMExpandoValueGuardGeneration
971   shared: false
972   transpile: true
973   cost_estimate: 2
974   args:
975     obj: ObjId
976     expandoAndGeneration: RawPointerField
977     generation: RawInt64Field
978     result: ValId
980 - name: LoadDOMExpandoValueIgnoreGeneration
981   shared: true
982   transpile: true
983   cost_estimate: 1
984   args:
985     obj: ObjId
986     result: ValId
988 - name: GuardDOMExpandoMissingOrGuardShape
989   shared: false
990   transpile: true
991   cost_estimate: 2
992   args:
993     expando: ValId
994     shape: ShapeField
996 - name: StoreFixedSlot
997   shared: false
998   transpile: true
999   cost_estimate: 6
1000   args:
1001     obj: ObjId
1002     offset: RawInt32Field
1003     rhs: ValId
1005 - name: StoreDynamicSlot
1006   shared: false
1007   transpile: true
1008   cost_estimate: 6
1009   args:
1010     obj: ObjId
1011     offset: RawInt32Field
1012     rhs: ValId
1014 - name: AddAndStoreFixedSlot
1015   shared: false
1016   transpile: true
1017   cost_estimate: 6
1018   args:
1019     obj: ObjId
1020     offset: RawInt32Field
1021     rhs: ValId
1022     newShape: ShapeField
1024 - name: AddAndStoreDynamicSlot
1025   shared: false
1026   transpile: true
1027   cost_estimate: 6
1028   args:
1029     obj: ObjId
1030     offset: RawInt32Field
1031     rhs: ValId
1032     newShape: ShapeField
1034 - name: AllocateAndStoreDynamicSlot
1035   shared: false
1036   transpile: true
1037   cost_estimate: 6
1038   args:
1039     obj: ObjId
1040     offset: RawInt32Field
1041     rhs: ValId
1042     newShape: ShapeField
1043     numNewSlots: RawInt32Field
1045 - name: AddSlotAndCallAddPropHook
1046   shared: true
1047   transpile: true
1048   cost_estimate: 6
1049   args:
1050     obj: ObjId
1051     rhs: ValId
1052     newShape: ShapeField
1054 - name: StoreDenseElement
1055   shared: true
1056   transpile: true
1057   cost_estimate: 6
1058   args:
1059     obj: ObjId
1060     index: Int32Id
1061     rhs: ValId
1063 - name: StoreDenseElementHole
1064   shared: true
1065   transpile: true
1066   cost_estimate: 6
1067   args:
1068     obj: ObjId
1069     index: Int32Id
1070     rhs: ValId
1071     handleAdd: BoolImm
1073 - name: ArrayPush
1074   shared: true
1075   transpile: true
1076   cost_estimate: 6
1077   args:
1078     obj: ObjId
1079     rhs: ValId
1081 - name: ArrayJoinResult
1082   shared: false
1083   transpile: true
1084   cost_estimate: 5
1085   args:
1086     obj: ObjId
1087     sep: StringId
1089 - name: ObjectKeysResult
1090   shared: true
1091   transpile: true
1092   cost_estimate: 6
1093   args:
1094     obj: ObjId
1096 - name: PackedArrayPopResult
1097   shared: true
1098   transpile: true
1099   cost_estimate: 2
1100   args:
1101     array: ObjId
1103 - name: PackedArrayShiftResult
1104   shared: true
1105   transpile: true
1106   cost_estimate: 4
1107   args:
1108     array: ObjId
1110 - name: PackedArraySliceResult
1111   shared: false
1112   transpile: true
1113   cost_estimate: 5
1114   args:
1115     templateObject: ObjectField
1116     array: ObjId
1117     begin: Int32Id
1118     end: Int32Id
1120 - name: ArgumentsSliceResult
1121   shared: false
1122   transpile: true
1123   cost_estimate: 5
1124   args:
1125     templateObject: ObjectField
1126     args: ObjId
1127     begin: Int32Id
1128     end: Int32Id
1130 - name: IsArrayResult
1131   shared: false
1132   transpile: true
1133   cost_estimate: 5
1134   args:
1135     input: ValId
1137 - name: StoreFixedSlotUndefinedResult
1138   shared: true
1139   transpile: true
1140   args:
1141     obj: ObjId
1142     offset: RawInt32Field
1143     rhs: ValId
1145 - name: IsObjectResult
1146   shared: true
1147   transpile: true
1148   cost_estimate: 1
1149   args:
1150     input: ValId
1152 - name: IsPackedArrayResult
1153   shared: true
1154   transpile: true
1155   cost_estimate: 2
1156   args:
1157     obj: ObjId
1159 - name: IsCallableResult
1160   shared: true
1161   transpile: true
1162   cost_estimate: 4
1163   args:
1164     input: ValId
1166 - name: IsConstructorResult
1167   shared: true
1168   transpile: true
1169   cost_estimate: 4
1170   args:
1171     obj: ObjId
1173 - name: IsCrossRealmArrayConstructorResult
1174   shared: true
1175   transpile: true
1176   cost_estimate: 2
1177   args:
1178     obj: ObjId
1180 - name: IsTypedArrayResult
1181   shared: false
1182   transpile: true
1183   cost_estimate: 5
1184   args:
1185     obj: ObjId
1186     isPossiblyWrapped: BoolImm
1188 - name: IsTypedArrayConstructorResult
1189   shared: true
1190   transpile: true
1191   cost_estimate: 2
1192   args:
1193     obj: ObjId
1195 - name: ArrayBufferViewByteOffsetInt32Result
1196   shared: true
1197   transpile: true
1198   cost_estimate: 1
1199   args:
1200     obj: ObjId
1202 - name: ArrayBufferViewByteOffsetDoubleResult
1203   shared: true
1204   transpile: true
1205   cost_estimate: 1
1206   args:
1207     obj: ObjId
1209 - name: ResizableTypedArrayByteOffsetMaybeOutOfBoundsInt32Result
1210   shared: true
1211   transpile: true
1212   cost_estimate: 2
1213   args:
1214     obj: ObjId
1216 - name: ResizableTypedArrayByteOffsetMaybeOutOfBoundsDoubleResult
1217   shared: true
1218   transpile: true
1219   cost_estimate: 2
1220   args:
1221     obj: ObjId
1223 - name: TypedArrayByteLengthInt32Result
1224   shared: true
1225   transpile: true
1226   cost_estimate: 2
1227   args:
1228     obj: ObjId
1230 - name: TypedArrayByteLengthDoubleResult
1231   shared: true
1232   transpile: true
1233   cost_estimate: 2
1234   args:
1235     obj: ObjId
1237 - name: ResizableTypedArrayByteLengthInt32Result
1238   shared: true
1239   transpile: true
1240   cost_estimate: 2
1241   args:
1242     obj: ObjId
1244 - name: ResizableTypedArrayByteLengthDoubleResult
1245   shared: true
1246   transpile: true
1247   cost_estimate: 2
1248   args:
1249     obj: ObjId
1251 - name: ResizableTypedArrayLengthInt32Result
1252   shared: true
1253   transpile: true
1254   cost_estimate: 2
1255   args:
1256     obj: ObjId
1258 - name: ResizableTypedArrayLengthDoubleResult
1259   shared: true
1260   transpile: true
1261   cost_estimate: 2
1262   args:
1263     obj: ObjId
1265 - name: TypedArrayElementSizeResult
1266   shared: true
1267   transpile: true
1268   cost_estimate: 2
1269   args:
1270     obj: ObjId
1272 - name: ResizableDataViewByteLengthInt32Result
1273   shared: true
1274   transpile: true
1275   cost_estimate: 2
1276   args:
1277     obj: ObjId
1279 - name: ResizableDataViewByteLengthDoubleResult
1280   shared: true
1281   transpile: true
1282   cost_estimate: 2
1283   args:
1284     obj: ObjId
1286 - name: GrowableSharedArrayBufferByteLengthInt32Result
1287   shared: true
1288   transpile: true
1289   cost_estimate: 2
1290   args:
1291     obj: ObjId
1293 - name: GrowableSharedArrayBufferByteLengthDoubleResult
1294   shared: true
1295   transpile: true
1296   cost_estimate: 2
1297   args:
1298     obj: ObjId
1300 - name: GuardHasAttachedArrayBuffer
1301   shared: true
1302   transpile: true
1303   cost_estimate: 2
1304   args:
1305     obj: ObjId
1307 - name: GuardResizableArrayBufferViewInBounds
1308   shared: true
1309   transpile: true
1310   cost_estimate: 2
1311   args:
1312     obj: ObjId
1314 - name: GuardResizableArrayBufferViewInBoundsOrDetached
1315   shared: true
1316   transpile: true
1317   cost_estimate: 2
1318   args:
1319     obj: ObjId
1321 - name: NewArrayIteratorResult
1322   shared: true
1323   transpile: true
1324   cost_estimate: 5
1325   args:
1326     templateObject: ObjectField
1328 - name: NewStringIteratorResult
1329   shared: true
1330   transpile: true
1331   cost_estimate: 5
1332   args:
1333     templateObject: ObjectField
1335 - name: NewRegExpStringIteratorResult
1336   shared: true
1337   transpile: true
1338   cost_estimate: 5
1339   args:
1340     templateObject: ObjectField
1342 - name: ObjectCreateResult
1343   shared: true
1344   transpile: true
1345   cost_estimate: 5
1346   args:
1347     templateObject: ObjectField
1349 - name: NewArrayFromLengthResult
1350   shared: true
1351   transpile: true
1352   cost_estimate: 5
1353   args:
1354     templateObject: ObjectField
1355     length: Int32Id
1357 - name: NewTypedArrayFromLengthResult
1358   shared: true
1359   transpile: true
1360   cost_estimate: 5
1361   args:
1362     templateObject: ObjectField
1363     length: Int32Id
1365 - name: NewTypedArrayFromArrayBufferResult
1366   shared: true
1367   transpile: true
1368   cost_estimate: 5
1369   args:
1370     templateObject: ObjectField
1371     buffer: ObjId
1372     byteOffset: ValId
1373     length: ValId
1375 - name: NewTypedArrayFromArrayResult
1376   shared: true
1377   transpile: true
1378   cost_estimate: 5
1379   args:
1380     templateObject: ObjectField
1381     array: ObjId
1383 - name: NewStringObjectResult
1384   shared: true
1385   transpile: true
1386   cost_estimate: 5
1387   args:
1388     templateObject: ObjectField
1389     str: StringId
1391 - name: StringFromCharCodeResult
1392   shared: false
1393   transpile: true
1394   cost_estimate: 5
1395   args:
1396     code: Int32Id
1398 - name: StringFromCodePointResult
1399   shared: false
1400   transpile: true
1401   cost_estimate: 5
1402   args:
1403     code: Int32Id
1405 - name: StringIncludesResult
1406   shared: true
1407   transpile: true
1408   cost_estimate: 5
1409   args:
1410     str: StringId
1411     searchStr: StringId
1413 - name: StringIndexOfResult
1414   shared: true
1415   transpile: true
1416   cost_estimate: 5
1417   args:
1418     str: StringId
1419     searchStr: StringId
1421 - name: StringLastIndexOfResult
1422   shared: true
1423   transpile: true
1424   cost_estimate: 5
1425   args:
1426     str: StringId
1427     searchStr: StringId
1429 - name: StringStartsWithResult
1430   shared: true
1431   transpile: true
1432   cost_estimate: 5
1433   args:
1434     str: StringId
1435     searchStr: StringId
1437 - name: StringEndsWithResult
1438   shared: true
1439   transpile: true
1440   cost_estimate: 5
1441   args:
1442     str: StringId
1443     searchStr: StringId
1445 - name: StringToLowerCaseResult
1446   shared: true
1447   transpile: true
1448   cost_estimate: 5
1449   args:
1450     str: StringId
1452 - name: StringToUpperCaseResult
1453   shared: true
1454   transpile: true
1455   cost_estimate: 5
1456   args:
1457     str: StringId
1459 - name: StringTrimResult
1460   shared: true
1461   transpile: true
1462   cost_estimate: 5
1463   args:
1464     str: StringId
1466 - name: StringTrimStartResult
1467   shared: true
1468   transpile: true
1469   cost_estimate: 5
1470   args:
1471     str: StringId
1473 - name: StringTrimEndResult
1474   shared: true
1475   transpile: true
1476   cost_estimate: 5
1477   args:
1478     str: StringId
1480 - name: MathAbsInt32Result
1481   shared: true
1482   transpile: true
1483   cost_estimate: 2
1484   args:
1485     input: Int32Id
1487 - name: MathAbsNumberResult
1488   shared: true
1489   transpile: true
1490   cost_estimate: 1
1491   args:
1492     input: NumberId
1494 - name: MathClz32Result
1495   shared: true
1496   transpile: true
1497   cost_estimate: 1
1498   args:
1499     input: Int32Id
1501 - name: MathSignInt32Result
1502   shared: true
1503   transpile: true
1504   cost_estimate: 1
1505   args:
1506     input: Int32Id
1508 - name: MathSignNumberResult
1509   shared: true
1510   transpile: true
1511   cost_estimate: 2
1512   args:
1513     input: NumberId
1515 - name: MathSignNumberToInt32Result
1516   shared: true
1517   transpile: true
1518   cost_estimate: 2
1519   args:
1520     input: NumberId
1522 - name: MathImulResult
1523   shared: true
1524   transpile: true
1525   cost_estimate: 1
1526   args:
1527     lhs: Int32Id
1528     rhs: Int32Id
1530 - name: MathSqrtNumberResult
1531   shared: true
1532   transpile: true
1533   cost_estimate: 1
1534   args:
1535     input: NumberId
1537 - name: MathFRoundNumberResult
1538   shared: true
1539   transpile: true
1540   cost_estimate: 1
1541   args:
1542     input: NumberId
1544 # Because Baseline stub code is shared by all realms in the Zone, this
1545 # instruction loads a pointer to the RNG from a stub field.
1546 - name: MathRandomResult
1547   shared: false
1548   transpile: true
1549   cost_estimate: 3
1550   args:
1551     rng: RawPointerField
1553 - name: MathHypot2NumberResult
1554   shared: true
1555   transpile: true
1556   cost_estimate: 4
1557   args:
1558     first: NumberId
1559     second: NumberId
1561 - name: MathHypot3NumberResult
1562   shared: true
1563   transpile: true
1564   cost_estimate: 4
1565   args:
1566     first: NumberId
1567     second: NumberId
1568     third: NumberId
1570 - name: MathHypot4NumberResult
1571   shared: true
1572   transpile: true
1573   cost_estimate: 4
1574   args:
1575     first: NumberId
1576     second: NumberId
1577     third: NumberId
1578     fourth: NumberId
1580 - name: MathAtan2NumberResult
1581   shared: true
1582   transpile: true
1583   cost_estimate: 4
1584   args:
1585     lhs: NumberId
1586     rhs: NumberId
1588 - name: MathFloorNumberResult
1589   shared: true
1590   transpile: true
1591   cost_estimate: 4
1592   args:
1593     input: NumberId
1595 - name: MathCeilNumberResult
1596   shared: true
1597   transpile: true
1598   cost_estimate: 4
1599   args:
1600     input: NumberId
1602 - name: MathTruncNumberResult
1603   shared: true
1604   transpile: true
1605   cost_estimate: 4
1606   args:
1607     input: NumberId
1609 - name: MathFloorToInt32Result
1610   shared: true
1611   transpile: true
1612   cost_estimate: 3
1613   args:
1614     input: NumberId
1616 - name: MathCeilToInt32Result
1617   shared: true
1618   transpile: true
1619   cost_estimate: 1
1620   args:
1621     input: NumberId
1623 - name: MathTruncToInt32Result
1624   shared: true
1625   transpile: true
1626   args:
1627     input: NumberId
1629 - name: MathRoundToInt32Result
1630   shared: true
1631   transpile: true
1632   cost_estimate: 1
1633   args:
1634     input: NumberId
1636 - name: Int32MinMax
1637   shared: true
1638   transpile: true
1639   cost_estimate: 1
1640   args:
1641     isMax: BoolImm
1642     first: Int32Id
1643     second: Int32Id
1644     result: Int32Id
1646 - name: NumberMinMax
1647   shared: true
1648   transpile: true
1649   cost_estimate: 1
1650   args:
1651     isMax: BoolImm
1652     first: NumberId
1653     second: NumberId
1654     result: NumberId
1656 - name: Int32MinMaxArrayResult
1657   shared: true
1658   transpile: true
1659   cost_estimate: 3
1660   args:
1661     array: ObjId
1662     isMax: BoolImm
1664 - name: NumberMinMaxArrayResult
1665   shared: true
1666   transpile: true
1667   cost_estimate: 3
1668   args:
1669     array: ObjId
1670     isMax: BoolImm
1672 - name: MathFunctionNumberResult
1673   shared: true
1674   transpile: true
1675   cost_estimate: 4
1676   args:
1677     input: NumberId
1678     fun: UnaryMathFunctionImm
1680 - name: NumberParseIntResult
1681   shared: true
1682   transpile: true
1683   cost_estimate: 5
1684   args:
1685     str: StringId
1686     radix: Int32Id
1688 - name: DoubleParseIntResult
1689   shared: true
1690   transpile: true
1691   cost_estimate: 2
1692   args:
1693     num: NumberId
1695 - name: ObjectToStringResult
1696   shared: true
1697   transpile: true
1698   cost_estimate: 4
1699   args:
1700     obj: ObjId
1702 - name: ReflectGetPrototypeOfResult
1703   shared: false
1704   transpile: true
1705   cost_estimate: 5
1706   args:
1707     obj: ObjId
1709 - name: StoreTypedArrayElement
1710   shared: true
1711   transpile: true
1712   cost_estimate: 3
1713   args:
1714     obj: ObjId
1715     elementType: ScalarTypeImm
1716     index: IntPtrId
1717     rhs: RawId
1718     handleOOB: BoolImm
1719     viewKind: ArrayBufferViewKindImm
1721 - name: AtomicsCompareExchangeResult
1722   shared: true
1723   transpile: true
1724   cost_estimate: 4
1725   args:
1726     obj: ObjId
1727     index: IntPtrId
1728     expected: RawId
1729     replacement: RawId
1730     elementType: ScalarTypeImm
1731     viewKind: ArrayBufferViewKindImm
1733 - name: AtomicsExchangeResult
1734   shared: true
1735   transpile: true
1736   cost_estimate: 4
1737   args:
1738     obj: ObjId
1739     index: IntPtrId
1740     value: RawId
1741     elementType: ScalarTypeImm
1742     viewKind: ArrayBufferViewKindImm
1744 - name: AtomicsAddResult
1745   shared: true
1746   transpile: true
1747   cost_estimate: 4
1748   args:
1749     obj: ObjId
1750     index: IntPtrId
1751     value: RawId
1752     elementType: ScalarTypeImm
1753     forEffect: BoolImm
1754     viewKind: ArrayBufferViewKindImm
1756 - name: AtomicsSubResult
1757   shared: true
1758   transpile: true
1759   cost_estimate: 4
1760   args:
1761     obj: ObjId
1762     index: IntPtrId
1763     value: RawId
1764     elementType: ScalarTypeImm
1765     forEffect: BoolImm
1766     viewKind: ArrayBufferViewKindImm
1768 - name: AtomicsAndResult
1769   shared: true
1770   transpile: true
1771   cost_estimate: 4
1772   args:
1773     obj: ObjId
1774     index: IntPtrId
1775     value: RawId
1776     elementType: ScalarTypeImm
1777     forEffect: BoolImm
1778     viewKind: ArrayBufferViewKindImm
1780 - name: AtomicsOrResult
1781   shared: true
1782   transpile: true
1783   cost_estimate: 4
1784   args:
1785     obj: ObjId
1786     index: IntPtrId
1787     value: RawId
1788     elementType: ScalarTypeImm
1789     forEffect: BoolImm
1790     viewKind: ArrayBufferViewKindImm
1792 - name: AtomicsXorResult
1793   shared: true
1794   transpile: true
1795   cost_estimate: 4
1796   args:
1797     obj: ObjId
1798     index: IntPtrId
1799     value: RawId
1800     elementType: ScalarTypeImm
1801     forEffect: BoolImm
1802     viewKind: ArrayBufferViewKindImm
1804 - name: AtomicsLoadResult
1805   shared: true
1806   transpile: true
1807   cost_estimate: 2
1808   args:
1809     obj: ObjId
1810     index: IntPtrId
1811     elementType: ScalarTypeImm
1812     viewKind: ArrayBufferViewKindImm
1814 - name: AtomicsStoreResult
1815   shared: true
1816   transpile: true
1817   cost_estimate: 2
1818   args:
1819     obj: ObjId
1820     index: IntPtrId
1821     value: RawId
1822     elementType: ScalarTypeImm
1823     viewKind: ArrayBufferViewKindImm
1825 - name: AtomicsIsLockFreeResult
1826   shared: true
1827   transpile: true
1828   cost_estimate: 1
1829   args:
1830     value: Int32Id
1832 - name: CallNativeSetter
1833   shared: false
1834   transpile: true
1835   cost_estimate: 5
1836   custom_writer: true
1837   args:
1838     receiver: ObjId
1839     setter: ObjectField
1840     rhs: ValId
1841     sameRealm: BoolImm
1842     nargsAndFlags: RawInt32Field
1844 - name: CallScriptedSetter
1845   shared: false
1846   transpile: true
1847   cost_estimate: 3
1848   custom_writer: true
1849   args:
1850     receiver: ObjId
1851     setter: ObjectField
1852     rhs: ValId
1853     sameRealm: BoolImm
1854     nargsAndFlags: RawInt32Field
1856 - name: CallInlinedSetter
1857   shared: false
1858   transpile: true
1859   cost_estimate: 3
1860   custom_writer: true
1861   args:
1862     receiver: ObjId
1863     setter: ObjectField
1864     rhs: ValId
1865     icScript: RawPointerField
1866     sameRealm: BoolImm
1867     nargsAndFlags: RawInt32Field
1869 - name: CallDOMSetter
1870   shared: false
1871   transpile: true
1872   cost_estimate: 4
1873   args:
1874     obj: ObjId
1875     jitInfo: RawPointerField
1876     rhs: ValId
1878 - name: CallSetArrayLength
1879   shared: false
1880   transpile: true
1881   cost_estimate: 5
1882   args:
1883     obj: ObjId
1884     strict: BoolImm
1885     rhs: ValId
1887 - name: ProxySet
1888   shared: false
1889   transpile: true
1890   cost_estimate: 5
1891   args:
1892     obj: ObjId
1893     id: IdField
1894     rhs: ValId
1895     strict: BoolImm
1897 - name: ProxySetByValue
1898   shared: false
1899   transpile: true
1900   cost_estimate: 5
1901   args:
1902     obj: ObjId
1903     id: ValId
1904     rhs: ValId
1905     strict: BoolImm
1907 - name: CallAddOrUpdateSparseElementHelper
1908   shared: false
1909   transpile: true
1910   cost_estimate: 5
1911   args:
1912     obj: ObjId
1913     id: Int32Id
1914     rhs: ValId
1915     strict: BoolImm
1917 - name: CallInt32ToString
1918   shared: true
1919   transpile: true
1920   cost_estimate: 4
1921   args:
1922     input: Int32Id
1923     result: StringId
1925 - name: CallNumberToString
1926   shared: true
1927   transpile: true
1928   cost_estimate: 4
1929   args:
1930     input: NumberId
1931     result: StringId
1933 - name: Int32ToStringWithBaseResult
1934   shared: true
1935   transpile: true
1936   cost_estimate: 3
1937   args:
1938     input: Int32Id
1939     base: Int32Id
1941 - name: BooleanToString
1942   shared: true
1943   transpile: true
1944   cost_estimate: 2
1945   args:
1946     input: BooleanId
1947     result: StringId
1949 - name: CallScriptedFunction
1950   shared: false
1951   transpile: true
1952   cost_estimate: 3
1953   custom_writer: true
1954   args:
1955     callee: ObjId
1956     argc: Int32Id
1957     flags: CallFlagsImm
1958     argcFixed: UInt32Imm
1960 - name: CallBoundScriptedFunction
1961   shared: false
1962   transpile: true
1963   cost_estimate: 3
1964   args:
1965     callee: ObjId
1966     target: ObjId
1967     argc: Int32Id
1968     flags: CallFlagsImm
1969     numBoundArgs: UInt32Imm
1971 - name: CallWasmFunction
1972   shared: false
1973   transpile: true
1974   cost_estimate: 3
1975   args:
1976     callee: ObjId
1977     argc: Int32Id
1978     flags: CallFlagsImm
1979     argcFixed: UInt32Imm
1980     funcExport: RawPointerField
1981     instance: ObjectField
1983 - name: GuardWasmArg
1984   shared: true
1985   transpile: true
1986   cost_estimate: 2
1987   args:
1988     arg: ValId
1989     type: WasmValTypeImm
1991 - name: CallNativeFunction
1992   shared: false
1993   transpile: true
1994   cost_estimate: 4
1995   custom_writer: true
1996   args:
1997     callee: ObjId
1998     argc: Int32Id
1999     flags: CallFlagsImm
2000     argcFixed: UInt32Imm
2001 #ifdef JS_SIMULATOR
2002     target: RawPointerField
2003 #else
2004     ignoresReturnValue: BoolImm
2005 #endif
2007 - name: CallDOMFunction
2008   shared: false
2009   transpile: true
2010   cost_estimate: 4
2011   custom_writer: true
2012   args:
2013     callee: ObjId
2014     argc: Int32Id
2015     thisObj: ObjId
2016     flags: CallFlagsImm
2017     argcFixed: UInt32Imm
2018 #ifdef JS_SIMULATOR
2019     target: RawPointerField
2020 #endif
2022 - name: CallClassHook
2023   shared: false
2024   transpile: true
2025   cost_estimate: 4
2026   custom_writer: true
2027   args:
2028     callee: ObjId
2029     argc: Int32Id
2030     flags: CallFlagsImm
2031     argcFixed: UInt32Imm
2032     target: RawPointerField
2034 - name: CallInlinedFunction
2035   shared: false
2036   transpile: true
2037   cost_estimate: 4
2038   custom_writer: true
2039   args:
2040     callee: ObjId
2041     argc: Int32Id
2042     icScript: RawPointerField
2043     flags: CallFlagsImm
2044     argcFixed: UInt32Imm
2046 #ifdef JS_PUNBOX64
2047 - name: CallScriptedProxyGetResult
2048   shared: false
2049   transpile: true
2050   cost_estimate: 4
2051   custom_writer: true
2052   args:
2053     target: ValId
2054     receiver: ObjId
2055     handler: ObjId
2056     trap: ObjectField
2057     property: IdField
2058     nargsAndFlags: UInt32Imm
2060 - name: CallScriptedProxyGetByValueResult
2061   shared: false
2062   transpile: true
2063   cost_estimate: 4
2064   custom_writer: true
2065   args:
2066     target: ValId
2067     receiver: ObjId
2068     handler: ObjId
2069     property: ValId
2070     trap: ObjectField
2071     nargsAndFlags: UInt32Imm
2072 #endif
2074 # Meta ops generate no code, but contain data for the Warp Transpiler.
2075 - name: MetaScriptedThisShape
2076   shared: true
2077   transpile: true
2078   cost_estimate: 0
2079   custom_writer: true
2080   args:
2081     thisShape: ShapeField
2083 - name: BindFunctionResult
2084   shared: false
2085   transpile: true
2086   cost_estimate: 5
2087   args:
2088     target: ObjId
2089     argc: UInt32Imm
2090     templateObject: ObjectField
2092 - name: SpecializedBindFunctionResult
2093   shared: false
2094   transpile: true
2095   cost_estimate: 4
2096   args:
2097     target: ObjId
2098     argc: UInt32Imm
2099     templateObject: ObjectField
2101 - name: LoadFixedSlotResult
2102   shared: false
2103   transpile: true
2104   cost_estimate: 1
2105   args:
2106     obj: ObjId
2107     offset: RawInt32Field
2109 - name: LoadFixedSlotTypedResult
2110   shared: false
2111   transpile: true
2112   cost_estimate: 1
2113   args:
2114     obj: ObjId
2115     offset: RawInt32Field
2116     type: ValueTypeImm
2118 - name: LoadDynamicSlotResult
2119   shared: false
2120   transpile: true
2121   cost_estimate: 1
2122   args:
2123     obj: ObjId
2124     offset: RawInt32Field
2126 - name: LoadDenseElementResult
2127   shared: true
2128   transpile: true
2129   cost_estimate: 2
2130   args:
2131     obj: ObjId
2132     index: Int32Id
2134 - name: LoadDenseElementHoleResult
2135   shared: true
2136   transpile: true
2137   cost_estimate: 2
2138   args:
2139     obj: ObjId
2140     index: Int32Id
2142 - name: CallGetSparseElementResult
2143   shared: true
2144   transpile: true
2145   cost_estimate: 5
2146   args:
2147     obj: ObjId
2148     index: Int32Id
2150 - name: LoadDenseElementExistsResult
2151   shared: true
2152   transpile: true
2153   cost_estimate: 1
2154   args:
2155     obj: ObjId
2156     index: Int32Id
2158 - name: LoadTypedArrayElementExistsResult
2159   shared: true
2160   transpile: true
2161   cost_estimate: 2
2162   args:
2163     obj: ObjId
2164     index: IntPtrId
2165     viewKind: ArrayBufferViewKindImm
2167 - name: LoadDenseElementHoleExistsResult
2168   shared: true
2169   transpile: true
2170   cost_estimate: 2
2171   args:
2172     obj: ObjId
2173     index: Int32Id
2175 - name: LoadTypedArrayElementResult
2176   shared: true
2177   transpile: true
2178   cost_estimate: 4
2179   args:
2180     obj: ObjId
2181     index: IntPtrId
2182     elementType: ScalarTypeImm
2183     handleOOB: BoolImm
2184     forceDoubleForUint32: BoolImm
2185     viewKind: ArrayBufferViewKindImm
2187 - name: LoadDataViewValueResult
2188   shared: true
2189   transpile: true
2190   cost_estimate: 4
2191   args:
2192     obj: ObjId
2193     offset: IntPtrId
2194     littleEndian: BooleanId
2195     elementType: ScalarTypeImm
2196     forceDoubleForUint32: BoolImm
2197     viewKind: ArrayBufferViewKindImm
2199 - name: StoreDataViewValueResult
2200   shared: true
2201   transpile: true
2202   cost_estimate: 4
2203   args:
2204     obj: ObjId
2205     offset: IntPtrId
2206     value: RawId
2207     littleEndian: BooleanId
2208     elementType: ScalarTypeImm
2209     viewKind: ArrayBufferViewKindImm
2211 - name: LoadInt32ArrayLengthResult
2212   shared: true
2213   transpile: true
2214   cost_estimate: 1
2215   args:
2216     obj: ObjId
2218 - name: LoadInt32ArrayLength
2219   shared: true
2220   transpile: true
2221   cost_estimate: 1
2222   args:
2223     obj: ObjId
2224     result: Int32Id
2226 - name: LoadArgumentsObjectArgResult
2227   shared: true
2228   transpile: true
2229   cost_estimate: 2
2230   args:
2231     obj: ObjId
2232     index: Int32Id
2234 - name: LoadArgumentsObjectArgHoleResult
2235   shared: true
2236   transpile: true
2237   cost_estimate: 2
2238   args:
2239     obj: ObjId
2240     index: Int32Id
2242 - name: LoadArgumentsObjectArgExistsResult
2243   shared: true
2244   transpile: true
2245   cost_estimate: 2
2246   args:
2247     obj: ObjId
2248     index: Int32Id
2250 - name: LoadArgumentsObjectLengthResult
2251   shared: true
2252   transpile: true
2253   cost_estimate: 1
2254   args:
2255     obj: ObjId
2257 - name: LoadArgumentsObjectLength
2258   shared: true
2259   transpile: true
2260   cost_estimate: 1
2261   args:
2262     obj: ObjId
2263     result: Int32Id
2265 - name: LoadFunctionLengthResult
2266   shared: true
2267   transpile: true
2268   cost_estimate: 2
2269   args:
2270     obj: ObjId
2272 - name: LoadFunctionNameResult
2273   shared: true
2274   transpile: true
2275   cost_estimate: 2
2276   args:
2277     obj: ObjId
2279 - name: LoadBoundFunctionNumArgs
2280   shared: true
2281   transpile: true
2282   cost_estimate: 1
2283   args:
2284     obj: ObjId
2285     result: Int32Id
2287 - name: LoadBoundFunctionTarget
2288   shared: true
2289   transpile: true
2290   cost_estimate: 1
2291   args:
2292     obj: ObjId
2293     result: ObjId
2295 - name: GuardBoundFunctionIsConstructor
2296   shared: true
2297   transpile: true
2298   cost_estimate: 1
2299   args:
2300     obj: ObjId
2302 - name: LoadArrayBufferByteLengthInt32Result
2303   shared: true
2304   transpile: true
2305   cost_estimate: 1
2306   args:
2307     obj: ObjId
2309 - name: LoadArrayBufferByteLengthDoubleResult
2310   shared: true
2311   transpile: true
2312   cost_estimate: 1
2313   args:
2314     obj: ObjId
2316 - name: LoadArrayBufferViewLengthInt32Result
2317   shared: true
2318   transpile: true
2319   cost_estimate: 1
2320   args:
2321     obj: ObjId
2323 - name: LoadArrayBufferViewLengthDoubleResult
2324   shared: true
2325   transpile: true
2326   cost_estimate: 1
2327   args:
2328     obj: ObjId
2330 - name: LinearizeForCharAccess
2331   shared: true
2332   transpile: true
2333   cost_estimate: 4
2334   args:
2335     str: StringId
2336     index: Int32Id
2337     result: StringId
2339 - name: LinearizeForCodePointAccess
2340   shared: true
2341   transpile: true
2342   cost_estimate: 4
2343   args:
2344     str: StringId
2345     index: Int32Id
2346     result: StringId
2348 - name: ToRelativeStringIndex
2349   shared: true
2350   transpile: true
2351   cost_estimate: 1
2352   args:
2353     index: Int32Id
2354     str: StringId
2355     result: Int32Id
2357 - name: LoadStringCharResult
2358   shared: false
2359   transpile: true
2360   cost_estimate: 5
2361   args:
2362     str: StringId
2363     index: Int32Id
2364     handleOOB: BoolImm
2366 - name: LoadStringAtResult
2367   shared: false
2368   transpile: true
2369   cost_estimate: 5
2370   args:
2371     str: StringId
2372     index: Int32Id
2373     handleOOB: BoolImm
2375 - name: LoadStringCharCodeResult
2376   shared: true
2377   transpile: true
2378   cost_estimate: 3
2379   args:
2380     str: StringId
2381     index: Int32Id
2382     handleOOB: BoolImm
2384 - name: LoadStringCodePointResult
2385   shared: true
2386   transpile: true
2387   cost_estimate: 3
2388   args:
2389     str: StringId
2390     index: Int32Id
2391     handleOOB: BoolImm
2393 - name: LoadStringLengthResult
2394   shared: true
2395   transpile: true
2396   cost_estimate: 1
2397   args:
2398     str: StringId
2400 - name: FrameIsConstructingResult
2401   shared: false
2402   transpile: true
2403   cost_estimate: 1
2404   args:
2406 - name: LoadObjectResult
2407   shared: true
2408   transpile: true
2409   cost_estimate: 1
2410   args:
2411     obj: ObjId
2413 - name: LoadStringResult
2414   shared: true
2415   transpile: true
2416   cost_estimate: 1
2417   args:
2418     str: StringId
2420 - name: LoadSymbolResult
2421   shared: true
2422   transpile: true
2423   cost_estimate: 1
2424   args:
2425     sym: SymbolId
2427 - name: LoadInt32Result
2428   shared: true
2429   transpile: true
2430   cost_estimate: 1
2431   args:
2432     val: Int32Id
2434 - name: LoadDoubleResult
2435   shared: true
2436   transpile: true
2437   cost_estimate: 2
2438   args:
2439     val: NumberId
2441 - name: LoadBigIntResult
2442   shared: true
2443   transpile: true
2444   cost_estimate: 1
2445   args:
2446     val: BigIntId
2448 - name: CallScriptedGetterResult
2449   shared: false
2450   transpile: true
2451   cost_estimate: 5
2452   custom_writer: true
2453   args:
2454     receiver: ValId
2455     getter: ObjectField
2456     sameRealm: BoolImm
2457     nargsAndFlags: RawInt32Field
2459 - name: CallInlinedGetterResult
2460   shared: false
2461   transpile: true
2462   cost_estimate: 5
2463   custom_writer: true
2464   args:
2465     receiver: ValId
2466     getter: ObjectField
2467     icScript: RawPointerField
2468     sameRealm: BoolImm
2469     nargsAndFlags: RawInt32Field
2471 - name: CallNativeGetterResult
2472   shared: false
2473   transpile: true
2474   cost_estimate: 5
2475   custom_writer: true
2476   args:
2477     receiver: ValId
2478     getter: ObjectField
2479     sameRealm: BoolImm
2480     nargsAndFlags: RawInt32Field
2482 - name: CallDOMGetterResult
2483   shared: false
2484   transpile: true
2485   cost_estimate: 4
2486   args:
2487     obj: ObjId
2488     jitInfo: RawPointerField
2490 - name: ProxyGetResult
2491   shared: false
2492   transpile: true
2493   cost_estimate: 5
2494   args:
2495     obj: ObjId
2496     id: IdField
2498 - name: ProxyGetByValueResult
2499   shared: true
2500   transpile: true
2501   cost_estimate: 5
2502   args:
2503     obj: ObjId
2504     id: ValId
2506 - name: ProxyHasPropResult
2507   shared: true
2508   transpile: true
2509   cost_estimate: 5
2510   args:
2511     obj: ObjId
2512     id: ValId
2513     hasOwn: BoolImm
2515 - name: CallObjectHasSparseElementResult
2516   shared: true
2517   transpile: true
2518   cost_estimate: 4
2519   args:
2520     obj: ObjId
2521     index: Int32Id
2523 - name: CallNativeGetElementResult
2524   shared: true
2525   transpile: true
2526   cost_estimate: 5
2527   args:
2528     obj: ObjId
2529     index: Int32Id
2531 - name: CallNativeGetElementSuperResult
2532   shared: true
2533   transpile: true
2534   cost_estimate: 5
2535   args:
2536     obj: ObjId
2537     index: Int32Id
2538     receiver: ValId
2540 - name: GetNextMapSetEntryForIteratorResult
2541   shared: true
2542   transpile: true
2543   cost_estimate: 4
2544   args:
2545     iter: ObjId
2546     resultArr: ObjId
2547     isMap: BoolImm
2549 - name: LoadUndefinedResult
2550   shared: true
2551   transpile: true
2552   cost_estimate: 1
2553   args:
2555 - name: LoadBooleanResult
2556   shared: true
2557   transpile: true
2558   cost_estimate: 1
2559   args:
2560     val: BoolImm
2562 - name: LoadInt32Constant
2563   shared: true
2564   transpile: true
2565   cost_estimate: 1
2566   args:
2567     val: RawInt32Field
2568     result: Int32Id
2570 - name: LoadDoubleConstant
2571   shared: true
2572   transpile: true
2573   cost_estimate: 1
2574   args:
2575     val: DoubleField
2576     result: NumberId
2578 - name: LoadBooleanConstant
2579   shared: true
2580   transpile: true
2581   cost_estimate: 1
2582   args:
2583     val: BoolImm
2584     result: BooleanId
2586 - name: LoadUndefined
2587   shared: true
2588   transpile: true
2589   cost_estimate: 1
2590   args:
2591     result: ValId
2593 - name: LoadConstantString
2594   shared: true
2595   transpile: true
2596   cost_estimate: 1
2597   args:
2598     str: StringField
2599     result: StringId
2601 - name: LoadConstantStringResult
2602   shared: false
2603   transpile: true
2604   cost_estimate: 1
2605   args:
2606     str: StringField
2608 - name: LoadInstanceOfObjectResult
2609   shared: true
2610   transpile: true
2611   cost_estimate: 3
2612   args:
2613     lhs: ValId
2614     proto: ObjId
2616 - name: LoadTypeOfObjectResult
2617   shared: true
2618   transpile: true
2619   cost_estimate: 4
2620   args:
2621     obj: ObjId
2623 - name: DoubleAddResult
2624   shared: true
2625   transpile: true
2626   cost_estimate: 2
2627   args:
2628     lhs: NumberId
2629     rhs: NumberId
2631 - name: DoubleSubResult
2632   shared: true
2633   transpile: true
2634   cost_estimate: 2
2635   args:
2636     lhs: NumberId
2637     rhs: NumberId
2639 - name: DoubleMulResult
2640   shared: true
2641   transpile: true
2642   cost_estimate: 2
2643   args:
2644     lhs: NumberId
2645     rhs: NumberId
2647 - name: DoubleDivResult
2648   shared: true
2649   transpile: true
2650   cost_estimate: 2
2651   args:
2652     lhs: NumberId
2653     rhs: NumberId
2655 - name: DoubleModResult
2656   shared: true
2657   transpile: true
2658   cost_estimate: 4
2659   args:
2660     lhs: NumberId
2661     rhs: NumberId
2663 - name: DoublePowResult
2664   shared: true
2665   transpile: true
2666   cost_estimate: 4
2667   args:
2668     lhs: NumberId
2669     rhs: NumberId
2671 - name: Int32AddResult
2672   shared: true
2673   transpile: true
2674   cost_estimate: 1
2675   args:
2676     lhs: Int32Id
2677     rhs: Int32Id
2679 - name: Int32SubResult
2680   shared: true
2681   transpile: true
2682   cost_estimate: 1
2683   args:
2684     lhs: Int32Id
2685     rhs: Int32Id
2687 - name: Int32MulResult
2688   shared: true
2689   transpile: true
2690   cost_estimate: 2
2691   args:
2692     lhs: Int32Id
2693     rhs: Int32Id
2695 - name: Int32DivResult
2696   shared: true
2697   transpile: true
2698   cost_estimate: 2
2699   args:
2700     lhs: Int32Id
2701     rhs: Int32Id
2703 - name: Int32ModResult
2704   shared: true
2705   transpile: true
2706   cost_estimate: 2
2707   args:
2708     lhs: Int32Id
2709     rhs: Int32Id
2711 - name: Int32PowResult
2712   shared: true
2713   transpile: true
2714   cost_estimate: 1
2715   args:
2716     lhs: Int32Id
2717     rhs: Int32Id
2719 - name: BigIntAddResult
2720   shared: true
2721   transpile: true
2722   cost_estimate: 5
2723   args:
2724     lhs: BigIntId
2725     rhs: BigIntId
2727 - name: BigIntSubResult
2728   shared: true
2729   transpile: true
2730   cost_estimate: 5
2731   args:
2732     lhs: BigIntId
2733     rhs: BigIntId
2735 - name: BigIntMulResult
2736   shared: true
2737   transpile: true
2738   cost_estimate: 5
2739   args:
2740     lhs: BigIntId
2741     rhs: BigIntId
2743 - name: BigIntDivResult
2744   shared: true
2745   transpile: true
2746   cost_estimate: 5
2747   args:
2748     lhs: BigIntId
2749     rhs: BigIntId
2751 - name: BigIntModResult
2752   shared: true
2753   transpile: true
2754   cost_estimate: 5
2755   args:
2756     lhs: BigIntId
2757     rhs: BigIntId
2759 - name: BigIntPowResult
2760   shared: true
2761   transpile: true
2762   cost_estimate: 5
2763   args:
2764     lhs: BigIntId
2765     rhs: BigIntId
2767 - name: Int32BitOrResult
2768   shared: true
2769   transpile: true
2770   cost_estimate: 1
2771   args:
2772     lhs: Int32Id
2773     rhs: Int32Id
2775 - name: Int32BitXorResult
2776   shared: true
2777   transpile: true
2778   cost_estimate: 1
2779   args:
2780     lhs: Int32Id
2781     rhs: Int32Id
2783 - name: Int32BitAndResult
2784   shared: true
2785   transpile: true
2786   cost_estimate: 1
2787   args:
2788     lhs: Int32Id
2789     rhs: Int32Id
2791 - name: Int32LeftShiftResult
2792   shared: true
2793   transpile: true
2794   cost_estimate: 1
2795   args:
2796     lhs: Int32Id
2797     rhs: Int32Id
2799 - name: Int32RightShiftResult
2800   shared: true
2801   transpile: true
2802   cost_estimate: 1
2803   args:
2804     lhs: Int32Id
2805     rhs: Int32Id
2807 - name: Int32URightShiftResult
2808   shared: true
2809   transpile: true
2810   cost_estimate: 2
2811   args:
2812     lhs: Int32Id
2813     rhs: Int32Id
2814     forceDouble: BoolImm
2816 - name: Int32NotResult
2817   shared: true
2818   transpile: true
2819   cost_estimate: 1
2820   args:
2821     input: Int32Id
2823 - name: BigIntBitOrResult
2824   shared: true
2825   transpile: true
2826   cost_estimate: 5
2827   args:
2828     lhs: BigIntId
2829     rhs: BigIntId
2831 - name: BigIntBitXorResult
2832   shared: true
2833   transpile: true
2834   cost_estimate: 5
2835   args:
2836     lhs: BigIntId
2837     rhs: BigIntId
2839 - name: BigIntBitAndResult
2840   shared: true
2841   transpile: true
2842   cost_estimate: 5
2843   args:
2844     lhs: BigIntId
2845     rhs: BigIntId
2847 - name: BigIntLeftShiftResult
2848   shared: true
2849   transpile: true
2850   cost_estimate: 5
2851   args:
2852     lhs: BigIntId
2853     rhs: BigIntId
2855 - name: BigIntRightShiftResult
2856   shared: true
2857   transpile: true
2858   cost_estimate: 5
2859   args:
2860     lhs: BigIntId
2861     rhs: BigIntId
2863 - name: BigIntNotResult
2864   shared: true
2865   transpile: true
2866   cost_estimate: 5
2867   args:
2868     input: BigIntId
2870 - name: Int32NegationResult
2871   shared: true
2872   transpile: true
2873   cost_estimate: 1
2874   args:
2875     input: Int32Id
2877 - name: DoubleNegationResult
2878   shared: true
2879   transpile: true
2880   cost_estimate: 1
2881   args:
2882     input: NumberId
2884 - name: BigIntNegationResult
2885   shared: true
2886   transpile: true
2887   cost_estimate: 5
2888   args:
2889     input: BigIntId
2891 - name: Int32IncResult
2892   shared: true
2893   transpile: true
2894   cost_estimate: 1
2895   args:
2896     input: Int32Id
2898 - name: Int32DecResult
2899   shared: true
2900   transpile: true
2901   cost_estimate: 1
2902   args:
2903     input: Int32Id
2905 - name: DoubleIncResult
2906   shared: true
2907   transpile: true
2908   cost_estimate: 1
2909   args:
2910     input: NumberId
2912 - name: DoubleDecResult
2913   shared: true
2914   transpile: true
2915   cost_estimate: 1
2916   args:
2917     input: NumberId
2919 - name: BigIntIncResult
2920   shared: true
2921   transpile: true
2922   cost_estimate: 5
2923   args:
2924     input: BigIntId
2926 - name: BigIntDecResult
2927   shared: true
2928   transpile: true
2929   cost_estimate: 5
2930   args:
2931     input: BigIntId
2933 - name: LoadInt32TruthyResult
2934   shared: true
2935   transpile: true
2936   cost_estimate: 2
2937   args:
2938     input: ValId
2940 - name: LoadDoubleTruthyResult
2941   shared: true
2942   transpile: true
2943   cost_estimate: 2
2944   args:
2945     input: NumberId
2947 - name: LoadStringTruthyResult
2948   shared: true
2949   transpile: true
2950   cost_estimate: 2
2951   args:
2952     str: StringId
2954 - name: LoadObjectTruthyResult
2955   shared: true
2956   transpile: true
2957   cost_estimate: 4
2958   args:
2959     obj: ObjId
2961 - name: LoadBigIntTruthyResult
2962   shared: true
2963   transpile: true
2964   cost_estimate: 2
2965   args:
2966     bigInt: BigIntId
2968 - name: LoadValueTruthyResult
2969   shared: true
2970   transpile: true
2971   cost_estimate: 4
2972   args:
2973     input: ValId
2975 - name: LoadValueResult
2976   shared: false
2977   transpile: false
2978   cost_estimate: 1
2979   args:
2980     val: ValueField
2982 - name: LoadOperandResult
2983   shared: true
2984   transpile: true
2985   cost_estimate: 1
2986   args:
2987     input: ValId
2989 - name: NewPlainObjectResult
2990   shared: false
2991   transpile: true
2992   cost_estimate: 4
2993   args:
2994     numFixedSlots: UInt32Imm
2995     numDynamicSlots: UInt32Imm
2996     allocKind: AllocKindImm
2997     shape: ShapeField
2998     site: AllocSiteField
3000 - name: NewArrayObjectResult
3001   shared: false
3002   transpile: true
3003   cost_estimate: 4
3004   args:
3005     arrayLength: UInt32Imm
3006     shape: ShapeField
3007     site: AllocSiteField
3009 - name: CallStringConcatResult
3010   shared: true
3011   transpile: true
3012   cost_estimate: 5
3013   args:
3014     lhs: StringId
3015     rhs: StringId
3017 - name: CallStringObjectConcatResult
3018   shared: false
3019   transpile: false
3020   cost_estimate: 5
3021   args:
3022     lhs: ValId
3023     rhs: ValId
3025 - name: CallIsSuspendedGeneratorResult
3026   shared: true
3027   transpile: false
3028   cost_estimate: 2
3029   args:
3030     val: ValId
3032 - name: CompareStringResult
3033   shared: false
3034   transpile: true
3035   cost_estimate: 5
3036   args:
3037     op: JSOpImm
3038     lhs: StringId
3039     rhs: StringId
3041 - name: CompareObjectResult
3042   shared: true
3043   transpile: true
3044   cost_estimate: 2
3045   args:
3046     op: JSOpImm
3047     lhs: ObjId
3048     rhs: ObjId
3050 - name: CompareSymbolResult
3051   shared: true
3052   transpile: true
3053   cost_estimate: 2
3054   args:
3055     op: JSOpImm
3056     lhs: SymbolId
3057     rhs: SymbolId
3059 - name: CompareInt32Result
3060   shared: true
3061   transpile: true
3062   cost_estimate: 2
3063   args:
3064     op: JSOpImm
3065     lhs: Int32Id
3066     rhs: Int32Id
3068 - name: CompareDoubleResult
3069   shared: true
3070   transpile: true
3071   cost_estimate: 2
3072   args:
3073     op: JSOpImm
3074     lhs: NumberId
3075     rhs: NumberId
3077 - name: CompareBigIntResult
3078   shared: true
3079   transpile: true
3080   cost_estimate: 4
3081   args:
3082     op: JSOpImm
3083     lhs: BigIntId
3084     rhs: BigIntId
3086 - name: CompareBigIntInt32Result
3087   shared: true
3088   transpile: true
3089   cost_estimate: 3
3090   args:
3091     op: JSOpImm
3092     lhs: BigIntId
3093     rhs: Int32Id
3095 - name: CompareBigIntNumberResult
3096   shared: true
3097   transpile: true
3098   cost_estimate: 4
3099   args:
3100     op: JSOpImm
3101     lhs: BigIntId
3102     rhs: NumberId
3104 - name: CompareBigIntStringResult
3105   shared: true
3106   transpile: true
3107   cost_estimate: 5
3108   args:
3109     op: JSOpImm
3110     lhs: BigIntId
3111     rhs: StringId
3113 - name: CompareNullUndefinedResult
3114   shared: true
3115   transpile: true
3116   cost_estimate: 2
3117   args:
3118     op: JSOpImm
3119     isUndefined: BoolImm
3120     input: ValId
3122 - name: CompareDoubleSameValueResult
3123   shared: true
3124   transpile: true
3125   cost_estimate: 3
3126   args:
3127     lhs: NumberId
3128     rhs: NumberId
3130 - name: SameValueResult
3131   shared: false
3132   transpile: true
3133   cost_estimate: 4
3134   args:
3135     lhs: ValId
3136     rhs: ValId
3138 - name: IndirectTruncateInt32Result
3139   shared: true
3140   transpile: true
3141   cost_estimate: 1
3142   args:
3143     val: Int32Id
3145 - name: BigIntAsIntNResult
3146   shared: true
3147   transpile: true
3148   cost_estimate: 5
3149   args:
3150     bits: Int32Id
3151     bigInt: BigIntId
3153 - name: BigIntAsUintNResult
3154   shared: true
3155   transpile: true
3156   cost_estimate: 5
3157   args:
3158     bits: Int32Id
3159     bigInt: BigIntId
3161 - name: SetHasResult
3162   shared: true
3163   transpile: true
3164   cost_estimate: 5
3165   args:
3166     set: ObjId
3167     val: ValId
3169 - name: SetHasNonGCThingResult
3170   shared: true
3171   transpile: true
3172   cost_estimate: 3
3173   args:
3174     set: ObjId
3175     val: ValId
3177 - name: SetHasStringResult
3178   shared: false
3179   transpile: true
3180   cost_estimate: 5
3181   args:
3182     set: ObjId
3183     str: StringId
3185 - name: SetHasSymbolResult
3186   shared: true
3187   transpile: true
3188   cost_estimate: 3
3189   args:
3190     set: ObjId
3191     sym: SymbolId
3193 - name: SetHasBigIntResult
3194   shared: true
3195   transpile: true
3196   cost_estimate: 3
3197   args:
3198     set: ObjId
3199     bigInt: BigIntId
3201 - name: SetHasObjectResult
3202   shared: true
3203   transpile: true
3204   cost_estimate: 3
3205   args:
3206     set: ObjId
3207     obj: ObjId
3209 - name: SetSizeResult
3210   shared: true
3211   transpile: true
3212   cost_estimate: 1
3213   args:
3214     set: ObjId
3216 - name: MapHasResult
3217   shared: true
3218   transpile: true
3219   cost_estimate: 5
3220   args:
3221     map: ObjId
3222     val: ValId
3224 - name: MapHasNonGCThingResult
3225   shared: true
3226   transpile: true
3227   cost_estimate: 3
3228   args:
3229     map: ObjId
3230     val: ValId
3232 - name: MapHasStringResult
3233   shared: false
3234   transpile: true
3235   cost_estimate: 5
3236   args:
3237     map: ObjId
3238     str: StringId
3240 - name: MapHasSymbolResult
3241   shared: true
3242   transpile: true
3243   cost_estimate: 3
3244   args:
3245     map: ObjId
3246     sym: SymbolId
3248 - name: MapHasBigIntResult
3249   shared: true
3250   transpile: true
3251   cost_estimate: 3
3252   args:
3253     map: ObjId
3254     bigInt: BigIntId
3256 - name: MapHasObjectResult
3257   shared: true
3258   transpile: true
3259   cost_estimate: 3
3260   args:
3261     map: ObjId
3262     obj: ObjId
3264 - name: MapGetResult
3265   shared: true
3266   transpile: true
3267   cost_estimate: 5
3268   args:
3269     map: ObjId
3270     val: ValId
3272 - name: MapGetNonGCThingResult
3273   shared: true
3274   transpile: true
3275   cost_estimate: 3
3276   args:
3277     map: ObjId
3278     val: ValId
3280 - name: MapGetStringResult
3281   shared: false
3282   transpile: true
3283   cost_estimate: 5
3284   args:
3285     map: ObjId
3286     str: StringId
3288 - name: MapGetSymbolResult
3289   shared: true
3290   transpile: true
3291   cost_estimate: 3
3292   args:
3293     map: ObjId
3294     sym: SymbolId
3296 - name: MapGetBigIntResult
3297   shared: true
3298   transpile: true
3299   cost_estimate: 3
3300   args:
3301     map: ObjId
3302     bigInt: BigIntId
3304 - name: MapGetObjectResult
3305   shared: true
3306   transpile: true
3307   cost_estimate: 3
3308   args:
3309     map: ObjId
3310     obj: ObjId
3312 - name: MapSizeResult
3313   shared: true
3314   transpile: true
3315   cost_estimate: 1
3316   args:
3317     map: ObjId
3319 - name: ArrayFromArgumentsObjectResult
3320   shared: true
3321   transpile: true
3322   cost_estimate: 5
3323   args:
3324     obj: ObjId
3325     shape: ShapeField
3327 - name: CloseIterScriptedResult
3328   shared: false
3329   transpile: true
3330   cost_estimate: 5
3331   args:
3332     iter: ObjId
3333     callee: ObjId
3334     kind: CompletionKindImm
3335     targetNargs: UInt32Imm
3337 - name: CallPrintString
3338   shared: true
3339   transpile: false
3340   cost_estimate: 1
3341   args:
3342     str: StaticStringImm
3344 - name: Breakpoint
3345   shared: true
3346   transpile: false
3347   cost_estimate: 1
3348   args:
3350 - name: WrapResult
3351   shared: true
3352   transpile: false
3353   cost_estimate: 4
3354   args:
3356 - name: Bailout
3357   shared: true
3358   transpile: true
3359   cost_estimate: 0
3360   args:
3362 - name: AssertRecoveredOnBailoutResult
3363   shared: true
3364   transpile: true
3365   cost_estimate: 1
3366   args:
3367     val: ValId
3368     mustBeRecovered: BoolImm
3370 - name: AssertPropertyLookup
3371   shared: true
3372   transpile: true
3373   cost_estimate: 4
3374   args:
3375     obj: ObjId
3376     id: IdField
3377     slot: RawInt32Field
3379 #ifdef FUZZING_JS_FUZZILLI
3380 - name: FuzzilliHashResult
3381   shared: true
3382   transpile: true
3383   cost_estimate: 4
3384   args:
3385     val: ValId
3386 #endif