Bug 1842773 - Part 19: Add guard instruction for fixed-length typed arrays. r=sfink...
[gecko.git] / js / src / jit / LIROps.yaml
blob2384f34948f27220a645f301876800ad554c5db4
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] LIR Opcodes
6 # =======================
7 # This file defines all LIR opcodes as well as LIR opcode class
8 # definitions. It is parsed by GenerateLIRFiles.py at build time to
9 # create LIROpsGenerated.h. Each opcode consists of a
10 # name and a set of attributes that are described below. Unless
11 # marked as required, attributes are optional.
13 # name [required]
14 # ====
15 # Opcode name.
16 # Possible values:
17 #   - opcode string: used as the name for LIR opcode.
19 # gen_boilerplate
20 # ===============
21 # Used to decide to generate LIR boilerplate.
22 #   - true (default): auto generate boilerplate for this LIR opcode
23 #   - false: do not generate boilerplate for this LIR opcode
25 # result_type
26 # ===========
27 # Specifies the result type that is produced by this LIR instruction.
28 # The result type can be any of the following: WordSized, BoxedValue,
29 # or Int64.
30 #   - attribute not specified (default): there is no result produced
31 #     by this LIR instruction
32 #   - result type: sets result type for this LIR instruction
34 # operands
35 # ========
36 # A list of operands to the LIR node. Each operand will be
37 # passed into and set in the instruction's constructor. A simple getter
38 # will also be auto generated for the operand. Each operand in the
39 # following list is defined by its name and an type.
40 # The type can be WordSized, BoxedValue, or Int64.
42 #   For example:
43 #     operands:
44 #       lhs: BoxedValue
45 #       rhs: WordSized
47 #   Will result in:
48 #     explicit LInstanceOfV(const LBoxAllocation& lhs, const LAllocation& rhs)
49 #         : LInstructionHelper(classOpcode) {
50 #       setBoxOperand(lhsIndex, lhs);
51 #       setOperand(rhsIndex, rhs);
52 #     }
53 #     const LAllocation* rhs() { return getOperand(0); }
55 #     static const size_t lhsIndex = 0;
56 #     static const size_t rhsIndex = BOX_PIECES;
58 #   - attribute not specified (default): no code generated
59 #   - list of operand names with their types: operand getters and setters
60 #     are generated and passed into the constructor
62 # arguments
63 # =========
64 # A list of non-LIR node arguments to the LIR op class constructor
65 # that are passed along with the operands. The arguments require
66 # both a name and a full type signature for each item in the list.
68 # For example:
69 #   offset: size_t
70 #   type: MIRType
72 # For each argument a private variable declaration will be autogenerated
73 # in the LIR op class, as well as simple accessor for that variable. The
74 # above arguments list will result in the following declarations and
75 # accessors:
77 #   size_t offset_;
78 #   MIRType type_;
80 #   size_t offset() const { return offset_; }
81 #   MIRType type() const { return type_; }
83 #   - attribute not specified (default): no code generated
84 #   - argument list: argument names and their full type signature
86 # num_temps
87 # ========
88 # Specifies the number of temporary virtual registers, LDefinitions, used by
89 # this LIR op.
90 #   - attribute not specified (default): number of temps is set to 0
91 #   - number of LDefinition temps: sets number of temps max 15
93 # call_instruction
94 # ================
95 # Used to define call instructions.
96 #   - attribute not specified (default): no code generated
97 #   - true: generates a call to setIsCall in the op's constructor
99 # mir_op
100 # ======
101 # If a LIR instruction corresponds one-to-one with a particular MIR
102 # instruction, this will generate a method that returns that MIR
103 # instruction.
104 #   - attribute not specified (default): no code generated
105 #   - true: generates a method to return MIR instruction
106 #   - mir string: returns this specified MIR instruction
109 - name: Phi
110   gen_boilerplate: false
112 - name: Box
113   gen_boilerplate: false
115 - name: OsiPoint
116   gen_boilerplate: false
118 - name: MoveGroup
119   gen_boilerplate: false
121 # Constant 32-bit integer.
122 - name: Integer
123   result_type: WordSized
124   arguments:
125     i32: int32_t
127 # Constant 64-bit integer.
128 - name: Integer64
129   result_type: Int64
130   arguments:
131     i64: int64_t
133 # Constant pointer.
134 - name: Pointer
135   result_type: WordSized
136   arguments:
137     gcptr: gc::Cell*
139 # Constant double.
140 - name: Double
141   result_type: WordSized
142   arguments:
143     value: double
145 # Constant float32.
146 - name: Float32
147   result_type: WordSized
148   arguments:
149     value: float
151 - name: Value
152   gen_boilerplate: false
154 - name: NurseryObject
155   result_type: WordSized
156   mir_op: true
158 # Formal argument for a function, returning a box. Formal arguments are
159 # initially read from the stack.
160 - name: Parameter
161   result_type: BoxedValue
163 # Stack offset for a word-sized immutable input value to a frame.
164 - name: Callee
165   result_type: WordSized
167 - name: IsConstructing
168   result_type: WordSized
170 - name: Goto
171   gen_boilerplate: false
173 - name: NewArray
174   gen_boilerplate: false
176 - name: NewArrayDynamicLength
177   result_type: WordSized
178   operands:
179     length: WordSized
180   num_temps: 1
181   mir_op: true
183 - name: NewIterator
184   result_type: WordSized
185   num_temps: 1
186   mir_op: true
188 - name: NewTypedArray
189   result_type: WordSized
190   num_temps: 2
191   mir_op: true
193 - name: NewTypedArrayDynamicLength
194   result_type: WordSized
195   operands:
196     length: WordSized
197   num_temps: 1
198   mir_op: true
200 - name: NewTypedArrayFromArray
201   result_type: WordSized
202   operands:
203     array: WordSized
204   call_instruction: true
205   mir_op: true
207 - name: NewTypedArrayFromArrayBuffer
208   result_type: WordSized
209   operands:
210     arrayBuffer: WordSized
211     byteOffset: BoxedValue
212     length: BoxedValue
213   call_instruction: true
214   mir_op: true
216 - name: BindFunction
217   result_type: WordSized
218   operands:
219     target: WordSized
220   call_instruction: true
221   num_temps: 2
222   mir_op: true
224 - name: NewBoundFunction
225   result_type: WordSized
226   num_temps: 1
227   mir_op: true
229 - name: NewObject
230   gen_boilerplate: false
232 - name: NewPlainObject
233   result_type: WordSized
234   num_temps: 3
235   mir_op: true
237 - name: NewArrayObject
238   result_type: WordSized
239   num_temps: 2
240   mir_op: true
242 # Allocates a new NamedLambdaObject.
244 # This instruction generates two possible instruction sets:
245 #   (1) An inline allocation of the call object is attempted.
246 #   (2) Otherwise, a callVM create a new object.
248 - name: NewNamedLambdaObject
249   result_type: WordSized
250   num_temps: 1
251   mir_op: true
253 # Allocates a new CallObject.
255 # This instruction generates two possible instruction sets:
256 #   (1) If the call object is extensible, this is a callVM to create the
257 #       call object.
258 #   (2) Otherwise, an inline allocation of the call object is attempted.
260 - name: NewCallObject
261   result_type: WordSized
262   num_temps: 1
263   mir_op: true
265 - name: NewStringObject
266   result_type: WordSized
267   operands:
268     input: WordSized
269   num_temps: 1
270   mir_op: true
272 - name: InitElemGetterSetter
273   operands:
274     object: WordSized
275     id: BoxedValue
276     value: WordSized
277   call_instruction: true
278   mir_op: true
280 # Takes in an Object and a Value.
281 - name: MutateProto
282   operands:
283     object: WordSized
284     value: BoxedValue
285   call_instruction: true
287 - name: InitPropGetterSetter
288   operands:
289     object: WordSized
290     value: WordSized
291   call_instruction: true
292   mir_op: true
294 - name: CheckOverRecursed
295   mir_op: true
297 - name: WasmTrap
298   mir_op: true
300 - name: WasmTrapIfNull
301   operands:
302     ref: WordSized
303   mir_op: true
305 - name: WasmRefIsSubtypeOfConcrete
306   mir_op: true
307   operands:
308     ref: WordSized
309     superSTV: WordSized
310   result_type: WordSized
311   num_temps: 2
313 - name: WasmRefIsSubtypeOfAbstract
314   mir_op: true
315   operands:
316     ref: WordSized
317   result_type: WordSized
318   num_temps: 1
320 - name: WasmRefIsSubtypeOfConcreteAndBranch
321   gen_boilerplate: false
323 - name: WasmRefIsSubtypeOfAbstractAndBranch
324   gen_boilerplate: false
326 - name: WasmNewStructObject
327   mir_op: true
328   operands:
329     instance: WordSized
330     typeDefData: WordSized
331   result_type: WordSized
332   num_temps: 2
334 - name: WasmReinterpret
335   gen_boilerplate: false
337 - name: WasmReinterpretFromI64
338   gen_boilerplate: false
340 - name: WasmReinterpretToI64
341   gen_boilerplate: false
343 - name: Rotate
344   gen_boilerplate: false
346 - name: RotateI64
347   gen_boilerplate: false
349 - name: InterruptCheck
350   mir_op: true
352 - name: WasmInterruptCheck
353   operands:
354     instance: WordSized
355   mir_op: true
357 - name: TypeOfV
358   result_type: WordSized
359   operands:
360     input: BoxedValue
361   num_temps: 1
362   mir_op: TypeOf
364 - name: TypeOfO
365   result_type: WordSized
366   operands:
367     object: WordSized
368   mir_op: TypeOf
370 - name: TypeOfName
371   result_type: WordSized
372   operands:
373     input: WordSized
374   mir_op: true
376 - name: TypeOfIsNonPrimitiveV
377   result_type: WordSized
378   operands:
379     input: BoxedValue
380   num_temps: 1
381   mir_op: TypeOfIs
383 - name: TypeOfIsNonPrimitiveO
384   result_type: WordSized
385   operands:
386     input: WordSized
387   mir_op: TypeOfIs
389 - name: TypeOfIsPrimitive
390   result_type: WordSized
391   operands:
392     input: BoxedValue
393   mir_op: TypeOfIs
395 - name: ToAsyncIter
396   result_type: WordSized
397   operands:
398     iterator: WordSized
399     nextMethod: BoxedValue
400   call_instruction: true
402 - name: ToPropertyKeyCache
403   result_type: BoxedValue
404   operands:
405     input: BoxedValue
406   mir_op: true
408 # Allocate an object for |new| on the caller-side,
409 # when there is no templateObject or prototype known
410 - name: CreateThis
411   result_type: BoxedValue
412   operands:
413     callee: WordSized
414     newTarget: WordSized
415   call_instruction: true
416   mir_op: true
418 # Allocate a new arguments object for the frame.
419 - name: CreateArgumentsObject
420   result_type: WordSized
421   operands:
422     callObject: WordSized
423   num_temps: 3
424   call_instruction: true
425   mir_op: true
427 - name: CreateInlinedArgumentsObject
428   gen_boilerplate: false
430 - name: GetInlinedArgument
431   gen_boilerplate: false
433 - name: GetInlinedArgumentHole
434   gen_boilerplate: false
436 # Get argument from arguments object.
437 - name: GetArgumentsObjectArg
438   result_type: BoxedValue
439   operands:
440     argsObject: WordSized
441   num_temps: 1
442   mir_op: true
444 # Set argument on arguments object.
445 - name: SetArgumentsObjectArg
446   operands:
447     argsObject: WordSized
448     value: BoxedValue
449   num_temps: 1
450   mir_op: true
452 # Load an element from an arguments object.
453 - name: LoadArgumentsObjectArg
454   result_type: BoxedValue
455   operands:
456     argsObject: WordSized
457     index: WordSized
458   num_temps: 1
460 # Load an element from an arguments object. Handles out-of-bounds accesses.
461 - name: LoadArgumentsObjectArgHole
462   result_type: BoxedValue
463   operands:
464     argsObject: WordSized
465     index: WordSized
466   num_temps: 1
468 # Return true if the element exists in the arguments object.
469 - name: InArgumentsObjectArg
470   result_type: WordSized
471   operands:
472     argsObject: WordSized
473     index: WordSized
474   num_temps: 1
476 # Return |arguments.length| unless it has been overridden.
477 - name: ArgumentsObjectLength
478   result_type: WordSized
479   operands:
480     argsObject: WordSized
482 # Create an array from an arguments object.
483 - name: ArrayFromArgumentsObject
484   result_type: WordSized
485   operands:
486     argsObject: WordSized
487   call_instruction: true
488   mir_op: true
490 # Guard that the given flags are not set on the arguments object.
491 - name: GuardArgumentsObjectFlags
492   operands:
493     argsObject: WordSized
494   num_temps: 1
495   mir_op: true
497 - name: BoundFunctionNumArgs
498   result_type: WordSized
499   operands:
500     object: WordSized
502 - name: GuardBoundFunctionIsConstructor
503   operands:
504     object: WordSized
506 # If the Value is an Object, return unbox(Value).
507 # Otherwise, return the other Object.
508 - name: ReturnFromCtor
509   result_type: WordSized
510   operands:
511     value: BoxedValue
512     object: WordSized
514 - name: BoxNonStrictThis
515   result_type: WordSized
516   operands:
517     value: BoxedValue
518   mir_op: true
520 - name: ImplicitThis
521   result_type: BoxedValue
522   operands:
523     env: WordSized
524   call_instruction: true
525   mir_op: true
527 # Writes a typed argument for a function call to the frame's argument vector.
528 - name: StackArgT
529   operands:
530     arg: WordSized
531   arguments:
532     # Index into frame-scope argument vector.
533     argslot: uint32_t
534     type: MIRType
536 # Writes a typed argument for a function call to the frame's argument vector.
537 - name: StackArgV
538   operands:
539     value: BoxedValue
540   arguments:
541     # Index into frame-scope argument vector.
542     argslot: uint32_t
544 - name: CallGeneric
545   gen_boilerplate: false
547 - name: CallKnown
548   gen_boilerplate: false
550 - name: CallNative
551   gen_boilerplate: false
553 - name: CallDOMNative
554   gen_boilerplate: false
556 - name: CallClassHook
557   gen_boilerplate: false
559 - name: Bail
561 - name: Unreachable
562   gen_boilerplate: false
564 - name: EncodeSnapshot
566 - name: UnreachableResultV
567   gen_boilerplate: false
569 - name: UnreachableResultT
570   result_type: WordSized
572 - name: GetDOMProperty
573   gen_boilerplate: false
575 - name: GetDOMMemberV
576   gen_boilerplate: false
578 - name: GetDOMMemberT
579   result_type: WordSized
580   operands:
581     object: WordSized
582   mir_op: GetDOMMember
584 - name: SetDOMProperty
585   gen_boilerplate: false
587 - name: LoadDOMExpandoValue
588   result_type: BoxedValue
589   operands:
590     proxy: WordSized
591   mir_op: true
593 - name: LoadDOMExpandoValueGuardGeneration
594   result_type: BoxedValue
595   operands:
596     proxy: WordSized
597   mir_op: true
599 - name: LoadDOMExpandoValueIgnoreGeneration
600   result_type: BoxedValue
601   operands:
602     proxy: WordSized
603   mir_op: true
605 - name: GuardDOMExpandoMissingOrGuardShape
606   operands:
607     input: BoxedValue
608   num_temps: 1
609   mir_op: true
611 - name: ApplyArgsGeneric
612   gen_boilerplate: false
614 - name: ApplyArgsObj
615   gen_boilerplate: false
617 - name: ApplyArrayGeneric
618   gen_boilerplate: false
620 - name: ConstructArgsGeneric
621   gen_boilerplate: false
623 - name: ConstructArrayGeneric
624   gen_boilerplate: false
626 - name: TestIAndBranch
627   gen_boilerplate: false
629 - name: TestI64AndBranch
630   gen_boilerplate: false
632 - name: TestDAndBranch
633   gen_boilerplate: false
635 - name: TestFAndBranch
636   gen_boilerplate: false
638 - name: TestBIAndBranch
639   gen_boilerplate: false
641 - name: TestOAndBranch
642   gen_boilerplate: false
644 - name: TestVAndBranch
645   gen_boilerplate: false
647 - name: Compare
648   gen_boilerplate: false
650 - name: CompareI64
651   gen_boilerplate: false
653 - name: CompareI64AndBranch
654   gen_boilerplate: false
656 - name: CompareAndBranch
657   gen_boilerplate: false
659 - name: CompareD
660   result_type: WordSized
661   operands:
662     left: WordSized
663     right: WordSized
664   mir_op: Compare
666 - name: CompareF
667   result_type: WordSized
668   operands:
669     left: WordSized
670     right: WordSized
671   mir_op: Compare
673 - name: CompareDAndBranch
674   gen_boilerplate: false
676 - name: CompareFAndBranch
677   gen_boilerplate: false
679 - name: CompareS
680   result_type: WordSized
681   operands:
682     left: WordSized
683     right: WordSized
684   mir_op: Compare
686 - name: CompareSInline
687   result_type: WordSized
688   operands:
689     input: WordSized
690   arguments:
691     constant: JSLinearString*
692   mir_op: Compare
694 - name: CompareSSingle
695   result_type: WordSized
696   operands:
697     input: WordSized
698   arguments:
699     jsop: JSOp
700     constant: JSLinearString*
701   num_temps: 1
702   mir_op: Compare
704 - name: CompareBigInt
705   result_type: WordSized
706   operands:
707     left: WordSized
708     right: WordSized
709   num_temps: 3
710   mir_op: Compare
712 - name: CompareBigIntInt32
713   result_type: WordSized
714   operands:
715     left: WordSized
716     right: WordSized
717   num_temps: 2
718   mir_op: Compare
720 - name: CompareBigIntDouble
721   result_type: WordSized
722   operands:
723     left: WordSized
724     right: WordSized
725   call_instruction: true
726   mir_op: Compare
728 - name: CompareBigIntString
729   result_type: WordSized
730   operands:
731     left: WordSized
732     right: WordSized
733   call_instruction: true
734   mir_op: Compare
736 - name: BitAndAndBranch
737   gen_boilerplate: false
739 # Takes a value and tests whether it is null, undefined, or is an object that
740 # emulates |undefined|, as determined by the JSCLASS_EMULATES_UNDEFINED class
741 # flag on unwrapped objects.  See also js::EmulatesUndefined.
742 - name: IsNullOrLikeUndefinedV
743   result_type: WordSized
744   operands:
745     value: BoxedValue
746   num_temps: 1
747   mir_op: Compare
749 # Takes an object pointer and tests whether it is an object that emulates
750 # |undefined|, as above.
751 - name: IsNullOrLikeUndefinedT
752   result_type: WordSized
753   operands:
754     input: WordSized
755   mir_op: Compare
757 # Takes a value and tests whether it is null.
758 - name: IsNull
759   result_type: WordSized
760   operands:
761     value: BoxedValue
762   mir_op: Compare
764 # Takes a value and tests whether it is undefined.
765 - name: IsUndefined
766   result_type: WordSized
767   operands:
768     value: BoxedValue
769   mir_op: Compare
771 - name: IsNullOrLikeUndefinedAndBranchV
772   gen_boilerplate: false
774 - name: IsNullOrLikeUndefinedAndBranchT
775   gen_boilerplate: false
777 - name: IsNullAndBranch
778   gen_boilerplate: false
780 - name: IsUndefinedAndBranch
781   gen_boilerplate: false
783 - name: SameValueDouble
784   result_type: WordSized
785   operands:
786     left: WordSized
787     right: WordSized
788   num_temps: 1
790 - name: SameValue
791   result_type: WordSized
792   operands:
793     lhs: BoxedValue
794     rhs: BoxedValue
796 # Not operation on an integer.
797 - name: NotI
798   result_type: WordSized
799   operands:
800     input: WordSized
802 # Not operation on an int64.
803 - name: NotI64
804   result_type: WordSized
805   operands:
806     inputI64: Int64
808 # Not operation on a double.
809 - name: NotD
810   result_type: WordSized
811   operands:
812     input: WordSized
813   mir_op: Not
815 # Not operation on a float32.
816 - name: NotF
817   result_type: WordSized
818   operands:
819     input: WordSized
820   mir_op: Not
822 # Not operation on a BigInt.
823 - name: NotBI
824   result_type: WordSized
825   operands:
826     input: WordSized
827   mir_op: Not
829 # Boolean complement operation on an object.
830 - name: NotO
831   result_type: WordSized
832   operands:
833     input: WordSized
834   mir_op: Not
836 # Boolean complement operation on a value.
837 - name: NotV
838   result_type: WordSized
839   operands:
840     input: BoxedValue
841   num_temps: 2
842   mir_op: Not
844 - name: BitNotI
845   gen_boilerplate: false
847 - name: BitNotI64
848   gen_boilerplate: false
850 - name: BitOpI
851   gen_boilerplate: false
853 - name: BitOpI64
854   gen_boilerplate: false
856 - name: ShiftI
857   gen_boilerplate: false
859 - name: ShiftI64
860   gen_boilerplate: false
862 - name: SignExtendInt32
863   result_type: WordSized
864   operands:
865     num: WordSized
866   arguments:
867     mode: MSignExtendInt32::Mode
869 - name: SignExtendInt64
870   gen_boilerplate: false
872 - name: UrshD
873   gen_boilerplate: false
875 - name: Return
876   gen_boilerplate: false
878 - name: Throw
879   operands:
880     value: BoxedValue
881   call_instruction: true
883 - name: ThrowWithStack
884   operands:
885     value: BoxedValue
886     stack: BoxedValue
887   call_instruction: true
889 - name: MinMaxI
890   gen_boilerplate: false
892 - name: MinMaxD
893   gen_boilerplate: false
895 - name: MinMaxF
896   gen_boilerplate: false
898 - name: MinMaxArrayI
899   gen_boilerplate: false
901 - name: MinMaxArrayD
902   gen_boilerplate: false
904 # Negative of integer
905 - name: NegI
906   result_type: WordSized
907   operands:
908     num: WordSized
910 # Negative of an int64
911 - name: NegI64
912   result_type: Int64
913   operands:
914     num: Int64
916 # Negative of double
917 - name: NegD
918   result_type: WordSized
919   operands:
920     num: WordSized
922 # Negative of float32
923 - name: NegF
924   result_type: WordSized
925   operands:
926     num: WordSized
928 # Absolute value of an integer.
929 - name: AbsI
930   result_type: WordSized
931   operands:
932     num: WordSized
933   mir_op: Abs
935 # Absolute value of a double.
936 - name: AbsD
937   result_type: WordSized
938   operands:
939     num: WordSized
941 # Absolute value of a float32.
942 - name: AbsF
943   result_type: WordSized
944   operands:
945     num: WordSized
947 - name: CopySignD
948   gen_boilerplate: false
950 - name: CopySignF
951   gen_boilerplate: false
953 # Count leading zeroes on an int32.
954 - name: ClzI
955   result_type: WordSized
956   operands:
957     num: WordSized
958   mir_op: Clz
960 # Count leading zeroes on an int64.
961 - name: ClzI64
962   result_type: Int64
963   operands:
964     num: Int64
965   mir_op: Clz
967 # Count trailing zeroes on an int32.
968 - name: CtzI
969   result_type: WordSized
970   operands:
971     num: WordSized
972   mir_op: Ctz
974 # Count trailing zeroes on an int64.
975 - name: CtzI64
976   result_type: Int64
977   operands:
978     num: Int64
979   mir_op: Ctz
981 # Count population on an int32.
982 - name: PopcntI
983   result_type: WordSized
984   operands:
985     num: WordSized
986   num_temps: 1
987   mir_op: Popcnt
989 # Count population on an int64.
990 - name: PopcntI64
991   result_type: Int64
992   operands:
993     num: Int64
994   num_temps: 1
995   mir_op: Popcnt
997 - name: SqrtD
998   result_type: WordSized
999   operands:
1000     num: WordSized
1002 - name: SqrtF
1003   result_type: WordSized
1004   operands:
1005     num: WordSized
1007 - name: Atan2D
1008   gen_boilerplate: false
1010 - name: Hypot
1011   gen_boilerplate: false
1013 # Double raised to an integer power.
1014 - name: PowI
1015   result_type: WordSized
1016   operands:
1017     value: WordSized
1018     power: WordSized
1019   call_instruction: true
1021 # Integer raised to an integer power.
1022 - name: PowII
1023   result_type: WordSized
1024   operands:
1025     value: WordSized
1026     power: WordSized
1027   num_temps: 2
1028   mir_op: Pow
1030 # Double raised to a double power.
1031 - name: PowD
1032   result_type: WordSized
1033   operands:
1034     value: WordSized
1035     power: WordSized
1036   call_instruction: true
1038 # Constant of a power of two raised to an integer power.
1039 - name: PowOfTwoI
1040   result_type: WordSized
1041   operands:
1042     power: WordSized
1043   arguments:
1044     base: uint32_t
1046 # Sign value of an integer.
1047 - name: SignI
1048   result_type: WordSized
1049   operands:
1050     num: WordSized
1052 # Sign value of an integer.
1053 - name: SignD
1054   result_type: WordSized
1055   operands:
1056     num: WordSized
1058 # Sign value of a double with expected int32 result.
1059 - name: SignDI
1060   result_type: WordSized
1061   operands:
1062     input: WordSized
1063   num_temps: 1
1065 - name: MathFunctionD
1066   gen_boilerplate: false
1068 - name: MathFunctionF
1069   gen_boilerplate: false
1071 - name: AddI
1072   gen_boilerplate: false
1074 - name: AddI64
1075   gen_boilerplate: false
1077 - name: SubI
1078   gen_boilerplate: false
1080 - name: SubI64
1081   gen_boilerplate: false
1083 - name: MulI64
1084   gen_boilerplate: false
1086 - name: MathD
1087   gen_boilerplate: false
1089 - name: MathF
1090   gen_boilerplate: false
1092 - name: ModD
1093   gen_boilerplate: false
1095 - name: ModPowTwoD
1096   gen_boilerplate: false
1098 - name: WasmBuiltinModD
1099   result_type: WordSized
1100   operands:
1101     lhs: WordSized
1102     rhs: WordSized
1103     instance: WordSized
1104   call_instruction: true
1105   mir_op: true
1107 - name: BigIntAdd
1108   gen_boilerplate: false
1110 - name: BigIntSub
1111   gen_boilerplate: false
1113 - name: BigIntMul
1114   gen_boilerplate: false
1116 - name: BigIntDiv
1117   gen_boilerplate: false
1119 - name: BigIntMod
1120   gen_boilerplate: false
1122 - name: BigIntPow
1123   gen_boilerplate: false
1125 - name: BigIntBitAnd
1126   gen_boilerplate: false
1128 - name: BigIntBitOr
1129   gen_boilerplate: false
1131 - name: BigIntBitXor
1132   gen_boilerplate: false
1134 - name: BigIntLsh
1135   gen_boilerplate: false
1137 - name: BigIntRsh
1138   gen_boilerplate: false
1140 - name: BigIntIncrement
1141   gen_boilerplate: false
1143 - name: BigIntDecrement
1144   gen_boilerplate: false
1146 - name: BigIntNegate
1147   gen_boilerplate: false
1149 - name: BigIntBitNot
1150   gen_boilerplate: false
1152 - name: Int32ToStringWithBase
1153   result_type: WordSized
1154   operands:
1155     input: WordSized
1156     base: WordSized
1157   num_temps: 2
1158   mir_op: true
1160 - name: NumberParseInt
1161   result_type: BoxedValue
1162   operands:
1163     string: WordSized
1164     radix: WordSized
1165   num_temps: 1
1166   call_instruction: true
1167   mir_op: true
1169 - name: DoubleParseInt
1170   result_type: WordSized
1171   operands:
1172     number: WordSized
1173   num_temps: 1
1174   mir_op: true
1176 # Adds two string, returning a string.
1177 - name: Concat
1178   result_type: WordSized
1179   operands:
1180     lhs: WordSized
1181     rhs: WordSized
1182   num_temps: 5
1184 # Linearize a string.
1185 - name: LinearizeString
1186   result_type: WordSized
1187   operands:
1188     str: WordSized
1189   mir_op: true
1191 # Linearize a string before a character access.
1192 - name: LinearizeForCharAccess
1193   result_type: WordSized
1194   operands:
1195     str: WordSized
1196     index: WordSized
1197   mir_op: true
1199 # Linearize a string before a code point access.
1200 - name: LinearizeForCodePointAccess
1201   result_type: WordSized
1202   operands:
1203     str: WordSized
1204     index: WordSized
1205   num_temps: 1
1206   mir_op: true
1208 # Compute the relative string index.
1209 - name: ToRelativeStringIndex
1210   result_type: WordSized
1211   operands:
1212     index: WordSized
1213     length: WordSized
1214   mir_op: true
1216 # Get uint16 character code from a string.
1217 - name: CharCodeAt
1218   result_type: WordSized
1219   operands:
1220     str: WordSized
1221     index: WordSized
1222   num_temps: 2
1224 # Get uint16 character code from a string. Return -1 on out-of-bounds.
1225 - name: CharCodeAtOrNegative
1226   result_type: WordSized
1227   operands:
1228     str: WordSized
1229     index: WordSized
1230   num_temps: 2
1232 # Get uint32 code point from a string.
1233 - name: CodePointAt
1234   result_type: WordSized
1235   operands:
1236     str: WordSized
1237     index: WordSized
1238   num_temps: 2
1240 # Get uint32 code point from a string. Return -1 on out-of-bounds.
1241 - name: CodePointAtOrNegative
1242   result_type: WordSized
1243   operands:
1244     str: WordSized
1245     index: WordSized
1246   num_temps: 2
1248 # Box the input if non-negative. Otherwise return NaN.
1249 - name: NegativeToNaN
1250   result_type: BoxedValue
1251   operands:
1252     input: WordSized
1254 # Box the input if non-negative. Otherwise return undefined.
1255 - name: NegativeToUndefined
1256   result_type: BoxedValue
1257   operands:
1258     input: WordSized
1260 # Convert uint16 character code to a string.
1261 - name: FromCharCode
1262   result_type: WordSized
1263   operands:
1264     code: WordSized
1266 # Convert non-negative input as a uint16 character code to a string. If the
1267 # input is negative, return the empty string.
1268 - name: FromCharCodeEmptyIfNegative
1269   result_type: WordSized
1270   operands:
1271     code: WordSized
1273 # Convert non-negative input as a uint16 character code to a string. If the
1274 # input is negative, return the undefined value.
1275 - name: FromCharCodeUndefinedIfNegative
1276   result_type: BoxedValue
1277   operands:
1278     code: WordSized
1280 # Convert uint32 code point to a string.
1281 - name: FromCodePoint
1282   result_type: WordSized
1283   operands:
1284     codePoint: WordSized
1285   num_temps: 2
1287 # Test if a string includes the search string.
1288 - name: StringIncludes
1289   result_type: WordSized
1290   operands:
1291     string: WordSized
1292     searchString: WordSized
1293   call_instruction: true
1295 # Test if a string includes the constant search string.
1296 - name: StringIncludesSIMD
1297   result_type: WordSized
1298   operands:
1299     string: WordSized
1300   arguments:
1301     searchString: JSLinearString*
1302   num_temps: 3
1304 # Search for the first index of the search string.
1305 - name: StringIndexOf
1306   result_type: WordSized
1307   operands:
1308     string: WordSized
1309     searchString: WordSized
1310   call_instruction: true
1312 # Search for the first index of the constant search string.
1313 - name: StringIndexOfSIMD
1314   result_type: WordSized
1315   operands:
1316     string: WordSized
1317   arguments:
1318     searchString: JSLinearString*
1319   num_temps: 3
1321 # Search for the last index of the search string.
1322 - name: StringLastIndexOf
1323   result_type: WordSized
1324   operands:
1325     string: WordSized
1326     searchString: WordSized
1327   call_instruction: true
1329 # Test if a string starts with the search string
1330 - name: StringStartsWith
1331   result_type: WordSized
1332   operands:
1333     string: WordSized
1334     searchString: WordSized
1335   call_instruction: true
1337 # Test if a string starts with the constant search string
1338 - name: StringStartsWithInline
1339   result_type: WordSized
1340   operands:
1341     string: WordSized
1342   arguments:
1343     searchString: JSLinearString*
1344   num_temps: 1
1346 # Test if a string ends with the search string
1347 - name: StringEndsWith
1348   result_type: WordSized
1349   operands:
1350     string: WordSized
1351     searchString: WordSized
1352   call_instruction: true
1354 # Test if a string ends with the constant search string
1355 - name: StringEndsWithInline
1356   result_type: WordSized
1357   operands:
1358     string: WordSized
1359   arguments:
1360     searchString: JSLinearString*
1361   num_temps: 1
1363 # Calls the ToLowerCase case conversion function. Inlines the case conversion
1364 # when possible.
1365 - name: StringToLowerCase
1366   result_type: WordSized
1367   operands:
1368     string: WordSized
1369   num_temps: 5
1370   mir_op: StringConvertCase
1372 # Calls the ToLowerCase case conversion function. Inlines the case conversion
1373 # when possible.
1374 - name: CharCodeToLowerCase
1375   result_type: WordSized
1376   operands:
1377     code: WordSized
1378   num_temps: 1
1379   mir_op: CharCodeConvertCase
1381 # Calls the ToUpperCase case conversion function.
1382 - name: StringToUpperCase
1383   result_type: WordSized
1384   operands:
1385     string: WordSized
1386   call_instruction: true
1387   mir_op: StringConvertCase
1389 # Calls the ToUpperCase case conversion function. Inlines the case conversion
1390 # when possible.
1391 - name: CharCodeToUpperCase
1392   result_type: WordSized
1393   operands:
1394     code: WordSized
1395   num_temps: 1
1396   mir_op: CharCodeConvertCase
1398 # Index of first non-whitespace character.
1399 - name: StringTrimStartIndex
1400   result_type: WordSized
1401   operands:
1402     string: WordSized
1404 # Index of last non-whitespace character.
1405 - name: StringTrimEndIndex
1406   result_type: WordSized
1407   operands:
1408     string: WordSized
1409     start: WordSized
1411 - name: StringSplit
1412   result_type: WordSized
1413   operands:
1414     string: WordSized
1415     separator: WordSized
1416   call_instruction: true
1417   mir_op: true
1419 - name: Substr
1420   result_type: WordSized
1421   operands:
1422     string: WordSized
1423     begin: WordSized
1424     length: WordSized
1425   num_temps: 3
1426   mir_op: true
1428 - name: Int32ToDouble
1429   result_type: WordSized
1430   operands:
1431     input: WordSized
1433 - name: Float32ToDouble
1434   result_type: WordSized
1435   operands:
1436     input: WordSized
1438 - name: DoubleToFloat32
1439   result_type: WordSized
1440   operands:
1441     input: WordSized
1443 - name: Int32ToFloat32
1444   result_type: WordSized
1445   operands:
1446     input: WordSized
1448 # Convert a value to a double.
1449 - name: ValueToDouble
1450   result_type: WordSized
1451   operands:
1452     input: BoxedValue
1453   mir_op: ToDouble
1455 # Convert a value to a float32.
1456 - name: ValueToFloat32
1457   result_type: WordSized
1458   operands:
1459     input: BoxedValue
1460   mir_op: ToFloat32
1462 - name: ValueToInt32
1463   gen_boilerplate: false
1465 # Convert a value to a BigInt.
1466 - name: ValueToBigInt
1467   result_type: WordSized
1468   operands:
1469     input: BoxedValue
1470   mir_op: ToBigInt
1472 # Convert a double to an int32.
1473 #   Input: floating-point Register
1474 #   Output: 32-bit integer
1475 #   Bailout: if the double cannot be converted to an integer.
1476 - name: DoubleToInt32
1477   result_type: WordSized
1478   operands:
1479     in: WordSized
1480   mir_op: ToNumberInt32
1482 # Convert a float32 to an int32.
1483 #   Input: floating-point Register
1484 #   Output: 32-bit integer
1485 #   Bailout: if the float32 cannot be converted to an integer.
1486 - name: Float32ToInt32
1487   result_type: WordSized
1488   operands:
1489     in: WordSized
1490   mir_op: ToNumberInt32
1492 # Convert a double to a truncated int32.
1493 #   Input: floating-point Register
1494 #   Output: 32-bit integer
1495 - name: TruncateDToInt32
1496   result_type: WordSized
1497   operands:
1498     in: WordSized
1499   num_temps: 1
1500   mir_op: TruncateToInt32
1502 # Convert a double to a truncated int32 with instance offset because we need it
1503 # for the slow ool path.
1504 - name: WasmBuiltinTruncateDToInt32
1505   result_type: WordSized
1506   operands:
1507     in: WordSized
1508     instance: WordSized
1509   num_temps: 1
1510   mir_op: WasmBuiltinTruncateToInt32
1512 # Convert a float32 to a truncated int32.
1513 #   Input: floating-point Register
1514 #   Output: 32-bit integer
1515 - name: TruncateFToInt32
1516   result_type: WordSized
1517   operands:
1518     in: WordSized
1519   num_temps: 1
1520   mir_op: TruncateToInt32
1522 # Convert a float32 to a truncated int32 with instance offset because we need
1523 # it for the slow ool path.
1524 - name: WasmBuiltinTruncateFToInt32
1525   result_type: WordSized
1526   operands:
1527     in: WordSized
1528     instance: WordSized
1529   num_temps: 1
1530   mir_op: WasmBuiltinTruncateToInt32
1532 - name: WasmTruncateToInt32
1533   result_type: WordSized
1534   operands:
1535     input: WordSized
1536   mir_op: true
1538 - name: WrapInt64ToInt32
1539   result_type: WordSized
1540   operands:
1541     input: Int64
1542   mir_op: true
1544 - name: ExtendInt32ToInt64
1545   result_type: Int64
1546   operands:
1547     input: WordSized
1548   mir_op: true
1550 # Convert a boolean value to a string.
1551 - name: BooleanToString
1552   result_type: WordSized
1553   operands:
1554     input: WordSized
1555   mir_op: ToString
1557 # Convert an integer hosted on one definition to a string with a function call.
1558 - name: IntToString
1559   result_type: WordSized
1560   operands:
1561     input: WordSized
1562   mir_op: ToString
1564 # Convert a double hosted on one definition to a string with a function call.
1565 - name: DoubleToString
1566   result_type: WordSized
1567   operands:
1568     input: WordSized
1569   num_temps: 1
1570   mir_op: ToString
1572 # Convert a primitive to a string with a function call.
1573 - name: ValueToString
1574   result_type: WordSized
1575   operands:
1576     input: BoxedValue
1577   num_temps: 1
1578   mir_op: ToString
1580 - name: PowHalfD
1581   gen_boilerplate: false
1583 - name: NaNToZero
1584   result_type: WordSized
1585   operands:
1586     input: WordSized
1587   num_temps: 1
1588   mir_op: true
1590 - name: OsrEntry
1591   gen_boilerplate: false
1593 # Materialize a Value stored in an interpreter frame for OSR.
1594 - name: OsrValue
1595   result_type: BoxedValue
1596   operands:
1597     entry: WordSized
1598   mir_op: true
1600 # Materialize a JSObject env chain stored in an interpreter frame for OSR.
1601 - name: OsrEnvironmentChain
1602   result_type: WordSized
1603   operands:
1604     entry: WordSized
1605   mir_op: true
1607 # Materialize a JSObject env chain stored in an interpreter frame for OSR.
1608 - name: OsrReturnValue
1609   result_type: BoxedValue
1610   operands:
1611     entry: WordSized
1612   mir_op: true
1614 - name: OsrArgumentsObject
1615   result_type: WordSized
1616   operands:
1617     entry: WordSized
1618   mir_op: true
1620 - name: RegExp
1621   result_type: WordSized
1622   num_temps: 1
1623   mir_op: true
1625 - name: RegExpMatcher
1626   result_type: BoxedValue
1627   operands:
1628     regexp: WordSized
1629     string: WordSized
1630     lastIndex: WordSized
1631   call_instruction: true
1632   mir_op: true
1634 - name: RegExpSearcher
1635   result_type: WordSized
1636   operands:
1637     regexp: WordSized
1638     string: WordSized
1639     lastIndex: WordSized
1640   call_instruction: true
1641   mir_op: true
1643 - name: RegExpSearcherLastLimit
1644   result_type: WordSized
1645   operands:
1646   num_temps: 1
1648 - name: RegExpExecMatch
1649   result_type: BoxedValue
1650   operands:
1651     regexp: WordSized
1652     string: WordSized
1653   call_instruction: true
1654   num_temps: 0
1655   mir_op: true
1657 - name: RegExpExecTest
1658   result_type: WordSized
1659   operands:
1660     regexp: WordSized
1661     string: WordSized
1662   call_instruction: true
1663   num_temps: 0
1664   mir_op: true
1666 - name: RegExpHasCaptureGroups
1667   result_type: WordSized
1668   operands:
1669     regexp: WordSized
1670     input: WordSized
1671   mir_op: true
1673 - name: RegExpPrototypeOptimizable
1674   result_type: WordSized
1675   operands:
1676     object: WordSized
1677   num_temps: 1
1678   mir_op: true
1680 - name: RegExpInstanceOptimizable
1681   result_type: WordSized
1682   operands:
1683     object: WordSized
1684     proto: WordSized
1685   num_temps: 1
1686   mir_op: true
1688 - name: GetFirstDollarIndex
1689   result_type: WordSized
1690   operands:
1691     str: WordSized
1692   num_temps: 3
1694 - name: StringReplace
1695   result_type: WordSized
1696   operands:
1697     string: WordSized
1698     pattern: WordSized
1699     replacement: WordSized
1700   call_instruction: true
1701   mir_op: true
1703 - name: BinaryValueCache
1704   result_type: BoxedValue
1705   operands:
1706     lhs: BoxedValue
1707     rhs: BoxedValue
1708   # Takes two temps: these are intended to be FloatReg0 and FloatReg1
1709   # to allow the actual cache code to safely clobber those values without
1710   # save and restore.
1711   num_temps: 2
1712   mir_op: BinaryCache
1714 - name: BinaryBoolCache
1715   result_type: WordSized
1716   operands:
1717     lhs: BoxedValue
1718     rhs: BoxedValue
1719   # Takes two temps: these are intendend to be FloatReg0 and FloatReg1
1720   # To allow the actual cache code to safely clobber those values without
1721   # save and restore.
1722   num_temps: 2
1723   mir_op: BinaryCache
1725 - name: UnaryCache
1726   result_type: BoxedValue
1727   operands:
1728     input: BoxedValue
1729   mir_op_cast: true
1731 - name: ModuleMetadata
1732   result_type: WordSized
1733   call_instruction: true
1734   mir_op: true
1736 - name: DynamicImport
1737   result_type: WordSized
1738   operands:
1739     specifier: BoxedValue
1740     options: BoxedValue
1741   call_instruction: true
1742   mir_op: true
1744 - name: Lambda
1745   result_type: WordSized
1746   operands:
1747     environmentChain: WordSized
1748   num_temps: 1
1749   mir_op: true
1751 - name: FunctionWithProto
1752   result_type: WordSized
1753   operands:
1754     envChain: WordSized
1755     prototype: WordSized
1756   call_instruction: true
1757   mir_op: true
1759 - name: SetFunName
1760   result_type: WordSized
1761   operands:
1762     fun: WordSized
1763     name: BoxedValue
1764   call_instruction: true
1765   mir_op: true
1767 - name: KeepAliveObject
1768   operands:
1769     object: WordSized
1771 - name: DebugEnterGCUnsafeRegion
1772   num_temps: 1
1774 - name: DebugLeaveGCUnsafeRegion
1775   num_temps: 1
1777 # Load the "slots" member out of a JSObject.
1778 #   Input: JSObject pointer
1779 #   Output: slots pointer
1780 - name: Slots
1781   result_type: WordSized
1782   operands:
1783     object: WordSized
1785 # Load the "elements" member out of a JSObject.
1786 #   Input: JSObject pointer
1787 #   Output: elements pointer
1788 - name: Elements
1789   result_type: WordSized
1790   operands:
1791     object: WordSized
1792   mir_op: true
1794 # Load the initialized length from an elements header.
1795 - name: InitializedLength
1796   result_type: WordSized
1797   operands:
1798     elements: WordSized
1800 # Store to the initialized length in an elements header. Note the input is an
1801 # *index*, one less than the desired initialized length.
1802 - name: SetInitializedLength
1803   operands:
1804     elements: WordSized
1805     index: WordSized
1807 # Load the length from an elements header.
1808 - name: ArrayLength
1809   result_type: WordSized
1810   operands:
1811     elements: WordSized
1813 # Store to the length in an elements header. Note the input is an *index*,
1814 # one less than the desired length.
1815 - name: SetArrayLength
1816   operands:
1817     elements: WordSized
1818     index: WordSized
1820 # Load the "length" property of a function.
1821 - name: FunctionLength
1822   result_type: WordSized
1823   operands:
1824     function: WordSized
1826 # Load the "name" property of a function.
1827 - name: FunctionName
1828   result_type: WordSized
1829   operands:
1830     function: WordSized
1832 - name: GetNextEntryForIterator
1833   result_type: WordSized
1834   operands:
1835     iter: WordSized
1836     result: WordSized
1837   num_temps: 3
1838   mir_op: true
1840 - name: ArrayBufferByteLength
1841   result_type: WordSized
1842   operands:
1843     object: WordSized
1845 - name: ArrayBufferViewLength
1846   result_type: WordSized
1847   operands:
1848     object: WordSized
1849   mir_op: true
1851 # Read the byteOffset of an array buffer view.
1852 - name: ArrayBufferViewByteOffset
1853   result_type: WordSized
1854   operands:
1855     object: WordSized
1857 # Load an array buffer view's elements vector.
1858 - name: ArrayBufferViewElements
1859   result_type: WordSized
1860   operands:
1861     object: WordSized
1863 # Return the element size of a typed array.
1864 - name: TypedArrayElementSize
1865   result_type: WordSized
1866   operands:
1867     object: WordSized
1869 - name: GuardHasAttachedArrayBuffer
1870   operands:
1871     object: WordSized
1872   num_temps: 1
1874 # Double to IntPtr, eligible for accessing into a TypedArray or DataView. If
1875 # the index isn't exactly representable as an IntPtr, depending on the
1876 # supportOOB flag on the MIR instruction, either bail out or produce an IntPtr
1877 # which is equivalent to an OOB access.
1878 - name: GuardNumberToIntPtrIndex
1879   result_type: WordSized
1880   operands:
1881     object: WordSized
1882   mir_op: true
1884 # Bailout if index >= length.
1885 - name: BoundsCheck
1886   operands:
1887     index: WordSized
1888     length: WordSized
1889   mir_op: true
1891 - name: BoundsCheckRange
1892   gen_boilerplate: false
1894 # Bailout if index < minimum.
1895 - name: BoundsCheckLower
1896   operands:
1897     index: WordSized
1898   mir_op: true
1900 - name: SpectreMaskIndex
1901   result_type: WordSized
1902   operands:
1903     index: WordSized
1904     length: WordSized
1905   mir_op: true
1907 - name: LoadElementV
1908   gen_boilerplate: false
1910 - name: InArray
1911   result_type: WordSized
1912   operands:
1913     elements: WordSized
1914     index: WordSized
1915     initLength: WordSized
1916   mir_op: true
1918 - name: GuardElementNotHole
1919   operands:
1920     elements: WordSized
1921     index: WordSized
1923 - name: LoadElementHole
1924   gen_boilerplate: false
1926 - name: StoreElementV
1927   gen_boilerplate: false
1929 - name: StoreElementT
1930   gen_boilerplate: false
1932 - name: StoreHoleValueElement
1933   operands:
1934     elements: WordSized
1935     index: WordSized
1937 # Like LStoreElementV, but supports indexes >= initialized length.
1938 - name: StoreElementHoleV
1939   operands:
1940     object: WordSized
1941     elements: WordSized
1942     index: WordSized
1943     value: BoxedValue
1944   num_temps: 1
1945   mir_op: StoreElementHole
1947 # Like LStoreElementT, but supports indexes >= initialized length.
1948 - name: StoreElementHoleT
1949   operands:
1950     object: WordSized
1951     elements: WordSized
1952     index: WordSized
1953     value: WordSized
1954   num_temps: 1
1955   mir_op: StoreElementHole
1957 - name: ArrayPopShift
1958   gen_boilerplate: false
1960 - name: ArrayPush
1961   result_type: WordSized
1962   operands:
1963     object: WordSized
1964     value: BoxedValue
1965   num_temps: 2
1966   mir_op: true
1968 - name: ArraySlice
1969   result_type: WordSized
1970   operands:
1971     object: WordSized
1972     begin: WordSized
1973     end: WordSized
1974   num_temps: 2
1975   call_instruction: true
1976   mir_op: true
1978 - name: ArgumentsSlice
1979   result_type: WordSized
1980   operands:
1981     object: WordSized
1982     begin: WordSized
1983     end: WordSized
1984   num_temps: 2
1985   call_instruction: true
1986   mir_op: true
1988 - name: FrameArgumentsSlice
1989   result_type: WordSized
1990   operands:
1991     begin: WordSized
1992     count: WordSized
1993   num_temps: 1
1994   mir_op: true
1996 - name: InlineArgumentsSlice
1997   gen_boilerplate: false
1999 - name: NormalizeSliceTerm
2000   result_type: WordSized
2001   operands:
2002     value: WordSized
2003     length: WordSized
2004   mir_op: true
2006 - name: ArrayJoin
2007   result_type: WordSized
2008   operands:
2009     array: WordSized
2010     separator: WordSized
2011   num_temps: 1
2012   call_instruction: true
2013   mir_op: true
2015 - name: ObjectKeys
2016   result_type: WordSized
2017   operands:
2018     object: WordSized
2019   num_temps: 0
2020   call_instruction: true
2022 - name: ObjectKeysLength
2023   result_type: WordSized
2024   operands:
2025     object: WordSized
2026   num_temps: 0
2027   call_instruction: true
2029 - name: LoadUnboxedScalar
2030   result_type: WordSized
2031   operands:
2032     elements: WordSized
2033     index: WordSized
2034   num_temps: 1
2035   mir_op: true
2037 - name: LoadUnboxedBigInt
2038   gen_boilerplate: false
2040 - name: LoadDataViewElement
2041   gen_boilerplate: false
2043 - name: LoadTypedArrayElementHole
2044   result_type: BoxedValue
2045   operands:
2046     object: WordSized
2047     index: WordSized
2048   num_temps: 1
2049   mir_op: true
2051 - name: LoadTypedArrayElementHoleBigInt
2052   gen_boilerplate: false
2054 - name: StoreUnboxedScalar
2055   operands:
2056     elements: WordSized
2057     index: WordSized
2058     value: WordSized
2059   mir_op: true
2061 - name: StoreUnboxedBigInt
2062   gen_boilerplate: false
2064 - name: StoreDataViewElement
2065   gen_boilerplate: false
2067 - name: StoreTypedArrayElementHole
2068   operands:
2069     elements: WordSized
2070     length: WordSized
2071     index: WordSized
2072     value: WordSized
2073   num_temps: 1
2074   mir_op: true
2076 - name: StoreTypedArrayElementHoleBigInt
2077   gen_boilerplate: false
2079 - name: AtomicIsLockFree
2080   result_type: WordSized
2081   operands:
2082     value: WordSized
2084 - name: CompareExchangeTypedArrayElement
2085   gen_boilerplate: false
2087 - name: AtomicExchangeTypedArrayElement
2088   gen_boilerplate: false
2090 - name: AtomicTypedArrayElementBinop
2091   gen_boilerplate: false
2093 - name: AtomicTypedArrayElementBinopForEffect
2094   gen_boilerplate: false
2096 - name: AtomicLoad64
2097   gen_boilerplate: false
2099 - name: AtomicStore64
2100   gen_boilerplate: false
2102 - name: CompareExchangeTypedArrayElement64
2103   gen_boilerplate: false
2105 - name: AtomicExchangeTypedArrayElement64
2106   gen_boilerplate: false
2108 - name: AtomicTypedArrayElementBinop64
2109   gen_boilerplate: false
2111 - name: AtomicTypedArrayElementBinopForEffect64
2112   gen_boilerplate: false
2114 - name: EffectiveAddress
2115   result_type: WordSized
2116   operands:
2117     base: WordSized
2118     index: WordSized
2119   mir_op: true
2121 - name: ClampIToUint8
2122   result_type: WordSized
2123   operands:
2124     input: WordSized
2126 - name: ClampDToUint8
2127   result_type: WordSized
2128   operands:
2129     in: WordSized
2130   num_temps: 1
2132 - name: ClampVToUint8
2133   result_type: WordSized
2134   operands:
2135     input: BoxedValue
2136   num_temps: 1
2137   mir_op: ClampToUint8
2139 - name: LoadScriptedProxyHandler
2140   result_type: BoxedValue
2141   operands:
2142     object: WordSized
2143   mir_op: true
2145 #ifdef JS_PUNBOX64
2146 - name: CheckScriptedProxyGetResult
2147   operands:
2148     target: BoxedValue
2149     id: BoxedValue
2150     value: BoxedValue
2151   num_temps: 2
2152   mir_op: true
2153 #endif
2155 - name: IdToStringOrSymbol
2156   result_type: BoxedValue
2157   operands:
2158     id: BoxedValue
2159   num_temps: 1
2160   mir_op: true
2162 # Load a boxed value from an object's fixed slot.
2163 - name: LoadFixedSlotV
2164   result_type: BoxedValue
2165   operands:
2166     object: WordSized
2167   mir_op: LoadFixedSlot
2169 # Load a boxed value from an object's fixed slot.
2170 # If it is a non-atom string, atomize it and update the slot.
2171 - name: LoadFixedSlotAndAtomize
2172   result_type: BoxedValue
2173   operands:
2174     object: WordSized
2175   num_temps: 1
2176   mir_op: LoadFixedSlot
2178 # Load a typed value from an object's fixed slot.
2179 - name: LoadFixedSlotT
2180   result_type: WordSized
2181   operands:
2182     object: WordSized
2183   mir_op: LoadFixedSlot
2185 - name: LoadFixedSlotAndUnbox
2186   result_type: WordSized
2187   operands:
2188     object: WordSized
2189   mir_op: true
2191 - name: LoadDynamicSlotAndUnbox
2192   result_type: WordSized
2193   operands:
2194     slots: WordSized
2195   mir_op: true
2197 - name: LoadElementAndUnbox
2198   result_type: WordSized
2199   operands:
2200     elements: WordSized
2201     index: WordSized
2202   mir_op: true
2204 - name: LoadFixedSlotUnboxAndAtomize
2205   result_type: WordSized
2206   operands:
2207     object: WordSized
2208   mir_op: LoadFixedSlotAndUnbox
2210 - name: LoadDynamicSlotUnboxAndAtomize
2211   result_type: WordSized
2212   operands:
2213     slots: WordSized
2214   mir_op: LoadDynamicSlotAndUnbox
2216 - name: AddAndStoreSlot
2217   operands:
2218     object: WordSized
2219     value: BoxedValue
2220   num_temps: 1
2221   mir_op: true
2223 - name: AllocateAndStoreSlot
2224   operands:
2225     object: WordSized
2226     value: BoxedValue
2227   num_temps: 2
2228   call_instruction: true
2229   mir_op: true
2231 - name: AddSlotAndCallAddPropHook
2232   operands:
2233     object: WordSized
2234     value: BoxedValue
2235   call_instruction: true
2236   mir_op: true
2238 # Store a boxed value to an object's fixed slot.
2239 - name: StoreFixedSlotV
2240   operands:
2241     obj: WordSized
2242     value: BoxedValue
2243   mir_op: StoreFixedSlot
2245 # Store a typed value to an object's fixed slot.
2246 - name: StoreFixedSlotT
2247   operands:
2248     obj: WordSized
2249     value: WordSized
2250   mir_op: StoreFixedSlot
2252 # Note, Name ICs always return a Value. There are no V/T variants.
2253 - name: GetNameCache
2254   result_type: BoxedValue
2255   operands:
2256     envObj: WordSized
2257   num_temps: 1
2258   mir_op: true
2260 - name: CallGetIntrinsicValue
2261   result_type: BoxedValue
2262   call_instruction: true
2263   mir_op: true
2265 - name: GetPropSuperCache
2266   result_type: BoxedValue
2267   operands:
2268     obj: WordSized
2269     receiver: BoxedValue
2270     id: BoxedValue
2271   mir_op: true
2273 # Patchable jump to stubs generated for a GetProperty cache, which loads a
2274 # boxed value.
2275 - name: GetPropertyCache
2276   result_type: BoxedValue
2277   operands:
2278     value: BoxedValue
2279     id: BoxedValue
2280   mir_op: true
2282 - name: BindNameCache
2283   result_type: WordSized
2284   operands:
2285     environmentChain: WordSized
2286   num_temps: 1
2287   mir_op: true
2289 - name: CallBindVar
2290   result_type: WordSized
2291   operands:
2292     environmentChain: WordSized
2293   mir_op: true
2295 # Load a value from an object's dslots or a slots vector.
2296 - name: LoadDynamicSlotV
2297   result_type: BoxedValue
2298   operands:
2299     in: WordSized
2300   mir_op: LoadDynamicSlot
2302 # Load a value from an object's dslots or a slots vector.
2303 # If it is a non-atom string, atomize it and update the slot.
2304 - name: LoadDynamicSlotAndAtomize
2305   result_type: BoxedValue
2306   operands:
2307     in: WordSized
2308   num_temps: 1
2309   mir_op: LoadDynamicSlot
2311 # Store a value to an object's dslots or a slots vector.
2312 - name: StoreDynamicSlotV
2313   operands:
2314     slots: WordSized
2315     value: BoxedValue
2316   mir_op: StoreDynamicSlot
2318 # Store a typed value to an object's dslots or a slots vector. This has a
2319 # few advantages over LStoreDynamicSlotV:
2320 # 1) We can bypass storing the type tag if the slot has the same type as
2321 #    the value.
2322 # 2) Better Register allocation: we can store constants and FP regs directly
2323 #    without requiring a second Register for the value.
2324 - name: StoreDynamicSlotT
2325   operands:
2326     slots: WordSized
2327     value: WordSized
2328   mir_op: StoreDynamicSlot
2330 # Read length field of a JSString*.
2331 - name: StringLength
2332   result_type: WordSized
2333   operands:
2334     string: WordSized
2336 # Take the floor of a double precision number and converts it to an int32.
2337 # Implements Math.floor().
2338 - name: Floor
2339   result_type: WordSized
2340   operands:
2341     num: WordSized
2343 # Take the floor of a single precision number and converts it to an int32.
2344 # Implements Math.floor().
2345 - name: FloorF
2346   result_type: WordSized
2347   operands:
2348     num: WordSized
2350 # Take the ceiling of a double precision number and converts it to an int32.
2351 # Implements Math.ceil().
2352 - name: Ceil
2353   result_type: WordSized
2354   operands:
2355     num: WordSized
2357 # Take the ceiling of a single precision number and converts it to an int32.
2358 # Implements Math.ceil().
2359 - name: CeilF
2360   result_type: WordSized
2361   operands:
2362     string: WordSized
2364 # Round a double precision number and converts it to an int32.
2365 # Implements Math.round().
2366 - name: Round
2367   result_type: WordSized
2368   operands:
2369     num: WordSized
2370   num_temps: 1
2371   mir_op: true
2373 # Round a single precision number and converts it to an int32.
2374 # Implements Math.round().
2375 - name: RoundF
2376   result_type: WordSized
2377   operands:
2378     num: WordSized
2379   num_temps: 1
2380   mir_op: Round
2382 # Truncates a double precision number and converts it to an int32.
2383 # Implements Math.trunc().
2384 - name: Trunc
2385   result_type: WordSized
2386   operands:
2387     num: WordSized
2389 # Truncates a single precision number and converts it to an int32.
2390 # Implements Math.trunc().
2391 - name: TruncF
2392   result_type: WordSized
2393   operands:
2394     num: WordSized
2396 # Rounds a double precision number accordingly to mir()->roundingMode(),
2397 # and keeps a double output.
2398 - name: NearbyInt
2399   result_type: WordSized
2400   operands:
2401     num: WordSized
2402   mir_op: true
2404 # Rounds a single precision number accordingly to mir()->roundingMode(),
2405 # and keeps a single output.
2406 - name: NearbyIntF
2407   result_type: WordSized
2408   operands:
2409     num: WordSized
2410   mir_op: NearbyInt
2412 # Load a function's call environment.
2413 - name: FunctionEnvironment
2414   result_type: WordSized
2415   operands:
2416     function: WordSized
2418 - name: HomeObject
2419   result_type: WordSized
2420   operands:
2421     function: WordSized
2423 - name: HomeObjectSuperBase
2424   result_type: BoxedValue
2425   operands:
2426     homeObject: WordSized
2428 - name: NewLexicalEnvironmentObject
2429   result_type: WordSized
2430   num_temps: 1
2431   mir_op: true
2433 - name: NewClassBodyEnvironmentObject
2434   result_type: WordSized
2435   num_temps: 1
2436   mir_op: true
2438 - name: NewVarEnvironmentObject
2439   result_type: WordSized
2440   num_temps: 1
2441   mir_op: true
2443 - name: MegamorphicSetElement
2444   operands:
2445     object: WordSized
2446     index: BoxedValue
2447     value: BoxedValue
2448   # On x86 we do not have enough registers to use 3 temps for this *and* take
2449   # five words worth of operands. Since it's 32-bit, though, we get two
2450   # registers from pushing `value`, which doesn't get used until the end
2451   # anyway. This is somewhat klunky, but oh well.
2452 #ifdef JS_CODEGEN_X86
2453   num_temps: 1
2454 #else
2455   num_temps: 3
2456 #endif
2457   call_instruction: true
2458   mir_op: true
2460 - name: CallDeleteProperty
2461   result_type: WordSized
2462   operands:
2463     value: BoxedValue
2464   call_instruction: true
2465   mir_op: DeleteProperty
2467 - name: CallDeleteElement
2468   result_type: WordSized
2469   operands:
2470     value: BoxedValue
2471     index: BoxedValue
2472   call_instruction: true
2473   mir_op: DeleteElement
2475 - name: ObjectToIterator
2476   result_type: WordSized
2477   operands:
2478     object: WordSized
2479   num_temps: 3
2480   mir_op: true
2482 - name: ValueToIterator
2483   result_type: WordSized
2484   operands:
2485     value: BoxedValue
2486   call_instruction: true
2487   mir_op: ValueToIterator
2489 - name: IteratorHasIndicesAndBranch
2490   gen_boilerplate: false
2492 - name: LoadSlotByIteratorIndex
2493   result_type: BoxedValue
2494   operands:
2495     object: WordSized
2496     iterator: WordSized
2498   num_temps: 2
2500 - name: StoreSlotByIteratorIndex
2501   operands:
2502     object: WordSized
2503     iterator: WordSized
2504     value: BoxedValue
2505   num_temps: 2
2506   mir_op: true
2508 # Patchable jump to stubs generated for a SetProperty cache.
2509 - name: SetPropertyCache
2510   operands:
2511     object: WordSized
2512     id: BoxedValue
2513     value: BoxedValue
2514   # Takes an additional temp: this is intendend to be FloatReg0 to allow the
2515   # actual cache code to safely clobber that value without save and restore.
2516   num_temps: 2
2517   mir_op: true
2519 - name: GetIteratorCache
2520   result_type: WordSized
2521   operands:
2522     value: BoxedValue
2523   num_temps: 2
2524   mir_op: true
2526 - name: OptimizeSpreadCallCache
2527   result_type: BoxedValue
2528   operands:
2529     value: BoxedValue
2530   num_temps: 1
2531   mir_op: true
2533 - name: IteratorMore
2534   result_type: BoxedValue
2535   operands:
2536     iterator: WordSized
2537   num_temps: 1
2538   mir_op: true
2540 - name: IsNoIterAndBranch
2541   gen_boilerplate: false
2543 - name: IteratorEnd
2544   operands:
2545     object: WordSized
2546   num_temps: 3
2547   mir_op: true
2549 - name: CloseIterCache
2550   operands:
2551     iter: WordSized
2552   num_temps: 1
2553   mir_op: true
2555 - name: OptimizeGetIteratorCache
2556   result_type: WordSized
2557   operands:
2558     value: BoxedValue
2559   num_temps: 1
2560   mir_op: true
2562 # Read the number of actual arguments.
2563 - name: ArgumentsLength
2564   result_type: WordSized
2566 # Load a value from the actual arguments.
2567 - name: GetFrameArgument
2568   result_type: BoxedValue
2569   operands:
2570     index: WordSized
2572 # Load a value from the actual arguments.
2573 # Returns undefined if |index| is larger-or-equals to |length|. Bails out if
2574 # |index| is negative.
2575 - name: GetFrameArgumentHole
2576   result_type: BoxedValue
2577   operands:
2578     index: WordSized
2579     length: WordSized
2580   num_temps: 1
2582 # Create the rest parameter.
2583 - name: Rest
2584   result_type: WordSized
2585   operands:
2586     numActuals: WordSized
2587   num_temps: 3
2588   call_instruction: true
2589   mir_op: true
2591 - name: Int32ToIntPtr
2592   result_type: WordSized
2593   operands:
2594     input: WordSized
2595   mir_op: true
2597 - name: NonNegativeIntPtrToInt32
2598   result_type: WordSized
2599   operands:
2600     input: WordSized
2602 - name: IntPtrToDouble
2603   result_type: WordSized
2604   operands:
2605     input: WordSized
2607 - name: AdjustDataViewLength
2608   result_type: WordSized
2609   operands:
2610     input: WordSized
2611   mir_op: true
2613 # Convert a Boolean to an Int64, following ToBigInt.
2614 - name: BooleanToInt64
2615   result_type: Int64
2616   operands:
2617     input: WordSized
2618   mir_op: ToInt64
2620 # Convert a String to an Int64, following ToBigInt.
2621 - name: StringToInt64
2622   result_type: Int64
2623   operands:
2624     input: WordSized
2625   mir_op: ToInt64
2627 # Simulate ToBigInt on a Value and produce a matching Int64.
2628 - name: ValueToInt64
2629   result_type: Int64
2630   operands:
2631     input: BoxedValue
2632   num_temps: 1
2633   mir_op: ToInt64
2635 # Truncate a BigInt to an unboxed int64.
2636 - name: TruncateBigIntToInt64
2637   result_type: Int64
2638   operands:
2639     input: WordSized
2640   mir_op: true
2642 # Create a new BigInt* from an unboxed int64.
2643 - name: Int64ToBigInt
2644   result_type: WordSized
2645   operands:
2646     input: Int64
2647   num_temps: 1
2648   mir_op: true
2650 # Generational write barrier used when writing an object to another object.
2651 - name: PostWriteBarrierO
2652   operands:
2653     object: WordSized
2654     value: WordSized
2655   num_temps: 1
2656   mir_op: PostWriteBarrier
2658 # Generational write barrier used when writing a string to an object.
2659 - name: PostWriteBarrierS
2660   operands:
2661     object: WordSized
2662     value: WordSized
2663   num_temps: 1
2664   mir_op: PostWriteBarrier
2666 # Generational write barrier used when writing a BigInt to an object.
2667 - name: PostWriteBarrierBI
2668   operands:
2669     object: WordSized
2670     value: WordSized
2671   num_temps: 1
2672   mir_op: PostWriteBarrier
2674 # Generational write barrier used when writing a value to another object.
2675 - name: PostWriteBarrierV
2676   operands:
2677     object: WordSized
2678     value: BoxedValue
2679   num_temps: 1
2680   mir_op: PostWriteBarrier
2682 # Generational write barrier used when writing an object to another object's
2683 # elements.
2684 - name: PostWriteElementBarrierO
2685   operands:
2686     object: WordSized
2687     value: WordSized
2688     index: WordSized
2689   num_temps: 1
2690   mir_op: PostWriteElementBarrier
2692 # Generational write barrier used when writing a string to an object's
2693 # elements.
2694 - name: PostWriteElementBarrierS
2695   operands:
2696     object: WordSized
2697     value: WordSized
2698     index: WordSized
2699   num_temps: 1
2700   mir_op: PostWriteElementBarrier
2702 # Generational write barrier used when writing a BigInt to an object's
2703 # elements.
2704 - name: PostWriteElementBarrierBI
2705   operands:
2706     object: WordSized
2707     value: WordSized
2708     index: WordSized
2709   num_temps: 1
2710   mir_op: PostWriteElementBarrier
2712 # Generational write barrier used when writing a value to another object's
2713 # elements.
2714 - name: PostWriteElementBarrierV
2715   operands:
2716     object: WordSized
2717     index: WordSized
2718     value: BoxedValue
2719   num_temps: 1
2720   mir_op: PostWriteElementBarrier
2722 # Assert in debug mode that a post write barrier can be elided.
2723 - name: AssertCanElidePostWriteBarrier
2724   operands:
2725     object: WordSized
2726     value: BoxedValue
2727   num_temps: 1
2729 # Guard against an object's identity.
2730 - name: GuardObjectIdentity
2731   operands:
2732     input: WordSized
2733     expected: WordSized
2734   mir_op: true
2736 # Guard against an function's identity.
2737 - name: GuardSpecificFunction
2738   operands:
2739     input: WordSized
2740     expected: WordSized
2742 - name: GuardSpecificAtom
2743   operands:
2744     str: WordSized
2745   num_temps: 1
2746   mir_op: true
2748 - name: GuardSpecificSymbol
2749   operands:
2750     symbol: WordSized
2751   mir_op: true
2753 - name: GuardSpecificInt32
2754   operands:
2755     num: WordSized
2756   mir_op: true
2758 - name: GuardStringToIndex
2759   result_type: WordSized
2760   operands:
2761     string: WordSized
2763 - name: GuardStringToInt32
2764   result_type: WordSized
2765   operands:
2766     string: WordSized
2767   num_temps: 1
2769 - name: GuardStringToDouble
2770   result_type: WordSized
2771   operands:
2772     string: WordSized
2773   num_temps: 2
2775 - name: GuardShape
2776   result_type: WordSized
2777   operands:
2778     in: WordSized
2779   num_temps: 1
2780   mir_op: true
2782 - name: GuardMultipleShapes
2783   result_type: WordSized
2784   operands:
2785     object: WordSized
2786     shapeList: WordSized
2787   num_temps: 4
2788   mir_op: true
2790 - name: GuardProto
2791   operands:
2792     object: WordSized
2793     expected: WordSized
2794   num_temps: 1
2796 - name: GuardNullProto
2797   operands:
2798     object: WordSized
2799   num_temps: 1
2801 - name: GuardIsNativeObject
2802   operands:
2803     object: WordSized
2804   num_temps: 1
2806 - name: GuardGlobalGeneration
2807   mir_op: true
2808   num_temps: 1
2810 - name: GuardFuse
2811   mir_op: true
2812   num_temps: 1
2814 - name: GuardIsProxy
2815   operands:
2816     object: WordSized
2817   num_temps: 1
2819 - name: GuardIsNotProxy
2820   operands:
2821     object: WordSized
2822   num_temps: 1
2824 - name: GuardIsNotDOMProxy
2825   operands:
2826     proxy: WordSized
2827   num_temps: 1
2829 - name: ProxyGet
2830   result_type: BoxedValue
2831   operands:
2832     proxy: WordSized
2833   num_temps: 1
2834   call_instruction: true
2835   mir_op: true
2837 - name: ProxyGetByValue
2838   result_type: BoxedValue
2839   operands:
2840     proxy: WordSized
2841     id: BoxedValue
2842   call_instruction: true
2844 - name: ProxyHasProp
2845   result_type: BoxedValue
2846   operands:
2847     proxy: WordSized
2848     id: BoxedValue
2849   call_instruction: true
2850   mir_op: true
2852 - name: ProxySet
2853   operands:
2854     proxy: WordSized
2855     rhs: BoxedValue
2856   num_temps: 1
2857   call_instruction: true
2858   mir_op: true
2860 - name: ProxySetByValue
2861   operands:
2862     proxy: WordSized
2863     id: BoxedValue
2864     rhs: BoxedValue
2865   call_instruction: true
2866   mir_op: true
2868 - name: CallSetArrayLength
2869   operands:
2870     obj: WordSized
2871     rhs: BoxedValue
2872   call_instruction: true
2873   mir_op: true
2875 - name: MegamorphicLoadSlot
2876   result_type: BoxedValue
2877   operands:
2878     object: WordSized
2879   num_temps: 4
2880   call_instruction: true
2881   mir_op: true
2883 - name: MegamorphicLoadSlotByValue
2884   result_type: BoxedValue
2885   operands:
2886     object: WordSized
2887     id: BoxedValue
2888   num_temps: 3
2889   call_instruction: true
2890   mir_op: true
2892 - name: MegamorphicStoreSlot
2893   operands:
2894     object: WordSized
2895     rhs: BoxedValue
2896 #ifdef JS_CODEGEN_X86
2897   num_temps: 1
2898 #else
2899   num_temps: 3
2900 #endif
2901   call_instruction: true
2902   mir_op: true
2904 - name: MegamorphicHasProp
2905   result_type: WordSized
2906   operands:
2907     object: WordSized
2908     id: BoxedValue
2909   num_temps: 3
2910   call_instruction: true
2911   mir_op: true
2913 - name: GuardIsNotArrayBufferMaybeShared
2914   operands:
2915     object: WordSized
2916   num_temps: 1
2918 - name: GuardIsTypedArray
2919   operands:
2920     object: WordSized
2921   num_temps: 1
2923 - name: GuardIsFixedLengthTypedArray
2924   operands:
2925     object: WordSized
2926   num_temps: 1
2928 - name: GuardHasProxyHandler
2929   operands:
2930     object: WordSized
2931   mir_op: true
2933 - name: GuardNoDenseElements
2934   operands:
2935     in: WordSized
2936   num_temps: 1
2938 - name: InCache
2939   result_type: WordSized
2940   operands:
2941     lhs: BoxedValue
2942     rhs: WordSized
2943   num_temps: 1
2944   mir_op: true
2946 - name: HasOwnCache
2947   result_type: WordSized
2948   operands:
2949     value: BoxedValue
2950     id: BoxedValue
2951   mir_op: true
2953 - name: CheckPrivateFieldCache
2954   result_type: WordSized
2955   operands:
2956     value: BoxedValue
2957     id: BoxedValue
2958   mir_op: true
2960 - name: NewPrivateName
2961   result_type: WordSized
2962   call_instruction: true
2963   mir_op: true
2965 - name: InstanceOfO
2966   result_type: WordSized
2967   operands:
2968     lhs: WordSized
2969     rhs: WordSized
2970   mir_op: InstanceOf
2972 - name: InstanceOfV
2973   result_type: WordSized
2974   operands:
2975     lhs: BoxedValue
2976     rhs: WordSized
2977   mir_op: InstanceOf
2979 - name: InstanceOfCache
2980   gen_boilerplate: false
2982 - name: IsCallableO
2983   result_type: WordSized
2984   operands:
2985     object: WordSized
2986   mir_op: IsCallable
2988 - name: IsCallableV
2989   result_type: WordSized
2990   operands:
2991     object: BoxedValue
2992   num_temps: 1
2993   mir_op: IsCallable
2995 - name: IsConstructor
2996   result_type: WordSized
2997   operands:
2998     object: WordSized
2999   mir_op: true
3001 - name: IsCrossRealmArrayConstructor
3002   result_type: WordSized
3003   operands:
3004     object: WordSized
3006 - name: IsArrayO
3007   result_type: WordSized
3008   operands:
3009     object: WordSized
3010   mir_op: IsArray
3012 - name: IsArrayV
3013   result_type: WordSized
3014   operands:
3015     value: BoxedValue
3016   num_temps: 1
3017   mir_op: IsArray
3019 - name: IsTypedArray
3020   result_type: WordSized
3021   operands:
3022     object: WordSized
3023   mir_op: true
3025 - name: IsObject
3026   result_type: WordSized
3027   operands:
3028     object: BoxedValue
3029   mir_op: true
3031 - name: IsObjectAndBranch
3032   gen_boilerplate: false
3034 - name: IsNullOrUndefined
3035   result_type: WordSized
3036   operands:
3037     input: BoxedValue
3038   mir_op: true
3040 - name: IsNullOrUndefinedAndBranch
3041   gen_boilerplate: false
3043 - name: HasClass
3044   result_type: WordSized
3045   operands:
3046     lhs: WordSized
3047   mir_op: true
3049 - name: GuardToClass
3050   result_type: WordSized
3051   operands:
3052     lhs: WordSized
3053   num_temps: 1
3054   mir_op: true
3056 - name: GuardToFunction
3057   result_type: WordSized
3058   operands:
3059     lhs: WordSized
3060   num_temps: 1
3061   mir_op: true
3063 - name: ObjectClassToString
3064   result_type: WordSized
3065   operands:
3066     lhs: WordSized
3067   num_temps: 1
3068   call_instruction: true
3069   mir_op: true
3071 - name: WasmSelect
3072   gen_boilerplate: false
3074 - name: WasmSelectI64
3075   gen_boilerplate: false
3077 - name: WasmCompareAndSelect
3078   gen_boilerplate: false
3080 - name: WasmAddOffset
3081   result_type: WordSized
3082   operands:
3083     base: WordSized
3084   mir_op: true
3086 - name: WasmAddOffset64
3087   result_type: Int64
3088   operands:
3089     base: Int64
3090   mir_op: WasmAddOffset
3092 - name: WasmBoundsCheck
3093   result_type: WordSized
3094   operands:
3095     ptr: WordSized
3096     boundsCheckLimit: WordSized
3097   mir_op: true
3099 - name: WasmBoundsCheck64
3100   gen_boilerplate: false
3102 - name: WasmBoundsCheckRange32
3103   result_type: WordSized
3104   operands:
3105     index: WordSized
3106     length: WordSized
3107     limit: WordSized
3108   mir_op: true
3109   num_temps: 1
3111 - name: WasmExtendU32Index
3112   result_type: WordSized
3113   operands:
3114     input: WordSized
3115   mir_op: true
3117 - name: WasmWrapU32Index
3118   result_type: WordSized
3119   operands:
3120     input: WordSized
3121   mir_op: true
3123 - name: WasmAlignmentCheck
3124   operands:
3125     ptr: WordSized
3126   mir_op: true
3128 - name: WasmAlignmentCheck64
3129   operands:
3130     ptr: Int64
3131   mir_op: WasmAlignmentCheck
3133 - name: WasmLoadInstance
3134   result_type: WordSized
3135   operands:
3136     instance: WordSized
3137   mir_op: true
3139 - name: WasmLoadInstance64
3140   result_type: Int64
3141   operands:
3142     instance: WordSized
3143   mir_op: WasmLoadInstance
3145 - name: WasmHeapReg
3146   result_type: WordSized
3147   mir_op: true
3149 - name: WasmLoad
3150   gen_boilerplate: false
3152 - name: WasmLoadI64
3153   gen_boilerplate: false
3155 - name: WasmStore
3156   gen_boilerplate: false
3158 - name: WasmStoreI64
3159   gen_boilerplate: false
3161 - name: AsmJSLoadHeap
3162   result_type: WordSized
3163   operands:
3164     ptr: WordSized
3165     boundsCheckLimit: WordSized
3166     memoryBase: WordSized
3167   mir_op: true
3169 - name: AsmJSStoreHeap
3170   result_type: WordSized
3171   operands:
3172     ptr: WordSized
3173     value: WordSized
3174     boundsCheckLimit: WordSized
3175     memoryBase: WordSized
3176   mir_op: true
3178 - name: WasmCompareExchangeHeap
3179   gen_boilerplate: false
3181 - name: WasmFence
3183 - name: WasmAtomicExchangeHeap
3184   gen_boilerplate: false
3186 - name: WasmAtomicBinopHeap
3187   gen_boilerplate: false
3189 - name: WasmAtomicBinopHeapForEffect
3190   gen_boilerplate: false
3192 - name: WasmLoadSlot
3193   result_type: WordSized
3194   operands:
3195     containerRef: WordSized
3196   arguments:
3197     offset: size_t
3198     type: MIRType
3199     wideningOp: MWideningOp
3200     maybeTrap: MaybeTrapSiteInfo
3202 - name: WasmLoadSlotI64
3203   result_type: Int64
3204   operands:
3205     containerRef: WordSized
3206   arguments:
3207     offset: size_t
3208     maybeTrap: MaybeTrapSiteInfo
3210 - name: WasmStoreSlot
3211   operands:
3212     value: WordSized
3213     containerRef: WordSized
3214   arguments:
3215     offset: size_t
3216     type: MIRType
3217     narrowingOp: MNarrowingOp
3218     maybeTrap: MaybeTrapSiteInfo
3220 - name: WasmStoreSlotI64
3221   operands:
3222     value: Int64
3223     containerRef: WordSized
3224   arguments:
3225     offset: size_t
3226     maybeTrap: MaybeTrapSiteInfo
3228 - name: WasmLoadTableElement
3229   result_type: WordSized
3230   operands:
3231     elements: WordSized
3232     index: WordSized
3234 - name: WasmDerivedPointer
3235   gen_boilerplate: false
3237 - name: WasmDerivedIndexPointer
3238   gen_boilerplate: false
3240 - name: WasmStoreRef
3241   operands:
3242     instance: WordSized
3243     valueBase: WordSized
3244     value: WordSized
3245   arguments:
3246     offset: uint32_t
3247     maybeTrap: MaybeTrapSiteInfo
3248     preBarrierKind: WasmPreBarrierKind
3249   num_temps: 1
3250   mir_op: true
3252 # Generational write barrier used when writing an object to another object.
3253 - name: WasmPostWriteBarrier
3254   operands:
3255     instance: WordSized
3256     object: WordSized
3257     valueBase: WordSized
3258     value: WordSized
3259   arguments:
3260     valueOffset: uint32_t
3261   num_temps: 1
3262   mir_op: true
3264 - name: WasmParameter
3265   result_type: WordSized
3267 - name: WasmParameterI64
3268   gen_boilerplate: false
3270 - name: WasmReturn
3271   operands:
3272     rval: WordSized
3273     instance: WordSized
3275 - name: WasmReturnI64
3276   operands:
3277     rval: Int64
3278     instance: WordSized
3280 - name: WasmReturnVoid
3281   operands:
3282     rval: WordSized
3284 - name: WasmStackArg
3285   operands:
3286     arg: WordSized
3287   mir_op: true
3289 - name: WasmStackArgI64
3290   operands:
3291     arg: Int64
3292   mir_op: WasmStackArg
3294 - name: WasmNullConstant
3295   result_type: WordSized
3297 - name: WasmCallIndirectAdjunctSafepoint
3298   gen_boilerplate: false
3300 - name: WasmCall
3301   gen_boilerplate: false
3303 - name: WasmCallLandingPrePad
3304   mir_op: true
3306 - name: WasmRegisterResult
3307   gen_boilerplate: false
3309 - name: WasmRegisterPairResult
3310   gen_boilerplate: false
3312 - name: WasmStackResultArea
3313   result_type: WordSized
3314   num_temps: 1
3315   mir_op: true
3317 - name: WasmStackResult
3318   gen_boilerplate: false
3320 - name: WasmStackResult64
3321   gen_boilerplate: false
3323 - name: AssertRangeI
3324   gen_boilerplate: false
3326 - name: AssertRangeD
3327   gen_boilerplate: false
3329 - name: AssertRangeF
3330   gen_boilerplate: false
3332 - name: AssertRangeV
3333   gen_boilerplate: false
3335 - name: AssertClass
3336   operands:
3337     input: WordSized
3338   num_temps: 1
3339   mir_op: true
3341 - name: AssertShape
3342   operands:
3343     input: WordSized
3344   mir_op: true
3346 - name: GuardValue
3347   operands:
3348     input: BoxedValue
3349   mir_op: true
3351 - name: GuardNullOrUndefined
3352   operands:
3353     input: BoxedValue
3354   mir_op: true
3356 - name: GuardIsNotObject
3357   operands:
3358     input: BoxedValue
3359   mir_op: true
3361 - name: GuardFunctionFlags
3362   operands:
3363     function: WordSized
3364   mir_op: true
3366 - name: GuardFunctionIsNonBuiltinCtor
3367   operands:
3368     function: WordSized
3369   num_temps: 1
3371 - name: GuardFunctionKind
3372   operands:
3373     function: WordSized
3374   num_temps: 1
3375   mir_op: true
3377 - name: GuardFunctionScript
3378   operands:
3379     function: WordSized
3380   mir_op: true
3382 - name: IncrementWarmUpCounter
3383   num_temps: 1
3384   mir_op: true
3386 - name: LexicalCheck
3387   operands:
3388     input: BoxedValue
3389   mir_op: true
3391 - name: ThrowRuntimeLexicalError
3392   call_instruction: true
3393   mir_op: true
3395 - name: ThrowMsg
3396   call_instruction: true
3397   mir_op: true
3399 - name: GlobalDeclInstantiation
3400   mir_op: true
3402 - name: MemoryBarrier
3403   gen_boilerplate: false
3405 - name: Debugger
3406   num_temps: 1
3407   call_instruction: true
3409 - name: NewTarget
3410   result_type: BoxedValue
3412 - name: Random
3413   gen_boilerplate: false
3415 - name: CheckReturn
3416   result_type: BoxedValue
3417   operands:
3418     returnValue: BoxedValue
3419     thisValue: BoxedValue
3421 - name: CheckIsObj
3422   result_type: WordSized
3423   operands:
3424     value: BoxedValue
3425   mir_op: true
3427 - name: CheckObjCoercible
3428   operands:
3429     value: BoxedValue
3431 - name: CheckClassHeritage
3432   operands:
3433     heritage: BoxedValue
3434   num_temps: 2
3436 - name: CheckThis
3437   operands:
3438     value: BoxedValue
3440 - name: CheckThisReinit
3441   operands:
3442     thisValue: BoxedValue
3444 - name: Generator
3445   result_type: WordSized
3446   operands:
3447     callee: WordSized
3448     environmentChain: WordSized
3449     argsObject: WordSized
3450   call_instruction: true
3451   mir_op: true
3453 - name: AsyncResolve
3454   result_type: WordSized
3455   operands:
3456     generator: WordSized
3457     value: BoxedValue
3458   call_instruction: true
3459   mir_op: true
3461 - name: AsyncReject
3462   result_type: WordSized
3463   operands:
3464     generator: WordSized
3465     reason: BoxedValue
3466     stack: BoxedValue
3467   call_instruction: true
3468   mir_op: true
3470 - name: AsyncAwait
3471   result_type: WordSized
3472   operands:
3473     value: BoxedValue
3474     generator: WordSized
3475   call_instruction: true
3476   mir_op: true
3478 - name: CanSkipAwait
3479   result_type: WordSized
3480   operands:
3481     value: BoxedValue
3482   call_instruction: true
3483   mir_op: true
3485 - name: MaybeExtractAwaitValue
3486   result_type: BoxedValue
3487   operands:
3488     value: BoxedValue
3489     canSkip: WordSized
3490   call_instruction: true
3491   mir_op: true
3493 - name: DebugCheckSelfHosted
3494   operands:
3495     value: BoxedValue
3496   call_instruction: true
3498 - name: IsPackedArray
3499   result_type: WordSized
3500   operands:
3501     object: WordSized
3502   num_temps: 1
3504 - name: GuardArrayIsPacked
3505   operands:
3506     array: WordSized
3507   num_temps: 2
3508   mir_op: true
3510 - name: GetPrototypeOf
3511   result_type: BoxedValue
3512   operands:
3513     target: WordSized
3515 - name: ObjectWithProto
3516   result_type: WordSized
3517   operands:
3518     prototype: BoxedValue
3519   call_instruction: true
3521 - name: ObjectStaticProto
3522   result_type: WordSized
3523   operands:
3524     object: WordSized
3526 - name: BuiltinObject
3527   result_type: WordSized
3528   call_instruction: true
3529   mir_op: true
3531 - name: SuperFunction
3532   result_type: BoxedValue
3533   operands:
3534     callee: WordSized
3535   num_temps: 1
3537 - name: InitHomeObject
3538   result_type: WordSized
3539   operands:
3540     function: WordSized
3541     homeObject: BoxedValue
3543 - name: IsTypedArrayConstructor
3544   result_type: WordSized
3545   operands:
3546     object: WordSized
3548 - name: LoadValueTag
3549   result_type: WordSized
3550   operands:
3551     value: BoxedValue
3553 - name: GuardTagNotEqual
3554   operands:
3555     lhs: WordSized
3556     rhs: WordSized
3558 - name: LoadWrapperTarget
3559   result_type: WordSized
3560   operands:
3561     object: WordSized
3563 - name: GuardHasGetterSetter
3564   operands:
3565     object: WordSized
3566   num_temps: 3
3567   call_instruction: true
3568   mir_op: true
3570 - name: GuardIsExtensible
3571   operands:
3572     object: WordSized
3573   num_temps: 1
3575 - name: GuardInt32IsNonNegative
3576   operands:
3577     index: WordSized
3579 - name: GuardInt32Range
3580   operands:
3581     input: WordSized
3582   mir_op: true
3584 - name: GuardIndexIsNotDenseElement
3585   operands:
3586     object: WordSized
3587     index: WordSized
3588   num_temps: 2
3590 - name: GuardIndexIsValidUpdateOrAdd
3591   operands:
3592     object: WordSized
3593     index: WordSized
3594   num_temps: 2
3596 - name: CallAddOrUpdateSparseElement
3597   operands:
3598     object: WordSized
3599     index: WordSized
3600     value: BoxedValue
3601   call_instruction: true
3602   mir_op: true
3604 - name: CallGetSparseElement
3605   result_type: BoxedValue
3606   operands:
3607     object: WordSized
3608     index: WordSized
3609   call_instruction: true
3611 - name: CallNativeGetElement
3612   result_type: BoxedValue
3613   operands:
3614     object: WordSized
3615     index: WordSized
3616   call_instruction: true
3618 - name: CallNativeGetElementSuper
3619   result_type: BoxedValue
3620   operands:
3621     object: WordSized
3622     index: WordSized
3623     receiver: BoxedValue
3624   call_instruction: true
3626 - name: CallObjectHasSparseElement
3627   result_type: WordSized
3628   operands:
3629     object: WordSized
3630     index: WordSized
3631   num_temps: 2
3632   call_instruction: true
3634 - name: BigIntAsIntN
3635   result_type: WordSized
3636   operands:
3637     bits: WordSized
3638     input: WordSized
3639   call_instruction: true
3641 - name: BigIntAsIntN64
3642   gen_boilerplate: false
3644 - name: BigIntAsIntN32
3645   gen_boilerplate: false
3647 - name: GuardNonGCThing
3648   operands:
3649     input: BoxedValue
3651 - name: ToHashableNonGCThing
3652   result_type: BoxedValue
3653   operands:
3654     input: BoxedValue
3655   num_temps: 1
3657 - name: ToHashableString
3658   result_type: WordSized
3659   operands:
3660     input: WordSized
3662 - name: ToHashableValue
3663   result_type: BoxedValue
3664   operands:
3665     input: BoxedValue
3666   num_temps: 1
3668 - name: HashNonGCThing
3669   result_type: WordSized
3670   operands:
3671     input: BoxedValue
3672   num_temps: 1
3674 - name: HashString
3675   result_type: WordSized
3676   operands:
3677     input: WordSized
3678   num_temps: 1
3680 - name: HashSymbol
3681   result_type: WordSized
3682   operands:
3683     input: WordSized
3685 - name: HashBigInt
3686   result_type: WordSized
3687   operands:
3688     input: WordSized
3689   num_temps: 3
3691 - name: HashObject
3692   result_type: WordSized
3693   operands:
3694     setObject: WordSized
3695     input: BoxedValue
3696   num_temps: 4
3698 - name: HashValue
3699   result_type: WordSized
3700   operands:
3701     setObject: WordSized
3702     input: BoxedValue
3703   num_temps: 4
3705 - name: SetObjectHasNonBigInt
3706   result_type: WordSized
3707   operands:
3708     setObject: WordSized
3709     input: BoxedValue
3710     hash: WordSized
3711   num_temps: 2
3713 - name: SetObjectHasBigInt
3714   result_type: WordSized
3715   operands:
3716     setObject: WordSized
3717     input: BoxedValue
3718     hash: WordSized
3719   num_temps: 4
3721 - name: SetObjectHasValue
3722   result_type: WordSized
3723   operands:
3724     setObject: WordSized
3725     input: BoxedValue
3726     hash: WordSized
3727   num_temps: 4
3729 - name: SetObjectHasValueVMCall
3730   result_type: WordSized
3731   call_instruction: true
3732   operands:
3733     setObject: WordSized
3734     input: BoxedValue
3736 - name: SetObjectSize
3737   result_type: WordSized
3738   operands:
3739     setObject: WordSized
3741 - name: MapObjectHasNonBigInt
3742   result_type: WordSized
3743   operands:
3744     mapObject: WordSized
3745     input: BoxedValue
3746     hash: WordSized
3747   num_temps: 2
3749 - name: MapObjectHasBigInt
3750   result_type: WordSized
3751   operands:
3752     mapObject: WordSized
3753     input: BoxedValue
3754     hash: WordSized
3755   num_temps: 4
3757 - name: MapObjectHasValue
3758   result_type: WordSized
3759   operands:
3760     mapObject: WordSized
3761     input: BoxedValue
3762     hash: WordSized
3763   num_temps: 4
3765 - name: MapObjectHasValueVMCall
3766   result_type: WordSized
3767   call_instruction: true
3768   operands:
3769     mapObject: WordSized
3770     input: BoxedValue
3772 - name: MapObjectGetNonBigInt
3773   result_type: BoxedValue
3774   operands:
3775     mapObject: WordSized
3776     input: BoxedValue
3777     hash: WordSized
3778   num_temps: 2
3780 - name: MapObjectGetBigInt
3781   result_type: BoxedValue
3782   operands:
3783     mapObject: WordSized
3784     input: BoxedValue
3785     hash: WordSized
3786   num_temps: 4
3788 - name: MapObjectGetValue
3789   result_type: BoxedValue
3790   operands:
3791     mapObject: WordSized
3792     input: BoxedValue
3793     hash: WordSized
3794   num_temps: 4
3796 - name: MapObjectGetValueVMCall
3797   result_type: BoxedValue
3798   call_instruction: true
3799   operands:
3800     mapObject: WordSized
3801     input: BoxedValue
3803 - name: MapObjectSize
3804   result_type: WordSized
3805   operands:
3806     mapObject: WordSized
3808 - name: BigIntAsUintN
3809   result_type: WordSized
3810   operands:
3811     bits: WordSized
3812     input: WordSized
3813   call_instruction: true
3815 - name: BigIntAsUintN64
3816   gen_boilerplate: false
3818 - name: BigIntAsUintN32
3819   gen_boilerplate: false
3821 - name: IonToWasmCall
3822   gen_boilerplate: false
3824 - name: IonToWasmCallV
3825   gen_boilerplate: false
3827 - name: IonToWasmCallI64
3828   gen_boilerplate: false
3830 - name: WasmAnyRefFromJSValue
3831   result_type: WordSized
3832   operands:
3833     input: BoxedValue
3834   num_temps: 1
3836 - name: WasmAnyRefFromJSObject
3837   result_type: WordSized
3838   operands:
3839     input: WordSized
3841 - name: WasmAnyRefFromJSString
3842   result_type: WordSized
3843   operands:
3844     input: WordSized
3846 - name: WasmNewI31Ref
3847   mir_op: true
3848   result_type: WordSized
3849   operands:
3850     value: WordSized
3852 - name: WasmI31RefGet
3853   mir_op: true
3854   result_type: WordSized
3855   operands:
3856     value: WordSized
3858 # Constant Simd128
3859 - name: Simd128
3860   result_type: WordSized
3861   arguments:
3862     simd128: SimdConstant
3864 - name: WasmTernarySimd128
3865   gen_boilerplate: false
3867 - name: WasmBinarySimd128
3868   gen_boilerplate: false
3870 - name: WasmBinarySimd128WithConstant
3871   gen_boilerplate: false
3873 - name: WasmVariableShiftSimd128
3874   gen_boilerplate: false
3876 - name: WasmConstantShiftSimd128
3877   gen_boilerplate: false
3879 - name: WasmSignReplicationSimd128
3880   gen_boilerplate: false
3882 - name: WasmShuffleSimd128
3883   gen_boilerplate: false
3885 - name: WasmPermuteSimd128
3886   gen_boilerplate: false
3888 - name: WasmReplaceLaneSimd128
3889   gen_boilerplate: false
3891 - name: WasmReplaceInt64LaneSimd128
3892   gen_boilerplate: false
3894 - name: WasmScalarToSimd128
3895   gen_boilerplate: false
3897 - name: WasmInt64ToSimd128
3898   gen_boilerplate: false
3900 - name: WasmUnarySimd128
3901   gen_boilerplate: false
3903 - name: WasmReduceSimd128
3904   gen_boilerplate: false
3906 - name: WasmReduceAndBranchSimd128
3907   gen_boilerplate: false
3909 - name: WasmReduceSimd128ToInt64
3910   gen_boilerplate: false
3912 - name: WasmLoadLaneSimd128
3913   gen_boilerplate: false
3915 - name: WasmStoreLaneSimd128
3916   gen_boilerplate: false
3918 - name: Unbox
3919   gen_boilerplate: false
3921 - name: UnboxFloatingPoint
3922   gen_boilerplate: false
3924 - name: WasmUint32ToDouble
3925   gen_boilerplate: false
3927 - name: WasmUint32ToFloat32
3928   gen_boilerplate: false
3930 - name: DivI
3931   gen_boilerplate: false
3933 - name: ModI
3934   gen_boilerplate: false
3936 - name: DivPowTwoI
3937   gen_boilerplate: false
3939 - name: ModPowTwoI
3940   gen_boilerplate: false
3942 - name: TableSwitch
3943   gen_boilerplate: false
3945 - name: TableSwitchV
3946   gen_boilerplate: false
3948 - name: MulI
3949   gen_boilerplate: false
3951 #ifdef JS_CODEGEN_X86
3952 - name: BoxFloatingPoint
3953   gen_boilerplate: false
3955 - name: DivOrModI64
3956   gen_boilerplate: false
3958 - name: UDivOrModI64
3959   gen_boilerplate: false
3961 - name: DivOrModConstantI
3962   gen_boilerplate: false
3964 - name: UDivOrMod
3965   gen_boilerplate: false
3967 - name: UDivOrModConstant
3968   gen_boilerplate: false
3970 - name: WasmTruncateToInt64
3971   gen_boilerplate: false
3973 - name: Int64ToFloatingPoint
3974   gen_boilerplate: false
3976 - name: WasmAtomicLoadI64
3977   gen_boilerplate: false
3979 - name: WasmAtomicStoreI64
3980   gen_boilerplate: false
3982 - name: WasmCompareExchangeI64
3983   gen_boilerplate: false
3985 - name: WasmAtomicBinopI64
3986   gen_boilerplate: false
3988 - name: WasmAtomicExchangeI64
3989   gen_boilerplate: false
3990 #endif
3992 #ifdef JS_CODEGEN_X64
3993 - name: DivOrModI64
3994   gen_boilerplate: false
3996 - name: UDivOrModI64
3997   gen_boilerplate: false
3999 - name: DivOrModConstantI
4000   gen_boilerplate: false
4002 - name: UDivOrMod
4003   gen_boilerplate: false
4005 - name: UDivOrModConstant
4006   gen_boilerplate: false
4008 - name: WasmTruncateToInt64
4009   gen_boilerplate: false
4011 - name: Int64ToFloatingPoint
4012   gen_boilerplate: false
4013 #endif
4015 #ifdef JS_CODEGEN_ARM
4016 - name: BoxFloatingPoint
4017   gen_boilerplate: false
4019 - name: DivOrModI64
4020   gen_boilerplate: false
4022 - name: UDivOrModI64
4023   gen_boilerplate: false
4025 - name: SoftDivI
4026   gen_boilerplate: false
4028 - name: SoftModI
4029   gen_boilerplate: false
4031 - name: ModMaskI
4032   gen_boilerplate: false
4034 - name: UDiv
4035   gen_boilerplate: false
4037 - name: UMod
4038   gen_boilerplate: false
4040 - name: SoftUDivOrMod
4041   gen_boilerplate: false
4043 - name: Int64ToFloatingPointCall
4044   gen_boilerplate: false
4046 - name: WasmTruncateToInt64
4047   gen_boilerplate: false
4049 - name: WasmAtomicLoadI64
4050   gen_boilerplate: false
4052 - name: WasmAtomicStoreI64
4053   gen_boilerplate: false
4055 - name: WasmCompareExchangeI64
4056   gen_boilerplate: false
4058 - name: WasmAtomicBinopI64
4059   gen_boilerplate: false
4061 - name: WasmAtomicExchangeI64
4062   gen_boilerplate: false
4063 #endif
4065 #ifdef JS_CODEGEN_ARM64
4066 - name: DivOrModI64
4067   gen_boilerplate: false
4069 - name: UDivOrModI64
4070   gen_boilerplate: false
4072 - name: DivConstantI
4073   gen_boilerplate: false
4075 - name: UDivConstantI
4076   gen_boilerplate: false
4078 - name: ModMaskI
4079   gen_boilerplate: false
4081 - name: UDiv
4082   gen_boilerplate: false
4084 - name: UMod
4085   gen_boilerplate: false
4087 - name: WasmTruncateToInt64
4088   gen_boilerplate: false
4090 - name: Int64ToFloatingPoint
4091   gen_boilerplate: false
4092 #endif
4094 #ifdef JS_CODEGEN_MIPS32
4095 - name: BoxFloatingPoint
4096   gen_boilerplate: false
4098 - name: DivOrModI64
4099   gen_boilerplate: false
4101 - name: UDivOrModI64
4102   gen_boilerplate: false
4104 - name: UDivOrMod
4105   gen_boilerplate: false
4107 - name: ModMaskI
4108   gen_boilerplate: false
4110 - name: WasmTruncateToInt64
4111   gen_boilerplate: false
4113 - name: Int64ToFloatingPoint
4114   gen_boilerplate: false
4116 - name: WasmUnalignedLoad
4117   gen_boilerplate: false
4119 - name: WasmUnalignedLoadI64
4120   gen_boilerplate: false
4122 - name: WasmUnalignedStore
4123   gen_boilerplate: false
4125 - name: WasmUnalignedStoreI64
4126   gen_boilerplate: false
4128 - name: WasmAtomicLoadI64
4129   gen_boilerplate: false
4131 - name: WasmAtomicStoreI64
4132   gen_boilerplate: false
4134 - name: WasmCompareExchangeI64
4135   gen_boilerplate: false
4137 - name: WasmAtomicBinopI64
4138   gen_boilerplate: false
4140 - name: WasmAtomicExchangeI64
4141   gen_boilerplate: false
4142 #endif
4144 #ifdef JS_CODEGEN_MIPS64
4145 - name: DivOrModI64
4146   gen_boilerplate: false
4148 - name: UDivOrMod
4149   gen_boilerplate: false
4151 - name: UDivOrModI64
4152   gen_boilerplate: false
4154 - name: ModMaskI
4155   gen_boilerplate: false
4157 - name: WasmTruncateToInt64
4158   gen_boilerplate: false
4160 - name: Int64ToFloatingPoint
4161   gen_boilerplate: false
4163 - name: WasmUnalignedLoad
4164   gen_boilerplate: false
4166 - name: WasmUnalignedLoadI64
4167   gen_boilerplate: false
4169 - name: WasmUnalignedStore
4170   gen_boilerplate: false
4172 - name: WasmUnalignedStoreI64
4173   gen_boilerplate: false
4175 - name: WasmCompareExchangeI64
4176   gen_boilerplate: false
4178 - name: WasmAtomicBinopI64
4179   gen_boilerplate: false
4181 - name: WasmAtomicExchangeI64
4182   gen_boilerplate: false
4183 #endif
4185 #ifdef JS_CODEGEN_LOONG64
4186 - name: DivOrModI64
4187   gen_boilerplate: false
4189 - name: UDivOrMod
4190   gen_boilerplate: false
4192 - name: UDivOrModI64
4193   gen_boilerplate: false
4195 - name: ModMaskI
4196   gen_boilerplate: false
4198 - name: WasmTruncateToInt64
4199   gen_boilerplate: false
4201 - name: Int64ToFloatingPoint
4202   gen_boilerplate: false
4204 - name: WasmCompareExchangeI64
4205   gen_boilerplate: false
4207 - name: WasmAtomicBinopI64
4208   gen_boilerplate: false
4210 - name: WasmAtomicExchangeI64
4211   gen_boilerplate: false
4212 #endif
4214 #ifdef JS_CODEGEN_RISCV64
4215 - name: DivOrModI64
4216   gen_boilerplate: false
4218 - name: UDivOrMod
4219   gen_boilerplate: false
4221 - name: UDivOrModI64
4222   gen_boilerplate: false
4224 - name: ModMaskI
4225   gen_boilerplate: false
4227 - name: WasmTruncateToInt64
4228   gen_boilerplate: false
4230 - name: Int64ToFloatingPoint
4231   gen_boilerplate: false
4233 - name: WasmCompareExchangeI64
4234   gen_boilerplate: false
4236 - name: WasmAtomicBinopI64
4237   gen_boilerplate: false
4239 - name: WasmAtomicExchangeI64
4240   gen_boilerplate: false
4241 #endif
4243 #ifdef FUZZING_JS_FUZZILLI
4244 - name: FuzzilliHashT
4245   gen_boilerplate: false
4247 - name: FuzzilliHashV
4248   gen_boilerplate: false
4250 - name: FuzzilliHashStore
4251   gen_boilerplate: false
4252 #endif