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
884 gen_boilerplate: false
887 gen_boilerplate: false
890 gen_boilerplate: false
893 gen_boilerplate: false
896 gen_boilerplate: false
898 # Negative of integer
900 result_type: WordSized
904 # Negative of an int64
912 result_type: WordSized
916 # Negative of float32
918 result_type: WordSized
922 # Absolute value of an integer.
924 result_type: WordSized
929 # Absolute value of a double.
931 result_type: WordSized
935 # Absolute value of a float32.
937 result_type: WordSized
942 gen_boilerplate: false
945 gen_boilerplate: false
947 # Count leading zeroes on an int32.
949 result_type: WordSized
954 # Count leading zeroes on an int64.
961 # Count trailing zeroes on an int32.
963 result_type: WordSized
968 # Count trailing zeroes on an int64.
975 # Count population on an int32.
977 result_type: WordSized
983 # Count population on an int64.
992 result_type: WordSized
997 result_type: WordSized
1002 gen_boilerplate: false
1005 gen_boilerplate: false
1007 # Double raised to an integer power.
1009 result_type: WordSized
1013 call_instruction: true
1015 # Integer raised to an integer power.
1017 result_type: WordSized
1024 # Double raised to a double power.
1026 result_type: WordSized
1030 call_instruction: true
1032 # Constant of a power of two raised to an integer power.
1034 result_type: WordSized
1040 # Sign value of an integer.
1042 result_type: WordSized
1046 # Sign value of an integer.
1048 result_type: WordSized
1052 # Sign value of a double with expected int32 result.
1054 result_type: WordSized
1059 - name: MathFunctionD
1060 gen_boilerplate: false
1062 - name: MathFunctionF
1063 gen_boilerplate: false
1066 gen_boilerplate: false
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
1092 - name: WasmBuiltinModD
1093 result_type: WordSized
1098 call_instruction: true
1102 gen_boilerplate: false
1105 gen_boilerplate: false
1108 gen_boilerplate: false
1111 gen_boilerplate: false
1114 gen_boilerplate: false
1117 gen_boilerplate: false
1119 - name: BigIntBitAnd
1120 gen_boilerplate: false
1123 gen_boilerplate: false
1125 - name: BigIntBitXor
1126 gen_boilerplate: false
1129 gen_boilerplate: false
1132 gen_boilerplate: false
1134 - name: BigIntIncrement
1135 gen_boilerplate: false
1137 - name: BigIntDecrement
1138 gen_boilerplate: false
1140 - name: BigIntNegate
1141 gen_boilerplate: false
1143 - name: BigIntBitNot
1144 gen_boilerplate: false
1146 - name: Int32ToStringWithBase
1147 result_type: WordSized
1154 - name: NumberParseInt
1155 result_type: BoxedValue
1160 call_instruction: true
1163 - name: DoubleParseInt
1164 result_type: WordSized
1170 # Adds two string, returning a string.
1172 result_type: WordSized
1178 # Linearize a string.
1179 - name: LinearizeString
1180 result_type: WordSized
1185 # Linearize a string before a character access.
1186 - name: LinearizeForCharAccess
1187 result_type: WordSized
1193 # Linearize a string before a code point access.
1194 - name: LinearizeForCodePointAccess
1195 result_type: WordSized
1202 # Get uint16 character code from a string.
1204 result_type: WordSized
1210 # Get uint16 character code from a string. Return -1 on out-of-bounds.
1211 - name: CharCodeAtOrNegative
1212 result_type: WordSized
1218 # Get uint32 code point from a string.
1220 result_type: WordSized
1226 # Get uint32 code point from a string. Return -1 on out-of-bounds.
1227 - name: CodePointAtOrNegative
1228 result_type: WordSized
1234 # Box the input if non-negative. Otherwise return NaN.
1235 - name: NegativeToNaN
1236 result_type: BoxedValue
1240 # Box the input if non-negative. Otherwise return undefined.
1241 - name: NegativeToUndefined
1242 result_type: BoxedValue
1246 # Convert uint16 character code to a string.
1247 - name: FromCharCode
1248 result_type: WordSized
1252 # Convert non-negative input as a uint16 character code to a string. If the
1253 # input is negative, return the empty string.
1254 - name: FromCharCodeEmptyIfNegative
1255 result_type: WordSized
1259 # Convert uint32 code point to a string.
1260 - name: FromCodePoint
1261 result_type: WordSized
1263 codePoint: WordSized
1266 # Test if a string includes the search string.
1267 - name: StringIncludes
1268 result_type: WordSized
1271 searchString: WordSized
1272 call_instruction: true
1274 # Test if a string includes the constant search string.
1275 - name: StringIncludesSIMD
1276 result_type: WordSized
1280 searchString: JSLinearString*
1283 # Search for the first index of the search string.
1284 - name: StringIndexOf
1285 result_type: WordSized
1288 searchString: WordSized
1289 call_instruction: true
1291 # Search for the first index of the constant search string.
1292 - name: StringIndexOfSIMD
1293 result_type: WordSized
1297 searchString: JSLinearString*
1300 # Search for the last index of the search string.
1301 - name: StringLastIndexOf
1302 result_type: WordSized
1305 searchString: WordSized
1306 call_instruction: true
1308 # Test if a string starts with the search string
1309 - name: StringStartsWith
1310 result_type: WordSized
1313 searchString: WordSized
1314 call_instruction: true
1316 # Test if a string starts with the constant search string
1317 - name: StringStartsWithInline
1318 result_type: WordSized
1322 searchString: JSLinearString*
1325 # Test if a string ends with the search string
1326 - name: StringEndsWith
1327 result_type: WordSized
1330 searchString: WordSized
1331 call_instruction: true
1333 # Test if a string ends with the constant search string
1334 - name: StringEndsWithInline
1335 result_type: WordSized
1339 searchString: JSLinearString*
1342 # Calls the ToLowerCase case conversion function. Inlines the case conversion
1344 - name: StringToLowerCase
1345 result_type: WordSized
1349 mir_op: StringConvertCase
1351 # Calls the ToLowerCase case conversion function. Inlines the case conversion
1353 - name: CharCodeToLowerCase
1354 result_type: WordSized
1358 mir_op: CharCodeConvertCase
1360 # Calls the ToUpperCase case conversion function.
1361 - name: StringToUpperCase
1362 result_type: WordSized
1365 call_instruction: true
1366 mir_op: StringConvertCase
1368 # Calls the ToUpperCase case conversion function. Inlines the case conversion
1370 - name: CharCodeToUpperCase
1371 result_type: WordSized
1375 mir_op: CharCodeConvertCase
1377 # Index of first non-whitespace character.
1378 - name: StringTrimStartIndex
1379 result_type: WordSized
1383 # Index of last non-whitespace character.
1384 - name: StringTrimEndIndex
1385 result_type: WordSized
1391 result_type: WordSized
1394 separator: WordSized
1395 call_instruction: true
1399 result_type: WordSized
1407 - name: Int32ToDouble
1408 result_type: WordSized
1412 - name: Float32ToDouble
1413 result_type: WordSized
1417 - name: DoubleToFloat32
1418 result_type: WordSized
1422 - name: Int32ToFloat32
1423 result_type: WordSized
1427 # Convert a value to a double.
1428 - name: ValueToDouble
1429 result_type: WordSized
1434 # Convert a value to a float32.
1435 - name: ValueToFloat32
1436 result_type: WordSized
1441 - name: ValueToInt32
1442 gen_boilerplate: false
1444 # Convert a value to a BigInt.
1445 - name: ValueToBigInt
1446 result_type: WordSized
1451 # Convert a double to an int32.
1452 # Input: floating-point Register
1453 # Output: 32-bit integer
1454 # Bailout: if the double cannot be converted to an integer.
1455 - name: DoubleToInt32
1456 result_type: WordSized
1459 mir_op: ToNumberInt32
1461 # Convert a float32 to an int32.
1462 # Input: floating-point Register
1463 # Output: 32-bit integer
1464 # Bailout: if the float32 cannot be converted to an integer.
1465 - name: Float32ToInt32
1466 result_type: WordSized
1469 mir_op: ToNumberInt32
1471 # Convert a double to a truncated int32.
1472 # Input: floating-point Register
1473 # Output: 32-bit integer
1474 - name: TruncateDToInt32
1475 result_type: WordSized
1479 mir_op: TruncateToInt32
1481 # Convert a double to a truncated int32 with instance offset because we need it
1482 # for the slow ool path.
1483 - name: WasmBuiltinTruncateDToInt32
1484 result_type: WordSized
1489 mir_op: WasmBuiltinTruncateToInt32
1491 # Convert a float32 to a truncated int32.
1492 # Input: floating-point Register
1493 # Output: 32-bit integer
1494 - name: TruncateFToInt32
1495 result_type: WordSized
1499 mir_op: TruncateToInt32
1501 # Convert a float32 to a truncated int32 with instance offset because we need
1502 # it for the slow ool path.
1503 - name: WasmBuiltinTruncateFToInt32
1504 result_type: WordSized
1509 mir_op: WasmBuiltinTruncateToInt32
1511 - name: WasmTruncateToInt32
1512 result_type: WordSized
1517 - name: WrapInt64ToInt32
1518 result_type: WordSized
1523 - name: ExtendInt32ToInt64
1529 # Convert a boolean value to a string.
1530 - name: BooleanToString
1531 result_type: WordSized
1536 # Convert an integer hosted on one definition to a string with a function call.
1538 result_type: WordSized
1543 # Convert a double hosted on one definition to a string with a function call.
1544 - name: DoubleToString
1545 result_type: WordSized
1551 # Convert a primitive to a string with a function call.
1552 - name: ValueToString
1553 result_type: WordSized
1560 gen_boilerplate: false
1563 result_type: WordSized
1570 gen_boilerplate: false
1572 # Materialize a Value stored in an interpreter frame for OSR.
1574 result_type: BoxedValue
1579 # Materialize a JSObject env chain stored in an interpreter frame for OSR.
1580 - name: OsrEnvironmentChain
1581 result_type: WordSized
1586 # Materialize a JSObject env chain stored in an interpreter frame for OSR.
1587 - name: OsrReturnValue
1588 result_type: BoxedValue
1593 - name: OsrArgumentsObject
1594 result_type: WordSized
1600 result_type: WordSized
1604 - name: RegExpMatcher
1605 result_type: BoxedValue
1609 lastIndex: WordSized
1610 call_instruction: true
1613 - name: RegExpSearcher
1614 result_type: WordSized
1618 lastIndex: WordSized
1619 call_instruction: true
1622 - name: RegExpSearcherLastLimit
1623 result_type: WordSized
1627 - name: RegExpExecMatch
1628 result_type: BoxedValue
1632 call_instruction: true
1636 - name: RegExpExecTest
1637 result_type: WordSized
1641 call_instruction: true
1645 - name: RegExpHasCaptureGroups
1646 result_type: WordSized
1652 - name: RegExpPrototypeOptimizable
1653 result_type: WordSized
1659 - name: RegExpInstanceOptimizable
1660 result_type: WordSized
1667 - name: GetFirstDollarIndex
1668 result_type: WordSized
1673 - name: StringReplace
1674 result_type: WordSized
1678 replacement: WordSized
1679 call_instruction: true
1682 - name: BinaryValueCache
1683 result_type: BoxedValue
1687 # Takes two temps: these are intended to be FloatReg0 and FloatReg1
1688 # to allow the actual cache code to safely clobber those values without
1693 - name: BinaryBoolCache
1694 result_type: WordSized
1698 # Takes two temps: these are intendend to be FloatReg0 and FloatReg1
1699 # To allow the actual cache code to safely clobber those values without
1705 result_type: BoxedValue
1710 - name: ModuleMetadata
1711 result_type: WordSized
1712 call_instruction: true
1715 - name: DynamicImport
1716 result_type: WordSized
1718 specifier: BoxedValue
1720 call_instruction: true
1724 result_type: WordSized
1726 environmentChain: WordSized
1730 - name: FunctionWithProto
1731 result_type: WordSized
1734 prototype: WordSized
1735 call_instruction: true
1739 result_type: WordSized
1743 call_instruction: true
1746 - name: KeepAliveObject
1750 - name: DebugEnterGCUnsafeRegion
1753 - name: DebugLeaveGCUnsafeRegion
1756 # Load the "slots" member out of a JSObject.
1757 # Input: JSObject pointer
1758 # Output: slots pointer
1760 result_type: WordSized
1764 # Load the "elements" member out of a JSObject.
1765 # Input: JSObject pointer
1766 # Output: elements pointer
1768 result_type: WordSized
1773 # Load the initialized length from an elements header.
1774 - name: InitializedLength
1775 result_type: WordSized
1779 # Store to the initialized length in an elements header. Note the input is an
1780 # *index*, one less than the desired initialized length.
1781 - name: SetInitializedLength
1786 # Load the length from an elements header.
1788 result_type: WordSized
1792 # Store to the length in an elements header. Note the input is an *index*,
1793 # one less than the desired length.
1794 - name: SetArrayLength
1799 # Load the "length" property of a function.
1800 - name: FunctionLength
1801 result_type: WordSized
1805 # Load the "name" property of a function.
1806 - name: FunctionName
1807 result_type: WordSized
1811 - name: GetNextEntryForIterator
1812 result_type: WordSized
1819 - name: ArrayBufferByteLength
1820 result_type: WordSized
1824 - name: ArrayBufferViewLength
1825 result_type: WordSized
1830 # Read the byteOffset of an array buffer view.
1831 - name: ArrayBufferViewByteOffset
1832 result_type: WordSized
1836 # Load an array buffer view's elements vector.
1837 - name: ArrayBufferViewElements
1838 result_type: WordSized
1842 # Return the element size of a typed array.
1843 - name: TypedArrayElementSize
1844 result_type: WordSized
1848 - name: GuardHasAttachedArrayBuffer
1853 # Double to IntPtr, eligible for accessing into a TypedArray or DataView. If
1854 # the index isn't exactly representable as an IntPtr, depending on the
1855 # supportOOB flag on the MIR instruction, either bail out or produce an IntPtr
1856 # which is equivalent to an OOB access.
1857 - name: GuardNumberToIntPtrIndex
1858 result_type: WordSized
1863 # Bailout if index >= length.
1870 - name: BoundsCheckRange
1871 gen_boilerplate: false
1873 # Bailout if index < minimum.
1874 - name: BoundsCheckLower
1879 - name: SpectreMaskIndex
1880 result_type: WordSized
1886 - name: LoadElementV
1887 gen_boilerplate: false
1890 result_type: WordSized
1894 initLength: WordSized
1897 - name: GuardElementNotHole
1902 - name: LoadElementHole
1903 gen_boilerplate: false
1905 - name: StoreElementV
1906 gen_boilerplate: false
1908 - name: StoreElementT
1909 gen_boilerplate: false
1911 - name: StoreHoleValueElement
1916 # Like LStoreElementV, but supports indexes >= initialized length.
1917 - name: StoreElementHoleV
1924 mir_op: StoreElementHole
1926 # Like LStoreElementT, but supports indexes >= initialized length.
1927 - name: StoreElementHoleT
1934 mir_op: StoreElementHole
1936 - name: ArrayPopShift
1937 gen_boilerplate: false
1940 result_type: WordSized
1948 result_type: WordSized
1954 call_instruction: true
1957 - name: ArgumentsSlice
1958 result_type: WordSized
1964 call_instruction: true
1967 - name: FrameArgumentsSlice
1968 result_type: WordSized
1975 - name: InlineArgumentsSlice
1976 gen_boilerplate: false
1978 - name: NormalizeSliceTerm
1979 result_type: WordSized
1986 result_type: WordSized
1989 separator: WordSized
1991 call_instruction: true
1995 result_type: WordSized
1999 call_instruction: true
2001 - name: ObjectKeysLength
2002 result_type: WordSized
2006 call_instruction: true
2008 - name: LoadUnboxedScalar
2009 result_type: WordSized
2016 - name: LoadUnboxedBigInt
2017 gen_boilerplate: false
2019 - name: LoadDataViewElement
2020 gen_boilerplate: false
2022 - name: LoadTypedArrayElementHole
2023 result_type: BoxedValue
2030 - name: LoadTypedArrayElementHoleBigInt
2031 gen_boilerplate: false
2033 - name: StoreUnboxedScalar
2040 - name: StoreUnboxedBigInt
2041 gen_boilerplate: false
2043 - name: StoreDataViewElement
2044 gen_boilerplate: false
2046 - name: StoreTypedArrayElementHole
2055 - name: StoreTypedArrayElementHoleBigInt
2056 gen_boilerplate: false
2058 - name: AtomicIsLockFree
2059 result_type: WordSized
2063 - name: CompareExchangeTypedArrayElement
2064 gen_boilerplate: false
2066 - name: AtomicExchangeTypedArrayElement
2067 gen_boilerplate: false
2069 - name: AtomicTypedArrayElementBinop
2070 gen_boilerplate: false
2072 - name: AtomicTypedArrayElementBinopForEffect
2073 gen_boilerplate: false
2075 - name: AtomicLoad64
2076 gen_boilerplate: false
2078 - name: AtomicStore64
2079 gen_boilerplate: false
2081 - name: CompareExchangeTypedArrayElement64
2082 gen_boilerplate: false
2084 - name: AtomicExchangeTypedArrayElement64
2085 gen_boilerplate: false
2087 - name: AtomicTypedArrayElementBinop64
2088 gen_boilerplate: false
2090 - name: AtomicTypedArrayElementBinopForEffect64
2091 gen_boilerplate: false
2093 - name: EffectiveAddress
2094 result_type: WordSized
2100 - name: ClampIToUint8
2101 result_type: WordSized
2105 - name: ClampDToUint8
2106 result_type: WordSized
2111 - name: ClampVToUint8
2112 result_type: WordSized
2116 mir_op: ClampToUint8
2118 - name: LoadScriptedProxyHandler
2119 result_type: BoxedValue
2125 - name: CheckScriptedProxyGetResult
2134 - name: IdToStringOrSymbol
2135 result_type: BoxedValue
2141 # Load a boxed value from an object's fixed slot.
2142 - name: LoadFixedSlotV
2143 result_type: BoxedValue
2146 mir_op: LoadFixedSlot
2148 # Load a boxed value from an object's fixed slot.
2149 # If it is a non-atom string, atomize it and update the slot.
2150 - name: LoadFixedSlotAndAtomize
2151 result_type: BoxedValue
2155 mir_op: LoadFixedSlot
2157 # Load a typed value from an object's fixed slot.
2158 - name: LoadFixedSlotT
2159 result_type: WordSized
2162 mir_op: LoadFixedSlot
2164 - name: LoadFixedSlotAndUnbox
2165 result_type: WordSized
2170 - name: LoadDynamicSlotAndUnbox
2171 result_type: WordSized
2176 - name: LoadElementAndUnbox
2177 result_type: WordSized
2183 - name: LoadFixedSlotUnboxAndAtomize
2184 result_type: WordSized
2187 mir_op: LoadFixedSlotAndUnbox
2189 - name: LoadDynamicSlotUnboxAndAtomize
2190 result_type: WordSized
2193 mir_op: LoadDynamicSlotAndUnbox
2195 - name: AddAndStoreSlot
2202 - name: AllocateAndStoreSlot
2207 call_instruction: true
2210 - name: AddSlotAndCallAddPropHook
2214 call_instruction: true
2217 # Store a boxed value to an object's fixed slot.
2218 - name: StoreFixedSlotV
2222 mir_op: StoreFixedSlot
2224 # Store a typed value to an object's fixed slot.
2225 - name: StoreFixedSlotT
2229 mir_op: StoreFixedSlot
2231 # Note, Name ICs always return a Value. There are no V/T variants.
2232 - name: GetNameCache
2233 result_type: BoxedValue
2239 - name: CallGetIntrinsicValue
2240 result_type: BoxedValue
2241 call_instruction: true
2244 - name: GetPropSuperCache
2245 result_type: BoxedValue
2248 receiver: BoxedValue
2252 # Patchable jump to stubs generated for a GetProperty cache, which loads a
2254 - name: GetPropertyCache
2255 result_type: BoxedValue
2261 - name: BindNameCache
2262 result_type: WordSized
2264 environmentChain: WordSized
2269 result_type: WordSized
2271 environmentChain: WordSized
2274 # Load a value from an object's dslots or a slots vector.
2275 - name: LoadDynamicSlotV
2276 result_type: BoxedValue
2279 mir_op: LoadDynamicSlot
2281 # Load a value from an object's dslots or a slots vector.
2282 # If it is a non-atom string, atomize it and update the slot.
2283 - name: LoadDynamicSlotAndAtomize
2284 result_type: BoxedValue
2288 mir_op: LoadDynamicSlot
2290 # Store a value to an object's dslots or a slots vector.
2291 - name: StoreDynamicSlotV
2295 mir_op: StoreDynamicSlot
2297 # Store a typed value to an object's dslots or a slots vector. This has a
2298 # few advantages over LStoreDynamicSlotV:
2299 # 1) We can bypass storing the type tag if the slot has the same type as
2301 # 2) Better Register allocation: we can store constants and FP regs directly
2302 # without requiring a second Register for the value.
2303 - name: StoreDynamicSlotT
2307 mir_op: StoreDynamicSlot
2309 # Read length field of a JSString*.
2310 - name: StringLength
2311 result_type: WordSized
2315 # Take the floor of a double precision number and converts it to an int32.
2316 # Implements Math.floor().
2318 result_type: WordSized
2322 # Take the floor of a single precision number and converts it to an int32.
2323 # Implements Math.floor().
2325 result_type: WordSized
2329 # Take the ceiling of a double precision number and converts it to an int32.
2330 # Implements Math.ceil().
2332 result_type: WordSized
2336 # Take the ceiling of a single precision number and converts it to an int32.
2337 # Implements Math.ceil().
2339 result_type: WordSized
2343 # Round a double precision number and converts it to an int32.
2344 # Implements Math.round().
2346 result_type: WordSized
2352 # Round a single precision number and converts it to an int32.
2353 # Implements Math.round().
2355 result_type: WordSized
2361 # Truncates a double precision number and converts it to an int32.
2362 # Implements Math.trunc().
2364 result_type: WordSized
2368 # Truncates a single precision number and converts it to an int32.
2369 # Implements Math.trunc().
2371 result_type: WordSized
2375 # Rounds a double precision number accordingly to mir()->roundingMode(),
2376 # and keeps a double output.
2378 result_type: WordSized
2383 # Rounds a single precision number accordingly to mir()->roundingMode(),
2384 # and keeps a single output.
2386 result_type: WordSized
2391 # Load a function's call environment.
2392 - name: FunctionEnvironment
2393 result_type: WordSized
2398 result_type: WordSized
2402 - name: HomeObjectSuperBase
2403 result_type: BoxedValue
2405 homeObject: WordSized
2407 - name: NewLexicalEnvironmentObject
2408 result_type: WordSized
2412 - name: NewClassBodyEnvironmentObject
2413 result_type: WordSized
2417 - name: NewVarEnvironmentObject
2418 result_type: WordSized
2422 - name: MegamorphicSetElement
2427 # On x86 we do not have enough registers to use 3 temps for this *and* take
2428 # five words worth of operands. Since it's 32-bit, though, we get two
2429 # registers from pushing `value`, which doesn't get used until the end
2430 # anyway. This is somewhat klunky, but oh well.
2431 #ifdef JS_CODEGEN_X86
2436 call_instruction: true
2439 - name: CallDeleteProperty
2440 result_type: WordSized
2443 call_instruction: true
2444 mir_op: DeleteProperty
2446 - name: CallDeleteElement
2447 result_type: WordSized
2451 call_instruction: true
2452 mir_op: DeleteElement
2454 - name: ObjectToIterator
2455 result_type: WordSized
2461 - name: ValueToIterator
2462 result_type: WordSized
2465 call_instruction: true
2466 mir_op: ValueToIterator
2468 - name: IteratorHasIndicesAndBranch
2469 gen_boilerplate: false
2471 - name: LoadSlotByIteratorIndex
2472 result_type: BoxedValue
2479 - name: StoreSlotByIteratorIndex
2487 # Patchable jump to stubs generated for a SetProperty cache.
2488 - name: SetPropertyCache
2493 # Takes an additional temp: this is intendend to be FloatReg0 to allow the
2494 # actual cache code to safely clobber that value without save and restore.
2498 - name: GetIteratorCache
2499 result_type: WordSized
2505 - name: OptimizeSpreadCallCache
2506 result_type: BoxedValue
2512 - name: IteratorMore
2513 result_type: BoxedValue
2519 - name: IsNoIterAndBranch
2520 gen_boilerplate: false
2528 - name: CloseIterCache
2534 - name: OptimizeGetIteratorCache
2535 result_type: WordSized
2541 # Read the number of actual arguments.
2542 - name: ArgumentsLength
2543 result_type: WordSized
2545 # Load a value from the actual arguments.
2546 - name: GetFrameArgument
2547 result_type: BoxedValue
2551 # Load a value from the actual arguments.
2552 # Returns undefined if |index| is larger-or-equals to |length|. Bails out if
2553 # |index| is negative.
2554 - name: GetFrameArgumentHole
2555 result_type: BoxedValue
2561 # Create the rest parameter.
2563 result_type: WordSized
2565 numActuals: WordSized
2567 call_instruction: true
2570 - name: Int32ToIntPtr
2571 result_type: WordSized
2576 - name: NonNegativeIntPtrToInt32
2577 result_type: WordSized
2581 - name: IntPtrToDouble
2582 result_type: WordSized
2586 - name: AdjustDataViewLength
2587 result_type: WordSized
2592 # Convert a Boolean to an Int64, following ToBigInt.
2593 - name: BooleanToInt64
2599 # Convert a String to an Int64, following ToBigInt.
2600 - name: StringToInt64
2606 # Simulate ToBigInt on a Value and produce a matching Int64.
2607 - name: ValueToInt64
2614 # Truncate a BigInt to an unboxed int64.
2615 - name: TruncateBigIntToInt64
2621 # Create a new BigInt* from an unboxed int64.
2622 - name: Int64ToBigInt
2623 result_type: WordSized
2629 # Generational write barrier used when writing an object to another object.
2630 - name: PostWriteBarrierO
2635 mir_op: PostWriteBarrier
2637 # Generational write barrier used when writing a string to an object.
2638 - name: PostWriteBarrierS
2643 mir_op: PostWriteBarrier
2645 # Generational write barrier used when writing a BigInt to an object.
2646 - name: PostWriteBarrierBI
2651 mir_op: PostWriteBarrier
2653 # Generational write barrier used when writing a value to another object.
2654 - name: PostWriteBarrierV
2659 mir_op: PostWriteBarrier
2661 # Generational write barrier used when writing an object to another object's
2663 - name: PostWriteElementBarrierO
2669 mir_op: PostWriteElementBarrier
2671 # Generational write barrier used when writing a string to an object's
2673 - name: PostWriteElementBarrierS
2679 mir_op: PostWriteElementBarrier
2681 # Generational write barrier used when writing a BigInt to an object's
2683 - name: PostWriteElementBarrierBI
2689 mir_op: PostWriteElementBarrier
2691 # Generational write barrier used when writing a value to another object's
2693 - name: PostWriteElementBarrierV
2699 mir_op: PostWriteElementBarrier
2701 # Assert in debug mode that a post write barrier can be elided.
2702 - name: AssertCanElidePostWriteBarrier
2708 # Guard against an object's identity.
2709 - name: GuardObjectIdentity
2715 # Guard against an function's identity.
2716 - name: GuardSpecificFunction
2721 - name: GuardSpecificAtom
2727 - name: GuardSpecificSymbol
2732 - name: GuardSpecificInt32
2737 - name: GuardStringToIndex
2738 result_type: WordSized
2742 - name: GuardStringToInt32
2743 result_type: WordSized
2748 - name: GuardStringToDouble
2749 result_type: WordSized
2755 result_type: WordSized
2761 - name: GuardMultipleShapes
2762 result_type: WordSized
2765 shapeList: WordSized
2775 - name: GuardNullProto
2780 - name: GuardIsNativeObject
2785 - name: GuardGlobalGeneration
2793 - name: GuardIsProxy
2798 - name: GuardIsNotProxy
2803 - name: GuardIsNotDOMProxy
2809 result_type: BoxedValue
2813 call_instruction: true
2816 - name: ProxyGetByValue
2817 result_type: BoxedValue
2821 call_instruction: true
2823 - name: ProxyHasProp
2824 result_type: BoxedValue
2828 call_instruction: true
2836 call_instruction: true
2839 - name: ProxySetByValue
2844 call_instruction: true
2847 - name: CallSetArrayLength
2851 call_instruction: true
2854 - name: MegamorphicLoadSlot
2855 result_type: BoxedValue
2859 call_instruction: true
2862 - name: MegamorphicLoadSlotByValue
2863 result_type: BoxedValue
2868 call_instruction: true
2871 - name: MegamorphicStoreSlot
2875 #ifdef JS_CODEGEN_X86
2880 call_instruction: true
2883 - name: MegamorphicHasProp
2884 result_type: WordSized
2889 call_instruction: true
2892 - name: GuardIsNotArrayBufferMaybeShared
2897 - name: GuardIsTypedArray
2902 - name: GuardHasProxyHandler
2907 - name: GuardNoDenseElements
2913 result_type: WordSized
2921 result_type: WordSized
2927 - name: CheckPrivateFieldCache
2928 result_type: WordSized
2934 - name: NewPrivateName
2935 result_type: WordSized
2936 call_instruction: true
2940 result_type: WordSized
2947 result_type: WordSized
2953 - name: InstanceOfCache
2954 gen_boilerplate: false
2957 result_type: WordSized
2963 result_type: WordSized
2969 - name: IsConstructor
2970 result_type: WordSized
2975 - name: IsCrossRealmArrayConstructor
2976 result_type: WordSized
2981 result_type: WordSized
2987 result_type: WordSized
2993 - name: IsTypedArray
2994 result_type: WordSized
3000 result_type: WordSized
3005 - name: IsObjectAndBranch
3006 gen_boilerplate: false
3008 - name: IsNullOrUndefined
3009 result_type: WordSized
3014 - name: IsNullOrUndefinedAndBranch
3015 gen_boilerplate: false
3018 result_type: WordSized
3023 - name: GuardToClass
3024 result_type: WordSized
3030 - name: GuardToFunction
3031 result_type: WordSized
3037 - name: ObjectClassToString
3038 result_type: WordSized
3042 call_instruction: true
3046 gen_boilerplate: false
3048 - name: WasmSelectI64
3049 gen_boilerplate: false
3051 - name: WasmCompareAndSelect
3052 gen_boilerplate: false
3054 - name: WasmAddOffset
3055 result_type: WordSized
3060 - name: WasmAddOffset64
3064 mir_op: WasmAddOffset
3066 - name: WasmBoundsCheck
3067 result_type: WordSized
3070 boundsCheckLimit: WordSized
3073 - name: WasmBoundsCheck64
3074 gen_boilerplate: false
3076 - name: WasmBoundsCheckRange32
3077 result_type: WordSized
3085 - name: WasmExtendU32Index
3086 result_type: WordSized
3091 - name: WasmWrapU32Index
3092 result_type: WordSized
3097 - name: WasmAlignmentCheck
3102 - name: WasmAlignmentCheck64
3105 mir_op: WasmAlignmentCheck
3107 - name: WasmLoadInstance
3108 result_type: WordSized
3113 - name: WasmLoadInstance64
3117 mir_op: WasmLoadInstance
3120 result_type: WordSized
3124 gen_boilerplate: false
3127 gen_boilerplate: false
3130 gen_boilerplate: false
3132 - name: WasmStoreI64
3133 gen_boilerplate: false
3135 - name: AsmJSLoadHeap
3136 result_type: WordSized
3139 boundsCheckLimit: WordSized
3140 memoryBase: WordSized
3143 - name: AsmJSStoreHeap
3144 result_type: WordSized
3148 boundsCheckLimit: WordSized
3149 memoryBase: WordSized
3152 - name: WasmCompareExchangeHeap
3153 gen_boilerplate: false
3157 - name: WasmAtomicExchangeHeap
3158 gen_boilerplate: false
3160 - name: WasmAtomicBinopHeap
3161 gen_boilerplate: false
3163 - name: WasmAtomicBinopHeapForEffect
3164 gen_boilerplate: false
3166 - name: WasmLoadSlot
3167 result_type: WordSized
3169 containerRef: WordSized
3173 wideningOp: MWideningOp
3174 maybeTrap: MaybeTrapSiteInfo
3176 - name: WasmLoadSlotI64
3179 containerRef: WordSized
3182 maybeTrap: MaybeTrapSiteInfo
3184 - name: WasmStoreSlot
3187 containerRef: WordSized
3191 narrowingOp: MNarrowingOp
3192 maybeTrap: MaybeTrapSiteInfo
3194 - name: WasmStoreSlotI64
3197 containerRef: WordSized
3200 maybeTrap: MaybeTrapSiteInfo
3202 - name: WasmLoadTableElement
3203 result_type: WordSized
3208 - name: WasmDerivedPointer
3209 gen_boilerplate: false
3211 - name: WasmDerivedIndexPointer
3212 gen_boilerplate: false
3214 - name: WasmStoreRef
3217 valueBase: WordSized
3221 maybeTrap: MaybeTrapSiteInfo
3222 preBarrierKind: WasmPreBarrierKind
3226 # Generational write barrier used when writing an object to another object.
3227 - name: WasmPostWriteBarrier
3231 valueBase: WordSized
3234 valueOffset: uint32_t
3238 - name: WasmParameter
3239 result_type: WordSized
3241 - name: WasmParameterI64
3242 gen_boilerplate: false
3249 - name: WasmReturnI64
3254 - name: WasmReturnVoid
3258 - name: WasmStackArg
3263 - name: WasmStackArgI64
3266 mir_op: WasmStackArg
3268 - name: WasmNullConstant
3269 result_type: WordSized
3271 - name: WasmCallIndirectAdjunctSafepoint
3272 gen_boilerplate: false
3275 gen_boilerplate: false
3277 - name: WasmCallLandingPrePad
3280 - name: WasmRegisterResult
3281 gen_boilerplate: false
3283 - name: WasmRegisterPairResult
3284 gen_boilerplate: false
3286 - name: WasmStackResultArea
3287 result_type: WordSized
3291 - name: WasmStackResult
3292 gen_boilerplate: false
3294 - name: WasmStackResult64
3295 gen_boilerplate: false
3297 - name: AssertRangeI
3298 gen_boilerplate: false
3300 - name: AssertRangeD
3301 gen_boilerplate: false
3303 - name: AssertRangeF
3304 gen_boilerplate: false
3306 - name: AssertRangeV
3307 gen_boilerplate: false
3325 - name: GuardNullOrUndefined
3330 - name: GuardIsNotObject
3335 - name: GuardFunctionFlags
3340 - name: GuardFunctionIsNonBuiltinCtor
3345 - name: GuardFunctionKind
3351 - name: GuardFunctionScript
3356 - name: IncrementWarmUpCounter
3360 - name: LexicalCheck
3365 - name: ThrowRuntimeLexicalError
3366 call_instruction: true
3370 call_instruction: true
3373 - name: GlobalDeclInstantiation
3376 - name: MemoryBarrier
3377 gen_boilerplate: false
3381 call_instruction: true
3384 result_type: BoxedValue
3387 gen_boilerplate: false
3390 result_type: BoxedValue
3392 returnValue: BoxedValue
3393 thisValue: BoxedValue
3396 result_type: WordSized
3401 - name: CheckObjCoercible
3405 - name: CheckClassHeritage
3407 heritage: BoxedValue
3414 - name: CheckThisReinit
3416 thisValue: BoxedValue
3419 result_type: WordSized
3422 environmentChain: WordSized
3423 argsObject: WordSized
3424 call_instruction: true
3427 - name: AsyncResolve
3428 result_type: WordSized
3430 generator: WordSized
3431 valueOrReason: BoxedValue
3432 call_instruction: true
3436 result_type: WordSized
3439 generator: WordSized
3440 call_instruction: true
3443 - name: CanSkipAwait
3444 result_type: WordSized
3447 call_instruction: true
3450 - name: MaybeExtractAwaitValue
3451 result_type: BoxedValue
3455 call_instruction: true
3458 - name: DebugCheckSelfHosted
3461 call_instruction: true
3463 - name: IsPackedArray
3464 result_type: WordSized
3469 - name: GuardArrayIsPacked
3475 - name: GetPrototypeOf
3476 result_type: BoxedValue
3480 - name: ObjectWithProto
3481 result_type: WordSized
3483 prototype: BoxedValue
3484 call_instruction: true
3486 - name: ObjectStaticProto
3487 result_type: WordSized
3491 - name: BuiltinObject
3492 result_type: WordSized
3493 call_instruction: true
3496 - name: SuperFunction
3497 result_type: BoxedValue
3502 - name: InitHomeObject
3503 result_type: WordSized
3506 homeObject: BoxedValue
3508 - name: IsTypedArrayConstructor
3509 result_type: WordSized
3513 - name: LoadValueTag
3514 result_type: WordSized
3518 - name: GuardTagNotEqual
3523 - name: LoadWrapperTarget
3524 result_type: WordSized
3528 - name: GuardHasGetterSetter
3532 call_instruction: true
3535 - name: GuardIsExtensible
3540 - name: GuardInt32IsNonNegative
3544 - name: GuardInt32Range
3549 - name: GuardIndexIsNotDenseElement
3555 - name: GuardIndexIsValidUpdateOrAdd
3561 - name: CallAddOrUpdateSparseElement
3566 call_instruction: true
3569 - name: CallGetSparseElement
3570 result_type: BoxedValue
3574 call_instruction: true
3576 - name: CallNativeGetElement
3577 result_type: BoxedValue
3581 call_instruction: true
3583 - name: CallNativeGetElementSuper
3584 result_type: BoxedValue
3588 receiver: BoxedValue
3589 call_instruction: true
3591 - name: CallObjectHasSparseElement
3592 result_type: WordSized
3597 call_instruction: true
3599 - name: BigIntAsIntN
3600 result_type: WordSized
3604 call_instruction: true
3606 - name: BigIntAsIntN64
3607 gen_boilerplate: false
3609 - name: BigIntAsIntN32
3610 gen_boilerplate: false
3612 - name: GuardNonGCThing
3616 - name: ToHashableNonGCThing
3617 result_type: BoxedValue
3622 - name: ToHashableString
3623 result_type: WordSized
3627 - name: ToHashableValue
3628 result_type: BoxedValue
3633 - name: HashNonGCThing
3634 result_type: WordSized
3640 result_type: WordSized
3646 result_type: WordSized
3651 result_type: WordSized
3657 result_type: WordSized
3659 setObject: WordSized
3664 result_type: WordSized
3666 setObject: WordSized
3670 - name: SetObjectHasNonBigInt
3671 result_type: WordSized
3673 setObject: WordSized
3678 - name: SetObjectHasBigInt
3679 result_type: WordSized
3681 setObject: WordSized
3686 - name: SetObjectHasValue
3687 result_type: WordSized
3689 setObject: WordSized
3694 - name: SetObjectHasValueVMCall
3695 result_type: WordSized
3696 call_instruction: true
3698 setObject: WordSized
3701 - name: SetObjectSize
3702 result_type: WordSized
3704 setObject: WordSized
3706 - name: MapObjectHasNonBigInt
3707 result_type: WordSized
3709 mapObject: WordSized
3714 - name: MapObjectHasBigInt
3715 result_type: WordSized
3717 mapObject: WordSized
3722 - name: MapObjectHasValue
3723 result_type: WordSized
3725 mapObject: WordSized
3730 - name: MapObjectHasValueVMCall
3731 result_type: WordSized
3732 call_instruction: true
3734 mapObject: WordSized
3737 - name: MapObjectGetNonBigInt
3738 result_type: BoxedValue
3740 mapObject: WordSized
3745 - name: MapObjectGetBigInt
3746 result_type: BoxedValue
3748 mapObject: WordSized
3753 - name: MapObjectGetValue
3754 result_type: BoxedValue
3756 mapObject: WordSized
3761 - name: MapObjectGetValueVMCall
3762 result_type: BoxedValue
3763 call_instruction: true
3765 mapObject: WordSized
3768 - name: MapObjectSize
3769 result_type: WordSized
3771 mapObject: WordSized
3773 - name: BigIntAsUintN
3774 result_type: WordSized
3778 call_instruction: true
3780 - name: BigIntAsUintN64
3781 gen_boilerplate: false
3783 - name: BigIntAsUintN32
3784 gen_boilerplate: false
3786 - name: IonToWasmCall
3787 gen_boilerplate: false
3789 - name: IonToWasmCallV
3790 gen_boilerplate: false
3792 - name: IonToWasmCallI64
3793 gen_boilerplate: false
3795 - name: WasmAnyRefFromJSValue
3796 result_type: WordSized
3801 - name: WasmAnyRefFromJSObject
3802 result_type: WordSized
3806 - name: WasmAnyRefFromJSString
3807 result_type: WordSized
3811 - name: WasmNewI31Ref
3813 result_type: WordSized
3817 - name: WasmI31RefGet
3819 result_type: WordSized
3825 result_type: WordSized
3827 simd128: SimdConstant
3829 - name: WasmTernarySimd128
3830 gen_boilerplate: false
3832 - name: WasmBinarySimd128
3833 gen_boilerplate: false
3835 - name: WasmBinarySimd128WithConstant
3836 gen_boilerplate: false
3838 - name: WasmVariableShiftSimd128
3839 gen_boilerplate: false
3841 - name: WasmConstantShiftSimd128
3842 gen_boilerplate: false
3844 - name: WasmSignReplicationSimd128
3845 gen_boilerplate: false
3847 - name: WasmShuffleSimd128
3848 gen_boilerplate: false
3850 - name: WasmPermuteSimd128
3851 gen_boilerplate: false
3853 - name: WasmReplaceLaneSimd128
3854 gen_boilerplate: false
3856 - name: WasmReplaceInt64LaneSimd128
3857 gen_boilerplate: false
3859 - name: WasmScalarToSimd128
3860 gen_boilerplate: false
3862 - name: WasmInt64ToSimd128
3863 gen_boilerplate: false
3865 - name: WasmUnarySimd128
3866 gen_boilerplate: false
3868 - name: WasmReduceSimd128
3869 gen_boilerplate: false
3871 - name: WasmReduceAndBranchSimd128
3872 gen_boilerplate: false
3874 - name: WasmReduceSimd128ToInt64
3875 gen_boilerplate: false
3877 - name: WasmLoadLaneSimd128
3878 gen_boilerplate: false
3880 - name: WasmStoreLaneSimd128
3881 gen_boilerplate: false
3884 gen_boilerplate: false
3886 - name: UnboxFloatingPoint
3887 gen_boilerplate: false
3889 - name: WasmUint32ToDouble
3890 gen_boilerplate: false
3892 - name: WasmUint32ToFloat32
3893 gen_boilerplate: false
3896 gen_boilerplate: false
3899 gen_boilerplate: false
3902 gen_boilerplate: false
3905 gen_boilerplate: false
3908 gen_boilerplate: false
3910 - name: TableSwitchV
3911 gen_boilerplate: false
3914 gen_boilerplate: false
3916 #ifdef JS_CODEGEN_X86
3917 - name: BoxFloatingPoint
3918 gen_boilerplate: false
3921 gen_boilerplate: false
3923 - name: UDivOrModI64
3924 gen_boilerplate: false
3926 - name: DivOrModConstantI
3927 gen_boilerplate: false
3930 gen_boilerplate: false
3932 - name: UDivOrModConstant
3933 gen_boilerplate: false
3935 - name: WasmTruncateToInt64
3936 gen_boilerplate: false
3938 - name: Int64ToFloatingPoint
3939 gen_boilerplate: false
3941 - name: WasmAtomicLoadI64
3942 gen_boilerplate: false
3944 - name: WasmAtomicStoreI64
3945 gen_boilerplate: false
3947 - name: WasmCompareExchangeI64
3948 gen_boilerplate: false
3950 - name: WasmAtomicBinopI64
3951 gen_boilerplate: false
3953 - name: WasmAtomicExchangeI64
3954 gen_boilerplate: false
3957 #ifdef JS_CODEGEN_X64
3959 gen_boilerplate: false
3961 - name: UDivOrModI64
3962 gen_boilerplate: false
3964 - name: DivOrModConstantI
3965 gen_boilerplate: false
3968 gen_boilerplate: false
3970 - name: UDivOrModConstant
3971 gen_boilerplate: false
3973 - name: WasmTruncateToInt64
3974 gen_boilerplate: false
3976 - name: Int64ToFloatingPoint
3977 gen_boilerplate: false
3980 #ifdef JS_CODEGEN_ARM
3981 - name: BoxFloatingPoint
3982 gen_boilerplate: false
3985 gen_boilerplate: false
3987 - name: UDivOrModI64
3988 gen_boilerplate: false
3991 gen_boilerplate: false
3994 gen_boilerplate: false
3997 gen_boilerplate: false
4000 gen_boilerplate: false
4003 gen_boilerplate: false
4005 - name: SoftUDivOrMod
4006 gen_boilerplate: false
4008 - name: Int64ToFloatingPointCall
4009 gen_boilerplate: false
4011 - name: WasmTruncateToInt64
4012 gen_boilerplate: false
4014 - name: WasmAtomicLoadI64
4015 gen_boilerplate: false
4017 - name: WasmAtomicStoreI64
4018 gen_boilerplate: false
4020 - name: WasmCompareExchangeI64
4021 gen_boilerplate: false
4023 - name: WasmAtomicBinopI64
4024 gen_boilerplate: false
4026 - name: WasmAtomicExchangeI64
4027 gen_boilerplate: false
4030 #ifdef JS_CODEGEN_ARM64
4032 gen_boilerplate: false
4034 - name: UDivOrModI64
4035 gen_boilerplate: false
4037 - name: DivConstantI
4038 gen_boilerplate: false
4040 - name: UDivConstantI
4041 gen_boilerplate: false
4044 gen_boilerplate: false
4047 gen_boilerplate: false
4050 gen_boilerplate: false
4052 - name: WasmTruncateToInt64
4053 gen_boilerplate: false
4055 - name: Int64ToFloatingPoint
4056 gen_boilerplate: false
4059 #ifdef JS_CODEGEN_MIPS32
4060 - name: BoxFloatingPoint
4061 gen_boilerplate: false
4064 gen_boilerplate: false
4066 - name: UDivOrModI64
4067 gen_boilerplate: false
4070 gen_boilerplate: false
4073 gen_boilerplate: false
4075 - name: WasmTruncateToInt64
4076 gen_boilerplate: false
4078 - name: Int64ToFloatingPoint
4079 gen_boilerplate: false
4081 - name: WasmUnalignedLoad
4082 gen_boilerplate: false
4084 - name: WasmUnalignedLoadI64
4085 gen_boilerplate: false
4087 - name: WasmUnalignedStore
4088 gen_boilerplate: false
4090 - name: WasmUnalignedStoreI64
4091 gen_boilerplate: false
4093 - name: WasmAtomicLoadI64
4094 gen_boilerplate: false
4096 - name: WasmAtomicStoreI64
4097 gen_boilerplate: false
4099 - name: WasmCompareExchangeI64
4100 gen_boilerplate: false
4102 - name: WasmAtomicBinopI64
4103 gen_boilerplate: false
4105 - name: WasmAtomicExchangeI64
4106 gen_boilerplate: false
4109 #ifdef JS_CODEGEN_MIPS64
4111 gen_boilerplate: false
4114 gen_boilerplate: false
4116 - name: UDivOrModI64
4117 gen_boilerplate: false
4120 gen_boilerplate: false
4122 - name: WasmTruncateToInt64
4123 gen_boilerplate: false
4125 - name: Int64ToFloatingPoint
4126 gen_boilerplate: false
4128 - name: WasmUnalignedLoad
4129 gen_boilerplate: false
4131 - name: WasmUnalignedLoadI64
4132 gen_boilerplate: false
4134 - name: WasmUnalignedStore
4135 gen_boilerplate: false
4137 - name: WasmUnalignedStoreI64
4138 gen_boilerplate: false
4140 - name: WasmCompareExchangeI64
4141 gen_boilerplate: false
4143 - name: WasmAtomicBinopI64
4144 gen_boilerplate: false
4146 - name: WasmAtomicExchangeI64
4147 gen_boilerplate: false
4150 #ifdef JS_CODEGEN_LOONG64
4152 gen_boilerplate: false
4155 gen_boilerplate: false
4157 - name: UDivOrModI64
4158 gen_boilerplate: false
4161 gen_boilerplate: false
4163 - name: WasmTruncateToInt64
4164 gen_boilerplate: false
4166 - name: Int64ToFloatingPoint
4167 gen_boilerplate: false
4169 - name: WasmCompareExchangeI64
4170 gen_boilerplate: false
4172 - name: WasmAtomicBinopI64
4173 gen_boilerplate: false
4175 - name: WasmAtomicExchangeI64
4176 gen_boilerplate: false
4179 #ifdef JS_CODEGEN_RISCV64
4181 gen_boilerplate: false
4184 gen_boilerplate: false
4186 - name: UDivOrModI64
4187 gen_boilerplate: false
4190 gen_boilerplate: false
4192 - name: WasmTruncateToInt64
4193 gen_boilerplate: false
4195 - name: Int64ToFloatingPoint
4196 gen_boilerplate: false
4198 - name: WasmCompareExchangeI64
4199 gen_boilerplate: false
4201 - name: WasmAtomicBinopI64
4202 gen_boilerplate: false
4204 - name: WasmAtomicExchangeI64
4205 gen_boilerplate: false
4208 #ifdef FUZZING_JS_FUZZILLI
4209 - name: FuzzilliHashT
4210 gen_boilerplate: false
4212 - name: FuzzilliHashV
4213 gen_boilerplate: false
4215 - name: FuzzilliHashStore
4216 gen_boilerplate: false