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/.
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.
17 # - opcode string: used as the name for LIR opcode.
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
27 # Specifies the result type that is produced by this LIR instruction.
28 # The result type can be any of the following: WordSized, BoxedValue,
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
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.
48 # explicit LInstanceOfV(const LBoxAllocation& lhs, const LAllocation& rhs)
49 # : LInstructionHelper(classOpcode) {
50 # setBoxOperand(lhsIndex, lhs);
51 # setOperand(rhsIndex, rhs);
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
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.
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
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
88 # Specifies the number of temporary virtual registers, LDefinitions, used by
90 # - attribute not specified (default): number of temps is set to 0
91 # - number of LDefinition temps: sets number of temps max 15
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
101 # If a LIR instruction corresponds one-to-one with a particular MIR
102 # instruction, this will generate a method that returns that MIR
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
110 gen_boilerplate: false
113 gen_boilerplate: false
116 gen_boilerplate: false
119 gen_boilerplate: false
121 # Constant 32-bit integer.
123 result_type: WordSized
127 # Constant 64-bit integer.
135 result_type: WordSized
141 result_type: WordSized
147 result_type: WordSized
152 gen_boilerplate: false
154 - name: NurseryObject
155 result_type: WordSized
158 # Formal argument for a function, returning a box. Formal arguments are
159 # initially read from the stack.
161 result_type: BoxedValue
163 # Stack offset for a word-sized immutable input value to a frame.
165 result_type: WordSized
167 - name: IsConstructing
168 result_type: WordSized
171 gen_boilerplate: false
174 gen_boilerplate: false
176 - name: NewArrayDynamicLength
177 result_type: WordSized
184 result_type: WordSized
188 - name: NewTypedArray
189 result_type: WordSized
193 - name: NewTypedArrayDynamicLength
194 result_type: WordSized
200 - name: NewTypedArrayFromArray
201 result_type: WordSized
204 call_instruction: true
207 - name: NewTypedArrayFromArrayBuffer
208 result_type: WordSized
210 arrayBuffer: WordSized
211 byteOffset: BoxedValue
213 call_instruction: true
217 result_type: WordSized
220 call_instruction: true
224 - name: NewBoundFunction
225 result_type: WordSized
230 gen_boilerplate: false
232 - name: NewPlainObject
233 result_type: WordSized
237 - name: NewArrayObject
238 result_type: WordSized
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
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
258 # (2) Otherwise, an inline allocation of the call object is attempted.
260 - name: NewCallObject
261 result_type: WordSized
265 - name: NewStringObject
266 result_type: WordSized
272 - name: InitElemGetterSetter
277 call_instruction: true
280 # Takes in an Object and a Value.
285 call_instruction: true
287 - name: InitPropGetterSetter
291 call_instruction: true
294 - name: CheckOverRecursed
300 - name: WasmTrapIfNull
305 - name: WasmRefIsSubtypeOfConcrete
310 result_type: WordSized
313 - name: WasmRefIsSubtypeOfAbstract
317 result_type: WordSized
320 - name: WasmRefIsSubtypeOfConcreteAndBranch
321 gen_boilerplate: false
323 - name: WasmRefIsSubtypeOfAbstractAndBranch
324 gen_boilerplate: false
326 - name: WasmNewStructObject
330 typeDefData: WordSized
331 result_type: WordSized
334 - name: WasmNewArrayObject
338 numElements: WordSized
339 typeDefData: WordSized
340 result_type: WordSized
343 - name: WasmReinterpret
344 gen_boilerplate: false
346 - name: WasmReinterpretFromI64
347 gen_boilerplate: false
349 - name: WasmReinterpretToI64
350 gen_boilerplate: false
353 gen_boilerplate: false
356 gen_boilerplate: false
358 - name: InterruptCheck
361 - name: WasmInterruptCheck
367 result_type: WordSized
374 result_type: WordSized
380 result_type: WordSized
385 - name: TypeOfIsNonPrimitiveV
386 result_type: WordSized
392 - name: TypeOfIsNonPrimitiveO
393 result_type: WordSized
398 - name: TypeOfIsPrimitive
399 result_type: WordSized
405 result_type: WordSized
408 nextMethod: BoxedValue
409 call_instruction: true
411 - name: ToPropertyKeyCache
412 result_type: BoxedValue
417 # Allocate an object for |new| on the caller-side,
418 # when there is no templateObject or prototype known
420 result_type: BoxedValue
424 call_instruction: true
427 # Allocate a new arguments object for the frame.
428 - name: CreateArgumentsObject
429 result_type: WordSized
431 callObject: WordSized
433 call_instruction: true
436 - name: CreateInlinedArgumentsObject
437 gen_boilerplate: false
439 - name: GetInlinedArgument
440 gen_boilerplate: false
442 - name: GetInlinedArgumentHole
443 gen_boilerplate: false
445 # Get argument from arguments object.
446 - name: GetArgumentsObjectArg
447 result_type: BoxedValue
449 argsObject: WordSized
453 # Set argument on arguments object.
454 - name: SetArgumentsObjectArg
456 argsObject: WordSized
461 # Load an element from an arguments object.
462 - name: LoadArgumentsObjectArg
463 result_type: BoxedValue
465 argsObject: WordSized
469 # Load an element from an arguments object. Handles out-of-bounds accesses.
470 - name: LoadArgumentsObjectArgHole
471 result_type: BoxedValue
473 argsObject: WordSized
477 # Return true if the element exists in the arguments object.
478 - name: InArgumentsObjectArg
479 result_type: WordSized
481 argsObject: WordSized
485 # Return |arguments.length| unless it has been overridden.
486 - name: ArgumentsObjectLength
487 result_type: WordSized
489 argsObject: WordSized
491 # Create an array from an arguments object.
492 - name: ArrayFromArgumentsObject
493 result_type: WordSized
495 argsObject: WordSized
496 call_instruction: true
499 # Guard that the given flags are not set on the arguments object.
500 - name: GuardArgumentsObjectFlags
502 argsObject: WordSized
506 - name: BoundFunctionNumArgs
507 result_type: WordSized
511 - name: GuardBoundFunctionIsConstructor
515 # If the Value is an Object, return unbox(Value).
516 # Otherwise, return the other Object.
517 - name: ReturnFromCtor
518 result_type: WordSized
523 - name: BoxNonStrictThis
524 result_type: WordSized
530 result_type: BoxedValue
533 call_instruction: true
536 # Writes a typed argument for a function call to the frame's argument vector.
541 # Index into frame-scope argument vector.
545 # Writes a typed argument for a function call to the frame's argument vector.
550 # Index into frame-scope argument vector.
554 gen_boilerplate: false
557 gen_boilerplate: false
560 gen_boilerplate: false
562 - name: CallDOMNative
563 gen_boilerplate: false
565 - name: CallClassHook
566 gen_boilerplate: false
571 gen_boilerplate: false
573 - name: EncodeSnapshot
575 - name: UnreachableResultV
576 gen_boilerplate: false
578 - name: UnreachableResultT
579 result_type: WordSized
581 - name: GetDOMProperty
582 gen_boilerplate: false
584 - name: GetDOMMemberV
585 gen_boilerplate: false
587 - name: GetDOMMemberT
588 result_type: WordSized
593 - name: SetDOMProperty
594 gen_boilerplate: false
596 - name: LoadDOMExpandoValue
597 result_type: BoxedValue
602 - name: LoadDOMExpandoValueGuardGeneration
603 result_type: BoxedValue
608 - name: LoadDOMExpandoValueIgnoreGeneration
609 result_type: BoxedValue
614 - name: GuardDOMExpandoMissingOrGuardShape
620 - name: ApplyArgsGeneric
621 gen_boilerplate: false
624 gen_boilerplate: false
626 - name: ApplyArrayGeneric
627 gen_boilerplate: false
629 - name: ConstructArgsGeneric
630 gen_boilerplate: false
632 - name: ConstructArrayGeneric
633 gen_boilerplate: false
635 - name: TestIAndBranch
636 gen_boilerplate: false
638 - name: TestI64AndBranch
639 gen_boilerplate: false
641 - name: TestDAndBranch
642 gen_boilerplate: false
644 - name: TestFAndBranch
645 gen_boilerplate: false
647 - name: TestBIAndBranch
648 gen_boilerplate: false
650 - name: TestOAndBranch
651 gen_boilerplate: false
653 - name: TestVAndBranch
654 gen_boilerplate: false
657 gen_boilerplate: false
660 gen_boilerplate: false
662 - name: CompareI64AndBranch
663 gen_boilerplate: false
665 - name: CompareAndBranch
666 gen_boilerplate: false
669 result_type: WordSized
676 result_type: WordSized
682 - name: CompareDAndBranch
683 gen_boilerplate: false
685 - name: CompareFAndBranch
686 gen_boilerplate: false
689 result_type: WordSized
695 - name: CompareSInline
696 result_type: WordSized
700 constant: JSLinearString*
703 - name: CompareSSingle
704 result_type: WordSized
709 constant: JSLinearString*
713 - name: CompareBigInt
714 result_type: WordSized
721 - name: CompareBigIntInt32
722 result_type: WordSized
729 - name: CompareBigIntDouble
730 result_type: WordSized
734 call_instruction: true
737 - name: CompareBigIntString
738 result_type: WordSized
742 call_instruction: true
745 - name: BitAndAndBranch
746 gen_boilerplate: false
748 # Takes a value and tests whether it is null, undefined, or is an object that
749 # emulates |undefined|, as determined by the JSCLASS_EMULATES_UNDEFINED class
750 # flag on unwrapped objects. See also js::EmulatesUndefined.
751 - name: IsNullOrLikeUndefinedV
752 result_type: WordSized
758 # Takes an object pointer and tests whether it is an object that emulates
759 # |undefined|, as above.
760 - name: IsNullOrLikeUndefinedT
761 result_type: WordSized
766 # Takes a value and tests whether it is null.
768 result_type: WordSized
773 # Takes a value and tests whether it is undefined.
775 result_type: WordSized
780 - name: IsNullOrLikeUndefinedAndBranchV
781 gen_boilerplate: false
783 - name: IsNullOrLikeUndefinedAndBranchT
784 gen_boilerplate: false
786 - name: IsNullAndBranch
787 gen_boilerplate: false
789 - name: IsUndefinedAndBranch
790 gen_boilerplate: false
792 - name: SameValueDouble
793 result_type: WordSized
800 result_type: WordSized
805 # Not operation on an integer.
807 result_type: WordSized
811 # Not operation on an int64.
813 result_type: WordSized
817 # Not operation on a double.
819 result_type: WordSized
824 # Not operation on a float32.
826 result_type: WordSized
831 # Not operation on a BigInt.
833 result_type: WordSized
838 # Boolean complement operation on an object.
840 result_type: WordSized
845 # Boolean complement operation on a value.
847 result_type: WordSized
854 gen_boilerplate: false
857 gen_boilerplate: false
860 gen_boilerplate: false
863 gen_boilerplate: false
866 gen_boilerplate: false
869 gen_boilerplate: false
871 - name: SignExtendInt32
872 result_type: WordSized
876 mode: MSignExtendInt32::Mode
878 - name: SignExtendInt64
879 gen_boilerplate: false
882 gen_boilerplate: false
885 gen_boilerplate: false
890 call_instruction: true
892 - name: ThrowWithStack
896 call_instruction: true
899 gen_boilerplate: false
902 gen_boilerplate: false
905 gen_boilerplate: false
908 gen_boilerplate: false
911 gen_boilerplate: false
913 # Negative of integer
915 result_type: WordSized
919 # Negative of an int64
927 result_type: WordSized
931 # Negative of float32
933 result_type: WordSized
937 # Absolute value of an integer.
939 result_type: WordSized
944 # Absolute value of a double.
946 result_type: WordSized
950 # Absolute value of a float32.
952 result_type: WordSized
957 gen_boilerplate: false
960 gen_boilerplate: false
962 # Count leading zeroes on an int32.
964 result_type: WordSized
969 # Count leading zeroes on an int64.
976 # Count trailing zeroes on an int32.
978 result_type: WordSized
983 # Count trailing zeroes on an int64.
990 # Count population on an int32.
992 result_type: WordSized
998 # Count population on an int64.
1007 result_type: WordSized
1012 result_type: WordSized
1017 gen_boilerplate: false
1020 gen_boilerplate: false
1022 # Double raised to an integer power.
1024 result_type: WordSized
1028 call_instruction: true
1030 # Integer raised to an integer power.
1032 result_type: WordSized
1039 # Double raised to a double power.
1041 result_type: WordSized
1045 call_instruction: true
1047 # Constant of a power of two raised to an integer power.
1049 result_type: WordSized
1055 # Sign value of an integer.
1057 result_type: WordSized
1061 # Sign value of an integer.
1063 result_type: WordSized
1067 # Sign value of a double with expected int32 result.
1069 result_type: WordSized
1074 - name: MathFunctionD
1075 gen_boilerplate: false
1077 - name: MathFunctionF
1078 gen_boilerplate: false
1081 gen_boilerplate: false
1084 gen_boilerplate: false
1087 gen_boilerplate: false
1090 gen_boilerplate: false
1093 gen_boilerplate: false
1096 gen_boilerplate: false
1099 gen_boilerplate: false
1102 gen_boilerplate: false
1105 gen_boilerplate: false
1107 - name: WasmBuiltinModD
1108 result_type: WordSized
1113 call_instruction: true
1117 gen_boilerplate: false
1120 gen_boilerplate: false
1123 gen_boilerplate: false
1126 gen_boilerplate: false
1129 gen_boilerplate: false
1132 gen_boilerplate: false
1134 - name: BigIntBitAnd
1135 gen_boilerplate: false
1138 gen_boilerplate: false
1140 - name: BigIntBitXor
1141 gen_boilerplate: false
1144 gen_boilerplate: false
1147 gen_boilerplate: false
1149 - name: BigIntIncrement
1150 gen_boilerplate: false
1152 - name: BigIntDecrement
1153 gen_boilerplate: false
1155 - name: BigIntNegate
1156 gen_boilerplate: false
1158 - name: BigIntBitNot
1159 gen_boilerplate: false
1161 - name: Int32ToStringWithBase
1162 result_type: WordSized
1169 - name: NumberParseInt
1170 result_type: BoxedValue
1175 call_instruction: true
1178 - name: DoubleParseInt
1179 result_type: WordSized
1185 # Adds two string, returning a string.
1187 result_type: WordSized
1193 # Linearize a string.
1194 - name: LinearizeString
1195 result_type: WordSized
1200 # Linearize a string before a character access.
1201 - name: LinearizeForCharAccess
1202 result_type: WordSized
1208 # Linearize a string before a code point access.
1209 - name: LinearizeForCodePointAccess
1210 result_type: WordSized
1217 # Compute the relative string index.
1218 - name: ToRelativeStringIndex
1219 result_type: WordSized
1225 # Get uint16 character code from a string.
1227 result_type: WordSized
1233 # Get uint16 character code from a string. Return -1 on out-of-bounds.
1234 - name: CharCodeAtOrNegative
1235 result_type: WordSized
1241 # Get uint32 code point from a string.
1243 result_type: WordSized
1249 # Get uint32 code point from a string. Return -1 on out-of-bounds.
1250 - name: CodePointAtOrNegative
1251 result_type: WordSized
1257 # Box the input if non-negative. Otherwise return NaN.
1258 - name: NegativeToNaN
1259 result_type: BoxedValue
1263 # Box the input if non-negative. Otherwise return undefined.
1264 - name: NegativeToUndefined
1265 result_type: BoxedValue
1269 # Convert uint16 character code to a string.
1270 - name: FromCharCode
1271 result_type: WordSized
1275 # Convert non-negative input as a uint16 character code to a string. If the
1276 # input is negative, return the empty string.
1277 - name: FromCharCodeEmptyIfNegative
1278 result_type: WordSized
1282 # Convert non-negative input as a uint16 character code to a string. If the
1283 # input is negative, return the undefined value.
1284 - name: FromCharCodeUndefinedIfNegative
1285 result_type: BoxedValue
1289 # Convert uint32 code point to a string.
1290 - name: FromCodePoint
1291 result_type: WordSized
1293 codePoint: WordSized
1296 # Test if a string includes the search string.
1297 - name: StringIncludes
1298 result_type: WordSized
1301 searchString: WordSized
1302 call_instruction: true
1304 # Test if a string includes the constant search string.
1305 - name: StringIncludesSIMD
1306 result_type: WordSized
1310 searchString: JSLinearString*
1313 # Search for the first index of the search string.
1314 - name: StringIndexOf
1315 result_type: WordSized
1318 searchString: WordSized
1319 call_instruction: true
1321 # Search for the first index of the constant search string.
1322 - name: StringIndexOfSIMD
1323 result_type: WordSized
1327 searchString: JSLinearString*
1330 # Search for the last index of the search string.
1331 - name: StringLastIndexOf
1332 result_type: WordSized
1335 searchString: WordSized
1336 call_instruction: true
1338 # Test if a string starts with the search string
1339 - name: StringStartsWith
1340 result_type: WordSized
1343 searchString: WordSized
1344 call_instruction: true
1346 # Test if a string starts with the constant search string
1347 - name: StringStartsWithInline
1348 result_type: WordSized
1352 searchString: JSLinearString*
1355 # Test if a string ends with the search string
1356 - name: StringEndsWith
1357 result_type: WordSized
1360 searchString: WordSized
1361 call_instruction: true
1363 # Test if a string ends with the constant search string
1364 - name: StringEndsWithInline
1365 result_type: WordSized
1369 searchString: JSLinearString*
1372 # Calls the ToLowerCase case conversion function. Inlines the case conversion
1374 - name: StringToLowerCase
1375 result_type: WordSized
1379 mir_op: StringConvertCase
1381 # Calls the ToLowerCase case conversion function. Inlines the case conversion
1383 - name: CharCodeToLowerCase
1384 result_type: WordSized
1388 mir_op: CharCodeConvertCase
1390 # Calls the ToUpperCase case conversion function.
1391 - name: StringToUpperCase
1392 result_type: WordSized
1395 call_instruction: true
1396 mir_op: StringConvertCase
1398 # Calls the ToUpperCase case conversion function. Inlines the case conversion
1400 - name: CharCodeToUpperCase
1401 result_type: WordSized
1405 mir_op: CharCodeConvertCase
1407 # Index of first non-whitespace character.
1408 - name: StringTrimStartIndex
1409 result_type: WordSized
1413 # Index of last non-whitespace character.
1414 - name: StringTrimEndIndex
1415 result_type: WordSized
1421 result_type: WordSized
1424 separator: WordSized
1425 call_instruction: true
1429 result_type: WordSized
1437 - name: Int32ToDouble
1438 result_type: WordSized
1442 - name: Float32ToDouble
1443 result_type: WordSized
1447 - name: DoubleToFloat32
1448 result_type: WordSized
1452 - name: Int32ToFloat32
1453 result_type: WordSized
1457 # Convert a value to a double.
1458 - name: ValueToDouble
1459 result_type: WordSized
1464 # Convert a value to a float32.
1465 - name: ValueToFloat32
1466 result_type: WordSized
1471 - name: ValueToInt32
1472 gen_boilerplate: false
1474 # Convert a value to a BigInt.
1475 - name: ValueToBigInt
1476 result_type: WordSized
1481 # Convert a double to an int32.
1482 # Input: floating-point Register
1483 # Output: 32-bit integer
1484 # Bailout: if the double cannot be converted to an integer.
1485 - name: DoubleToInt32
1486 result_type: WordSized
1489 mir_op: ToNumberInt32
1491 # Convert a float32 to an int32.
1492 # Input: floating-point Register
1493 # Output: 32-bit integer
1494 # Bailout: if the float32 cannot be converted to an integer.
1495 - name: Float32ToInt32
1496 result_type: WordSized
1499 mir_op: ToNumberInt32
1501 # Convert a double to a truncated int32.
1502 # Input: floating-point Register
1503 # Output: 32-bit integer
1504 - name: TruncateDToInt32
1505 result_type: WordSized
1509 mir_op: TruncateToInt32
1511 # Convert a double to a truncated int32 with instance offset because we need it
1512 # for the slow ool path.
1513 - name: WasmBuiltinTruncateDToInt32
1514 result_type: WordSized
1519 mir_op: WasmBuiltinTruncateToInt32
1521 # Convert a float32 to a truncated int32.
1522 # Input: floating-point Register
1523 # Output: 32-bit integer
1524 - name: TruncateFToInt32
1525 result_type: WordSized
1529 mir_op: TruncateToInt32
1531 # Convert a float32 to a truncated int32 with instance offset because we need
1532 # it for the slow ool path.
1533 - name: WasmBuiltinTruncateFToInt32
1534 result_type: WordSized
1539 mir_op: WasmBuiltinTruncateToInt32
1541 - name: WasmTruncateToInt32
1542 result_type: WordSized
1547 - name: WrapInt64ToInt32
1548 result_type: WordSized
1553 - name: ExtendInt32ToInt64
1559 # Convert a boolean value to a string.
1560 - name: BooleanToString
1561 result_type: WordSized
1566 # Convert an integer hosted on one definition to a string with a function call.
1568 result_type: WordSized
1573 # Convert a double hosted on one definition to a string with a function call.
1574 - name: DoubleToString
1575 result_type: WordSized
1581 # Convert a primitive to a string with a function call.
1582 - name: ValueToString
1583 result_type: WordSized
1590 gen_boilerplate: false
1593 result_type: WordSized
1600 gen_boilerplate: false
1602 # Materialize a Value stored in an interpreter frame for OSR.
1604 result_type: BoxedValue
1609 # Materialize a JSObject env chain stored in an interpreter frame for OSR.
1610 - name: OsrEnvironmentChain
1611 result_type: WordSized
1616 # Materialize a JSObject env chain stored in an interpreter frame for OSR.
1617 - name: OsrReturnValue
1618 result_type: BoxedValue
1623 - name: OsrArgumentsObject
1624 result_type: WordSized
1630 result_type: WordSized
1634 - name: RegExpMatcher
1635 result_type: BoxedValue
1639 lastIndex: WordSized
1640 call_instruction: true
1643 - name: RegExpSearcher
1644 result_type: WordSized
1648 lastIndex: WordSized
1649 call_instruction: true
1652 - name: RegExpSearcherLastLimit
1653 result_type: WordSized
1657 - name: RegExpExecMatch
1658 result_type: BoxedValue
1662 call_instruction: true
1666 - name: RegExpExecTest
1667 result_type: WordSized
1671 call_instruction: true
1675 - name: RegExpHasCaptureGroups
1676 result_type: WordSized
1682 - name: RegExpPrototypeOptimizable
1683 result_type: WordSized
1689 - name: RegExpInstanceOptimizable
1690 result_type: WordSized
1697 - name: GetFirstDollarIndex
1698 result_type: WordSized
1703 - name: StringReplace
1704 result_type: WordSized
1708 replacement: WordSized
1709 call_instruction: true
1712 - name: BinaryValueCache
1713 result_type: BoxedValue
1717 # Takes two temps: these are intended to be FloatReg0 and FloatReg1
1718 # to allow the actual cache code to safely clobber those values without
1723 - name: BinaryBoolCache
1724 result_type: WordSized
1728 # Takes two temps: these are intendend to be FloatReg0 and FloatReg1
1729 # To allow the actual cache code to safely clobber those values without
1735 result_type: BoxedValue
1740 - name: ModuleMetadata
1741 result_type: WordSized
1742 call_instruction: true
1745 - name: DynamicImport
1746 result_type: WordSized
1748 specifier: BoxedValue
1750 call_instruction: true
1754 result_type: WordSized
1756 environmentChain: WordSized
1760 - name: FunctionWithProto
1761 result_type: WordSized
1764 prototype: WordSized
1765 call_instruction: true
1769 result_type: WordSized
1773 call_instruction: true
1776 - name: KeepAliveObject
1780 - name: DebugEnterGCUnsafeRegion
1783 - name: DebugLeaveGCUnsafeRegion
1786 # Load the "slots" member out of a JSObject.
1787 # Input: JSObject pointer
1788 # Output: slots pointer
1790 result_type: WordSized
1794 # Load the "elements" member out of a JSObject.
1795 # Input: JSObject pointer
1796 # Output: elements pointer
1798 result_type: WordSized
1803 # Load the initialized length from an elements header.
1804 - name: InitializedLength
1805 result_type: WordSized
1809 # Store to the initialized length in an elements header. Note the input is an
1810 # *index*, one less than the desired initialized length.
1811 - name: SetInitializedLength
1816 # Load the length from an elements header.
1818 result_type: WordSized
1822 # Store to the length in an elements header. Note the input is an *index*,
1823 # one less than the desired length.
1824 - name: SetArrayLength
1829 # Load the "length" property of a function.
1830 - name: FunctionLength
1831 result_type: WordSized
1835 # Load the "name" property of a function.
1836 - name: FunctionName
1837 result_type: WordSized
1841 - name: GetNextEntryForIterator
1842 result_type: WordSized
1849 - name: ArrayBufferByteLength
1850 result_type: WordSized
1854 - name: ArrayBufferViewLength
1855 result_type: WordSized
1860 # Read the byteOffset of an array buffer view.
1861 - name: ArrayBufferViewByteOffset
1862 result_type: WordSized
1866 # Load an array buffer view's elements vector.
1867 - name: ArrayBufferViewElements
1868 result_type: WordSized
1872 # Return the element size of a typed array.
1873 - name: TypedArrayElementSize
1874 result_type: WordSized
1878 # Read the length of a resizable typed array.
1879 - name: ResizableTypedArrayLength
1880 result_type: WordSized
1884 synchronization: js::jit::Synchronization
1887 # Read the possibly out-of-bounds byteOffset of a resizable typed array.
1888 - name: ResizableTypedArrayByteOffsetMaybeOutOfBounds
1889 result_type: WordSized
1894 # Read the byte length of a resizable data view.
1895 - name: ResizableDataViewByteLength
1896 result_type: WordSized
1900 synchronization: js::jit::Synchronization
1903 # Read the byte length of a growable shared array buffer.
1904 - name: GrowableSharedArrayBufferByteLength
1905 result_type: WordSized
1909 # Guard a resizable array buffer view is in-bounds.
1910 - name: GuardResizableArrayBufferViewInBounds
1915 # Guard a resizable array buffer view is in-bounds.
1916 - name: GuardResizableArrayBufferViewInBoundsOrDetached
1921 - name: GuardHasAttachedArrayBuffer
1926 # Double to IntPtr, eligible for accessing into a TypedArray or DataView. If
1927 # the index isn't exactly representable as an IntPtr, depending on the
1928 # supportOOB flag on the MIR instruction, either bail out or produce an IntPtr
1929 # which is equivalent to an OOB access.
1930 - name: GuardNumberToIntPtrIndex
1931 result_type: WordSized
1936 # Bailout if index >= length.
1943 - name: BoundsCheckRange
1944 gen_boilerplate: false
1946 # Bailout if index < minimum.
1947 - name: BoundsCheckLower
1952 - name: SpectreMaskIndex
1953 result_type: WordSized
1959 - name: LoadElementV
1960 gen_boilerplate: false
1963 result_type: WordSized
1967 initLength: WordSized
1970 - name: GuardElementNotHole
1975 - name: LoadElementHole
1976 gen_boilerplate: false
1978 - name: StoreElementV
1979 gen_boilerplate: false
1981 - name: StoreElementT
1982 gen_boilerplate: false
1984 - name: StoreHoleValueElement
1989 # Like LStoreElementV, but supports indexes >= initialized length.
1990 - name: StoreElementHoleV
1997 mir_op: StoreElementHole
1999 # Like LStoreElementT, but supports indexes >= initialized length.
2000 - name: StoreElementHoleT
2007 mir_op: StoreElementHole
2009 - name: ArrayPopShift
2010 gen_boilerplate: false
2013 result_type: WordSized
2021 result_type: WordSized
2027 call_instruction: true
2030 - name: ArgumentsSlice
2031 result_type: WordSized
2037 call_instruction: true
2040 - name: FrameArgumentsSlice
2041 result_type: WordSized
2048 - name: InlineArgumentsSlice
2049 gen_boilerplate: false
2051 - name: NormalizeSliceTerm
2052 result_type: WordSized
2059 result_type: WordSized
2062 separator: WordSized
2064 call_instruction: true
2068 result_type: WordSized
2072 call_instruction: true
2074 - name: ObjectKeysLength
2075 result_type: WordSized
2079 call_instruction: true
2081 - name: LoadUnboxedScalar
2082 result_type: WordSized
2089 - name: LoadUnboxedBigInt
2090 gen_boilerplate: false
2092 - name: LoadDataViewElement
2093 gen_boilerplate: false
2095 - name: LoadTypedArrayElementHole
2096 result_type: BoxedValue
2103 - name: LoadTypedArrayElementHoleBigInt
2104 gen_boilerplate: false
2106 - name: StoreUnboxedScalar
2113 - name: StoreUnboxedBigInt
2114 gen_boilerplate: false
2116 - name: StoreDataViewElement
2117 gen_boilerplate: false
2119 - name: StoreTypedArrayElementHole
2128 - name: StoreTypedArrayElementHoleBigInt
2129 gen_boilerplate: false
2131 - name: AtomicIsLockFree
2132 result_type: WordSized
2136 - name: CompareExchangeTypedArrayElement
2137 gen_boilerplate: false
2139 - name: AtomicExchangeTypedArrayElement
2140 gen_boilerplate: false
2142 - name: AtomicTypedArrayElementBinop
2143 gen_boilerplate: false
2145 - name: AtomicTypedArrayElementBinopForEffect
2146 gen_boilerplate: false
2148 - name: AtomicLoad64
2149 gen_boilerplate: false
2151 - name: AtomicStore64
2152 gen_boilerplate: false
2154 - name: CompareExchangeTypedArrayElement64
2155 gen_boilerplate: false
2157 - name: AtomicExchangeTypedArrayElement64
2158 gen_boilerplate: false
2160 - name: AtomicTypedArrayElementBinop64
2161 gen_boilerplate: false
2163 - name: AtomicTypedArrayElementBinopForEffect64
2164 gen_boilerplate: false
2166 - name: EffectiveAddress
2167 result_type: WordSized
2173 - name: ClampIToUint8
2174 result_type: WordSized
2178 - name: ClampDToUint8
2179 result_type: WordSized
2184 - name: ClampVToUint8
2185 result_type: WordSized
2189 mir_op: ClampToUint8
2191 - name: LoadScriptedProxyHandler
2192 result_type: WordSized
2198 - name: CheckScriptedProxyGetResult
2207 - name: IdToStringOrSymbol
2208 result_type: BoxedValue
2214 # Load a boxed value from an object's fixed slot.
2215 - name: LoadFixedSlotV
2216 result_type: BoxedValue
2219 mir_op: LoadFixedSlot
2221 # Load a boxed value from an object's fixed slot.
2222 # If it is a non-atom string, atomize it and update the slot.
2223 - name: LoadFixedSlotAndAtomize
2224 result_type: BoxedValue
2228 mir_op: LoadFixedSlot
2230 # Load a typed value from an object's fixed slot.
2231 - name: LoadFixedSlotT
2232 result_type: WordSized
2235 mir_op: LoadFixedSlot
2237 - name: LoadFixedSlotAndUnbox
2238 result_type: WordSized
2243 - name: LoadDynamicSlotAndUnbox
2244 result_type: WordSized
2249 - name: LoadElementAndUnbox
2250 result_type: WordSized
2256 - name: LoadFixedSlotUnboxAndAtomize
2257 result_type: WordSized
2260 mir_op: LoadFixedSlotAndUnbox
2262 - name: LoadDynamicSlotUnboxAndAtomize
2263 result_type: WordSized
2266 mir_op: LoadDynamicSlotAndUnbox
2268 - name: AddAndStoreSlot
2275 - name: AllocateAndStoreSlot
2280 call_instruction: true
2283 - name: AddSlotAndCallAddPropHook
2287 call_instruction: true
2290 # Store a boxed value to an object's fixed slot.
2291 - name: StoreFixedSlotV
2295 mir_op: StoreFixedSlot
2297 # Store a typed value to an object's fixed slot.
2298 - name: StoreFixedSlotT
2302 mir_op: StoreFixedSlot
2304 # Note, Name ICs always return a Value. There are no V/T variants.
2305 - name: GetNameCache
2306 result_type: BoxedValue
2312 - name: CallGetIntrinsicValue
2313 result_type: BoxedValue
2314 call_instruction: true
2317 - name: GetPropSuperCache
2318 result_type: BoxedValue
2321 receiver: BoxedValue
2325 # Patchable jump to stubs generated for a GetProperty cache, which loads a
2327 - name: GetPropertyCache
2328 result_type: BoxedValue
2334 - name: BindNameCache
2335 result_type: WordSized
2337 environmentChain: WordSized
2342 result_type: WordSized
2344 environmentChain: WordSized
2347 # Load a value from an object's dslots or a slots vector.
2348 - name: LoadDynamicSlotV
2349 result_type: BoxedValue
2352 mir_op: LoadDynamicSlot
2354 # Load a value from an object's dslots or a slots vector.
2355 # If it is a non-atom string, atomize it and update the slot.
2356 - name: LoadDynamicSlotAndAtomize
2357 result_type: BoxedValue
2361 mir_op: LoadDynamicSlot
2363 # Store a value to an object's dslots or a slots vector.
2364 - name: StoreDynamicSlotV
2368 mir_op: StoreDynamicSlot
2370 # Store a typed value to an object's dslots or a slots vector. This has a
2371 # few advantages over LStoreDynamicSlotV:
2372 # 1) We can bypass storing the type tag if the slot has the same type as
2374 # 2) Better Register allocation: we can store constants and FP regs directly
2375 # without requiring a second Register for the value.
2376 - name: StoreDynamicSlotT
2380 mir_op: StoreDynamicSlot
2382 # Read length field of a JSString*.
2383 - name: StringLength
2384 result_type: WordSized
2388 # Take the floor of a double precision number and converts it to an int32.
2389 # Implements Math.floor().
2391 result_type: WordSized
2395 # Take the floor of a single precision number and converts it to an int32.
2396 # Implements Math.floor().
2398 result_type: WordSized
2402 # Take the ceiling of a double precision number and converts it to an int32.
2403 # Implements Math.ceil().
2405 result_type: WordSized
2409 # Take the ceiling of a single precision number and converts it to an int32.
2410 # Implements Math.ceil().
2412 result_type: WordSized
2416 # Round a double precision number and converts it to an int32.
2417 # Implements Math.round().
2419 result_type: WordSized
2425 # Round a single precision number and converts it to an int32.
2426 # Implements Math.round().
2428 result_type: WordSized
2434 # Truncates a double precision number and converts it to an int32.
2435 # Implements Math.trunc().
2437 result_type: WordSized
2441 # Truncates a single precision number and converts it to an int32.
2442 # Implements Math.trunc().
2444 result_type: WordSized
2448 # Rounds a double precision number accordingly to mir()->roundingMode(),
2449 # and keeps a double output.
2451 result_type: WordSized
2456 # Rounds a single precision number accordingly to mir()->roundingMode(),
2457 # and keeps a single output.
2459 result_type: WordSized
2464 # Load a function's call environment.
2465 - name: FunctionEnvironment
2466 result_type: WordSized
2471 result_type: WordSized
2475 - name: HomeObjectSuperBase
2476 result_type: BoxedValue
2478 homeObject: WordSized
2480 - name: NewLexicalEnvironmentObject
2481 result_type: WordSized
2485 - name: NewClassBodyEnvironmentObject
2486 result_type: WordSized
2490 - name: NewVarEnvironmentObject
2491 result_type: WordSized
2495 - name: MegamorphicSetElement
2500 # On x86 we do not have enough registers to use 3 temps for this *and* take
2501 # five words worth of operands. Since it's 32-bit, though, we get two
2502 # registers from pushing `value`, which doesn't get used until the end
2503 # anyway. This is somewhat klunky, but oh well.
2504 #ifdef JS_CODEGEN_X86
2509 call_instruction: true
2512 - name: CallDeleteProperty
2513 result_type: WordSized
2516 call_instruction: true
2517 mir_op: DeleteProperty
2519 - name: CallDeleteElement
2520 result_type: WordSized
2524 call_instruction: true
2525 mir_op: DeleteElement
2527 - name: ObjectToIterator
2528 result_type: WordSized
2534 - name: ValueToIterator
2535 result_type: WordSized
2538 call_instruction: true
2539 mir_op: ValueToIterator
2541 - name: IteratorHasIndicesAndBranch
2542 gen_boilerplate: false
2544 - name: LoadSlotByIteratorIndex
2545 result_type: BoxedValue
2552 - name: StoreSlotByIteratorIndex
2560 # Patchable jump to stubs generated for a SetProperty cache.
2561 - name: SetPropertyCache
2566 # Takes an additional temp: this is intendend to be FloatReg0 to allow the
2567 # actual cache code to safely clobber that value without save and restore.
2571 - name: GetIteratorCache
2572 result_type: WordSized
2578 - name: OptimizeSpreadCallCache
2579 result_type: BoxedValue
2585 - name: IteratorMore
2586 result_type: BoxedValue
2592 - name: IsNoIterAndBranch
2593 gen_boilerplate: false
2601 - name: CloseIterCache
2607 - name: OptimizeGetIteratorCache
2608 result_type: WordSized
2614 # Read the number of actual arguments.
2615 - name: ArgumentsLength
2616 result_type: WordSized
2618 # Load a value from the actual arguments.
2619 - name: GetFrameArgument
2620 result_type: BoxedValue
2624 # Load a value from the actual arguments.
2625 # Returns undefined if |index| is larger-or-equals to |length|. Bails out if
2626 # |index| is negative.
2627 - name: GetFrameArgumentHole
2628 result_type: BoxedValue
2634 # Create the rest parameter.
2636 result_type: WordSized
2638 numActuals: WordSized
2640 call_instruction: true
2643 - name: Int32ToIntPtr
2644 result_type: WordSized
2649 - name: NonNegativeIntPtrToInt32
2650 result_type: WordSized
2654 - name: IntPtrToDouble
2655 result_type: WordSized
2659 - name: AdjustDataViewLength
2660 result_type: WordSized
2665 # Convert a Boolean to an Int64, following ToBigInt.
2666 - name: BooleanToInt64
2672 # Convert a String to an Int64, following ToBigInt.
2673 - name: StringToInt64
2679 # Simulate ToBigInt on a Value and produce a matching Int64.
2680 - name: ValueToInt64
2687 # Truncate a BigInt to an unboxed int64.
2688 - name: TruncateBigIntToInt64
2694 # Create a new BigInt* from an unboxed int64.
2695 - name: Int64ToBigInt
2696 result_type: WordSized
2702 # Generational write barrier used when writing an object to another object.
2703 - name: PostWriteBarrierO
2708 mir_op: PostWriteBarrier
2710 # Generational write barrier used when writing a string to an object.
2711 - name: PostWriteBarrierS
2716 mir_op: PostWriteBarrier
2718 # Generational write barrier used when writing a BigInt to an object.
2719 - name: PostWriteBarrierBI
2724 mir_op: PostWriteBarrier
2726 # Generational write barrier used when writing a value to another object.
2727 - name: PostWriteBarrierV
2732 mir_op: PostWriteBarrier
2734 # Generational write barrier used when writing an object to another object's
2736 - name: PostWriteElementBarrierO
2742 mir_op: PostWriteElementBarrier
2744 # Generational write barrier used when writing a string to an object's
2746 - name: PostWriteElementBarrierS
2752 mir_op: PostWriteElementBarrier
2754 # Generational write barrier used when writing a BigInt to an object's
2756 - name: PostWriteElementBarrierBI
2762 mir_op: PostWriteElementBarrier
2764 # Generational write barrier used when writing a value to another object's
2766 - name: PostWriteElementBarrierV
2772 mir_op: PostWriteElementBarrier
2774 # Assert in debug mode that a post write barrier can be elided.
2775 - name: AssertCanElidePostWriteBarrier
2781 # Guard against an object's identity.
2782 - name: GuardObjectIdentity
2788 # Guard against an function's identity.
2789 - name: GuardSpecificFunction
2794 - name: GuardSpecificAtom
2800 - name: GuardSpecificSymbol
2805 - name: GuardSpecificInt32
2810 - name: GuardStringToIndex
2811 result_type: WordSized
2815 - name: GuardStringToInt32
2816 result_type: WordSized
2821 - name: GuardStringToDouble
2822 result_type: WordSized
2828 result_type: WordSized
2834 - name: GuardMultipleShapes
2835 result_type: WordSized
2838 shapeList: WordSized
2848 - name: GuardNullProto
2853 - name: GuardIsNativeObject
2858 - name: GuardGlobalGeneration
2866 - name: GuardIsProxy
2871 - name: GuardIsNotProxy
2876 - name: GuardIsNotDOMProxy
2882 result_type: BoxedValue
2886 call_instruction: true
2889 - name: ProxyGetByValue
2890 result_type: BoxedValue
2894 call_instruction: true
2896 - name: ProxyHasProp
2897 result_type: BoxedValue
2901 call_instruction: true
2909 call_instruction: true
2912 - name: ProxySetByValue
2917 call_instruction: true
2920 - name: CallSetArrayLength
2924 call_instruction: true
2927 - name: MegamorphicLoadSlot
2928 result_type: BoxedValue
2932 call_instruction: true
2935 - name: MegamorphicLoadSlotByValue
2936 result_type: BoxedValue
2941 call_instruction: true
2944 - name: MegamorphicStoreSlot
2948 #ifdef JS_CODEGEN_X86
2953 call_instruction: true
2956 - name: MegamorphicHasProp
2957 result_type: WordSized
2962 call_instruction: true
2965 - name: SmallObjectVariableKeyHasProp
2966 result_type: WordSized
2972 - name: GuardIsNotArrayBufferMaybeShared
2977 - name: GuardIsTypedArray
2982 - name: GuardIsFixedLengthTypedArray
2987 - name: GuardIsResizableTypedArray
2992 - name: GuardHasProxyHandler
2997 - name: GuardNoDenseElements
3003 result_type: WordSized
3011 result_type: WordSized
3017 - name: CheckPrivateFieldCache
3018 result_type: WordSized
3024 - name: NewPrivateName
3025 result_type: WordSized
3026 call_instruction: true
3030 result_type: WordSized
3037 result_type: WordSized
3043 - name: InstanceOfCache
3044 gen_boilerplate: false
3047 result_type: WordSized
3053 result_type: WordSized
3059 - name: IsConstructor
3060 result_type: WordSized
3065 - name: IsCrossRealmArrayConstructor
3066 result_type: WordSized
3071 result_type: WordSized
3077 result_type: WordSized
3083 - name: IsTypedArray
3084 result_type: WordSized
3090 result_type: WordSized
3095 - name: IsObjectAndBranch
3096 gen_boilerplate: false
3098 - name: IsNullOrUndefined
3099 result_type: WordSized
3104 - name: IsNullOrUndefinedAndBranch
3105 gen_boilerplate: false
3108 result_type: WordSized
3113 - name: GuardToClass
3114 result_type: WordSized
3120 - name: GuardToEitherClass
3121 result_type: WordSized
3127 - name: GuardToFunction
3128 result_type: WordSized
3134 - name: ObjectClassToString
3135 result_type: WordSized
3139 call_instruction: true
3143 gen_boilerplate: false
3145 - name: WasmSelectI64
3146 gen_boilerplate: false
3148 - name: WasmCompareAndSelect
3149 gen_boilerplate: false
3151 - name: WasmAddOffset
3152 result_type: WordSized
3157 - name: WasmAddOffset64
3161 mir_op: WasmAddOffset
3163 - name: WasmBoundsCheck
3164 result_type: WordSized
3167 boundsCheckLimit: WordSized
3170 - name: WasmBoundsCheck64
3171 gen_boilerplate: false
3173 - name: WasmBoundsCheckRange32
3174 result_type: WordSized
3182 - name: WasmExtendU32Index
3183 result_type: WordSized
3188 - name: WasmWrapU32Index
3189 result_type: WordSized
3194 - name: WasmAlignmentCheck
3199 - name: WasmAlignmentCheck64
3202 mir_op: WasmAlignmentCheck
3204 - name: WasmLoadInstance
3205 result_type: WordSized
3210 - name: WasmLoadInstance64
3214 mir_op: WasmLoadInstance
3217 result_type: WordSized
3221 gen_boilerplate: false
3224 gen_boilerplate: false
3227 gen_boilerplate: false
3229 - name: WasmStoreI64
3230 gen_boilerplate: false
3232 - name: AsmJSLoadHeap
3233 result_type: WordSized
3236 boundsCheckLimit: WordSized
3237 memoryBase: WordSized
3240 - name: AsmJSStoreHeap
3241 result_type: WordSized
3245 boundsCheckLimit: WordSized
3246 memoryBase: WordSized
3249 - name: WasmCompareExchangeHeap
3250 gen_boilerplate: false
3254 - name: WasmAtomicExchangeHeap
3255 gen_boilerplate: false
3257 - name: WasmAtomicBinopHeap
3258 gen_boilerplate: false
3260 - name: WasmAtomicBinopHeapForEffect
3261 gen_boilerplate: false
3263 - name: WasmLoadSlot
3264 result_type: WordSized
3266 containerRef: WordSized
3270 wideningOp: MWideningOp
3271 maybeTrap: MaybeTrapSiteInfo
3273 - name: WasmLoadElement
3274 result_type: WordSized
3280 wideningOp: MWideningOp
3282 maybeTrap: MaybeTrapSiteInfo
3285 - name: WasmLoadSlotI64
3288 containerRef: WordSized
3291 maybeTrap: MaybeTrapSiteInfo
3293 - name: WasmLoadElementI64
3299 maybeTrap: MaybeTrapSiteInfo
3301 - name: WasmStoreSlot
3304 containerRef: WordSized
3308 narrowingOp: MNarrowingOp
3309 maybeTrap: MaybeTrapSiteInfo
3311 - name: WasmStoreSlotI64
3314 containerRef: WordSized
3317 maybeTrap: MaybeTrapSiteInfo
3319 - name: WasmStoreElement
3326 narrowingOp: MNarrowingOp
3328 maybeTrap: MaybeTrapSiteInfo
3331 - name: WasmStoreElementI64
3337 maybeTrap: MaybeTrapSiteInfo
3339 - name: WasmStoreElementRef
3346 maybeTrap: MaybeTrapSiteInfo
3347 preBarrierKind: WasmPreBarrierKind
3350 - name: WasmLoadTableElement
3351 result_type: WordSized
3356 - name: WasmDerivedPointer
3357 gen_boilerplate: false
3359 - name: WasmDerivedIndexPointer
3360 gen_boilerplate: false
3362 - name: WasmStoreRef
3365 valueBase: WordSized
3369 maybeTrap: MaybeTrapSiteInfo
3370 preBarrierKind: WasmPreBarrierKind
3374 # Generational write barrier used when writing an object to another object.
3375 - name: WasmPostWriteBarrierImmediate
3379 valueBase: WordSized
3382 valueOffset: uint32_t
3386 # Ditto, but with a scaled index instead of a constant offset.
3387 - name: WasmPostWriteBarrierIndex
3391 valueBase: WordSized
3399 - name: WasmParameter
3400 result_type: WordSized
3402 - name: WasmParameterI64
3403 gen_boilerplate: false
3410 - name: WasmReturnI64
3415 - name: WasmReturnVoid
3419 - name: WasmStackArg
3424 - name: WasmStackArgI64
3427 mir_op: WasmStackArg
3429 - name: WasmNullConstant
3430 result_type: WordSized
3432 - name: WasmCallIndirectAdjunctSafepoint
3433 gen_boilerplate: false
3436 gen_boilerplate: false
3438 - name: WasmCallLandingPrePad
3441 - name: WasmRegisterResult
3442 gen_boilerplate: false
3444 - name: WasmRegisterPairResult
3445 gen_boilerplate: false
3447 - name: WasmStackResultArea
3448 result_type: WordSized
3452 - name: WasmStackResult
3453 gen_boilerplate: false
3455 - name: WasmStackResult64
3456 gen_boilerplate: false
3458 - name: AssertRangeI
3459 gen_boilerplate: false
3461 - name: AssertRangeD
3462 gen_boilerplate: false
3464 - name: AssertRangeF
3465 gen_boilerplate: false
3467 - name: AssertRangeV
3468 gen_boilerplate: false
3486 - name: GuardNullOrUndefined
3491 - name: GuardIsNotObject
3496 - name: GuardFunctionFlags
3501 - name: GuardFunctionIsNonBuiltinCtor
3506 - name: GuardFunctionKind
3512 - name: GuardFunctionScript
3517 - name: IncrementWarmUpCounter
3521 - name: LexicalCheck
3526 - name: ThrowRuntimeLexicalError
3527 call_instruction: true
3531 call_instruction: true
3534 - name: GlobalDeclInstantiation
3537 - name: MemoryBarrier
3538 gen_boilerplate: false
3542 call_instruction: true
3545 result_type: BoxedValue
3548 gen_boilerplate: false
3551 result_type: BoxedValue
3553 returnValue: BoxedValue
3554 thisValue: BoxedValue
3557 result_type: WordSized
3562 - name: CheckObjCoercible
3566 - name: CheckClassHeritage
3568 heritage: BoxedValue
3575 - name: CheckThisReinit
3577 thisValue: BoxedValue
3580 result_type: WordSized
3583 environmentChain: WordSized
3584 argsObject: WordSized
3585 call_instruction: true
3588 - name: AsyncResolve
3589 result_type: WordSized
3591 generator: WordSized
3593 call_instruction: true
3597 result_type: WordSized
3599 generator: WordSized
3602 call_instruction: true
3606 result_type: WordSized
3609 generator: WordSized
3610 call_instruction: true
3613 - name: CanSkipAwait
3614 result_type: WordSized
3617 call_instruction: true
3620 - name: MaybeExtractAwaitValue
3621 result_type: BoxedValue
3625 call_instruction: true
3628 - name: DebugCheckSelfHosted
3631 call_instruction: true
3633 - name: IsPackedArray
3634 result_type: WordSized
3639 - name: GuardArrayIsPacked
3645 - name: GetPrototypeOf
3646 result_type: BoxedValue
3650 - name: ObjectWithProto
3651 result_type: WordSized
3653 prototype: BoxedValue
3654 call_instruction: true
3656 - name: ObjectStaticProto
3657 result_type: WordSized
3661 - name: BuiltinObject
3662 result_type: WordSized
3663 call_instruction: true
3666 - name: SuperFunction
3667 result_type: BoxedValue
3672 - name: InitHomeObject
3673 result_type: WordSized
3676 homeObject: BoxedValue
3678 - name: IsTypedArrayConstructor
3679 result_type: WordSized
3683 - name: LoadValueTag
3684 result_type: WordSized
3688 - name: GuardTagNotEqual
3693 - name: LoadWrapperTarget
3694 result_type: WordSized
3699 - name: GuardHasGetterSetter
3703 call_instruction: true
3706 - name: GuardIsExtensible
3711 - name: GuardInt32IsNonNegative
3715 - name: GuardInt32Range
3720 - name: GuardIndexIsNotDenseElement
3726 - name: GuardIndexIsValidUpdateOrAdd
3732 - name: CallAddOrUpdateSparseElement
3737 call_instruction: true
3740 - name: CallGetSparseElement
3741 result_type: BoxedValue
3745 call_instruction: true
3747 - name: CallNativeGetElement
3748 result_type: BoxedValue
3752 call_instruction: true
3754 - name: CallNativeGetElementSuper
3755 result_type: BoxedValue
3759 receiver: BoxedValue
3760 call_instruction: true
3762 - name: CallObjectHasSparseElement
3763 result_type: WordSized
3768 call_instruction: true
3770 - name: BigIntAsIntN
3771 result_type: WordSized
3775 call_instruction: true
3777 - name: BigIntAsIntN64
3778 gen_boilerplate: false
3780 - name: BigIntAsIntN32
3781 gen_boilerplate: false
3783 - name: GuardNonGCThing
3787 - name: ToHashableNonGCThing
3788 result_type: BoxedValue
3793 - name: ToHashableString
3794 result_type: WordSized
3798 - name: ToHashableValue
3799 result_type: BoxedValue
3804 - name: HashNonGCThing
3805 result_type: WordSized
3811 result_type: WordSized
3817 result_type: WordSized
3822 result_type: WordSized
3828 result_type: WordSized
3830 setObject: WordSized
3835 result_type: WordSized
3837 setObject: WordSized
3841 - name: SetObjectHasNonBigInt
3842 result_type: WordSized
3844 setObject: WordSized
3849 - name: SetObjectHasBigInt
3850 result_type: WordSized
3852 setObject: WordSized
3857 - name: SetObjectHasValue
3858 result_type: WordSized
3860 setObject: WordSized
3865 - name: SetObjectHasValueVMCall
3866 result_type: WordSized
3867 call_instruction: true
3869 setObject: WordSized
3872 - name: SetObjectSize
3873 result_type: WordSized
3875 setObject: WordSized
3877 - name: MapObjectHasNonBigInt
3878 result_type: WordSized
3880 mapObject: WordSized
3885 - name: MapObjectHasBigInt
3886 result_type: WordSized
3888 mapObject: WordSized
3893 - name: MapObjectHasValue
3894 result_type: WordSized
3896 mapObject: WordSized
3901 - name: MapObjectHasValueVMCall
3902 result_type: WordSized
3903 call_instruction: true
3905 mapObject: WordSized
3908 - name: MapObjectGetNonBigInt
3909 result_type: BoxedValue
3911 mapObject: WordSized
3916 - name: MapObjectGetBigInt
3917 result_type: BoxedValue
3919 mapObject: WordSized
3924 - name: MapObjectGetValue
3925 result_type: BoxedValue
3927 mapObject: WordSized
3932 - name: MapObjectGetValueVMCall
3933 result_type: BoxedValue
3934 call_instruction: true
3936 mapObject: WordSized
3939 - name: MapObjectSize
3940 result_type: WordSized
3942 mapObject: WordSized
3944 - name: BigIntAsUintN
3945 result_type: WordSized
3949 call_instruction: true
3951 - name: BigIntAsUintN64
3952 gen_boilerplate: false
3954 - name: BigIntAsUintN32
3955 gen_boilerplate: false
3957 - name: IonToWasmCall
3958 gen_boilerplate: false
3960 - name: IonToWasmCallV
3961 gen_boilerplate: false
3963 - name: IonToWasmCallI64
3964 gen_boilerplate: false
3966 - name: WasmAnyRefFromJSValue
3967 result_type: WordSized
3972 - name: WasmAnyRefFromJSObject
3973 result_type: WordSized
3977 - name: WasmAnyRefFromJSString
3978 result_type: WordSized
3982 - name: WasmNewI31Ref
3984 result_type: WordSized
3988 - name: WasmI31RefGet
3990 result_type: WordSized
3996 result_type: WordSized
3998 simd128: SimdConstant
4000 - name: WasmTernarySimd128
4001 gen_boilerplate: false
4003 - name: WasmBinarySimd128
4004 gen_boilerplate: false
4006 - name: WasmBinarySimd128WithConstant
4007 gen_boilerplate: false
4009 - name: WasmVariableShiftSimd128
4010 gen_boilerplate: false
4012 - name: WasmConstantShiftSimd128
4013 gen_boilerplate: false
4015 - name: WasmSignReplicationSimd128
4016 gen_boilerplate: false
4018 - name: WasmShuffleSimd128
4019 gen_boilerplate: false
4021 - name: WasmPermuteSimd128
4022 gen_boilerplate: false
4024 - name: WasmReplaceLaneSimd128
4025 gen_boilerplate: false
4027 - name: WasmReplaceInt64LaneSimd128
4028 gen_boilerplate: false
4030 - name: WasmScalarToSimd128
4031 gen_boilerplate: false
4033 - name: WasmInt64ToSimd128
4034 gen_boilerplate: false
4036 - name: WasmUnarySimd128
4037 gen_boilerplate: false
4039 - name: WasmReduceSimd128
4040 gen_boilerplate: false
4042 - name: WasmReduceAndBranchSimd128
4043 gen_boilerplate: false
4045 - name: WasmReduceSimd128ToInt64
4046 gen_boilerplate: false
4048 - name: WasmLoadLaneSimd128
4049 gen_boilerplate: false
4051 - name: WasmStoreLaneSimd128
4052 gen_boilerplate: false
4055 gen_boilerplate: false
4057 - name: UnboxFloatingPoint
4058 gen_boilerplate: false
4060 - name: WasmUint32ToDouble
4061 gen_boilerplate: false
4063 - name: WasmUint32ToFloat32
4064 gen_boilerplate: false
4067 gen_boilerplate: false
4070 gen_boilerplate: false
4073 gen_boilerplate: false
4076 gen_boilerplate: false
4079 gen_boilerplate: false
4081 - name: TableSwitchV
4082 gen_boilerplate: false
4085 gen_boilerplate: false
4087 #ifdef JS_CODEGEN_X86
4088 - name: BoxFloatingPoint
4089 gen_boilerplate: false
4092 gen_boilerplate: false
4094 - name: UDivOrModI64
4095 gen_boilerplate: false
4097 - name: DivOrModConstantI
4098 gen_boilerplate: false
4101 gen_boilerplate: false
4103 - name: UDivOrModConstant
4104 gen_boilerplate: false
4106 - name: WasmTruncateToInt64
4107 gen_boilerplate: false
4109 - name: Int64ToFloatingPoint
4110 gen_boilerplate: false
4112 - name: WasmAtomicLoadI64
4113 gen_boilerplate: false
4115 - name: WasmAtomicStoreI64
4116 gen_boilerplate: false
4118 - name: WasmCompareExchangeI64
4119 gen_boilerplate: false
4121 - name: WasmAtomicBinopI64
4122 gen_boilerplate: false
4124 - name: WasmAtomicExchangeI64
4125 gen_boilerplate: false
4128 #ifdef JS_CODEGEN_X64
4130 gen_boilerplate: false
4132 - name: UDivOrModI64
4133 gen_boilerplate: false
4135 - name: DivOrModConstantI
4136 gen_boilerplate: false
4139 gen_boilerplate: false
4141 - name: UDivOrModConstant
4142 gen_boilerplate: false
4144 - name: WasmTruncateToInt64
4145 gen_boilerplate: false
4147 - name: Int64ToFloatingPoint
4148 gen_boilerplate: false
4151 #ifdef JS_CODEGEN_ARM
4152 - name: BoxFloatingPoint
4153 gen_boilerplate: false
4156 gen_boilerplate: false
4158 - name: UDivOrModI64
4159 gen_boilerplate: false
4162 gen_boilerplate: false
4165 gen_boilerplate: false
4168 gen_boilerplate: false
4171 gen_boilerplate: false
4174 gen_boilerplate: false
4176 - name: SoftUDivOrMod
4177 gen_boilerplate: false
4179 - name: Int64ToFloatingPointCall
4180 gen_boilerplate: false
4182 - name: WasmTruncateToInt64
4183 gen_boilerplate: false
4185 - name: WasmAtomicLoadI64
4186 gen_boilerplate: false
4188 - name: WasmAtomicStoreI64
4189 gen_boilerplate: false
4191 - name: WasmCompareExchangeI64
4192 gen_boilerplate: false
4194 - name: WasmAtomicBinopI64
4195 gen_boilerplate: false
4197 - name: WasmAtomicExchangeI64
4198 gen_boilerplate: false
4201 #ifdef JS_CODEGEN_ARM64
4203 gen_boilerplate: false
4205 - name: UDivOrModI64
4206 gen_boilerplate: false
4208 - name: DivConstantI
4209 gen_boilerplate: false
4211 - name: UDivConstantI
4212 gen_boilerplate: false
4215 gen_boilerplate: false
4218 gen_boilerplate: false
4221 gen_boilerplate: false
4223 - name: WasmTruncateToInt64
4224 gen_boilerplate: false
4226 - name: Int64ToFloatingPoint
4227 gen_boilerplate: false
4230 #ifdef JS_CODEGEN_MIPS32
4231 - name: BoxFloatingPoint
4232 gen_boilerplate: false
4235 gen_boilerplate: false
4237 - name: UDivOrModI64
4238 gen_boilerplate: false
4241 gen_boilerplate: false
4244 gen_boilerplate: false
4246 - name: WasmTruncateToInt64
4247 gen_boilerplate: false
4249 - name: Int64ToFloatingPoint
4250 gen_boilerplate: false
4252 - name: WasmUnalignedLoad
4253 gen_boilerplate: false
4255 - name: WasmUnalignedLoadI64
4256 gen_boilerplate: false
4258 - name: WasmUnalignedStore
4259 gen_boilerplate: false
4261 - name: WasmUnalignedStoreI64
4262 gen_boilerplate: false
4264 - name: WasmAtomicLoadI64
4265 gen_boilerplate: false
4267 - name: WasmAtomicStoreI64
4268 gen_boilerplate: false
4270 - name: WasmCompareExchangeI64
4271 gen_boilerplate: false
4273 - name: WasmAtomicBinopI64
4274 gen_boilerplate: false
4276 - name: WasmAtomicExchangeI64
4277 gen_boilerplate: false
4280 #ifdef JS_CODEGEN_MIPS64
4282 gen_boilerplate: false
4285 gen_boilerplate: false
4287 - name: UDivOrModI64
4288 gen_boilerplate: false
4291 gen_boilerplate: false
4293 - name: WasmTruncateToInt64
4294 gen_boilerplate: false
4296 - name: Int64ToFloatingPoint
4297 gen_boilerplate: false
4299 - name: WasmUnalignedLoad
4300 gen_boilerplate: false
4302 - name: WasmUnalignedLoadI64
4303 gen_boilerplate: false
4305 - name: WasmUnalignedStore
4306 gen_boilerplate: false
4308 - name: WasmUnalignedStoreI64
4309 gen_boilerplate: false
4311 - name: WasmCompareExchangeI64
4312 gen_boilerplate: false
4314 - name: WasmAtomicBinopI64
4315 gen_boilerplate: false
4317 - name: WasmAtomicExchangeI64
4318 gen_boilerplate: false
4321 #ifdef JS_CODEGEN_LOONG64
4323 gen_boilerplate: false
4326 gen_boilerplate: false
4328 - name: UDivOrModI64
4329 gen_boilerplate: false
4332 gen_boilerplate: false
4334 - name: WasmTruncateToInt64
4335 gen_boilerplate: false
4337 - name: Int64ToFloatingPoint
4338 gen_boilerplate: false
4340 - name: WasmCompareExchangeI64
4341 gen_boilerplate: false
4343 - name: WasmAtomicBinopI64
4344 gen_boilerplate: false
4346 - name: WasmAtomicExchangeI64
4347 gen_boilerplate: false
4350 #ifdef JS_CODEGEN_RISCV64
4352 gen_boilerplate: false
4355 gen_boilerplate: false
4357 - name: UDivOrModI64
4358 gen_boilerplate: false
4361 gen_boilerplate: false
4363 - name: WasmTruncateToInt64
4364 gen_boilerplate: false
4366 - name: Int64ToFloatingPoint
4367 gen_boilerplate: false
4369 - name: WasmCompareExchangeI64
4370 gen_boilerplate: false
4372 - name: WasmAtomicBinopI64
4373 gen_boilerplate: false
4375 - name: WasmAtomicExchangeI64
4376 gen_boilerplate: false
4379 #ifdef FUZZING_JS_FUZZILLI
4380 - name: FuzzilliHashT
4381 gen_boilerplate: false
4383 - name: FuzzilliHashV
4384 gen_boilerplate: false
4386 - name: FuzzilliHashStore
4387 gen_boilerplate: false