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: WasmReinterpret
335 gen_boilerplate: false
337 - name: WasmReinterpretFromI64
338 gen_boilerplate: false
340 - name: WasmReinterpretToI64
341 gen_boilerplate: false
344 gen_boilerplate: false
347 gen_boilerplate: false
349 - name: InterruptCheck
352 - name: WasmInterruptCheck
358 result_type: WordSized
365 result_type: WordSized
371 result_type: WordSized
376 - name: TypeOfIsNonPrimitiveV
377 result_type: WordSized
383 - name: TypeOfIsNonPrimitiveO
384 result_type: WordSized
389 - name: TypeOfIsPrimitive
390 result_type: WordSized
396 result_type: WordSized
399 nextMethod: BoxedValue
400 call_instruction: true
402 - name: ToPropertyKeyCache
403 result_type: BoxedValue
408 # Allocate an object for |new| on the caller-side,
409 # when there is no templateObject or prototype known
411 result_type: BoxedValue
415 call_instruction: true
418 # Allocate a new arguments object for the frame.
419 - name: CreateArgumentsObject
420 result_type: WordSized
422 callObject: WordSized
424 call_instruction: 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
440 argsObject: WordSized
444 # Set argument on arguments object.
445 - name: SetArgumentsObjectArg
447 argsObject: WordSized
452 # Load an element from an arguments object.
453 - name: LoadArgumentsObjectArg
454 result_type: BoxedValue
456 argsObject: WordSized
460 # Load an element from an arguments object. Handles out-of-bounds accesses.
461 - name: LoadArgumentsObjectArgHole
462 result_type: BoxedValue
464 argsObject: WordSized
468 # Return true if the element exists in the arguments object.
469 - name: InArgumentsObjectArg
470 result_type: WordSized
472 argsObject: WordSized
476 # Return |arguments.length| unless it has been overridden.
477 - name: ArgumentsObjectLength
478 result_type: WordSized
480 argsObject: WordSized
482 # Create an array from an arguments object.
483 - name: ArrayFromArgumentsObject
484 result_type: WordSized
486 argsObject: WordSized
487 call_instruction: true
490 # Guard that the given flags are not set on the arguments object.
491 - name: GuardArgumentsObjectFlags
493 argsObject: WordSized
497 - name: BoundFunctionNumArgs
498 result_type: WordSized
502 - name: GuardBoundFunctionIsConstructor
506 # If the Value is an Object, return unbox(Value).
507 # Otherwise, return the other Object.
508 - name: ReturnFromCtor
509 result_type: WordSized
514 - name: BoxNonStrictThis
515 result_type: WordSized
521 result_type: BoxedValue
524 call_instruction: true
527 # Writes a typed argument for a function call to the frame's argument vector.
532 # Index into frame-scope argument vector.
536 # Writes a typed argument for a function call to the frame's argument vector.
541 # Index into frame-scope argument vector.
545 gen_boilerplate: false
548 gen_boilerplate: false
551 gen_boilerplate: false
553 - name: CallDOMNative
554 gen_boilerplate: false
556 - name: CallClassHook
557 gen_boilerplate: false
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
584 - name: SetDOMProperty
585 gen_boilerplate: false
587 - name: LoadDOMExpandoValue
588 result_type: BoxedValue
593 - name: LoadDOMExpandoValueGuardGeneration
594 result_type: BoxedValue
599 - name: LoadDOMExpandoValueIgnoreGeneration
600 result_type: BoxedValue
605 - name: GuardDOMExpandoMissingOrGuardShape
611 - name: ApplyArgsGeneric
612 gen_boilerplate: false
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
648 gen_boilerplate: false
651 gen_boilerplate: false
653 - name: CompareI64AndBranch
654 gen_boilerplate: false
656 - name: CompareAndBranch
657 gen_boilerplate: false
660 result_type: WordSized
667 result_type: WordSized
673 - name: CompareDAndBranch
674 gen_boilerplate: false
676 - name: CompareFAndBranch
677 gen_boilerplate: false
680 result_type: WordSized
686 - name: CompareSInline
687 result_type: WordSized
691 constant: JSLinearString*
694 - name: CompareSSingle
695 result_type: WordSized
700 constant: JSLinearString*
704 - name: CompareBigInt
705 result_type: WordSized
712 - name: CompareBigIntInt32
713 result_type: WordSized
720 - name: CompareBigIntDouble
721 result_type: WordSized
725 call_instruction: true
728 - name: CompareBigIntString
729 result_type: WordSized
733 call_instruction: true
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
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
757 # Takes a value and tests whether it is null.
759 result_type: WordSized
764 # Takes a value and tests whether it is undefined.
766 result_type: WordSized
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
791 result_type: WordSized
796 # Not operation on an integer.
798 result_type: WordSized
802 # Not operation on an int64.
804 result_type: WordSized
808 # Not operation on a double.
810 result_type: WordSized
815 # Not operation on a float32.
817 result_type: WordSized
822 # Not operation on a BigInt.
824 result_type: WordSized
829 # Boolean complement operation on an object.
831 result_type: WordSized
836 # Boolean complement operation on a value.
838 result_type: WordSized
845 gen_boilerplate: false
848 gen_boilerplate: false
851 gen_boilerplate: false
854 gen_boilerplate: false
857 gen_boilerplate: false
860 gen_boilerplate: false
862 - name: SignExtendInt32
863 result_type: WordSized
867 mode: MSignExtendInt32::Mode
869 - name: SignExtendInt64
870 gen_boilerplate: false
873 gen_boilerplate: false
876 gen_boilerplate: false
881 call_instruction: true
883 - name: ThrowWithStack
887 call_instruction: true
890 gen_boilerplate: false
893 gen_boilerplate: false
896 gen_boilerplate: false
899 gen_boilerplate: false
902 gen_boilerplate: false
904 # Negative of integer
906 result_type: WordSized
910 # Negative of an int64
918 result_type: WordSized
922 # Negative of float32
924 result_type: WordSized
928 # Absolute value of an integer.
930 result_type: WordSized
935 # Absolute value of a double.
937 result_type: WordSized
941 # Absolute value of a float32.
943 result_type: WordSized
948 gen_boilerplate: false
951 gen_boilerplate: false
953 # Count leading zeroes on an int32.
955 result_type: WordSized
960 # Count leading zeroes on an int64.
967 # Count trailing zeroes on an int32.
969 result_type: WordSized
974 # Count trailing zeroes on an int64.
981 # Count population on an int32.
983 result_type: WordSized
989 # Count population on an int64.
998 result_type: WordSized
1003 result_type: WordSized
1008 gen_boilerplate: false
1011 gen_boilerplate: false
1013 # Double raised to an integer power.
1015 result_type: WordSized
1019 call_instruction: true
1021 # Integer raised to an integer power.
1023 result_type: WordSized
1030 # Double raised to a double power.
1032 result_type: WordSized
1036 call_instruction: true
1038 # Constant of a power of two raised to an integer power.
1040 result_type: WordSized
1046 # Sign value of an integer.
1048 result_type: WordSized
1052 # Sign value of an integer.
1054 result_type: WordSized
1058 # Sign value of a double with expected int32 result.
1060 result_type: WordSized
1065 - name: MathFunctionD
1066 gen_boilerplate: false
1068 - name: MathFunctionF
1069 gen_boilerplate: false
1072 gen_boilerplate: false
1075 gen_boilerplate: false
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
1098 - name: WasmBuiltinModD
1099 result_type: WordSized
1104 call_instruction: true
1108 gen_boilerplate: false
1111 gen_boilerplate: false
1114 gen_boilerplate: false
1117 gen_boilerplate: false
1120 gen_boilerplate: false
1123 gen_boilerplate: false
1125 - name: BigIntBitAnd
1126 gen_boilerplate: false
1129 gen_boilerplate: false
1131 - name: BigIntBitXor
1132 gen_boilerplate: false
1135 gen_boilerplate: false
1138 gen_boilerplate: false
1140 - name: BigIntIncrement
1141 gen_boilerplate: false
1143 - name: BigIntDecrement
1144 gen_boilerplate: false
1146 - name: BigIntNegate
1147 gen_boilerplate: false
1149 - name: BigIntBitNot
1150 gen_boilerplate: false
1152 - name: Int32ToStringWithBase
1153 result_type: WordSized
1160 - name: NumberParseInt
1161 result_type: BoxedValue
1166 call_instruction: true
1169 - name: DoubleParseInt
1170 result_type: WordSized
1176 # Adds two string, returning a string.
1178 result_type: WordSized
1184 # Linearize a string.
1185 - name: LinearizeString
1186 result_type: WordSized
1191 # Linearize a string before a character access.
1192 - name: LinearizeForCharAccess
1193 result_type: WordSized
1199 # Linearize a string before a code point access.
1200 - name: LinearizeForCodePointAccess
1201 result_type: WordSized
1208 # Compute the relative string index.
1209 - name: ToRelativeStringIndex
1210 result_type: WordSized
1216 # Get uint16 character code from a string.
1218 result_type: WordSized
1224 # Get uint16 character code from a string. Return -1 on out-of-bounds.
1225 - name: CharCodeAtOrNegative
1226 result_type: WordSized
1232 # Get uint32 code point from a string.
1234 result_type: WordSized
1240 # Get uint32 code point from a string. Return -1 on out-of-bounds.
1241 - name: CodePointAtOrNegative
1242 result_type: WordSized
1248 # Box the input if non-negative. Otherwise return NaN.
1249 - name: NegativeToNaN
1250 result_type: BoxedValue
1254 # Box the input if non-negative. Otherwise return undefined.
1255 - name: NegativeToUndefined
1256 result_type: BoxedValue
1260 # Convert uint16 character code to a string.
1261 - name: FromCharCode
1262 result_type: WordSized
1266 # Convert non-negative input as a uint16 character code to a string. If the
1267 # input is negative, return the empty string.
1268 - name: FromCharCodeEmptyIfNegative
1269 result_type: WordSized
1273 # Convert non-negative input as a uint16 character code to a string. If the
1274 # input is negative, return the undefined value.
1275 - name: FromCharCodeUndefinedIfNegative
1276 result_type: BoxedValue
1280 # Convert uint32 code point to a string.
1281 - name: FromCodePoint
1282 result_type: WordSized
1284 codePoint: WordSized
1287 # Test if a string includes the search string.
1288 - name: StringIncludes
1289 result_type: WordSized
1292 searchString: WordSized
1293 call_instruction: true
1295 # Test if a string includes the constant search string.
1296 - name: StringIncludesSIMD
1297 result_type: WordSized
1301 searchString: JSLinearString*
1304 # Search for the first index of the search string.
1305 - name: StringIndexOf
1306 result_type: WordSized
1309 searchString: WordSized
1310 call_instruction: true
1312 # Search for the first index of the constant search string.
1313 - name: StringIndexOfSIMD
1314 result_type: WordSized
1318 searchString: JSLinearString*
1321 # Search for the last index of the search string.
1322 - name: StringLastIndexOf
1323 result_type: WordSized
1326 searchString: WordSized
1327 call_instruction: true
1329 # Test if a string starts with the search string
1330 - name: StringStartsWith
1331 result_type: WordSized
1334 searchString: WordSized
1335 call_instruction: true
1337 # Test if a string starts with the constant search string
1338 - name: StringStartsWithInline
1339 result_type: WordSized
1343 searchString: JSLinearString*
1346 # Test if a string ends with the search string
1347 - name: StringEndsWith
1348 result_type: WordSized
1351 searchString: WordSized
1352 call_instruction: true
1354 # Test if a string ends with the constant search string
1355 - name: StringEndsWithInline
1356 result_type: WordSized
1360 searchString: JSLinearString*
1363 # Calls the ToLowerCase case conversion function. Inlines the case conversion
1365 - name: StringToLowerCase
1366 result_type: WordSized
1370 mir_op: StringConvertCase
1372 # Calls the ToLowerCase case conversion function. Inlines the case conversion
1374 - name: CharCodeToLowerCase
1375 result_type: WordSized
1379 mir_op: CharCodeConvertCase
1381 # Calls the ToUpperCase case conversion function.
1382 - name: StringToUpperCase
1383 result_type: WordSized
1386 call_instruction: true
1387 mir_op: StringConvertCase
1389 # Calls the ToUpperCase case conversion function. Inlines the case conversion
1391 - name: CharCodeToUpperCase
1392 result_type: WordSized
1396 mir_op: CharCodeConvertCase
1398 # Index of first non-whitespace character.
1399 - name: StringTrimStartIndex
1400 result_type: WordSized
1404 # Index of last non-whitespace character.
1405 - name: StringTrimEndIndex
1406 result_type: WordSized
1412 result_type: WordSized
1415 separator: WordSized
1416 call_instruction: true
1420 result_type: WordSized
1428 - name: Int32ToDouble
1429 result_type: WordSized
1433 - name: Float32ToDouble
1434 result_type: WordSized
1438 - name: DoubleToFloat32
1439 result_type: WordSized
1443 - name: Int32ToFloat32
1444 result_type: WordSized
1448 # Convert a value to a double.
1449 - name: ValueToDouble
1450 result_type: WordSized
1455 # Convert a value to a float32.
1456 - name: ValueToFloat32
1457 result_type: WordSized
1462 - name: ValueToInt32
1463 gen_boilerplate: false
1465 # Convert a value to a BigInt.
1466 - name: ValueToBigInt
1467 result_type: WordSized
1472 # Convert a double to an int32.
1473 # Input: floating-point Register
1474 # Output: 32-bit integer
1475 # Bailout: if the double cannot be converted to an integer.
1476 - name: DoubleToInt32
1477 result_type: WordSized
1480 mir_op: ToNumberInt32
1482 # Convert a float32 to an int32.
1483 # Input: floating-point Register
1484 # Output: 32-bit integer
1485 # Bailout: if the float32 cannot be converted to an integer.
1486 - name: Float32ToInt32
1487 result_type: WordSized
1490 mir_op: ToNumberInt32
1492 # Convert a double to a truncated int32.
1493 # Input: floating-point Register
1494 # Output: 32-bit integer
1495 - name: TruncateDToInt32
1496 result_type: WordSized
1500 mir_op: TruncateToInt32
1502 # Convert a double to a truncated int32 with instance offset because we need it
1503 # for the slow ool path.
1504 - name: WasmBuiltinTruncateDToInt32
1505 result_type: WordSized
1510 mir_op: WasmBuiltinTruncateToInt32
1512 # Convert a float32 to a truncated int32.
1513 # Input: floating-point Register
1514 # Output: 32-bit integer
1515 - name: TruncateFToInt32
1516 result_type: WordSized
1520 mir_op: TruncateToInt32
1522 # Convert a float32 to a truncated int32 with instance offset because we need
1523 # it for the slow ool path.
1524 - name: WasmBuiltinTruncateFToInt32
1525 result_type: WordSized
1530 mir_op: WasmBuiltinTruncateToInt32
1532 - name: WasmTruncateToInt32
1533 result_type: WordSized
1538 - name: WrapInt64ToInt32
1539 result_type: WordSized
1544 - name: ExtendInt32ToInt64
1550 # Convert a boolean value to a string.
1551 - name: BooleanToString
1552 result_type: WordSized
1557 # Convert an integer hosted on one definition to a string with a function call.
1559 result_type: WordSized
1564 # Convert a double hosted on one definition to a string with a function call.
1565 - name: DoubleToString
1566 result_type: WordSized
1572 # Convert a primitive to a string with a function call.
1573 - name: ValueToString
1574 result_type: WordSized
1581 gen_boilerplate: false
1584 result_type: WordSized
1591 gen_boilerplate: false
1593 # Materialize a Value stored in an interpreter frame for OSR.
1595 result_type: BoxedValue
1600 # Materialize a JSObject env chain stored in an interpreter frame for OSR.
1601 - name: OsrEnvironmentChain
1602 result_type: WordSized
1607 # Materialize a JSObject env chain stored in an interpreter frame for OSR.
1608 - name: OsrReturnValue
1609 result_type: BoxedValue
1614 - name: OsrArgumentsObject
1615 result_type: WordSized
1621 result_type: WordSized
1625 - name: RegExpMatcher
1626 result_type: BoxedValue
1630 lastIndex: WordSized
1631 call_instruction: true
1634 - name: RegExpSearcher
1635 result_type: WordSized
1639 lastIndex: WordSized
1640 call_instruction: true
1643 - name: RegExpSearcherLastLimit
1644 result_type: WordSized
1648 - name: RegExpExecMatch
1649 result_type: BoxedValue
1653 call_instruction: true
1657 - name: RegExpExecTest
1658 result_type: WordSized
1662 call_instruction: true
1666 - name: RegExpHasCaptureGroups
1667 result_type: WordSized
1673 - name: RegExpPrototypeOptimizable
1674 result_type: WordSized
1680 - name: RegExpInstanceOptimizable
1681 result_type: WordSized
1688 - name: GetFirstDollarIndex
1689 result_type: WordSized
1694 - name: StringReplace
1695 result_type: WordSized
1699 replacement: WordSized
1700 call_instruction: true
1703 - name: BinaryValueCache
1704 result_type: BoxedValue
1708 # Takes two temps: these are intended to be FloatReg0 and FloatReg1
1709 # to allow the actual cache code to safely clobber those values without
1714 - name: BinaryBoolCache
1715 result_type: WordSized
1719 # Takes two temps: these are intendend to be FloatReg0 and FloatReg1
1720 # To allow the actual cache code to safely clobber those values without
1726 result_type: BoxedValue
1731 - name: ModuleMetadata
1732 result_type: WordSized
1733 call_instruction: true
1736 - name: DynamicImport
1737 result_type: WordSized
1739 specifier: BoxedValue
1741 call_instruction: true
1745 result_type: WordSized
1747 environmentChain: WordSized
1751 - name: FunctionWithProto
1752 result_type: WordSized
1755 prototype: WordSized
1756 call_instruction: true
1760 result_type: WordSized
1764 call_instruction: true
1767 - name: KeepAliveObject
1771 - name: DebugEnterGCUnsafeRegion
1774 - name: DebugLeaveGCUnsafeRegion
1777 # Load the "slots" member out of a JSObject.
1778 # Input: JSObject pointer
1779 # Output: slots pointer
1781 result_type: WordSized
1785 # Load the "elements" member out of a JSObject.
1786 # Input: JSObject pointer
1787 # Output: elements pointer
1789 result_type: WordSized
1794 # Load the initialized length from an elements header.
1795 - name: InitializedLength
1796 result_type: WordSized
1800 # Store to the initialized length in an elements header. Note the input is an
1801 # *index*, one less than the desired initialized length.
1802 - name: SetInitializedLength
1807 # Load the length from an elements header.
1809 result_type: WordSized
1813 # Store to the length in an elements header. Note the input is an *index*,
1814 # one less than the desired length.
1815 - name: SetArrayLength
1820 # Load the "length" property of a function.
1821 - name: FunctionLength
1822 result_type: WordSized
1826 # Load the "name" property of a function.
1827 - name: FunctionName
1828 result_type: WordSized
1832 - name: GetNextEntryForIterator
1833 result_type: WordSized
1840 - name: ArrayBufferByteLength
1841 result_type: WordSized
1845 - name: ArrayBufferViewLength
1846 result_type: WordSized
1851 # Read the byteOffset of an array buffer view.
1852 - name: ArrayBufferViewByteOffset
1853 result_type: WordSized
1857 # Load an array buffer view's elements vector.
1858 - name: ArrayBufferViewElements
1859 result_type: WordSized
1863 # Return the element size of a typed array.
1864 - name: TypedArrayElementSize
1865 result_type: WordSized
1869 - name: GuardHasAttachedArrayBuffer
1874 # Double to IntPtr, eligible for accessing into a TypedArray or DataView. If
1875 # the index isn't exactly representable as an IntPtr, depending on the
1876 # supportOOB flag on the MIR instruction, either bail out or produce an IntPtr
1877 # which is equivalent to an OOB access.
1878 - name: GuardNumberToIntPtrIndex
1879 result_type: WordSized
1884 # Bailout if index >= length.
1891 - name: BoundsCheckRange
1892 gen_boilerplate: false
1894 # Bailout if index < minimum.
1895 - name: BoundsCheckLower
1900 - name: SpectreMaskIndex
1901 result_type: WordSized
1907 - name: LoadElementV
1908 gen_boilerplate: false
1911 result_type: WordSized
1915 initLength: WordSized
1918 - name: GuardElementNotHole
1923 - name: LoadElementHole
1924 gen_boilerplate: false
1926 - name: StoreElementV
1927 gen_boilerplate: false
1929 - name: StoreElementT
1930 gen_boilerplate: false
1932 - name: StoreHoleValueElement
1937 # Like LStoreElementV, but supports indexes >= initialized length.
1938 - name: StoreElementHoleV
1945 mir_op: StoreElementHole
1947 # Like LStoreElementT, but supports indexes >= initialized length.
1948 - name: StoreElementHoleT
1955 mir_op: StoreElementHole
1957 - name: ArrayPopShift
1958 gen_boilerplate: false
1961 result_type: WordSized
1969 result_type: WordSized
1975 call_instruction: true
1978 - name: ArgumentsSlice
1979 result_type: WordSized
1985 call_instruction: true
1988 - name: FrameArgumentsSlice
1989 result_type: WordSized
1996 - name: InlineArgumentsSlice
1997 gen_boilerplate: false
1999 - name: NormalizeSliceTerm
2000 result_type: WordSized
2007 result_type: WordSized
2010 separator: WordSized
2012 call_instruction: true
2016 result_type: WordSized
2020 call_instruction: true
2022 - name: ObjectKeysLength
2023 result_type: WordSized
2027 call_instruction: true
2029 - name: LoadUnboxedScalar
2030 result_type: WordSized
2037 - name: LoadUnboxedBigInt
2038 gen_boilerplate: false
2040 - name: LoadDataViewElement
2041 gen_boilerplate: false
2043 - name: LoadTypedArrayElementHole
2044 result_type: BoxedValue
2051 - name: LoadTypedArrayElementHoleBigInt
2052 gen_boilerplate: false
2054 - name: StoreUnboxedScalar
2061 - name: StoreUnboxedBigInt
2062 gen_boilerplate: false
2064 - name: StoreDataViewElement
2065 gen_boilerplate: false
2067 - name: StoreTypedArrayElementHole
2076 - name: StoreTypedArrayElementHoleBigInt
2077 gen_boilerplate: false
2079 - name: AtomicIsLockFree
2080 result_type: WordSized
2084 - name: CompareExchangeTypedArrayElement
2085 gen_boilerplate: false
2087 - name: AtomicExchangeTypedArrayElement
2088 gen_boilerplate: false
2090 - name: AtomicTypedArrayElementBinop
2091 gen_boilerplate: false
2093 - name: AtomicTypedArrayElementBinopForEffect
2094 gen_boilerplate: false
2096 - name: AtomicLoad64
2097 gen_boilerplate: false
2099 - name: AtomicStore64
2100 gen_boilerplate: false
2102 - name: CompareExchangeTypedArrayElement64
2103 gen_boilerplate: false
2105 - name: AtomicExchangeTypedArrayElement64
2106 gen_boilerplate: false
2108 - name: AtomicTypedArrayElementBinop64
2109 gen_boilerplate: false
2111 - name: AtomicTypedArrayElementBinopForEffect64
2112 gen_boilerplate: false
2114 - name: EffectiveAddress
2115 result_type: WordSized
2121 - name: ClampIToUint8
2122 result_type: WordSized
2126 - name: ClampDToUint8
2127 result_type: WordSized
2132 - name: ClampVToUint8
2133 result_type: WordSized
2137 mir_op: ClampToUint8
2139 - name: LoadScriptedProxyHandler
2140 result_type: BoxedValue
2146 - name: CheckScriptedProxyGetResult
2155 - name: IdToStringOrSymbol
2156 result_type: BoxedValue
2162 # Load a boxed value from an object's fixed slot.
2163 - name: LoadFixedSlotV
2164 result_type: BoxedValue
2167 mir_op: LoadFixedSlot
2169 # Load a boxed value from an object's fixed slot.
2170 # If it is a non-atom string, atomize it and update the slot.
2171 - name: LoadFixedSlotAndAtomize
2172 result_type: BoxedValue
2176 mir_op: LoadFixedSlot
2178 # Load a typed value from an object's fixed slot.
2179 - name: LoadFixedSlotT
2180 result_type: WordSized
2183 mir_op: LoadFixedSlot
2185 - name: LoadFixedSlotAndUnbox
2186 result_type: WordSized
2191 - name: LoadDynamicSlotAndUnbox
2192 result_type: WordSized
2197 - name: LoadElementAndUnbox
2198 result_type: WordSized
2204 - name: LoadFixedSlotUnboxAndAtomize
2205 result_type: WordSized
2208 mir_op: LoadFixedSlotAndUnbox
2210 - name: LoadDynamicSlotUnboxAndAtomize
2211 result_type: WordSized
2214 mir_op: LoadDynamicSlotAndUnbox
2216 - name: AddAndStoreSlot
2223 - name: AllocateAndStoreSlot
2228 call_instruction: true
2231 - name: AddSlotAndCallAddPropHook
2235 call_instruction: true
2238 # Store a boxed value to an object's fixed slot.
2239 - name: StoreFixedSlotV
2243 mir_op: StoreFixedSlot
2245 # Store a typed value to an object's fixed slot.
2246 - name: StoreFixedSlotT
2250 mir_op: StoreFixedSlot
2252 # Note, Name ICs always return a Value. There are no V/T variants.
2253 - name: GetNameCache
2254 result_type: BoxedValue
2260 - name: CallGetIntrinsicValue
2261 result_type: BoxedValue
2262 call_instruction: true
2265 - name: GetPropSuperCache
2266 result_type: BoxedValue
2269 receiver: BoxedValue
2273 # Patchable jump to stubs generated for a GetProperty cache, which loads a
2275 - name: GetPropertyCache
2276 result_type: BoxedValue
2282 - name: BindNameCache
2283 result_type: WordSized
2285 environmentChain: WordSized
2290 result_type: WordSized
2292 environmentChain: WordSized
2295 # Load a value from an object's dslots or a slots vector.
2296 - name: LoadDynamicSlotV
2297 result_type: BoxedValue
2300 mir_op: LoadDynamicSlot
2302 # Load a value from an object's dslots or a slots vector.
2303 # If it is a non-atom string, atomize it and update the slot.
2304 - name: LoadDynamicSlotAndAtomize
2305 result_type: BoxedValue
2309 mir_op: LoadDynamicSlot
2311 # Store a value to an object's dslots or a slots vector.
2312 - name: StoreDynamicSlotV
2316 mir_op: StoreDynamicSlot
2318 # Store a typed value to an object's dslots or a slots vector. This has a
2319 # few advantages over LStoreDynamicSlotV:
2320 # 1) We can bypass storing the type tag if the slot has the same type as
2322 # 2) Better Register allocation: we can store constants and FP regs directly
2323 # without requiring a second Register for the value.
2324 - name: StoreDynamicSlotT
2328 mir_op: StoreDynamicSlot
2330 # Read length field of a JSString*.
2331 - name: StringLength
2332 result_type: WordSized
2336 # Take the floor of a double precision number and converts it to an int32.
2337 # Implements Math.floor().
2339 result_type: WordSized
2343 # Take the floor of a single precision number and converts it to an int32.
2344 # Implements Math.floor().
2346 result_type: WordSized
2350 # Take the ceiling of a double precision number and converts it to an int32.
2351 # Implements Math.ceil().
2353 result_type: WordSized
2357 # Take the ceiling of a single precision number and converts it to an int32.
2358 # Implements Math.ceil().
2360 result_type: WordSized
2364 # Round a double precision number and converts it to an int32.
2365 # Implements Math.round().
2367 result_type: WordSized
2373 # Round a single precision number and converts it to an int32.
2374 # Implements Math.round().
2376 result_type: WordSized
2382 # Truncates a double precision number and converts it to an int32.
2383 # Implements Math.trunc().
2385 result_type: WordSized
2389 # Truncates a single precision number and converts it to an int32.
2390 # Implements Math.trunc().
2392 result_type: WordSized
2396 # Rounds a double precision number accordingly to mir()->roundingMode(),
2397 # and keeps a double output.
2399 result_type: WordSized
2404 # Rounds a single precision number accordingly to mir()->roundingMode(),
2405 # and keeps a single output.
2407 result_type: WordSized
2412 # Load a function's call environment.
2413 - name: FunctionEnvironment
2414 result_type: WordSized
2419 result_type: WordSized
2423 - name: HomeObjectSuperBase
2424 result_type: BoxedValue
2426 homeObject: WordSized
2428 - name: NewLexicalEnvironmentObject
2429 result_type: WordSized
2433 - name: NewClassBodyEnvironmentObject
2434 result_type: WordSized
2438 - name: NewVarEnvironmentObject
2439 result_type: WordSized
2443 - name: MegamorphicSetElement
2448 # On x86 we do not have enough registers to use 3 temps for this *and* take
2449 # five words worth of operands. Since it's 32-bit, though, we get two
2450 # registers from pushing `value`, which doesn't get used until the end
2451 # anyway. This is somewhat klunky, but oh well.
2452 #ifdef JS_CODEGEN_X86
2457 call_instruction: true
2460 - name: CallDeleteProperty
2461 result_type: WordSized
2464 call_instruction: true
2465 mir_op: DeleteProperty
2467 - name: CallDeleteElement
2468 result_type: WordSized
2472 call_instruction: true
2473 mir_op: DeleteElement
2475 - name: ObjectToIterator
2476 result_type: WordSized
2482 - name: ValueToIterator
2483 result_type: WordSized
2486 call_instruction: true
2487 mir_op: ValueToIterator
2489 - name: IteratorHasIndicesAndBranch
2490 gen_boilerplate: false
2492 - name: LoadSlotByIteratorIndex
2493 result_type: BoxedValue
2500 - name: StoreSlotByIteratorIndex
2508 # Patchable jump to stubs generated for a SetProperty cache.
2509 - name: SetPropertyCache
2514 # Takes an additional temp: this is intendend to be FloatReg0 to allow the
2515 # actual cache code to safely clobber that value without save and restore.
2519 - name: GetIteratorCache
2520 result_type: WordSized
2526 - name: OptimizeSpreadCallCache
2527 result_type: BoxedValue
2533 - name: IteratorMore
2534 result_type: BoxedValue
2540 - name: IsNoIterAndBranch
2541 gen_boilerplate: false
2549 - name: CloseIterCache
2555 - name: OptimizeGetIteratorCache
2556 result_type: WordSized
2562 # Read the number of actual arguments.
2563 - name: ArgumentsLength
2564 result_type: WordSized
2566 # Load a value from the actual arguments.
2567 - name: GetFrameArgument
2568 result_type: BoxedValue
2572 # Load a value from the actual arguments.
2573 # Returns undefined if |index| is larger-or-equals to |length|. Bails out if
2574 # |index| is negative.
2575 - name: GetFrameArgumentHole
2576 result_type: BoxedValue
2582 # Create the rest parameter.
2584 result_type: WordSized
2586 numActuals: WordSized
2588 call_instruction: true
2591 - name: Int32ToIntPtr
2592 result_type: WordSized
2597 - name: NonNegativeIntPtrToInt32
2598 result_type: WordSized
2602 - name: IntPtrToDouble
2603 result_type: WordSized
2607 - name: AdjustDataViewLength
2608 result_type: WordSized
2613 # Convert a Boolean to an Int64, following ToBigInt.
2614 - name: BooleanToInt64
2620 # Convert a String to an Int64, following ToBigInt.
2621 - name: StringToInt64
2627 # Simulate ToBigInt on a Value and produce a matching Int64.
2628 - name: ValueToInt64
2635 # Truncate a BigInt to an unboxed int64.
2636 - name: TruncateBigIntToInt64
2642 # Create a new BigInt* from an unboxed int64.
2643 - name: Int64ToBigInt
2644 result_type: WordSized
2650 # Generational write barrier used when writing an object to another object.
2651 - name: PostWriteBarrierO
2656 mir_op: PostWriteBarrier
2658 # Generational write barrier used when writing a string to an object.
2659 - name: PostWriteBarrierS
2664 mir_op: PostWriteBarrier
2666 # Generational write barrier used when writing a BigInt to an object.
2667 - name: PostWriteBarrierBI
2672 mir_op: PostWriteBarrier
2674 # Generational write barrier used when writing a value to another object.
2675 - name: PostWriteBarrierV
2680 mir_op: PostWriteBarrier
2682 # Generational write barrier used when writing an object to another object's
2684 - name: PostWriteElementBarrierO
2690 mir_op: PostWriteElementBarrier
2692 # Generational write barrier used when writing a string to an object's
2694 - name: PostWriteElementBarrierS
2700 mir_op: PostWriteElementBarrier
2702 # Generational write barrier used when writing a BigInt to an object's
2704 - name: PostWriteElementBarrierBI
2710 mir_op: PostWriteElementBarrier
2712 # Generational write barrier used when writing a value to another object's
2714 - name: PostWriteElementBarrierV
2720 mir_op: PostWriteElementBarrier
2722 # Assert in debug mode that a post write barrier can be elided.
2723 - name: AssertCanElidePostWriteBarrier
2729 # Guard against an object's identity.
2730 - name: GuardObjectIdentity
2736 # Guard against an function's identity.
2737 - name: GuardSpecificFunction
2742 - name: GuardSpecificAtom
2748 - name: GuardSpecificSymbol
2753 - name: GuardSpecificInt32
2758 - name: GuardStringToIndex
2759 result_type: WordSized
2763 - name: GuardStringToInt32
2764 result_type: WordSized
2769 - name: GuardStringToDouble
2770 result_type: WordSized
2776 result_type: WordSized
2782 - name: GuardMultipleShapes
2783 result_type: WordSized
2786 shapeList: WordSized
2796 - name: GuardNullProto
2801 - name: GuardIsNativeObject
2806 - name: GuardGlobalGeneration
2814 - name: GuardIsProxy
2819 - name: GuardIsNotProxy
2824 - name: GuardIsNotDOMProxy
2830 result_type: BoxedValue
2834 call_instruction: true
2837 - name: ProxyGetByValue
2838 result_type: BoxedValue
2842 call_instruction: true
2844 - name: ProxyHasProp
2845 result_type: BoxedValue
2849 call_instruction: true
2857 call_instruction: true
2860 - name: ProxySetByValue
2865 call_instruction: true
2868 - name: CallSetArrayLength
2872 call_instruction: true
2875 - name: MegamorphicLoadSlot
2876 result_type: BoxedValue
2880 call_instruction: true
2883 - name: MegamorphicLoadSlotByValue
2884 result_type: BoxedValue
2889 call_instruction: true
2892 - name: MegamorphicStoreSlot
2896 #ifdef JS_CODEGEN_X86
2901 call_instruction: true
2904 - name: MegamorphicHasProp
2905 result_type: WordSized
2910 call_instruction: true
2913 - name: GuardIsNotArrayBufferMaybeShared
2918 - name: GuardIsTypedArray
2923 - name: GuardIsFixedLengthTypedArray
2928 - name: GuardHasProxyHandler
2933 - name: GuardNoDenseElements
2939 result_type: WordSized
2947 result_type: WordSized
2953 - name: CheckPrivateFieldCache
2954 result_type: WordSized
2960 - name: NewPrivateName
2961 result_type: WordSized
2962 call_instruction: true
2966 result_type: WordSized
2973 result_type: WordSized
2979 - name: InstanceOfCache
2980 gen_boilerplate: false
2983 result_type: WordSized
2989 result_type: WordSized
2995 - name: IsConstructor
2996 result_type: WordSized
3001 - name: IsCrossRealmArrayConstructor
3002 result_type: WordSized
3007 result_type: WordSized
3013 result_type: WordSized
3019 - name: IsTypedArray
3020 result_type: WordSized
3026 result_type: WordSized
3031 - name: IsObjectAndBranch
3032 gen_boilerplate: false
3034 - name: IsNullOrUndefined
3035 result_type: WordSized
3040 - name: IsNullOrUndefinedAndBranch
3041 gen_boilerplate: false
3044 result_type: WordSized
3049 - name: GuardToClass
3050 result_type: WordSized
3056 - name: GuardToFunction
3057 result_type: WordSized
3063 - name: ObjectClassToString
3064 result_type: WordSized
3068 call_instruction: true
3072 gen_boilerplate: false
3074 - name: WasmSelectI64
3075 gen_boilerplate: false
3077 - name: WasmCompareAndSelect
3078 gen_boilerplate: false
3080 - name: WasmAddOffset
3081 result_type: WordSized
3086 - name: WasmAddOffset64
3090 mir_op: WasmAddOffset
3092 - name: WasmBoundsCheck
3093 result_type: WordSized
3096 boundsCheckLimit: WordSized
3099 - name: WasmBoundsCheck64
3100 gen_boilerplate: false
3102 - name: WasmBoundsCheckRange32
3103 result_type: WordSized
3111 - name: WasmExtendU32Index
3112 result_type: WordSized
3117 - name: WasmWrapU32Index
3118 result_type: WordSized
3123 - name: WasmAlignmentCheck
3128 - name: WasmAlignmentCheck64
3131 mir_op: WasmAlignmentCheck
3133 - name: WasmLoadInstance
3134 result_type: WordSized
3139 - name: WasmLoadInstance64
3143 mir_op: WasmLoadInstance
3146 result_type: WordSized
3150 gen_boilerplate: false
3153 gen_boilerplate: false
3156 gen_boilerplate: false
3158 - name: WasmStoreI64
3159 gen_boilerplate: false
3161 - name: AsmJSLoadHeap
3162 result_type: WordSized
3165 boundsCheckLimit: WordSized
3166 memoryBase: WordSized
3169 - name: AsmJSStoreHeap
3170 result_type: WordSized
3174 boundsCheckLimit: WordSized
3175 memoryBase: WordSized
3178 - name: WasmCompareExchangeHeap
3179 gen_boilerplate: false
3183 - name: WasmAtomicExchangeHeap
3184 gen_boilerplate: false
3186 - name: WasmAtomicBinopHeap
3187 gen_boilerplate: false
3189 - name: WasmAtomicBinopHeapForEffect
3190 gen_boilerplate: false
3192 - name: WasmLoadSlot
3193 result_type: WordSized
3195 containerRef: WordSized
3199 wideningOp: MWideningOp
3200 maybeTrap: MaybeTrapSiteInfo
3202 - name: WasmLoadSlotI64
3205 containerRef: WordSized
3208 maybeTrap: MaybeTrapSiteInfo
3210 - name: WasmStoreSlot
3213 containerRef: WordSized
3217 narrowingOp: MNarrowingOp
3218 maybeTrap: MaybeTrapSiteInfo
3220 - name: WasmStoreSlotI64
3223 containerRef: WordSized
3226 maybeTrap: MaybeTrapSiteInfo
3228 - name: WasmLoadTableElement
3229 result_type: WordSized
3234 - name: WasmDerivedPointer
3235 gen_boilerplate: false
3237 - name: WasmDerivedIndexPointer
3238 gen_boilerplate: false
3240 - name: WasmStoreRef
3243 valueBase: WordSized
3247 maybeTrap: MaybeTrapSiteInfo
3248 preBarrierKind: WasmPreBarrierKind
3252 # Generational write barrier used when writing an object to another object.
3253 - name: WasmPostWriteBarrier
3257 valueBase: WordSized
3260 valueOffset: uint32_t
3264 - name: WasmParameter
3265 result_type: WordSized
3267 - name: WasmParameterI64
3268 gen_boilerplate: false
3275 - name: WasmReturnI64
3280 - name: WasmReturnVoid
3284 - name: WasmStackArg
3289 - name: WasmStackArgI64
3292 mir_op: WasmStackArg
3294 - name: WasmNullConstant
3295 result_type: WordSized
3297 - name: WasmCallIndirectAdjunctSafepoint
3298 gen_boilerplate: false
3301 gen_boilerplate: false
3303 - name: WasmCallLandingPrePad
3306 - name: WasmRegisterResult
3307 gen_boilerplate: false
3309 - name: WasmRegisterPairResult
3310 gen_boilerplate: false
3312 - name: WasmStackResultArea
3313 result_type: WordSized
3317 - name: WasmStackResult
3318 gen_boilerplate: false
3320 - name: WasmStackResult64
3321 gen_boilerplate: false
3323 - name: AssertRangeI
3324 gen_boilerplate: false
3326 - name: AssertRangeD
3327 gen_boilerplate: false
3329 - name: AssertRangeF
3330 gen_boilerplate: false
3332 - name: AssertRangeV
3333 gen_boilerplate: false
3351 - name: GuardNullOrUndefined
3356 - name: GuardIsNotObject
3361 - name: GuardFunctionFlags
3366 - name: GuardFunctionIsNonBuiltinCtor
3371 - name: GuardFunctionKind
3377 - name: GuardFunctionScript
3382 - name: IncrementWarmUpCounter
3386 - name: LexicalCheck
3391 - name: ThrowRuntimeLexicalError
3392 call_instruction: true
3396 call_instruction: true
3399 - name: GlobalDeclInstantiation
3402 - name: MemoryBarrier
3403 gen_boilerplate: false
3407 call_instruction: true
3410 result_type: BoxedValue
3413 gen_boilerplate: false
3416 result_type: BoxedValue
3418 returnValue: BoxedValue
3419 thisValue: BoxedValue
3422 result_type: WordSized
3427 - name: CheckObjCoercible
3431 - name: CheckClassHeritage
3433 heritage: BoxedValue
3440 - name: CheckThisReinit
3442 thisValue: BoxedValue
3445 result_type: WordSized
3448 environmentChain: WordSized
3449 argsObject: WordSized
3450 call_instruction: true
3453 - name: AsyncResolve
3454 result_type: WordSized
3456 generator: WordSized
3458 call_instruction: true
3462 result_type: WordSized
3464 generator: WordSized
3467 call_instruction: true
3471 result_type: WordSized
3474 generator: WordSized
3475 call_instruction: true
3478 - name: CanSkipAwait
3479 result_type: WordSized
3482 call_instruction: true
3485 - name: MaybeExtractAwaitValue
3486 result_type: BoxedValue
3490 call_instruction: true
3493 - name: DebugCheckSelfHosted
3496 call_instruction: true
3498 - name: IsPackedArray
3499 result_type: WordSized
3504 - name: GuardArrayIsPacked
3510 - name: GetPrototypeOf
3511 result_type: BoxedValue
3515 - name: ObjectWithProto
3516 result_type: WordSized
3518 prototype: BoxedValue
3519 call_instruction: true
3521 - name: ObjectStaticProto
3522 result_type: WordSized
3526 - name: BuiltinObject
3527 result_type: WordSized
3528 call_instruction: true
3531 - name: SuperFunction
3532 result_type: BoxedValue
3537 - name: InitHomeObject
3538 result_type: WordSized
3541 homeObject: BoxedValue
3543 - name: IsTypedArrayConstructor
3544 result_type: WordSized
3548 - name: LoadValueTag
3549 result_type: WordSized
3553 - name: GuardTagNotEqual
3558 - name: LoadWrapperTarget
3559 result_type: WordSized
3563 - name: GuardHasGetterSetter
3567 call_instruction: true
3570 - name: GuardIsExtensible
3575 - name: GuardInt32IsNonNegative
3579 - name: GuardInt32Range
3584 - name: GuardIndexIsNotDenseElement
3590 - name: GuardIndexIsValidUpdateOrAdd
3596 - name: CallAddOrUpdateSparseElement
3601 call_instruction: true
3604 - name: CallGetSparseElement
3605 result_type: BoxedValue
3609 call_instruction: true
3611 - name: CallNativeGetElement
3612 result_type: BoxedValue
3616 call_instruction: true
3618 - name: CallNativeGetElementSuper
3619 result_type: BoxedValue
3623 receiver: BoxedValue
3624 call_instruction: true
3626 - name: CallObjectHasSparseElement
3627 result_type: WordSized
3632 call_instruction: true
3634 - name: BigIntAsIntN
3635 result_type: WordSized
3639 call_instruction: true
3641 - name: BigIntAsIntN64
3642 gen_boilerplate: false
3644 - name: BigIntAsIntN32
3645 gen_boilerplate: false
3647 - name: GuardNonGCThing
3651 - name: ToHashableNonGCThing
3652 result_type: BoxedValue
3657 - name: ToHashableString
3658 result_type: WordSized
3662 - name: ToHashableValue
3663 result_type: BoxedValue
3668 - name: HashNonGCThing
3669 result_type: WordSized
3675 result_type: WordSized
3681 result_type: WordSized
3686 result_type: WordSized
3692 result_type: WordSized
3694 setObject: WordSized
3699 result_type: WordSized
3701 setObject: WordSized
3705 - name: SetObjectHasNonBigInt
3706 result_type: WordSized
3708 setObject: WordSized
3713 - name: SetObjectHasBigInt
3714 result_type: WordSized
3716 setObject: WordSized
3721 - name: SetObjectHasValue
3722 result_type: WordSized
3724 setObject: WordSized
3729 - name: SetObjectHasValueVMCall
3730 result_type: WordSized
3731 call_instruction: true
3733 setObject: WordSized
3736 - name: SetObjectSize
3737 result_type: WordSized
3739 setObject: WordSized
3741 - name: MapObjectHasNonBigInt
3742 result_type: WordSized
3744 mapObject: WordSized
3749 - name: MapObjectHasBigInt
3750 result_type: WordSized
3752 mapObject: WordSized
3757 - name: MapObjectHasValue
3758 result_type: WordSized
3760 mapObject: WordSized
3765 - name: MapObjectHasValueVMCall
3766 result_type: WordSized
3767 call_instruction: true
3769 mapObject: WordSized
3772 - name: MapObjectGetNonBigInt
3773 result_type: BoxedValue
3775 mapObject: WordSized
3780 - name: MapObjectGetBigInt
3781 result_type: BoxedValue
3783 mapObject: WordSized
3788 - name: MapObjectGetValue
3789 result_type: BoxedValue
3791 mapObject: WordSized
3796 - name: MapObjectGetValueVMCall
3797 result_type: BoxedValue
3798 call_instruction: true
3800 mapObject: WordSized
3803 - name: MapObjectSize
3804 result_type: WordSized
3806 mapObject: WordSized
3808 - name: BigIntAsUintN
3809 result_type: WordSized
3813 call_instruction: true
3815 - name: BigIntAsUintN64
3816 gen_boilerplate: false
3818 - name: BigIntAsUintN32
3819 gen_boilerplate: false
3821 - name: IonToWasmCall
3822 gen_boilerplate: false
3824 - name: IonToWasmCallV
3825 gen_boilerplate: false
3827 - name: IonToWasmCallI64
3828 gen_boilerplate: false
3830 - name: WasmAnyRefFromJSValue
3831 result_type: WordSized
3836 - name: WasmAnyRefFromJSObject
3837 result_type: WordSized
3841 - name: WasmAnyRefFromJSString
3842 result_type: WordSized
3846 - name: WasmNewI31Ref
3848 result_type: WordSized
3852 - name: WasmI31RefGet
3854 result_type: WordSized
3860 result_type: WordSized
3862 simd128: SimdConstant
3864 - name: WasmTernarySimd128
3865 gen_boilerplate: false
3867 - name: WasmBinarySimd128
3868 gen_boilerplate: false
3870 - name: WasmBinarySimd128WithConstant
3871 gen_boilerplate: false
3873 - name: WasmVariableShiftSimd128
3874 gen_boilerplate: false
3876 - name: WasmConstantShiftSimd128
3877 gen_boilerplate: false
3879 - name: WasmSignReplicationSimd128
3880 gen_boilerplate: false
3882 - name: WasmShuffleSimd128
3883 gen_boilerplate: false
3885 - name: WasmPermuteSimd128
3886 gen_boilerplate: false
3888 - name: WasmReplaceLaneSimd128
3889 gen_boilerplate: false
3891 - name: WasmReplaceInt64LaneSimd128
3892 gen_boilerplate: false
3894 - name: WasmScalarToSimd128
3895 gen_boilerplate: false
3897 - name: WasmInt64ToSimd128
3898 gen_boilerplate: false
3900 - name: WasmUnarySimd128
3901 gen_boilerplate: false
3903 - name: WasmReduceSimd128
3904 gen_boilerplate: false
3906 - name: WasmReduceAndBranchSimd128
3907 gen_boilerplate: false
3909 - name: WasmReduceSimd128ToInt64
3910 gen_boilerplate: false
3912 - name: WasmLoadLaneSimd128
3913 gen_boilerplate: false
3915 - name: WasmStoreLaneSimd128
3916 gen_boilerplate: false
3919 gen_boilerplate: false
3921 - name: UnboxFloatingPoint
3922 gen_boilerplate: false
3924 - name: WasmUint32ToDouble
3925 gen_boilerplate: false
3927 - name: WasmUint32ToFloat32
3928 gen_boilerplate: false
3931 gen_boilerplate: false
3934 gen_boilerplate: false
3937 gen_boilerplate: false
3940 gen_boilerplate: false
3943 gen_boilerplate: false
3945 - name: TableSwitchV
3946 gen_boilerplate: false
3949 gen_boilerplate: false
3951 #ifdef JS_CODEGEN_X86
3952 - name: BoxFloatingPoint
3953 gen_boilerplate: false
3956 gen_boilerplate: false
3958 - name: UDivOrModI64
3959 gen_boilerplate: false
3961 - name: DivOrModConstantI
3962 gen_boilerplate: false
3965 gen_boilerplate: false
3967 - name: UDivOrModConstant
3968 gen_boilerplate: false
3970 - name: WasmTruncateToInt64
3971 gen_boilerplate: false
3973 - name: Int64ToFloatingPoint
3974 gen_boilerplate: false
3976 - name: WasmAtomicLoadI64
3977 gen_boilerplate: false
3979 - name: WasmAtomicStoreI64
3980 gen_boilerplate: false
3982 - name: WasmCompareExchangeI64
3983 gen_boilerplate: false
3985 - name: WasmAtomicBinopI64
3986 gen_boilerplate: false
3988 - name: WasmAtomicExchangeI64
3989 gen_boilerplate: false
3992 #ifdef JS_CODEGEN_X64
3994 gen_boilerplate: false
3996 - name: UDivOrModI64
3997 gen_boilerplate: false
3999 - name: DivOrModConstantI
4000 gen_boilerplate: false
4003 gen_boilerplate: false
4005 - name: UDivOrModConstant
4006 gen_boilerplate: false
4008 - name: WasmTruncateToInt64
4009 gen_boilerplate: false
4011 - name: Int64ToFloatingPoint
4012 gen_boilerplate: false
4015 #ifdef JS_CODEGEN_ARM
4016 - name: BoxFloatingPoint
4017 gen_boilerplate: false
4020 gen_boilerplate: false
4022 - name: UDivOrModI64
4023 gen_boilerplate: false
4026 gen_boilerplate: false
4029 gen_boilerplate: false
4032 gen_boilerplate: false
4035 gen_boilerplate: false
4038 gen_boilerplate: false
4040 - name: SoftUDivOrMod
4041 gen_boilerplate: false
4043 - name: Int64ToFloatingPointCall
4044 gen_boilerplate: false
4046 - name: WasmTruncateToInt64
4047 gen_boilerplate: false
4049 - name: WasmAtomicLoadI64
4050 gen_boilerplate: false
4052 - name: WasmAtomicStoreI64
4053 gen_boilerplate: false
4055 - name: WasmCompareExchangeI64
4056 gen_boilerplate: false
4058 - name: WasmAtomicBinopI64
4059 gen_boilerplate: false
4061 - name: WasmAtomicExchangeI64
4062 gen_boilerplate: false
4065 #ifdef JS_CODEGEN_ARM64
4067 gen_boilerplate: false
4069 - name: UDivOrModI64
4070 gen_boilerplate: false
4072 - name: DivConstantI
4073 gen_boilerplate: false
4075 - name: UDivConstantI
4076 gen_boilerplate: false
4079 gen_boilerplate: false
4082 gen_boilerplate: false
4085 gen_boilerplate: false
4087 - name: WasmTruncateToInt64
4088 gen_boilerplate: false
4090 - name: Int64ToFloatingPoint
4091 gen_boilerplate: false
4094 #ifdef JS_CODEGEN_MIPS32
4095 - name: BoxFloatingPoint
4096 gen_boilerplate: false
4099 gen_boilerplate: false
4101 - name: UDivOrModI64
4102 gen_boilerplate: false
4105 gen_boilerplate: false
4108 gen_boilerplate: false
4110 - name: WasmTruncateToInt64
4111 gen_boilerplate: false
4113 - name: Int64ToFloatingPoint
4114 gen_boilerplate: false
4116 - name: WasmUnalignedLoad
4117 gen_boilerplate: false
4119 - name: WasmUnalignedLoadI64
4120 gen_boilerplate: false
4122 - name: WasmUnalignedStore
4123 gen_boilerplate: false
4125 - name: WasmUnalignedStoreI64
4126 gen_boilerplate: false
4128 - name: WasmAtomicLoadI64
4129 gen_boilerplate: false
4131 - name: WasmAtomicStoreI64
4132 gen_boilerplate: false
4134 - name: WasmCompareExchangeI64
4135 gen_boilerplate: false
4137 - name: WasmAtomicBinopI64
4138 gen_boilerplate: false
4140 - name: WasmAtomicExchangeI64
4141 gen_boilerplate: false
4144 #ifdef JS_CODEGEN_MIPS64
4146 gen_boilerplate: false
4149 gen_boilerplate: false
4151 - name: UDivOrModI64
4152 gen_boilerplate: false
4155 gen_boilerplate: false
4157 - name: WasmTruncateToInt64
4158 gen_boilerplate: false
4160 - name: Int64ToFloatingPoint
4161 gen_boilerplate: false
4163 - name: WasmUnalignedLoad
4164 gen_boilerplate: false
4166 - name: WasmUnalignedLoadI64
4167 gen_boilerplate: false
4169 - name: WasmUnalignedStore
4170 gen_boilerplate: false
4172 - name: WasmUnalignedStoreI64
4173 gen_boilerplate: false
4175 - name: WasmCompareExchangeI64
4176 gen_boilerplate: false
4178 - name: WasmAtomicBinopI64
4179 gen_boilerplate: false
4181 - name: WasmAtomicExchangeI64
4182 gen_boilerplate: false
4185 #ifdef JS_CODEGEN_LOONG64
4187 gen_boilerplate: false
4190 gen_boilerplate: false
4192 - name: UDivOrModI64
4193 gen_boilerplate: false
4196 gen_boilerplate: false
4198 - name: WasmTruncateToInt64
4199 gen_boilerplate: false
4201 - name: Int64ToFloatingPoint
4202 gen_boilerplate: false
4204 - name: WasmCompareExchangeI64
4205 gen_boilerplate: false
4207 - name: WasmAtomicBinopI64
4208 gen_boilerplate: false
4210 - name: WasmAtomicExchangeI64
4211 gen_boilerplate: false
4214 #ifdef JS_CODEGEN_RISCV64
4216 gen_boilerplate: false
4219 gen_boilerplate: false
4221 - name: UDivOrModI64
4222 gen_boilerplate: false
4225 gen_boilerplate: false
4227 - name: WasmTruncateToInt64
4228 gen_boilerplate: false
4230 - name: Int64ToFloatingPoint
4231 gen_boilerplate: false
4233 - name: WasmCompareExchangeI64
4234 gen_boilerplate: false
4236 - name: WasmAtomicBinopI64
4237 gen_boilerplate: false
4239 - name: WasmAtomicExchangeI64
4240 gen_boilerplate: false
4243 #ifdef FUZZING_JS_FUZZILLI
4244 - name: FuzzilliHashT
4245 gen_boilerplate: false
4247 - name: FuzzilliHashV
4248 gen_boilerplate: false
4250 - name: FuzzilliHashStore
4251 gen_boilerplate: false