Bug 1874683 - Part 7: Transpile LoadStringCodePoint. r=jandem,nbp
[gecko.git] / js / src / jit / LIROps.yaml
blob9fb8584f6c7857bcdc2032853b7326b9b2ae358e
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: MinMaxI
884   gen_boilerplate: false
886 - name: MinMaxD
887   gen_boilerplate: false
889 - name: MinMaxF
890   gen_boilerplate: false
892 - name: MinMaxArrayI
893   gen_boilerplate: false
895 - name: MinMaxArrayD
896   gen_boilerplate: false
898 # Negative of integer
899 - name: NegI
900   result_type: WordSized
901   operands:
902     num: WordSized
904 # Negative of an int64
905 - name: NegI64
906   result_type: Int64
907   operands:
908     num: Int64
910 # Negative of double
911 - name: NegD
912   result_type: WordSized
913   operands:
914     num: WordSized
916 # Negative of float32
917 - name: NegF
918   result_type: WordSized
919   operands:
920     num: WordSized
922 # Absolute value of an integer.
923 - name: AbsI
924   result_type: WordSized
925   operands:
926     num: WordSized
927   mir_op: Abs
929 # Absolute value of a double.
930 - name: AbsD
931   result_type: WordSized
932   operands:
933     num: WordSized
935 # Absolute value of a float32.
936 - name: AbsF
937   result_type: WordSized
938   operands:
939     num: WordSized
941 - name: CopySignD
942   gen_boilerplate: false
944 - name: CopySignF
945   gen_boilerplate: false
947 # Count leading zeroes on an int32.
948 - name: ClzI
949   result_type: WordSized
950   operands:
951     num: WordSized
952   mir_op: Clz
954 # Count leading zeroes on an int64.
955 - name: ClzI64
956   result_type: Int64
957   operands:
958     num: Int64
959   mir_op: Clz
961 # Count trailing zeroes on an int32.
962 - name: CtzI
963   result_type: WordSized
964   operands:
965     num: WordSized
966   mir_op: Ctz
968 # Count trailing zeroes on an int64.
969 - name: CtzI64
970   result_type: Int64
971   operands:
972     num: Int64
973   mir_op: Ctz
975 # Count population on an int32.
976 - name: PopcntI
977   result_type: WordSized
978   operands:
979     num: WordSized
980   num_temps: 1
981   mir_op: Popcnt
983 # Count population on an int64.
984 - name: PopcntI64
985   result_type: Int64
986   operands:
987     num: Int64
988   num_temps: 1
989   mir_op: Popcnt
991 - name: SqrtD
992   result_type: WordSized
993   operands:
994     num: WordSized
996 - name: SqrtF
997   result_type: WordSized
998   operands:
999     num: WordSized
1001 - name: Atan2D
1002   gen_boilerplate: false
1004 - name: Hypot
1005   gen_boilerplate: false
1007 # Double raised to an integer power.
1008 - name: PowI
1009   result_type: WordSized
1010   operands:
1011     value: WordSized
1012     power: WordSized
1013   call_instruction: true
1015 # Integer raised to an integer power.
1016 - name: PowII
1017   result_type: WordSized
1018   operands:
1019     value: WordSized
1020     power: WordSized
1021   num_temps: 2
1022   mir_op: Pow
1024 # Double raised to a double power.
1025 - name: PowD
1026   result_type: WordSized
1027   operands:
1028     value: WordSized
1029     power: WordSized
1030   call_instruction: true
1032 # Constant of a power of two raised to an integer power.
1033 - name: PowOfTwoI
1034   result_type: WordSized
1035   operands:
1036     power: WordSized
1037   arguments:
1038     base: uint32_t
1040 # Sign value of an integer.
1041 - name: SignI
1042   result_type: WordSized
1043   operands:
1044     num: WordSized
1046 # Sign value of an integer.
1047 - name: SignD
1048   result_type: WordSized
1049   operands:
1050     num: WordSized
1052 # Sign value of a double with expected int32 result.
1053 - name: SignDI
1054   result_type: WordSized
1055   operands:
1056     input: WordSized
1057   num_temps: 1
1059 - name: MathFunctionD
1060   gen_boilerplate: false
1062 - name: MathFunctionF
1063   gen_boilerplate: false
1065 - name: AddI
1066   gen_boilerplate: false
1068 - name: AddI64
1069   gen_boilerplate: false
1071 - name: SubI
1072   gen_boilerplate: false
1074 - name: SubI64
1075   gen_boilerplate: false
1077 - name: MulI64
1078   gen_boilerplate: false
1080 - name: MathD
1081   gen_boilerplate: false
1083 - name: MathF
1084   gen_boilerplate: false
1086 - name: ModD
1087   gen_boilerplate: false
1089 - name: ModPowTwoD
1090   gen_boilerplate: false
1092 - name: WasmBuiltinModD
1093   result_type: WordSized
1094   operands:
1095     lhs: WordSized
1096     rhs: WordSized
1097     instance: WordSized
1098   call_instruction: true
1099   mir_op: true
1101 - name: BigIntAdd
1102   gen_boilerplate: false
1104 - name: BigIntSub
1105   gen_boilerplate: false
1107 - name: BigIntMul
1108   gen_boilerplate: false
1110 - name: BigIntDiv
1111   gen_boilerplate: false
1113 - name: BigIntMod
1114   gen_boilerplate: false
1116 - name: BigIntPow
1117   gen_boilerplate: false
1119 - name: BigIntBitAnd
1120   gen_boilerplate: false
1122 - name: BigIntBitOr
1123   gen_boilerplate: false
1125 - name: BigIntBitXor
1126   gen_boilerplate: false
1128 - name: BigIntLsh
1129   gen_boilerplate: false
1131 - name: BigIntRsh
1132   gen_boilerplate: false
1134 - name: BigIntIncrement
1135   gen_boilerplate: false
1137 - name: BigIntDecrement
1138   gen_boilerplate: false
1140 - name: BigIntNegate
1141   gen_boilerplate: false
1143 - name: BigIntBitNot
1144   gen_boilerplate: false
1146 - name: Int32ToStringWithBase
1147   result_type: WordSized
1148   operands:
1149     input: WordSized
1150     base: WordSized
1151   num_temps: 2
1152   mir_op: true
1154 - name: NumberParseInt
1155   result_type: BoxedValue
1156   operands:
1157     string: WordSized
1158     radix: WordSized
1159   num_temps: 1
1160   call_instruction: true
1161   mir_op: true
1163 - name: DoubleParseInt
1164   result_type: WordSized
1165   operands:
1166     number: WordSized
1167   num_temps: 1
1168   mir_op: true
1170 # Adds two string, returning a string.
1171 - name: Concat
1172   result_type: WordSized
1173   operands:
1174     lhs: WordSized
1175     rhs: WordSized
1176   num_temps: 5
1178 # Linearize a string.
1179 - name: LinearizeString
1180   result_type: WordSized
1181   operands:
1182     str: WordSized
1183   mir_op: true
1185 # Linearize a string before a character access.
1186 - name: LinearizeForCharAccess
1187   result_type: WordSized
1188   operands:
1189     str: WordSized
1190     index: WordSized
1191   mir_op: true
1193 # Linearize a string before a code point access.
1194 - name: LinearizeForCodePointAccess
1195   result_type: WordSized
1196   operands:
1197     str: WordSized
1198     index: WordSized
1199   num_temps: 1
1200   mir_op: true
1202 # Get uint16 character code from a string.
1203 - name: CharCodeAt
1204   result_type: WordSized
1205   operands:
1206     str: WordSized
1207     index: WordSized
1208   num_temps: 2
1210 # Get uint16 character code from a string. Return -1 on out-of-bounds.
1211 - name: CharCodeAtOrNegative
1212   result_type: WordSized
1213   operands:
1214     str: WordSized
1215     index: WordSized
1216   num_temps: 2
1218 # Get uint32 code point from a string.
1219 - name: CodePointAt
1220   result_type: WordSized
1221   operands:
1222     str: WordSized
1223     index: WordSized
1224   num_temps: 2
1226 # Get uint32 code point from a string. Return -1 on out-of-bounds.
1227 - name: CodePointAtOrNegative
1228   result_type: WordSized
1229   operands:
1230     str: WordSized
1231     index: WordSized
1232   num_temps: 2
1234 # Box the input if non-negative. Otherwise return NaN.
1235 - name: NegativeToNaN
1236   result_type: BoxedValue
1237   operands:
1238     input: WordSized
1240 # Box the input if non-negative. Otherwise return undefined.
1241 - name: NegativeToUndefined
1242   result_type: BoxedValue
1243   operands:
1244     input: WordSized
1246 # Convert uint16 character code to a string.
1247 - name: FromCharCode
1248   result_type: WordSized
1249   operands:
1250     code: WordSized
1252 # Convert non-negative input as a uint16 character code to a string. If the
1253 # input is negative, return the empty string.
1254 - name: FromCharCodeEmptyIfNegative
1255   result_type: WordSized
1256   operands:
1257     code: WordSized
1259 # Convert uint32 code point to a string.
1260 - name: FromCodePoint
1261   result_type: WordSized
1262   operands:
1263     codePoint: WordSized
1264   num_temps: 2
1266 # Test if a string includes the search string.
1267 - name: StringIncludes
1268   result_type: WordSized
1269   operands:
1270     string: WordSized
1271     searchString: WordSized
1272   call_instruction: true
1274 # Test if a string includes the constant search string.
1275 - name: StringIncludesSIMD
1276   result_type: WordSized
1277   operands:
1278     string: WordSized
1279   arguments:
1280     searchString: JSLinearString*
1281   num_temps: 3
1283 # Search for the first index of the search string.
1284 - name: StringIndexOf
1285   result_type: WordSized
1286   operands:
1287     string: WordSized
1288     searchString: WordSized
1289   call_instruction: true
1291 # Search for the first index of the constant search string.
1292 - name: StringIndexOfSIMD
1293   result_type: WordSized
1294   operands:
1295     string: WordSized
1296   arguments:
1297     searchString: JSLinearString*
1298   num_temps: 3
1300 # Search for the last index of the search string.
1301 - name: StringLastIndexOf
1302   result_type: WordSized
1303   operands:
1304     string: WordSized
1305     searchString: WordSized
1306   call_instruction: true
1308 # Test if a string starts with the search string
1309 - name: StringStartsWith
1310   result_type: WordSized
1311   operands:
1312     string: WordSized
1313     searchString: WordSized
1314   call_instruction: true
1316 # Test if a string starts with the constant search string
1317 - name: StringStartsWithInline
1318   result_type: WordSized
1319   operands:
1320     string: WordSized
1321   arguments:
1322     searchString: JSLinearString*
1323   num_temps: 1
1325 # Test if a string ends with the search string
1326 - name: StringEndsWith
1327   result_type: WordSized
1328   operands:
1329     string: WordSized
1330     searchString: WordSized
1331   call_instruction: true
1333 # Test if a string ends with the constant search string
1334 - name: StringEndsWithInline
1335   result_type: WordSized
1336   operands:
1337     string: WordSized
1338   arguments:
1339     searchString: JSLinearString*
1340   num_temps: 1
1342 # Calls the ToLowerCase case conversion function. Inlines the case conversion
1343 # when possible.
1344 - name: StringToLowerCase
1345   result_type: WordSized
1346   operands:
1347     string: WordSized
1348   num_temps: 5
1349   mir_op: StringConvertCase
1351 # Calls the ToLowerCase case conversion function. Inlines the case conversion
1352 # when possible.
1353 - name: CharCodeToLowerCase
1354   result_type: WordSized
1355   operands:
1356     code: WordSized
1357   num_temps: 1
1358   mir_op: CharCodeConvertCase
1360 # Calls the ToUpperCase case conversion function.
1361 - name: StringToUpperCase
1362   result_type: WordSized
1363   operands:
1364     string: WordSized
1365   call_instruction: true
1366   mir_op: StringConvertCase
1368 # Calls the ToUpperCase case conversion function. Inlines the case conversion
1369 # when possible.
1370 - name: CharCodeToUpperCase
1371   result_type: WordSized
1372   operands:
1373     code: WordSized
1374   num_temps: 1
1375   mir_op: CharCodeConvertCase
1377 # Index of first non-whitespace character.
1378 - name: StringTrimStartIndex
1379   result_type: WordSized
1380   operands:
1381     string: WordSized
1383 # Index of last non-whitespace character.
1384 - name: StringTrimEndIndex
1385   result_type: WordSized
1386   operands:
1387     string: WordSized
1388     start: WordSized
1390 - name: StringSplit
1391   result_type: WordSized
1392   operands:
1393     string: WordSized
1394     separator: WordSized
1395   call_instruction: true
1396   mir_op: true
1398 - name: Substr
1399   result_type: WordSized
1400   operands:
1401     string: WordSized
1402     begin: WordSized
1403     length: WordSized
1404   num_temps: 3
1405   mir_op: true
1407 - name: Int32ToDouble
1408   result_type: WordSized
1409   operands:
1410     input: WordSized
1412 - name: Float32ToDouble
1413   result_type: WordSized
1414   operands:
1415     input: WordSized
1417 - name: DoubleToFloat32
1418   result_type: WordSized
1419   operands:
1420     input: WordSized
1422 - name: Int32ToFloat32
1423   result_type: WordSized
1424   operands:
1425     input: WordSized
1427 # Convert a value to a double.
1428 - name: ValueToDouble
1429   result_type: WordSized
1430   operands:
1431     input: BoxedValue
1432   mir_op: ToDouble
1434 # Convert a value to a float32.
1435 - name: ValueToFloat32
1436   result_type: WordSized
1437   operands:
1438     input: BoxedValue
1439   mir_op: ToFloat32
1441 - name: ValueToInt32
1442   gen_boilerplate: false
1444 # Convert a value to a BigInt.
1445 - name: ValueToBigInt
1446   result_type: WordSized
1447   operands:
1448     input: BoxedValue
1449   mir_op: ToBigInt
1451 # Convert a double to an int32.
1452 #   Input: floating-point Register
1453 #   Output: 32-bit integer
1454 #   Bailout: if the double cannot be converted to an integer.
1455 - name: DoubleToInt32
1456   result_type: WordSized
1457   operands:
1458     in: WordSized
1459   mir_op: ToNumberInt32
1461 # Convert a float32 to an int32.
1462 #   Input: floating-point Register
1463 #   Output: 32-bit integer
1464 #   Bailout: if the float32 cannot be converted to an integer.
1465 - name: Float32ToInt32
1466   result_type: WordSized
1467   operands:
1468     in: WordSized
1469   mir_op: ToNumberInt32
1471 # Convert a double to a truncated int32.
1472 #   Input: floating-point Register
1473 #   Output: 32-bit integer
1474 - name: TruncateDToInt32
1475   result_type: WordSized
1476   operands:
1477     in: WordSized
1478   num_temps: 1
1479   mir_op: TruncateToInt32
1481 # Convert a double to a truncated int32 with instance offset because we need it
1482 # for the slow ool path.
1483 - name: WasmBuiltinTruncateDToInt32
1484   result_type: WordSized
1485   operands:
1486     in: WordSized
1487     instance: WordSized
1488   num_temps: 1
1489   mir_op: WasmBuiltinTruncateToInt32
1491 # Convert a float32 to a truncated int32.
1492 #   Input: floating-point Register
1493 #   Output: 32-bit integer
1494 - name: TruncateFToInt32
1495   result_type: WordSized
1496   operands:
1497     in: WordSized
1498   num_temps: 1
1499   mir_op: TruncateToInt32
1501 # Convert a float32 to a truncated int32 with instance offset because we need
1502 # it for the slow ool path.
1503 - name: WasmBuiltinTruncateFToInt32
1504   result_type: WordSized
1505   operands:
1506     in: WordSized
1507     instance: WordSized
1508   num_temps: 1
1509   mir_op: WasmBuiltinTruncateToInt32
1511 - name: WasmTruncateToInt32
1512   result_type: WordSized
1513   operands:
1514     input: WordSized
1515   mir_op: true
1517 - name: WrapInt64ToInt32
1518   result_type: WordSized
1519   operands:
1520     input: Int64
1521   mir_op: true
1523 - name: ExtendInt32ToInt64
1524   result_type: Int64
1525   operands:
1526     input: WordSized
1527   mir_op: true
1529 # Convert a boolean value to a string.
1530 - name: BooleanToString
1531   result_type: WordSized
1532   operands:
1533     input: WordSized
1534   mir_op: ToString
1536 # Convert an integer hosted on one definition to a string with a function call.
1537 - name: IntToString
1538   result_type: WordSized
1539   operands:
1540     input: WordSized
1541   mir_op: ToString
1543 # Convert a double hosted on one definition to a string with a function call.
1544 - name: DoubleToString
1545   result_type: WordSized
1546   operands:
1547     input: WordSized
1548   num_temps: 1
1549   mir_op: ToString
1551 # Convert a primitive to a string with a function call.
1552 - name: ValueToString
1553   result_type: WordSized
1554   operands:
1555     input: BoxedValue
1556   num_temps: 1
1557   mir_op: ToString
1559 - name: PowHalfD
1560   gen_boilerplate: false
1562 - name: NaNToZero
1563   result_type: WordSized
1564   operands:
1565     input: WordSized
1566   num_temps: 1
1567   mir_op: true
1569 - name: OsrEntry
1570   gen_boilerplate: false
1572 # Materialize a Value stored in an interpreter frame for OSR.
1573 - name: OsrValue
1574   result_type: BoxedValue
1575   operands:
1576     entry: WordSized
1577   mir_op: true
1579 # Materialize a JSObject env chain stored in an interpreter frame for OSR.
1580 - name: OsrEnvironmentChain
1581   result_type: WordSized
1582   operands:
1583     entry: WordSized
1584   mir_op: true
1586 # Materialize a JSObject env chain stored in an interpreter frame for OSR.
1587 - name: OsrReturnValue
1588   result_type: BoxedValue
1589   operands:
1590     entry: WordSized
1591   mir_op: true
1593 - name: OsrArgumentsObject
1594   result_type: WordSized
1595   operands:
1596     entry: WordSized
1597   mir_op: true
1599 - name: RegExp
1600   result_type: WordSized
1601   num_temps: 1
1602   mir_op: true
1604 - name: RegExpMatcher
1605   result_type: BoxedValue
1606   operands:
1607     regexp: WordSized
1608     string: WordSized
1609     lastIndex: WordSized
1610   call_instruction: true
1611   mir_op: true
1613 - name: RegExpSearcher
1614   result_type: WordSized
1615   operands:
1616     regexp: WordSized
1617     string: WordSized
1618     lastIndex: WordSized
1619   call_instruction: true
1620   mir_op: true
1622 - name: RegExpSearcherLastLimit
1623   result_type: WordSized
1624   operands:
1625   num_temps: 1
1627 - name: RegExpExecMatch
1628   result_type: BoxedValue
1629   operands:
1630     regexp: WordSized
1631     string: WordSized
1632   call_instruction: true
1633   num_temps: 0
1634   mir_op: true
1636 - name: RegExpExecTest
1637   result_type: WordSized
1638   operands:
1639     regexp: WordSized
1640     string: WordSized
1641   call_instruction: true
1642   num_temps: 0
1643   mir_op: true
1645 - name: RegExpHasCaptureGroups
1646   result_type: WordSized
1647   operands:
1648     regexp: WordSized
1649     input: WordSized
1650   mir_op: true
1652 - name: RegExpPrototypeOptimizable
1653   result_type: WordSized
1654   operands:
1655     object: WordSized
1656   num_temps: 1
1657   mir_op: true
1659 - name: RegExpInstanceOptimizable
1660   result_type: WordSized
1661   operands:
1662     object: WordSized
1663     proto: WordSized
1664   num_temps: 1
1665   mir_op: true
1667 - name: GetFirstDollarIndex
1668   result_type: WordSized
1669   operands:
1670     str: WordSized
1671   num_temps: 3
1673 - name: StringReplace
1674   result_type: WordSized
1675   operands:
1676     string: WordSized
1677     pattern: WordSized
1678     replacement: WordSized
1679   call_instruction: true
1680   mir_op: true
1682 - name: BinaryValueCache
1683   result_type: BoxedValue
1684   operands:
1685     lhs: BoxedValue
1686     rhs: BoxedValue
1687   # Takes two temps: these are intended to be FloatReg0 and FloatReg1
1688   # to allow the actual cache code to safely clobber those values without
1689   # save and restore.
1690   num_temps: 2
1691   mir_op: BinaryCache
1693 - name: BinaryBoolCache
1694   result_type: WordSized
1695   operands:
1696     lhs: BoxedValue
1697     rhs: BoxedValue
1698   # Takes two temps: these are intendend to be FloatReg0 and FloatReg1
1699   # To allow the actual cache code to safely clobber those values without
1700   # save and restore.
1701   num_temps: 2
1702   mir_op: BinaryCache
1704 - name: UnaryCache
1705   result_type: BoxedValue
1706   operands:
1707     input: BoxedValue
1708   mir_op_cast: true
1710 - name: ModuleMetadata
1711   result_type: WordSized
1712   call_instruction: true
1713   mir_op: true
1715 - name: DynamicImport
1716   result_type: WordSized
1717   operands:
1718     specifier: BoxedValue
1719     options: BoxedValue
1720   call_instruction: true
1721   mir_op: true
1723 - name: Lambda
1724   result_type: WordSized
1725   operands:
1726     environmentChain: WordSized
1727   num_temps: 1
1728   mir_op: true
1730 - name: FunctionWithProto
1731   result_type: WordSized
1732   operands:
1733     envChain: WordSized
1734     prototype: WordSized
1735   call_instruction: true
1736   mir_op: true
1738 - name: SetFunName
1739   result_type: WordSized
1740   operands:
1741     fun: WordSized
1742     name: BoxedValue
1743   call_instruction: true
1744   mir_op: true
1746 - name: KeepAliveObject
1747   operands:
1748     object: WordSized
1750 - name: DebugEnterGCUnsafeRegion
1751   num_temps: 1
1753 - name: DebugLeaveGCUnsafeRegion
1754   num_temps: 1
1756 # Load the "slots" member out of a JSObject.
1757 #   Input: JSObject pointer
1758 #   Output: slots pointer
1759 - name: Slots
1760   result_type: WordSized
1761   operands:
1762     object: WordSized
1764 # Load the "elements" member out of a JSObject.
1765 #   Input: JSObject pointer
1766 #   Output: elements pointer
1767 - name: Elements
1768   result_type: WordSized
1769   operands:
1770     object: WordSized
1771   mir_op: true
1773 # Load the initialized length from an elements header.
1774 - name: InitializedLength
1775   result_type: WordSized
1776   operands:
1777     elements: WordSized
1779 # Store to the initialized length in an elements header. Note the input is an
1780 # *index*, one less than the desired initialized length.
1781 - name: SetInitializedLength
1782   operands:
1783     elements: WordSized
1784     index: WordSized
1786 # Load the length from an elements header.
1787 - name: ArrayLength
1788   result_type: WordSized
1789   operands:
1790     elements: WordSized
1792 # Store to the length in an elements header. Note the input is an *index*,
1793 # one less than the desired length.
1794 - name: SetArrayLength
1795   operands:
1796     elements: WordSized
1797     index: WordSized
1799 # Load the "length" property of a function.
1800 - name: FunctionLength
1801   result_type: WordSized
1802   operands:
1803     function: WordSized
1805 # Load the "name" property of a function.
1806 - name: FunctionName
1807   result_type: WordSized
1808   operands:
1809     function: WordSized
1811 - name: GetNextEntryForIterator
1812   result_type: WordSized
1813   operands:
1814     iter: WordSized
1815     result: WordSized
1816   num_temps: 3
1817   mir_op: true
1819 - name: ArrayBufferByteLength
1820   result_type: WordSized
1821   operands:
1822     object: WordSized
1824 - name: ArrayBufferViewLength
1825   result_type: WordSized
1826   operands:
1827     object: WordSized
1828   mir_op: true
1830 # Read the byteOffset of an array buffer view.
1831 - name: ArrayBufferViewByteOffset
1832   result_type: WordSized
1833   operands:
1834     object: WordSized
1836 # Load an array buffer view's elements vector.
1837 - name: ArrayBufferViewElements
1838   result_type: WordSized
1839   operands:
1840     object: WordSized
1842 # Return the element size of a typed array.
1843 - name: TypedArrayElementSize
1844   result_type: WordSized
1845   operands:
1846     object: WordSized
1848 - name: GuardHasAttachedArrayBuffer
1849   operands:
1850     object: WordSized
1851   num_temps: 1
1853 # Double to IntPtr, eligible for accessing into a TypedArray or DataView. If
1854 # the index isn't exactly representable as an IntPtr, depending on the
1855 # supportOOB flag on the MIR instruction, either bail out or produce an IntPtr
1856 # which is equivalent to an OOB access.
1857 - name: GuardNumberToIntPtrIndex
1858   result_type: WordSized
1859   operands:
1860     object: WordSized
1861   mir_op: true
1863 # Bailout if index >= length.
1864 - name: BoundsCheck
1865   operands:
1866     index: WordSized
1867     length: WordSized
1868   mir_op: true
1870 - name: BoundsCheckRange
1871   gen_boilerplate: false
1873 # Bailout if index < minimum.
1874 - name: BoundsCheckLower
1875   operands:
1876     index: WordSized
1877   mir_op: true
1879 - name: SpectreMaskIndex
1880   result_type: WordSized
1881   operands:
1882     index: WordSized
1883     length: WordSized
1884   mir_op: true
1886 - name: LoadElementV
1887   gen_boilerplate: false
1889 - name: InArray
1890   result_type: WordSized
1891   operands:
1892     elements: WordSized
1893     index: WordSized
1894     initLength: WordSized
1895   mir_op: true
1897 - name: GuardElementNotHole
1898   operands:
1899     elements: WordSized
1900     index: WordSized
1902 - name: LoadElementHole
1903   gen_boilerplate: false
1905 - name: StoreElementV
1906   gen_boilerplate: false
1908 - name: StoreElementT
1909   gen_boilerplate: false
1911 - name: StoreHoleValueElement
1912   operands:
1913     elements: WordSized
1914     index: WordSized
1916 # Like LStoreElementV, but supports indexes >= initialized length.
1917 - name: StoreElementHoleV
1918   operands:
1919     object: WordSized
1920     elements: WordSized
1921     index: WordSized
1922     value: BoxedValue
1923   num_temps: 1
1924   mir_op: StoreElementHole
1926 # Like LStoreElementT, but supports indexes >= initialized length.
1927 - name: StoreElementHoleT
1928   operands:
1929     object: WordSized
1930     elements: WordSized
1931     index: WordSized
1932     value: WordSized
1933   num_temps: 1
1934   mir_op: StoreElementHole
1936 - name: ArrayPopShift
1937   gen_boilerplate: false
1939 - name: ArrayPush
1940   result_type: WordSized
1941   operands:
1942     object: WordSized
1943     value: BoxedValue
1944   num_temps: 2
1945   mir_op: true
1947 - name: ArraySlice
1948   result_type: WordSized
1949   operands:
1950     object: WordSized
1951     begin: WordSized
1952     end: WordSized
1953   num_temps: 2
1954   call_instruction: true
1955   mir_op: true
1957 - name: ArgumentsSlice
1958   result_type: WordSized
1959   operands:
1960     object: WordSized
1961     begin: WordSized
1962     end: WordSized
1963   num_temps: 2
1964   call_instruction: true
1965   mir_op: true
1967 - name: FrameArgumentsSlice
1968   result_type: WordSized
1969   operands:
1970     begin: WordSized
1971     count: WordSized
1972   num_temps: 1
1973   mir_op: true
1975 - name: InlineArgumentsSlice
1976   gen_boilerplate: false
1978 - name: NormalizeSliceTerm
1979   result_type: WordSized
1980   operands:
1981     value: WordSized
1982     length: WordSized
1983   mir_op: true
1985 - name: ArrayJoin
1986   result_type: WordSized
1987   operands:
1988     array: WordSized
1989     separator: WordSized
1990   num_temps: 1
1991   call_instruction: true
1992   mir_op: true
1994 - name: ObjectKeys
1995   result_type: WordSized
1996   operands:
1997     object: WordSized
1998   num_temps: 0
1999   call_instruction: true
2001 - name: ObjectKeysLength
2002   result_type: WordSized
2003   operands:
2004     object: WordSized
2005   num_temps: 0
2006   call_instruction: true
2008 - name: LoadUnboxedScalar
2009   result_type: WordSized
2010   operands:
2011     elements: WordSized
2012     index: WordSized
2013   num_temps: 1
2014   mir_op: true
2016 - name: LoadUnboxedBigInt
2017   gen_boilerplate: false
2019 - name: LoadDataViewElement
2020   gen_boilerplate: false
2022 - name: LoadTypedArrayElementHole
2023   result_type: BoxedValue
2024   operands:
2025     object: WordSized
2026     index: WordSized
2027   num_temps: 1
2028   mir_op: true
2030 - name: LoadTypedArrayElementHoleBigInt
2031   gen_boilerplate: false
2033 - name: StoreUnboxedScalar
2034   operands:
2035     elements: WordSized
2036     index: WordSized
2037     value: WordSized
2038   mir_op: true
2040 - name: StoreUnboxedBigInt
2041   gen_boilerplate: false
2043 - name: StoreDataViewElement
2044   gen_boilerplate: false
2046 - name: StoreTypedArrayElementHole
2047   operands:
2048     elements: WordSized
2049     length: WordSized
2050     index: WordSized
2051     value: WordSized
2052   num_temps: 1
2053   mir_op: true
2055 - name: StoreTypedArrayElementHoleBigInt
2056   gen_boilerplate: false
2058 - name: AtomicIsLockFree
2059   result_type: WordSized
2060   operands:
2061     value: WordSized
2063 - name: CompareExchangeTypedArrayElement
2064   gen_boilerplate: false
2066 - name: AtomicExchangeTypedArrayElement
2067   gen_boilerplate: false
2069 - name: AtomicTypedArrayElementBinop
2070   gen_boilerplate: false
2072 - name: AtomicTypedArrayElementBinopForEffect
2073   gen_boilerplate: false
2075 - name: AtomicLoad64
2076   gen_boilerplate: false
2078 - name: AtomicStore64
2079   gen_boilerplate: false
2081 - name: CompareExchangeTypedArrayElement64
2082   gen_boilerplate: false
2084 - name: AtomicExchangeTypedArrayElement64
2085   gen_boilerplate: false
2087 - name: AtomicTypedArrayElementBinop64
2088   gen_boilerplate: false
2090 - name: AtomicTypedArrayElementBinopForEffect64
2091   gen_boilerplate: false
2093 - name: EffectiveAddress
2094   result_type: WordSized
2095   operands:
2096     base: WordSized
2097     index: WordSized
2098   mir_op: true
2100 - name: ClampIToUint8
2101   result_type: WordSized
2102   operands:
2103     input: WordSized
2105 - name: ClampDToUint8
2106   result_type: WordSized
2107   operands:
2108     in: WordSized
2109   num_temps: 1
2111 - name: ClampVToUint8
2112   result_type: WordSized
2113   operands:
2114     input: BoxedValue
2115   num_temps: 1
2116   mir_op: ClampToUint8
2118 - name: LoadScriptedProxyHandler
2119   result_type: BoxedValue
2120   operands:
2121     object: WordSized
2122   mir_op: true
2124 #ifdef JS_PUNBOX64
2125 - name: CheckScriptedProxyGetResult
2126   operands:
2127     target: BoxedValue
2128     id: BoxedValue
2129     value: BoxedValue
2130   num_temps: 2
2131   mir_op: true
2132 #endif
2134 - name: IdToStringOrSymbol
2135   result_type: BoxedValue
2136   operands:
2137     id: BoxedValue
2138   num_temps: 1
2139   mir_op: true
2141 # Load a boxed value from an object's fixed slot.
2142 - name: LoadFixedSlotV
2143   result_type: BoxedValue
2144   operands:
2145     object: WordSized
2146   mir_op: LoadFixedSlot
2148 # Load a boxed value from an object's fixed slot.
2149 # If it is a non-atom string, atomize it and update the slot.
2150 - name: LoadFixedSlotAndAtomize
2151   result_type: BoxedValue
2152   operands:
2153     object: WordSized
2154   num_temps: 1
2155   mir_op: LoadFixedSlot
2157 # Load a typed value from an object's fixed slot.
2158 - name: LoadFixedSlotT
2159   result_type: WordSized
2160   operands:
2161     object: WordSized
2162   mir_op: LoadFixedSlot
2164 - name: LoadFixedSlotAndUnbox
2165   result_type: WordSized
2166   operands:
2167     object: WordSized
2168   mir_op: true
2170 - name: LoadDynamicSlotAndUnbox
2171   result_type: WordSized
2172   operands:
2173     slots: WordSized
2174   mir_op: true
2176 - name: LoadElementAndUnbox
2177   result_type: WordSized
2178   operands:
2179     elements: WordSized
2180     index: WordSized
2181   mir_op: true
2183 - name: LoadFixedSlotUnboxAndAtomize
2184   result_type: WordSized
2185   operands:
2186     object: WordSized
2187   mir_op: LoadFixedSlotAndUnbox
2189 - name: LoadDynamicSlotUnboxAndAtomize
2190   result_type: WordSized
2191   operands:
2192     slots: WordSized
2193   mir_op: LoadDynamicSlotAndUnbox
2195 - name: AddAndStoreSlot
2196   operands:
2197     object: WordSized
2198     value: BoxedValue
2199   num_temps: 1
2200   mir_op: true
2202 - name: AllocateAndStoreSlot
2203   operands:
2204     object: WordSized
2205     value: BoxedValue
2206   num_temps: 2
2207   call_instruction: true
2208   mir_op: true
2210 - name: AddSlotAndCallAddPropHook
2211   operands:
2212     object: WordSized
2213     value: BoxedValue
2214   call_instruction: true
2215   mir_op: true
2217 # Store a boxed value to an object's fixed slot.
2218 - name: StoreFixedSlotV
2219   operands:
2220     obj: WordSized
2221     value: BoxedValue
2222   mir_op: StoreFixedSlot
2224 # Store a typed value to an object's fixed slot.
2225 - name: StoreFixedSlotT
2226   operands:
2227     obj: WordSized
2228     value: WordSized
2229   mir_op: StoreFixedSlot
2231 # Note, Name ICs always return a Value. There are no V/T variants.
2232 - name: GetNameCache
2233   result_type: BoxedValue
2234   operands:
2235     envObj: WordSized
2236   num_temps: 1
2237   mir_op: true
2239 - name: CallGetIntrinsicValue
2240   result_type: BoxedValue
2241   call_instruction: true
2242   mir_op: true
2244 - name: GetPropSuperCache
2245   result_type: BoxedValue
2246   operands:
2247     obj: WordSized
2248     receiver: BoxedValue
2249     id: BoxedValue
2250   mir_op: true
2252 # Patchable jump to stubs generated for a GetProperty cache, which loads a
2253 # boxed value.
2254 - name: GetPropertyCache
2255   result_type: BoxedValue
2256   operands:
2257     value: BoxedValue
2258     id: BoxedValue
2259   mir_op: true
2261 - name: BindNameCache
2262   result_type: WordSized
2263   operands:
2264     environmentChain: WordSized
2265   num_temps: 1
2266   mir_op: true
2268 - name: CallBindVar
2269   result_type: WordSized
2270   operands:
2271     environmentChain: WordSized
2272   mir_op: true
2274 # Load a value from an object's dslots or a slots vector.
2275 - name: LoadDynamicSlotV
2276   result_type: BoxedValue
2277   operands:
2278     in: WordSized
2279   mir_op: LoadDynamicSlot
2281 # Load a value from an object's dslots or a slots vector.
2282 # If it is a non-atom string, atomize it and update the slot.
2283 - name: LoadDynamicSlotAndAtomize
2284   result_type: BoxedValue
2285   operands:
2286     in: WordSized
2287   num_temps: 1
2288   mir_op: LoadDynamicSlot
2290 # Store a value to an object's dslots or a slots vector.
2291 - name: StoreDynamicSlotV
2292   operands:
2293     slots: WordSized
2294     value: BoxedValue
2295   mir_op: StoreDynamicSlot
2297 # Store a typed value to an object's dslots or a slots vector. This has a
2298 # few advantages over LStoreDynamicSlotV:
2299 # 1) We can bypass storing the type tag if the slot has the same type as
2300 #    the value.
2301 # 2) Better Register allocation: we can store constants and FP regs directly
2302 #    without requiring a second Register for the value.
2303 - name: StoreDynamicSlotT
2304   operands:
2305     slots: WordSized
2306     value: WordSized
2307   mir_op: StoreDynamicSlot
2309 # Read length field of a JSString*.
2310 - name: StringLength
2311   result_type: WordSized
2312   operands:
2313     string: WordSized
2315 # Take the floor of a double precision number and converts it to an int32.
2316 # Implements Math.floor().
2317 - name: Floor
2318   result_type: WordSized
2319   operands:
2320     num: WordSized
2322 # Take the floor of a single precision number and converts it to an int32.
2323 # Implements Math.floor().
2324 - name: FloorF
2325   result_type: WordSized
2326   operands:
2327     num: WordSized
2329 # Take the ceiling of a double precision number and converts it to an int32.
2330 # Implements Math.ceil().
2331 - name: Ceil
2332   result_type: WordSized
2333   operands:
2334     num: WordSized
2336 # Take the ceiling of a single precision number and converts it to an int32.
2337 # Implements Math.ceil().
2338 - name: CeilF
2339   result_type: WordSized
2340   operands:
2341     string: WordSized
2343 # Round a double precision number and converts it to an int32.
2344 # Implements Math.round().
2345 - name: Round
2346   result_type: WordSized
2347   operands:
2348     num: WordSized
2349   num_temps: 1
2350   mir_op: true
2352 # Round a single precision number and converts it to an int32.
2353 # Implements Math.round().
2354 - name: RoundF
2355   result_type: WordSized
2356   operands:
2357     num: WordSized
2358   num_temps: 1
2359   mir_op: Round
2361 # Truncates a double precision number and converts it to an int32.
2362 # Implements Math.trunc().
2363 - name: Trunc
2364   result_type: WordSized
2365   operands:
2366     num: WordSized
2368 # Truncates a single precision number and converts it to an int32.
2369 # Implements Math.trunc().
2370 - name: TruncF
2371   result_type: WordSized
2372   operands:
2373     num: WordSized
2375 # Rounds a double precision number accordingly to mir()->roundingMode(),
2376 # and keeps a double output.
2377 - name: NearbyInt
2378   result_type: WordSized
2379   operands:
2380     num: WordSized
2381   mir_op: true
2383 # Rounds a single precision number accordingly to mir()->roundingMode(),
2384 # and keeps a single output.
2385 - name: NearbyIntF
2386   result_type: WordSized
2387   operands:
2388     num: WordSized
2389   mir_op: NearbyInt
2391 # Load a function's call environment.
2392 - name: FunctionEnvironment
2393   result_type: WordSized
2394   operands:
2395     function: WordSized
2397 - name: HomeObject
2398   result_type: WordSized
2399   operands:
2400     function: WordSized
2402 - name: HomeObjectSuperBase
2403   result_type: BoxedValue
2404   operands:
2405     homeObject: WordSized
2407 - name: NewLexicalEnvironmentObject
2408   result_type: WordSized
2409   num_temps: 1
2410   mir_op: true
2412 - name: NewClassBodyEnvironmentObject
2413   result_type: WordSized
2414   num_temps: 1
2415   mir_op: true
2417 - name: NewVarEnvironmentObject
2418   result_type: WordSized
2419   num_temps: 1
2420   mir_op: true
2422 - name: MegamorphicSetElement
2423   operands:
2424     object: WordSized
2425     index: BoxedValue
2426     value: BoxedValue
2427   # On x86 we do not have enough registers to use 3 temps for this *and* take
2428   # five words worth of operands. Since it's 32-bit, though, we get two
2429   # registers from pushing `value`, which doesn't get used until the end
2430   # anyway. This is somewhat klunky, but oh well.
2431 #ifdef JS_CODEGEN_X86
2432   num_temps: 1
2433 #else
2434   num_temps: 3
2435 #endif
2436   call_instruction: true
2437   mir_op: true
2439 - name: CallDeleteProperty
2440   result_type: WordSized
2441   operands:
2442     value: BoxedValue
2443   call_instruction: true
2444   mir_op: DeleteProperty
2446 - name: CallDeleteElement
2447   result_type: WordSized
2448   operands:
2449     value: BoxedValue
2450     index: BoxedValue
2451   call_instruction: true
2452   mir_op: DeleteElement
2454 - name: ObjectToIterator
2455   result_type: WordSized
2456   operands:
2457     object: WordSized
2458   num_temps: 3
2459   mir_op: true
2461 - name: ValueToIterator
2462   result_type: WordSized
2463   operands:
2464     value: BoxedValue
2465   call_instruction: true
2466   mir_op: ValueToIterator
2468 - name: IteratorHasIndicesAndBranch
2469   gen_boilerplate: false
2471 - name: LoadSlotByIteratorIndex
2472   result_type: BoxedValue
2473   operands:
2474     object: WordSized
2475     iterator: WordSized
2477   num_temps: 2
2479 - name: StoreSlotByIteratorIndex
2480   operands:
2481     object: WordSized
2482     iterator: WordSized
2483     value: BoxedValue
2484   num_temps: 2
2485   mir_op: true
2487 # Patchable jump to stubs generated for a SetProperty cache.
2488 - name: SetPropertyCache
2489   operands:
2490     object: WordSized
2491     id: BoxedValue
2492     value: BoxedValue
2493   # Takes an additional temp: this is intendend to be FloatReg0 to allow the
2494   # actual cache code to safely clobber that value without save and restore.
2495   num_temps: 2
2496   mir_op: true
2498 - name: GetIteratorCache
2499   result_type: WordSized
2500   operands:
2501     value: BoxedValue
2502   num_temps: 2
2503   mir_op: true
2505 - name: OptimizeSpreadCallCache
2506   result_type: BoxedValue
2507   operands:
2508     value: BoxedValue
2509   num_temps: 1
2510   mir_op: true
2512 - name: IteratorMore
2513   result_type: BoxedValue
2514   operands:
2515     iterator: WordSized
2516   num_temps: 1
2517   mir_op: true
2519 - name: IsNoIterAndBranch
2520   gen_boilerplate: false
2522 - name: IteratorEnd
2523   operands:
2524     object: WordSized
2525   num_temps: 3
2526   mir_op: true
2528 - name: CloseIterCache
2529   operands:
2530     iter: WordSized
2531   num_temps: 1
2532   mir_op: true
2534 - name: OptimizeGetIteratorCache
2535   result_type: WordSized
2536   operands:
2537     value: BoxedValue
2538   num_temps: 1
2539   mir_op: true
2541 # Read the number of actual arguments.
2542 - name: ArgumentsLength
2543   result_type: WordSized
2545 # Load a value from the actual arguments.
2546 - name: GetFrameArgument
2547   result_type: BoxedValue
2548   operands:
2549     index: WordSized
2551 # Load a value from the actual arguments.
2552 # Returns undefined if |index| is larger-or-equals to |length|. Bails out if
2553 # |index| is negative.
2554 - name: GetFrameArgumentHole
2555   result_type: BoxedValue
2556   operands:
2557     index: WordSized
2558     length: WordSized
2559   num_temps: 1
2561 # Create the rest parameter.
2562 - name: Rest
2563   result_type: WordSized
2564   operands:
2565     numActuals: WordSized
2566   num_temps: 3
2567   call_instruction: true
2568   mir_op: true
2570 - name: Int32ToIntPtr
2571   result_type: WordSized
2572   operands:
2573     input: WordSized
2574   mir_op: true
2576 - name: NonNegativeIntPtrToInt32
2577   result_type: WordSized
2578   operands:
2579     input: WordSized
2581 - name: IntPtrToDouble
2582   result_type: WordSized
2583   operands:
2584     input: WordSized
2586 - name: AdjustDataViewLength
2587   result_type: WordSized
2588   operands:
2589     input: WordSized
2590   mir_op: true
2592 # Convert a Boolean to an Int64, following ToBigInt.
2593 - name: BooleanToInt64
2594   result_type: Int64
2595   operands:
2596     input: WordSized
2597   mir_op: ToInt64
2599 # Convert a String to an Int64, following ToBigInt.
2600 - name: StringToInt64
2601   result_type: Int64
2602   operands:
2603     input: WordSized
2604   mir_op: ToInt64
2606 # Simulate ToBigInt on a Value and produce a matching Int64.
2607 - name: ValueToInt64
2608   result_type: Int64
2609   operands:
2610     input: BoxedValue
2611   num_temps: 1
2612   mir_op: ToInt64
2614 # Truncate a BigInt to an unboxed int64.
2615 - name: TruncateBigIntToInt64
2616   result_type: Int64
2617   operands:
2618     input: WordSized
2619   mir_op: true
2621 # Create a new BigInt* from an unboxed int64.
2622 - name: Int64ToBigInt
2623   result_type: WordSized
2624   operands:
2625     input: Int64
2626   num_temps: 1
2627   mir_op: true
2629 # Generational write barrier used when writing an object to another object.
2630 - name: PostWriteBarrierO
2631   operands:
2632     object: WordSized
2633     value: WordSized
2634   num_temps: 1
2635   mir_op: PostWriteBarrier
2637 # Generational write barrier used when writing a string to an object.
2638 - name: PostWriteBarrierS
2639   operands:
2640     object: WordSized
2641     value: WordSized
2642   num_temps: 1
2643   mir_op: PostWriteBarrier
2645 # Generational write barrier used when writing a BigInt to an object.
2646 - name: PostWriteBarrierBI
2647   operands:
2648     object: WordSized
2649     value: WordSized
2650   num_temps: 1
2651   mir_op: PostWriteBarrier
2653 # Generational write barrier used when writing a value to another object.
2654 - name: PostWriteBarrierV
2655   operands:
2656     object: WordSized
2657     value: BoxedValue
2658   num_temps: 1
2659   mir_op: PostWriteBarrier
2661 # Generational write barrier used when writing an object to another object's
2662 # elements.
2663 - name: PostWriteElementBarrierO
2664   operands:
2665     object: WordSized
2666     value: WordSized
2667     index: WordSized
2668   num_temps: 1
2669   mir_op: PostWriteElementBarrier
2671 # Generational write barrier used when writing a string to an object's
2672 # elements.
2673 - name: PostWriteElementBarrierS
2674   operands:
2675     object: WordSized
2676     value: WordSized
2677     index: WordSized
2678   num_temps: 1
2679   mir_op: PostWriteElementBarrier
2681 # Generational write barrier used when writing a BigInt to an object's
2682 # elements.
2683 - name: PostWriteElementBarrierBI
2684   operands:
2685     object: WordSized
2686     value: WordSized
2687     index: WordSized
2688   num_temps: 1
2689   mir_op: PostWriteElementBarrier
2691 # Generational write barrier used when writing a value to another object's
2692 # elements.
2693 - name: PostWriteElementBarrierV
2694   operands:
2695     object: WordSized
2696     index: WordSized
2697     value: BoxedValue
2698   num_temps: 1
2699   mir_op: PostWriteElementBarrier
2701 # Assert in debug mode that a post write barrier can be elided.
2702 - name: AssertCanElidePostWriteBarrier
2703   operands:
2704     object: WordSized
2705     value: BoxedValue
2706   num_temps: 1
2708 # Guard against an object's identity.
2709 - name: GuardObjectIdentity
2710   operands:
2711     input: WordSized
2712     expected: WordSized
2713   mir_op: true
2715 # Guard against an function's identity.
2716 - name: GuardSpecificFunction
2717   operands:
2718     input: WordSized
2719     expected: WordSized
2721 - name: GuardSpecificAtom
2722   operands:
2723     str: WordSized
2724   num_temps: 1
2725   mir_op: true
2727 - name: GuardSpecificSymbol
2728   operands:
2729     symbol: WordSized
2730   mir_op: true
2732 - name: GuardSpecificInt32
2733   operands:
2734     num: WordSized
2735   mir_op: true
2737 - name: GuardStringToIndex
2738   result_type: WordSized
2739   operands:
2740     string: WordSized
2742 - name: GuardStringToInt32
2743   result_type: WordSized
2744   operands:
2745     string: WordSized
2746   num_temps: 1
2748 - name: GuardStringToDouble
2749   result_type: WordSized
2750   operands:
2751     string: WordSized
2752   num_temps: 2
2754 - name: GuardShape
2755   result_type: WordSized
2756   operands:
2757     in: WordSized
2758   num_temps: 1
2759   mir_op: true
2761 - name: GuardMultipleShapes
2762   result_type: WordSized
2763   operands:
2764     object: WordSized
2765     shapeList: WordSized
2766   num_temps: 4
2767   mir_op: true
2769 - name: GuardProto
2770   operands:
2771     object: WordSized
2772     expected: WordSized
2773   num_temps: 1
2775 - name: GuardNullProto
2776   operands:
2777     object: WordSized
2778   num_temps: 1
2780 - name: GuardIsNativeObject
2781   operands:
2782     object: WordSized
2783   num_temps: 1
2785 - name: GuardGlobalGeneration
2786   mir_op: true
2787   num_temps: 1
2789 - name: GuardFuse
2790   mir_op: true
2791   num_temps: 1
2793 - name: GuardIsProxy
2794   operands:
2795     object: WordSized
2796   num_temps: 1
2798 - name: GuardIsNotProxy
2799   operands:
2800     object: WordSized
2801   num_temps: 1
2803 - name: GuardIsNotDOMProxy
2804   operands:
2805     proxy: WordSized
2806   num_temps: 1
2808 - name: ProxyGet
2809   result_type: BoxedValue
2810   operands:
2811     proxy: WordSized
2812   num_temps: 1
2813   call_instruction: true
2814   mir_op: true
2816 - name: ProxyGetByValue
2817   result_type: BoxedValue
2818   operands:
2819     proxy: WordSized
2820     id: BoxedValue
2821   call_instruction: true
2823 - name: ProxyHasProp
2824   result_type: BoxedValue
2825   operands:
2826     proxy: WordSized
2827     id: BoxedValue
2828   call_instruction: true
2829   mir_op: true
2831 - name: ProxySet
2832   operands:
2833     proxy: WordSized
2834     rhs: BoxedValue
2835   num_temps: 1
2836   call_instruction: true
2837   mir_op: true
2839 - name: ProxySetByValue
2840   operands:
2841     proxy: WordSized
2842     id: BoxedValue
2843     rhs: BoxedValue
2844   call_instruction: true
2845   mir_op: true
2847 - name: CallSetArrayLength
2848   operands:
2849     obj: WordSized
2850     rhs: BoxedValue
2851   call_instruction: true
2852   mir_op: true
2854 - name: MegamorphicLoadSlot
2855   result_type: BoxedValue
2856   operands:
2857     object: WordSized
2858   num_temps: 4
2859   call_instruction: true
2860   mir_op: true
2862 - name: MegamorphicLoadSlotByValue
2863   result_type: BoxedValue
2864   operands:
2865     object: WordSized
2866     id: BoxedValue
2867   num_temps: 3
2868   call_instruction: true
2869   mir_op: true
2871 - name: MegamorphicStoreSlot
2872   operands:
2873     object: WordSized
2874     rhs: BoxedValue
2875 #ifdef JS_CODEGEN_X86
2876   num_temps: 1
2877 #else
2878   num_temps: 3
2879 #endif
2880   call_instruction: true
2881   mir_op: true
2883 - name: MegamorphicHasProp
2884   result_type: WordSized
2885   operands:
2886     object: WordSized
2887     id: BoxedValue
2888   num_temps: 3
2889   call_instruction: true
2890   mir_op: true
2892 - name: GuardIsNotArrayBufferMaybeShared
2893   operands:
2894     object: WordSized
2895   num_temps: 1
2897 - name: GuardIsTypedArray
2898   operands:
2899     object: WordSized
2900   num_temps: 1
2902 - name: GuardHasProxyHandler
2903   operands:
2904     object: WordSized
2905   mir_op: true
2907 - name: GuardNoDenseElements
2908   operands:
2909     in: WordSized
2910   num_temps: 1
2912 - name: InCache
2913   result_type: WordSized
2914   operands:
2915     lhs: BoxedValue
2916     rhs: WordSized
2917   num_temps: 1
2918   mir_op: true
2920 - name: HasOwnCache
2921   result_type: WordSized
2922   operands:
2923     value: BoxedValue
2924     id: BoxedValue
2925   mir_op: true
2927 - name: CheckPrivateFieldCache
2928   result_type: WordSized
2929   operands:
2930     value: BoxedValue
2931     id: BoxedValue
2932   mir_op: true
2934 - name: NewPrivateName
2935   result_type: WordSized
2936   call_instruction: true
2937   mir_op: true
2939 - name: InstanceOfO
2940   result_type: WordSized
2941   operands:
2942     lhs: WordSized
2943     rhs: WordSized
2944   mir_op: InstanceOf
2946 - name: InstanceOfV
2947   result_type: WordSized
2948   operands:
2949     lhs: BoxedValue
2950     rhs: WordSized
2951   mir_op: InstanceOf
2953 - name: InstanceOfCache
2954   gen_boilerplate: false
2956 - name: IsCallableO
2957   result_type: WordSized
2958   operands:
2959     object: WordSized
2960   mir_op: IsCallable
2962 - name: IsCallableV
2963   result_type: WordSized
2964   operands:
2965     object: BoxedValue
2966   num_temps: 1
2967   mir_op: IsCallable
2969 - name: IsConstructor
2970   result_type: WordSized
2971   operands:
2972     object: WordSized
2973   mir_op: true
2975 - name: IsCrossRealmArrayConstructor
2976   result_type: WordSized
2977   operands:
2978     object: WordSized
2980 - name: IsArrayO
2981   result_type: WordSized
2982   operands:
2983     object: WordSized
2984   mir_op: IsArray
2986 - name: IsArrayV
2987   result_type: WordSized
2988   operands:
2989     value: BoxedValue
2990   num_temps: 1
2991   mir_op: IsArray
2993 - name: IsTypedArray
2994   result_type: WordSized
2995   operands:
2996     object: WordSized
2997   mir_op: true
2999 - name: IsObject
3000   result_type: WordSized
3001   operands:
3002     object: BoxedValue
3003   mir_op: true
3005 - name: IsObjectAndBranch
3006   gen_boilerplate: false
3008 - name: IsNullOrUndefined
3009   result_type: WordSized
3010   operands:
3011     input: BoxedValue
3012   mir_op: true
3014 - name: IsNullOrUndefinedAndBranch
3015   gen_boilerplate: false
3017 - name: HasClass
3018   result_type: WordSized
3019   operands:
3020     lhs: WordSized
3021   mir_op: true
3023 - name: GuardToClass
3024   result_type: WordSized
3025   operands:
3026     lhs: WordSized
3027   num_temps: 1
3028   mir_op: true
3030 - name: GuardToFunction
3031   result_type: WordSized
3032   operands:
3033     lhs: WordSized
3034   num_temps: 1
3035   mir_op: true
3037 - name: ObjectClassToString
3038   result_type: WordSized
3039   operands:
3040     lhs: WordSized
3041   num_temps: 1
3042   call_instruction: true
3043   mir_op: true
3045 - name: WasmSelect
3046   gen_boilerplate: false
3048 - name: WasmSelectI64
3049   gen_boilerplate: false
3051 - name: WasmCompareAndSelect
3052   gen_boilerplate: false
3054 - name: WasmAddOffset
3055   result_type: WordSized
3056   operands:
3057     base: WordSized
3058   mir_op: true
3060 - name: WasmAddOffset64
3061   result_type: Int64
3062   operands:
3063     base: Int64
3064   mir_op: WasmAddOffset
3066 - name: WasmBoundsCheck
3067   result_type: WordSized
3068   operands:
3069     ptr: WordSized
3070     boundsCheckLimit: WordSized
3071   mir_op: true
3073 - name: WasmBoundsCheck64
3074   gen_boilerplate: false
3076 - name: WasmBoundsCheckRange32
3077   result_type: WordSized
3078   operands:
3079     index: WordSized
3080     length: WordSized
3081     limit: WordSized
3082   mir_op: true
3083   num_temps: 1
3085 - name: WasmExtendU32Index
3086   result_type: WordSized
3087   operands:
3088     input: WordSized
3089   mir_op: true
3091 - name: WasmWrapU32Index
3092   result_type: WordSized
3093   operands:
3094     input: WordSized
3095   mir_op: true
3097 - name: WasmAlignmentCheck
3098   operands:
3099     ptr: WordSized
3100   mir_op: true
3102 - name: WasmAlignmentCheck64
3103   operands:
3104     ptr: Int64
3105   mir_op: WasmAlignmentCheck
3107 - name: WasmLoadInstance
3108   result_type: WordSized
3109   operands:
3110     instance: WordSized
3111   mir_op: true
3113 - name: WasmLoadInstance64
3114   result_type: Int64
3115   operands:
3116     instance: WordSized
3117   mir_op: WasmLoadInstance
3119 - name: WasmHeapReg
3120   result_type: WordSized
3121   mir_op: true
3123 - name: WasmLoad
3124   gen_boilerplate: false
3126 - name: WasmLoadI64
3127   gen_boilerplate: false
3129 - name: WasmStore
3130   gen_boilerplate: false
3132 - name: WasmStoreI64
3133   gen_boilerplate: false
3135 - name: AsmJSLoadHeap
3136   result_type: WordSized
3137   operands:
3138     ptr: WordSized
3139     boundsCheckLimit: WordSized
3140     memoryBase: WordSized
3141   mir_op: true
3143 - name: AsmJSStoreHeap
3144   result_type: WordSized
3145   operands:
3146     ptr: WordSized
3147     value: WordSized
3148     boundsCheckLimit: WordSized
3149     memoryBase: WordSized
3150   mir_op: true
3152 - name: WasmCompareExchangeHeap
3153   gen_boilerplate: false
3155 - name: WasmFence
3157 - name: WasmAtomicExchangeHeap
3158   gen_boilerplate: false
3160 - name: WasmAtomicBinopHeap
3161   gen_boilerplate: false
3163 - name: WasmAtomicBinopHeapForEffect
3164   gen_boilerplate: false
3166 - name: WasmLoadSlot
3167   result_type: WordSized
3168   operands:
3169     containerRef: WordSized
3170   arguments:
3171     offset: size_t
3172     type: MIRType
3173     wideningOp: MWideningOp
3174     maybeTrap: MaybeTrapSiteInfo
3176 - name: WasmLoadSlotI64
3177   result_type: Int64
3178   operands:
3179     containerRef: WordSized
3180   arguments:
3181     offset: size_t
3182     maybeTrap: MaybeTrapSiteInfo
3184 - name: WasmStoreSlot
3185   operands:
3186     value: WordSized
3187     containerRef: WordSized
3188   arguments:
3189     offset: size_t
3190     type: MIRType
3191     narrowingOp: MNarrowingOp
3192     maybeTrap: MaybeTrapSiteInfo
3194 - name: WasmStoreSlotI64
3195   operands:
3196     value: Int64
3197     containerRef: WordSized
3198   arguments:
3199     offset: size_t
3200     maybeTrap: MaybeTrapSiteInfo
3202 - name: WasmLoadTableElement
3203   result_type: WordSized
3204   operands:
3205     elements: WordSized
3206     index: WordSized
3208 - name: WasmDerivedPointer
3209   gen_boilerplate: false
3211 - name: WasmDerivedIndexPointer
3212   gen_boilerplate: false
3214 - name: WasmStoreRef
3215   operands:
3216     instance: WordSized
3217     valueBase: WordSized
3218     value: WordSized
3219   arguments:
3220     offset: uint32_t
3221     maybeTrap: MaybeTrapSiteInfo
3222     preBarrierKind: WasmPreBarrierKind
3223   num_temps: 1
3224   mir_op: true
3226 # Generational write barrier used when writing an object to another object.
3227 - name: WasmPostWriteBarrier
3228   operands:
3229     instance: WordSized
3230     object: WordSized
3231     valueBase: WordSized
3232     value: WordSized
3233   arguments:
3234     valueOffset: uint32_t
3235   num_temps: 1
3236   mir_op: true
3238 - name: WasmParameter
3239   result_type: WordSized
3241 - name: WasmParameterI64
3242   gen_boilerplate: false
3244 - name: WasmReturn
3245   operands:
3246     rval: WordSized
3247     instance: WordSized
3249 - name: WasmReturnI64
3250   operands:
3251     rval: Int64
3252     instance: WordSized
3254 - name: WasmReturnVoid
3255   operands:
3256     rval: WordSized
3258 - name: WasmStackArg
3259   operands:
3260     arg: WordSized
3261   mir_op: true
3263 - name: WasmStackArgI64
3264   operands:
3265     arg: Int64
3266   mir_op: WasmStackArg
3268 - name: WasmNullConstant
3269   result_type: WordSized
3271 - name: WasmCallIndirectAdjunctSafepoint
3272   gen_boilerplate: false
3274 - name: WasmCall
3275   gen_boilerplate: false
3277 - name: WasmCallLandingPrePad
3278   mir_op: true
3280 - name: WasmRegisterResult
3281   gen_boilerplate: false
3283 - name: WasmRegisterPairResult
3284   gen_boilerplate: false
3286 - name: WasmStackResultArea
3287   result_type: WordSized
3288   num_temps: 1
3289   mir_op: true
3291 - name: WasmStackResult
3292   gen_boilerplate: false
3294 - name: WasmStackResult64
3295   gen_boilerplate: false
3297 - name: AssertRangeI
3298   gen_boilerplate: false
3300 - name: AssertRangeD
3301   gen_boilerplate: false
3303 - name: AssertRangeF
3304   gen_boilerplate: false
3306 - name: AssertRangeV
3307   gen_boilerplate: false
3309 - name: AssertClass
3310   operands:
3311     input: WordSized
3312   num_temps: 1
3313   mir_op: true
3315 - name: AssertShape
3316   operands:
3317     input: WordSized
3318   mir_op: true
3320 - name: GuardValue
3321   operands:
3322     input: BoxedValue
3323   mir_op: true
3325 - name: GuardNullOrUndefined
3326   operands:
3327     input: BoxedValue
3328   mir_op: true
3330 - name: GuardIsNotObject
3331   operands:
3332     input: BoxedValue
3333   mir_op: true
3335 - name: GuardFunctionFlags
3336   operands:
3337     function: WordSized
3338   mir_op: true
3340 - name: GuardFunctionIsNonBuiltinCtor
3341   operands:
3342     function: WordSized
3343   num_temps: 1
3345 - name: GuardFunctionKind
3346   operands:
3347     function: WordSized
3348   num_temps: 1
3349   mir_op: true
3351 - name: GuardFunctionScript
3352   operands:
3353     function: WordSized
3354   mir_op: true
3356 - name: IncrementWarmUpCounter
3357   num_temps: 1
3358   mir_op: true
3360 - name: LexicalCheck
3361   operands:
3362     input: BoxedValue
3363   mir_op: true
3365 - name: ThrowRuntimeLexicalError
3366   call_instruction: true
3367   mir_op: true
3369 - name: ThrowMsg
3370   call_instruction: true
3371   mir_op: true
3373 - name: GlobalDeclInstantiation
3374   mir_op: true
3376 - name: MemoryBarrier
3377   gen_boilerplate: false
3379 - name: Debugger
3380   num_temps: 1
3381   call_instruction: true
3383 - name: NewTarget
3384   result_type: BoxedValue
3386 - name: Random
3387   gen_boilerplate: false
3389 - name: CheckReturn
3390   result_type: BoxedValue
3391   operands:
3392     returnValue: BoxedValue
3393     thisValue: BoxedValue
3395 - name: CheckIsObj
3396   result_type: WordSized
3397   operands:
3398     value: BoxedValue
3399   mir_op: true
3401 - name: CheckObjCoercible
3402   operands:
3403     value: BoxedValue
3405 - name: CheckClassHeritage
3406   operands:
3407     heritage: BoxedValue
3408   num_temps: 2
3410 - name: CheckThis
3411   operands:
3412     value: BoxedValue
3414 - name: CheckThisReinit
3415   operands:
3416     thisValue: BoxedValue
3418 - name: Generator
3419   result_type: WordSized
3420   operands:
3421     callee: WordSized
3422     environmentChain: WordSized
3423     argsObject: WordSized
3424   call_instruction: true
3425   mir_op: true
3427 - name: AsyncResolve
3428   result_type: WordSized
3429   operands:
3430     generator: WordSized
3431     valueOrReason: BoxedValue
3432   call_instruction: true
3433   mir_op: true
3435 - name: AsyncAwait
3436   result_type: WordSized
3437   operands:
3438     value: BoxedValue
3439     generator: WordSized
3440   call_instruction: true
3441   mir_op: true
3443 - name: CanSkipAwait
3444   result_type: WordSized
3445   operands:
3446     value: BoxedValue
3447   call_instruction: true
3448   mir_op: true
3450 - name: MaybeExtractAwaitValue
3451   result_type: BoxedValue
3452   operands:
3453     value: BoxedValue
3454     canSkip: WordSized
3455   call_instruction: true
3456   mir_op: true
3458 - name: DebugCheckSelfHosted
3459   operands:
3460     value: BoxedValue
3461   call_instruction: true
3463 - name: IsPackedArray
3464   result_type: WordSized
3465   operands:
3466     object: WordSized
3467   num_temps: 1
3469 - name: GuardArrayIsPacked
3470   operands:
3471     array: WordSized
3472   num_temps: 2
3473   mir_op: true
3475 - name: GetPrototypeOf
3476   result_type: BoxedValue
3477   operands:
3478     target: WordSized
3480 - name: ObjectWithProto
3481   result_type: WordSized
3482   operands:
3483     prototype: BoxedValue
3484   call_instruction: true
3486 - name: ObjectStaticProto
3487   result_type: WordSized
3488   operands:
3489     object: WordSized
3491 - name: BuiltinObject
3492   result_type: WordSized
3493   call_instruction: true
3494   mir_op: true
3496 - name: SuperFunction
3497   result_type: BoxedValue
3498   operands:
3499     callee: WordSized
3500   num_temps: 1
3502 - name: InitHomeObject
3503   result_type: WordSized
3504   operands:
3505     function: WordSized
3506     homeObject: BoxedValue
3508 - name: IsTypedArrayConstructor
3509   result_type: WordSized
3510   operands:
3511     object: WordSized
3513 - name: LoadValueTag
3514   result_type: WordSized
3515   operands:
3516     value: BoxedValue
3518 - name: GuardTagNotEqual
3519   operands:
3520     lhs: WordSized
3521     rhs: WordSized
3523 - name: LoadWrapperTarget
3524   result_type: WordSized
3525   operands:
3526     object: WordSized
3528 - name: GuardHasGetterSetter
3529   operands:
3530     object: WordSized
3531   num_temps: 3
3532   call_instruction: true
3533   mir_op: true
3535 - name: GuardIsExtensible
3536   operands:
3537     object: WordSized
3538   num_temps: 1
3540 - name: GuardInt32IsNonNegative
3541   operands:
3542     index: WordSized
3544 - name: GuardInt32Range
3545   operands:
3546     input: WordSized
3547   mir_op: true
3549 - name: GuardIndexIsNotDenseElement
3550   operands:
3551     object: WordSized
3552     index: WordSized
3553   num_temps: 2
3555 - name: GuardIndexIsValidUpdateOrAdd
3556   operands:
3557     object: WordSized
3558     index: WordSized
3559   num_temps: 2
3561 - name: CallAddOrUpdateSparseElement
3562   operands:
3563     object: WordSized
3564     index: WordSized
3565     value: BoxedValue
3566   call_instruction: true
3567   mir_op: true
3569 - name: CallGetSparseElement
3570   result_type: BoxedValue
3571   operands:
3572     object: WordSized
3573     index: WordSized
3574   call_instruction: true
3576 - name: CallNativeGetElement
3577   result_type: BoxedValue
3578   operands:
3579     object: WordSized
3580     index: WordSized
3581   call_instruction: true
3583 - name: CallNativeGetElementSuper
3584   result_type: BoxedValue
3585   operands:
3586     object: WordSized
3587     index: WordSized
3588     receiver: BoxedValue
3589   call_instruction: true
3591 - name: CallObjectHasSparseElement
3592   result_type: WordSized
3593   operands:
3594     object: WordSized
3595     index: WordSized
3596   num_temps: 2
3597   call_instruction: true
3599 - name: BigIntAsIntN
3600   result_type: WordSized
3601   operands:
3602     bits: WordSized
3603     input: WordSized
3604   call_instruction: true
3606 - name: BigIntAsIntN64
3607   gen_boilerplate: false
3609 - name: BigIntAsIntN32
3610   gen_boilerplate: false
3612 - name: GuardNonGCThing
3613   operands:
3614     input: BoxedValue
3616 - name: ToHashableNonGCThing
3617   result_type: BoxedValue
3618   operands:
3619     input: BoxedValue
3620   num_temps: 1
3622 - name: ToHashableString
3623   result_type: WordSized
3624   operands:
3625     input: WordSized
3627 - name: ToHashableValue
3628   result_type: BoxedValue
3629   operands:
3630     input: BoxedValue
3631   num_temps: 1
3633 - name: HashNonGCThing
3634   result_type: WordSized
3635   operands:
3636     input: BoxedValue
3637   num_temps: 1
3639 - name: HashString
3640   result_type: WordSized
3641   operands:
3642     input: WordSized
3643   num_temps: 1
3645 - name: HashSymbol
3646   result_type: WordSized
3647   operands:
3648     input: WordSized
3650 - name: HashBigInt
3651   result_type: WordSized
3652   operands:
3653     input: WordSized
3654   num_temps: 3
3656 - name: HashObject
3657   result_type: WordSized
3658   operands:
3659     setObject: WordSized
3660     input: BoxedValue
3661   num_temps: 4
3663 - name: HashValue
3664   result_type: WordSized
3665   operands:
3666     setObject: WordSized
3667     input: BoxedValue
3668   num_temps: 4
3670 - name: SetObjectHasNonBigInt
3671   result_type: WordSized
3672   operands:
3673     setObject: WordSized
3674     input: BoxedValue
3675     hash: WordSized
3676   num_temps: 2
3678 - name: SetObjectHasBigInt
3679   result_type: WordSized
3680   operands:
3681     setObject: WordSized
3682     input: BoxedValue
3683     hash: WordSized
3684   num_temps: 4
3686 - name: SetObjectHasValue
3687   result_type: WordSized
3688   operands:
3689     setObject: WordSized
3690     input: BoxedValue
3691     hash: WordSized
3692   num_temps: 4
3694 - name: SetObjectHasValueVMCall
3695   result_type: WordSized
3696   call_instruction: true
3697   operands:
3698     setObject: WordSized
3699     input: BoxedValue
3701 - name: SetObjectSize
3702   result_type: WordSized
3703   operands:
3704     setObject: WordSized
3706 - name: MapObjectHasNonBigInt
3707   result_type: WordSized
3708   operands:
3709     mapObject: WordSized
3710     input: BoxedValue
3711     hash: WordSized
3712   num_temps: 2
3714 - name: MapObjectHasBigInt
3715   result_type: WordSized
3716   operands:
3717     mapObject: WordSized
3718     input: BoxedValue
3719     hash: WordSized
3720   num_temps: 4
3722 - name: MapObjectHasValue
3723   result_type: WordSized
3724   operands:
3725     mapObject: WordSized
3726     input: BoxedValue
3727     hash: WordSized
3728   num_temps: 4
3730 - name: MapObjectHasValueVMCall
3731   result_type: WordSized
3732   call_instruction: true
3733   operands:
3734     mapObject: WordSized
3735     input: BoxedValue
3737 - name: MapObjectGetNonBigInt
3738   result_type: BoxedValue
3739   operands:
3740     mapObject: WordSized
3741     input: BoxedValue
3742     hash: WordSized
3743   num_temps: 2
3745 - name: MapObjectGetBigInt
3746   result_type: BoxedValue
3747   operands:
3748     mapObject: WordSized
3749     input: BoxedValue
3750     hash: WordSized
3751   num_temps: 4
3753 - name: MapObjectGetValue
3754   result_type: BoxedValue
3755   operands:
3756     mapObject: WordSized
3757     input: BoxedValue
3758     hash: WordSized
3759   num_temps: 4
3761 - name: MapObjectGetValueVMCall
3762   result_type: BoxedValue
3763   call_instruction: true
3764   operands:
3765     mapObject: WordSized
3766     input: BoxedValue
3768 - name: MapObjectSize
3769   result_type: WordSized
3770   operands:
3771     mapObject: WordSized
3773 - name: BigIntAsUintN
3774   result_type: WordSized
3775   operands:
3776     bits: WordSized
3777     input: WordSized
3778   call_instruction: true
3780 - name: BigIntAsUintN64
3781   gen_boilerplate: false
3783 - name: BigIntAsUintN32
3784   gen_boilerplate: false
3786 - name: IonToWasmCall
3787   gen_boilerplate: false
3789 - name: IonToWasmCallV
3790   gen_boilerplate: false
3792 - name: IonToWasmCallI64
3793   gen_boilerplate: false
3795 - name: WasmAnyRefFromJSValue
3796   result_type: WordSized
3797   operands:
3798     input: BoxedValue
3799   num_temps: 1
3801 - name: WasmAnyRefFromJSObject
3802   result_type: WordSized
3803   operands:
3804     input: WordSized
3806 - name: WasmAnyRefFromJSString
3807   result_type: WordSized
3808   operands:
3809     input: WordSized
3811 - name: WasmNewI31Ref
3812   mir_op: true
3813   result_type: WordSized
3814   operands:
3815     value: WordSized
3817 - name: WasmI31RefGet
3818   mir_op: true
3819   result_type: WordSized
3820   operands:
3821     value: WordSized
3823 # Constant Simd128
3824 - name: Simd128
3825   result_type: WordSized
3826   arguments:
3827     simd128: SimdConstant
3829 - name: WasmTernarySimd128
3830   gen_boilerplate: false
3832 - name: WasmBinarySimd128
3833   gen_boilerplate: false
3835 - name: WasmBinarySimd128WithConstant
3836   gen_boilerplate: false
3838 - name: WasmVariableShiftSimd128
3839   gen_boilerplate: false
3841 - name: WasmConstantShiftSimd128
3842   gen_boilerplate: false
3844 - name: WasmSignReplicationSimd128
3845   gen_boilerplate: false
3847 - name: WasmShuffleSimd128
3848   gen_boilerplate: false
3850 - name: WasmPermuteSimd128
3851   gen_boilerplate: false
3853 - name: WasmReplaceLaneSimd128
3854   gen_boilerplate: false
3856 - name: WasmReplaceInt64LaneSimd128
3857   gen_boilerplate: false
3859 - name: WasmScalarToSimd128
3860   gen_boilerplate: false
3862 - name: WasmInt64ToSimd128
3863   gen_boilerplate: false
3865 - name: WasmUnarySimd128
3866   gen_boilerplate: false
3868 - name: WasmReduceSimd128
3869   gen_boilerplate: false
3871 - name: WasmReduceAndBranchSimd128
3872   gen_boilerplate: false
3874 - name: WasmReduceSimd128ToInt64
3875   gen_boilerplate: false
3877 - name: WasmLoadLaneSimd128
3878   gen_boilerplate: false
3880 - name: WasmStoreLaneSimd128
3881   gen_boilerplate: false
3883 - name: Unbox
3884   gen_boilerplate: false
3886 - name: UnboxFloatingPoint
3887   gen_boilerplate: false
3889 - name: WasmUint32ToDouble
3890   gen_boilerplate: false
3892 - name: WasmUint32ToFloat32
3893   gen_boilerplate: false
3895 - name: DivI
3896   gen_boilerplate: false
3898 - name: ModI
3899   gen_boilerplate: false
3901 - name: DivPowTwoI
3902   gen_boilerplate: false
3904 - name: ModPowTwoI
3905   gen_boilerplate: false
3907 - name: TableSwitch
3908   gen_boilerplate: false
3910 - name: TableSwitchV
3911   gen_boilerplate: false
3913 - name: MulI
3914   gen_boilerplate: false
3916 #ifdef JS_CODEGEN_X86
3917 - name: BoxFloatingPoint
3918   gen_boilerplate: false
3920 - name: DivOrModI64
3921   gen_boilerplate: false
3923 - name: UDivOrModI64
3924   gen_boilerplate: false
3926 - name: DivOrModConstantI
3927   gen_boilerplate: false
3929 - name: UDivOrMod
3930   gen_boilerplate: false
3932 - name: UDivOrModConstant
3933   gen_boilerplate: false
3935 - name: WasmTruncateToInt64
3936   gen_boilerplate: false
3938 - name: Int64ToFloatingPoint
3939   gen_boilerplate: false
3941 - name: WasmAtomicLoadI64
3942   gen_boilerplate: false
3944 - name: WasmAtomicStoreI64
3945   gen_boilerplate: false
3947 - name: WasmCompareExchangeI64
3948   gen_boilerplate: false
3950 - name: WasmAtomicBinopI64
3951   gen_boilerplate: false
3953 - name: WasmAtomicExchangeI64
3954   gen_boilerplate: false
3955 #endif
3957 #ifdef JS_CODEGEN_X64
3958 - name: DivOrModI64
3959   gen_boilerplate: false
3961 - name: UDivOrModI64
3962   gen_boilerplate: false
3964 - name: DivOrModConstantI
3965   gen_boilerplate: false
3967 - name: UDivOrMod
3968   gen_boilerplate: false
3970 - name: UDivOrModConstant
3971   gen_boilerplate: false
3973 - name: WasmTruncateToInt64
3974   gen_boilerplate: false
3976 - name: Int64ToFloatingPoint
3977   gen_boilerplate: false
3978 #endif
3980 #ifdef JS_CODEGEN_ARM
3981 - name: BoxFloatingPoint
3982   gen_boilerplate: false
3984 - name: DivOrModI64
3985   gen_boilerplate: false
3987 - name: UDivOrModI64
3988   gen_boilerplate: false
3990 - name: SoftDivI
3991   gen_boilerplate: false
3993 - name: SoftModI
3994   gen_boilerplate: false
3996 - name: ModMaskI
3997   gen_boilerplate: false
3999 - name: UDiv
4000   gen_boilerplate: false
4002 - name: UMod
4003   gen_boilerplate: false
4005 - name: SoftUDivOrMod
4006   gen_boilerplate: false
4008 - name: Int64ToFloatingPointCall
4009   gen_boilerplate: false
4011 - name: WasmTruncateToInt64
4012   gen_boilerplate: false
4014 - name: WasmAtomicLoadI64
4015   gen_boilerplate: false
4017 - name: WasmAtomicStoreI64
4018   gen_boilerplate: false
4020 - name: WasmCompareExchangeI64
4021   gen_boilerplate: false
4023 - name: WasmAtomicBinopI64
4024   gen_boilerplate: false
4026 - name: WasmAtomicExchangeI64
4027   gen_boilerplate: false
4028 #endif
4030 #ifdef JS_CODEGEN_ARM64
4031 - name: DivOrModI64
4032   gen_boilerplate: false
4034 - name: UDivOrModI64
4035   gen_boilerplate: false
4037 - name: DivConstantI
4038   gen_boilerplate: false
4040 - name: UDivConstantI
4041   gen_boilerplate: false
4043 - name: ModMaskI
4044   gen_boilerplate: false
4046 - name: UDiv
4047   gen_boilerplate: false
4049 - name: UMod
4050   gen_boilerplate: false
4052 - name: WasmTruncateToInt64
4053   gen_boilerplate: false
4055 - name: Int64ToFloatingPoint
4056   gen_boilerplate: false
4057 #endif
4059 #ifdef JS_CODEGEN_MIPS32
4060 - name: BoxFloatingPoint
4061   gen_boilerplate: false
4063 - name: DivOrModI64
4064   gen_boilerplate: false
4066 - name: UDivOrModI64
4067   gen_boilerplate: false
4069 - name: UDivOrMod
4070   gen_boilerplate: false
4072 - name: ModMaskI
4073   gen_boilerplate: false
4075 - name: WasmTruncateToInt64
4076   gen_boilerplate: false
4078 - name: Int64ToFloatingPoint
4079   gen_boilerplate: false
4081 - name: WasmUnalignedLoad
4082   gen_boilerplate: false
4084 - name: WasmUnalignedLoadI64
4085   gen_boilerplate: false
4087 - name: WasmUnalignedStore
4088   gen_boilerplate: false
4090 - name: WasmUnalignedStoreI64
4091   gen_boilerplate: false
4093 - name: WasmAtomicLoadI64
4094   gen_boilerplate: false
4096 - name: WasmAtomicStoreI64
4097   gen_boilerplate: false
4099 - name: WasmCompareExchangeI64
4100   gen_boilerplate: false
4102 - name: WasmAtomicBinopI64
4103   gen_boilerplate: false
4105 - name: WasmAtomicExchangeI64
4106   gen_boilerplate: false
4107 #endif
4109 #ifdef JS_CODEGEN_MIPS64
4110 - name: DivOrModI64
4111   gen_boilerplate: false
4113 - name: UDivOrMod
4114   gen_boilerplate: false
4116 - name: UDivOrModI64
4117   gen_boilerplate: false
4119 - name: ModMaskI
4120   gen_boilerplate: false
4122 - name: WasmTruncateToInt64
4123   gen_boilerplate: false
4125 - name: Int64ToFloatingPoint
4126   gen_boilerplate: false
4128 - name: WasmUnalignedLoad
4129   gen_boilerplate: false
4131 - name: WasmUnalignedLoadI64
4132   gen_boilerplate: false
4134 - name: WasmUnalignedStore
4135   gen_boilerplate: false
4137 - name: WasmUnalignedStoreI64
4138   gen_boilerplate: false
4140 - name: WasmCompareExchangeI64
4141   gen_boilerplate: false
4143 - name: WasmAtomicBinopI64
4144   gen_boilerplate: false
4146 - name: WasmAtomicExchangeI64
4147   gen_boilerplate: false
4148 #endif
4150 #ifdef JS_CODEGEN_LOONG64
4151 - name: DivOrModI64
4152   gen_boilerplate: false
4154 - name: UDivOrMod
4155   gen_boilerplate: false
4157 - name: UDivOrModI64
4158   gen_boilerplate: false
4160 - name: ModMaskI
4161   gen_boilerplate: false
4163 - name: WasmTruncateToInt64
4164   gen_boilerplate: false
4166 - name: Int64ToFloatingPoint
4167   gen_boilerplate: false
4169 - name: WasmCompareExchangeI64
4170   gen_boilerplate: false
4172 - name: WasmAtomicBinopI64
4173   gen_boilerplate: false
4175 - name: WasmAtomicExchangeI64
4176   gen_boilerplate: false
4177 #endif
4179 #ifdef JS_CODEGEN_RISCV64
4180 - name: DivOrModI64
4181   gen_boilerplate: false
4183 - name: UDivOrMod
4184   gen_boilerplate: false
4186 - name: UDivOrModI64
4187   gen_boilerplate: false
4189 - name: ModMaskI
4190   gen_boilerplate: false
4192 - name: WasmTruncateToInt64
4193   gen_boilerplate: false
4195 - name: Int64ToFloatingPoint
4196   gen_boilerplate: false
4198 - name: WasmCompareExchangeI64
4199   gen_boilerplate: false
4201 - name: WasmAtomicBinopI64
4202   gen_boilerplate: false
4204 - name: WasmAtomicExchangeI64
4205   gen_boilerplate: false
4206 #endif
4208 #ifdef FUZZING_JS_FUZZILLI
4209 - name: FuzzilliHashT
4210   gen_boilerplate: false
4212 - name: FuzzilliHashV
4213   gen_boilerplate: false
4215 - name: FuzzilliHashStore
4216   gen_boilerplate: false
4217 #endif