Bug 1908539 restrict MacOS platform audio processing to Nightly r=webrtc-reviewers...
[gecko.git] / js / src / jit / CacheIROps.yaml
blob7c523cc9674c74f0f7891bcfd7a456318ea0b1ca
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: MegamorphicLoadSlotPermissiveResult
901   shared: true
902   transpile: true
903   cost_estimate: 4
904   args:
905     obj: ObjId
906     name: IdField
908 - name: MegamorphicLoadSlotByValuePermissiveResult
909   shared: true
910   transpile: true
911   cost_estimate: 4
912   args:
913     obj: ObjId
914     id: ValId
916 - name: MegamorphicStoreSlot
917   shared: true
918   transpile: true
919   cost_estimate: 5
920   args:
921     obj: ObjId
922     name: IdField
923     rhs: ValId
924     strict: BoolImm
926 - name: MegamorphicSetElement
927   shared: false
928   transpile: true
929   cost_estimate: 5
930   args:
931     obj: ObjId
932     id: ValId
933     rhs: ValId
934     strict: BoolImm
936 - name: MegamorphicHasPropResult
937   shared: true
938   transpile: true
939   cost_estimate: 4
940   args:
941     obj: ObjId
942     id: ValId
943     hasOwn: BoolImm
945 # For the case where we have an object with a small number of properties,
946 # we can do better than a megamorphic hasprop if we just run through those
947 # IDs and check for atom pointer equality.
948 - name: SmallObjectVariableKeyHasOwnResult
949   shared: true
950   transpile: true
951   cost_estimate: 4
952   args:
953     # We don't actually need the object, because we only care about the shape,
954     # which was guarded before this
955     id: StringId
956     # We include the prop names to speed up and simplify the Baseline case,
957     # but only the shape is used from Ion to achieve an unrolled loop with
958     # comparisons to known atoms
959     propNames: ObjectField
960     shape: ShapeField
962 - name: ObjectToIteratorResult
963   shared: true
964   transpile: true
965   cost_estimate: 5
966   args:
967     obj: ObjId
968     enumeratorsAddr: RawPointerField
970 - name: ValueToIteratorResult
971   shared: true
972   transpile: true
973   cost_estimate: 5
974   args:
975     val: ValId
977 # See CacheIR.cpp 'DOM proxies' comment.
978 - name: LoadDOMExpandoValue
979   shared: true
980   transpile: true
981   cost_estimate: 1
982   args:
983     obj: ObjId
984     result: ValId
986 - name: LoadDOMExpandoValueGuardGeneration
987   shared: false
988   transpile: true
989   cost_estimate: 2
990   args:
991     obj: ObjId
992     expandoAndGeneration: RawPointerField
993     generation: RawInt64Field
994     result: ValId
996 - name: LoadDOMExpandoValueIgnoreGeneration
997   shared: true
998   transpile: true
999   cost_estimate: 1
1000   args:
1001     obj: ObjId
1002     result: ValId
1004 - name: GuardDOMExpandoMissingOrGuardShape
1005   shared: false
1006   transpile: true
1007   cost_estimate: 2
1008   args:
1009     expando: ValId
1010     shape: ShapeField
1012 - name: StoreFixedSlot
1013   shared: false
1014   transpile: true
1015   cost_estimate: 6
1016   args:
1017     obj: ObjId
1018     offset: RawInt32Field
1019     rhs: ValId
1021 - name: StoreDynamicSlot
1022   shared: false
1023   transpile: true
1024   cost_estimate: 6
1025   args:
1026     obj: ObjId
1027     offset: RawInt32Field
1028     rhs: ValId
1030 - name: AddAndStoreFixedSlot
1031   shared: false
1032   transpile: true
1033   cost_estimate: 6
1034   args:
1035     obj: ObjId
1036     offset: RawInt32Field
1037     rhs: ValId
1038     newShape: ShapeField
1040 - name: AddAndStoreDynamicSlot
1041   shared: false
1042   transpile: true
1043   cost_estimate: 6
1044   args:
1045     obj: ObjId
1046     offset: RawInt32Field
1047     rhs: ValId
1048     newShape: ShapeField
1050 - name: AllocateAndStoreDynamicSlot
1051   shared: false
1052   transpile: true
1053   cost_estimate: 6
1054   args:
1055     obj: ObjId
1056     offset: RawInt32Field
1057     rhs: ValId
1058     newShape: ShapeField
1059     numNewSlots: RawInt32Field
1061 - name: AddSlotAndCallAddPropHook
1062   shared: true
1063   transpile: true
1064   cost_estimate: 6
1065   args:
1066     obj: ObjId
1067     rhs: ValId
1068     newShape: ShapeField
1070 - name: StoreDenseElement
1071   shared: true
1072   transpile: true
1073   cost_estimate: 6
1074   args:
1075     obj: ObjId
1076     index: Int32Id
1077     rhs: ValId
1079 - name: StoreDenseElementHole
1080   shared: true
1081   transpile: true
1082   cost_estimate: 6
1083   args:
1084     obj: ObjId
1085     index: Int32Id
1086     rhs: ValId
1087     handleAdd: BoolImm
1089 - name: ArrayPush
1090   shared: true
1091   transpile: true
1092   cost_estimate: 6
1093   args:
1094     obj: ObjId
1095     rhs: ValId
1097 - name: ArrayJoinResult
1098   shared: false
1099   transpile: true
1100   cost_estimate: 5
1101   args:
1102     obj: ObjId
1103     sep: StringId
1105 - name: ObjectKeysResult
1106   shared: true
1107   transpile: true
1108   cost_estimate: 6
1109   args:
1110     obj: ObjId
1112 - name: PackedArrayPopResult
1113   shared: true
1114   transpile: true
1115   cost_estimate: 2
1116   args:
1117     array: ObjId
1119 - name: PackedArrayShiftResult
1120   shared: true
1121   transpile: true
1122   cost_estimate: 4
1123   args:
1124     array: ObjId
1126 - name: PackedArraySliceResult
1127   shared: false
1128   transpile: true
1129   cost_estimate: 5
1130   args:
1131     templateObject: ObjectField
1132     array: ObjId
1133     begin: Int32Id
1134     end: Int32Id
1136 - name: ArgumentsSliceResult
1137   shared: false
1138   transpile: true
1139   cost_estimate: 5
1140   args:
1141     templateObject: ObjectField
1142     args: ObjId
1143     begin: Int32Id
1144     end: Int32Id
1146 - name: IsArrayResult
1147   shared: false
1148   transpile: true
1149   cost_estimate: 5
1150   args:
1151     input: ValId
1153 - name: StoreFixedSlotUndefinedResult
1154   shared: true
1155   transpile: true
1156   args:
1157     obj: ObjId
1158     offset: RawInt32Field
1159     rhs: ValId
1161 - name: IsObjectResult
1162   shared: true
1163   transpile: true
1164   cost_estimate: 1
1165   args:
1166     input: ValId
1168 - name: IsPackedArrayResult
1169   shared: true
1170   transpile: true
1171   cost_estimate: 2
1172   args:
1173     obj: ObjId
1175 - name: IsCallableResult
1176   shared: true
1177   transpile: true
1178   cost_estimate: 4
1179   args:
1180     input: ValId
1182 - name: IsConstructorResult
1183   shared: true
1184   transpile: true
1185   cost_estimate: 4
1186   args:
1187     obj: ObjId
1189 - name: IsCrossRealmArrayConstructorResult
1190   shared: true
1191   transpile: true
1192   cost_estimate: 2
1193   args:
1194     obj: ObjId
1196 - name: IsTypedArrayResult
1197   shared: false
1198   transpile: true
1199   cost_estimate: 5
1200   args:
1201     obj: ObjId
1202     isPossiblyWrapped: BoolImm
1204 - name: IsTypedArrayConstructorResult
1205   shared: true
1206   transpile: true
1207   cost_estimate: 2
1208   args:
1209     obj: ObjId
1211 - name: ArrayBufferViewByteOffsetInt32Result
1212   shared: true
1213   transpile: true
1214   cost_estimate: 1
1215   args:
1216     obj: ObjId
1218 - name: ArrayBufferViewByteOffsetDoubleResult
1219   shared: true
1220   transpile: true
1221   cost_estimate: 1
1222   args:
1223     obj: ObjId
1225 - name: ResizableTypedArrayByteOffsetMaybeOutOfBoundsInt32Result
1226   shared: true
1227   transpile: true
1228   cost_estimate: 2
1229   args:
1230     obj: ObjId
1232 - name: ResizableTypedArrayByteOffsetMaybeOutOfBoundsDoubleResult
1233   shared: true
1234   transpile: true
1235   cost_estimate: 2
1236   args:
1237     obj: ObjId
1239 - name: TypedArrayByteLengthInt32Result
1240   shared: true
1241   transpile: true
1242   cost_estimate: 2
1243   args:
1244     obj: ObjId
1246 - name: TypedArrayByteLengthDoubleResult
1247   shared: true
1248   transpile: true
1249   cost_estimate: 2
1250   args:
1251     obj: ObjId
1253 - name: ResizableTypedArrayByteLengthInt32Result
1254   shared: true
1255   transpile: true
1256   cost_estimate: 2
1257   args:
1258     obj: ObjId
1260 - name: ResizableTypedArrayByteLengthDoubleResult
1261   shared: true
1262   transpile: true
1263   cost_estimate: 2
1264   args:
1265     obj: ObjId
1267 - name: ResizableTypedArrayLengthInt32Result
1268   shared: true
1269   transpile: true
1270   cost_estimate: 2
1271   args:
1272     obj: ObjId
1274 - name: ResizableTypedArrayLengthDoubleResult
1275   shared: true
1276   transpile: true
1277   cost_estimate: 2
1278   args:
1279     obj: ObjId
1281 - name: TypedArrayElementSizeResult
1282   shared: true
1283   transpile: true
1284   cost_estimate: 2
1285   args:
1286     obj: ObjId
1288 - name: ResizableDataViewByteLengthInt32Result
1289   shared: true
1290   transpile: true
1291   cost_estimate: 2
1292   args:
1293     obj: ObjId
1295 - name: ResizableDataViewByteLengthDoubleResult
1296   shared: true
1297   transpile: true
1298   cost_estimate: 2
1299   args:
1300     obj: ObjId
1302 - name: GrowableSharedArrayBufferByteLengthInt32Result
1303   shared: true
1304   transpile: true
1305   cost_estimate: 2
1306   args:
1307     obj: ObjId
1309 - name: GrowableSharedArrayBufferByteLengthDoubleResult
1310   shared: true
1311   transpile: true
1312   cost_estimate: 2
1313   args:
1314     obj: ObjId
1316 - name: GuardHasAttachedArrayBuffer
1317   shared: true
1318   transpile: true
1319   cost_estimate: 2
1320   args:
1321     obj: ObjId
1323 - name: GuardResizableArrayBufferViewInBounds
1324   shared: true
1325   transpile: true
1326   cost_estimate: 2
1327   args:
1328     obj: ObjId
1330 - name: GuardResizableArrayBufferViewInBoundsOrDetached
1331   shared: true
1332   transpile: true
1333   cost_estimate: 2
1334   args:
1335     obj: ObjId
1337 - name: NewArrayIteratorResult
1338   shared: true
1339   transpile: true
1340   cost_estimate: 5
1341   args:
1342     templateObject: ObjectField
1344 - name: NewStringIteratorResult
1345   shared: true
1346   transpile: true
1347   cost_estimate: 5
1348   args:
1349     templateObject: ObjectField
1351 - name: NewRegExpStringIteratorResult
1352   shared: true
1353   transpile: true
1354   cost_estimate: 5
1355   args:
1356     templateObject: ObjectField
1358 - name: ObjectCreateResult
1359   shared: true
1360   transpile: true
1361   cost_estimate: 5
1362   args:
1363     templateObject: ObjectField
1365 - name: NewArrayFromLengthResult
1366   shared: true
1367   transpile: true
1368   cost_estimate: 5
1369   args:
1370     templateObject: ObjectField
1371     length: Int32Id
1373 - name: NewTypedArrayFromLengthResult
1374   shared: true
1375   transpile: true
1376   cost_estimate: 5
1377   args:
1378     templateObject: ObjectField
1379     length: Int32Id
1381 - name: NewTypedArrayFromArrayBufferResult
1382   shared: true
1383   transpile: true
1384   cost_estimate: 5
1385   args:
1386     templateObject: ObjectField
1387     buffer: ObjId
1388     byteOffset: ValId
1389     length: ValId
1391 - name: NewTypedArrayFromArrayResult
1392   shared: true
1393   transpile: true
1394   cost_estimate: 5
1395   args:
1396     templateObject: ObjectField
1397     array: ObjId
1399 - name: NewStringObjectResult
1400   shared: true
1401   transpile: true
1402   cost_estimate: 5
1403   args:
1404     templateObject: ObjectField
1405     str: StringId
1407 - name: StringFromCharCodeResult
1408   shared: false
1409   transpile: true
1410   cost_estimate: 5
1411   args:
1412     code: Int32Id
1414 - name: StringFromCodePointResult
1415   shared: false
1416   transpile: true
1417   cost_estimate: 5
1418   args:
1419     code: Int32Id
1421 - name: StringIncludesResult
1422   shared: true
1423   transpile: true
1424   cost_estimate: 5
1425   args:
1426     str: StringId
1427     searchStr: StringId
1429 - name: StringIndexOfResult
1430   shared: true
1431   transpile: true
1432   cost_estimate: 5
1433   args:
1434     str: StringId
1435     searchStr: StringId
1437 - name: StringLastIndexOfResult
1438   shared: true
1439   transpile: true
1440   cost_estimate: 5
1441   args:
1442     str: StringId
1443     searchStr: StringId
1445 - name: StringStartsWithResult
1446   shared: true
1447   transpile: true
1448   cost_estimate: 5
1449   args:
1450     str: StringId
1451     searchStr: StringId
1453 - name: StringEndsWithResult
1454   shared: true
1455   transpile: true
1456   cost_estimate: 5
1457   args:
1458     str: StringId
1459     searchStr: StringId
1461 - name: StringToLowerCaseResult
1462   shared: true
1463   transpile: true
1464   cost_estimate: 5
1465   args:
1466     str: StringId
1468 - name: StringToUpperCaseResult
1469   shared: true
1470   transpile: true
1471   cost_estimate: 5
1472   args:
1473     str: StringId
1475 - name: StringTrimResult
1476   shared: true
1477   transpile: true
1478   cost_estimate: 5
1479   args:
1480     str: StringId
1482 - name: StringTrimStartResult
1483   shared: true
1484   transpile: true
1485   cost_estimate: 5
1486   args:
1487     str: StringId
1489 - name: StringTrimEndResult
1490   shared: true
1491   transpile: true
1492   cost_estimate: 5
1493   args:
1494     str: StringId
1496 - name: MathAbsInt32Result
1497   shared: true
1498   transpile: true
1499   cost_estimate: 2
1500   args:
1501     input: Int32Id
1503 - name: MathAbsNumberResult
1504   shared: true
1505   transpile: true
1506   cost_estimate: 1
1507   args:
1508     input: NumberId
1510 - name: MathClz32Result
1511   shared: true
1512   transpile: true
1513   cost_estimate: 1
1514   args:
1515     input: Int32Id
1517 - name: MathSignInt32Result
1518   shared: true
1519   transpile: true
1520   cost_estimate: 1
1521   args:
1522     input: Int32Id
1524 - name: MathSignNumberResult
1525   shared: true
1526   transpile: true
1527   cost_estimate: 2
1528   args:
1529     input: NumberId
1531 - name: MathSignNumberToInt32Result
1532   shared: true
1533   transpile: true
1534   cost_estimate: 2
1535   args:
1536     input: NumberId
1538 - name: MathImulResult
1539   shared: true
1540   transpile: true
1541   cost_estimate: 1
1542   args:
1543     lhs: Int32Id
1544     rhs: Int32Id
1546 - name: MathSqrtNumberResult
1547   shared: true
1548   transpile: true
1549   cost_estimate: 1
1550   args:
1551     input: NumberId
1553 - name: MathFRoundNumberResult
1554   shared: true
1555   transpile: true
1556   cost_estimate: 1
1557   args:
1558     input: NumberId
1560 - name: MathF16RoundNumberResult
1561   shared: true
1562   transpile: true
1563   cost_estimate: 4
1564   args:
1565     input: NumberId
1567 # Because Baseline stub code is shared by all realms in the Zone, this
1568 # instruction loads a pointer to the RNG from a stub field.
1569 - name: MathRandomResult
1570   shared: false
1571   transpile: true
1572   cost_estimate: 3
1573   args:
1574     rng: RawPointerField
1576 - name: MathHypot2NumberResult
1577   shared: true
1578   transpile: true
1579   cost_estimate: 4
1580   args:
1581     first: NumberId
1582     second: NumberId
1584 - name: MathHypot3NumberResult
1585   shared: true
1586   transpile: true
1587   cost_estimate: 4
1588   args:
1589     first: NumberId
1590     second: NumberId
1591     third: NumberId
1593 - name: MathHypot4NumberResult
1594   shared: true
1595   transpile: true
1596   cost_estimate: 4
1597   args:
1598     first: NumberId
1599     second: NumberId
1600     third: NumberId
1601     fourth: NumberId
1603 - name: MathAtan2NumberResult
1604   shared: true
1605   transpile: true
1606   cost_estimate: 4
1607   args:
1608     lhs: NumberId
1609     rhs: NumberId
1611 - name: MathFloorNumberResult
1612   shared: true
1613   transpile: true
1614   cost_estimate: 4
1615   args:
1616     input: NumberId
1618 - name: MathCeilNumberResult
1619   shared: true
1620   transpile: true
1621   cost_estimate: 4
1622   args:
1623     input: NumberId
1625 - name: MathTruncNumberResult
1626   shared: true
1627   transpile: true
1628   cost_estimate: 4
1629   args:
1630     input: NumberId
1632 - name: MathFloorToInt32Result
1633   shared: true
1634   transpile: true
1635   cost_estimate: 3
1636   args:
1637     input: NumberId
1639 - name: MathCeilToInt32Result
1640   shared: true
1641   transpile: true
1642   cost_estimate: 1
1643   args:
1644     input: NumberId
1646 - name: MathTruncToInt32Result
1647   shared: true
1648   transpile: true
1649   args:
1650     input: NumberId
1652 - name: MathRoundToInt32Result
1653   shared: true
1654   transpile: true
1655   cost_estimate: 1
1656   args:
1657     input: NumberId
1659 - name: Int32MinMax
1660   shared: true
1661   transpile: true
1662   cost_estimate: 1
1663   args:
1664     isMax: BoolImm
1665     first: Int32Id
1666     second: Int32Id
1667     result: Int32Id
1669 - name: NumberMinMax
1670   shared: true
1671   transpile: true
1672   cost_estimate: 1
1673   args:
1674     isMax: BoolImm
1675     first: NumberId
1676     second: NumberId
1677     result: NumberId
1679 - name: Int32MinMaxArrayResult
1680   shared: true
1681   transpile: true
1682   cost_estimate: 3
1683   args:
1684     array: ObjId
1685     isMax: BoolImm
1687 - name: NumberMinMaxArrayResult
1688   shared: true
1689   transpile: true
1690   cost_estimate: 3
1691   args:
1692     array: ObjId
1693     isMax: BoolImm
1695 - name: MathFunctionNumberResult
1696   shared: true
1697   transpile: true
1698   cost_estimate: 4
1699   args:
1700     input: NumberId
1701     fun: UnaryMathFunctionImm
1703 - name: NumberParseIntResult
1704   shared: true
1705   transpile: true
1706   cost_estimate: 5
1707   args:
1708     str: StringId
1709     radix: Int32Id
1711 - name: DoubleParseIntResult
1712   shared: true
1713   transpile: true
1714   cost_estimate: 2
1715   args:
1716     num: NumberId
1718 - name: ObjectToStringResult
1719   shared: true
1720   transpile: true
1721   cost_estimate: 4
1722   args:
1723     obj: ObjId
1725 - name: ReflectGetPrototypeOfResult
1726   shared: false
1727   transpile: true
1728   cost_estimate: 5
1729   args:
1730     obj: ObjId
1732 - name: StoreTypedArrayElement
1733   shared: true
1734   transpile: true
1735   cost_estimate: 3
1736   args:
1737     obj: ObjId
1738     elementType: ScalarTypeImm
1739     index: IntPtrId
1740     rhs: RawId
1741     handleOOB: BoolImm
1742     viewKind: ArrayBufferViewKindImm
1744 - name: AtomicsCompareExchangeResult
1745   shared: true
1746   transpile: true
1747   cost_estimate: 4
1748   args:
1749     obj: ObjId
1750     index: IntPtrId
1751     expected: RawId
1752     replacement: RawId
1753     elementType: ScalarTypeImm
1754     viewKind: ArrayBufferViewKindImm
1756 - name: AtomicsExchangeResult
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     viewKind: ArrayBufferViewKindImm
1767 - name: AtomicsAddResult
1768   shared: true
1769   transpile: true
1770   cost_estimate: 4
1771   args:
1772     obj: ObjId
1773     index: IntPtrId
1774     value: RawId
1775     elementType: ScalarTypeImm
1776     forEffect: BoolImm
1777     viewKind: ArrayBufferViewKindImm
1779 - name: AtomicsSubResult
1780   shared: true
1781   transpile: true
1782   cost_estimate: 4
1783   args:
1784     obj: ObjId
1785     index: IntPtrId
1786     value: RawId
1787     elementType: ScalarTypeImm
1788     forEffect: BoolImm
1789     viewKind: ArrayBufferViewKindImm
1791 - name: AtomicsAndResult
1792   shared: true
1793   transpile: true
1794   cost_estimate: 4
1795   args:
1796     obj: ObjId
1797     index: IntPtrId
1798     value: RawId
1799     elementType: ScalarTypeImm
1800     forEffect: BoolImm
1801     viewKind: ArrayBufferViewKindImm
1803 - name: AtomicsOrResult
1804   shared: true
1805   transpile: true
1806   cost_estimate: 4
1807   args:
1808     obj: ObjId
1809     index: IntPtrId
1810     value: RawId
1811     elementType: ScalarTypeImm
1812     forEffect: BoolImm
1813     viewKind: ArrayBufferViewKindImm
1815 - name: AtomicsXorResult
1816   shared: true
1817   transpile: true
1818   cost_estimate: 4
1819   args:
1820     obj: ObjId
1821     index: IntPtrId
1822     value: RawId
1823     elementType: ScalarTypeImm
1824     forEffect: BoolImm
1825     viewKind: ArrayBufferViewKindImm
1827 - name: AtomicsLoadResult
1828   shared: true
1829   transpile: true
1830   cost_estimate: 2
1831   args:
1832     obj: ObjId
1833     index: IntPtrId
1834     elementType: ScalarTypeImm
1835     viewKind: ArrayBufferViewKindImm
1837 - name: AtomicsStoreResult
1838   shared: true
1839   transpile: true
1840   cost_estimate: 2
1841   args:
1842     obj: ObjId
1843     index: IntPtrId
1844     value: RawId
1845     elementType: ScalarTypeImm
1846     viewKind: ArrayBufferViewKindImm
1848 - name: AtomicsIsLockFreeResult
1849   shared: true
1850   transpile: true
1851   cost_estimate: 1
1852   args:
1853     value: Int32Id
1855 - name: CallNativeSetter
1856   shared: false
1857   transpile: true
1858   cost_estimate: 5
1859   custom_writer: true
1860   args:
1861     receiver: ObjId
1862     setter: ObjectField
1863     rhs: ValId
1864     sameRealm: BoolImm
1865     nargsAndFlags: RawInt32Field
1867 - name: CallScriptedSetter
1868   shared: false
1869   transpile: true
1870   cost_estimate: 3
1871   custom_writer: true
1872   args:
1873     receiver: ObjId
1874     setter: ObjectField
1875     rhs: ValId
1876     sameRealm: BoolImm
1877     nargsAndFlags: RawInt32Field
1879 - name: CallInlinedSetter
1880   shared: false
1881   transpile: true
1882   cost_estimate: 3
1883   custom_writer: true
1884   args:
1885     receiver: ObjId
1886     setter: ObjectField
1887     rhs: ValId
1888     icScript: RawPointerField
1889     sameRealm: BoolImm
1890     nargsAndFlags: RawInt32Field
1892 - name: CallDOMSetter
1893   shared: false
1894   transpile: true
1895   cost_estimate: 4
1896   args:
1897     obj: ObjId
1898     jitInfo: RawPointerField
1899     rhs: ValId
1901 - name: CallSetArrayLength
1902   shared: false
1903   transpile: true
1904   cost_estimate: 5
1905   args:
1906     obj: ObjId
1907     strict: BoolImm
1908     rhs: ValId
1910 - name: ProxySet
1911   shared: false
1912   transpile: true
1913   cost_estimate: 5
1914   args:
1915     obj: ObjId
1916     id: IdField
1917     rhs: ValId
1918     strict: BoolImm
1920 - name: ProxySetByValue
1921   shared: false
1922   transpile: true
1923   cost_estimate: 5
1924   args:
1925     obj: ObjId
1926     id: ValId
1927     rhs: ValId
1928     strict: BoolImm
1930 - name: CallAddOrUpdateSparseElementHelper
1931   shared: false
1932   transpile: true
1933   cost_estimate: 5
1934   args:
1935     obj: ObjId
1936     id: Int32Id
1937     rhs: ValId
1938     strict: BoolImm
1940 - name: CallInt32ToString
1941   shared: true
1942   transpile: true
1943   cost_estimate: 4
1944   args:
1945     input: Int32Id
1946     result: StringId
1948 - name: CallNumberToString
1949   shared: true
1950   transpile: true
1951   cost_estimate: 4
1952   args:
1953     input: NumberId
1954     result: StringId
1956 - name: Int32ToStringWithBaseResult
1957   shared: true
1958   transpile: true
1959   cost_estimate: 3
1960   args:
1961     input: Int32Id
1962     base: Int32Id
1964 - name: BooleanToString
1965   shared: true
1966   transpile: true
1967   cost_estimate: 2
1968   args:
1969     input: BooleanId
1970     result: StringId
1972 - name: CallScriptedFunction
1973   shared: false
1974   transpile: true
1975   cost_estimate: 3
1976   custom_writer: true
1977   args:
1978     callee: ObjId
1979     argc: Int32Id
1980     flags: CallFlagsImm
1981     argcFixed: UInt32Imm
1983 - name: CallBoundScriptedFunction
1984   shared: false
1985   transpile: true
1986   cost_estimate: 3
1987   args:
1988     callee: ObjId
1989     target: ObjId
1990     argc: Int32Id
1991     flags: CallFlagsImm
1992     numBoundArgs: UInt32Imm
1994 - name: CallWasmFunction
1995   shared: false
1996   transpile: true
1997   cost_estimate: 3
1998   args:
1999     callee: ObjId
2000     argc: Int32Id
2001     flags: CallFlagsImm
2002     argcFixed: UInt32Imm
2003     funcType: RawPointerField
2004     instance: ObjectField
2006 - name: GuardWasmArg
2007   shared: true
2008   transpile: true
2009   cost_estimate: 2
2010   args:
2011     arg: ValId
2012     type: WasmValTypeImm
2014 - name: CallNativeFunction
2015   shared: false
2016   transpile: true
2017   cost_estimate: 4
2018   custom_writer: true
2019   args:
2020     callee: ObjId
2021     argc: Int32Id
2022     flags: CallFlagsImm
2023     argcFixed: UInt32Imm
2024 #ifdef JS_SIMULATOR
2025     target: RawPointerField
2026 #else
2027     ignoresReturnValue: BoolImm
2028 #endif
2030 - name: CallDOMFunction
2031   shared: false
2032   transpile: true
2033   cost_estimate: 4
2034   custom_writer: true
2035   args:
2036     callee: ObjId
2037     argc: Int32Id
2038     thisObj: ObjId
2039     flags: CallFlagsImm
2040     argcFixed: UInt32Imm
2041 #ifdef JS_SIMULATOR
2042     target: RawPointerField
2043 #endif
2045 - name: CallClassHook
2046   shared: false
2047   transpile: true
2048   cost_estimate: 4
2049   custom_writer: true
2050   args:
2051     callee: ObjId
2052     argc: Int32Id
2053     flags: CallFlagsImm
2054     argcFixed: UInt32Imm
2055     target: RawPointerField
2057 - name: CallInlinedFunction
2058   shared: false
2059   transpile: true
2060   cost_estimate: 4
2061   custom_writer: true
2062   args:
2063     callee: ObjId
2064     argc: Int32Id
2065     icScript: RawPointerField
2066     flags: CallFlagsImm
2067     argcFixed: UInt32Imm
2069 #ifdef JS_PUNBOX64
2070 - name: CallScriptedProxyGetResult
2071   shared: false
2072   transpile: true
2073   cost_estimate: 4
2074   custom_writer: true
2075   args:
2076     target: ValId
2077     receiver: ObjId
2078     handler: ObjId
2079     trap: ObjId
2080     property: IdField
2081     nargsAndFlags: UInt32Imm
2083 - name: CallScriptedProxyGetByValueResult
2084   shared: false
2085   transpile: true
2086   cost_estimate: 4
2087   custom_writer: true
2088   args:
2089     target: ValId
2090     receiver: ObjId
2091     handler: ObjId
2092     property: ValId
2093     trap: ObjId
2094     nargsAndFlags: UInt32Imm
2095 #endif
2097 # Meta ops generate no code, but contain data for the Warp Transpiler.
2098 - name: MetaScriptedThisShape
2099   shared: true
2100   transpile: true
2101   cost_estimate: 0
2102   custom_writer: true
2103   args:
2104     thisShape: ShapeField
2106 - name: BindFunctionResult
2107   shared: false
2108   transpile: true
2109   cost_estimate: 5
2110   args:
2111     target: ObjId
2112     argc: UInt32Imm
2113     templateObject: ObjectField
2115 - name: SpecializedBindFunctionResult
2116   shared: false
2117   transpile: true
2118   cost_estimate: 4
2119   args:
2120     target: ObjId
2121     argc: UInt32Imm
2122     templateObject: ObjectField
2124 - name: LoadFixedSlotResult
2125   shared: false
2126   transpile: true
2127   cost_estimate: 1
2128   args:
2129     obj: ObjId
2130     offset: RawInt32Field
2132 - name: LoadFixedSlotTypedResult
2133   shared: false
2134   transpile: true
2135   cost_estimate: 1
2136   args:
2137     obj: ObjId
2138     offset: RawInt32Field
2139     type: ValueTypeImm
2141 - name: LoadDynamicSlotResult
2142   shared: false
2143   transpile: true
2144   cost_estimate: 1
2145   args:
2146     obj: ObjId
2147     offset: RawInt32Field
2149 - name: LoadDenseElementResult
2150   shared: true
2151   transpile: true
2152   cost_estimate: 2
2153   args:
2154     obj: ObjId
2155     index: Int32Id
2157 - name: LoadDenseElementHoleResult
2158   shared: true
2159   transpile: true
2160   cost_estimate: 2
2161   args:
2162     obj: ObjId
2163     index: Int32Id
2165 - name: CallGetSparseElementResult
2166   shared: true
2167   transpile: true
2168   cost_estimate: 5
2169   args:
2170     obj: ObjId
2171     index: Int32Id
2173 - name: LoadDenseElementExistsResult
2174   shared: true
2175   transpile: true
2176   cost_estimate: 1
2177   args:
2178     obj: ObjId
2179     index: Int32Id
2181 - name: LoadTypedArrayElementExistsResult
2182   shared: true
2183   transpile: true
2184   cost_estimate: 2
2185   args:
2186     obj: ObjId
2187     index: IntPtrId
2188     viewKind: ArrayBufferViewKindImm
2190 - name: LoadDenseElementHoleExistsResult
2191   shared: true
2192   transpile: true
2193   cost_estimate: 2
2194   args:
2195     obj: ObjId
2196     index: Int32Id
2198 - name: LoadTypedArrayElementResult
2199   shared: true
2200   transpile: true
2201   cost_estimate: 4
2202   args:
2203     obj: ObjId
2204     index: IntPtrId
2205     elementType: ScalarTypeImm
2206     handleOOB: BoolImm
2207     forceDoubleForUint32: BoolImm
2208     viewKind: ArrayBufferViewKindImm
2210 - name: LoadDataViewValueResult
2211   shared: true
2212   transpile: true
2213   cost_estimate: 4
2214   args:
2215     obj: ObjId
2216     offset: IntPtrId
2217     littleEndian: BooleanId
2218     elementType: ScalarTypeImm
2219     forceDoubleForUint32: BoolImm
2220     viewKind: ArrayBufferViewKindImm
2222 - name: StoreDataViewValueResult
2223   shared: true
2224   transpile: true
2225   cost_estimate: 4
2226   args:
2227     obj: ObjId
2228     offset: IntPtrId
2229     value: RawId
2230     littleEndian: BooleanId
2231     elementType: ScalarTypeImm
2232     viewKind: ArrayBufferViewKindImm
2234 - name: LoadInt32ArrayLengthResult
2235   shared: true
2236   transpile: true
2237   cost_estimate: 1
2238   args:
2239     obj: ObjId
2241 - name: LoadInt32ArrayLength
2242   shared: true
2243   transpile: true
2244   cost_estimate: 1
2245   args:
2246     obj: ObjId
2247     result: Int32Id
2249 - name: LoadArgumentsObjectArgResult
2250   shared: true
2251   transpile: true
2252   cost_estimate: 2
2253   args:
2254     obj: ObjId
2255     index: Int32Id
2257 - name: LoadArgumentsObjectArgHoleResult
2258   shared: true
2259   transpile: true
2260   cost_estimate: 2
2261   args:
2262     obj: ObjId
2263     index: Int32Id
2265 - name: LoadArgumentsObjectArgExistsResult
2266   shared: true
2267   transpile: true
2268   cost_estimate: 2
2269   args:
2270     obj: ObjId
2271     index: Int32Id
2273 - name: LoadArgumentsObjectLengthResult
2274   shared: true
2275   transpile: true
2276   cost_estimate: 1
2277   args:
2278     obj: ObjId
2280 - name: LoadArgumentsObjectLength
2281   shared: true
2282   transpile: true
2283   cost_estimate: 1
2284   args:
2285     obj: ObjId
2286     result: Int32Id
2288 - name: LoadFunctionLengthResult
2289   shared: true
2290   transpile: true
2291   cost_estimate: 2
2292   args:
2293     obj: ObjId
2295 - name: LoadFunctionNameResult
2296   shared: true
2297   transpile: true
2298   cost_estimate: 2
2299   args:
2300     obj: ObjId
2302 - name: LoadBoundFunctionNumArgs
2303   shared: true
2304   transpile: true
2305   cost_estimate: 1
2306   args:
2307     obj: ObjId
2308     result: Int32Id
2310 - name: LoadBoundFunctionTarget
2311   shared: true
2312   transpile: true
2313   cost_estimate: 1
2314   args:
2315     obj: ObjId
2316     result: ObjId
2318 - name: GuardBoundFunctionIsConstructor
2319   shared: true
2320   transpile: true
2321   cost_estimate: 1
2322   args:
2323     obj: ObjId
2325 - name: LoadArrayBufferByteLengthInt32Result
2326   shared: true
2327   transpile: true
2328   cost_estimate: 1
2329   args:
2330     obj: ObjId
2332 - name: LoadArrayBufferByteLengthDoubleResult
2333   shared: true
2334   transpile: true
2335   cost_estimate: 1
2336   args:
2337     obj: ObjId
2339 - name: LoadArrayBufferViewLengthInt32Result
2340   shared: true
2341   transpile: true
2342   cost_estimate: 1
2343   args:
2344     obj: ObjId
2346 - name: LoadArrayBufferViewLengthDoubleResult
2347   shared: true
2348   transpile: true
2349   cost_estimate: 1
2350   args:
2351     obj: ObjId
2353 - name: LinearizeForCharAccess
2354   shared: true
2355   transpile: true
2356   cost_estimate: 4
2357   args:
2358     str: StringId
2359     index: Int32Id
2360     result: StringId
2362 - name: LinearizeForCodePointAccess
2363   shared: true
2364   transpile: true
2365   cost_estimate: 4
2366   args:
2367     str: StringId
2368     index: Int32Id
2369     result: StringId
2371 - name: ToRelativeStringIndex
2372   shared: true
2373   transpile: true
2374   cost_estimate: 1
2375   args:
2376     index: Int32Id
2377     str: StringId
2378     result: Int32Id
2380 - name: LoadStringCharResult
2381   shared: false
2382   transpile: true
2383   cost_estimate: 5
2384   args:
2385     str: StringId
2386     index: Int32Id
2387     handleOOB: BoolImm
2389 - name: LoadStringAtResult
2390   shared: false
2391   transpile: true
2392   cost_estimate: 5
2393   args:
2394     str: StringId
2395     index: Int32Id
2396     handleOOB: BoolImm
2398 - name: LoadStringCharCodeResult
2399   shared: true
2400   transpile: true
2401   cost_estimate: 3
2402   args:
2403     str: StringId
2404     index: Int32Id
2405     handleOOB: BoolImm
2407 - name: LoadStringCodePointResult
2408   shared: true
2409   transpile: true
2410   cost_estimate: 3
2411   args:
2412     str: StringId
2413     index: Int32Id
2414     handleOOB: BoolImm
2416 - name: LoadStringLengthResult
2417   shared: true
2418   transpile: true
2419   cost_estimate: 1
2420   args:
2421     str: StringId
2423 - name: FrameIsConstructingResult
2424   shared: false
2425   transpile: true
2426   cost_estimate: 1
2427   args:
2429 - name: LoadObjectResult
2430   shared: true
2431   transpile: true
2432   cost_estimate: 1
2433   args:
2434     obj: ObjId
2436 - name: LoadStringResult
2437   shared: true
2438   transpile: true
2439   cost_estimate: 1
2440   args:
2441     str: StringId
2443 - name: LoadSymbolResult
2444   shared: true
2445   transpile: true
2446   cost_estimate: 1
2447   args:
2448     sym: SymbolId
2450 - name: LoadInt32Result
2451   shared: true
2452   transpile: true
2453   cost_estimate: 1
2454   args:
2455     val: Int32Id
2457 - name: LoadDoubleResult
2458   shared: true
2459   transpile: true
2460   cost_estimate: 2
2461   args:
2462     val: NumberId
2464 - name: LoadBigIntResult
2465   shared: true
2466   transpile: true
2467   cost_estimate: 1
2468   args:
2469     val: BigIntId
2471 - name: CallScriptedGetterResult
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: CallInlinedGetterResult
2483   shared: false
2484   transpile: true
2485   cost_estimate: 5
2486   custom_writer: true
2487   args:
2488     receiver: ValId
2489     getter: ObjectField
2490     icScript: RawPointerField
2491     sameRealm: BoolImm
2492     nargsAndFlags: RawInt32Field
2494 - name: CallNativeGetterResult
2495   shared: false
2496   transpile: true
2497   cost_estimate: 5
2498   custom_writer: true
2499   args:
2500     receiver: ValId
2501     getter: ObjectField
2502     sameRealm: BoolImm
2503     nargsAndFlags: RawInt32Field
2505 - name: CallDOMGetterResult
2506   shared: false
2507   transpile: true
2508   cost_estimate: 4
2509   args:
2510     obj: ObjId
2511     jitInfo: RawPointerField
2513 - name: ProxyGetResult
2514   shared: false
2515   transpile: true
2516   cost_estimate: 5
2517   args:
2518     obj: ObjId
2519     id: IdField
2521 - name: ProxyGetByValueResult
2522   shared: true
2523   transpile: true
2524   cost_estimate: 5
2525   args:
2526     obj: ObjId
2527     id: ValId
2529 - name: ProxyHasPropResult
2530   shared: true
2531   transpile: true
2532   cost_estimate: 5
2533   args:
2534     obj: ObjId
2535     id: ValId
2536     hasOwn: BoolImm
2538 - name: CallObjectHasSparseElementResult
2539   shared: true
2540   transpile: true
2541   cost_estimate: 4
2542   args:
2543     obj: ObjId
2544     index: Int32Id
2546 - name: CallNativeGetElementResult
2547   shared: true
2548   transpile: true
2549   cost_estimate: 5
2550   args:
2551     obj: ObjId
2552     index: Int32Id
2554 - name: CallNativeGetElementSuperResult
2555   shared: true
2556   transpile: true
2557   cost_estimate: 5
2558   args:
2559     obj: ObjId
2560     index: Int32Id
2561     receiver: ValId
2563 - name: GetNextMapSetEntryForIteratorResult
2564   shared: true
2565   transpile: true
2566   cost_estimate: 4
2567   args:
2568     iter: ObjId
2569     resultArr: ObjId
2570     isMap: BoolImm
2572 - name: LoadUndefinedResult
2573   shared: true
2574   transpile: true
2575   cost_estimate: 1
2576   args:
2578 - name: LoadBooleanResult
2579   shared: true
2580   transpile: true
2581   cost_estimate: 1
2582   args:
2583     val: BoolImm
2585 - name: LoadInt32Constant
2586   shared: true
2587   transpile: true
2588   cost_estimate: 1
2589   args:
2590     val: RawInt32Field
2591     result: Int32Id
2593 - name: LoadDoubleConstant
2594   shared: true
2595   transpile: true
2596   cost_estimate: 1
2597   args:
2598     val: DoubleField
2599     result: NumberId
2601 - name: LoadBooleanConstant
2602   shared: true
2603   transpile: true
2604   cost_estimate: 1
2605   args:
2606     val: BoolImm
2607     result: BooleanId
2609 - name: LoadUndefined
2610   shared: true
2611   transpile: true
2612   cost_estimate: 1
2613   args:
2614     result: ValId
2616 - name: LoadConstantString
2617   shared: true
2618   transpile: true
2619   cost_estimate: 1
2620   args:
2621     str: StringField
2622     result: StringId
2624 - name: LoadConstantStringResult
2625   shared: false
2626   transpile: true
2627   cost_estimate: 1
2628   args:
2629     str: StringField
2631 - name: LoadInstanceOfObjectResult
2632   shared: true
2633   transpile: true
2634   cost_estimate: 3
2635   args:
2636     lhs: ValId
2637     proto: ObjId
2639 - name: LoadTypeOfObjectResult
2640   shared: true
2641   transpile: true
2642   cost_estimate: 4
2643   args:
2644     obj: ObjId
2646 - name: LoadTypeOfEqObjectResult
2647   shared: true
2648   transpile: true
2649   cost_estimate: 4
2650   args:
2651     obj: ObjId
2652     operand: TypeofEqOperandImm
2654 - name: DoubleAddResult
2655   shared: true
2656   transpile: true
2657   cost_estimate: 2
2658   args:
2659     lhs: NumberId
2660     rhs: NumberId
2662 - name: DoubleSubResult
2663   shared: true
2664   transpile: true
2665   cost_estimate: 2
2666   args:
2667     lhs: NumberId
2668     rhs: NumberId
2670 - name: DoubleMulResult
2671   shared: true
2672   transpile: true
2673   cost_estimate: 2
2674   args:
2675     lhs: NumberId
2676     rhs: NumberId
2678 - name: DoubleDivResult
2679   shared: true
2680   transpile: true
2681   cost_estimate: 2
2682   args:
2683     lhs: NumberId
2684     rhs: NumberId
2686 - name: DoubleModResult
2687   shared: true
2688   transpile: true
2689   cost_estimate: 4
2690   args:
2691     lhs: NumberId
2692     rhs: NumberId
2694 - name: DoublePowResult
2695   shared: true
2696   transpile: true
2697   cost_estimate: 4
2698   args:
2699     lhs: NumberId
2700     rhs: NumberId
2702 - name: Int32AddResult
2703   shared: true
2704   transpile: true
2705   cost_estimate: 1
2706   args:
2707     lhs: Int32Id
2708     rhs: Int32Id
2710 - name: Int32SubResult
2711   shared: true
2712   transpile: true
2713   cost_estimate: 1
2714   args:
2715     lhs: Int32Id
2716     rhs: Int32Id
2718 - name: Int32MulResult
2719   shared: true
2720   transpile: true
2721   cost_estimate: 2
2722   args:
2723     lhs: Int32Id
2724     rhs: Int32Id
2726 - name: Int32DivResult
2727   shared: true
2728   transpile: true
2729   cost_estimate: 2
2730   args:
2731     lhs: Int32Id
2732     rhs: Int32Id
2734 - name: Int32ModResult
2735   shared: true
2736   transpile: true
2737   cost_estimate: 2
2738   args:
2739     lhs: Int32Id
2740     rhs: Int32Id
2742 - name: Int32PowResult
2743   shared: true
2744   transpile: true
2745   cost_estimate: 1
2746   args:
2747     lhs: Int32Id
2748     rhs: Int32Id
2750 - name: BigIntAddResult
2751   shared: true
2752   transpile: true
2753   cost_estimate: 5
2754   args:
2755     lhs: BigIntId
2756     rhs: BigIntId
2758 - name: BigIntSubResult
2759   shared: true
2760   transpile: true
2761   cost_estimate: 5
2762   args:
2763     lhs: BigIntId
2764     rhs: BigIntId
2766 - name: BigIntMulResult
2767   shared: true
2768   transpile: true
2769   cost_estimate: 5
2770   args:
2771     lhs: BigIntId
2772     rhs: BigIntId
2774 - name: BigIntDivResult
2775   shared: true
2776   transpile: true
2777   cost_estimate: 5
2778   args:
2779     lhs: BigIntId
2780     rhs: BigIntId
2782 - name: BigIntModResult
2783   shared: true
2784   transpile: true
2785   cost_estimate: 5
2786   args:
2787     lhs: BigIntId
2788     rhs: BigIntId
2790 - name: BigIntPowResult
2791   shared: true
2792   transpile: true
2793   cost_estimate: 5
2794   args:
2795     lhs: BigIntId
2796     rhs: BigIntId
2798 - name: Int32BitOrResult
2799   shared: true
2800   transpile: true
2801   cost_estimate: 1
2802   args:
2803     lhs: Int32Id
2804     rhs: Int32Id
2806 - name: Int32BitXorResult
2807   shared: true
2808   transpile: true
2809   cost_estimate: 1
2810   args:
2811     lhs: Int32Id
2812     rhs: Int32Id
2814 - name: Int32BitAndResult
2815   shared: true
2816   transpile: true
2817   cost_estimate: 1
2818   args:
2819     lhs: Int32Id
2820     rhs: Int32Id
2822 - name: Int32LeftShiftResult
2823   shared: true
2824   transpile: true
2825   cost_estimate: 1
2826   args:
2827     lhs: Int32Id
2828     rhs: Int32Id
2830 - name: Int32RightShiftResult
2831   shared: true
2832   transpile: true
2833   cost_estimate: 1
2834   args:
2835     lhs: Int32Id
2836     rhs: Int32Id
2838 - name: Int32URightShiftResult
2839   shared: true
2840   transpile: true
2841   cost_estimate: 2
2842   args:
2843     lhs: Int32Id
2844     rhs: Int32Id
2845     forceDouble: BoolImm
2847 - name: Int32NotResult
2848   shared: true
2849   transpile: true
2850   cost_estimate: 1
2851   args:
2852     input: Int32Id
2854 - name: BigIntBitOrResult
2855   shared: true
2856   transpile: true
2857   cost_estimate: 5
2858   args:
2859     lhs: BigIntId
2860     rhs: BigIntId
2862 - name: BigIntBitXorResult
2863   shared: true
2864   transpile: true
2865   cost_estimate: 5
2866   args:
2867     lhs: BigIntId
2868     rhs: BigIntId
2870 - name: BigIntBitAndResult
2871   shared: true
2872   transpile: true
2873   cost_estimate: 5
2874   args:
2875     lhs: BigIntId
2876     rhs: BigIntId
2878 - name: BigIntLeftShiftResult
2879   shared: true
2880   transpile: true
2881   cost_estimate: 5
2882   args:
2883     lhs: BigIntId
2884     rhs: BigIntId
2886 - name: BigIntRightShiftResult
2887   shared: true
2888   transpile: true
2889   cost_estimate: 5
2890   args:
2891     lhs: BigIntId
2892     rhs: BigIntId
2894 - name: BigIntNotResult
2895   shared: true
2896   transpile: true
2897   cost_estimate: 5
2898   args:
2899     input: BigIntId
2901 - name: Int32NegationResult
2902   shared: true
2903   transpile: true
2904   cost_estimate: 1
2905   args:
2906     input: Int32Id
2908 - name: DoubleNegationResult
2909   shared: true
2910   transpile: true
2911   cost_estimate: 1
2912   args:
2913     input: NumberId
2915 - name: BigIntNegationResult
2916   shared: true
2917   transpile: true
2918   cost_estimate: 5
2919   args:
2920     input: BigIntId
2922 - name: Int32IncResult
2923   shared: true
2924   transpile: true
2925   cost_estimate: 1
2926   args:
2927     input: Int32Id
2929 - name: Int32DecResult
2930   shared: true
2931   transpile: true
2932   cost_estimate: 1
2933   args:
2934     input: Int32Id
2936 - name: DoubleIncResult
2937   shared: true
2938   transpile: true
2939   cost_estimate: 1
2940   args:
2941     input: NumberId
2943 - name: DoubleDecResult
2944   shared: true
2945   transpile: true
2946   cost_estimate: 1
2947   args:
2948     input: NumberId
2950 - name: BigIntIncResult
2951   shared: true
2952   transpile: true
2953   cost_estimate: 5
2954   args:
2955     input: BigIntId
2957 - name: BigIntDecResult
2958   shared: true
2959   transpile: true
2960   cost_estimate: 5
2961   args:
2962     input: BigIntId
2964 - name: LoadInt32TruthyResult
2965   shared: true
2966   transpile: true
2967   cost_estimate: 2
2968   args:
2969     input: ValId
2971 - name: LoadDoubleTruthyResult
2972   shared: true
2973   transpile: true
2974   cost_estimate: 2
2975   args:
2976     input: NumberId
2978 - name: LoadStringTruthyResult
2979   shared: true
2980   transpile: true
2981   cost_estimate: 2
2982   args:
2983     str: StringId
2985 - name: LoadObjectTruthyResult
2986   shared: true
2987   transpile: true
2988   cost_estimate: 4
2989   args:
2990     obj: ObjId
2992 - name: LoadBigIntTruthyResult
2993   shared: true
2994   transpile: true
2995   cost_estimate: 2
2996   args:
2997     bigInt: BigIntId
2999 - name: LoadValueTruthyResult
3000   shared: true
3001   transpile: true
3002   cost_estimate: 4
3003   args:
3004     input: ValId
3006 - name: LoadValueResult
3007   shared: false
3008   transpile: false
3009   cost_estimate: 1
3010   args:
3011     val: ValueField
3013 - name: LoadOperandResult
3014   shared: true
3015   transpile: true
3016   cost_estimate: 1
3017   args:
3018     input: ValId
3020 - name: NewPlainObjectResult
3021   shared: false
3022   transpile: true
3023   cost_estimate: 4
3024   args:
3025     numFixedSlots: UInt32Imm
3026     numDynamicSlots: UInt32Imm
3027     allocKind: AllocKindImm
3028     shape: ShapeField
3029     site: AllocSiteField
3031 - name: NewArrayObjectResult
3032   shared: false
3033   transpile: true
3034   cost_estimate: 4
3035   args:
3036     arrayLength: UInt32Imm
3037     shape: ShapeField
3038     site: AllocSiteField
3040 - name: CallStringConcatResult
3041   shared: true
3042   transpile: true
3043   cost_estimate: 5
3044   args:
3045     lhs: StringId
3046     rhs: StringId
3048 - name: CallStringObjectConcatResult
3049   shared: false
3050   transpile: false
3051   cost_estimate: 5
3052   args:
3053     lhs: ValId
3054     rhs: ValId
3056 - name: CallIsSuspendedGeneratorResult
3057   shared: true
3058   transpile: false
3059   cost_estimate: 2
3060   args:
3061     val: ValId
3063 - name: CompareStringResult
3064   shared: false
3065   transpile: true
3066   cost_estimate: 5
3067   args:
3068     op: JSOpImm
3069     lhs: StringId
3070     rhs: StringId
3072 - name: CompareObjectResult
3073   shared: true
3074   transpile: true
3075   cost_estimate: 2
3076   args:
3077     op: JSOpImm
3078     lhs: ObjId
3079     rhs: ObjId
3081 - name: CompareSymbolResult
3082   shared: true
3083   transpile: true
3084   cost_estimate: 2
3085   args:
3086     op: JSOpImm
3087     lhs: SymbolId
3088     rhs: SymbolId
3090 - name: CompareInt32Result
3091   shared: true
3092   transpile: true
3093   cost_estimate: 2
3094   args:
3095     op: JSOpImm
3096     lhs: Int32Id
3097     rhs: Int32Id
3099 - name: CompareDoubleResult
3100   shared: true
3101   transpile: true
3102   cost_estimate: 2
3103   args:
3104     op: JSOpImm
3105     lhs: NumberId
3106     rhs: NumberId
3108 - name: CompareBigIntResult
3109   shared: true
3110   transpile: true
3111   cost_estimate: 4
3112   args:
3113     op: JSOpImm
3114     lhs: BigIntId
3115     rhs: BigIntId
3117 - name: CompareBigIntInt32Result
3118   shared: true
3119   transpile: true
3120   cost_estimate: 3
3121   args:
3122     op: JSOpImm
3123     lhs: BigIntId
3124     rhs: Int32Id
3126 - name: CompareBigIntNumberResult
3127   shared: true
3128   transpile: true
3129   cost_estimate: 4
3130   args:
3131     op: JSOpImm
3132     lhs: BigIntId
3133     rhs: NumberId
3135 - name: CompareBigIntStringResult
3136   shared: true
3137   transpile: true
3138   cost_estimate: 5
3139   args:
3140     op: JSOpImm
3141     lhs: BigIntId
3142     rhs: StringId
3144 - name: CompareNullUndefinedResult
3145   shared: true
3146   transpile: true
3147   cost_estimate: 2
3148   args:
3149     op: JSOpImm
3150     isUndefined: BoolImm
3151     input: ValId
3153 - name: CompareDoubleSameValueResult
3154   shared: true
3155   transpile: true
3156   cost_estimate: 3
3157   args:
3158     lhs: NumberId
3159     rhs: NumberId
3161 - name: SameValueResult
3162   shared: false
3163   transpile: true
3164   cost_estimate: 4
3165   args:
3166     lhs: ValId
3167     rhs: ValId
3169 - name: IndirectTruncateInt32Result
3170   shared: true
3171   transpile: true
3172   cost_estimate: 1
3173   args:
3174     val: Int32Id
3176 - name: BigIntAsIntNResult
3177   shared: true
3178   transpile: true
3179   cost_estimate: 5
3180   args:
3181     bits: Int32Id
3182     bigInt: BigIntId
3184 - name: BigIntAsUintNResult
3185   shared: true
3186   transpile: true
3187   cost_estimate: 5
3188   args:
3189     bits: Int32Id
3190     bigInt: BigIntId
3192 - name: SetHasResult
3193   shared: true
3194   transpile: true
3195   cost_estimate: 5
3196   args:
3197     set: ObjId
3198     val: ValId
3200 - name: SetHasNonGCThingResult
3201   shared: true
3202   transpile: true
3203   cost_estimate: 3
3204   args:
3205     set: ObjId
3206     val: ValId
3208 - name: SetHasStringResult
3209   shared: false
3210   transpile: true
3211   cost_estimate: 5
3212   args:
3213     set: ObjId
3214     str: StringId
3216 - name: SetHasSymbolResult
3217   shared: true
3218   transpile: true
3219   cost_estimate: 3
3220   args:
3221     set: ObjId
3222     sym: SymbolId
3224 - name: SetHasBigIntResult
3225   shared: true
3226   transpile: true
3227   cost_estimate: 3
3228   args:
3229     set: ObjId
3230     bigInt: BigIntId
3232 - name: SetHasObjectResult
3233   shared: true
3234   transpile: true
3235   cost_estimate: 3
3236   args:
3237     set: ObjId
3238     obj: ObjId
3240 - name: SetSizeResult
3241   shared: true
3242   transpile: true
3243   cost_estimate: 1
3244   args:
3245     set: ObjId
3247 - name: MapHasResult
3248   shared: true
3249   transpile: true
3250   cost_estimate: 5
3251   args:
3252     map: ObjId
3253     val: ValId
3255 - name: MapHasNonGCThingResult
3256   shared: true
3257   transpile: true
3258   cost_estimate: 3
3259   args:
3260     map: ObjId
3261     val: ValId
3263 - name: MapHasStringResult
3264   shared: false
3265   transpile: true
3266   cost_estimate: 5
3267   args:
3268     map: ObjId
3269     str: StringId
3271 - name: MapHasSymbolResult
3272   shared: true
3273   transpile: true
3274   cost_estimate: 3
3275   args:
3276     map: ObjId
3277     sym: SymbolId
3279 - name: MapHasBigIntResult
3280   shared: true
3281   transpile: true
3282   cost_estimate: 3
3283   args:
3284     map: ObjId
3285     bigInt: BigIntId
3287 - name: MapHasObjectResult
3288   shared: true
3289   transpile: true
3290   cost_estimate: 3
3291   args:
3292     map: ObjId
3293     obj: ObjId
3295 - name: MapGetResult
3296   shared: true
3297   transpile: true
3298   cost_estimate: 5
3299   args:
3300     map: ObjId
3301     val: ValId
3303 - name: MapGetNonGCThingResult
3304   shared: true
3305   transpile: true
3306   cost_estimate: 3
3307   args:
3308     map: ObjId
3309     val: ValId
3311 - name: MapGetStringResult
3312   shared: false
3313   transpile: true
3314   cost_estimate: 5
3315   args:
3316     map: ObjId
3317     str: StringId
3319 - name: MapGetSymbolResult
3320   shared: true
3321   transpile: true
3322   cost_estimate: 3
3323   args:
3324     map: ObjId
3325     sym: SymbolId
3327 - name: MapGetBigIntResult
3328   shared: true
3329   transpile: true
3330   cost_estimate: 3
3331   args:
3332     map: ObjId
3333     bigInt: BigIntId
3335 - name: MapGetObjectResult
3336   shared: true
3337   transpile: true
3338   cost_estimate: 3
3339   args:
3340     map: ObjId
3341     obj: ObjId
3343 - name: MapSizeResult
3344   shared: true
3345   transpile: true
3346   cost_estimate: 1
3347   args:
3348     map: ObjId
3350 - name: ArrayFromArgumentsObjectResult
3351   shared: true
3352   transpile: true
3353   cost_estimate: 5
3354   args:
3355     obj: ObjId
3356     shape: ShapeField
3358 - name: CloseIterScriptedResult
3359   shared: false
3360   transpile: true
3361   cost_estimate: 5
3362   args:
3363     iter: ObjId
3364     callee: ObjId
3365     kind: CompletionKindImm
3366     targetNargs: UInt32Imm
3368 - name: CallPrintString
3369   shared: true
3370   transpile: false
3371   cost_estimate: 1
3372   args:
3373     str: StaticStringImm
3375 - name: Breakpoint
3376   shared: true
3377   transpile: false
3378   cost_estimate: 1
3379   args:
3381 - name: WrapResult
3382   shared: true
3383   transpile: false
3384   cost_estimate: 4
3385   args:
3387 - name: Bailout
3388   shared: true
3389   transpile: true
3390   cost_estimate: 0
3391   args:
3393 - name: AssertRecoveredOnBailoutResult
3394   shared: true
3395   transpile: true
3396   cost_estimate: 1
3397   args:
3398     val: ValId
3399     mustBeRecovered: BoolImm
3401 - name: AssertPropertyLookup
3402   shared: true
3403   transpile: true
3404   cost_estimate: 4
3405   args:
3406     obj: ObjId
3407     id: IdField
3408     slot: RawInt32Field
3410 #ifdef FUZZING_JS_FUZZILLI
3411 - name: FuzzilliHashResult
3412   shared: true
3413   transpile: true
3414   cost_estimate: 4
3415   args:
3416     val: ValId
3417 #endif