CacheIROps.yaml (67464B)
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/. 4 5 # [SMDOC] CacheIR Opcodes 6 # ======================= 7 # This file defines all CacheIR opcodes and their arguments. 8 # 9 # Each op has the following attributes: 10 # 11 # name 12 # ==== 13 # Opcode name. Convention is to use a name ending in *Result for ops that store 14 # to the IC's output register. 15 # 16 # shared 17 # ====== 18 # If true, Baseline and Ion use the same CacheIRCompiler code for this op. 19 # If false, the op must be implemented in both BaselineCacheIRCompiler and 20 # IonCacheIRCompiler. 21 # 22 # transpile 23 # ========= 24 # Whether this op can be transpiled to MIR by WarpCacheIRTranspiler. 25 # 26 # cost_estimate 27 # ========= 28 # Score of an individual CacheIR Opcode's contribution to the overall score for 29 # each stub. This score is based off of the cost of the masm calls made by the op's 30 # implementation. The higher the score the more costly the op is. 31 # 32 # How to decide the cost estimate for a CacheIROp: 33 # 0 points - Generates no code 34 # 1 point - 1-5 simple masm ops, no callVM or callWithABI 35 # 2 points - 5-20 masm ops, no callVM or callWithABI 36 # 3 points - 20+ masm ops, no callVM or callWithABI 37 # 4 points - callWithABI 38 # 5 points - callVM 39 # 6 points - more than one callWithABI or callVM 40 # 41 # In the case of the op not being shared, default to counting the Baseline 42 # implementation. 43 # 44 # If the cost estimate is different based off of what branch of a conditional 45 # is taken, assign the score of the branch with the highest cost. 46 # 47 # Note: 48 # Currently, the scoring is tentative. It is in place to provide an 49 # estimate for the cost of each op. The scoring will be refined. 50 # 51 # custom_writer (optional) 52 # ======================== 53 # If true, the generated CacheIRWriter method will be private and has a trailing 54 # '_'. This is useful for ops that need custom CacheIRWriter logic on top of the 55 # generated code. 56 # 57 # args 58 # ==== 59 # List of arguments encoded in the bytecode stream. There are three argument 60 # kinds: 61 # 62 # - Id (ObjId, ValId, ...): refers to either an IC input or a value defined by 63 # a previous CacheIR instruction. This is encoded as integer in the bytecode 64 # stream. 65 # 66 # - Field (ObjectField, StringField, ...): specific value is stored in the stub 67 # data and the bytecode stream stores the offset of this field. This means the 68 # CacheIR is not specialized for particular values and code can be shared. 69 # 70 # - Immediate (BoolImm, Int32Imm, JSOpImm, ...): a value baked directly into 71 # the bytecode stream. This is useful for bits of state that need to be 72 # available to all CacheIR compilers/transpilers. 73 # 74 # If there's an argument named 'result', the generated CacheIRWriter method will 75 # return a new OperandId of this type. 76 77 - name: ReturnFromIC 78 shared: false 79 transpile: true 80 cost_estimate: 1 81 args: 82 83 - name: GuardToObject 84 shared: true 85 transpile: true 86 cost_estimate: 1 87 custom_writer: true 88 args: 89 input: ValId 90 91 - name: GuardIsNullOrUndefined 92 shared: true 93 transpile: true 94 cost_estimate: 1 95 args: 96 input: ValId 97 98 - name: GuardIsNull 99 shared: true 100 transpile: true 101 cost_estimate: 1 102 args: 103 input: ValId 104 105 - name: GuardIsUndefined 106 shared: true 107 transpile: true 108 cost_estimate: 1 109 args: 110 input: ValId 111 112 - name: GuardIsNotUninitializedLexical 113 shared: true 114 transpile: true 115 cost_estimate: 1 116 args: 117 val: ValId 118 119 - name: GuardToBoolean 120 shared: true 121 transpile: true 122 cost_estimate: 1 123 custom_writer: true 124 args: 125 input: ValId 126 127 - name: GuardToString 128 shared: true 129 transpile: true 130 cost_estimate: 1 131 custom_writer: true 132 args: 133 input: ValId 134 135 - name: GuardToSymbol 136 shared: true 137 transpile: true 138 cost_estimate: 1 139 custom_writer: true 140 args: 141 input: ValId 142 143 - name: GuardToBigInt 144 shared: true 145 transpile: true 146 cost_estimate: 1 147 custom_writer: true 148 args: 149 input: ValId 150 151 - name: GuardIsNumber 152 shared: true 153 transpile: true 154 cost_estimate: 1 155 custom_writer: true 156 args: 157 input: ValId 158 159 - name: GuardToInt32 160 shared: true 161 transpile: true 162 cost_estimate: 1 163 custom_writer: true 164 args: 165 input: ValId 166 167 - name: GuardToNonGCThing 168 shared: true 169 transpile: true 170 cost_estimate: 1 171 args: 172 input: ValId 173 174 # If the Value is a boolean, convert it to int32. 175 - name: GuardBooleanToInt32 176 shared: true 177 transpile: true 178 cost_estimate: 1 179 args: 180 input: ValId 181 result: Int32Id 182 183 - name: GuardToInt32Index 184 shared: true 185 transpile: true 186 cost_estimate: 1 187 args: 188 input: ValId 189 result: Int32Id 190 191 - name: Int32ToIntPtr 192 shared: true 193 transpile: true 194 cost_estimate: 1 195 args: 196 input: Int32Id 197 result: IntPtrId 198 199 - name: GuardNumberToIntPtrIndex 200 shared: true 201 transpile: true 202 cost_estimate: 2 203 args: 204 input: NumberId 205 supportOOB: BoolImm 206 result: IntPtrId 207 208 - name: GuardToInt32ModUint32 209 shared: true 210 transpile: true 211 cost_estimate: 2 212 args: 213 input: ValId 214 result: Int32Id 215 216 - name: GuardToUint8Clamped 217 shared: true 218 transpile: true 219 cost_estimate: 2 220 args: 221 input: ValId 222 result: Int32Id 223 224 # Note: this doesn't accept doubles to avoid ambiguity about whether it includes 225 # int32 values. Use GuardIsNumber instead. 226 - name: GuardNonDoubleType 227 shared: true 228 transpile: true 229 cost_estimate: 1 230 args: 231 input: ValId 232 type: ValueTypeImm 233 234 - name: GuardShape 235 shared: false 236 transpile: true 237 cost_estimate: 1 238 args: 239 obj: ObjId 240 shape: WeakShapeField 241 242 - name: GuardMultipleShapes 243 shared: true 244 transpile: true 245 cost_estimate: 2 246 custom_writer: true 247 args: 248 obj: ObjId 249 shapes: ObjectField 250 251 - name: GuardMultipleShapesToOffset 252 shared: true 253 transpile: true 254 cost_estimate: 2 255 custom_writer: true 256 args: 257 obj: ObjId 258 shapes: ObjectField 259 result: Int32Id 260 261 - name: GuardProto 262 shared: false 263 transpile: true 264 cost_estimate: 1 265 args: 266 obj: ObjId 267 proto: WeakObjectField 268 269 - name: GuardNullProto 270 shared: true 271 transpile: true 272 cost_estimate: 1 273 args: 274 obj: ObjId 275 276 # Guard per GuardClassKind. 277 - name: GuardClass 278 shared: true 279 transpile: true 280 cost_estimate: 1 281 args: 282 obj: ObjId 283 kind: GuardClassKindImm 284 285 # Guard on a realm fuse. 286 - name: GuardFuse 287 shared: true 288 transpile: true 289 cost_estimate: 1 290 args: 291 fuseWord: RealmFuseIndexImm 292 293 # Guard on a runtime fuse. 294 - name: GuardRuntimeFuse 295 shared: true 296 transpile: true 297 cost_estimate: 1 298 args: 299 fuseWord: RuntimeFuseIndexImm 300 301 - name: GuardObjectFuseProperty 302 shared: true 303 transpile: true 304 cost_estimate: 1 305 args: 306 # These two fields are used in debug builds to check the object matches 307 # objFuseOwner. It also ensures the ObjectFuse outlives this IC stub. 308 obj: ObjId 309 objFuseOwner: WeakObjectField 310 # The ObjectFuse* and data used for the IC guard. 311 objFuse: RawPointerField 312 expectedGeneration: RawInt32Field 313 propIndex: RawInt32Field 314 propMask: RawInt32Field 315 # Whether IC code can use a fast path based on invalidatedConstantProperty_. 316 canUseFastPath: BoolImm 317 318 # Guard on an arbitrary JSClass. 319 - name: GuardAnyClass 320 shared: false 321 transpile: true 322 cost_estimate: 1 323 args: 324 obj: ObjId 325 clasp: RawPointerField 326 327 - name: GuardGlobalGeneration 328 shared: true 329 transpile: true 330 cost_estimate: 1 331 args: 332 expected: RawInt32Field 333 generationAddr: RawPointerField 334 335 - name: HasClassResult 336 shared: false 337 transpile: true 338 cost_estimate: 1 339 args: 340 obj: ObjId 341 clasp: RawPointerField 342 343 - name: HasShapeResult 344 shared: false 345 transpile: true 346 cost_estimate: 1 347 args: 348 obj: ObjId 349 shape: ShapeField 350 351 - name: CallRegExpMatcherResult 352 shared: false 353 transpile: true 354 cost_estimate: 5 355 args: 356 regexp: ObjId 357 input: StringId 358 lastIndex: Int32Id 359 stub: JitCodeField 360 361 - name: CallRegExpSearcherResult 362 shared: false 363 transpile: true 364 cost_estimate: 5 365 args: 366 regexp: ObjId 367 input: StringId 368 lastIndex: Int32Id 369 stub: JitCodeField 370 371 - name: RegExpSearcherLastLimitResult 372 shared: true 373 transpile: true 374 cost_estimate: 1 375 args: 376 377 - name: RegExpHasCaptureGroupsResult 378 shared: false 379 transpile: true 380 cost_estimate: 1 381 args: 382 regexp: ObjId 383 input: StringId 384 385 - name: RegExpBuiltinExecMatchResult 386 shared: false 387 transpile: true 388 cost_estimate: 5 389 args: 390 regexp: ObjId 391 input: StringId 392 stub: JitCodeField 393 394 - name: RegExpBuiltinExecTestResult 395 shared: false 396 transpile: true 397 cost_estimate: 5 398 args: 399 regexp: ObjId 400 input: StringId 401 stub: JitCodeField 402 403 - name: RegExpFlagResult 404 shared: true 405 transpile: true 406 cost_estimate: 2 407 args: 408 regexp: ObjId 409 flagsMask: Int32Imm 410 411 - name: CallSubstringKernelResult 412 shared: true 413 transpile: true 414 cost_estimate: 5 415 args: 416 str: StringId 417 begin: Int32Id 418 length: Int32Id 419 420 - name: StringReplaceStringResult 421 shared: true 422 transpile: true 423 cost_estimate: 5 424 args: 425 str: StringId 426 pattern: StringId 427 replacement: StringId 428 429 - name: StringSplitStringResult 430 shared: true 431 transpile: true 432 cost_estimate: 5 433 args: 434 str: StringId 435 separator: StringId 436 437 - name: GetFirstDollarIndexResult 438 shared: true 439 transpile: true 440 cost_estimate: 5 441 args: 442 str: StringId 443 444 # Add a reference to a global in the compartment to keep it alive. 445 - name: GuardCompartment 446 shared: false 447 transpile: false 448 cost_estimate: 2 449 args: 450 obj: ObjId 451 global: ObjectField 452 compartment: RawPointerField 453 454 - name: GuardIsExtensible 455 shared: true 456 transpile: true 457 cost_estimate: 1 458 args: 459 obj: ObjId 460 461 - name: GuardIsNativeObject 462 shared: true 463 transpile: true 464 cost_estimate: 1 465 args: 466 obj: ObjId 467 468 - name: GuardIsProxy 469 shared: true 470 transpile: true 471 cost_estimate: 1 472 args: 473 obj: ObjId 474 475 - name: GuardIsNotProxy 476 shared: true 477 transpile: true 478 cost_estimate: 1 479 args: 480 obj: ObjId 481 482 - name: GuardToArrayBuffer 483 shared: true 484 transpile: true 485 cost_estimate: 1 486 args: 487 obj: ObjId 488 489 - name: GuardToSharedArrayBuffer 490 shared: true 491 transpile: true 492 cost_estimate: 1 493 args: 494 obj: ObjId 495 496 - name: GuardIsNotArrayBufferMaybeShared 497 shared: true 498 transpile: true 499 cost_estimate: 1 500 args: 501 obj: ObjId 502 503 - name: GuardIsTypedArray 504 shared: true 505 transpile: true 506 cost_estimate: 1 507 args: 508 obj: ObjId 509 510 - name: GuardIsNonResizableTypedArray 511 shared: true 512 transpile: true 513 cost_estimate: 1 514 args: 515 obj: ObjId 516 517 - name: GuardIsResizableTypedArray 518 shared: true 519 transpile: true 520 cost_estimate: 1 521 args: 522 obj: ObjId 523 524 - name: GuardHasProxyHandler 525 shared: false 526 transpile: true 527 cost_estimate: 1 528 args: 529 obj: ObjId 530 handler: RawPointerField 531 532 - name: GuardIsNotDOMProxy 533 shared: true 534 transpile: true 535 cost_estimate: 1 536 args: 537 obj: ObjId 538 539 - name: GuardSpecificObject 540 shared: false 541 transpile: true 542 cost_estimate: 1 543 args: 544 obj: ObjId 545 expected: WeakObjectField 546 547 - name: GuardObjectIdentity 548 shared: true 549 transpile: true 550 cost_estimate: 1 551 args: 552 obj1: ObjId 553 obj2: ObjId 554 555 - name: GuardSpecificFunction 556 shared: false 557 transpile: true 558 cost_estimate: 1 559 custom_writer: true 560 args: 561 fun: ObjId 562 expected: WeakObjectField 563 nargsAndFlags: RawInt32Field 564 565 - name: GuardFunctionScript 566 shared: false 567 transpile: true 568 cost_estimate: 1 569 custom_writer: true 570 args: 571 obj: ObjId 572 expected: WeakBaseScriptField 573 nargsAndFlags: RawInt32Field 574 575 - name: GuardSpecificAtom 576 shared: false 577 transpile: true 578 cost_estimate: 4 579 args: 580 str: StringId 581 expected: AtomField 582 583 - name: GuardSpecificSymbol 584 shared: false 585 transpile: true 586 cost_estimate: 1 587 args: 588 sym: SymbolId 589 expected: SymbolField 590 591 - name: GuardSpecificInt32 592 shared: true 593 transpile: true 594 cost_estimate: 1 595 args: 596 num: Int32Id 597 expected: Int32Imm 598 599 - name: GuardSpecificValue 600 shared: false 601 transpile: true 602 cost_estimate: 1 603 args: 604 val: ValId 605 expected: ValueField 606 607 - name: GuardNoDenseElements 608 shared: true 609 transpile: true 610 cost_estimate: 1 611 args: 612 obj: ObjId 613 614 - name: GuardStringToIndex 615 shared: true 616 transpile: true 617 cost_estimate: 4 618 args: 619 str: StringId 620 result: Int32Id 621 622 - name: GuardStringToInt32 623 shared: true 624 transpile: true 625 cost_estimate: 4 626 args: 627 str: StringId 628 result: Int32Id 629 630 - name: GuardStringToNumber 631 shared: true 632 transpile: true 633 cost_estimate: 4 634 args: 635 str: StringId 636 result: NumberId 637 638 - name: StringToAtom 639 shared: true 640 transpile: true 641 custom_writer: true 642 cost_estimate: 4 643 args: 644 str: StringId 645 646 - name: BooleanToNumber 647 shared: true 648 transpile: true 649 cost_estimate: 1 650 args: 651 boolean: BooleanId 652 result: NumberId 653 654 # Load the getter or setter out of a GetterSetter. 655 # Fails if it is null. 656 - name: LoadGetterSetterFunction 657 shared: true 658 transpile: true 659 cost_estimate: 1 660 args: 661 getterSetter: ValId 662 isGetter: BoolImm 663 needsClassGuard: BoolImm 664 result: ObjId 665 666 - name: GuardHasGetterSetter 667 shared: true 668 transpile: true 669 cost_estimate: 4 670 args: 671 obj: ObjId 672 id: IdField 673 # The expected GetterSetter* stored as PrivateGCThingValue. 674 getterSetter: WeakValueField 675 676 - name: GuardInt32IsNonNegative 677 shared: true 678 transpile: true 679 cost_estimate: 1 680 args: 681 index: Int32Id 682 683 - name: GuardIntPtrIsNonNegative 684 shared: true 685 transpile: true 686 cost_estimate: 1 687 args: 688 index: IntPtrId 689 690 - name: GuardIndexIsValidUpdateOrAdd 691 shared: true 692 transpile: true 693 cost_estimate: 1 694 args: 695 obj: ObjId 696 index: Int32Id 697 698 - name: GuardIndexIsNotDenseElement 699 shared: true 700 transpile: true 701 cost_estimate: 1 702 args: 703 obj: ObjId 704 index: Int32Id 705 706 - name: GuardTagNotEqual 707 shared: true 708 transpile: true 709 cost_estimate: 1 710 args: 711 lhs: ValueTagId 712 rhs: ValueTagId 713 714 - name: GuardXrayExpandoShapeAndDefaultProto 715 shared: true 716 transpile: false 717 cost_estimate: 2 718 args: 719 obj: ObjId 720 shapeWrapper: ObjectField 721 722 - name: GuardXrayNoExpando 723 shared: true 724 transpile: false 725 cost_estimate: 2 726 args: 727 obj: ObjId 728 729 # Guard obj[slot] == expected. 730 - name: GuardDynamicSlotIsSpecificObject 731 shared: true 732 transpile: true 733 cost_estimate: 1 734 args: 735 obj: ObjId 736 expected: ObjId 737 slot: RawInt32Field 738 739 # Guard obj[slot] is not an object. 740 - name: GuardDynamicSlotIsNotObject 741 shared: true 742 transpile: true 743 cost_estimate: 1 744 args: 745 obj: ObjId 746 slot: RawInt32Field 747 748 - name: GuardFixedSlotValue 749 shared: true 750 transpile: true 751 cost_estimate: 1 752 args: 753 obj: ObjId 754 offset: RawInt32Field 755 val: ValueField 756 757 - name: GuardDynamicSlotValue 758 shared: true 759 transpile: true 760 cost_estimate: 1 761 args: 762 obj: ObjId 763 offset: RawInt32Field 764 val: ValueField 765 766 - name: CheckWeakValueResultForFixedSlot 767 shared: true 768 transpile: true 769 cost_estimate: 1 770 args: 771 obj: ObjId 772 offset: RawInt32Field 773 val: WeakValueField 774 775 - name: CheckWeakValueResultForDynamicSlot 776 shared: true 777 transpile: true 778 cost_estimate: 1 779 args: 780 obj: ObjId 781 offset: RawInt32Field 782 val: WeakValueField 783 784 - name: LoadScriptedProxyHandler 785 shared: true 786 transpile: true 787 cost_estimate: 1 788 args: 789 result: ObjId 790 obj: ObjId 791 792 - name: IdToStringOrSymbol 793 shared: true 794 transpile: true 795 cost_estimate: 2 796 args: 797 result: ValId 798 id: ValId 799 800 - name: LoadFixedSlot 801 shared: true 802 transpile: true 803 cost_estimate: 1 804 args: 805 result: ValId 806 obj: ObjId 807 offset: RawInt32Field 808 809 - name: LoadFixedSlotFromOffsetResult 810 shared: true 811 transpile: true 812 cost_estimate: 2 813 args: 814 obj: ObjId 815 offset: Int32Id 816 817 - name: StoreFixedSlotFromOffset 818 shared: true 819 transpile: true 820 cost_estimate: 6 821 args: 822 obj: ObjId 823 offset: Int32Id 824 rhs: ValId 825 826 - name: StoreDynamicSlotFromOffset 827 shared: true 828 transpile: true 829 cost_estimate: 6 830 args: 831 obj: ObjId 832 offset: Int32Id 833 rhs: ValId 834 835 - name: LoadDynamicSlot 836 shared: true 837 transpile: true 838 cost_estimate: 1 839 args: 840 result: ValId 841 obj: ObjId 842 slot: RawInt32Field 843 844 - name: LoadDynamicSlotFromOffsetResult 845 shared: true 846 transpile: true 847 cost_estimate: 2 848 args: 849 obj: ObjId 850 offset: Int32Id 851 852 - name: GuardNoAllocationMetadataBuilder 853 shared: true 854 transpile: true 855 cost_estimate: 1 856 args: 857 builderAddr: RawPointerField 858 859 - name: GuardFunctionHasJitEntry 860 shared: true 861 transpile: true 862 cost_estimate: 1 863 args: 864 fun: ObjId 865 866 - name: GuardFunctionHasNoJitEntry 867 shared: true 868 transpile: true 869 cost_estimate: 1 870 args: 871 fun: ObjId 872 873 - name: GuardFunctionIsNonBuiltinCtor 874 shared: true 875 transpile: true 876 cost_estimate: 1 877 args: 878 fun: ObjId 879 880 - name: GuardFunctionIsConstructor 881 shared: true 882 transpile: true 883 cost_estimate: 1 884 args: 885 fun: ObjId 886 887 - name: GuardNotClassConstructor 888 shared: true 889 transpile: true 890 cost_estimate: 1 891 args: 892 fun: ObjId 893 894 - name: GuardArrayIsPacked 895 shared: true 896 transpile: true 897 cost_estimate: 1 898 args: 899 array: ObjId 900 901 - name: GuardArgumentsObjectFlags 902 shared: true 903 transpile: true 904 cost_estimate: 1 905 args: 906 obj: ObjId 907 flags: ByteImm 908 909 # Guard cx->realm() == obj->realm(). 910 - name: GuardObjectHasSameRealm 911 shared: true 912 transpile: true 913 cost_estimate: 1 914 args: 915 obj: ObjId 916 917 - name: LoadObject 918 shared: true 919 transpile: true 920 cost_estimate: 1 921 args: 922 result: ObjId 923 obj: ObjectField 924 925 # This is just LoadObject with extra information for the purpose of optimizing 926 # out shape guards if we're just storing to slots of the receiver object. 927 - name: LoadProtoObject 928 shared: true 929 transpile: true 930 cost_estimate: 1 931 args: 932 result: ObjId 933 protoObj: ObjectField 934 receiverObj: ObjId 935 936 - name: LoadProto 937 shared: true 938 transpile: true 939 cost_estimate: 1 940 args: 941 obj: ObjId 942 result: ObjId 943 944 - name: LoadEnclosingEnvironment 945 shared: true 946 transpile: true 947 cost_estimate: 1 948 args: 949 obj: ObjId 950 result: ObjId 951 952 - name: LoadWrapperTarget 953 shared: true 954 transpile: true 955 cost_estimate: 1 956 args: 957 obj: ObjId 958 result: ObjId 959 fallible: BoolImm 960 961 - name: LoadValueTag 962 shared: true 963 transpile: true 964 cost_estimate: 1 965 args: 966 val: ValId 967 result: ValueTagId 968 969 - name: LoadArgumentFixedSlot 970 shared: false 971 transpile: true 972 cost_estimate: 1 973 custom_writer: true 974 args: 975 result: ValId 976 slotIndex: ByteImm 977 978 - name: LoadArgumentDynamicSlot 979 shared: false 980 transpile: true 981 cost_estimate: 1 982 custom_writer: true 983 args: 984 result: ValId 985 argc: Int32Id 986 slotIndex: ByteImm 987 988 - name: TruncateDoubleToUInt32 989 shared: true 990 transpile: true 991 cost_estimate: 4 992 args: 993 input: NumberId 994 result: Int32Id 995 996 - name: DoubleToUint8Clamped 997 shared: true 998 transpile: true 999 cost_estimate: 2 1000 args: 1001 input: NumberId 1002 result: Int32Id 1003 1004 - name: MegamorphicLoadSlotResult 1005 shared: true 1006 transpile: true 1007 cost_estimate: 4 1008 args: 1009 obj: ObjId 1010 name: IdField 1011 1012 - name: MegamorphicLoadSlotByValueResult 1013 shared: true 1014 transpile: true 1015 cost_estimate: 4 1016 args: 1017 obj: ObjId 1018 id: ValId 1019 1020 - name: MegamorphicLoadSlotPermissiveResult 1021 shared: true 1022 transpile: true 1023 cost_estimate: 4 1024 args: 1025 obj: ObjId 1026 name: IdField 1027 1028 - name: MegamorphicLoadSlotByValuePermissiveResult 1029 shared: true 1030 transpile: true 1031 cost_estimate: 4 1032 args: 1033 obj: ObjId 1034 id: ValId 1035 1036 - name: MegamorphicStoreSlot 1037 shared: true 1038 transpile: true 1039 cost_estimate: 5 1040 args: 1041 obj: ObjId 1042 name: IdField 1043 rhs: ValId 1044 strict: BoolImm 1045 1046 - name: MegamorphicSetElement 1047 shared: false 1048 transpile: true 1049 cost_estimate: 5 1050 args: 1051 obj: ObjId 1052 id: ValId 1053 rhs: ValId 1054 strict: BoolImm 1055 1056 - name: MegamorphicHasPropResult 1057 shared: true 1058 transpile: true 1059 cost_estimate: 4 1060 args: 1061 obj: ObjId 1062 id: ValId 1063 hasOwn: BoolImm 1064 1065 # For the case where we have an object with a small number of properties, 1066 # we can do better than a megamorphic hasprop if we just run through those 1067 # IDs and check for atom pointer equality. 1068 - name: SmallObjectVariableKeyHasOwnResult 1069 shared: true 1070 transpile: true 1071 cost_estimate: 4 1072 args: 1073 # We don't actually need the object, because we only care about the shape, 1074 # which was guarded before this 1075 id: StringId 1076 # We include the prop names to speed up and simplify the Baseline case, 1077 # but only the shape is used from Ion to achieve an unrolled loop with 1078 # comparisons to known atoms 1079 propNames: ObjectField 1080 shape: ShapeField 1081 1082 - name: ObjectToIteratorResult 1083 shared: true 1084 transpile: true 1085 cost_estimate: 5 1086 args: 1087 obj: ObjId 1088 enumeratorsAddr: RawPointerField 1089 1090 - name: ValueToIteratorResult 1091 shared: true 1092 transpile: true 1093 cost_estimate: 5 1094 args: 1095 val: ValId 1096 1097 # See CacheIR.cpp 'DOM proxies' comment. 1098 - name: LoadDOMExpandoValue 1099 shared: true 1100 transpile: true 1101 cost_estimate: 1 1102 args: 1103 obj: ObjId 1104 result: ValId 1105 1106 - name: LoadDOMExpandoValueGuardGeneration 1107 shared: false 1108 transpile: true 1109 cost_estimate: 2 1110 args: 1111 obj: ObjId 1112 expandoAndGeneration: RawPointerField 1113 generation: RawInt64Field 1114 result: ValId 1115 1116 - name: LoadDOMExpandoValueIgnoreGeneration 1117 shared: true 1118 transpile: true 1119 cost_estimate: 1 1120 args: 1121 obj: ObjId 1122 result: ValId 1123 1124 - name: GuardDOMExpandoMissingOrGuardShape 1125 shared: false 1126 transpile: true 1127 cost_estimate: 2 1128 args: 1129 expando: ValId 1130 shape: ShapeField 1131 1132 - name: StoreFixedSlot 1133 shared: false 1134 transpile: true 1135 cost_estimate: 6 1136 args: 1137 obj: ObjId 1138 offset: RawInt32Field 1139 rhs: ValId 1140 1141 - name: StoreDynamicSlot 1142 shared: false 1143 transpile: true 1144 cost_estimate: 6 1145 args: 1146 obj: ObjId 1147 offset: RawInt32Field 1148 rhs: ValId 1149 1150 - name: AddAndStoreFixedSlot 1151 shared: false 1152 transpile: true 1153 cost_estimate: 6 1154 args: 1155 obj: ObjId 1156 offset: RawInt32Field 1157 rhs: ValId 1158 newShape: ShapeField 1159 preserveWrapper: BoolImm 1160 1161 - name: AddAndStoreDynamicSlot 1162 shared: false 1163 transpile: true 1164 cost_estimate: 6 1165 args: 1166 obj: ObjId 1167 offset: RawInt32Field 1168 rhs: ValId 1169 newShape: ShapeField 1170 preserveWrapper: BoolImm 1171 1172 - name: AllocateAndStoreDynamicSlot 1173 shared: false 1174 transpile: true 1175 cost_estimate: 6 1176 args: 1177 obj: ObjId 1178 offset: RawInt32Field 1179 rhs: ValId 1180 newShape: ShapeField 1181 numNewSlots: RawInt32Field 1182 preserveWrapper: BoolImm 1183 1184 - name: AddSlotAndCallAddPropHook 1185 shared: true 1186 transpile: true 1187 cost_estimate: 6 1188 args: 1189 obj: ObjId 1190 rhs: ValId 1191 newShape: ShapeField 1192 1193 - name: StoreDenseElement 1194 shared: true 1195 transpile: true 1196 cost_estimate: 6 1197 args: 1198 obj: ObjId 1199 index: Int32Id 1200 rhs: ValId 1201 expectPackedElements: BoolImm 1202 1203 - name: StoreDenseElementHole 1204 shared: true 1205 transpile: true 1206 cost_estimate: 6 1207 args: 1208 obj: ObjId 1209 index: Int32Id 1210 rhs: ValId 1211 handleAdd: BoolImm 1212 1213 - name: ArrayPush 1214 shared: true 1215 transpile: true 1216 cost_estimate: 6 1217 args: 1218 obj: ObjId 1219 rhs: ValId 1220 1221 - name: ArrayJoinResult 1222 shared: true 1223 transpile: true 1224 cost_estimate: 5 1225 args: 1226 obj: ObjId 1227 sep: StringId 1228 1229 - name: ObjectKeysResult 1230 shared: true 1231 transpile: true 1232 cost_estimate: 6 1233 args: 1234 obj: ObjId 1235 resultShape: ShapeField 1236 1237 - name: PackedArrayPopResult 1238 shared: true 1239 transpile: true 1240 cost_estimate: 2 1241 args: 1242 array: ObjId 1243 1244 - name: PackedArrayShiftResult 1245 shared: true 1246 transpile: true 1247 cost_estimate: 4 1248 args: 1249 array: ObjId 1250 1251 - name: PackedArraySliceResult 1252 shared: true 1253 transpile: true 1254 cost_estimate: 5 1255 args: 1256 templateObject: ObjectField 1257 array: ObjId 1258 begin: Int32Id 1259 end: Int32Id 1260 1261 - name: ArgumentsSliceResult 1262 shared: true 1263 transpile: true 1264 cost_estimate: 5 1265 args: 1266 templateObject: ObjectField 1267 args: ObjId 1268 begin: Int32Id 1269 end: Int32Id 1270 1271 - name: IsArrayResult 1272 shared: false 1273 transpile: true 1274 cost_estimate: 5 1275 args: 1276 input: ValId 1277 1278 - name: StoreFixedSlotUndefinedResult 1279 shared: true 1280 transpile: true 1281 args: 1282 obj: ObjId 1283 offset: RawInt32Field 1284 rhs: ValId 1285 1286 - name: IsObjectResult 1287 shared: true 1288 transpile: true 1289 cost_estimate: 1 1290 args: 1291 input: ValId 1292 1293 - name: IsPackedArrayResult 1294 shared: true 1295 transpile: true 1296 cost_estimate: 2 1297 args: 1298 obj: ObjId 1299 1300 - name: IsCallableResult 1301 shared: true 1302 transpile: true 1303 cost_estimate: 4 1304 args: 1305 input: ValId 1306 1307 - name: IsConstructorResult 1308 shared: true 1309 transpile: true 1310 cost_estimate: 4 1311 args: 1312 obj: ObjId 1313 1314 - name: IsCrossRealmArrayConstructorResult 1315 shared: true 1316 transpile: true 1317 cost_estimate: 2 1318 args: 1319 obj: ObjId 1320 1321 - name: IsTypedArrayResult 1322 shared: false 1323 transpile: true 1324 cost_estimate: 5 1325 args: 1326 obj: ObjId 1327 isPossiblyWrapped: BoolImm 1328 1329 - name: IsTypedArrayConstructorResult 1330 shared: true 1331 transpile: true 1332 cost_estimate: 2 1333 args: 1334 obj: ObjId 1335 1336 - name: ArrayBufferViewByteOffsetInt32Result 1337 shared: true 1338 transpile: true 1339 cost_estimate: 1 1340 args: 1341 obj: ObjId 1342 1343 - name: ArrayBufferViewByteOffsetDoubleResult 1344 shared: true 1345 transpile: true 1346 cost_estimate: 1 1347 args: 1348 obj: ObjId 1349 1350 - name: TypedArrayByteLengthInt32Result 1351 shared: true 1352 transpile: true 1353 cost_estimate: 2 1354 args: 1355 obj: ObjId 1356 1357 - name: TypedArrayByteLengthDoubleResult 1358 shared: true 1359 transpile: true 1360 cost_estimate: 2 1361 args: 1362 obj: ObjId 1363 1364 - name: ResizableTypedArrayByteLengthInt32Result 1365 shared: true 1366 transpile: true 1367 cost_estimate: 2 1368 args: 1369 obj: ObjId 1370 1371 - name: ResizableTypedArrayByteLengthDoubleResult 1372 shared: true 1373 transpile: true 1374 cost_estimate: 2 1375 args: 1376 obj: ObjId 1377 1378 - name: ResizableTypedArrayLengthInt32Result 1379 shared: true 1380 transpile: true 1381 cost_estimate: 2 1382 args: 1383 obj: ObjId 1384 1385 - name: ResizableTypedArrayLengthDoubleResult 1386 shared: true 1387 transpile: true 1388 cost_estimate: 2 1389 args: 1390 obj: ObjId 1391 1392 - name: ResizableDataViewByteLengthInt32Result 1393 shared: true 1394 transpile: true 1395 cost_estimate: 2 1396 args: 1397 obj: ObjId 1398 1399 - name: ResizableDataViewByteLengthDoubleResult 1400 shared: true 1401 transpile: true 1402 cost_estimate: 2 1403 args: 1404 obj: ObjId 1405 1406 - name: GrowableSharedArrayBufferByteLengthInt32Result 1407 shared: true 1408 transpile: true 1409 cost_estimate: 2 1410 args: 1411 obj: ObjId 1412 1413 - name: GrowableSharedArrayBufferByteLengthDoubleResult 1414 shared: true 1415 transpile: true 1416 cost_estimate: 2 1417 args: 1418 obj: ObjId 1419 1420 - name: GuardHasAttachedArrayBuffer 1421 shared: true 1422 transpile: true 1423 cost_estimate: 2 1424 args: 1425 obj: ObjId 1426 1427 - name: GuardResizableArrayBufferViewInBounds 1428 shared: true 1429 transpile: true 1430 cost_estimate: 2 1431 args: 1432 obj: ObjId 1433 1434 - name: GuardResizableArrayBufferViewInBoundsOrDetached 1435 shared: true 1436 transpile: true 1437 cost_estimate: 2 1438 args: 1439 obj: ObjId 1440 1441 - name: TypedArrayFillResult 1442 shared: true 1443 transpile: true 1444 cost_estimate: 4 1445 args: 1446 obj: ObjId 1447 fillValue: RawId 1448 start: IntPtrId 1449 end: IntPtrId 1450 elementType: ScalarTypeImm 1451 1452 - name: TypedArraySetResult 1453 shared: true 1454 transpile: true 1455 cost_estimate: 4 1456 args: 1457 target: ObjId 1458 source: ObjId 1459 offset: IntPtrId 1460 canUseBitwiseCopy: BoolImm 1461 1462 - name: TypedArraySubarrayResult 1463 shared: true 1464 transpile: true 1465 cost_estimate: 5 1466 args: 1467 templateObject: ObjectField 1468 obj: ObjId 1469 start: IntPtrId 1470 end: IntPtrId 1471 1472 - name: NewArrayIteratorResult 1473 shared: true 1474 transpile: true 1475 cost_estimate: 5 1476 args: 1477 templateObject: ObjectField 1478 1479 - name: NewStringIteratorResult 1480 shared: true 1481 transpile: true 1482 cost_estimate: 5 1483 args: 1484 templateObject: ObjectField 1485 1486 - name: NewRegExpStringIteratorResult 1487 shared: true 1488 transpile: true 1489 cost_estimate: 5 1490 args: 1491 templateObject: ObjectField 1492 1493 - name: ObjectCreateResult 1494 shared: true 1495 transpile: true 1496 cost_estimate: 5 1497 args: 1498 templateObject: ObjectField 1499 1500 - name: NewArrayFromLengthResult 1501 shared: true 1502 transpile: true 1503 cost_estimate: 5 1504 args: 1505 templateObject: ObjectField 1506 length: Int32Id 1507 site: AllocSiteField 1508 1509 - name: NewTypedArrayFromLengthResult 1510 shared: true 1511 transpile: true 1512 cost_estimate: 5 1513 args: 1514 templateObject: ObjectField 1515 length: Int32Id 1516 1517 - name: NewTypedArrayFromArrayBufferResult 1518 shared: true 1519 transpile: true 1520 cost_estimate: 5 1521 args: 1522 templateObject: ObjectField 1523 buffer: ObjId 1524 byteOffset: ValId 1525 length: ValId 1526 1527 - name: NewTypedArrayFromArrayResult 1528 shared: true 1529 transpile: true 1530 cost_estimate: 5 1531 args: 1532 templateObject: ObjectField 1533 array: ObjId 1534 1535 - name: NewMapObjectResult 1536 shared: true 1537 transpile: true 1538 cost_estimate: 5 1539 args: 1540 templateObject: ObjectField 1541 1542 - name: NewSetObjectResult 1543 shared: true 1544 transpile: true 1545 cost_estimate: 5 1546 args: 1547 templateObject: ObjectField 1548 1549 - name: NewMapObjectFromIterableResult 1550 shared: true 1551 transpile: true 1552 cost_estimate: 5 1553 args: 1554 templateObject: ObjectField 1555 iterable: ValId 1556 1557 - name: NewSetObjectFromIterableResult 1558 shared: true 1559 transpile: true 1560 cost_estimate: 5 1561 args: 1562 templateObject: ObjectField 1563 iterable: ValId 1564 1565 - name: NewStringObjectResult 1566 shared: true 1567 transpile: true 1568 cost_estimate: 5 1569 args: 1570 templateObject: ObjectField 1571 str: StringId 1572 1573 - name: StringFromCharCodeResult 1574 shared: false 1575 transpile: true 1576 cost_estimate: 5 1577 args: 1578 code: Int32Id 1579 1580 - name: StringFromCodePointResult 1581 shared: false 1582 transpile: true 1583 cost_estimate: 5 1584 args: 1585 code: Int32Id 1586 1587 - name: StringIncludesResult 1588 shared: true 1589 transpile: true 1590 cost_estimate: 5 1591 args: 1592 str: StringId 1593 searchStr: StringId 1594 1595 - name: StringIndexOfResult 1596 shared: true 1597 transpile: true 1598 cost_estimate: 5 1599 args: 1600 str: StringId 1601 searchStr: StringId 1602 1603 - name: StringLastIndexOfResult 1604 shared: true 1605 transpile: true 1606 cost_estimate: 5 1607 args: 1608 str: StringId 1609 searchStr: StringId 1610 1611 - name: StringStartsWithResult 1612 shared: true 1613 transpile: true 1614 cost_estimate: 5 1615 args: 1616 str: StringId 1617 searchStr: StringId 1618 1619 - name: StringEndsWithResult 1620 shared: true 1621 transpile: true 1622 cost_estimate: 5 1623 args: 1624 str: StringId 1625 searchStr: StringId 1626 1627 - name: StringToLowerCaseResult 1628 shared: true 1629 transpile: true 1630 cost_estimate: 5 1631 args: 1632 str: StringId 1633 1634 - name: StringToUpperCaseResult 1635 shared: true 1636 transpile: true 1637 cost_estimate: 5 1638 args: 1639 str: StringId 1640 1641 - name: StringTrimResult 1642 shared: true 1643 transpile: true 1644 cost_estimate: 5 1645 args: 1646 str: StringId 1647 1648 - name: StringTrimStartResult 1649 shared: true 1650 transpile: true 1651 cost_estimate: 5 1652 args: 1653 str: StringId 1654 1655 - name: StringTrimEndResult 1656 shared: true 1657 transpile: true 1658 cost_estimate: 5 1659 args: 1660 str: StringId 1661 1662 - name: MathAbsInt32Result 1663 shared: true 1664 transpile: true 1665 cost_estimate: 2 1666 args: 1667 input: Int32Id 1668 1669 - name: MathAbsNumberResult 1670 shared: true 1671 transpile: true 1672 cost_estimate: 1 1673 args: 1674 input: NumberId 1675 1676 - name: MathClz32Result 1677 shared: true 1678 transpile: true 1679 cost_estimate: 1 1680 args: 1681 input: Int32Id 1682 1683 - name: MathSignInt32Result 1684 shared: true 1685 transpile: true 1686 cost_estimate: 1 1687 args: 1688 input: Int32Id 1689 1690 - name: MathSignNumberResult 1691 shared: true 1692 transpile: true 1693 cost_estimate: 2 1694 args: 1695 input: NumberId 1696 1697 - name: MathSignNumberToInt32Result 1698 shared: true 1699 transpile: true 1700 cost_estimate: 2 1701 args: 1702 input: NumberId 1703 1704 - name: MathImulResult 1705 shared: true 1706 transpile: true 1707 cost_estimate: 1 1708 args: 1709 lhs: Int32Id 1710 rhs: Int32Id 1711 1712 - name: MathSqrtNumberResult 1713 shared: true 1714 transpile: true 1715 cost_estimate: 1 1716 args: 1717 input: NumberId 1718 1719 - name: MathFRoundNumberResult 1720 shared: true 1721 transpile: true 1722 cost_estimate: 1 1723 args: 1724 input: NumberId 1725 1726 - name: MathF16RoundNumberResult 1727 shared: true 1728 transpile: true 1729 cost_estimate: 4 1730 args: 1731 input: NumberId 1732 1733 # Because Baseline stub code is shared by all realms in the Zone, this 1734 # instruction loads a pointer to the RNG from a stub field. 1735 - name: MathRandomResult 1736 shared: true 1737 transpile: true 1738 cost_estimate: 3 1739 args: 1740 rng: RawPointerField 1741 1742 - name: MathHypot2NumberResult 1743 shared: true 1744 transpile: true 1745 cost_estimate: 4 1746 args: 1747 first: NumberId 1748 second: NumberId 1749 1750 - name: MathHypot3NumberResult 1751 shared: true 1752 transpile: true 1753 cost_estimate: 4 1754 args: 1755 first: NumberId 1756 second: NumberId 1757 third: NumberId 1758 1759 - name: MathHypot4NumberResult 1760 shared: true 1761 transpile: true 1762 cost_estimate: 4 1763 args: 1764 first: NumberId 1765 second: NumberId 1766 third: NumberId 1767 fourth: NumberId 1768 1769 - name: MathAtan2NumberResult 1770 shared: true 1771 transpile: true 1772 cost_estimate: 4 1773 args: 1774 lhs: NumberId 1775 rhs: NumberId 1776 1777 - name: MathFloorNumberResult 1778 shared: true 1779 transpile: true 1780 cost_estimate: 4 1781 args: 1782 input: NumberId 1783 1784 - name: MathCeilNumberResult 1785 shared: true 1786 transpile: true 1787 cost_estimate: 4 1788 args: 1789 input: NumberId 1790 1791 - name: MathTruncNumberResult 1792 shared: true 1793 transpile: true 1794 cost_estimate: 4 1795 args: 1796 input: NumberId 1797 1798 - name: MathRoundNumberResult 1799 shared: true 1800 transpile: true 1801 cost_estimate: 4 1802 args: 1803 input: NumberId 1804 1805 - name: MathFloorToInt32Result 1806 shared: true 1807 transpile: true 1808 cost_estimate: 3 1809 args: 1810 input: NumberId 1811 1812 - name: MathCeilToInt32Result 1813 shared: true 1814 transpile: true 1815 cost_estimate: 1 1816 args: 1817 input: NumberId 1818 1819 - name: MathTruncToInt32Result 1820 shared: true 1821 transpile: true 1822 args: 1823 input: NumberId 1824 1825 - name: MathRoundToInt32Result 1826 shared: true 1827 transpile: true 1828 cost_estimate: 1 1829 args: 1830 input: NumberId 1831 1832 - name: Int32MinMax 1833 shared: true 1834 transpile: true 1835 cost_estimate: 1 1836 args: 1837 isMax: BoolImm 1838 first: Int32Id 1839 second: Int32Id 1840 result: Int32Id 1841 1842 - name: NumberMinMax 1843 shared: true 1844 transpile: true 1845 cost_estimate: 1 1846 args: 1847 isMax: BoolImm 1848 first: NumberId 1849 second: NumberId 1850 result: NumberId 1851 1852 - name: Int32MinMaxArrayResult 1853 shared: true 1854 transpile: true 1855 cost_estimate: 3 1856 args: 1857 array: ObjId 1858 isMax: BoolImm 1859 1860 - name: NumberMinMaxArrayResult 1861 shared: true 1862 transpile: true 1863 cost_estimate: 3 1864 args: 1865 array: ObjId 1866 isMax: BoolImm 1867 1868 - name: MathFunctionNumberResult 1869 shared: true 1870 transpile: true 1871 cost_estimate: 4 1872 args: 1873 input: NumberId 1874 fun: UnaryMathFunctionImm 1875 1876 - name: NumberParseIntResult 1877 shared: true 1878 transpile: true 1879 cost_estimate: 5 1880 args: 1881 str: StringId 1882 radix: Int32Id 1883 1884 - name: DoubleParseIntResult 1885 shared: true 1886 transpile: true 1887 cost_estimate: 2 1888 args: 1889 num: NumberId 1890 1891 - name: ObjectToStringResult 1892 shared: true 1893 transpile: true 1894 cost_estimate: 4 1895 args: 1896 obj: ObjId 1897 1898 - name: ReflectGetPrototypeOfResult 1899 shared: false 1900 transpile: true 1901 cost_estimate: 5 1902 args: 1903 obj: ObjId 1904 1905 - name: StoreTypedArrayElement 1906 shared: true 1907 transpile: true 1908 cost_estimate: 3 1909 args: 1910 obj: ObjId 1911 elementType: ScalarTypeImm 1912 index: IntPtrId 1913 rhs: RawId 1914 handleOOB: BoolImm 1915 viewKind: ArrayBufferViewKindImm 1916 1917 - name: AtomicsCompareExchangeResult 1918 shared: true 1919 transpile: true 1920 cost_estimate: 4 1921 args: 1922 obj: ObjId 1923 index: IntPtrId 1924 expected: RawId 1925 replacement: RawId 1926 elementType: ScalarTypeImm 1927 viewKind: ArrayBufferViewKindImm 1928 1929 - name: AtomicsExchangeResult 1930 shared: true 1931 transpile: true 1932 cost_estimate: 4 1933 args: 1934 obj: ObjId 1935 index: IntPtrId 1936 value: RawId 1937 elementType: ScalarTypeImm 1938 viewKind: ArrayBufferViewKindImm 1939 1940 - name: AtomicsAddResult 1941 shared: true 1942 transpile: true 1943 cost_estimate: 4 1944 args: 1945 obj: ObjId 1946 index: IntPtrId 1947 value: RawId 1948 elementType: ScalarTypeImm 1949 forEffect: BoolImm 1950 viewKind: ArrayBufferViewKindImm 1951 1952 - name: AtomicsSubResult 1953 shared: true 1954 transpile: true 1955 cost_estimate: 4 1956 args: 1957 obj: ObjId 1958 index: IntPtrId 1959 value: RawId 1960 elementType: ScalarTypeImm 1961 forEffect: BoolImm 1962 viewKind: ArrayBufferViewKindImm 1963 1964 - name: AtomicsAndResult 1965 shared: true 1966 transpile: true 1967 cost_estimate: 4 1968 args: 1969 obj: ObjId 1970 index: IntPtrId 1971 value: RawId 1972 elementType: ScalarTypeImm 1973 forEffect: BoolImm 1974 viewKind: ArrayBufferViewKindImm 1975 1976 - name: AtomicsOrResult 1977 shared: true 1978 transpile: true 1979 cost_estimate: 4 1980 args: 1981 obj: ObjId 1982 index: IntPtrId 1983 value: RawId 1984 elementType: ScalarTypeImm 1985 forEffect: BoolImm 1986 viewKind: ArrayBufferViewKindImm 1987 1988 - name: AtomicsXorResult 1989 shared: true 1990 transpile: true 1991 cost_estimate: 4 1992 args: 1993 obj: ObjId 1994 index: IntPtrId 1995 value: RawId 1996 elementType: ScalarTypeImm 1997 forEffect: BoolImm 1998 viewKind: ArrayBufferViewKindImm 1999 2000 - name: AtomicsLoadResult 2001 shared: true 2002 transpile: true 2003 cost_estimate: 2 2004 args: 2005 obj: ObjId 2006 index: IntPtrId 2007 elementType: ScalarTypeImm 2008 viewKind: ArrayBufferViewKindImm 2009 2010 - name: AtomicsStoreResult 2011 shared: true 2012 transpile: true 2013 cost_estimate: 2 2014 args: 2015 obj: ObjId 2016 index: IntPtrId 2017 value: RawId 2018 elementType: ScalarTypeImm 2019 viewKind: ArrayBufferViewKindImm 2020 2021 - name: AtomicsIsLockFreeResult 2022 shared: true 2023 transpile: true 2024 cost_estimate: 1 2025 args: 2026 value: Int32Id 2027 2028 - name: AtomicsPauseResult 2029 shared: true 2030 transpile: true 2031 cost_estimate: 1 2032 args: 2033 2034 - name: CallNativeSetter 2035 shared: false 2036 transpile: true 2037 cost_estimate: 5 2038 custom_writer: true 2039 args: 2040 receiver: ObjId 2041 setter: ObjectField 2042 rhs: ValId 2043 sameRealm: BoolImm 2044 nargsAndFlags: RawInt32Field 2045 2046 - name: CallScriptedSetter 2047 shared: false 2048 transpile: true 2049 cost_estimate: 3 2050 custom_writer: true 2051 args: 2052 receiver: ObjId 2053 callee: ObjId 2054 rhs: ValId 2055 sameRealm: BoolImm 2056 nargsAndFlags: RawInt32Field 2057 2058 - name: CallInlinedSetter 2059 shared: false 2060 transpile: true 2061 cost_estimate: 3 2062 custom_writer: true 2063 args: 2064 receiver: ObjId 2065 callee: ObjId 2066 rhs: ValId 2067 icScript: RawPointerField 2068 sameRealm: BoolImm 2069 nargsAndFlags: RawInt32Field 2070 2071 - name: CallDOMSetter 2072 shared: false 2073 transpile: true 2074 cost_estimate: 4 2075 args: 2076 obj: ObjId 2077 jitInfo: RawPointerField 2078 rhs: ValId 2079 2080 - name: CallSetArrayLength 2081 shared: false 2082 transpile: true 2083 cost_estimate: 5 2084 args: 2085 obj: ObjId 2086 strict: BoolImm 2087 rhs: ValId 2088 2089 - name: ProxySet 2090 shared: false 2091 transpile: true 2092 cost_estimate: 5 2093 args: 2094 obj: ObjId 2095 id: IdField 2096 rhs: ValId 2097 strict: BoolImm 2098 2099 - name: ProxySetByValue 2100 shared: false 2101 transpile: true 2102 cost_estimate: 5 2103 args: 2104 obj: ObjId 2105 id: ValId 2106 rhs: ValId 2107 strict: BoolImm 2108 2109 - name: CallAddOrUpdateSparseElementHelper 2110 shared: false 2111 transpile: true 2112 cost_estimate: 5 2113 args: 2114 obj: ObjId 2115 id: Int32Id 2116 rhs: ValId 2117 strict: BoolImm 2118 2119 - name: CallInt32ToString 2120 shared: true 2121 transpile: true 2122 cost_estimate: 4 2123 args: 2124 input: Int32Id 2125 result: StringId 2126 2127 - name: CallNumberToString 2128 shared: true 2129 transpile: true 2130 cost_estimate: 4 2131 args: 2132 input: NumberId 2133 result: StringId 2134 2135 - name: Int32ToStringWithBaseResult 2136 shared: true 2137 transpile: true 2138 cost_estimate: 3 2139 args: 2140 input: Int32Id 2141 base: Int32Id 2142 2143 - name: BooleanToString 2144 shared: true 2145 transpile: true 2146 cost_estimate: 2 2147 args: 2148 input: BooleanId 2149 result: StringId 2150 2151 - name: CallScriptedFunction 2152 shared: false 2153 transpile: true 2154 cost_estimate: 3 2155 custom_writer: true 2156 args: 2157 callee: ObjId 2158 argc: Int32Id 2159 flags: CallFlagsImm 2160 argcFixed: UInt32Imm 2161 2162 - name: CallBoundScriptedFunction 2163 shared: false 2164 transpile: true 2165 cost_estimate: 3 2166 args: 2167 callee: ObjId 2168 target: ObjId 2169 argc: Int32Id 2170 flags: CallFlagsImm 2171 numBoundArgs: UInt32Imm 2172 2173 - name: CallWasmFunction 2174 shared: false 2175 transpile: true 2176 cost_estimate: 3 2177 args: 2178 callee: ObjId 2179 argc: Int32Id 2180 flags: CallFlagsImm 2181 argcFixed: UInt32Imm 2182 funcType: RawPointerField 2183 instance: ObjectField 2184 2185 - name: GuardWasmArg 2186 shared: true 2187 transpile: true 2188 cost_estimate: 2 2189 args: 2190 arg: ValId 2191 type: WasmValTypeImm 2192 2193 - name: CallNativeFunction 2194 shared: false 2195 transpile: true 2196 cost_estimate: 4 2197 custom_writer: true 2198 args: 2199 callee: ObjId 2200 argc: Int32Id 2201 flags: CallFlagsImm 2202 argcFixed: UInt32Imm 2203 #ifdef JS_SIMULATOR 2204 target: RawPointerField 2205 #else 2206 ignoresReturnValue: BoolImm 2207 #endif 2208 2209 - name: CallDOMFunction 2210 shared: false 2211 transpile: true 2212 cost_estimate: 4 2213 custom_writer: true 2214 args: 2215 callee: ObjId 2216 argc: Int32Id 2217 thisObj: ObjId 2218 flags: CallFlagsImm 2219 argcFixed: UInt32Imm 2220 #ifdef JS_SIMULATOR 2221 target: RawPointerField 2222 #endif 2223 2224 - name: CallDOMFunctionWithAllocSite 2225 shared: false 2226 transpile: true 2227 cost_estimate: 4 2228 custom_writer: true 2229 args: 2230 callee: ObjId 2231 argc: Int32Id 2232 thisObj: ObjId 2233 flags: CallFlagsImm 2234 argcFixed: UInt32Imm 2235 site: AllocSiteField 2236 #ifdef JS_SIMULATOR 2237 target: RawPointerField 2238 #endif 2239 2240 - name: CallClassHook 2241 shared: false 2242 transpile: true 2243 cost_estimate: 4 2244 custom_writer: true 2245 args: 2246 callee: ObjId 2247 argc: Int32Id 2248 flags: CallFlagsImm 2249 argcFixed: UInt32Imm 2250 target: RawPointerField 2251 2252 - name: CallInlinedFunction 2253 shared: false 2254 transpile: true 2255 cost_estimate: 4 2256 custom_writer: true 2257 args: 2258 callee: ObjId 2259 argc: Int32Id 2260 icScript: RawPointerField 2261 flags: CallFlagsImm 2262 argcFixed: UInt32Imm 2263 2264 #ifdef JS_PUNBOX64 2265 - name: CallScriptedProxyGetResult 2266 shared: false 2267 transpile: true 2268 cost_estimate: 4 2269 custom_writer: true 2270 args: 2271 target: ValId 2272 receiver: ObjId 2273 handler: ObjId 2274 trap: ObjId 2275 property: IdField 2276 nargsAndFlags: UInt32Imm 2277 2278 - name: CallScriptedProxyGetByValueResult 2279 shared: false 2280 transpile: true 2281 cost_estimate: 4 2282 custom_writer: true 2283 args: 2284 target: ValId 2285 receiver: ObjId 2286 handler: ObjId 2287 property: ValId 2288 trap: ObjId 2289 nargsAndFlags: UInt32Imm 2290 #endif 2291 2292 # Meta ops generate no code, but contain data for the Warp Transpiler. 2293 - name: MetaScriptedThisShape 2294 shared: true 2295 transpile: true 2296 cost_estimate: 0 2297 custom_writer: true 2298 args: 2299 thisShape: ShapeField 2300 2301 - name: BindFunctionResult 2302 shared: true 2303 transpile: true 2304 cost_estimate: 5 2305 args: 2306 target: ObjId 2307 argc: UInt32Imm 2308 templateObject: ObjectField 2309 2310 - name: SpecializedBindFunctionResult 2311 shared: true 2312 transpile: true 2313 cost_estimate: 4 2314 args: 2315 target: ObjId 2316 argc: UInt32Imm 2317 templateObject: ObjectField 2318 2319 - name: LoadFixedSlotResult 2320 shared: false 2321 transpile: true 2322 cost_estimate: 1 2323 args: 2324 obj: ObjId 2325 offset: RawInt32Field 2326 2327 - name: LoadFixedSlotTypedResult 2328 shared: false 2329 transpile: true 2330 cost_estimate: 1 2331 args: 2332 obj: ObjId 2333 offset: RawInt32Field 2334 type: ValueTypeImm 2335 2336 - name: LoadDynamicSlotResult 2337 shared: false 2338 transpile: true 2339 cost_estimate: 1 2340 args: 2341 obj: ObjId 2342 offset: RawInt32Field 2343 2344 - name: LoadDenseElementResult 2345 shared: true 2346 transpile: true 2347 cost_estimate: 2 2348 args: 2349 obj: ObjId 2350 index: Int32Id 2351 expectPackedElements: BoolImm 2352 2353 - name: LoadDenseElementHoleResult 2354 shared: true 2355 transpile: true 2356 cost_estimate: 2 2357 args: 2358 obj: ObjId 2359 index: Int32Id 2360 2361 - name: CallGetSparseElementResult 2362 shared: true 2363 transpile: true 2364 cost_estimate: 5 2365 args: 2366 obj: ObjId 2367 index: Int32Id 2368 2369 - name: LoadDenseElementExistsResult 2370 shared: true 2371 transpile: true 2372 cost_estimate: 1 2373 args: 2374 obj: ObjId 2375 index: Int32Id 2376 2377 - name: LoadTypedArrayElementExistsResult 2378 shared: true 2379 transpile: true 2380 cost_estimate: 2 2381 args: 2382 obj: ObjId 2383 index: IntPtrId 2384 viewKind: ArrayBufferViewKindImm 2385 2386 - name: LoadDenseElementHoleExistsResult 2387 shared: true 2388 transpile: true 2389 cost_estimate: 2 2390 args: 2391 obj: ObjId 2392 index: Int32Id 2393 2394 - name: LoadTypedArrayElementResult 2395 shared: true 2396 transpile: true 2397 cost_estimate: 4 2398 args: 2399 obj: ObjId 2400 index: IntPtrId 2401 elementType: ScalarTypeImm 2402 handleOOB: BoolImm 2403 forceDoubleForUint32: BoolImm 2404 viewKind: ArrayBufferViewKindImm 2405 2406 - name: LoadDataViewValueResult 2407 shared: true 2408 transpile: true 2409 cost_estimate: 4 2410 args: 2411 obj: ObjId 2412 offset: IntPtrId 2413 littleEndian: BooleanId 2414 elementType: ScalarTypeImm 2415 forceDoubleForUint32: BoolImm 2416 viewKind: ArrayBufferViewKindImm 2417 2418 - name: StoreDataViewValueResult 2419 shared: true 2420 transpile: true 2421 cost_estimate: 4 2422 args: 2423 obj: ObjId 2424 offset: IntPtrId 2425 value: RawId 2426 littleEndian: BooleanId 2427 elementType: ScalarTypeImm 2428 viewKind: ArrayBufferViewKindImm 2429 2430 - name: LoadInt32ArrayLengthResult 2431 shared: true 2432 transpile: true 2433 cost_estimate: 1 2434 args: 2435 obj: ObjId 2436 2437 - name: LoadInt32ArrayLength 2438 shared: true 2439 transpile: true 2440 cost_estimate: 1 2441 args: 2442 obj: ObjId 2443 result: Int32Id 2444 2445 - name: LoadArgumentsObjectArgResult 2446 shared: true 2447 transpile: true 2448 cost_estimate: 2 2449 args: 2450 obj: ObjId 2451 index: Int32Id 2452 2453 - name: LoadArgumentsObjectArgHoleResult 2454 shared: true 2455 transpile: true 2456 cost_estimate: 2 2457 args: 2458 obj: ObjId 2459 index: Int32Id 2460 2461 - name: LoadArgumentsObjectArgExistsResult 2462 shared: true 2463 transpile: true 2464 cost_estimate: 2 2465 args: 2466 obj: ObjId 2467 index: Int32Id 2468 2469 - name: LoadArgumentsObjectLengthResult 2470 shared: true 2471 transpile: true 2472 cost_estimate: 1 2473 args: 2474 obj: ObjId 2475 2476 - name: LoadArgumentsObjectLength 2477 shared: true 2478 transpile: true 2479 cost_estimate: 1 2480 args: 2481 obj: ObjId 2482 result: Int32Id 2483 2484 - name: LoadFunctionLengthResult 2485 shared: true 2486 transpile: true 2487 cost_estimate: 2 2488 args: 2489 obj: ObjId 2490 2491 - name: LoadFunctionNameResult 2492 shared: true 2493 transpile: true 2494 cost_estimate: 2 2495 args: 2496 obj: ObjId 2497 2498 - name: LoadBoundFunctionNumArgs 2499 shared: true 2500 transpile: true 2501 cost_estimate: 1 2502 args: 2503 obj: ObjId 2504 result: Int32Id 2505 2506 - name: LoadBoundFunctionTarget 2507 shared: true 2508 transpile: true 2509 cost_estimate: 1 2510 args: 2511 obj: ObjId 2512 result: ObjId 2513 2514 - name: LoadBoundFunctionArgument 2515 shared: true 2516 transpile: true 2517 cost_estimate: 2 2518 args: 2519 obj: ObjId 2520 index: UInt32Imm 2521 result: ValId 2522 2523 - name: GuardBoundFunctionIsConstructor 2524 shared: true 2525 transpile: true 2526 cost_estimate: 1 2527 args: 2528 obj: ObjId 2529 2530 - name: LoadArrayBufferByteLengthInt32Result 2531 shared: true 2532 transpile: true 2533 cost_estimate: 1 2534 args: 2535 obj: ObjId 2536 2537 - name: LoadArrayBufferByteLengthDoubleResult 2538 shared: true 2539 transpile: true 2540 cost_estimate: 1 2541 args: 2542 obj: ObjId 2543 2544 - name: LoadArrayBufferViewLengthInt32Result 2545 shared: true 2546 transpile: true 2547 cost_estimate: 1 2548 args: 2549 obj: ObjId 2550 2551 - name: LoadArrayBufferViewLengthDoubleResult 2552 shared: true 2553 transpile: true 2554 cost_estimate: 1 2555 args: 2556 obj: ObjId 2557 2558 - name: LoadArrayBufferViewLength 2559 shared: true 2560 transpile: true 2561 cost_estimate: 1 2562 args: 2563 obj: ObjId 2564 result: IntPtrId 2565 2566 - name: LinearizeForCharAccess 2567 shared: true 2568 transpile: true 2569 cost_estimate: 4 2570 args: 2571 str: StringId 2572 index: Int32Id 2573 result: StringId 2574 2575 - name: LinearizeForCodePointAccess 2576 shared: true 2577 transpile: true 2578 cost_estimate: 4 2579 args: 2580 str: StringId 2581 index: Int32Id 2582 result: StringId 2583 2584 - name: ToRelativeStringIndex 2585 shared: true 2586 transpile: true 2587 cost_estimate: 1 2588 args: 2589 index: Int32Id 2590 str: StringId 2591 result: Int32Id 2592 2593 - name: LoadStringCharResult 2594 shared: false 2595 transpile: true 2596 cost_estimate: 5 2597 args: 2598 str: StringId 2599 index: Int32Id 2600 handleOOB: BoolImm 2601 2602 - name: LoadStringAtResult 2603 shared: false 2604 transpile: true 2605 cost_estimate: 5 2606 args: 2607 str: StringId 2608 index: Int32Id 2609 handleOOB: BoolImm 2610 2611 - name: LoadStringCharCodeResult 2612 shared: true 2613 transpile: true 2614 cost_estimate: 3 2615 args: 2616 str: StringId 2617 index: Int32Id 2618 handleOOB: BoolImm 2619 2620 - name: LoadStringCodePointResult 2621 shared: true 2622 transpile: true 2623 cost_estimate: 3 2624 args: 2625 str: StringId 2626 index: Int32Id 2627 handleOOB: BoolImm 2628 2629 - name: LoadStringLengthResult 2630 shared: true 2631 transpile: true 2632 cost_estimate: 1 2633 args: 2634 str: StringId 2635 2636 - name: FrameIsConstructingResult 2637 shared: false 2638 transpile: true 2639 cost_estimate: 1 2640 args: 2641 2642 - name: LoadObjectResult 2643 shared: true 2644 transpile: true 2645 cost_estimate: 1 2646 args: 2647 obj: ObjId 2648 2649 - name: LoadStringResult 2650 shared: true 2651 transpile: true 2652 cost_estimate: 1 2653 args: 2654 str: StringId 2655 2656 - name: LoadSymbolResult 2657 shared: true 2658 transpile: true 2659 cost_estimate: 1 2660 args: 2661 sym: SymbolId 2662 2663 - name: LoadInt32Result 2664 shared: true 2665 transpile: true 2666 cost_estimate: 1 2667 args: 2668 val: Int32Id 2669 2670 - name: LoadDoubleResult 2671 shared: true 2672 transpile: true 2673 cost_estimate: 2 2674 args: 2675 val: NumberId 2676 2677 - name: LoadBigIntResult 2678 shared: true 2679 transpile: true 2680 cost_estimate: 1 2681 args: 2682 val: BigIntId 2683 2684 - name: CallScriptedGetterResult 2685 shared: false 2686 transpile: true 2687 cost_estimate: 5 2688 custom_writer: true 2689 args: 2690 receiver: ValId 2691 callee: ObjId 2692 sameRealm: BoolImm 2693 nargsAndFlags: RawInt32Field 2694 2695 - name: CallInlinedGetterResult 2696 shared: false 2697 transpile: true 2698 cost_estimate: 5 2699 custom_writer: true 2700 args: 2701 receiver: ValId 2702 callee: ObjId 2703 icScript: RawPointerField 2704 sameRealm: BoolImm 2705 nargsAndFlags: RawInt32Field 2706 2707 - name: CallNativeGetterResult 2708 shared: false 2709 transpile: true 2710 cost_estimate: 5 2711 custom_writer: true 2712 args: 2713 receiver: ValId 2714 getter: ObjectField 2715 sameRealm: BoolImm 2716 nargsAndFlags: RawInt32Field 2717 2718 - name: CallDOMGetterResult 2719 shared: false 2720 transpile: true 2721 cost_estimate: 4 2722 args: 2723 obj: ObjId 2724 jitInfo: RawPointerField 2725 2726 - name: ProxyGetResult 2727 shared: false 2728 transpile: true 2729 cost_estimate: 5 2730 args: 2731 obj: ObjId 2732 id: IdField 2733 2734 - name: ProxyGetByValueResult 2735 shared: true 2736 transpile: true 2737 cost_estimate: 5 2738 args: 2739 obj: ObjId 2740 id: ValId 2741 2742 - name: ProxyHasPropResult 2743 shared: true 2744 transpile: true 2745 cost_estimate: 5 2746 args: 2747 obj: ObjId 2748 id: ValId 2749 hasOwn: BoolImm 2750 2751 - name: CallObjectHasSparseElementResult 2752 shared: true 2753 transpile: true 2754 cost_estimate: 4 2755 args: 2756 obj: ObjId 2757 index: Int32Id 2758 2759 - name: CallNativeGetElementResult 2760 shared: true 2761 transpile: true 2762 cost_estimate: 5 2763 args: 2764 obj: ObjId 2765 index: Int32Id 2766 2767 - name: CallNativeGetElementSuperResult 2768 shared: true 2769 transpile: true 2770 cost_estimate: 5 2771 args: 2772 obj: ObjId 2773 index: Int32Id 2774 receiver: ValId 2775 2776 - name: GetNextMapSetEntryForIteratorResult 2777 shared: true 2778 transpile: true 2779 cost_estimate: 4 2780 args: 2781 iter: ObjId 2782 resultArr: ObjId 2783 isMap: BoolImm 2784 2785 - name: LoadUndefinedResult 2786 shared: true 2787 transpile: true 2788 cost_estimate: 1 2789 args: 2790 2791 - name: LoadBooleanResult 2792 shared: true 2793 transpile: true 2794 cost_estimate: 1 2795 args: 2796 val: BoolImm 2797 2798 - name: LoadInt32Constant 2799 shared: true 2800 transpile: true 2801 cost_estimate: 1 2802 args: 2803 val: RawInt32Field 2804 result: Int32Id 2805 2806 - name: LoadInt32AsIntPtrConstant 2807 shared: true 2808 transpile: true 2809 cost_estimate: 1 2810 args: 2811 val: RawInt32Field 2812 result: IntPtrId 2813 2814 - name: LoadDoubleConstant 2815 shared: true 2816 transpile: true 2817 cost_estimate: 1 2818 args: 2819 val: DoubleField 2820 result: NumberId 2821 2822 - name: LoadBooleanConstant 2823 shared: true 2824 transpile: true 2825 cost_estimate: 1 2826 args: 2827 val: BoolImm 2828 result: BooleanId 2829 2830 - name: LoadUndefined 2831 shared: true 2832 transpile: true 2833 cost_estimate: 1 2834 args: 2835 result: ValId 2836 2837 - name: LoadConstantString 2838 shared: true 2839 transpile: true 2840 cost_estimate: 1 2841 args: 2842 str: StringField 2843 result: StringId 2844 2845 - name: LoadConstantStringResult 2846 shared: false 2847 transpile: true 2848 cost_estimate: 1 2849 args: 2850 str: StringField 2851 2852 - name: LoadInstanceOfObjectResult 2853 shared: true 2854 transpile: true 2855 cost_estimate: 3 2856 args: 2857 lhs: ValId 2858 proto: ObjId 2859 2860 - name: LoadTypeOfObjectResult 2861 shared: true 2862 transpile: true 2863 cost_estimate: 4 2864 args: 2865 obj: ObjId 2866 2867 - name: LoadTypeOfEqObjectResult 2868 shared: true 2869 transpile: true 2870 cost_estimate: 4 2871 args: 2872 obj: ObjId 2873 operand: TypeofEqOperandImm 2874 2875 - name: DoubleAddResult 2876 shared: true 2877 transpile: true 2878 cost_estimate: 2 2879 args: 2880 lhs: NumberId 2881 rhs: NumberId 2882 2883 - name: DoubleSubResult 2884 shared: true 2885 transpile: true 2886 cost_estimate: 2 2887 args: 2888 lhs: NumberId 2889 rhs: NumberId 2890 2891 - name: DoubleMulResult 2892 shared: true 2893 transpile: true 2894 cost_estimate: 2 2895 args: 2896 lhs: NumberId 2897 rhs: NumberId 2898 2899 - name: DoubleDivResult 2900 shared: true 2901 transpile: true 2902 cost_estimate: 2 2903 args: 2904 lhs: NumberId 2905 rhs: NumberId 2906 2907 - name: DoubleModResult 2908 shared: true 2909 transpile: true 2910 cost_estimate: 4 2911 args: 2912 lhs: NumberId 2913 rhs: NumberId 2914 2915 - name: DoublePowResult 2916 shared: true 2917 transpile: true 2918 cost_estimate: 4 2919 args: 2920 lhs: NumberId 2921 rhs: NumberId 2922 2923 - name: Int32AddResult 2924 shared: true 2925 transpile: true 2926 cost_estimate: 1 2927 args: 2928 lhs: Int32Id 2929 rhs: Int32Id 2930 2931 - name: Int32SubResult 2932 shared: true 2933 transpile: true 2934 cost_estimate: 1 2935 args: 2936 lhs: Int32Id 2937 rhs: Int32Id 2938 2939 - name: Int32MulResult 2940 shared: true 2941 transpile: true 2942 cost_estimate: 2 2943 args: 2944 lhs: Int32Id 2945 rhs: Int32Id 2946 2947 - name: Int32DivResult 2948 shared: true 2949 transpile: true 2950 cost_estimate: 2 2951 args: 2952 lhs: Int32Id 2953 rhs: Int32Id 2954 2955 - name: Int32ModResult 2956 shared: true 2957 transpile: true 2958 cost_estimate: 2 2959 args: 2960 lhs: Int32Id 2961 rhs: Int32Id 2962 2963 - name: Int32PowResult 2964 shared: true 2965 transpile: true 2966 cost_estimate: 1 2967 args: 2968 lhs: Int32Id 2969 rhs: Int32Id 2970 2971 - name: BigIntAddResult 2972 shared: true 2973 transpile: true 2974 cost_estimate: 5 2975 args: 2976 lhs: BigIntId 2977 rhs: BigIntId 2978 2979 - name: BigIntSubResult 2980 shared: true 2981 transpile: true 2982 cost_estimate: 5 2983 args: 2984 lhs: BigIntId 2985 rhs: BigIntId 2986 2987 - name: BigIntMulResult 2988 shared: true 2989 transpile: true 2990 cost_estimate: 5 2991 args: 2992 lhs: BigIntId 2993 rhs: BigIntId 2994 2995 - name: BigIntDivResult 2996 shared: true 2997 transpile: true 2998 cost_estimate: 5 2999 args: 3000 lhs: BigIntId 3001 rhs: BigIntId 3002 3003 - name: BigIntModResult 3004 shared: true 3005 transpile: true 3006 cost_estimate: 5 3007 args: 3008 lhs: BigIntId 3009 rhs: BigIntId 3010 3011 - name: BigIntPowResult 3012 shared: true 3013 transpile: true 3014 cost_estimate: 5 3015 args: 3016 lhs: BigIntId 3017 rhs: BigIntId 3018 3019 - name: BigIntToIntPtr 3020 shared: true 3021 transpile: true 3022 cost_estimate: 1 3023 args: 3024 input: BigIntId 3025 result: IntPtrId 3026 3027 - name: IntPtrToBigIntResult 3028 shared: true 3029 transpile: true 3030 cost_estimate: 5 3031 args: 3032 input: IntPtrId 3033 3034 - name: BigIntPtrAdd 3035 shared: true 3036 transpile: true 3037 cost_estimate: 1 3038 args: 3039 lhs: IntPtrId 3040 rhs: IntPtrId 3041 result: IntPtrId 3042 3043 - name: BigIntPtrSub 3044 shared: true 3045 transpile: true 3046 cost_estimate: 1 3047 args: 3048 lhs: IntPtrId 3049 rhs: IntPtrId 3050 result: IntPtrId 3051 3052 - name: BigIntPtrMul 3053 shared: true 3054 transpile: true 3055 cost_estimate: 1 3056 args: 3057 lhs: IntPtrId 3058 rhs: IntPtrId 3059 result: IntPtrId 3060 3061 - name: BigIntPtrDiv 3062 shared: true 3063 transpile: true 3064 cost_estimate: 1 3065 args: 3066 lhs: IntPtrId 3067 rhs: IntPtrId 3068 result: IntPtrId 3069 3070 - name: BigIntPtrMod 3071 shared: true 3072 transpile: true 3073 cost_estimate: 1 3074 args: 3075 lhs: IntPtrId 3076 rhs: IntPtrId 3077 result: IntPtrId 3078 3079 - name: BigIntPtrPow 3080 shared: true 3081 transpile: true 3082 cost_estimate: 2 3083 args: 3084 lhs: IntPtrId 3085 rhs: IntPtrId 3086 result: IntPtrId 3087 3088 - name: Int32BitOrResult 3089 shared: true 3090 transpile: true 3091 cost_estimate: 1 3092 args: 3093 lhs: Int32Id 3094 rhs: Int32Id 3095 3096 - name: Int32BitXorResult 3097 shared: true 3098 transpile: true 3099 cost_estimate: 1 3100 args: 3101 lhs: Int32Id 3102 rhs: Int32Id 3103 3104 - name: Int32BitAndResult 3105 shared: true 3106 transpile: true 3107 cost_estimate: 1 3108 args: 3109 lhs: Int32Id 3110 rhs: Int32Id 3111 3112 - name: Int32LeftShiftResult 3113 shared: true 3114 transpile: true 3115 cost_estimate: 1 3116 args: 3117 lhs: Int32Id 3118 rhs: Int32Id 3119 3120 - name: Int32RightShiftResult 3121 shared: true 3122 transpile: true 3123 cost_estimate: 1 3124 args: 3125 lhs: Int32Id 3126 rhs: Int32Id 3127 3128 - name: Int32URightShiftResult 3129 shared: true 3130 transpile: true 3131 cost_estimate: 2 3132 args: 3133 lhs: Int32Id 3134 rhs: Int32Id 3135 forceDouble: BoolImm 3136 3137 - name: Int32NotResult 3138 shared: true 3139 transpile: true 3140 cost_estimate: 1 3141 args: 3142 input: Int32Id 3143 3144 - name: BigIntBitOrResult 3145 shared: true 3146 transpile: true 3147 cost_estimate: 5 3148 args: 3149 lhs: BigIntId 3150 rhs: BigIntId 3151 3152 - name: BigIntBitXorResult 3153 shared: true 3154 transpile: true 3155 cost_estimate: 5 3156 args: 3157 lhs: BigIntId 3158 rhs: BigIntId 3159 3160 - name: BigIntBitAndResult 3161 shared: true 3162 transpile: true 3163 cost_estimate: 5 3164 args: 3165 lhs: BigIntId 3166 rhs: BigIntId 3167 3168 - name: BigIntLeftShiftResult 3169 shared: true 3170 transpile: true 3171 cost_estimate: 5 3172 args: 3173 lhs: BigIntId 3174 rhs: BigIntId 3175 3176 - name: BigIntRightShiftResult 3177 shared: true 3178 transpile: true 3179 cost_estimate: 5 3180 args: 3181 lhs: BigIntId 3182 rhs: BigIntId 3183 3184 - name: BigIntNotResult 3185 shared: true 3186 transpile: true 3187 cost_estimate: 5 3188 args: 3189 input: BigIntId 3190 3191 - name: BigIntPtrBitOr 3192 shared: true 3193 transpile: true 3194 cost_estimate: 1 3195 args: 3196 lhs: IntPtrId 3197 rhs: IntPtrId 3198 result: IntPtrId 3199 3200 - name: BigIntPtrBitXor 3201 shared: true 3202 transpile: true 3203 cost_estimate: 1 3204 args: 3205 lhs: IntPtrId 3206 rhs: IntPtrId 3207 result: IntPtrId 3208 3209 - name: BigIntPtrBitAnd 3210 shared: true 3211 transpile: true 3212 cost_estimate: 1 3213 args: 3214 lhs: IntPtrId 3215 rhs: IntPtrId 3216 result: IntPtrId 3217 3218 - name: BigIntPtrLeftShift 3219 shared: true 3220 transpile: true 3221 cost_estimate: 3 3222 args: 3223 lhs: IntPtrId 3224 rhs: IntPtrId 3225 result: IntPtrId 3226 3227 - name: BigIntPtrRightShift 3228 shared: true 3229 transpile: true 3230 cost_estimate: 3 3231 args: 3232 lhs: IntPtrId 3233 rhs: IntPtrId 3234 result: IntPtrId 3235 3236 - name: BigIntPtrNot 3237 shared: true 3238 transpile: true 3239 cost_estimate: 1 3240 args: 3241 input: IntPtrId 3242 result: IntPtrId 3243 3244 - name: Int32NegationResult 3245 shared: true 3246 transpile: true 3247 cost_estimate: 1 3248 args: 3249 input: Int32Id 3250 3251 - name: DoubleNegationResult 3252 shared: true 3253 transpile: true 3254 cost_estimate: 1 3255 args: 3256 input: NumberId 3257 3258 - name: BigIntNegationResult 3259 shared: true 3260 transpile: true 3261 cost_estimate: 5 3262 args: 3263 input: BigIntId 3264 3265 - name: BigIntPtrNegation 3266 shared: true 3267 transpile: true 3268 cost_estimate: 1 3269 args: 3270 input: IntPtrId 3271 result: IntPtrId 3272 3273 - name: Int32IncResult 3274 shared: true 3275 transpile: true 3276 cost_estimate: 1 3277 args: 3278 input: Int32Id 3279 3280 - name: Int32DecResult 3281 shared: true 3282 transpile: true 3283 cost_estimate: 1 3284 args: 3285 input: Int32Id 3286 3287 - name: DoubleIncResult 3288 shared: true 3289 transpile: true 3290 cost_estimate: 1 3291 args: 3292 input: NumberId 3293 3294 - name: DoubleDecResult 3295 shared: true 3296 transpile: true 3297 cost_estimate: 1 3298 args: 3299 input: NumberId 3300 3301 - name: BigIntIncResult 3302 shared: true 3303 transpile: true 3304 cost_estimate: 5 3305 args: 3306 input: BigIntId 3307 3308 - name: BigIntDecResult 3309 shared: true 3310 transpile: true 3311 cost_estimate: 5 3312 args: 3313 input: BigIntId 3314 3315 - name: BigIntPtrInc 3316 shared: true 3317 transpile: true 3318 cost_estimate: 1 3319 args: 3320 input: IntPtrId 3321 result: IntPtrId 3322 3323 - name: BigIntPtrDec 3324 shared: true 3325 transpile: true 3326 cost_estimate: 1 3327 args: 3328 input: IntPtrId 3329 result: IntPtrId 3330 3331 - name: LoadInt32TruthyResult 3332 shared: true 3333 transpile: true 3334 cost_estimate: 2 3335 args: 3336 input: ValId 3337 3338 - name: LoadDoubleTruthyResult 3339 shared: true 3340 transpile: true 3341 cost_estimate: 2 3342 args: 3343 input: NumberId 3344 3345 - name: LoadStringTruthyResult 3346 shared: true 3347 transpile: true 3348 cost_estimate: 2 3349 args: 3350 str: StringId 3351 3352 - name: LoadObjectTruthyResult 3353 shared: true 3354 transpile: true 3355 cost_estimate: 4 3356 args: 3357 obj: ObjId 3358 3359 - name: LoadBigIntTruthyResult 3360 shared: true 3361 transpile: true 3362 cost_estimate: 2 3363 args: 3364 bigInt: BigIntId 3365 3366 - name: LoadValueTruthyResult 3367 shared: true 3368 transpile: true 3369 cost_estimate: 4 3370 args: 3371 input: ValId 3372 3373 - name: LoadValueResult 3374 shared: false 3375 transpile: true 3376 cost_estimate: 1 3377 args: 3378 val: ValueField 3379 3380 # This instruction returns a Value stored in a WeakValueField to JS code. Weak 3381 # references normally require a weak barrier but this instruction doesn't have 3382 # any barriers in Baseline IC code. Only use this instruction if you know what 3383 # you're doing! 3384 - name: UncheckedLoadWeakValueResult 3385 shared: false 3386 transpile: true 3387 cost_estimate: 1 3388 args: 3389 val: WeakValueField 3390 3391 # See the warning for UncheckedLoadWeakValueResult above. 3392 - name: UncheckedLoadWeakObjectResult 3393 shared: false 3394 transpile: true 3395 cost_estimate: 1 3396 args: 3397 obj: WeakObjectField 3398 3399 - name: LoadOperandResult 3400 shared: true 3401 transpile: true 3402 cost_estimate: 1 3403 args: 3404 input: ValId 3405 3406 - name: NewPlainObjectResult 3407 shared: false 3408 transpile: true 3409 cost_estimate: 4 3410 args: 3411 numFixedSlots: UInt32Imm 3412 numDynamicSlots: UInt32Imm 3413 allocKind: AllocKindImm 3414 shape: ShapeField 3415 site: AllocSiteField 3416 3417 - name: NewArrayObjectResult 3418 shared: false 3419 transpile: true 3420 cost_estimate: 4 3421 args: 3422 arrayLength: UInt32Imm 3423 shape: ShapeField 3424 site: AllocSiteField 3425 3426 - name: NewFunctionCloneResult 3427 shared: false 3428 transpile: true 3429 cost_estimate: 4 3430 args: 3431 canonical: ObjectField 3432 allocKind: AllocKindImm 3433 site: AllocSiteField 3434 3435 - name: ConcatStringsResult 3436 shared: true 3437 transpile: true 3438 cost_estimate: 5 3439 args: 3440 lhs: StringId 3441 rhs: StringId 3442 stub: JitCodeField 3443 3444 - name: CallStringObjectConcatResult 3445 shared: false 3446 transpile: false 3447 cost_estimate: 5 3448 args: 3449 lhs: ValId 3450 rhs: ValId 3451 3452 - name: CallIsSuspendedGeneratorResult 3453 shared: true 3454 transpile: false 3455 cost_estimate: 2 3456 args: 3457 val: ValId 3458 3459 - name: CompareStringResult 3460 shared: false 3461 transpile: true 3462 cost_estimate: 5 3463 args: 3464 op: JSOpImm 3465 lhs: StringId 3466 rhs: StringId 3467 3468 - name: CompareObjectResult 3469 shared: true 3470 transpile: true 3471 cost_estimate: 2 3472 args: 3473 op: JSOpImm 3474 lhs: ObjId 3475 rhs: ObjId 3476 3477 - name: CompareSymbolResult 3478 shared: true 3479 transpile: true 3480 cost_estimate: 2 3481 args: 3482 op: JSOpImm 3483 lhs: SymbolId 3484 rhs: SymbolId 3485 3486 - name: CompareInt32Result 3487 shared: true 3488 transpile: true 3489 cost_estimate: 2 3490 args: 3491 op: JSOpImm 3492 lhs: Int32Id 3493 rhs: Int32Id 3494 3495 - name: CompareDoubleResult 3496 shared: true 3497 transpile: true 3498 cost_estimate: 2 3499 args: 3500 op: JSOpImm 3501 lhs: NumberId 3502 rhs: NumberId 3503 3504 - name: CompareBigIntResult 3505 shared: true 3506 transpile: true 3507 cost_estimate: 4 3508 args: 3509 op: JSOpImm 3510 lhs: BigIntId 3511 rhs: BigIntId 3512 3513 - name: CompareBigIntInt32Result 3514 shared: true 3515 transpile: true 3516 cost_estimate: 3 3517 args: 3518 op: JSOpImm 3519 lhs: BigIntId 3520 rhs: Int32Id 3521 3522 - name: CompareBigIntNumberResult 3523 shared: true 3524 transpile: true 3525 cost_estimate: 4 3526 args: 3527 op: JSOpImm 3528 lhs: BigIntId 3529 rhs: NumberId 3530 3531 - name: CompareBigIntStringResult 3532 shared: true 3533 transpile: true 3534 cost_estimate: 5 3535 args: 3536 op: JSOpImm 3537 lhs: BigIntId 3538 rhs: StringId 3539 3540 - name: CompareNullUndefinedResult 3541 shared: true 3542 transpile: true 3543 cost_estimate: 2 3544 args: 3545 op: JSOpImm 3546 isUndefined: BoolImm 3547 input: ValId 3548 3549 - name: CompareDoubleSameValueResult 3550 shared: true 3551 transpile: true 3552 cost_estimate: 3 3553 args: 3554 lhs: NumberId 3555 rhs: NumberId 3556 3557 - name: SameValueResult 3558 shared: false 3559 transpile: true 3560 cost_estimate: 4 3561 args: 3562 lhs: ValId 3563 rhs: ValId 3564 3565 - name: IndirectTruncateInt32Result 3566 shared: true 3567 transpile: true 3568 cost_estimate: 1 3569 args: 3570 val: Int32Id 3571 3572 - name: BigIntAsIntNResult 3573 shared: true 3574 transpile: true 3575 cost_estimate: 5 3576 args: 3577 bits: Int32Id 3578 bigInt: BigIntId 3579 3580 - name: BigIntAsUintNResult 3581 shared: true 3582 transpile: true 3583 cost_estimate: 5 3584 args: 3585 bits: Int32Id 3586 bigInt: BigIntId 3587 3588 - name: SetHasResult 3589 shared: true 3590 transpile: true 3591 cost_estimate: 5 3592 args: 3593 set: ObjId 3594 val: ValId 3595 3596 - name: SetHasNonGCThingResult 3597 shared: true 3598 transpile: true 3599 cost_estimate: 3 3600 args: 3601 set: ObjId 3602 val: ValId 3603 3604 - name: SetHasStringResult 3605 shared: false 3606 transpile: true 3607 cost_estimate: 5 3608 args: 3609 set: ObjId 3610 str: StringId 3611 3612 - name: SetHasSymbolResult 3613 shared: true 3614 transpile: true 3615 cost_estimate: 3 3616 args: 3617 set: ObjId 3618 sym: SymbolId 3619 3620 - name: SetHasBigIntResult 3621 shared: true 3622 transpile: true 3623 cost_estimate: 3 3624 args: 3625 set: ObjId 3626 bigInt: BigIntId 3627 3628 - name: SetHasObjectResult 3629 shared: true 3630 transpile: true 3631 cost_estimate: 3 3632 args: 3633 set: ObjId 3634 obj: ObjId 3635 3636 - name: SetDeleteResult 3637 shared: true 3638 transpile: true 3639 cost_estimate: 5 3640 args: 3641 set: ObjId 3642 val: ValId 3643 3644 - name: SetAddResult 3645 shared: true 3646 transpile: true 3647 cost_estimate: 5 3648 args: 3649 set: ObjId 3650 key: ValId 3651 3652 - name: SetSizeResult 3653 shared: true 3654 transpile: true 3655 cost_estimate: 1 3656 args: 3657 set: ObjId 3658 3659 - name: MapHasResult 3660 shared: true 3661 transpile: true 3662 cost_estimate: 5 3663 args: 3664 map: ObjId 3665 val: ValId 3666 3667 - name: MapHasNonGCThingResult 3668 shared: true 3669 transpile: true 3670 cost_estimate: 3 3671 args: 3672 map: ObjId 3673 val: ValId 3674 3675 - name: MapHasStringResult 3676 shared: false 3677 transpile: true 3678 cost_estimate: 5 3679 args: 3680 map: ObjId 3681 str: StringId 3682 3683 - name: MapHasSymbolResult 3684 shared: true 3685 transpile: true 3686 cost_estimate: 3 3687 args: 3688 map: ObjId 3689 sym: SymbolId 3690 3691 - name: MapHasBigIntResult 3692 shared: true 3693 transpile: true 3694 cost_estimate: 3 3695 args: 3696 map: ObjId 3697 bigInt: BigIntId 3698 3699 - name: MapHasObjectResult 3700 shared: true 3701 transpile: true 3702 cost_estimate: 3 3703 args: 3704 map: ObjId 3705 obj: ObjId 3706 3707 - name: MapGetResult 3708 shared: true 3709 transpile: true 3710 cost_estimate: 5 3711 args: 3712 map: ObjId 3713 val: ValId 3714 3715 - name: MapGetNonGCThingResult 3716 shared: true 3717 transpile: true 3718 cost_estimate: 3 3719 args: 3720 map: ObjId 3721 val: ValId 3722 3723 - name: MapGetStringResult 3724 shared: false 3725 transpile: true 3726 cost_estimate: 5 3727 args: 3728 map: ObjId 3729 str: StringId 3730 3731 - name: MapGetSymbolResult 3732 shared: true 3733 transpile: true 3734 cost_estimate: 3 3735 args: 3736 map: ObjId 3737 sym: SymbolId 3738 3739 - name: MapGetBigIntResult 3740 shared: true 3741 transpile: true 3742 cost_estimate: 3 3743 args: 3744 map: ObjId 3745 bigInt: BigIntId 3746 3747 - name: MapGetObjectResult 3748 shared: true 3749 transpile: true 3750 cost_estimate: 3 3751 args: 3752 map: ObjId 3753 obj: ObjId 3754 3755 - name: MapDeleteResult 3756 shared: true 3757 transpile: true 3758 cost_estimate: 5 3759 args: 3760 map: ObjId 3761 val: ValId 3762 3763 - name: MapSetResult 3764 shared: true 3765 transpile: true 3766 cost_estimate: 5 3767 args: 3768 map: ObjId 3769 key: ValId 3770 val: ValId 3771 3772 - name: MapSizeResult 3773 shared: true 3774 transpile: true 3775 cost_estimate: 1 3776 args: 3777 map: ObjId 3778 3779 - name: WeakMapGetObjectResult 3780 shared: true 3781 transpile: true 3782 cost_estimate: 3 3783 args: 3784 weakMap: ObjId 3785 obj: ObjId 3786 3787 - name: WeakMapHasObjectResult 3788 shared: true 3789 transpile: true 3790 cost_estimate: 3 3791 args: 3792 weakMap: ObjId 3793 obj: ObjId 3794 3795 - name: WeakSetHasObjectResult 3796 shared: true 3797 transpile: true 3798 cost_estimate: 3 3799 args: 3800 weakSet: ObjId 3801 obj: ObjId 3802 3803 - name: DateFillLocalTimeSlots 3804 shared: true 3805 transpile: true 3806 cost_estimate: 4 3807 args: 3808 date: ObjId 3809 3810 - name: DateHoursFromSecondsIntoYearResult 3811 shared: true 3812 transpile: true 3813 cost_estimate: 2 3814 args: 3815 secondsIntoYear: ValId 3816 3817 - name: DateMinutesFromSecondsIntoYearResult 3818 shared: true 3819 transpile: true 3820 cost_estimate: 2 3821 args: 3822 secondsIntoYear: ValId 3823 3824 - name: DateSecondsFromSecondsIntoYearResult 3825 shared: true 3826 transpile: true 3827 cost_estimate: 2 3828 args: 3829 secondsIntoYear: ValId 3830 3831 - name: ArrayFromArgumentsObjectResult 3832 shared: true 3833 transpile: true 3834 cost_estimate: 5 3835 args: 3836 obj: ObjId 3837 shape: ShapeField 3838 3839 - name: CloseIterScriptedResult 3840 shared: false 3841 transpile: true 3842 cost_estimate: 5 3843 args: 3844 iter: ObjId 3845 callee: ObjId 3846 targetNargs: UInt32Imm 3847 3848 - name: CallPrintString 3849 shared: true 3850 transpile: false 3851 cost_estimate: 1 3852 args: 3853 str: StaticStringImm 3854 3855 - name: Breakpoint 3856 shared: true 3857 transpile: false 3858 cost_estimate: 1 3859 args: 3860 3861 - name: WrapResult 3862 shared: true 3863 transpile: false 3864 cost_estimate: 4 3865 args: 3866 3867 - name: Bailout 3868 shared: true 3869 transpile: true 3870 cost_estimate: 0 3871 args: 3872 3873 - name: AssertFloat32Result 3874 shared: true 3875 transpile: true 3876 cost_estimate: 1 3877 args: 3878 val: ValId 3879 mustBeFloat32: BoolImm 3880 3881 - name: AssertRecoveredOnBailoutResult 3882 shared: true 3883 transpile: true 3884 cost_estimate: 1 3885 args: 3886 val: ValId 3887 mustBeRecovered: BoolImm 3888 3889 - name: AssertPropertyLookup 3890 shared: true 3891 transpile: true 3892 cost_estimate: 4 3893 args: 3894 obj: ObjId 3895 id: IdField 3896 slot: RawInt32Field 3897 3898 #ifdef FUZZING_JS_FUZZILLI 3899 - name: FuzzilliHashResult 3900 shared: true 3901 transpile: true 3902 cost_estimate: 4 3903 args: 3904 val: ValId 3905 #endif