// offlineasm input hash: 2a840aec564eecbbb6f7e7549f0aa2753d0f6294 8d25d0a85bf865cb048af270a1c55bd723445f5a 0c1cc42b98854e201df8e5086d3c8b883d3cdcfc
#if !OFFLINE_ASM_X86 && !OFFLINE_ASM_X86_WIN && !OFFLINE_ASM_X86_64 && !OFFLINE_ASM_X86_64_WIN && !OFFLINE_ASM_ARM && !OFFLINE_ASM_ARMv7 && !OFFLINE_ASM_ARMv7_TRADITIONAL && !OFFLINE_ASM_ARM64 && !OFFLINE_ASM_MIPS && !OFFLINE_ASM_SH4 && OFFLINE_ASM_C_LOOP && !OFFLINE_ASM_ARMv7k && !OFFLINE_ASM_ARMv7s && OFFLINE_ASM_JSVALUE64 && !OFFLINE_ASM_BIG_ENDIAN && OFFLINE_ASM_ASSERT_ENABLED && !OFFLINE_ASM_COLLECT_STATS && !OFFLINE_ASM_EXECUTION_TRACING
OFFLINE_ASM_BEGIN
OFFLINE_ASM_GLOBAL_LABEL(llintPCRangeStart)

OFFLINE_ASM_GLUE_LABEL(llint_vm_entry_to_javascript)
    PUSH(lr);                                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:750
    PUSH(cfr);                                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:751
    cfr.i = sp.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:753
    sp.i = cfr.i - intptr_t(0x20);                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:768
    *CAST<intptr_t*>(sp.i8p) = t1.i;                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:129
    pc.i = *CAST<intptr_t*>(t1.i8p + 13560);                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:130
    *CAST<intptr_t*>(sp.i8p + 8) = pc.i;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:131
    pc.i = *CAST<intptr_t*>(t1.i8p + 13552);                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:132
    *CAST<intptr_t*>(sp.i8p + 16) = pc.i;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:133
    pc.u = *CAST<uint32_t*>(t2.i8p + 32);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:135
    pc.i = intptr_t(0x5) + pc.i;                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:136
    pc.i = pc.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:137
    t3.i = sp.i - pc.i;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:138
    if (t3.u >= *CAST<uintptr_t*>(t1.i8p + 20680))           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:144
        goto _offlineasm_doVMEntry__stackHeightOK;
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:150
    t5.i = t1.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:151
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:152
        SlowPathReturnType result = llint_stack_check_at_vm_entry(t1, t3);
        decodeResult(result, t0.vp, t1.vp);
    }
    if (t0.i == intptr_t(0x0))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:153
        goto _offlineasm_doVMEntry__stackCheckFailed;
    t0.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:154
    t1.i = t5.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:155
    goto _offlineasm_doVMEntry__stackHeightOK;               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:156

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doVMEntry__stackCheckFailed)
    t0.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:159
    t1.i = t5.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:160
    t0.i = t1.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:163
    t1.i = t2.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:164
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_throw_stack_overflow_error(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = cfr.i - intptr_t(0x20);                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:768
    t1.i = *CAST<intptr_t*>(pc.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:169
    t5.i = *CAST<intptr_t*>(pc.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:170
    *CAST<intptr_t*>(t1.i8p + 13560) = t5.i;                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:171
    t5.i = *CAST<intptr_t*>(pc.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:172
    *CAST<intptr_t*>(t1.i8p + 13552) = t5.i;                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:173
    sp.i = cfr.i - intptr_t(0x0);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:175
    POP(cfr);                                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:762
    POP(lr);                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:763
    opcode = lr.opcode;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:179
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doVMEntry__stackHeightOK)
    sp.i = t3.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:182
    t3.i = intptr_t(0x4);                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:183

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doVMEntry__copyHeaderLoop)
    t3.i32 = t3.i32 - int32_t(0x1);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:186
    t3.clearHighWord();
    t5.i64 = *CAST<int64_t*>(t2.i8p + (t3.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:187
    *CAST<int64_t*>(sp.i8p + (t3.i << 3) + intptr_t(0x10)) = t5.i64; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:188
    if (t3.i32 != 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:189
        goto _offlineasm_doVMEntry__copyHeaderLoop;
    pc.u = *CAST<uint32_t*>(t2.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:191
    pc.i32 = pc.i32 - int32_t(0x1);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:192
    pc.clearHighWord();
    t5.u = *CAST<uint32_t*>(t2.i8p + 32);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:193
    t5.i32 = t5.i32 - int32_t(0x1);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:194
    t5.clearHighWord();
    if (pc.i32 == t5.i32)                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:196
        goto _offlineasm_doVMEntry__copyArgs;
    t3.i = intptr_t(0xa);                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:197

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doVMEntry__fillExtraArgsLoop)
    t5.i32 = t5.i32 - int32_t(0x1);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:199
    t5.clearHighWord();
    *CAST<int64_t*>(sp.i8p + (t5.i << 3) + intptr_t(0x30)) = t3.i64; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:200
    if (pc.i32 != t5.i32)                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:201
        goto _offlineasm_doVMEntry__fillExtraArgsLoop;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doVMEntry__copyArgs)
    t3.i = *CAST<intptr_t*>(t2.i8p + 40);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:204

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doVMEntry__copyArgsLoop)
    if (pc.i32 == 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:207
        goto _offlineasm_doVMEntry__copyArgsDone;
    pc.i32 = pc.i32 - int32_t(0x1);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:208
    pc.clearHighWord();
    t5.i64 = *CAST<int64_t*>(t3.i8p + (pc.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:209
    *CAST<int64_t*>(sp.i8p + (pc.i << 3) + intptr_t(0x30)) = t5.i64; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:210
    goto _offlineasm_doVMEntry__copyArgsLoop;                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:211

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doVMEntry__copyArgsDone)
    *CAST<intptr_t*>(t1.i8p + 13560) = sp.i;                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:218
    *CAST<intptr_t*>(t1.i8p + 13552) = cfr.i;                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:220
    sp.i = sp.i + intptr_t(0x10);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:249
    lr.opcode = getOpcode(llint_cloop_did_return_from_js_1); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:251
    opcode = t0.opcode;
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_cloop_did_return_from_js_1)
    sp.i = sp.i - intptr_t(0x10);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:255
    pc.i = cfr.i - intptr_t(0x20);                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:768
    t1.i = *CAST<intptr_t*>(pc.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:233
    t2.i = *CAST<intptr_t*>(pc.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:234
    *CAST<intptr_t*>(t1.i8p + 13560) = t2.i;                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:235
    t2.i = *CAST<intptr_t*>(pc.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:236
    *CAST<intptr_t*>(t1.i8p + 13552) = t2.i;                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:237
    sp.i = cfr.i - intptr_t(0x0);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:239
    POP(cfr);                                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:762
    POP(lr);                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:763
    opcode = lr.opcode;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:244
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_vm_entry_to_native)
    PUSH(lr);                                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:750
    PUSH(cfr);                                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:751
    cfr.i = sp.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:753
    sp.i = cfr.i - intptr_t(0x20);                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:768
    *CAST<intptr_t*>(sp.i8p) = t1.i;                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:129
    pc.i = *CAST<intptr_t*>(t1.i8p + 13560);                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:130
    *CAST<intptr_t*>(sp.i8p + 8) = pc.i;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:131
    pc.i = *CAST<intptr_t*>(t1.i8p + 13552);                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:132
    *CAST<intptr_t*>(sp.i8p + 16) = pc.i;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:133
    pc.u = *CAST<uint32_t*>(t2.i8p + 32);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:135
    pc.i = intptr_t(0x5) + pc.i;                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:136
    pc.i = pc.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:137
    t3.i = sp.i - pc.i;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:138
    if (t3.u >= *CAST<uintptr_t*>(t1.i8p + 20680))           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:144
        goto _offlineasm_0_doVMEntry__stackHeightOK;
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:150
    t5.i = t1.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:151
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:152
        SlowPathReturnType result = llint_stack_check_at_vm_entry(t1, t3);
        decodeResult(result, t0.vp, t1.vp);
    }
    if (t0.i == intptr_t(0x0))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:153
        goto _offlineasm_0_doVMEntry__stackCheckFailed;
    t0.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:154
    t1.i = t5.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:155
    goto _offlineasm_0_doVMEntry__stackHeightOK;             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:156

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_0_doVMEntry__stackCheckFailed)
    t0.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:159
    t1.i = t5.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:160
    t0.i = t1.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:163
    t1.i = t2.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:164
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_throw_stack_overflow_error(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = cfr.i - intptr_t(0x20);                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:768
    t1.i = *CAST<intptr_t*>(pc.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:169
    t5.i = *CAST<intptr_t*>(pc.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:170
    *CAST<intptr_t*>(t1.i8p + 13560) = t5.i;                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:171
    t5.i = *CAST<intptr_t*>(pc.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:172
    *CAST<intptr_t*>(t1.i8p + 13552) = t5.i;                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:173
    sp.i = cfr.i - intptr_t(0x0);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:175
    POP(cfr);                                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:762
    POP(lr);                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:763
    opcode = lr.opcode;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:179
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_0_doVMEntry__stackHeightOK)
    sp.i = t3.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:182
    t3.i = intptr_t(0x4);                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:183

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_0_doVMEntry__copyHeaderLoop)
    t3.i32 = t3.i32 - int32_t(0x1);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:186
    t3.clearHighWord();
    t5.i64 = *CAST<int64_t*>(t2.i8p + (t3.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:187
    *CAST<int64_t*>(sp.i8p + (t3.i << 3) + intptr_t(0x10)) = t5.i64; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:188
    if (t3.i32 != 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:189
        goto _offlineasm_0_doVMEntry__copyHeaderLoop;
    pc.u = *CAST<uint32_t*>(t2.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:191
    pc.i32 = pc.i32 - int32_t(0x1);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:192
    pc.clearHighWord();
    t5.u = *CAST<uint32_t*>(t2.i8p + 32);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:193
    t5.i32 = t5.i32 - int32_t(0x1);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:194
    t5.clearHighWord();
    if (pc.i32 == t5.i32)                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:196
        goto _offlineasm_0_doVMEntry__copyArgs;
    t3.i = intptr_t(0xa);                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:197

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_0_doVMEntry__fillExtraArgsLoop)
    t5.i32 = t5.i32 - int32_t(0x1);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:199
    t5.clearHighWord();
    *CAST<int64_t*>(sp.i8p + (t5.i << 3) + intptr_t(0x30)) = t3.i64; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:200
    if (pc.i32 != t5.i32)                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:201
        goto _offlineasm_0_doVMEntry__fillExtraArgsLoop;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_0_doVMEntry__copyArgs)
    t3.i = *CAST<intptr_t*>(t2.i8p + 40);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:204

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_0_doVMEntry__copyArgsLoop)
    if (pc.i32 == 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:207
        goto _offlineasm_0_doVMEntry__copyArgsDone;
    pc.i32 = pc.i32 - int32_t(0x1);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:208
    pc.clearHighWord();
    t5.i64 = *CAST<int64_t*>(t3.i8p + (pc.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:209
    *CAST<int64_t*>(sp.i8p + (pc.i << 3) + intptr_t(0x30)) = t5.i64; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:210
    goto _offlineasm_0_doVMEntry__copyArgsLoop;              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:211

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_0_doVMEntry__copyArgsDone)
    *CAST<intptr_t*>(t1.i8p + 13560) = sp.i;                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:218
    *CAST<intptr_t*>(t1.i8p + 13552) = cfr.i;                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:220
    t3.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:260
    *CAST<intptr_t*>(sp.i8p) = cfr.i;                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:261
    t0.i = sp.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:262
    *CAST<intptr_t*>(sp.i8p + 8) = lr.i;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:264
    nativeFunc = t3.nativeFunc;                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:265
    functionReturnValue = JSValue::decode(nativeFunc(t0.execState));
    #if USE(JSVALUE32_64)
        t1.i = functionReturnValue.tag();
        t0.i = functionReturnValue.payload();
    #else // USE_JSVALUE64)
        t0.encodedJSValue = JSValue::encode(functionReturnValue);
    #endif // USE_JSVALUE64)
    pc.i = cfr.i - intptr_t(0x20);                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:768
    t1.i = *CAST<intptr_t*>(pc.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:233
    t2.i = *CAST<intptr_t*>(pc.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:234
    *CAST<intptr_t*>(t1.i8p + 13560) = t2.i;                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:235
    t2.i = *CAST<intptr_t*>(pc.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:236
    *CAST<intptr_t*>(t1.i8p + 13552) = t2.i;                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:237
    sp.i = cfr.i - intptr_t(0x0);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:239
    POP(cfr);                                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:762
    POP(lr);                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:763
    opcode = lr.opcode;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:244
    DISPATCH_OPCODE();

OFFLINE_ASM_GLOBAL_LABEL(llint_entry)
    CRASH();                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:432

OFFLINE_ASM_GLUE_LABEL(llint_program_prologue)
    PUSH(lr);                                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:580
    PUSH(cfr);                                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:581
    cfr.i = sp.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:589
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:943
    sp.i = sp.i - intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:605
    pcBase.i = *CAST<intptr_t*>(t1.i8p + 64);                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1004
    pc.i = intptr_t(0x0);                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1005
    t0.u = *CAST<uint32_t*>(t1.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t0.i = t0.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t0.i = t0.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    t0.i = cfr.i - t0.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1012
    t2.i = *CAST<intptr_t*>(t1.i8p + 56);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1013
    if (*CAST<uintptr_t*>(t2.i8p + 20680) <= t0.u)           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1015
        goto _offlineasm_prologue__stackHeightOK;
    sp.i = sp.i - intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1022
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_stack_check(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    if (t1.i == intptr_t(0x0))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1024
        goto _offlineasm_prologue__stackHeightOKGetCodeBlock;
    cfr.i = t1.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1025
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_prologue__stackHeightOKGetCodeBlock)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:943
    t0.u = *CAST<uint32_t*>(t1.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t0.i = t0.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t0.i = t0.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    t0.i = cfr.i - t0.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1033

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_prologue__stackHeightOK)
    sp.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1036
    tagTypeNumber.i = intptr_t(0xffff000000000000);          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1039
    tagMask.i = intptr_t(0x2) + tagTypeNumber.i;             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1040
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_module_program_prologue)
    PUSH(lr);                                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:580
    PUSH(cfr);                                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:581
    cfr.i = sp.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:589
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:943
    sp.i = sp.i - intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:605
    pcBase.i = *CAST<intptr_t*>(t1.i8p + 64);                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1004
    pc.i = intptr_t(0x0);                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1005
    t0.u = *CAST<uint32_t*>(t1.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t0.i = t0.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t0.i = t0.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    t0.i = cfr.i - t0.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1012
    t2.i = *CAST<intptr_t*>(t1.i8p + 56);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1013
    if (*CAST<uintptr_t*>(t2.i8p + 20680) <= t0.u)           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1015
        goto _offlineasm_0_prologue__stackHeightOK;
    sp.i = sp.i - intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1022
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_stack_check(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    if (t1.i == intptr_t(0x0))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1024
        goto _offlineasm_0_prologue__stackHeightOKGetCodeBlock;
    cfr.i = t1.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1025
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_0_prologue__stackHeightOKGetCodeBlock)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:943
    t0.u = *CAST<uint32_t*>(t1.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t0.i = t0.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t0.i = t0.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    t0.i = cfr.i - t0.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1033

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_0_prologue__stackHeightOK)
    sp.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1036
    tagTypeNumber.i = intptr_t(0xffff000000000000);          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1039
    tagMask.i = intptr_t(0x2) + tagTypeNumber.i;             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1040
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_eval_prologue)
    PUSH(lr);                                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:580
    PUSH(cfr);                                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:581
    cfr.i = sp.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:589
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:943
    sp.i = sp.i - intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:605
    pcBase.i = *CAST<intptr_t*>(t1.i8p + 64);                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1004
    pc.i = intptr_t(0x0);                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1005
    t0.u = *CAST<uint32_t*>(t1.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t0.i = t0.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t0.i = t0.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    t0.i = cfr.i - t0.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1012
    t2.i = *CAST<intptr_t*>(t1.i8p + 56);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1013
    if (*CAST<uintptr_t*>(t2.i8p + 20680) <= t0.u)           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1015
        goto _offlineasm_1_prologue__stackHeightOK;
    sp.i = sp.i - intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1022
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_stack_check(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    if (t1.i == intptr_t(0x0))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1024
        goto _offlineasm_1_prologue__stackHeightOKGetCodeBlock;
    cfr.i = t1.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1025
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_1_prologue__stackHeightOKGetCodeBlock)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:943
    t0.u = *CAST<uint32_t*>(t1.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t0.i = t0.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t0.i = t0.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    t0.i = cfr.i - t0.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1033

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_1_prologue__stackHeightOK)
    sp.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1036
    tagTypeNumber.i = intptr_t(0xffff000000000000);          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1039
    tagMask.i = intptr_t(0x2) + tagTypeNumber.i;             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1040
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_function_for_call_prologue)
    PUSH(lr);                                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:580
    PUSH(cfr);                                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:581
    cfr.i = sp.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:589
    t1.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:924
    t1.i = *CAST<intptr_t*>(t1.i8p + 24);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:928
    t1.i = *CAST<intptr_t*>(t1.i8p + 136);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:929
    *CAST<intptr_t*>(cfr.i8p + 16) = t1.i;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:947
    sp.i = sp.i - intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:605
    pcBase.i = *CAST<intptr_t*>(t1.i8p + 64);                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1004
    pc.i = intptr_t(0x0);                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1005
    t0.u = *CAST<uint32_t*>(t1.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t0.i = t0.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t0.i = t0.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    t0.i = cfr.i - t0.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1012
    t2.i = *CAST<intptr_t*>(t1.i8p + 56);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1013
    if (*CAST<uintptr_t*>(t2.i8p + 20680) <= t0.u)           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1015
        goto _offlineasm_2_prologue__stackHeightOK;
    sp.i = sp.i - intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1022
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_stack_check(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    if (t1.i == intptr_t(0x0))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1024
        goto _offlineasm_2_prologue__stackHeightOKGetCodeBlock;
    cfr.i = t1.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1025
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_2_prologue__stackHeightOKGetCodeBlock)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:924
    t1.i = *CAST<intptr_t*>(t1.i8p + 24);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:928
    t1.i = *CAST<intptr_t*>(t1.i8p + 136);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:929
    t0.u = *CAST<uint32_t*>(t1.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t0.i = t0.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t0.i = t0.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    t0.i = cfr.i - t0.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1033

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_2_prologue__stackHeightOK)
    sp.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1036
    tagTypeNumber.i = intptr_t(0xffff000000000000);          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1039
    tagMask.i = intptr_t(0x2) + tagTypeNumber.i;             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1040
    t0.u = *CAST<uint32_t*>(t1.i8p + 40);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1054
    t0.i = t0.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1055
    if (t0.i >= intptr_t(0x0))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1056
        goto _offlineasm_functionInitialization__assert__ok;
    CRASH();                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:432

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_functionInitialization__assert__ok)
    if (t0.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1057
        goto _offlineasm_functionInitialization__argumentProfileDone;
    t3.i = *CAST<intptr_t*>(t1.i8p + 200);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1058
    t2.i = intptr_t(0x28) * t0.i;                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1059
    t0.i = t0.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1060
    t3.i = t3.i + t2.i;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1061

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_functionInitialization__argumentProfileLoop)
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 0) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1064
    t3.i = t3.i - intptr_t(0x28);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1065
    *CAST<int64_t*>(t3.i8p + 24) = t2.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1066
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1074
        intptr_t temp = t0.i + intptr_t(-8);
        t0.i = temp;
        if (temp != 0)
            goto  _offlineasm_functionInitialization__argumentProfileLoop;
    }

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_functionInitialization__argumentProfileDone)
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_function_for_construct_prologue)
    PUSH(lr);                                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:580
    PUSH(cfr);                                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:581
    cfr.i = sp.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:589
    t1.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:934
    t1.i = *CAST<intptr_t*>(t1.i8p + 24);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:938
    t1.i = *CAST<intptr_t*>(t1.i8p + 144);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:939
    *CAST<intptr_t*>(cfr.i8p + 16) = t1.i;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:947
    sp.i = sp.i - intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:605
    pcBase.i = *CAST<intptr_t*>(t1.i8p + 64);                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1004
    pc.i = intptr_t(0x0);                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1005
    t0.u = *CAST<uint32_t*>(t1.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t0.i = t0.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t0.i = t0.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    t0.i = cfr.i - t0.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1012
    t2.i = *CAST<intptr_t*>(t1.i8p + 56);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1013
    if (*CAST<uintptr_t*>(t2.i8p + 20680) <= t0.u)           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1015
        goto _offlineasm_3_prologue__stackHeightOK;
    sp.i = sp.i - intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1022
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_stack_check(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    if (t1.i == intptr_t(0x0))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1024
        goto _offlineasm_3_prologue__stackHeightOKGetCodeBlock;
    cfr.i = t1.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1025
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_3_prologue__stackHeightOKGetCodeBlock)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:934
    t1.i = *CAST<intptr_t*>(t1.i8p + 24);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:938
    t1.i = *CAST<intptr_t*>(t1.i8p + 144);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:939
    t0.u = *CAST<uint32_t*>(t1.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t0.i = t0.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t0.i = t0.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    t0.i = cfr.i - t0.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1033

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_3_prologue__stackHeightOK)
    sp.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1036
    tagTypeNumber.i = intptr_t(0xffff000000000000);          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1039
    tagMask.i = intptr_t(0x2) + tagTypeNumber.i;             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1040
    t0.u = *CAST<uint32_t*>(t1.i8p + 40);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1054
    t0.i = t0.i + intptr_t(-1);                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1055
    if (t0.i >= intptr_t(0x0))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1056
        goto _offlineasm_functionInitialization__3_assert__ok;
    CRASH();                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:432

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_functionInitialization__3_assert__ok)
    if (t0.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1057
        goto _offlineasm_3_functionInitialization__argumentProfileDone;
    t3.i = *CAST<intptr_t*>(t1.i8p + 200);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1058
    t2.i = intptr_t(0x28) * t0.i;                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1059
    t0.i = t0.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1060
    t3.i = t3.i + t2.i;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1061

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_3_functionInitialization__argumentProfileLoop)
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 0) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1064
    t3.i = t3.i - intptr_t(0x28);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1065
    *CAST<int64_t*>(t3.i8p + 64) = t2.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1066
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1074
        intptr_t temp = t0.i + intptr_t(-8);
        t0.i = temp;
        if (temp != 0)
            goto  _offlineasm_3_functionInitialization__argumentProfileLoop;
    }

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_3_functionInitialization__argumentProfileDone)
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_function_for_call_arity_check)
    PUSH(lr);                                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:580
    PUSH(cfr);                                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:581
    cfr.i = sp.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:589
    t1.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:924
    t1.i = *CAST<intptr_t*>(t1.i8p + 24);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:928
    t1.i = *CAST<intptr_t*>(t1.i8p + 136);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:929
    *CAST<intptr_t*>(cfr.i8p + 16) = t1.i;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:947
    sp.i = sp.i - intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:605
    pcBase.i = *CAST<intptr_t*>(t1.i8p + 64);                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1004
    pc.i = intptr_t(0x0);                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1005
    t0.u = *CAST<uint32_t*>(t1.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t0.i = t0.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t0.i = t0.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    t0.i = cfr.i - t0.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1012
    t2.i = *CAST<intptr_t*>(t1.i8p + 56);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1013
    if (*CAST<uintptr_t*>(t2.i8p + 20680) <= t0.u)           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1015
        goto _offlineasm_4_prologue__stackHeightOK;
    sp.i = sp.i - intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1022
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_stack_check(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    if (t1.i == intptr_t(0x0))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1024
        goto _offlineasm_4_prologue__stackHeightOKGetCodeBlock;
    cfr.i = t1.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1025
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_4_prologue__stackHeightOKGetCodeBlock)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:924
    t1.i = *CAST<intptr_t*>(t1.i8p + 24);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:928
    t1.i = *CAST<intptr_t*>(t1.i8p + 136);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:929
    t0.u = *CAST<uint32_t*>(t1.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t0.i = t0.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t0.i = t0.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    t0.i = cfr.i - t0.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1033

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_4_prologue__stackHeightOK)
    sp.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1036
    tagTypeNumber.i = intptr_t(0xffff000000000000);          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1039
    tagMask.i = intptr_t(0x2) + tagTypeNumber.i;             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1040
    t0.u = *CAST<uint32_t*>(cfr.i8p + 32);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:498
    if (t0.u32 >= *CAST<uint32_t*>(t1.i8p + 40))             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:499
        goto _offlineasm_functionForCallBegin;
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:501
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:502
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_call_arityCheck(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    if (t0.i32 == 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:504
        goto _offlineasm_functionArityCheck__noError;
    cfr.i = t1.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:505
    goto llint_throw_from_slow_path_trampoline;              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:506

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_functionArityCheck__noError)
    t1.u = *CAST<uint32_t*>(t1.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:509
    if (t1.i32 == 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:510
        goto _offlineasm_functionArityCheck__continue;
    t2.u = *CAST<uint32_t*>(cfr.i8p + 32);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:511
    t2.i32 = t2.i32 + int32_t(0x5);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:512
    t2.clearHighWord();
    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:514
    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:515
    t3.i = t1.i;
    t3.i32 = t3.i32 & int32_t(0x1);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:516
    t3.clearHighWord();
    if (t3.i32 == 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:517
        goto _offlineasm_functionArityCheck__noExtraSlot;
    t0.i = intptr_t(0xa);                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:518

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_functionArityCheck__fillExtraSlots)
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:520
    t2.i32 = t2.i32 + int32_t(0x1);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:521
    t2.clearHighWord();
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:522
        int32_t temp = t3.i32 - int32_t(0x1);
        t3.i32 = temp;
        if (temp != 0)
            goto  _offlineasm_functionArityCheck__fillExtraSlots;
    }
    t1.i32 = t1.i32 & int32_t(-2);                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:523
    t1.clearHighWord();
    if (t1.i32 == 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:524
        goto _offlineasm_functionArityCheck__continue;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_functionArityCheck__noExtraSlot)
    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:527
    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:528
    t1.i64 = -t1.i64;
    t3.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:529
    t3.i = t3.i - intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:530
    t2.i32 = t2.i32 + int32_t(0x0);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:531
    t2.clearHighWord();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_functionArityCheck__copyLoop)
    t0.i64 = *CAST<int64_t*>(t3.i8p);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:533
    *CAST<int64_t*>(t3.i8p + (t1.i << 3)) = t0.i64;          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:534
    t3.i = t3.i + intptr_t(0x8);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:535
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:536
        int32_t temp = t2.i32 - int32_t(0x1);
        t2.i32 = temp;
        if (temp != 0)
            goto  _offlineasm_functionArityCheck__copyLoop;
    }
    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:538
    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:539
    t2.i = t1.i;
    t0.i = intptr_t(0xa);                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:540

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_functionArityCheck__fillLoop)
    *CAST<int64_t*>(t3.i8p + (t1.i << 3)) = t0.i64;          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:542
    t3.i = t3.i + intptr_t(0x8);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:543
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:544
        int32_t temp = t2.i32 + int32_t(0x1);
        t2.i32 = temp;
        if (temp != 0)
            goto  _offlineasm_functionArityCheck__fillLoop;
    }
    t1.i = t1.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:546
    cfr.i = cfr.i + t1.i;                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:547
    sp.i = sp.i + t1.i;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:548

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_functionArityCheck__continue)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:552
    pcBase.i = *CAST<intptr_t*>(t1.i8p + 64);                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:553
    pc.i = intptr_t(0x0);                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:554
    goto _offlineasm_functionForCallBegin;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:555

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_functionForCallBegin)
    t0.u = *CAST<uint32_t*>(t1.i8p + 40);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1054
    t0.i = t0.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1055
    if (t0.i >= intptr_t(0x0))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1056
        goto _offlineasm_functionInitialization__4_assert__ok;
    CRASH();                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:432

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_functionInitialization__4_assert__ok)
    if (t0.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1057
        goto _offlineasm_4_functionInitialization__argumentProfileDone;
    t3.i = *CAST<intptr_t*>(t1.i8p + 200);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1058
    t2.i = intptr_t(0x28) * t0.i;                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1059
    t0.i = t0.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1060
    t3.i = t3.i + t2.i;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1061

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_4_functionInitialization__argumentProfileLoop)
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 0) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1064
    t3.i = t3.i - intptr_t(0x28);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1065
    *CAST<int64_t*>(t3.i8p + 24) = t2.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1066
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1074
        intptr_t temp = t0.i + intptr_t(-8);
        t0.i = temp;
        if (temp != 0)
            goto  _offlineasm_4_functionInitialization__argumentProfileLoop;
    }

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_4_functionInitialization__argumentProfileDone)
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_function_for_construct_arity_check)
    PUSH(lr);                                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:580
    PUSH(cfr);                                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:581
    cfr.i = sp.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:589
    t1.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:934
    t1.i = *CAST<intptr_t*>(t1.i8p + 24);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:938
    t1.i = *CAST<intptr_t*>(t1.i8p + 144);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:939
    *CAST<intptr_t*>(cfr.i8p + 16) = t1.i;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:947
    sp.i = sp.i - intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:605
    pcBase.i = *CAST<intptr_t*>(t1.i8p + 64);                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1004
    pc.i = intptr_t(0x0);                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1005
    t0.u = *CAST<uint32_t*>(t1.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t0.i = t0.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t0.i = t0.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    t0.i = cfr.i - t0.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1012
    t2.i = *CAST<intptr_t*>(t1.i8p + 56);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1013
    if (*CAST<uintptr_t*>(t2.i8p + 20680) <= t0.u)           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1015
        goto _offlineasm_5_prologue__stackHeightOK;
    sp.i = sp.i - intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1022
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_stack_check(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    if (t1.i == intptr_t(0x0))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1024
        goto _offlineasm_5_prologue__stackHeightOKGetCodeBlock;
    cfr.i = t1.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1025
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_5_prologue__stackHeightOKGetCodeBlock)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:934
    t1.i = *CAST<intptr_t*>(t1.i8p + 24);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:938
    t1.i = *CAST<intptr_t*>(t1.i8p + 144);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:939
    t0.u = *CAST<uint32_t*>(t1.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t0.i = t0.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t0.i = t0.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    t0.i = cfr.i - t0.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1033

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_5_prologue__stackHeightOK)
    sp.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1036
    tagTypeNumber.i = intptr_t(0xffff000000000000);          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1039
    tagMask.i = intptr_t(0x2) + tagTypeNumber.i;             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1040
    t0.u = *CAST<uint32_t*>(cfr.i8p + 32);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:498
    if (t0.u32 >= *CAST<uint32_t*>(t1.i8p + 40))             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:499
        goto _offlineasm_functionForConstructBegin;
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:501
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:502
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_construct_arityCheck(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    if (t0.i32 == 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:504
        goto _offlineasm_5_functionArityCheck__noError;
    cfr.i = t1.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:505
    goto llint_throw_from_slow_path_trampoline;              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:506

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_5_functionArityCheck__noError)
    t1.u = *CAST<uint32_t*>(t1.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:509
    if (t1.i32 == 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:510
        goto _offlineasm_5_functionArityCheck__continue;
    t2.u = *CAST<uint32_t*>(cfr.i8p + 32);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:511
    t2.i32 = t2.i32 + int32_t(0x5);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:512
    t2.clearHighWord();
    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:514
    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:515
    t3.i = t1.i;
    t3.i32 = t3.i32 & int32_t(0x1);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:516
    t3.clearHighWord();
    if (t3.i32 == 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:517
        goto _offlineasm_5_functionArityCheck__noExtraSlot;
    t0.i = intptr_t(0xa);                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:518

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_5_functionArityCheck__fillExtraSlots)
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:520
    t2.i32 = t2.i32 + int32_t(0x1);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:521
    t2.clearHighWord();
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:522
        int32_t temp = t3.i32 - int32_t(0x1);
        t3.i32 = temp;
        if (temp != 0)
            goto  _offlineasm_5_functionArityCheck__fillExtraSlots;
    }
    t1.i32 = t1.i32 & int32_t(-2);                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:523
    t1.clearHighWord();
    if (t1.i32 == 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:524
        goto _offlineasm_5_functionArityCheck__continue;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_5_functionArityCheck__noExtraSlot)
    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:527
    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:528
    t1.i64 = -t1.i64;
    t3.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:529
    t3.i = t3.i - intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:530
    t2.i32 = t2.i32 + int32_t(0x0);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:531
    t2.clearHighWord();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_5_functionArityCheck__copyLoop)
    t0.i64 = *CAST<int64_t*>(t3.i8p);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:533
    *CAST<int64_t*>(t3.i8p + (t1.i << 3)) = t0.i64;          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:534
    t3.i = t3.i + intptr_t(0x8);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:535
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:536
        int32_t temp = t2.i32 - int32_t(0x1);
        t2.i32 = temp;
        if (temp != 0)
            goto  _offlineasm_5_functionArityCheck__copyLoop;
    }
    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:538
    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:539
    t2.i = t1.i;
    t0.i = intptr_t(0xa);                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:540

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_5_functionArityCheck__fillLoop)
    *CAST<int64_t*>(t3.i8p + (t1.i << 3)) = t0.i64;          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:542
    t3.i = t3.i + intptr_t(0x8);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:543
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:544
        int32_t temp = t2.i32 + int32_t(0x1);
        t2.i32 = temp;
        if (temp != 0)
            goto  _offlineasm_5_functionArityCheck__fillLoop;
    }
    t1.i = t1.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:546
    cfr.i = cfr.i + t1.i;                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:547
    sp.i = sp.i + t1.i;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:548

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_5_functionArityCheck__continue)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:552
    pcBase.i = *CAST<intptr_t*>(t1.i8p + 64);                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:553
    pc.i = intptr_t(0x0);                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:554
    goto _offlineasm_functionForConstructBegin;              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:555

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_functionForConstructBegin)
    t0.u = *CAST<uint32_t*>(t1.i8p + 40);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1054
    t0.i = t0.i + intptr_t(-1);                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1055
    if (t0.i >= intptr_t(0x0))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1056
        goto _offlineasm_functionInitialization__5_assert__ok;
    CRASH();                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:432

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_functionInitialization__5_assert__ok)
    if (t0.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1057
        goto _offlineasm_5_functionInitialization__argumentProfileDone;
    t3.i = *CAST<intptr_t*>(t1.i8p + 200);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1058
    t2.i = intptr_t(0x28) * t0.i;                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1059
    t0.i = t0.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1060
    t3.i = t3.i + t2.i;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1061

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_5_functionInitialization__argumentProfileLoop)
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 0) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1064
    t3.i = t3.i - intptr_t(0x28);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1065
    *CAST<int64_t*>(t3.i8p + 64) = t2.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1066
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1074
        intptr_t temp = t0.i + intptr_t(-8);
        t0.i = temp;
        if (temp != 0)
            goto  _offlineasm_5_functionInitialization__argumentProfileLoop;
    }

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_5_functionInitialization__argumentProfileDone)
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(handleUncaughtException)
    t3.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:278
    t3.i = t3.i & intptr_t(-16384);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:279
    t3.i = *CAST<intptr_t*>(t3.i8p + 152);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:280
    cfr.i = *CAST<intptr_t*>(t3.i8p + 20400);                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:282
    *CAST<intptr_t*>(t3.i8p + 20400) = intptr_t(0x0);        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:283
    cfr.i = *CAST<intptr_t*>(cfr.i8p);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:285
    t2.i = cfr.i - intptr_t(0x20);                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:768
    t3.i = *CAST<intptr_t*>(t2.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:288
    t5.i = *CAST<intptr_t*>(t2.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:289
    *CAST<intptr_t*>(t3.i8p + 13560) = t5.i;                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:290
    t5.i = *CAST<intptr_t*>(t2.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:291
    *CAST<intptr_t*>(t3.i8p + 13552) = t5.i;                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:292
    sp.i = cfr.i - intptr_t(0x0);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:294
    POP(cfr);                                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:762
    POP(lr);                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:763
    opcode = lr.opcode;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:298
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_enter)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:572
    t2.u = *CAST<uint32_t*>(t2.i8p + 20);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:573
    t2.i64 = t2.i64 - int64_t(0x0);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:574
    t1.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:575
    t1.i64 = t1.i64 - int64_t(0x0);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:576
    if (t2.i32 == 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:577
        goto _offlineasm_opEnterDone;
    t0.i = intptr_t(0xa);                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:578
    t2.i32 = -t2.i32;                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:579
    t2.clearHighWord();
    t2.i64 = t2.i32;                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:580

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opEnterLoop)
    *CAST<int64_t*>(t1.i8p + (t2.i << 3)) = t0.i64;          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:582
    t2.i64 = t2.i64 + int64_t(0x1);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:583
    if (t2.i64 != 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:584
        goto _offlineasm_opEnterLoop;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opEnterDone)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_enter(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x1);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_argument_count)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.u = *CAST<uint32_t*>(cfr.i8p + 32);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:593
    t0.i32 = t0.i32 - int32_t(0x1);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:594
    t0.clearHighWord();
    t0.i64 = t0.i64 | int64_t(0xffff000000000000);           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:595
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:596
    pc.i = pc.i + intptr_t(0x2);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_get_scope)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:602
    t0.i = *CAST<intptr_t*>(t0.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:603
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:605
    pc.i = pc.i + intptr_t(0x2);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_to_this)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:612
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:613
        goto _offlineasm_opToThisSlow;
    if (*CAST<int8_t*>(t0.i8p + 5) != int8_t(0x15))          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:614
        goto _offlineasm_opToThisSlow;
    t1.u = *CAST<uint32_t*>(t0.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:477
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:470
    t2.i = *CAST<intptr_t*>(t2.i8p + 56);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:471
    t2.i = *CAST<intptr_t*>(t2.i8p + 176);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:472
    t1.i = *CAST<intptr_t*>(t2.i8p + (t1.i << 3));           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:473
    t2.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    if (t1.i != t2.i)                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:617
        goto _offlineasm_opToThisSlow;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opToThisSlow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_to_this(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_check_tdz)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_loadConstantOrVariable__done;           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_loadConstantOrVariable__done)
    if (t1.i64 != int64_t(0x0))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:629
        goto _offlineasm_opNotTDZ;
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_throw_tdz_error(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opNotTDZ)
    pc.i = pc.i + intptr_t(0x2);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_mov)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_5_loadConstantOrVariable__constant;
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_5_loadConstantOrVariable__done;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_5_loadConstantOrVariable__constant)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t2.i = *CAST<intptr_t*>(t2.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t2.i64 = *CAST<int64_t*>(t2.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_5_loadConstantOrVariable__done)
    *CAST<int64_t*>(cfr.i8p + (t0.i << 3)) = t2.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:641
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_not)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_6_loadConstantOrVariable__constant;
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_6_loadConstantOrVariable__done;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_6_loadConstantOrVariable__constant)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t2.i = *CAST<intptr_t*>(t2.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t2.i64 = *CAST<int64_t*>(t2.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_6_loadConstantOrVariable__done)
    t2.i64 = t2.i64 ^ int64_t(0x6);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:650
    if ((t2.i64 & int64_t(-2)) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:651
        goto _offlineasm_opNotSlow;
    t2.i64 = t2.i64 ^ int64_t(0x7);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:652
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t2.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:653
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opNotSlow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_not(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_eq)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_equalityComparison__loadConstantOrVariableInt32__7_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_equalityComparison__loadConstantOrVariableInt32__7_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_equalityComparison__loadConstantOrVariableInt32__7_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_equalityComparison__loadConstantOrVariableInt32__7_loadConstantOrVariable__done)
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:396
        goto _offlineasm_equalityComparison__slow;
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_equalityComparison__loadConstantOrVariableInt32__8_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_equalityComparison__loadConstantOrVariableInt32__8_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_equalityComparison__loadConstantOrVariableInt32__8_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_equalityComparison__loadConstantOrVariableInt32__8_loadConstantOrVariable__done)
    if (t0.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:396
        goto _offlineasm_equalityComparison__slow;
    t0.i = (t0.u32 == t1.u32);                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:680
    t0.i64 = t0.i64 | int64_t(0x6);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:669
    *CAST<int64_t*>(cfr.i8p + (t3.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:670
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_equalityComparison__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_eq(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_neq)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_equalityComparison__loadConstantOrVariableInt32__9_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_equalityComparison__loadConstantOrVariableInt32__9_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_equalityComparison__loadConstantOrVariableInt32__9_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_equalityComparison__loadConstantOrVariableInt32__9_loadConstantOrVariable__done)
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:396
        goto _offlineasm_10_equalityComparison__slow;
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_equalityComparison__loadConstantOrVariableInt32__10_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_equalityComparison__loadConstantOrVariableInt32__10_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_equalityComparison__loadConstantOrVariableInt32__10_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_equalityComparison__loadConstantOrVariableInt32__10_loadConstantOrVariable__done)
    if (t0.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:396
        goto _offlineasm_10_equalityComparison__slow;
    t0.i = (t0.u32 != t1.u32);                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:686
    t0.i64 = t0.i64 | int64_t(0x6);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:669
    *CAST<int64_t*>(cfr.i8p + (t3.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:670
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_10_equalityComparison__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_neq(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_eq_null)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:692
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:693
        goto _offlineasm_equalNullComparison__immediate;
    if ((*CAST<int8_t*>(t0.i8p + 6) & int8_t(0x1)) != 0)     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:694
        goto _offlineasm_equalNullComparison__masqueradesAsUndefined;
    t0.i = intptr_t(0x0);                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:695
    goto _offlineasm_equalNullComparison__done;              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:696

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_equalNullComparison__masqueradesAsUndefined)
    t2.u = *CAST<uint32_t*>(t0.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:477
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:470
    t1.i = *CAST<intptr_t*>(t1.i8p + 56);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:471
    t1.i = *CAST<intptr_t*>(t1.i8p + 176);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:472
    t2.i = *CAST<intptr_t*>(t1.i8p + (t2.i << 3));           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:473
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:699
    t0.i = *CAST<intptr_t*>(t0.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:700
    t0.i = (*CAST<uintptr_t*>(t2.i8p + 24) == t0.u);         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:701
    goto _offlineasm_equalNullComparison__done;              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:702

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_equalNullComparison__immediate)
    t0.i64 = t0.i64 & int64_t(-9);                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:704
    t0.i = (t0.u64 == uint64_t(0x2));                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:705

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_equalNullComparison__done)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = t0.i64 | int64_t(0x6);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:713
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:714
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_neq_null)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:692
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:693
        goto _offlineasm_10_equalNullComparison__immediate;
    if ((*CAST<int8_t*>(t0.i8p + 6) & int8_t(0x1)) != 0)     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:694
        goto _offlineasm_10_equalNullComparison__masqueradesAsUndefined;
    t0.i = intptr_t(0x0);                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:695
    goto _offlineasm_10_equalNullComparison__done;           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:696

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_10_equalNullComparison__masqueradesAsUndefined)
    t2.u = *CAST<uint32_t*>(t0.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:477
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:470
    t1.i = *CAST<intptr_t*>(t1.i8p + 56);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:471
    t1.i = *CAST<intptr_t*>(t1.i8p + 176);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:472
    t2.i = *CAST<intptr_t*>(t1.i8p + (t2.i << 3));           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:473
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:699
    t0.i = *CAST<intptr_t*>(t0.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:700
    t0.i = (*CAST<uintptr_t*>(t2.i8p + 24) == t0.u);         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:701
    goto _offlineasm_10_equalNullComparison__done;           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:702

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_10_equalNullComparison__immediate)
    t0.i64 = t0.i64 & int64_t(-9);                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:704
    t0.i = (t0.u64 == uint64_t(0x2));                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:705

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_10_equalNullComparison__done)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = t0.i64 ^ int64_t(0x7);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:722
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:723
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_stricteq)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_strictEq__11_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_strictEq__11_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_strictEq__11_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_strictEq__11_loadConstantOrVariable__done)
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_strictEq__12_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_strictEq__12_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_strictEq__12_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_strictEq__12_loadConstantOrVariable__done)
    t2.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:733
    t2.i64 = t2.i64 | t1.i64;                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:734
    if ((t2.i64 & tagMask.i64) == 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:735
        goto _offlineasm_strictEq__slow;
    if (t0.u64 >= tagTypeNumber.u64)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:736
        goto _offlineasm_strictEq__leftOK;
    if ((t0.i64 & tagTypeNumber.i64) != 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:737
        goto _offlineasm_strictEq__slow;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_strictEq__leftOK)
    if (t1.u64 >= tagTypeNumber.u64)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:739
        goto _offlineasm_strictEq__rightOK;
    if ((t1.i64 & tagTypeNumber.i64) != 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:740
        goto _offlineasm_strictEq__slow;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_strictEq__rightOK)
    t0.i = (t0.u64 == t1.u64);                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:755
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = t0.i64 | int64_t(0x6);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:744
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:745
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_strictEq__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_stricteq(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_nstricteq)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_strictEq__13_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_strictEq__13_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_strictEq__13_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_strictEq__13_loadConstantOrVariable__done)
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_strictEq__14_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_strictEq__14_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_strictEq__14_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_strictEq__14_loadConstantOrVariable__done)
    t2.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:733
    t2.i64 = t2.i64 | t1.i64;                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:734
    if ((t2.i64 & tagMask.i64) == 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:735
        goto _offlineasm_14_strictEq__slow;
    if (t0.u64 >= tagTypeNumber.u64)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:736
        goto _offlineasm_14_strictEq__leftOK;
    if ((t0.i64 & tagTypeNumber.i64) != 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:737
        goto _offlineasm_14_strictEq__slow;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_14_strictEq__leftOK)
    if (t1.u64 >= tagTypeNumber.u64)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:739
        goto _offlineasm_14_strictEq__rightOK;
    if ((t1.i64 & tagTypeNumber.i64) != 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:740
        goto _offlineasm_14_strictEq__slow;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_14_strictEq__rightOK)
    t0.i = (t0.u64 != t1.u64);                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:761
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = t0.i64 | int64_t(0x6);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:744
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:745
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_14_strictEq__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_nstricteq(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_inc)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:768
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:769
        goto _offlineasm_preOp__slow;
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:782
        int32_t a = int32_t(0x1);
        int32_t b = t1.i32;
        // sign(b) sign(a) | Overflows if:
        // 0       0       | sign(b+a) = 1 (pos + pos != neg)
        // 0       1       | never
        // 1       0       | never
        // 1       1       | sign(b+a) = 0 (neg + neg != pos)
        bool didOverflow = ((SIGN_BIT32(b) == SIGN_BIT32(a)) && (SIGN_BIT32(b+a) != SIGN_BIT32(a)));
        t1.i32 = t1.i32 + int32_t(0x1);
        if (didOverflow)
            goto _offlineasm_preOp__slow;
    }
    t1.i64 = t1.i64 | tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:771
    *CAST<int64_t*>(cfr.i8p + (t0.i << 3)) = t1.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:772
    pc.i = pc.i + intptr_t(0x2);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_preOp__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_inc(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x2);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_dec)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:768
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:769
        goto _offlineasm_14_preOp__slow;
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:788
        int32_t a = int32_t(0x1);
        int32_t b = t1.i32;
        // sign(b) sign(a) | Overflows if:
        // 0       0       | never
        // 0       1       | sign(b-a) = 1 (pos - neg != pos)
        // 1       0       | sign(b-a) = 0 (neg - pos != pos)
        // 1       1       | never
        bool didOverflow = ((SIGN_BIT32(b) != SIGN_BIT32(a)) && (SIGN_BIT32(b-a) == SIGN_BIT32(a)));
        t1.i32 = t1.i32 - int32_t(0x1);
        if (didOverflow)
            goto _offlineasm_14_preOp__slow;
    }
    t1.i64 = t1.i64 | tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:771
    *CAST<int64_t*>(cfr.i8p + (t0.i << 3)) = t1.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:772
    pc.i = pc.i + intptr_t(0x2);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_14_preOp__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_dec(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x2);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_to_number)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_15_loadConstantOrVariable__constant;
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_15_loadConstantOrVariable__done;        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_15_loadConstantOrVariable__constant)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t2.i = *CAST<intptr_t*>(t2.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t2.i64 = *CAST<int64_t*>(t2.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_15_loadConstantOrVariable__done)
    if (t2.u64 >= tagTypeNumber.u64)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:797
        goto _offlineasm_opToNumberIsImmediate;
    if ((t2.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:798
        goto _offlineasm_opToNumberSlow;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opToNumberIsImmediate)
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t2.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:800
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t0.i8p + 24) = t2.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opToNumberSlow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_to_number(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_to_string)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_16_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_16_loadConstantOrVariable__done;        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_16_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_16_loadConstantOrVariable__done)
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:814
        goto _offlineasm_opToStringSlow;
    if (*CAST<int8_t*>(t0.i8p + 5) != int8_t(0x6))           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:815
        goto _offlineasm_opToStringSlow;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opToStringIsString)
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:817
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opToStringSlow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_to_string(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_negate)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_17_loadConstantOrVariable__constant;
    t3.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_17_loadConstantOrVariable__done;        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_17_loadConstantOrVariable__constant)
    t3.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t3.i = *CAST<intptr_t*>(t3.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t3.i64 = *CAST<int64_t*>(t3.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_17_loadConstantOrVariable__done)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t3.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:831
        goto _offlineasm_opNegateNotInt;
    if ((t3.i32 & int32_t(0x7fffffff)) == 0)                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:832
        goto _offlineasm_opNegateSlow;
    t3.i32 = -t3.i32;                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:833
    t3.clearHighWord();
    t2.i32 = t2.i32 | int32_t(0x100000);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:834
    t2.clearHighWord();
    t3.i64 = t3.i64 | tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:835
    *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)) = t2.i32; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:298
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t3.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:837
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opNegateNotInt)
    if ((t3.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:840
        goto _offlineasm_opNegateSlow;
    t3.i64 = t3.i64 ^ int64_t(0x8000000000000000);           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:841
    t2.i32 = t2.i32 | int32_t(0x200000);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:842
    t2.clearHighWord();
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t3.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:843
    *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)) = t2.i32; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:298
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opNegateSlow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_negate(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_add)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_binaryOp__binaryOpCustomStore__18_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_binaryOp__binaryOpCustomStore__18_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOp__binaryOpCustomStore__18_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOp__binaryOpCustomStore__18_loadConstantOrVariable__done)
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_binaryOp__binaryOpCustomStore__19_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_binaryOp__binaryOpCustomStore__19_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOp__binaryOpCustomStore__19_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOp__binaryOpCustomStore__19_loadConstantOrVariable__done)
    if (t0.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:857
        goto _offlineasm_binaryOp__binaryOpCustomStore__op1NotInt;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:858
        goto _offlineasm_binaryOp__binaryOpCustomStore__op2NotInt;
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:926
        int32_t a = t1.i32;
        int32_t b = t0.i32;
        // sign(b) sign(a) | Overflows if:
        // 0       0       | sign(b+a) = 1 (pos + pos != neg)
        // 0       1       | never
        // 1       0       | never
        // 1       1       | sign(b+a) = 0 (neg + neg != pos)
        bool didOverflow = ((SIGN_BIT32(b) == SIGN_BIT32(a)) && (SIGN_BIT32(b+a) != SIGN_BIT32(a)));
        t0.i32 = t0.i32 + t1.i32;
        if (didOverflow)
            goto _offlineasm_binaryOp__binaryOpCustomStore__slow;
    }
    t0.i64 = t0.i64 | tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:917
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:918
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t1.i32 = t1.i32 | int32_t(0x120000);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:862
    t1.clearHighWord();
    *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)) = t1.i32; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:298
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOp__binaryOpCustomStore__op1NotInt)
    if ((t0.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:868
        goto _offlineasm_binaryOp__binaryOpCustomStore__slow;
    if (t1.u64 >= tagTypeNumber.u64)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:869
        goto _offlineasm_binaryOp__binaryOpCustomStore__op1NotIntOp2Int;
    if ((t1.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:870
        goto _offlineasm_binaryOp__binaryOpCustomStore__slow;
    t1.i64 = t1.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:871
    d1.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:872
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i32 = t2.i32 | int32_t(0x240000);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:874
    t2.clearHighWord();
    *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)) = t2.i32; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:298
    goto _offlineasm_binaryOp__binaryOpCustomStore__op1NotIntReady; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:876

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOp__binaryOpCustomStore__op1NotIntOp2Int)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i32 = t2.i32 | int32_t(0x220000);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:879
    t2.clearHighWord();
    *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)) = t2.i32; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:298
    d1.d = t1.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:881

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOp__binaryOpCustomStore__op1NotIntReady)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = t0.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:884
    d0.d = t0.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:885
    d0.d = d0.d + d1.d;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:927
    t0.i64 = d0.castToInt64;                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:887
    t0.i64 = t0.i64 - tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:888
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:889
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOp__binaryOpCustomStore__op2NotInt)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if ((t1.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:895
        goto _offlineasm_binaryOp__binaryOpCustomStore__slow;
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i32 = t3.i32 | int32_t(0x140000);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:897
    t3.clearHighWord();
    *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)) = t3.i32; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:298
    d0.d = t0.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:899
    t1.i64 = t1.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:900
    d1.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:901
    d0.d = d0.d + d1.d;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:927
    t0.i64 = d0.castToInt64;                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:903
    t0.i64 = t0.i64 - tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:904
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:905
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOp__binaryOpCustomStore__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_add(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_mul)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_binaryOpCustomStore__20_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_binaryOpCustomStore__20_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOpCustomStore__20_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOpCustomStore__20_loadConstantOrVariable__done)
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_binaryOpCustomStore__21_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_binaryOpCustomStore__21_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOpCustomStore__21_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOpCustomStore__21_loadConstantOrVariable__done)
    if (t0.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:857
        goto _offlineasm_21_binaryOpCustomStore__op1NotInt;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:858
        goto _offlineasm_21_binaryOpCustomStore__op2NotInt;
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:936
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:937
        uint32_t a = t1.i32;
        uint32_t b = t3.i32;
        bool didOverflow = ((b | a) >> 15);
        t3.i32 = t3.i32 * t1.i32;
        if (didOverflow)
            goto _offlineasm_21_binaryOpCustomStore__slow;
    }
    if (t3.i32 != 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:938
        goto _offlineasm_binaryOpCustomStore__integerOperationAndStore__done;
    if (t1.i32 < int32_t(0x0))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:939
        goto _offlineasm_21_binaryOpCustomStore__slow;
    if (t0.i32 < int32_t(0x0))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:940
        goto _offlineasm_21_binaryOpCustomStore__slow;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOpCustomStore__integerOperationAndStore__done)
    t3.i64 = t3.i64 | tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:942
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t3.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:943
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t1.i32 = t1.i32 | int32_t(0x120000);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:862
    t1.clearHighWord();
    *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)) = t1.i32; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:298
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_21_binaryOpCustomStore__op1NotInt)
    if ((t0.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:868
        goto _offlineasm_21_binaryOpCustomStore__slow;
    if (t1.u64 >= tagTypeNumber.u64)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:869
        goto _offlineasm_21_binaryOpCustomStore__op1NotIntOp2Int;
    if ((t1.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:870
        goto _offlineasm_21_binaryOpCustomStore__slow;
    t1.i64 = t1.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:871
    d1.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:872
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i32 = t2.i32 | int32_t(0x240000);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:874
    t2.clearHighWord();
    *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)) = t2.i32; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:298
    goto _offlineasm_21_binaryOpCustomStore__op1NotIntReady; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:876

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_21_binaryOpCustomStore__op1NotIntOp2Int)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i32 = t2.i32 | int32_t(0x220000);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:879
    t2.clearHighWord();
    *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)) = t2.i32; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:298
    d1.d = t1.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:881

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_21_binaryOpCustomStore__op1NotIntReady)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = t0.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:884
    d0.d = t0.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:885
    d0.d = d0.d * d1.d;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:945
    t0.i64 = d0.castToInt64;                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:887
    t0.i64 = t0.i64 - tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:888
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:889
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_21_binaryOpCustomStore__op2NotInt)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if ((t1.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:895
        goto _offlineasm_21_binaryOpCustomStore__slow;
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i32 = t3.i32 | int32_t(0x140000);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:897
    t3.clearHighWord();
    *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)) = t3.i32; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:298
    d0.d = t0.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:899
    t1.i64 = t1.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:900
    d1.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:901
    d0.d = d0.d * d1.d;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:945
    t0.i64 = d0.castToInt64;                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:903
    t0.i64 = t0.i64 - tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:904
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:905
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_21_binaryOpCustomStore__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_mul(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_sub)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_binaryOp__binaryOpCustomStore__22_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_binaryOp__binaryOpCustomStore__22_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOp__binaryOpCustomStore__22_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOp__binaryOpCustomStore__22_loadConstantOrVariable__done)
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_binaryOp__binaryOpCustomStore__23_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_binaryOp__binaryOpCustomStore__23_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOp__binaryOpCustomStore__23_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOp__binaryOpCustomStore__23_loadConstantOrVariable__done)
    if (t0.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:857
        goto _offlineasm_binaryOp__23_binaryOpCustomStore__op1NotInt;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:858
        goto _offlineasm_binaryOp__23_binaryOpCustomStore__op2NotInt;
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:952
        int32_t a = t1.i32;
        int32_t b = t0.i32;
        // sign(b) sign(a) | Overflows if:
        // 0       0       | never
        // 0       1       | sign(b-a) = 1 (pos - neg != pos)
        // 1       0       | sign(b-a) = 0 (neg - pos != pos)
        // 1       1       | never
        bool didOverflow = ((SIGN_BIT32(b) != SIGN_BIT32(a)) && (SIGN_BIT32(b-a) == SIGN_BIT32(a)));
        t0.i32 = t0.i32 - t1.i32;
        if (didOverflow)
            goto _offlineasm_binaryOp__23_binaryOpCustomStore__slow;
    }
    t0.i64 = t0.i64 | tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:917
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:918
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t1.i32 = t1.i32 | int32_t(0x120000);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:862
    t1.clearHighWord();
    *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)) = t1.i32; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:298
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOp__23_binaryOpCustomStore__op1NotInt)
    if ((t0.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:868
        goto _offlineasm_binaryOp__23_binaryOpCustomStore__slow;
    if (t1.u64 >= tagTypeNumber.u64)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:869
        goto _offlineasm_binaryOp__23_binaryOpCustomStore__op1NotIntOp2Int;
    if ((t1.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:870
        goto _offlineasm_binaryOp__23_binaryOpCustomStore__slow;
    t1.i64 = t1.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:871
    d1.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:872
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i32 = t2.i32 | int32_t(0x240000);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:874
    t2.clearHighWord();
    *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)) = t2.i32; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:298
    goto _offlineasm_binaryOp__23_binaryOpCustomStore__op1NotIntReady; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:876

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOp__23_binaryOpCustomStore__op1NotIntOp2Int)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i32 = t2.i32 | int32_t(0x220000);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:879
    t2.clearHighWord();
    *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)) = t2.i32; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:298
    d1.d = t1.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:881

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOp__23_binaryOpCustomStore__op1NotIntReady)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = t0.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:884
    d0.d = t0.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:885
    d0.d = d0.d - d1.d;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:953
    t0.i64 = d0.castToInt64;                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:887
    t0.i64 = t0.i64 - tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:888
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:889
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOp__23_binaryOpCustomStore__op2NotInt)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if ((t1.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:895
        goto _offlineasm_binaryOp__23_binaryOpCustomStore__slow;
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i32 = t3.i32 | int32_t(0x140000);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:897
    t3.clearHighWord();
    *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)) = t3.i32; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:298
    d0.d = t0.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:899
    t1.i64 = t1.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:900
    d1.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:901
    d0.d = d0.d - d1.d;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:953
    t0.i64 = d0.castToInt64;                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:903
    t0.i64 = t0.i64 - tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:904
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:905
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_binaryOp__23_binaryOpCustomStore__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_sub(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_div)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_div(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_lshift)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_bitOp__24_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_bitOp__24_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__24_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__24_loadConstantOrVariable__done)
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_bitOp__25_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_bitOp__25_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__25_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__25_loadConstantOrVariable__done)
    if (t0.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:992
        goto _offlineasm_bitOp__slow;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:993
        goto _offlineasm_bitOp__slow;
    t0.i32 = t0.i32 << (t1.i & 0x1f);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1007
    t0.clearHighWord();
    t0.i64 = t0.i64 | tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:995
    *CAST<int64_t*>(cfr.i8p + (t3.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:996
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_lshift(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_rshift)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_bitOp__26_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_bitOp__26_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__26_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__26_loadConstantOrVariable__done)
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_bitOp__27_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_bitOp__27_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__27_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__27_loadConstantOrVariable__done)
    if (t0.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:992
        goto _offlineasm_27_bitOp__slow;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:993
        goto _offlineasm_27_bitOp__slow;
    t0.i32 = t0.i32 >> (t1.i & 0x1f);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1015
    t0.clearHighWord();
    t0.i64 = t0.i64 | tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:995
    *CAST<int64_t*>(cfr.i8p + (t3.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:996
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_27_bitOp__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_rshift(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_urshift)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_bitOp__28_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_bitOp__28_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__28_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__28_loadConstantOrVariable__done)
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_bitOp__29_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_bitOp__29_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__29_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__29_loadConstantOrVariable__done)
    if (t0.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:992
        goto _offlineasm_29_bitOp__slow;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:993
        goto _offlineasm_29_bitOp__slow;
    t0.u32 = t0.u32 >> (t1.i & 0x1f);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1023
    t0.clearHighWord();
    t0.i64 = t0.i64 | tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:995
    *CAST<int64_t*>(cfr.i8p + (t3.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:996
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_29_bitOp__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_urshift(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_unsigned)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_30_loadConstantOrVariable__constant;
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_30_loadConstantOrVariable__done;        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_30_loadConstantOrVariable__constant)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t2.i = *CAST<intptr_t*>(t2.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t2.i64 = *CAST<int64_t*>(t2.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_30_loadConstantOrVariable__done)
    if (t2.i32 < int32_t(0x0))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1033
        goto _offlineasm_opUnsignedSlow;
    *CAST<int64_t*>(cfr.i8p + (t0.i << 3)) = t2.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1034
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opUnsignedSlow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_unsigned(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_bitand)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_bitOp__31_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_bitOp__31_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__31_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__31_loadConstantOrVariable__done)
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_bitOp__32_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_bitOp__32_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__32_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__32_loadConstantOrVariable__done)
    if (t0.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:992
        goto _offlineasm_32_bitOp__slow;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:993
        goto _offlineasm_32_bitOp__slow;
    t0.i32 = t0.i32 & t1.i32;                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1044
    t0.clearHighWord();
    t0.i64 = t0.i64 | tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:995
    *CAST<int64_t*>(cfr.i8p + (t3.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:996
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_32_bitOp__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_bitand(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_bitxor)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_bitOp__33_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_bitOp__33_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__33_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__33_loadConstantOrVariable__done)
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_bitOp__34_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_bitOp__34_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__34_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__34_loadConstantOrVariable__done)
    if (t0.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:992
        goto _offlineasm_34_bitOp__slow;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:993
        goto _offlineasm_34_bitOp__slow;
    t0.i32 = t0.i32 ^ t1.i32;                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1052
    t0.clearHighWord();
    t0.i64 = t0.i64 | tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:995
    *CAST<int64_t*>(cfr.i8p + (t3.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:996
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_34_bitOp__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_bitxor(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_bitor)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_bitOp__35_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_bitOp__35_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__35_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__35_loadConstantOrVariable__done)
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_bitOp__36_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_bitOp__36_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__36_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_bitOp__36_loadConstantOrVariable__done)
    if (t0.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:992
        goto _offlineasm_36_bitOp__slow;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:993
        goto _offlineasm_36_bitOp__slow;
    t0.i32 = t0.i32 | t1.i32;                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1060
    t0.clearHighWord();
    t0.i64 = t0.i64 | tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:995
    *CAST<int64_t*>(cfr.i8p + (t3.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:996
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_36_bitOp__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_bitor(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_overrides_has_instance)
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_37_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_37_loadConstantOrVariable__done;        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_37_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_37_loadConstantOrVariable__done)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1071
    t2.i = *CAST<intptr_t*>(t2.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1072
    t2.i = *CAST<intptr_t*>(t2.i8p + 336);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1073
    if (t0.i64 != t2.i64)                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1074
        goto _offlineasm_opOverridesHasInstanceNotDefaultSymbol;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_38_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_38_loadConstantOrVariable__done;        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_38_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_38_loadConstantOrVariable__done)
    t1.i = ((*CAST<int8_t*>(t0.i8p + 6) & int8_t(0x2)) == 0); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1078
    t1.i64 = t1.i64 | int64_t(0x6);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1079
    *CAST<int64_t*>(cfr.i8p + (t3.i << 3)) = t1.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1080
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opOverridesHasInstanceNotDefaultSymbol)
    *CAST<int64_t*>(cfr.i8p + (t3.i << 3)) = int64_t(0x7);   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1084
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_instanceof_custom)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_instanceof_custom(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_is_empty)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_39_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_39_loadConstantOrVariable__done;        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_39_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_39_loadConstantOrVariable__done)
    t3.i = (t0.u64 == uint64_t(0x0));                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1099
    t3.i64 = t3.i64 | int64_t(0x6);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1100
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t3.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1101
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_is_undefined)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_40_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_40_loadConstantOrVariable__done;        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_40_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_40_loadConstantOrVariable__done)
    if ((t0.i64 & tagMask.i64) == 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1110
        goto _offlineasm_opIsUndefinedCell;
    t3.i = (t0.u64 == uint64_t(0xa));                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1111
    t3.i64 = t3.i64 | int64_t(0x6);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1112
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t3.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1113
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opIsUndefinedCell)
    if ((*CAST<int8_t*>(t0.i8p + 6) & int8_t(0x1)) != 0)     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1116
        goto _offlineasm_masqueradesAsUndefined;
    t1.i = intptr_t(0x6);                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1117
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t1.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1118
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_masqueradesAsUndefined)
    t3.u = *CAST<uint32_t*>(t0.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:477
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:470
    t1.i = *CAST<intptr_t*>(t1.i8p + 56);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:471
    t1.i = *CAST<intptr_t*>(t1.i8p + 176);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:472
    t3.i = *CAST<intptr_t*>(t1.i8p + (t3.i << 3));           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:473
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1122
    t1.i = *CAST<intptr_t*>(t1.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1123
    t0.i = (*CAST<uintptr_t*>(t3.i8p + 24) == t1.u);         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1124
    t0.i64 = t0.i64 | int64_t(0x6);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1125
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1126
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_is_boolean)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_41_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_41_loadConstantOrVariable__done;        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_41_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_41_loadConstantOrVariable__done)
    t0.i64 = t0.i64 ^ int64_t(0x6);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1135
    t0.i = ((t0.i64 & int64_t(-2)) == 0);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1136
    t0.i64 = t0.i64 | int64_t(0x6);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1137
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1138
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_is_number)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_42_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_42_loadConstantOrVariable__done;        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_42_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_42_loadConstantOrVariable__done)
    t1.i = ((t0.i64 & tagTypeNumber.i64) != 0);              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1147
    t1.i64 = t1.i64 | int64_t(0x6);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1148
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t1.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1149
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_is_cell_with_type)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_43_loadConstantOrVariable__constant;
    t3.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_43_loadConstantOrVariable__done;        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_43_loadConstantOrVariable__constant)
    t3.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t3.i = *CAST<intptr_t*>(t3.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t3.i64 = *CAST<int64_t*>(t3.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_43_loadConstantOrVariable__done)
    if ((t3.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1159
        goto _offlineasm_notCellCase;
    t1.i = (*CAST<uint8_t*>(t3.i8p + 5) == t0.u8);           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1160
    t1.i64 = t1.i64 | int64_t(0x6);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1161
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t1.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1162
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_notCellCase)
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = int64_t(0x6);   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1165
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_is_object)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_44_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_44_loadConstantOrVariable__done;        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_44_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_44_loadConstantOrVariable__done)
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1174
        goto _offlineasm_opIsObjectNotCell;
    t1.i = (*CAST<uint8_t*>(t0.i8p + 5) >= uint8_t(0x14));   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1175
    t1.i64 = t1.i64 | int64_t(0x6);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1176
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t1.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1177
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opIsObjectNotCell)
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = int64_t(0x6);   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1180
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_get_by_id)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_loadConstantOrVariableCell__45_loadConstantOrVariable__constant;
    t3.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_loadConstantOrVariableCell__45_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_loadConstantOrVariableCell__45_loadConstantOrVariable__constant)
    t3.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t3.i = *CAST<intptr_t*>(t3.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t3.i64 = *CAST<int64_t*>(t3.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_loadConstantOrVariableCell__45_loadConstantOrVariable__done)
    if ((t3.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_opGetByIdSlow;
    t1.u = *CAST<uint32_t*>(t3.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1213
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i32 != t1.i32)                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1215
        goto _offlineasm_opGetByIdSlow;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i32 < int32_t(0x64))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1185
        goto _offlineasm_loadPropertyAtVariableOffset__isInline;
    t3.i = *CAST<intptr_t*>(t3.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1186
    t1.i32 = -t1.i32;                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1187
    t1.clearHighWord();
    t1.i64 = t1.i32;                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1188
    goto _offlineasm_loadPropertyAtVariableOffset__ready;    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1189

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_loadPropertyAtVariableOffset__isInline)
    t3.i = t3.i + intptr_t(-768);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1191

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_loadPropertyAtVariableOffset__ready)
    t0.i64 = *CAST<int64_t*>(t3.i8p + (t1.i << 3) + intptr_t(0x310)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1193
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1219
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x40)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t1.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x9);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opGetByIdSlow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_get_by_id(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x9);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_get_by_id_proto_load)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_loadConstantOrVariableCell__46_loadConstantOrVariable__constant;
    t3.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_loadConstantOrVariableCell__46_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_loadConstantOrVariableCell__46_loadConstantOrVariable__constant)
    t3.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t3.i = *CAST<intptr_t*>(t3.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t3.i64 = *CAST<int64_t*>(t3.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_loadConstantOrVariableCell__46_loadConstantOrVariable__done)
    if ((t3.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_opGetByIdProtoSlow;
    t1.u = *CAST<uint32_t*>(t3.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1232
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i32 != t1.i32)                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1234
        goto _offlineasm_opGetByIdProtoSlow;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i32 < int32_t(0x64))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1185
        goto _offlineasm_46_loadPropertyAtVariableOffset__isInline;
    t3.i = *CAST<intptr_t*>(t3.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1186
    t1.i32 = -t1.i32;                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1187
    t1.clearHighWord();
    t1.i64 = t1.i32;                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1188
    goto _offlineasm_46_loadPropertyAtVariableOffset__ready; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1189

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_46_loadPropertyAtVariableOffset__isInline)
    t3.i = t3.i + intptr_t(-768);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1191

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_46_loadPropertyAtVariableOffset__ready)
    t0.i64 = *CAST<int64_t*>(t3.i8p + (t1.i << 3) + intptr_t(0x310)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1193
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1239
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x40)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t1.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x9);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opGetByIdProtoSlow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_get_by_id(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x9);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_get_by_id_unset)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_loadConstantOrVariableCell__47_loadConstantOrVariable__constant;
    t3.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_loadConstantOrVariableCell__47_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_loadConstantOrVariableCell__47_loadConstantOrVariable__constant)
    t3.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t3.i = *CAST<intptr_t*>(t3.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t3.i64 = *CAST<int64_t*>(t3.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_loadConstantOrVariableCell__47_loadConstantOrVariable__done)
    if ((t3.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_opGetByIdUnsetSlow;
    t1.u = *CAST<uint32_t*>(t3.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1252
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i32 != t1.i32)                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1254
        goto _offlineasm_opGetByIdUnsetSlow;
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = int64_t(0xa);   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1256
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x40)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t1.i8p + 24) = int64_t(0xa);             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x9);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opGetByIdUnsetSlow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_get_by_id(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x9);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_get_array_length)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_loadConstantOrVariableCell__48_loadConstantOrVariable__constant;
    t3.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_loadConstantOrVariableCell__48_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_loadConstantOrVariableCell__48_loadConstantOrVariable__constant)
    t3.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t3.i = *CAST<intptr_t*>(t3.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t3.i64 = *CAST<int64_t*>(t3.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_loadConstantOrVariableCell__48_loadConstantOrVariable__done)
    if ((t3.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_opGetArrayLengthSlow;
    t2.i = t3.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1270
    t0.u = *CAST<uint32_t*>(t2.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:888
    *CAST<int32_t*>(t1.i8p + 4) = t0.i32;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:889
    t2.i = *CAST<uint8_t*>(t2.i8p + 4);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:890
    if ((t2.i32 & int32_t(0x1)) == 0)                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1272
        goto _offlineasm_opGetArrayLengthSlow;
    if ((t2.i32 & int32_t(0x1e)) == 0)                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1273
        goto _offlineasm_opGetArrayLengthSlow;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i = *CAST<intptr_t*>(t3.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1275
    t0.u = *CAST<uint32_t*>(t0.i8p - 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1276
    if (t0.i32 < int32_t(0x0))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1277
        goto _offlineasm_opGetArrayLengthSlow;
    t0.i64 = t0.i64 | tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1278
    t2.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x40)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t2.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1280
    pc.i = pc.i + intptr_t(0x9);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opGetArrayLengthSlow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_get_by_id(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x9);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_put_by_id)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__49_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__49_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__49_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__49_loadConstantOrVariable__done)
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_writeBarrierOnOperands__writeBarrierDone;
    if (t0.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:422
        goto _offlineasm_writeBarrierOnOperands__writeBarrierDone;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__50_loadConstantOrVariable__constant;
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__50_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__50_loadConstantOrVariable__constant)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t2.i = *CAST<intptr_t*>(t2.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t2.i64 = *CAST<int64_t*>(t2.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__50_loadConstantOrVariable__done)
    if ((t2.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__writeBarrierDone;
    if (*CAST<uint8_t*>(t2.i8p + 7) > uint8_t(0x1))          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:894
        goto _offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__skipIfIsRememberedOrInEden__done;
    PUSH(pcBase);                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:410
    PUSH(pc);
    t1.i = t2.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:411
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:412
    llint_write_barrier_slow(t0, t1);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:85
    POP(pc);                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:414
    POP(pcBase);

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__skipIfIsRememberedOrInEden__done)

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__writeBarrierDone)

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierDone)
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t3.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_loadConstantOrVariableCell__51_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t3.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_loadConstantOrVariableCell__51_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_loadConstantOrVariableCell__51_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t3.i = t3.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t3.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_loadConstantOrVariableCell__51_loadConstantOrVariable__done)
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_opPutByIdSlow;
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i32 != *CAST<int32_t*>(t0.i8p))                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1294
        goto _offlineasm_opPutByIdSlow;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_52_loadConstantOrVariable__constant;
    t3.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_52_loadConstantOrVariable__done;        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_52_loadConstantOrVariable__constant)
    t3.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t3.i = *CAST<intptr_t*>(t3.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t3.i64 = *CAST<int64_t*>(t3.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_52_loadConstantOrVariable__done)
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x40)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    if ((t1.i & intptr_t(0x6)) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1311
        goto _offlineasm_opPutByIdTypeCheckObjectWithStructureOrOther;
    t1.i = t1.i & intptr_t(-8);                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1314
    if (t1.i < intptr_t(0x28))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1315
        goto _offlineasm_opPutByIdTypeCheckLessThanString;
    if (t1.i < intptr_t(0x40))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1318
        goto _offlineasm_opPutByIdTypeCheckLessThanObjectOrOther;
    if (t1.i == intptr_t(0x48))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1321
        goto _offlineasm_opPutByIdDoneCheckingTypes;
    if ((t3.i64 & tagMask.i64) == 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1324
        goto _offlineasm_opPutByIdTypeCheckObject;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opPutByIdTypeCheckOther)
    t3.i64 = t3.i64 & int64_t(-9);                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1326
    if (t3.i64 == int64_t(0x2))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1327
        goto _offlineasm_opPutByIdDoneCheckingTypes;
    goto _offlineasm_opPutByIdSlow;                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1328

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opPutByIdTypeCheckLessThanObjectOrOther)
    if ((t3.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1332
        goto _offlineasm_opPutByIdSlow;
    if (t1.i == intptr_t(0x38))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1333
        goto _offlineasm_opPutByIdTypeCheckObject;
    if (t1.i == intptr_t(0x30))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1334
        goto _offlineasm_opPutByIdTypeCheckSymbol;
    if (*CAST<int8_t*>(t3.i8p + 5) == int8_t(0x6))           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1335
        goto _offlineasm_opPutByIdDoneCheckingTypes;
    goto _offlineasm_opPutByIdSlow;                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1336

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opPutByIdTypeCheckObject)
    if (*CAST<uint8_t*>(t3.i8p + 5) >= uint8_t(0x14))        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1338
        goto _offlineasm_opPutByIdDoneCheckingTypes;
    goto _offlineasm_opPutByIdSlow;                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1339

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opPutByIdTypeCheckSymbol)
    if (*CAST<int8_t*>(t3.i8p + 5) == int8_t(0x7))           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1341
        goto _offlineasm_opPutByIdDoneCheckingTypes;
    goto _offlineasm_opPutByIdSlow;                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1342

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opPutByIdTypeCheckLessThanString)
    if (t1.i < intptr_t(0x18))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1346
        goto _offlineasm_opPutByIdTypeCheckLessThanInt32;
    if (t1.i == intptr_t(0x20))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1349
        goto _offlineasm_opPutByIdTypeCheckNumber;
    if (t3.u64 >= tagTypeNumber.u64)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1351
        goto _offlineasm_opPutByIdDoneCheckingTypes;
    goto _offlineasm_opPutByIdSlow;                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1352

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opPutByIdTypeCheckNumber)
    if ((t3.i64 & tagTypeNumber.i64) != 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1355
        goto _offlineasm_opPutByIdDoneCheckingTypes;
    goto _offlineasm_opPutByIdSlow;                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1356

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opPutByIdTypeCheckLessThanInt32)
    if (t1.i != intptr_t(0x8))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1360
        goto _offlineasm_opPutByIdTypeCheckBottomOrOther;
    t3.i64 = t3.i64 ^ int64_t(0x6);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1361
    if ((t3.i64 & int64_t(-2)) == 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1362
        goto _offlineasm_opPutByIdDoneCheckingTypes;
    goto _offlineasm_opPutByIdSlow;                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1363

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opPutByIdTypeCheckBottomOrOther)
    if (t1.i == intptr_t(0x10))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1366
        goto _offlineasm_opPutByIdTypeCheckOther;
    goto _offlineasm_opPutByIdSlow;                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1367

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opPutByIdTypeCheckObjectWithStructureOrOther)
    if ((t3.i64 & tagMask.i64) == 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1370
        goto _offlineasm_opPutByIdTypeCheckObjectWithStructure;
    if ((t1.i & intptr_t(0x4)) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1371
        goto _offlineasm_opPutByIdTypeCheckOther;
    goto _offlineasm_opPutByIdSlow;                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1372

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opPutByIdTypeCheckObjectWithStructure)
    t1.u = t1.u >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1375
    if (t1.i32 != *CAST<int32_t*>(t3.i8p))                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1376
        goto _offlineasm_opPutByIdSlow;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opPutByIdDoneCheckingTypes)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i32 == 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1381
        goto _offlineasm_opPutByIdNotTransition;
    t3.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x38)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    if (t3.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1387
        goto _offlineasm_opPutByIdTransitionDirect;
    t3.i = *CAST<intptr_t*>(t3.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1389
    if (t3.i != 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1390
        goto _offlineasm_52_assert__ok;
    CRASH();                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:432

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_52_assert__ok)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:470
    t1.i = *CAST<intptr_t*>(t1.i8p + 56);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:471
    t1.i = *CAST<intptr_t*>(t1.i8p + 176);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:472
    t2.i = *CAST<intptr_t*>(t1.i8p + (t2.i << 3));           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:473
    t2.i64 = *CAST<int64_t*>(t2.i8p + 32);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1393
    if (t2.i64 == int64_t(0x2))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1394
        goto _offlineasm_opPutByIdTransitionChainDone;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opPutByIdTransitionChainLoop)
    t1.i = *CAST<intptr_t*>(t3.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1399
    t2.u = *CAST<uint32_t*>(t2.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1400
    if (t2.i32 != *CAST<int32_t*>(t1.i8p + 8))               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1402
        goto _offlineasm_opPutByIdSlow;
    t3.i = t3.i + intptr_t(0x8);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1403
    t2.i64 = *CAST<int64_t*>(t1.i8p + 32);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1404
    if (t2.i64 != int64_t(0x2))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1405
        goto _offlineasm_opPutByIdTransitionChainLoop;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opPutByIdTransitionChainDone)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opPutByIdTransitionDirect)
    *CAST<int32_t*>(t0.i8p) = t1.i32;                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1412

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opPutByIdNotTransition)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_53_loadConstantOrVariable__constant;
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_53_loadConstantOrVariable__done;        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_53_loadConstantOrVariable__constant)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t2.i = *CAST<intptr_t*>(t2.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t2.i64 = *CAST<int64_t*>(t2.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_53_loadConstantOrVariable__done)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i32 < int32_t(0x64))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1198
        goto _offlineasm_storePropertyAtVariableOffset__isInline;
    t0.i = *CAST<intptr_t*>(t0.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1199
    t1.i32 = -t1.i32;                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1200
    t1.clearHighWord();
    t1.i64 = t1.i32;                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1201
    goto _offlineasm_storePropertyAtVariableOffset__ready;   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1202

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_storePropertyAtVariableOffset__isInline)
    t0.i = t0.i + intptr_t(-768);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1204

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_storePropertyAtVariableOffset__ready)
    *CAST<int64_t*>(t0.i8p + (t1.i << 3) + intptr_t(0x310)) = t2.i64; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1206
    pc.i = pc.i + intptr_t(0x9);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opPutByIdSlow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_put_by_id(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x9);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_get_by_val)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_loadConstantOrVariableCell__54_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_loadConstantOrVariableCell__54_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_loadConstantOrVariableCell__54_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_loadConstantOrVariableCell__54_loadConstantOrVariable__done)
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_opGetByValSlow;
    t3.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t2.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1449
    t1.u = *CAST<uint32_t*>(t2.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:888
    *CAST<int32_t*>(t3.i8p + 4) = t1.i32;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:889
    t2.i = *CAST<uint8_t*>(t2.i8p + 4);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:890
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t3.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_loadConstantOrVariableInt32__55_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t3.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_loadConstantOrVariableInt32__55_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_loadConstantOrVariableInt32__55_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t3.i = t3.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t3.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_loadConstantOrVariableInt32__55_loadConstantOrVariable__done)
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:396
        goto _offlineasm_opGetByValSlow;
    t1.i64 = t1.i32;                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1453
    t3.i = *CAST<intptr_t*>(t0.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1454
    t2.i32 = t2.i32 & int32_t(0x1e);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1455
    t2.clearHighWord();
    if (t2.i32 == int32_t(0x14))                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1456
        goto _offlineasm_opGetByValIsContiguous;
    if (t2.i32 != int32_t(0x1a))                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1457
        goto _offlineasm_opGetByValNotContiguous;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opGetByValIsContiguous)
    if (t1.u32 >= *CAST<uint32_t*>(t3.i8p - 8))              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1460
        goto _offlineasm_opGetByValOutOfBounds;
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i64 = *CAST<int64_t*>(t3.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1462
    if (t2.i64 == 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1463
        goto _offlineasm_opGetByValOutOfBounds;
    goto _offlineasm_opGetByValDone;                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1464

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opGetByValNotContiguous)
    if (t2.i32 != int32_t(0x16))                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1467
        goto _offlineasm_opGetByValNotDouble;
    if (t1.u32 >= *CAST<uint32_t*>(t3.i8p - 8))              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1468
        goto _offlineasm_opGetByValOutOfBounds;
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1469
    d0.d = *CAST<double*>(t3.i8p + (t1.i << 3));             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1470
    if (std::isnan(d0.d) || std::isnan(d0.d)                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1471
        || (d0.d != d0.d))
        goto _offlineasm_opGetByValOutOfBounds;
    t2.i64 = d0.castToInt64;                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1472
    t2.i64 = t2.i64 - tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1473
    goto _offlineasm_opGetByValDone;                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1474

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opGetByValNotDouble)
    t2.i32 = t2.i32 - int32_t(0x1c);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1477
    t2.clearHighWord();
    if (t2.u32 > uint32_t(0x2))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1478
        goto _offlineasm_opGetByValNotIndexedStorage;
    if (t1.u32 >= *CAST<uint32_t*>(t3.i8p - 4))              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1479
        goto _offlineasm_opGetByValOutOfBounds;
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i64 = *CAST<int64_t*>(t3.i8p + (t1.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1481
    if (t2.i64 == 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1482
        goto _offlineasm_opGetByValOutOfBounds;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opGetByValDone)
    *CAST<int64_t*>(cfr.i8p + (t0.i << 3)) = t2.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1485
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t0.i8p + 24) = t2.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x6);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opGetByValOutOfBounds)
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<uint8_t*>(t0.i8p + 9) = int8_t(0x1);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1491

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opGetByValNotIndexedStorage)
    t2.i = *CAST<uint8_t*>(t0.i8p + 5);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1495
    t2.i32 = t2.i32 - int32_t(0x64);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1496
    t2.clearHighWord();
    if (t2.u32 > uint32_t(0x8))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1497
        goto _offlineasm_opGetByValSlow;
    t3.i = *CAST<intptr_t*>(t0.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1500
    if (t1.u32 >= *CAST<uint32_t*>(t0.i8p + 24))             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1501
        goto _offlineasm_opGetByValSlow;
    if (t2.u32 > uint32_t(0x4))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1505
        goto _offlineasm_opGetByValAboveUint8ClampedArray;
    if (t2.u32 > uint32_t(0x1))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1508
        goto _offlineasm_opGetByValInt32ArrayOrUint8Array;
    if (t2.i32 != int32_t(0x0))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1511
        goto _offlineasm_opGetByValInt16Array;
    t0.i = *CAST<int8_t*>(t3.i8p + (t1.i << 0));             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1514
    t0.i64 = t0.i64 | tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1434
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1428
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t1.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x6);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opGetByValInt16Array)
    t0.i = *CAST<int16_t*>(t3.i8p + (t1.i << 1));            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1518
    t0.i64 = t0.i64 | tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1434
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1428
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t1.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x6);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opGetByValInt32ArrayOrUint8Array)
    if (t2.i32 == int32_t(0x2))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1523
        goto _offlineasm_opGetByValInt32Array;
    t0.i = *CAST<uint8_t*>(t3.i8p + (t1.i << 0));            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1526
    t0.i64 = t0.i64 | tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1434
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1428
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t1.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x6);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opGetByValInt32Array)
    t0.u = *CAST<uint32_t*>(t3.i8p + (t1.i << 2));           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1530
    t0.i64 = t0.i64 | tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1434
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1428
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t1.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x6);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opGetByValAboveUint8ClampedArray)
    if (t2.u32 > uint32_t(0x6))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1535
        goto _offlineasm_opGetByValAboveUint32Array;
    if (t2.i32 == int32_t(0x6))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1538
        goto _offlineasm_opGetByValUint32Array;
    t0.i = *CAST<uint16_t*>(t3.i8p + (t1.i << 1));           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1541
    t0.i64 = t0.i64 | tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1434
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1428
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t1.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x6);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opGetByValUint32Array)
    t0.u = *CAST<uint32_t*>(t3.i8p + (t1.i << 2));           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1546
    if (t0.i32 < int32_t(0x0))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1547
        goto _offlineasm_opGetByValSlow;
    t0.i64 = t0.i64 | tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1434
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1428
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t1.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x6);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opGetByValAboveUint32Array)
    if (t2.i32 == int32_t(0x7))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1553
        goto _offlineasm_opGetByValSlow;
    d0.d = *CAST<double*>(t3.i8p + (t1.i << 3));             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1556
    if (std::isnan(d0.d) || std::isnan(d0.d)                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1557
        || (d0.d != d0.d))
        goto _offlineasm_opGetByValSlow;
    t0.i64 = d0.castToInt64;                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1439
    t0.i64 = t0.i64 - tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1440
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1428
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t1.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x6);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opGetByValSlow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_get_by_val(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x6);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_put_by_val)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putByVal__writeBarrierOnOperands__loadConstantOrVariableCell__56_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putByVal__writeBarrierOnOperands__loadConstantOrVariableCell__56_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__writeBarrierOnOperands__loadConstantOrVariableCell__56_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__writeBarrierOnOperands__loadConstantOrVariableCell__56_loadConstantOrVariable__done)
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_putByVal__57_writeBarrierOnOperands__writeBarrierDone;
    if (t0.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:422
        goto _offlineasm_putByVal__57_writeBarrierOnOperands__writeBarrierDone;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putByVal__writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__57_loadConstantOrVariable__constant;
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putByVal__writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__57_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__57_loadConstantOrVariable__constant)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t2.i = *CAST<intptr_t*>(t2.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t2.i64 = *CAST<int64_t*>(t2.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__57_loadConstantOrVariable__done)
    if ((t2.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_putByVal__writeBarrierOnOperands__57_writeBarrierOnOperand__writeBarrierDone;
    if (*CAST<uint8_t*>(t2.i8p + 7) > uint8_t(0x1))          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:894
        goto _offlineasm_putByVal__writeBarrierOnOperands__writeBarrierOnOperand__57_skipIfIsRememberedOrInEden__done;
    PUSH(pcBase);                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:410
    PUSH(pc);
    t1.i = t2.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:411
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:412
    llint_write_barrier_slow(t0, t1);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:85
    POP(pc);                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:414
    POP(pcBase);

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__writeBarrierOnOperands__writeBarrierOnOperand__57_skipIfIsRememberedOrInEden__done)

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__writeBarrierOnOperands__57_writeBarrierOnOperand__writeBarrierDone)

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__57_writeBarrierOnOperands__writeBarrierDone)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putByVal__loadConstantOrVariableCell__58_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putByVal__loadConstantOrVariableCell__58_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__loadConstantOrVariableCell__58_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__loadConstantOrVariableCell__58_loadConstantOrVariable__done)
    if ((t1.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_putByVal__opPutByValSlow;
    t3.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t2.i = t1.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1587
    t0.u = *CAST<uint32_t*>(t2.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:888
    *CAST<int32_t*>(t3.i8p + 4) = t0.i32;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:889
    t2.i = *CAST<uint8_t*>(t2.i8p + 4);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:890
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putByVal__loadConstantOrVariableInt32__59_loadConstantOrVariable__constant;
    t3.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putByVal__loadConstantOrVariableInt32__59_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__loadConstantOrVariableInt32__59_loadConstantOrVariable__constant)
    t3.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t3.i = *CAST<intptr_t*>(t3.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t3.i64 = *CAST<int64_t*>(t3.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__loadConstantOrVariableInt32__59_loadConstantOrVariable__done)
    if (t3.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:396
        goto _offlineasm_putByVal__opPutByValSlow;
    t3.i64 = t3.i32;                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1591
    t0.i = *CAST<intptr_t*>(t1.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1592
    t2.i32 = t2.i32 & int32_t(0x1e);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1593
    t2.clearHighWord();
    if (t2.i32 != int32_t(0x14))                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1594
        goto _offlineasm_putByVal__opPutByValNotInt32;
    if (t3.u32 >= *CAST<uint32_t*>(t0.i8p - 8))              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1566
        goto _offlineasm_putByVal__contiguousPutByVal__outOfBounds;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__contiguousPutByVal__storeResult)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putByVal__contiguousPutByVal__storeCallback__60_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putByVal__contiguousPutByVal__storeCallback__60_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__contiguousPutByVal__storeCallback__60_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__contiguousPutByVal__storeCallback__60_loadConstantOrVariable__done)
    if (t1.u < tagTypeNumber.u)                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1598
        goto _offlineasm_putByVal__opPutByValSlow;
    *CAST<intptr_t*>(t0.i8p + (t3.i << 3)) = t1.i;           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1599
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__contiguousPutByVal__outOfBounds)
    if (t3.u32 >= *CAST<uint32_t*>(t0.i8p - 4))              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1573
        goto _offlineasm_putByVal__opPutByValOutOfBounds;
    t2.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1574
    *CAST<uint8_t*>(t2.i8p + 8) = int8_t(0x1);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1575
    t2.i32 = int32_t(0x1) + t3.i32;                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1576
    t2.clearHighWord();
    *CAST<int32_t*>(t0.i8p - 8) = t2.i32;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1577
    goto _offlineasm_putByVal__contiguousPutByVal__storeResult; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1578

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__opPutByValNotInt32)
    if (t2.i32 != int32_t(0x16))                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1603
        goto _offlineasm_putByVal__opPutByValNotDouble;
    if (t3.u32 >= *CAST<uint32_t*>(t0.i8p - 8))              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1566
        goto _offlineasm_putByVal__61_contiguousPutByVal__outOfBounds;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__61_contiguousPutByVal__storeResult)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putByVal__contiguousPutByVal__storeCallback__61_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putByVal__contiguousPutByVal__storeCallback__61_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__contiguousPutByVal__storeCallback__61_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__contiguousPutByVal__storeCallback__61_loadConstantOrVariable__done)
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1607
        goto _offlineasm_putByVal__contiguousPutByVal__storeCallback__notInt;
    d0.d = t1.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1608
    goto _offlineasm_putByVal__contiguousPutByVal__storeCallback__ready; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1609

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__contiguousPutByVal__storeCallback__notInt)
    t1.i = t1.i + tagTypeNumber.i;                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1611
    d0.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1612
    if (std::isnan(d0.d) || std::isnan(d0.d)                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1613
        || (d0.d != d0.d))
        goto _offlineasm_putByVal__opPutByValSlow;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__contiguousPutByVal__storeCallback__ready)
    *CAST<double*>(t0.i8p + (t3.i << 3)) = d0.d;             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1615
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__61_contiguousPutByVal__outOfBounds)
    if (t3.u32 >= *CAST<uint32_t*>(t0.i8p - 4))              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1573
        goto _offlineasm_putByVal__opPutByValOutOfBounds;
    t2.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1574
    *CAST<uint8_t*>(t2.i8p + 8) = int8_t(0x1);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1575
    t2.i32 = int32_t(0x1) + t3.i32;                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1576
    t2.clearHighWord();
    *CAST<int32_t*>(t0.i8p - 8) = t2.i32;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1577
    goto _offlineasm_putByVal__61_contiguousPutByVal__storeResult; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1578

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__opPutByValNotDouble)
    if (t2.i32 != int32_t(0x1a))                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1619
        goto _offlineasm_putByVal__opPutByValNotContiguous;
    if (t3.u32 >= *CAST<uint32_t*>(t0.i8p - 8))              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1566
        goto _offlineasm_putByVal__62_contiguousPutByVal__outOfBounds;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__62_contiguousPutByVal__storeResult)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putByVal__contiguousPutByVal__storeCallback__62_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putByVal__contiguousPutByVal__storeCallback__62_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__contiguousPutByVal__storeCallback__62_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__contiguousPutByVal__storeCallback__62_loadConstantOrVariable__done)
    *CAST<intptr_t*>(t0.i8p + (t3.i << 3)) = t1.i;           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1623
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__62_contiguousPutByVal__outOfBounds)
    if (t3.u32 >= *CAST<uint32_t*>(t0.i8p - 4))              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1573
        goto _offlineasm_putByVal__opPutByValOutOfBounds;
    t2.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1574
    *CAST<uint8_t*>(t2.i8p + 8) = int8_t(0x1);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1575
    t2.i32 = int32_t(0x1) + t3.i32;                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1576
    t2.clearHighWord();
    *CAST<int32_t*>(t0.i8p - 8) = t2.i32;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1577
    goto _offlineasm_putByVal__62_contiguousPutByVal__storeResult; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1578

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__opPutByValNotContiguous)
    if (t2.i32 != int32_t(0x1c))                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1627
        goto _offlineasm_putByVal__opPutByValSlow;
    if (t3.u32 >= *CAST<uint32_t*>(t0.i8p - 4))              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1628
        goto _offlineasm_putByVal__opPutByValOutOfBounds;
    if (*CAST<int64_t*>(t0.i8p + (t3.i << 3) + intptr_t(0x10)) == 0) // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1629
        goto _offlineasm_putByVal__opPutByValArrayStorageEmpty;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__opPutByValArrayStorageStoreResult)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putByVal__63_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putByVal__63_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__63_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__63_loadConstantOrVariable__done)
    *CAST<int64_t*>(t0.i8p + (t3.i << 3) + intptr_t(0x10)) = t1.i64; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1633
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__opPutByValArrayStorageEmpty)
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<uint8_t*>(t1.i8p + 8) = int8_t(0x1);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1638
    *CAST<int32_t*>(t0.i8p + 12) = *CAST<int32_t*>(t0.i8p + 12) + int32_t(0x1); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1639
    if (t3.u32 < *CAST<uint32_t*>(t0.i8p - 8))               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1640
        goto _offlineasm_putByVal__opPutByValArrayStorageStoreResult;
    t1.i32 = int32_t(0x1) + t3.i32;                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1641
    t1.clearHighWord();
    *CAST<int32_t*>(t0.i8p - 8) = t1.i32;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1642
    goto _offlineasm_putByVal__opPutByValArrayStorageStoreResult; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1643

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__opPutByValOutOfBounds)
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<uint8_t*>(t0.i8p + 9) = int8_t(0x1);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1647

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__opPutByValSlow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_put_by_val(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_put_by_val_direct)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putByVal__writeBarrierOnOperands__loadConstantOrVariableCell__64_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putByVal__writeBarrierOnOperands__loadConstantOrVariableCell__64_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__writeBarrierOnOperands__loadConstantOrVariableCell__64_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__writeBarrierOnOperands__loadConstantOrVariableCell__64_loadConstantOrVariable__done)
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_putByVal__65_writeBarrierOnOperands__writeBarrierDone;
    if (t0.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:422
        goto _offlineasm_putByVal__65_writeBarrierOnOperands__writeBarrierDone;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putByVal__writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__65_loadConstantOrVariable__constant;
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putByVal__writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__65_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__65_loadConstantOrVariable__constant)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t2.i = *CAST<intptr_t*>(t2.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t2.i64 = *CAST<int64_t*>(t2.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__65_loadConstantOrVariable__done)
    if ((t2.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_putByVal__writeBarrierOnOperands__65_writeBarrierOnOperand__writeBarrierDone;
    if (*CAST<uint8_t*>(t2.i8p + 7) > uint8_t(0x1))          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:894
        goto _offlineasm_putByVal__writeBarrierOnOperands__writeBarrierOnOperand__65_skipIfIsRememberedOrInEden__done;
    PUSH(pcBase);                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:410
    PUSH(pc);
    t1.i = t2.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:411
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:412
    llint_write_barrier_slow(t0, t1);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:85
    POP(pc);                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:414
    POP(pcBase);

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__writeBarrierOnOperands__writeBarrierOnOperand__65_skipIfIsRememberedOrInEden__done)

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__writeBarrierOnOperands__65_writeBarrierOnOperand__writeBarrierDone)

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__65_writeBarrierOnOperands__writeBarrierDone)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putByVal__loadConstantOrVariableCell__66_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putByVal__loadConstantOrVariableCell__66_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__loadConstantOrVariableCell__66_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__loadConstantOrVariableCell__66_loadConstantOrVariable__done)
    if ((t1.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_71_putByVal__opPutByValSlow;
    t3.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t2.i = t1.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1587
    t0.u = *CAST<uint32_t*>(t2.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:888
    *CAST<int32_t*>(t3.i8p + 4) = t0.i32;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:889
    t2.i = *CAST<uint8_t*>(t2.i8p + 4);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:890
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putByVal__loadConstantOrVariableInt32__67_loadConstantOrVariable__constant;
    t3.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putByVal__loadConstantOrVariableInt32__67_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__loadConstantOrVariableInt32__67_loadConstantOrVariable__constant)
    t3.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t3.i = *CAST<intptr_t*>(t3.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t3.i64 = *CAST<int64_t*>(t3.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__loadConstantOrVariableInt32__67_loadConstantOrVariable__done)
    if (t3.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:396
        goto _offlineasm_71_putByVal__opPutByValSlow;
    t3.i64 = t3.i32;                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1591
    t0.i = *CAST<intptr_t*>(t1.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1592
    t2.i32 = t2.i32 & int32_t(0x1e);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1593
    t2.clearHighWord();
    if (t2.i32 != int32_t(0x14))                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1594
        goto _offlineasm_71_putByVal__opPutByValNotInt32;
    if (t3.u32 >= *CAST<uint32_t*>(t0.i8p - 8))              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1566
        goto _offlineasm_putByVal__68_contiguousPutByVal__outOfBounds;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__68_contiguousPutByVal__storeResult)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putByVal__contiguousPutByVal__storeCallback__68_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putByVal__contiguousPutByVal__storeCallback__68_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__contiguousPutByVal__storeCallback__68_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__contiguousPutByVal__storeCallback__68_loadConstantOrVariable__done)
    if (t1.u < tagTypeNumber.u)                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1598
        goto _offlineasm_71_putByVal__opPutByValSlow;
    *CAST<intptr_t*>(t0.i8p + (t3.i << 3)) = t1.i;           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1599
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__68_contiguousPutByVal__outOfBounds)
    if (t3.u32 >= *CAST<uint32_t*>(t0.i8p - 4))              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1573
        goto _offlineasm_71_putByVal__opPutByValOutOfBounds;
    t2.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1574
    *CAST<uint8_t*>(t2.i8p + 8) = int8_t(0x1);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1575
    t2.i32 = int32_t(0x1) + t3.i32;                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1576
    t2.clearHighWord();
    *CAST<int32_t*>(t0.i8p - 8) = t2.i32;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1577
    goto _offlineasm_putByVal__68_contiguousPutByVal__storeResult; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1578

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_71_putByVal__opPutByValNotInt32)
    if (t2.i32 != int32_t(0x16))                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1603
        goto _offlineasm_71_putByVal__opPutByValNotDouble;
    if (t3.u32 >= *CAST<uint32_t*>(t0.i8p - 8))              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1566
        goto _offlineasm_putByVal__69_contiguousPutByVal__outOfBounds;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__69_contiguousPutByVal__storeResult)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putByVal__contiguousPutByVal__storeCallback__69_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putByVal__contiguousPutByVal__storeCallback__69_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__contiguousPutByVal__storeCallback__69_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__contiguousPutByVal__storeCallback__69_loadConstantOrVariable__done)
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1607
        goto _offlineasm_putByVal__contiguousPutByVal__69_storeCallback__notInt;
    d0.d = t1.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1608
    goto _offlineasm_putByVal__contiguousPutByVal__69_storeCallback__ready; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1609

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__contiguousPutByVal__69_storeCallback__notInt)
    t1.i = t1.i + tagTypeNumber.i;                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1611
    d0.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1612
    if (std::isnan(d0.d) || std::isnan(d0.d)                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1613
        || (d0.d != d0.d))
        goto _offlineasm_71_putByVal__opPutByValSlow;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__contiguousPutByVal__69_storeCallback__ready)
    *CAST<double*>(t0.i8p + (t3.i << 3)) = d0.d;             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1615
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__69_contiguousPutByVal__outOfBounds)
    if (t3.u32 >= *CAST<uint32_t*>(t0.i8p - 4))              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1573
        goto _offlineasm_71_putByVal__opPutByValOutOfBounds;
    t2.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1574
    *CAST<uint8_t*>(t2.i8p + 8) = int8_t(0x1);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1575
    t2.i32 = int32_t(0x1) + t3.i32;                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1576
    t2.clearHighWord();
    *CAST<int32_t*>(t0.i8p - 8) = t2.i32;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1577
    goto _offlineasm_putByVal__69_contiguousPutByVal__storeResult; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1578

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_71_putByVal__opPutByValNotDouble)
    if (t2.i32 != int32_t(0x1a))                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1619
        goto _offlineasm_71_putByVal__opPutByValNotContiguous;
    if (t3.u32 >= *CAST<uint32_t*>(t0.i8p - 8))              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1566
        goto _offlineasm_putByVal__70_contiguousPutByVal__outOfBounds;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__70_contiguousPutByVal__storeResult)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putByVal__contiguousPutByVal__storeCallback__70_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putByVal__contiguousPutByVal__storeCallback__70_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__contiguousPutByVal__storeCallback__70_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__contiguousPutByVal__storeCallback__70_loadConstantOrVariable__done)
    *CAST<intptr_t*>(t0.i8p + (t3.i << 3)) = t1.i;           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1623
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__70_contiguousPutByVal__outOfBounds)
    if (t3.u32 >= *CAST<uint32_t*>(t0.i8p - 4))              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1573
        goto _offlineasm_71_putByVal__opPutByValOutOfBounds;
    t2.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1574
    *CAST<uint8_t*>(t2.i8p + 8) = int8_t(0x1);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1575
    t2.i32 = int32_t(0x1) + t3.i32;                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1576
    t2.clearHighWord();
    *CAST<int32_t*>(t0.i8p - 8) = t2.i32;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1577
    goto _offlineasm_putByVal__70_contiguousPutByVal__storeResult; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1578

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_71_putByVal__opPutByValNotContiguous)
    if (t2.i32 != int32_t(0x1c))                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1627
        goto _offlineasm_71_putByVal__opPutByValSlow;
    if (t3.u32 >= *CAST<uint32_t*>(t0.i8p - 4))              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1628
        goto _offlineasm_71_putByVal__opPutByValOutOfBounds;
    if (*CAST<int64_t*>(t0.i8p + (t3.i << 3) + intptr_t(0x10)) == 0) // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1629
        goto _offlineasm_71_putByVal__opPutByValArrayStorageEmpty;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_71_putByVal__opPutByValArrayStorageStoreResult)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putByVal__71_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putByVal__71_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__71_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putByVal__71_loadConstantOrVariable__done)
    *CAST<int64_t*>(t0.i8p + (t3.i << 3) + intptr_t(0x10)) = t1.i64; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1633
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_71_putByVal__opPutByValArrayStorageEmpty)
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<uint8_t*>(t1.i8p + 8) = int8_t(0x1);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1638
    *CAST<int32_t*>(t0.i8p + 12) = *CAST<int32_t*>(t0.i8p + 12) + int32_t(0x1); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1639
    if (t3.u32 < *CAST<uint32_t*>(t0.i8p - 8))               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1640
        goto _offlineasm_71_putByVal__opPutByValArrayStorageStoreResult;
    t1.i32 = int32_t(0x1) + t3.i32;                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1641
    t1.clearHighWord();
    *CAST<int32_t*>(t0.i8p - 8) = t1.i32;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1642
    goto _offlineasm_71_putByVal__opPutByValArrayStorageStoreResult; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1643

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_71_putByVal__opPutByValOutOfBounds)
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<uint8_t*>(t0.i8p + 9) = int8_t(0x1);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1647

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_71_putByVal__opPutByValSlow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_put_by_val_direct(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_jmp)
    pc.i32 = pc.i32 + *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:36
    pc.clearHighWord();
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_jeq_null)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i32 < int32_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:919
        goto _offlineasm_equalNull__assertNotConstant__71_assert__ok;
    CRASH();                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:432

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_equalNull__assertNotConstant__71_assert__ok)
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1685
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1686
        goto _offlineasm_equalNull__immediate;
    t2.u = *CAST<uint32_t*>(t0.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:477
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:470
    t1.i = *CAST<intptr_t*>(t1.i8p + 56);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:471
    t1.i = *CAST<intptr_t*>(t1.i8p + 176);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:472
    t2.i = *CAST<intptr_t*>(t1.i8p + (t2.i << 3));           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:473
    if ((*CAST<int8_t*>(t0.i8p + 6) & int8_t(0x1)) == 0)     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1704
        goto _offlineasm_equalNull__cellHandler__notMasqueradesAsUndefined;
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1705
    t0.i = *CAST<intptr_t*>(t0.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1706
    if (*CAST<intptr_t*>(t2.i8p + 24) == t0.i)               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1707
        goto _offlineasm_equalNull__target;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_equalNull__cellHandler__notMasqueradesAsUndefined)
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_equalNull__target)
    pc.i32 = pc.i32 + *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:36
    pc.clearHighWord();
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_equalNull__immediate)
    t0.i64 = t0.i64 & int64_t(-9);                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1695
    if (t0.i64 == int64_t(0x2))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1710
        goto _offlineasm_equalNull__target;
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_jneq_null)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i32 < int32_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:919
        goto _offlineasm_equalNull__assertNotConstant__72_assert__ok;
    CRASH();                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:432

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_equalNull__assertNotConstant__72_assert__ok)
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1685
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1686
        goto _offlineasm_72_equalNull__immediate;
    t2.u = *CAST<uint32_t*>(t0.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:477
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:470
    t1.i = *CAST<intptr_t*>(t1.i8p + 56);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:471
    t1.i = *CAST<intptr_t*>(t1.i8p + 176);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:472
    t2.i = *CAST<intptr_t*>(t1.i8p + (t2.i << 3));           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:473
    if ((*CAST<int8_t*>(t0.i8p + 6) & int8_t(0x1)) == 0)     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1717
        goto _offlineasm_72_equalNull__target;
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1718
    t0.i = *CAST<intptr_t*>(t0.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1719
    if (*CAST<intptr_t*>(t2.i8p + 24) != t0.i)               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1720
        goto _offlineasm_72_equalNull__target;
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_72_equalNull__target)
    pc.i32 = pc.i32 + *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:36
    pc.clearHighWord();
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_72_equalNull__immediate)
    t0.i64 = t0.i64 & int64_t(-9);                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1695
    if (t0.i64 != int64_t(0x2))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1722
        goto _offlineasm_72_equalNull__target;
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_jneq_ptr)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1729
    t2.i = *CAST<intptr_t*>(t2.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1730
    t1.i = *CAST<intptr_t*>(t2.i8p + (t1.i << 3) + intptr_t(0x4f8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1731
    if (t1.i != *CAST<intptr_t*>(cfr.i8p + (t0.i << 3)))     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1732
        goto _offlineasm_opJneqPtrTarget;
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opJneqPtrTarget)
    *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)) = int32_t(0x1); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1736
    pc.i32 = pc.i32 + *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:36
    pc.clearHighWord();
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_switch_imm)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_72_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_72_loadConstantOrVariable__done;        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_72_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_72_loadConstantOrVariable__done)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1787
    t2.i = *CAST<intptr_t*>(t2.i8p + 384);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1788
    t3.i32 = t3.i32 * int32_t(0x18);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1789
    t3.clearHighWord();
    t2.i = *CAST<intptr_t*>(t2.i8p + 32);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1790
    t2.i = t2.i + t3.i;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1791
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1792
        goto _offlineasm_opSwitchImmNotInt;
    t1.i32 = t1.i32 - *CAST<int32_t*>(t2.i8p + 16);          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1793
    t1.clearHighWord();
    if (t1.u32 >= *CAST<uint32_t*>(t2.i8p + 12))             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1794
        goto _offlineasm_opSwitchImmFallThrough;
    t3.i = *CAST<intptr_t*>(t2.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1795
    t1.i = *CAST<int32_t*>(t3.i8p + (t1.i << 2));            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1796
    if (t1.i32 == 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1797
        goto _offlineasm_opSwitchImmFallThrough;
    pc.i = pc.i + t1.i;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opSwitchImmNotInt)
    if ((t1.i64 & tagTypeNumber.i64) != 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1801
        goto _offlineasm_opSwitchImmSlow;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opSwitchImmFallThrough)
    pc.i32 = pc.i32 + *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:36
    pc.clearHighWord();
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opSwitchImmSlow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_switch_imm(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_switch_char)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_73_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_73_loadConstantOrVariable__done;        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_73_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_73_loadConstantOrVariable__done)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1815
    t2.i = *CAST<intptr_t*>(t2.i8p + 384);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1816
    t3.i32 = t3.i32 * int32_t(0x18);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1817
    t3.clearHighWord();
    t2.i = *CAST<intptr_t*>(t2.i8p + 32);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1818
    t2.i = t2.i + t3.i;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1819
    if ((t1.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1820
        goto _offlineasm_opSwitchCharFallThrough;
    if (*CAST<int8_t*>(t1.i8p + 5) != int8_t(0x6))           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1821
        goto _offlineasm_opSwitchCharFallThrough;
    if (*CAST<int32_t*>(t1.i8p + 12) != int32_t(0x1))        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1822
        goto _offlineasm_opSwitchCharFallThrough;
    t0.i = *CAST<intptr_t*>(t1.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1823
    if (t0.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1824
        goto _offlineasm_opSwitchOnRope;
    t1.i = *CAST<intptr_t*>(t0.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1825
    if ((*CAST<int32_t*>(t0.i8p + 16) & int32_t(0x8)) != 0)  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1826
        goto _offlineasm_opSwitchChar8Bit;
    t0.i = *CAST<uint16_t*>(t1.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1827
    goto _offlineasm_opSwitchCharReady;                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1828

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opSwitchChar8Bit)
    t0.i = *CAST<uint8_t*>(t1.i8p);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1830

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opSwitchCharReady)
    t0.i32 = t0.i32 - *CAST<int32_t*>(t2.i8p + 16);          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1832
    t0.clearHighWord();
    if (t0.u32 >= *CAST<uint32_t*>(t2.i8p + 12))             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1833
        goto _offlineasm_opSwitchCharFallThrough;
    t2.i = *CAST<intptr_t*>(t2.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1834
    t1.i = *CAST<int32_t*>(t2.i8p + (t0.i << 2));            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1835
    if (t1.i32 == 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1836
        goto _offlineasm_opSwitchCharFallThrough;
    pc.i = pc.i + t1.i;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opSwitchCharFallThrough)
    pc.i32 = pc.i32 + *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:36
    pc.clearHighWord();
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opSwitchOnRope)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_switch_char(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_ret)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:904
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:905
        int32_t temp = *CAST<int32_t*>(t0.i8p + 336) + int32_t(0xa);
        *CAST<int32_t*>(t0.i8p + 336) = temp;
        if (temp < 0)
            goto  _offlineasm_checkSwitchToJITForEpilogue__checkSwitchToJIT__continue;
    }
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_replace(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_checkSwitchToJITForEpilogue__checkSwitchToJIT__continue)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_74_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_74_loadConstantOrVariable__done;        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_74_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_74_loadConstantOrVariable__done)
    sp.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:593
    POP(cfr);                                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:595
    POP(lr);                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:596
    opcode = lr.opcode;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1081
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_to_primitive)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_75_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_75_loadConstantOrVariable__done;        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_75_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_75_loadConstantOrVariable__done)
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1893
        goto _offlineasm_opToPrimitiveIsImm;
    if (*CAST<uint8_t*>(t0.i8p + 5) >= uint8_t(0x14))        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1894
        goto _offlineasm_opToPrimitiveSlowCase;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opToPrimitiveIsImm)
    *CAST<int64_t*>(cfr.i8p + (t3.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1896
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opToPrimitiveSlowCase)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_to_primitive(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_catch)
    t3.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1910
    t3.i = t3.i & intptr_t(-16384);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1911
    t3.i = *CAST<intptr_t*>(t3.i8p + 152);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1912
    cfr.i = *CAST<intptr_t*>(t3.i8p + 20400);                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1914
    *CAST<intptr_t*>(t3.i8p + 20400) = intptr_t(0x0);        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1915
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:778
    t2.u = *CAST<uint32_t*>(t2.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t2.i = t2.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t2.i = t2.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    sp.i = cfr.i - t2.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:784
    pcBase.i = *CAST<intptr_t*>(cfr.i8p + 16);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1918
    pcBase.i = *CAST<intptr_t*>(pcBase.i8p + 64);            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1919
    pc.i = *CAST<intptr_t*>(t3.i8p + 20416);                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1920
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1921
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1922
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_check_if_exception_is_uncatchable_and_notify_profiler(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    if (t1.i == intptr_t(0x0))                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1925
        goto _offlineasm_isCatchableException;
    goto llint_throw_from_slow_path_trampoline;              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1926

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_isCatchableException)
    t3.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1929
    t3.i = t3.i & intptr_t(-16384);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1930
    t3.i = *CAST<intptr_t*>(t3.i8p + 152);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1931
    t0.i64 = *CAST<int64_t*>(t3.i8p + 20696);                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1933
    *CAST<int64_t*>(t3.i8p + 20696) = int64_t(0x0);          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1934
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1936
    t3.i64 = *CAST<int64_t*>(t0.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1938
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t2.i << 3)) = t3.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1940
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_end)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:904
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:905
        int32_t temp = *CAST<int32_t*>(t0.i8p + 336) + int32_t(0xa);
        *CAST<int32_t*>(t0.i8p + 336) = temp;
        if (temp < 0)
            goto  _offlineasm_checkSwitchToJITForEpilogue__75_checkSwitchToJIT__continue;
    }
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_replace(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_checkSwitchToJITForEpilogue__75_checkSwitchToJIT__continue)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i32 < int32_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:919
        goto _offlineasm_assertNotConstant__75_assert__ok;
    CRASH();                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:432

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_assertNotConstant__75_assert__ok)
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1951
    sp.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:593
    POP(cfr);                                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:595
    POP(lr);                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:596
    opcode = lr.opcode;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1081
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_throw_from_slow_path_trampoline)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1956
    t1.i = t1.i & intptr_t(-16384);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1957
    t1.i = *CAST<intptr_t*>(t1.i8p + 152);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1958
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_handle_exception(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    t1.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1966
    t1.i = t1.i & intptr_t(-16384);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1967
    t1.i = *CAST<intptr_t*>(t1.i8p + 152);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1968
    opcode = *CAST<Opcode*>(t1.i8p + 20408);                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1969
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_throw_during_call_trampoline)
    t2.i = lr.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:736
    goto llint_throw_from_slow_path_trampoline;              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1974

OFFLINE_ASM_OPCODE_LABEL(op_resolve_scope)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i32 != int32_t(0x0))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2053
        goto _offlineasm_rGlobalVar;
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2021
    pc.i = pc.i + intptr_t(0x7);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_rGlobalVar)
    if (t0.i32 != int32_t(0x1))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2058
        goto _offlineasm_rGlobalLexicalVar;
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2021
    pc.i = pc.i + intptr_t(0x7);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_rGlobalLexicalVar)
    if (t0.i32 != int32_t(0x2))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2063
        goto _offlineasm_rClosureVar;
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2021
    pc.i = pc.i + intptr_t(0x7);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_rClosureVar)
    if (t0.i32 != int32_t(0x3))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2068
        goto _offlineasm_rModuleVar;
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i = *CAST<intptr_t*>(cfr.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2034
    if (t2.i32 == 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2035
        goto _offlineasm_resolveScope__resolveScopeLoopEnd;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_resolveScope__resolveScopeLoop)
    t0.i = *CAST<intptr_t*>(t0.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2038
    t2.i32 = t2.i32 - int32_t(0x1);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2039
    t2.clearHighWord();
    if (t2.i32 != 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2040
        goto _offlineasm_resolveScope__resolveScopeLoop;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_resolveScope__resolveScopeLoopEnd)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2044
    pc.i = pc.i + intptr_t(0x7);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_rModuleVar)
    if (t0.i32 != int32_t(0x5))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2073
        goto _offlineasm_rGlobalPropertyWithVarInjectionChecks;
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2021
    pc.i = pc.i + intptr_t(0x7);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_rGlobalPropertyWithVarInjectionChecks)
    if (t0.i32 != int32_t(0x6))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2078
        goto _offlineasm_rGlobalVarWithVarInjectionChecks;
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2025
    t0.i = *CAST<intptr_t*>(t0.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2026
    t0.i = *CAST<intptr_t*>(t0.i8p + 1472);                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2027
    if (*CAST<int8_t*>(t0.i8p + 4) == int8_t(0x2))           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2028
        goto _offlineasm_rDynamic;
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2021
    pc.i = pc.i + intptr_t(0x7);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_rGlobalVarWithVarInjectionChecks)
    if (t0.i32 != int32_t(0x7))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2084
        goto _offlineasm_rGlobalLexicalVarWithVarInjectionChecks;
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2025
    t0.i = *CAST<intptr_t*>(t0.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2026
    t0.i = *CAST<intptr_t*>(t0.i8p + 1472);                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2027
    if (*CAST<int8_t*>(t0.i8p + 4) == int8_t(0x2))           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2028
        goto _offlineasm_rDynamic;
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2021
    pc.i = pc.i + intptr_t(0x7);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_rGlobalLexicalVarWithVarInjectionChecks)
    if (t0.i32 != int32_t(0x8))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2090
        goto _offlineasm_rClosureVarWithVarInjectionChecks;
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2025
    t0.i = *CAST<intptr_t*>(t0.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2026
    t0.i = *CAST<intptr_t*>(t0.i8p + 1472);                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2027
    if (*CAST<int8_t*>(t0.i8p + 4) == int8_t(0x2))           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2028
        goto _offlineasm_rDynamic;
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2021
    pc.i = pc.i + intptr_t(0x7);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_rClosureVarWithVarInjectionChecks)
    if (t0.i32 != int32_t(0x9))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2096
        goto _offlineasm_rDynamic;
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2025
    t0.i = *CAST<intptr_t*>(t0.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2026
    t0.i = *CAST<intptr_t*>(t0.i8p + 1472);                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2027
    if (*CAST<int8_t*>(t0.i8p + 4) == int8_t(0x2))           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2028
        goto _offlineasm_rDynamic;
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i = *CAST<intptr_t*>(cfr.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2034
    if (t2.i32 == 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2035
        goto _offlineasm_75_resolveScope__resolveScopeLoopEnd;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_75_resolveScope__resolveScopeLoop)
    t0.i = *CAST<intptr_t*>(t0.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2038
    t2.i32 = t2.i32 - int32_t(0x1);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2039
    t2.clearHighWord();
    if (t2.i32 != 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2040
        goto _offlineasm_75_resolveScope__resolveScopeLoop;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_75_resolveScope__resolveScopeLoopEnd)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2044
    pc.i = pc.i + intptr_t(0x7);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_rDynamic)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_resolve_scope(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x7);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_get_from_scope)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i32 = t0.i32 & int32_t(0x3ff);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2142
    t0.clearHighWord();
    if (t0.i32 != int32_t(0x0))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2145
        goto _offlineasm_gGlobalVar;
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2108
    t2.u = *CAST<uint32_t*>(t0.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:477
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:470
    t1.i = *CAST<intptr_t*>(t1.i8p + 56);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:471
    t1.i = *CAST<intptr_t*>(t1.i8p + 176);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:472
    t2.i = *CAST<intptr_t*>(t1.i8p + (t2.i << 3));           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:473
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    if (t2.i != t1.i)                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2111
        goto _offlineasm_gDynamic;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i32 < int32_t(0x64))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1185
        goto _offlineasm_getProperty__75_loadPropertyAtVariableOffset__isInline;
    t0.i = *CAST<intptr_t*>(t0.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1186
    t1.i32 = -t1.i32;                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1187
    t1.clearHighWord();
    t1.i64 = t1.i32;                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1188
    goto _offlineasm_getProperty__75_loadPropertyAtVariableOffset__ready; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1189

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_getProperty__75_loadPropertyAtVariableOffset__isInline)
    t0.i = t0.i + intptr_t(-768);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1191

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_getProperty__75_loadPropertyAtVariableOffset__ready)
    t2.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3) + intptr_t(0x310)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1193
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x38)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t0.i8p + 24) = t2.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t0.i << 3)) = t2.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2119
    pc.i = pc.i + intptr_t(0x8);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_gGlobalVar)
    if (t0.i32 != int32_t(0x1))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2151
        goto _offlineasm_gGlobalLexicalVar;
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t0.i64 = *CAST<int64_t*>(t0.i8p);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2124
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x38)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t1.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2128
    pc.i = pc.i + intptr_t(0x8);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_gGlobalLexicalVar)
    if (t0.i32 != int32_t(0x2))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2156
        goto _offlineasm_gClosureVar;
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t0.i64 = *CAST<int64_t*>(t0.i8p);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2124
    if (t0.i64 == int64_t(0x0))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2159
        goto _offlineasm_gDynamic;
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x38)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t1.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2128
    pc.i = pc.i + intptr_t(0x8);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_gClosureVar)
    if (t0.i32 != int32_t(0x3))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2164
        goto _offlineasm_gGlobalPropertyWithVarInjectionChecks;
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:378
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2133
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x38)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t1.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2136
    pc.i = pc.i + intptr_t(0x8);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_gGlobalPropertyWithVarInjectionChecks)
    if (t0.i32 != int32_t(0x6))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2170
        goto _offlineasm_gGlobalVarWithVarInjectionChecks;
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2108
    t2.u = *CAST<uint32_t*>(t0.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:477
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:470
    t1.i = *CAST<intptr_t*>(t1.i8p + 56);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:471
    t1.i = *CAST<intptr_t*>(t1.i8p + 176);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:472
    t2.i = *CAST<intptr_t*>(t1.i8p + (t2.i << 3));           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:473
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    if (t2.i != t1.i)                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2111
        goto _offlineasm_gDynamic;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i32 < int32_t(0x64))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1185
        goto _offlineasm_getProperty__76_loadPropertyAtVariableOffset__isInline;
    t0.i = *CAST<intptr_t*>(t0.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1186
    t1.i32 = -t1.i32;                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1187
    t1.clearHighWord();
    t1.i64 = t1.i32;                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1188
    goto _offlineasm_getProperty__76_loadPropertyAtVariableOffset__ready; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1189

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_getProperty__76_loadPropertyAtVariableOffset__isInline)
    t0.i = t0.i + intptr_t(-768);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1191

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_getProperty__76_loadPropertyAtVariableOffset__ready)
    t2.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3) + intptr_t(0x310)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1193
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x38)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t0.i8p + 24) = t2.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t0.i << 3)) = t2.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2119
    pc.i = pc.i + intptr_t(0x8);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_gGlobalVarWithVarInjectionChecks)
    if (t0.i32 != int32_t(0x7))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2176
        goto _offlineasm_gGlobalLexicalVarWithVarInjectionChecks;
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2025
    t0.i = *CAST<intptr_t*>(t0.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2026
    t0.i = *CAST<intptr_t*>(t0.i8p + 1472);                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2027
    if (*CAST<int8_t*>(t0.i8p + 4) == int8_t(0x2))           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2028
        goto _offlineasm_gDynamic;
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t0.i64 = *CAST<int64_t*>(t0.i8p);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2124
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x38)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t1.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2128
    pc.i = pc.i + intptr_t(0x8);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_gGlobalLexicalVarWithVarInjectionChecks)
    if (t0.i32 != int32_t(0x8))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2182
        goto _offlineasm_gClosureVarWithVarInjectionChecks;
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2025
    t0.i = *CAST<intptr_t*>(t0.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2026
    t0.i = *CAST<intptr_t*>(t0.i8p + 1472);                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2027
    if (*CAST<int8_t*>(t0.i8p + 4) == int8_t(0x2))           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2028
        goto _offlineasm_gDynamic;
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t0.i64 = *CAST<int64_t*>(t0.i8p);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2124
    if (t0.i64 == int64_t(0x0))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2186
        goto _offlineasm_gDynamic;
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x38)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t1.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2128
    pc.i = pc.i + intptr_t(0x8);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_gClosureVarWithVarInjectionChecks)
    if (t0.i32 != int32_t(0x9))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2191
        goto _offlineasm_gDynamic;
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2025
    t0.i = *CAST<intptr_t*>(t0.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2026
    t0.i = *CAST<intptr_t*>(t0.i8p + 1472);                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2027
    if (*CAST<int8_t*>(t0.i8p + 4) == int8_t(0x2))           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2028
        goto _offlineasm_gDynamic;
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:378
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2133
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x38)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t1.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2136
    pc.i = pc.i + intptr_t(0x8);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_gDynamic)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_get_from_scope(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x8);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_put_to_scope)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i32 = t0.i32 & int32_t(0x3ff);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2251
    t0.clearHighWord();
    if (t0.i32 != int32_t(0x4))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2254
        goto _offlineasm_pGlobalProperty;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__76_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__76_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__76_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__76_loadConstantOrVariable__done)
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_77_writeBarrierOnOperands__writeBarrierDone;
    if (t0.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:422
        goto _offlineasm_77_writeBarrierOnOperands__writeBarrierDone;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__77_loadConstantOrVariable__constant;
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__77_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__77_loadConstantOrVariable__constant)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t2.i = *CAST<intptr_t*>(t2.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t2.i64 = *CAST<int64_t*>(t2.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__77_loadConstantOrVariable__done)
    if ((t2.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_writeBarrierOnOperands__77_writeBarrierOnOperand__writeBarrierDone;
    if (*CAST<uint8_t*>(t2.i8p + 7) > uint8_t(0x1))          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:894
        goto _offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__77_skipIfIsRememberedOrInEden__done;
    PUSH(pcBase);                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:410
    PUSH(pc);
    t1.i = t2.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:411
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:412
    llint_write_barrier_slow(t0, t1);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:85
    POP(pc);                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:414
    POP(pcBase);

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__77_skipIfIsRememberedOrInEden__done)

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__77_writeBarrierOnOperand__writeBarrierDone)

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_77_writeBarrierOnOperands__writeBarrierDone)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:378
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putLocalClosureVar__78_loadConstantOrVariable__constant;
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putLocalClosureVar__78_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putLocalClosureVar__78_loadConstantOrVariable__constant)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t2.i = *CAST<intptr_t*>(t2.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t2.i64 = *CAST<int64_t*>(t2.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putLocalClosureVar__78_loadConstantOrVariable__done)
    t3.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    if (t3.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2229
        goto _offlineasm_putLocalClosureVar__noVariableWatchpointSet;
    if (*CAST<int8_t*>(t3.i8p + 4) != int8_t(0x2))           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:900
        goto _offlineasm_pDynamic;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putLocalClosureVar__noVariableWatchpointSet)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(t0.i8p + (t1.i << 3) + intptr_t(0x20)) = t2.i64; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2233
    pc.i = pc.i + intptr_t(0x7);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_pGlobalProperty)
    if (t0.i32 != int32_t(0x0))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2261
        goto _offlineasm_pGlobalVar;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__79_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__79_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__79_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__79_loadConstantOrVariable__done)
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_80_writeBarrierOnOperands__writeBarrierDone;
    if (t0.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:422
        goto _offlineasm_80_writeBarrierOnOperands__writeBarrierDone;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__80_loadConstantOrVariable__constant;
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__80_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__80_loadConstantOrVariable__constant)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t2.i = *CAST<intptr_t*>(t2.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t2.i64 = *CAST<int64_t*>(t2.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__80_loadConstantOrVariable__done)
    if ((t2.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_writeBarrierOnOperands__80_writeBarrierOnOperand__writeBarrierDone;
    if (*CAST<uint8_t*>(t2.i8p + 7) > uint8_t(0x1))          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:894
        goto _offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__80_skipIfIsRememberedOrInEden__done;
    PUSH(pcBase);                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:410
    PUSH(pc);
    t1.i = t2.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:411
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:412
    llint_write_barrier_slow(t0, t1);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:85
    POP(pc);                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:414
    POP(pcBase);

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__80_skipIfIsRememberedOrInEden__done)

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__80_writeBarrierOnOperand__writeBarrierDone)

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_80_writeBarrierOnOperands__writeBarrierDone)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2108
    t2.u = *CAST<uint32_t*>(t0.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:477
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:470
    t1.i = *CAST<intptr_t*>(t1.i8p + 56);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:471
    t1.i = *CAST<intptr_t*>(t1.i8p + 176);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:472
    t2.i = *CAST<intptr_t*>(t1.i8p + (t2.i << 3));           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:473
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    if (t2.i != t1.i)                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2111
        goto _offlineasm_pDynamic;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putProperty__81_loadConstantOrVariable__constant;
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putProperty__81_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putProperty__81_loadConstantOrVariable__constant)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t2.i = *CAST<intptr_t*>(t2.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t2.i64 = *CAST<int64_t*>(t2.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putProperty__81_loadConstantOrVariable__done)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i32 < int32_t(0x64))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1198
        goto _offlineasm_putProperty__81_storePropertyAtVariableOffset__isInline;
    t0.i = *CAST<intptr_t*>(t0.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1199
    t1.i32 = -t1.i32;                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1200
    t1.clearHighWord();
    t1.i64 = t1.i32;                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1201
    goto _offlineasm_putProperty__81_storePropertyAtVariableOffset__ready; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1202

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putProperty__81_storePropertyAtVariableOffset__isInline)
    t0.i = t0.i + intptr_t(-768);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1204

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putProperty__81_storePropertyAtVariableOffset__ready)
    *CAST<int64_t*>(t0.i8p + (t1.i << 3) + intptr_t(0x310)) = t2.i64; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1206
    pc.i = pc.i + intptr_t(0x7);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_pGlobalVar)
    if (t0.i32 != int32_t(0x1))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2268
        goto _offlineasm_pGlobalLexicalVar;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_writeBarrierOnGlobalObject__writeBarrierOnGlobal__loadConstantOrVariableCell__82_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_writeBarrierOnGlobalObject__writeBarrierOnGlobal__loadConstantOrVariableCell__82_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnGlobalObject__writeBarrierOnGlobal__loadConstantOrVariableCell__82_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnGlobalObject__writeBarrierOnGlobal__loadConstantOrVariableCell__82_loadConstantOrVariable__done)
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_writeBarrierOnGlobalObject__writeBarrierOnGlobal__writeBarrierDone;
    if (t0.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:431
        goto _offlineasm_writeBarrierOnGlobalObject__writeBarrierOnGlobal__writeBarrierDone;
    t3.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:450
    t3.i = *CAST<intptr_t*>(t3.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:451
    if (*CAST<uint8_t*>(t3.i8p + 7) > uint8_t(0x1))          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:894
        goto _offlineasm_writeBarrierOnGlobalObject__writeBarrierOnGlobal__82_skipIfIsRememberedOrInEden__done;
    PUSH(pcBase);                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:437
    PUSH(pc);
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:438
    t1.i = t3.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:439
    llint_write_barrier_slow(t0, t1);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:85
    POP(pc);                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:441
    POP(pcBase);

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnGlobalObject__writeBarrierOnGlobal__82_skipIfIsRememberedOrInEden__done)

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnGlobalObject__writeBarrierOnGlobal__writeBarrierDone)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putGlobalVariable__83_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putGlobalVariable__83_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putGlobalVariable__83_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putGlobalVariable__83_loadConstantOrVariable__done)
    t2.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    if (*CAST<int8_t*>(t2.i8p + 4) != int8_t(0x2))           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:900
        goto _offlineasm_pDynamic;
    *CAST<int64_t*>(t0.i8p) = t1.i64;                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2215
    pc.i = pc.i + intptr_t(0x7);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_pGlobalLexicalVar)
    if (t0.i32 != int32_t(0x2))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2274
        goto _offlineasm_pClosureVar;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_writeBarrierOnGlobalLexicalEnvironment__writeBarrierOnGlobal__loadConstantOrVariableCell__84_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_writeBarrierOnGlobalLexicalEnvironment__writeBarrierOnGlobal__loadConstantOrVariableCell__84_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnGlobalLexicalEnvironment__writeBarrierOnGlobal__loadConstantOrVariableCell__84_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnGlobalLexicalEnvironment__writeBarrierOnGlobal__loadConstantOrVariableCell__84_loadConstantOrVariable__done)
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_writeBarrierOnGlobalLexicalEnvironment__84_writeBarrierOnGlobal__writeBarrierDone;
    if (t0.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:431
        goto _offlineasm_writeBarrierOnGlobalLexicalEnvironment__84_writeBarrierOnGlobal__writeBarrierDone;
    t3.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:458
    t3.i = *CAST<intptr_t*>(t3.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:459
    t3.i = *CAST<intptr_t*>(t3.i8p + 112);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:460
    if (*CAST<uint8_t*>(t3.i8p + 7) > uint8_t(0x1))          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:894
        goto _offlineasm_writeBarrierOnGlobalLexicalEnvironment__writeBarrierOnGlobal__84_skipIfIsRememberedOrInEden__done;
    PUSH(pcBase);                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:437
    PUSH(pc);
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:438
    t1.i = t3.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:439
    llint_write_barrier_slow(t0, t1);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:85
    POP(pc);                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:441
    POP(pcBase);

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnGlobalLexicalEnvironment__writeBarrierOnGlobal__84_skipIfIsRememberedOrInEden__done)

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnGlobalLexicalEnvironment__84_writeBarrierOnGlobal__writeBarrierDone)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i32 = t0.i32 & int32_t(0xffc00);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2238
    t0.clearHighWord();
    t0.i32 = t0.i32 >> (intptr_t(0xa) & 0x1f);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2239
    t0.clearHighWord();
    if (t0.i32 != int32_t(0x2))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2240
        goto _offlineasm_checkTDZInGlobalPutToScopeIfNecessary__noNeedForTDZCheck;
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t0.i64 = *CAST<int64_t*>(t0.i8p);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2242
    if (t0.i64 == int64_t(0x0))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2243
        goto _offlineasm_pDynamic;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_checkTDZInGlobalPutToScopeIfNecessary__noNeedForTDZCheck)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putGlobalVariable__85_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putGlobalVariable__85_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putGlobalVariable__85_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putGlobalVariable__85_loadConstantOrVariable__done)
    t2.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    if (*CAST<int8_t*>(t2.i8p + 4) != int8_t(0x2))           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:900
        goto _offlineasm_pDynamic;
    *CAST<int64_t*>(t0.i8p) = t1.i64;                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2215
    pc.i = pc.i + intptr_t(0x7);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_pClosureVar)
    if (t0.i32 != int32_t(0x3))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2281
        goto _offlineasm_pGlobalPropertyWithVarInjectionChecks;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__86_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__86_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__86_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__86_loadConstantOrVariable__done)
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_87_writeBarrierOnOperands__writeBarrierDone;
    if (t0.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:422
        goto _offlineasm_87_writeBarrierOnOperands__writeBarrierDone;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__87_loadConstantOrVariable__constant;
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__87_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__87_loadConstantOrVariable__constant)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t2.i = *CAST<intptr_t*>(t2.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t2.i64 = *CAST<int64_t*>(t2.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__87_loadConstantOrVariable__done)
    if ((t2.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_writeBarrierOnOperands__87_writeBarrierOnOperand__writeBarrierDone;
    if (*CAST<uint8_t*>(t2.i8p + 7) > uint8_t(0x1))          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:894
        goto _offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__87_skipIfIsRememberedOrInEden__done;
    PUSH(pcBase);                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:410
    PUSH(pc);
    t1.i = t2.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:411
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:412
    llint_write_barrier_slow(t0, t1);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:85
    POP(pc);                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:414
    POP(pcBase);

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__87_skipIfIsRememberedOrInEden__done)

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__87_writeBarrierOnOperand__writeBarrierDone)

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_87_writeBarrierOnOperands__writeBarrierDone)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:378
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putClosureVar__88_loadConstantOrVariable__constant;
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putClosureVar__88_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putClosureVar__88_loadConstantOrVariable__constant)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t2.i = *CAST<intptr_t*>(t2.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t2.i64 = *CAST<int64_t*>(t2.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putClosureVar__88_loadConstantOrVariable__done)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(t0.i8p + (t1.i << 3) + intptr_t(0x20)) = t2.i64; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2222
    pc.i = pc.i + intptr_t(0x7);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_pGlobalPropertyWithVarInjectionChecks)
    if (t0.i32 != int32_t(0x6))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2288
        goto _offlineasm_pGlobalVarWithVarInjectionChecks;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__89_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__89_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__89_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__89_loadConstantOrVariable__done)
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_90_writeBarrierOnOperands__writeBarrierDone;
    if (t0.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:422
        goto _offlineasm_90_writeBarrierOnOperands__writeBarrierDone;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__90_loadConstantOrVariable__constant;
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__90_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__90_loadConstantOrVariable__constant)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t2.i = *CAST<intptr_t*>(t2.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t2.i64 = *CAST<int64_t*>(t2.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__90_loadConstantOrVariable__done)
    if ((t2.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_writeBarrierOnOperands__90_writeBarrierOnOperand__writeBarrierDone;
    if (*CAST<uint8_t*>(t2.i8p + 7) > uint8_t(0x1))          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:894
        goto _offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__90_skipIfIsRememberedOrInEden__done;
    PUSH(pcBase);                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:410
    PUSH(pc);
    t1.i = t2.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:411
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:412
    llint_write_barrier_slow(t0, t1);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:85
    POP(pc);                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:414
    POP(pcBase);

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__90_skipIfIsRememberedOrInEden__done)

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__90_writeBarrierOnOperand__writeBarrierDone)

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_90_writeBarrierOnOperands__writeBarrierDone)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2108
    t2.u = *CAST<uint32_t*>(t0.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:477
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:470
    t1.i = *CAST<intptr_t*>(t1.i8p + 56);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:471
    t1.i = *CAST<intptr_t*>(t1.i8p + 176);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:472
    t2.i = *CAST<intptr_t*>(t1.i8p + (t2.i << 3));           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:473
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    if (t2.i != t1.i)                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2111
        goto _offlineasm_pDynamic;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putProperty__91_loadConstantOrVariable__constant;
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putProperty__91_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putProperty__91_loadConstantOrVariable__constant)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t2.i = *CAST<intptr_t*>(t2.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t2.i64 = *CAST<int64_t*>(t2.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putProperty__91_loadConstantOrVariable__done)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i32 < int32_t(0x64))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1198
        goto _offlineasm_putProperty__91_storePropertyAtVariableOffset__isInline;
    t0.i = *CAST<intptr_t*>(t0.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1199
    t1.i32 = -t1.i32;                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1200
    t1.clearHighWord();
    t1.i64 = t1.i32;                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1201
    goto _offlineasm_putProperty__91_storePropertyAtVariableOffset__ready; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1202

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putProperty__91_storePropertyAtVariableOffset__isInline)
    t0.i = t0.i + intptr_t(-768);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1204

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putProperty__91_storePropertyAtVariableOffset__ready)
    *CAST<int64_t*>(t0.i8p + (t1.i << 3) + intptr_t(0x310)) = t2.i64; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1206
    pc.i = pc.i + intptr_t(0x7);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_pGlobalVarWithVarInjectionChecks)
    if (t0.i32 != int32_t(0x7))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2295
        goto _offlineasm_pGlobalLexicalVarWithVarInjectionChecks;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_writeBarrierOnGlobalObject__writeBarrierOnGlobal__loadConstantOrVariableCell__92_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_writeBarrierOnGlobalObject__writeBarrierOnGlobal__loadConstantOrVariableCell__92_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnGlobalObject__writeBarrierOnGlobal__loadConstantOrVariableCell__92_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnGlobalObject__writeBarrierOnGlobal__loadConstantOrVariableCell__92_loadConstantOrVariable__done)
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_writeBarrierOnGlobalObject__92_writeBarrierOnGlobal__writeBarrierDone;
    if (t0.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:431
        goto _offlineasm_writeBarrierOnGlobalObject__92_writeBarrierOnGlobal__writeBarrierDone;
    t3.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:450
    t3.i = *CAST<intptr_t*>(t3.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:451
    if (*CAST<uint8_t*>(t3.i8p + 7) > uint8_t(0x1))          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:894
        goto _offlineasm_writeBarrierOnGlobalObject__writeBarrierOnGlobal__92_skipIfIsRememberedOrInEden__done;
    PUSH(pcBase);                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:437
    PUSH(pc);
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:438
    t1.i = t3.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:439
    llint_write_barrier_slow(t0, t1);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:85
    POP(pc);                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:441
    POP(pcBase);

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnGlobalObject__writeBarrierOnGlobal__92_skipIfIsRememberedOrInEden__done)

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnGlobalObject__92_writeBarrierOnGlobal__writeBarrierDone)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2025
    t0.i = *CAST<intptr_t*>(t0.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2026
    t0.i = *CAST<intptr_t*>(t0.i8p + 1472);                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2027
    if (*CAST<int8_t*>(t0.i8p + 4) == int8_t(0x2))           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2028
        goto _offlineasm_pDynamic;
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putGlobalVariable__93_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putGlobalVariable__93_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putGlobalVariable__93_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putGlobalVariable__93_loadConstantOrVariable__done)
    t2.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    if (*CAST<int8_t*>(t2.i8p + 4) != int8_t(0x2))           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:900
        goto _offlineasm_pDynamic;
    *CAST<int64_t*>(t0.i8p) = t1.i64;                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2215
    pc.i = pc.i + intptr_t(0x7);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_pGlobalLexicalVarWithVarInjectionChecks)
    if (t0.i32 != int32_t(0x8))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2302
        goto _offlineasm_pClosureVarWithVarInjectionChecks;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_writeBarrierOnGlobalLexicalEnvironment__writeBarrierOnGlobal__loadConstantOrVariableCell__94_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_writeBarrierOnGlobalLexicalEnvironment__writeBarrierOnGlobal__loadConstantOrVariableCell__94_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnGlobalLexicalEnvironment__writeBarrierOnGlobal__loadConstantOrVariableCell__94_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnGlobalLexicalEnvironment__writeBarrierOnGlobal__loadConstantOrVariableCell__94_loadConstantOrVariable__done)
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_writeBarrierOnGlobalLexicalEnvironment__94_writeBarrierOnGlobal__writeBarrierDone;
    if (t0.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:431
        goto _offlineasm_writeBarrierOnGlobalLexicalEnvironment__94_writeBarrierOnGlobal__writeBarrierDone;
    t3.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:458
    t3.i = *CAST<intptr_t*>(t3.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:459
    t3.i = *CAST<intptr_t*>(t3.i8p + 112);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:460
    if (*CAST<uint8_t*>(t3.i8p + 7) > uint8_t(0x1))          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:894
        goto _offlineasm_writeBarrierOnGlobalLexicalEnvironment__writeBarrierOnGlobal__94_skipIfIsRememberedOrInEden__done;
    PUSH(pcBase);                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:437
    PUSH(pc);
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:438
    t1.i = t3.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:439
    llint_write_barrier_slow(t0, t1);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:85
    POP(pc);                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:441
    POP(pcBase);

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnGlobalLexicalEnvironment__writeBarrierOnGlobal__94_skipIfIsRememberedOrInEden__done)

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnGlobalLexicalEnvironment__94_writeBarrierOnGlobal__writeBarrierDone)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2025
    t0.i = *CAST<intptr_t*>(t0.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2026
    t0.i = *CAST<intptr_t*>(t0.i8p + 1472);                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2027
    if (*CAST<int8_t*>(t0.i8p + 4) == int8_t(0x2))           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2028
        goto _offlineasm_pDynamic;
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i32 = t0.i32 & int32_t(0xffc00);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2238
    t0.clearHighWord();
    t0.i32 = t0.i32 >> (intptr_t(0xa) & 0x1f);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2239
    t0.clearHighWord();
    if (t0.i32 != int32_t(0x2))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2240
        goto _offlineasm_94_checkTDZInGlobalPutToScopeIfNecessary__noNeedForTDZCheck;
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t0.i64 = *CAST<int64_t*>(t0.i8p);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2242
    if (t0.i64 == int64_t(0x0))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2243
        goto _offlineasm_pDynamic;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_94_checkTDZInGlobalPutToScopeIfNecessary__noNeedForTDZCheck)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putGlobalVariable__95_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putGlobalVariable__95_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putGlobalVariable__95_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putGlobalVariable__95_loadConstantOrVariable__done)
    t2.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    if (*CAST<int8_t*>(t2.i8p + 4) != int8_t(0x2))           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:900
        goto _offlineasm_pDynamic;
    *CAST<int64_t*>(t0.i8p) = t1.i64;                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2215
    pc.i = pc.i + intptr_t(0x7);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_pClosureVarWithVarInjectionChecks)
    if (t0.i32 != int32_t(0x9))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2310
        goto _offlineasm_pModuleVar;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__96_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__96_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__96_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__96_loadConstantOrVariable__done)
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_97_writeBarrierOnOperands__writeBarrierDone;
    if (t0.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:422
        goto _offlineasm_97_writeBarrierOnOperands__writeBarrierDone;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__97_loadConstantOrVariable__constant;
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__97_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__97_loadConstantOrVariable__constant)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t2.i = *CAST<intptr_t*>(t2.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t2.i64 = *CAST<int64_t*>(t2.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__97_loadConstantOrVariable__done)
    if ((t2.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_writeBarrierOnOperands__97_writeBarrierOnOperand__writeBarrierDone;
    if (*CAST<uint8_t*>(t2.i8p + 7) > uint8_t(0x1))          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:894
        goto _offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__97_skipIfIsRememberedOrInEden__done;
    PUSH(pcBase);                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:410
    PUSH(pc);
    t1.i = t2.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:411
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:412
    llint_write_barrier_slow(t0, t1);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:85
    POP(pc);                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:414
    POP(pcBase);

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__97_skipIfIsRememberedOrInEden__done)

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__97_writeBarrierOnOperand__writeBarrierDone)

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_97_writeBarrierOnOperands__writeBarrierDone)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2025
    t0.i = *CAST<intptr_t*>(t0.i8p + 8);                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2026
    t0.i = *CAST<intptr_t*>(t0.i8p + 1472);                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2027
    if (*CAST<int8_t*>(t0.i8p + 4) == int8_t(0x2))           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2028
        goto _offlineasm_pDynamic;
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:378
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_putClosureVar__98_loadConstantOrVariable__constant;
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_putClosureVar__98_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putClosureVar__98_loadConstantOrVariable__constant)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t2.i = *CAST<intptr_t*>(t2.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t2.i64 = *CAST<int64_t*>(t2.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_putClosureVar__98_loadConstantOrVariable__done)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x30)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(t0.i8p + (t1.i << 3) + intptr_t(0x20)) = t2.i64; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2222
    pc.i = pc.i + intptr_t(0x7);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_pModuleVar)
    if (t0.i32 != int32_t(0x5))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2318
        goto _offlineasm_pDynamic;
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_throw_strict_mode_readonly_property_write_error(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x7);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_pDynamic)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_put_to_scope(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x7);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_get_from_arguments)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:378
    t1.u = *CAST<uint32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2330
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2331
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t1.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2334
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_put_to_arguments)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__99_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__99_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__99_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__loadConstantOrVariableCell__99_loadConstantOrVariable__done)
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_100_writeBarrierOnOperands__writeBarrierDone;
    if (t0.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:422
        goto _offlineasm_100_writeBarrierOnOperands__writeBarrierDone;
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__100_loadConstantOrVariable__constant;
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__100_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__100_loadConstantOrVariable__constant)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t2.i = *CAST<intptr_t*>(t2.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t2.i64 = *CAST<int64_t*>(t2.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__loadConstantOrVariableCell__100_loadConstantOrVariable__done)
    if ((t2.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:401
        goto _offlineasm_writeBarrierOnOperands__100_writeBarrierOnOperand__writeBarrierDone;
    if (*CAST<uint8_t*>(t2.i8p + 7) > uint8_t(0x1))          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:894
        goto _offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__100_skipIfIsRememberedOrInEden__done;
    PUSH(pcBase);                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:410
    PUSH(pc);
    t1.i = t2.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:411
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:412
    llint_write_barrier_slow(t0, t1);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:85
    POP(pc);                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:414
    POP(pcBase);

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__writeBarrierOnOperand__100_skipIfIsRememberedOrInEden__done)

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_writeBarrierOnOperands__100_writeBarrierOnOperand__writeBarrierDone)

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_100_writeBarrierOnOperands__writeBarrierDone)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:378
    t1.u = *CAST<uint32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2342
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t3.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_101_loadConstantOrVariable__constant;
    t2.i64 = *CAST<int64_t*>(cfr.i8p + (t3.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_101_loadConstantOrVariable__done;       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_101_loadConstantOrVariable__constant)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t2.i = *CAST<intptr_t*>(t2.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t3.i = t3.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t2.i64 = *CAST<int64_t*>(t2.i8p + (t3.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_101_loadConstantOrVariable__done)
    *CAST<int64_t*>(t0.i8p + (t1.i << 3) + intptr_t(0x28)) = t2.i64; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2345
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_get_parent_scope)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:378
    t0.i = *CAST<intptr_t*>(t0.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2352
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2354
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_profile_type)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2360
    t1.i = *CAST<intptr_t*>(t1.i8p + 56);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2361
    t1.i = *CAST<intptr_t*>(t1.i8p + 20824);                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2363
    t2.i = *CAST<intptr_t*>(t1.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2365
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t3.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_102_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t3.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_102_loadConstantOrVariable__done;       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_102_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t3.i = t3.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t3.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_102_loadConstantOrVariable__done)
    if (t0.i64 == int64_t(0x0))                              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2371
        goto _offlineasm_opProfileTypeDone;
    *CAST<int64_t*>(t2.i8p) = t0.i64;                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2373
    t3.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<intptr_t*>(t2.i8p + 8) = t3.i;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2377
    if ((t0.i64 & tagMask.i64) == 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2379
        goto _offlineasm_opProfileTypeIsCell;
    *CAST<int32_t*>(t2.i8p + 16) = int32_t(0x0);             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2380
    goto _offlineasm_opProfileTypeSkipIsCell;                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2381

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opProfileTypeIsCell)
    t3.u = *CAST<uint32_t*>(t0.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2383
    *CAST<int32_t*>(t2.i8p + 16) = t3.i32;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2384

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opProfileTypeSkipIsCell)
    t2.i = t2.i + intptr_t(0x18);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2388
    *CAST<intptr_t*>(t1.i8p + 16) = t2.i;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2389
    t1.i = *CAST<intptr_t*>(t1.i8p + 24);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2391
    if (t2.i != t1.i)                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2392
        goto _offlineasm_opProfileTypeDone;
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_profile_type_clear_log(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opProfileTypeDone)
    pc.i = pc.i + intptr_t(0x6);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_profile_control_flow)
    t0.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t0.i8p + 8) = *CAST<int64_t*>(t0.i8p + 8) + int64_t(0x1); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2401
    pc.i = pc.i + intptr_t(0x2);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_get_rest_length)
    t0.u = *CAST<uint32_t*>(cfr.i8p + 32);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2407
    t0.i32 = t0.i32 - int32_t(0x1);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2408
    t0.clearHighWord();
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t0.i32 <= t1.i32)                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2410
        goto _offlineasm_storeZero;
    t0.i32 = t0.i32 - t1.i32;                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2411
    t0.clearHighWord();
    goto _offlineasm_boxUp;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2412

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_storeZero)
    t0.i = intptr_t(0x0);                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2414

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_boxUp)
    t0.i64 = t0.i64 | tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2416
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2418
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_log_shadow_chicken_prologue)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1563
    t1.i = *CAST<intptr_t*>(t1.i8p + 56);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1564
    t2.i = *CAST<intptr_t*>(t1.i8p + 20960);                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1565
    t0.i = *CAST<intptr_t*>(t2.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1566
    if (t0.u >= *CAST<uintptr_t*>(t2.i8p + 24))              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1567
        goto _offlineasm_opLogShadowChickenPrologueSlow;
    t1.i = intptr_t(0x38) + t0.i;                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1568
    *CAST<intptr_t*>(t2.i8p + 16) = t1.i;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1569
    *CAST<intptr_t*>(t0.i8p + 16) = cfr.i;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2425
    t1.i = *CAST<intptr_t*>(cfr.i8p);                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2426
    *CAST<intptr_t*>(t0.i8p + 24) = t1.i;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2427
    t1.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2428
    *CAST<intptr_t*>(t0.i8p + 8) = t1.i;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2429
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:378
    *CAST<intptr_t*>(t0.i8p + 32) = t1.i;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2431
    pc.i = pc.i + intptr_t(0x2);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opLogShadowChickenPrologueSlow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_log_shadow_chicken_prologue(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x2);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_log_shadow_chicken_tail)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1563
    t1.i = *CAST<intptr_t*>(t1.i8p + 56);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1564
    t2.i = *CAST<intptr_t*>(t1.i8p + 20960);                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1565
    t0.i = *CAST<intptr_t*>(t2.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1566
    if (t0.u >= *CAST<uintptr_t*>(t2.i8p + 24))              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1567
        goto _offlineasm_opLogShadowChickenTailSlow;
    t1.i = intptr_t(0x38) + t0.i;                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1568
    *CAST<intptr_t*>(t2.i8p + 16) = t1.i;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1569
    *CAST<intptr_t*>(t0.i8p + 16) = cfr.i;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2441
    *CAST<intptr_t*>(t0.i8p + 8) = intptr_t(0x7a11);         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2442
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:378
    *CAST<intptr_t*>(t0.i8p) = t1.i;                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2444
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:378
    *CAST<intptr_t*>(t0.i8p + 32) = t1.i;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2446
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2447
    *CAST<intptr_t*>(t0.i8p + 40) = t1.i;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2448
    *CAST<int32_t*>(t0.i8p + 48) = pc.i32;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2449
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opLogShadowChickenTailSlow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_log_shadow_chicken_tail(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_create_direct_arguments)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_create_direct_arguments(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x2);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_create_scoped_arguments)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_create_scoped_arguments(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_create_cloned_arguments)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_create_cloned_arguments(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x2);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_create_this)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_create_this(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_new_object)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_new_object(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_new_func)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_new_func(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_new_generator_func)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_new_generator_func(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_new_array)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_new_array(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_new_array_with_size)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_new_array_with_size(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_new_array_buffer)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_new_array_buffer(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_new_regexp)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_new_regexp(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_less)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_less(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_lesseq)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_lesseq(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_greater)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_greater(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_greatereq)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_greatereq(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_mod)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_mod(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_pow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_pow(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_typeof)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_typeof(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_is_object_or_null)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_is_object_or_null(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_is_function)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_is_function(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_in)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_in(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_try_get_by_id)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_try_get_by_id(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_del_by_id)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_del_by_id(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_del_by_val)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_del_by_val(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_put_by_index)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_put_by_index(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_put_getter_by_id)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_put_getter_by_id(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_put_setter_by_id)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_put_setter_by_id(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_put_getter_setter_by_id)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_put_getter_setter_by_id(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x6);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_put_getter_by_val)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_put_getter_by_val(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_put_setter_by_val)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_put_setter_by_val(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_jtrue)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_jumpTrueOrFalse__103_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_jumpTrueOrFalse__103_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_jumpTrueOrFalse__103_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_jumpTrueOrFalse__103_loadConstantOrVariable__done)
    t0.i64 = t0.i64 ^ int64_t(0x6);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1668
    if ((t0.i64 & int64_t(-1)) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1669
        goto _offlineasm_jumpTrueOrFalse__slow;
    if (t0.i32 != 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1463
        goto _offlineasm_jumpTrueOrFalse__target;
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_jumpTrueOrFalse__target)
    pc.i32 = pc.i32 + *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:36
    pc.clearHighWord();
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_jumpTrueOrFalse__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_jtrue(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_jfalse)
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t1.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_jumpTrueOrFalse__104_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t1.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_jumpTrueOrFalse__104_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_jumpTrueOrFalse__104_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t1.i = t1.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t1.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_jumpTrueOrFalse__104_loadConstantOrVariable__done)
    t0.i64 = t0.i64 ^ int64_t(0x6);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1668
    if ((t0.i64 & int64_t(-1)) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1669
        goto _offlineasm_104_jumpTrueOrFalse__slow;
    if (t0.i32 == 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1470
        goto _offlineasm_104_jumpTrueOrFalse__target;
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_104_jumpTrueOrFalse__target)
    pc.i32 = pc.i32 + *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:36
    pc.clearHighWord();
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_104_jumpTrueOrFalse__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_jfalse(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_jless)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_compare__105_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_compare__105_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__105_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__105_loadConstantOrVariable__done)
    if (t3.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_compare__106_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t3.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_compare__106_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__106_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t3.i = t3.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t3.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__106_loadConstantOrVariable__done)
    if (t0.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1745
        goto _offlineasm_compare__op1NotInt;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1746
        goto _offlineasm_compare__op2NotInt;
    if (t0.i32 < t1.i32)                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1477
        goto _offlineasm_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__op1NotInt)
    if ((t0.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1751
        goto _offlineasm_compare__slow;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1752
        goto _offlineasm_compare__op1NotIntOp2NotInt;
    d1.d = t1.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1753
    goto _offlineasm_compare__op1NotIntReady;                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1754

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__op1NotIntOp2NotInt)
    if ((t1.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1756
        goto _offlineasm_compare__slow;
    t1.i64 = t1.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1757
    d1.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1758

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__op1NotIntReady)
    t0.i64 = t0.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1760
    d0.d = t0.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1761
    if (d0.d < d1.d)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1478
        goto _offlineasm_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__op2NotInt)
    d0.d = t0.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1766
    if ((t1.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1767
        goto _offlineasm_compare__slow;
    t1.i64 = t1.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1768
    d1.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1769
    if (d0.d < d1.d)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1478
        goto _offlineasm_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__jumpTarget)
    pc.i32 = pc.i32 + *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:36
    pc.clearHighWord();
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_jless(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_jnless)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_compare__107_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_compare__107_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__107_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__107_loadConstantOrVariable__done)
    if (t3.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_compare__108_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t3.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_compare__108_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__108_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t3.i = t3.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t3.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__108_loadConstantOrVariable__done)
    if (t0.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1745
        goto _offlineasm_108_compare__op1NotInt;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1746
        goto _offlineasm_108_compare__op2NotInt;
    if (t0.i32 >= t1.i32)                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1485
        goto _offlineasm_108_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_108_compare__op1NotInt)
    if ((t0.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1751
        goto _offlineasm_108_compare__slow;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1752
        goto _offlineasm_108_compare__op1NotIntOp2NotInt;
    d1.d = t1.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1753
    goto _offlineasm_108_compare__op1NotIntReady;            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1754

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_108_compare__op1NotIntOp2NotInt)
    if ((t1.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1756
        goto _offlineasm_108_compare__slow;
    t1.i64 = t1.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1757
    d1.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1758

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_108_compare__op1NotIntReady)
    t0.i64 = t0.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1760
    d0.d = t0.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1761
    if (std::isnan(d0.d) || std::isnan(d1.d)                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1486
        || (d0.d >= d1.d))
        goto _offlineasm_108_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_108_compare__op2NotInt)
    d0.d = t0.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1766
    if ((t1.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1767
        goto _offlineasm_108_compare__slow;
    t1.i64 = t1.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1768
    d1.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1769
    if (std::isnan(d0.d) || std::isnan(d1.d)                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1486
        || (d0.d >= d1.d))
        goto _offlineasm_108_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_108_compare__jumpTarget)
    pc.i32 = pc.i32 + *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:36
    pc.clearHighWord();
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_108_compare__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_jnless(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_jgreater)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_compare__109_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_compare__109_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__109_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__109_loadConstantOrVariable__done)
    if (t3.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_compare__110_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t3.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_compare__110_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__110_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t3.i = t3.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t3.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__110_loadConstantOrVariable__done)
    if (t0.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1745
        goto _offlineasm_110_compare__op1NotInt;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1746
        goto _offlineasm_110_compare__op2NotInt;
    if (t0.i32 > t1.i32)                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1493
        goto _offlineasm_110_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_110_compare__op1NotInt)
    if ((t0.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1751
        goto _offlineasm_110_compare__slow;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1752
        goto _offlineasm_110_compare__op1NotIntOp2NotInt;
    d1.d = t1.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1753
    goto _offlineasm_110_compare__op1NotIntReady;            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1754

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_110_compare__op1NotIntOp2NotInt)
    if ((t1.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1756
        goto _offlineasm_110_compare__slow;
    t1.i64 = t1.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1757
    d1.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1758

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_110_compare__op1NotIntReady)
    t0.i64 = t0.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1760
    d0.d = t0.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1761
    if (d0.d > d1.d)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1494
        goto _offlineasm_110_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_110_compare__op2NotInt)
    d0.d = t0.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1766
    if ((t1.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1767
        goto _offlineasm_110_compare__slow;
    t1.i64 = t1.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1768
    d1.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1769
    if (d0.d > d1.d)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1494
        goto _offlineasm_110_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_110_compare__jumpTarget)
    pc.i32 = pc.i32 + *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:36
    pc.clearHighWord();
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_110_compare__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_jgreater(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_jngreater)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_compare__111_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_compare__111_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__111_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__111_loadConstantOrVariable__done)
    if (t3.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_compare__112_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t3.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_compare__112_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__112_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t3.i = t3.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t3.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__112_loadConstantOrVariable__done)
    if (t0.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1745
        goto _offlineasm_112_compare__op1NotInt;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1746
        goto _offlineasm_112_compare__op2NotInt;
    if (t0.i32 <= t1.i32)                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1501
        goto _offlineasm_112_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_112_compare__op1NotInt)
    if ((t0.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1751
        goto _offlineasm_112_compare__slow;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1752
        goto _offlineasm_112_compare__op1NotIntOp2NotInt;
    d1.d = t1.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1753
    goto _offlineasm_112_compare__op1NotIntReady;            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1754

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_112_compare__op1NotIntOp2NotInt)
    if ((t1.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1756
        goto _offlineasm_112_compare__slow;
    t1.i64 = t1.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1757
    d1.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1758

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_112_compare__op1NotIntReady)
    t0.i64 = t0.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1760
    d0.d = t0.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1761
    if (std::isnan(d0.d) || std::isnan(d1.d)                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1502
        || (d0.d <= d1.d))
        goto _offlineasm_112_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_112_compare__op2NotInt)
    d0.d = t0.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1766
    if ((t1.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1767
        goto _offlineasm_112_compare__slow;
    t1.i64 = t1.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1768
    d1.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1769
    if (std::isnan(d0.d) || std::isnan(d1.d)                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1502
        || (d0.d <= d1.d))
        goto _offlineasm_112_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_112_compare__jumpTarget)
    pc.i32 = pc.i32 + *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:36
    pc.clearHighWord();
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_112_compare__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_jngreater(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_jlesseq)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_compare__113_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_compare__113_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__113_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__113_loadConstantOrVariable__done)
    if (t3.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_compare__114_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t3.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_compare__114_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__114_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t3.i = t3.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t3.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__114_loadConstantOrVariable__done)
    if (t0.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1745
        goto _offlineasm_114_compare__op1NotInt;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1746
        goto _offlineasm_114_compare__op2NotInt;
    if (t0.i32 <= t1.i32)                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1509
        goto _offlineasm_114_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_114_compare__op1NotInt)
    if ((t0.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1751
        goto _offlineasm_114_compare__slow;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1752
        goto _offlineasm_114_compare__op1NotIntOp2NotInt;
    d1.d = t1.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1753
    goto _offlineasm_114_compare__op1NotIntReady;            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1754

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_114_compare__op1NotIntOp2NotInt)
    if ((t1.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1756
        goto _offlineasm_114_compare__slow;
    t1.i64 = t1.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1757
    d1.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1758

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_114_compare__op1NotIntReady)
    t0.i64 = t0.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1760
    d0.d = t0.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1761
    if (d0.d <= d1.d)                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1510
        goto _offlineasm_114_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_114_compare__op2NotInt)
    d0.d = t0.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1766
    if ((t1.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1767
        goto _offlineasm_114_compare__slow;
    t1.i64 = t1.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1768
    d1.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1769
    if (d0.d <= d1.d)                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1510
        goto _offlineasm_114_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_114_compare__jumpTarget)
    pc.i32 = pc.i32 + *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:36
    pc.clearHighWord();
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_114_compare__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_jlesseq(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_jnlesseq)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_compare__115_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_compare__115_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__115_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__115_loadConstantOrVariable__done)
    if (t3.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_compare__116_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t3.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_compare__116_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__116_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t3.i = t3.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t3.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__116_loadConstantOrVariable__done)
    if (t0.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1745
        goto _offlineasm_116_compare__op1NotInt;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1746
        goto _offlineasm_116_compare__op2NotInt;
    if (t0.i32 > t1.i32)                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1517
        goto _offlineasm_116_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_116_compare__op1NotInt)
    if ((t0.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1751
        goto _offlineasm_116_compare__slow;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1752
        goto _offlineasm_116_compare__op1NotIntOp2NotInt;
    d1.d = t1.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1753
    goto _offlineasm_116_compare__op1NotIntReady;            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1754

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_116_compare__op1NotIntOp2NotInt)
    if ((t1.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1756
        goto _offlineasm_116_compare__slow;
    t1.i64 = t1.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1757
    d1.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1758

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_116_compare__op1NotIntReady)
    t0.i64 = t0.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1760
    d0.d = t0.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1761
    if (std::isnan(d0.d) || std::isnan(d1.d)                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1518
        || (d0.d > d1.d))
        goto _offlineasm_116_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_116_compare__op2NotInt)
    d0.d = t0.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1766
    if ((t1.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1767
        goto _offlineasm_116_compare__slow;
    t1.i64 = t1.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1768
    d1.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1769
    if (std::isnan(d0.d) || std::isnan(d1.d)                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1518
        || (d0.d > d1.d))
        goto _offlineasm_116_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_116_compare__jumpTarget)
    pc.i32 = pc.i32 + *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:36
    pc.clearHighWord();
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_116_compare__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_jnlesseq(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_jgreatereq)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_compare__117_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_compare__117_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__117_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__117_loadConstantOrVariable__done)
    if (t3.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_compare__118_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t3.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_compare__118_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__118_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t3.i = t3.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t3.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__118_loadConstantOrVariable__done)
    if (t0.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1745
        goto _offlineasm_118_compare__op1NotInt;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1746
        goto _offlineasm_118_compare__op2NotInt;
    if (t0.i32 >= t1.i32)                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1525
        goto _offlineasm_118_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_118_compare__op1NotInt)
    if ((t0.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1751
        goto _offlineasm_118_compare__slow;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1752
        goto _offlineasm_118_compare__op1NotIntOp2NotInt;
    d1.d = t1.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1753
    goto _offlineasm_118_compare__op1NotIntReady;            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1754

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_118_compare__op1NotIntOp2NotInt)
    if ((t1.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1756
        goto _offlineasm_118_compare__slow;
    t1.i64 = t1.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1757
    d1.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1758

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_118_compare__op1NotIntReady)
    t0.i64 = t0.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1760
    d0.d = t0.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1761
    if (d0.d >= d1.d)                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1526
        goto _offlineasm_118_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_118_compare__op2NotInt)
    d0.d = t0.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1766
    if ((t1.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1767
        goto _offlineasm_118_compare__slow;
    t1.i64 = t1.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1768
    d1.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1769
    if (d0.d >= d1.d)                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1526
        goto _offlineasm_118_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_118_compare__jumpTarget)
    pc.i32 = pc.i32 + *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:36
    pc.clearHighWord();
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_118_compare__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_jgreatereq(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_jngreatereq)
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    if (t2.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_compare__119_loadConstantOrVariable__constant;
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t2.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_compare__119_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__119_loadConstantOrVariable__constant)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t0.i = *CAST<intptr_t*>(t0.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t2.i = t2.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t0.i64 = *CAST<int64_t*>(t0.i8p + (t2.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__119_loadConstantOrVariable__done)
    if (t3.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_compare__120_loadConstantOrVariable__constant;
    t1.i64 = *CAST<int64_t*>(cfr.i8p + (t3.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_compare__120_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__120_loadConstantOrVariable__constant)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t1.i = *CAST<intptr_t*>(t1.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t3.i = t3.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t1.i64 = *CAST<int64_t*>(t1.i8p + (t3.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_compare__120_loadConstantOrVariable__done)
    if (t0.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1745
        goto _offlineasm_120_compare__op1NotInt;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1746
        goto _offlineasm_120_compare__op2NotInt;
    if (t0.i32 < t1.i32)                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1533
        goto _offlineasm_120_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_120_compare__op1NotInt)
    if ((t0.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1751
        goto _offlineasm_120_compare__slow;
    if (t1.u64 < tagTypeNumber.u64)                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1752
        goto _offlineasm_120_compare__op1NotIntOp2NotInt;
    d1.d = t1.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1753
    goto _offlineasm_120_compare__op1NotIntReady;            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1754

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_120_compare__op1NotIntOp2NotInt)
    if ((t1.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1756
        goto _offlineasm_120_compare__slow;
    t1.i64 = t1.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1757
    d1.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1758

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_120_compare__op1NotIntReady)
    t0.i64 = t0.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1760
    d0.d = t0.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1761
    if (std::isnan(d0.d) || std::isnan(d1.d)                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1534
        || (d0.d < d1.d))
        goto _offlineasm_120_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_120_compare__op2NotInt)
    d0.d = t0.i32;                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1766
    if ((t1.i64 & tagTypeNumber.i64) == 0)                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1767
        goto _offlineasm_120_compare__slow;
    t1.i64 = t1.i64 + tagTypeNumber.i64;                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1768
    d1.d = t1.castToDouble;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1769
    if (std::isnan(d0.d) || std::isnan(d1.d)                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1534
        || (d0.d < d1.d))
        goto _offlineasm_120_compare__jumpTarget;
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_120_compare__jumpTarget)
    pc.i32 = pc.i32 + *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:36
    pc.clearHighWord();
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_120_compare__slow)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_jngreatereq(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_loop_hint)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:904
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:905
        int32_t temp = *CAST<int32_t*>(t0.i8p + 336) + int32_t(0x1);
        *CAST<int32_t*>(t0.i8p + 336) = temp;
        if (temp < 0)
            goto  _offlineasm_checkSwitchToJITForLoop__120_checkSwitchToJIT__continue;
    }
    *CAST<int32_t*>(cfr.i8p + 36) = pc.i32;                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:363
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:365
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:366
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_loop_osr(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    if (t0.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:368
        goto _offlineasm_checkSwitchToJITForLoop__checkSwitchToJIT__action__recover;
    sp.i = t1.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:369
    opcode = t0.opcode;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:370
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_checkSwitchToJITForLoop__checkSwitchToJIT__action__recover)
    pc.u = *CAST<uint32_t*>(cfr.i8p + 36);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:372

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_checkSwitchToJITForLoop__120_checkSwitchToJIT__continue)
    pc.i = pc.i + intptr_t(0x1);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_watchdog)
    t1.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1546
    t1.i = *CAST<intptr_t*>(t1.i8p + 56);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1547
    t0.i = *CAST<intptr_t*>(t1.i8p + 20944);                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1548
    if (t0.i != 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1549
        goto _offlineasm_handleWatchdogTimer;

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_afterWatchdogTimerCheck)
    pc.i = pc.i + intptr_t(0x1);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_handleWatchdogTimer)
    t0.i = *CAST<uint8_t*>(t0.i8p + 4);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1553
    if (t0.i8 == 0)                                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1554
        goto _offlineasm_afterWatchdogTimerCheck;
    *CAST<int32_t*>(cfr.i8p + 36) = pc.i32;                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:350
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:352
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:353
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_handle_watchdog_timer(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    if (t0.i != 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:355
        goto _offlineasm_throwHandler;
    pc.u = *CAST<uint32_t*>(cfr.i8p + 36);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:356
    goto _offlineasm_afterWatchdogTimerCheck;                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1556

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_throwHandler)
    goto llint_throw_from_slow_path_trampoline;              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1558

OFFLINE_ASM_OPCODE_LABEL(op_switch_string)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_switch_string(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_new_func_exp)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_new_func_exp(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_new_generator_func_exp)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_new_generator_func_exp(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_set_function_name)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_set_function_name(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_call)
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = -t3.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1849
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t3.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1850
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1851
        goto _offlineasm_arrayProfileForCall__done;
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x38)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t3.u = *CAST<uint32_t*>(t0.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1853
    *CAST<int32_t*>(t1.i8p + 4) = t3.i32;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1854

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_arrayProfileForCall__done)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t2.i = *CAST<intptr_t*>(t1.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1861
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_doCall__121_loadConstantOrVariable__constant;
    t3.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_doCall__121_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCall__121_loadConstantOrVariable__constant)
    t3.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t3.i = *CAST<intptr_t*>(t3.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t3.i64 = *CAST<int64_t*>(t3.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCall__121_loadConstantOrVariable__done)
    if (t3.i64 != t2.i64)                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1863
        goto _offlineasm_doCall__opCallSlow;
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i32 = t3.i32 << (intptr_t(0x3) & 0x1f);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1865
    t3.clearHighWord();
    t3.i = -t3.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1866
    t3.i = t3.i + cfr.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1867
    *CAST<int64_t*>(t3.i8p + 24) = t2.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1868
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int32_t*>(cfr.i8p + 36) = pc.i32;                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1870
    *CAST<int32_t*>(t3.i8p + 32) = t2.i32;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1871
    sp.i = t3.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1872
    sp.i = sp.i + intptr_t(0x10);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:819
    lr.opcode = getOpcode(llint_cloop_did_return_from_js_2); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:810
    opcode = *CAST<Opcode*>(t1.i8p + 32);
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_cloop_did_return_from_js_2)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:778
    t2.u = *CAST<uint32_t*>(t2.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t2.i = t2.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t2.i = t2.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    sp.i = cfr.i - t2.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:784
    pc.u = *CAST<uint32_t*>(cfr.i8p + 36);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:45
    pcBase.i = *CAST<intptr_t*>(cfr.i8p + 16);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:46
    pcBase.i = *CAST<intptr_t*>(pcBase.i8p + 64);            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:47
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:49
    t3.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x40)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t3.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x9);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCall__opCallSlow)
    *CAST<int32_t*>(cfr.i8p + 36) = pc.i32;                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:341
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:343
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:344
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_call(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    if (t1.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:877
        goto _offlineasm_doCall__slowPathForCall__callCallSlowPath__action__dontUpdateSP;
    sp.i = t1.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:878
    sp.i = sp.i + intptr_t(0x10);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:819

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCall__slowPathForCall__callCallSlowPath__action__dontUpdateSP)
    lr.opcode = getOpcode(llint_cloop_did_return_from_js_3); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:810
    opcode = t0.opcode;
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_cloop_did_return_from_js_3)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:778
    t2.u = *CAST<uint32_t*>(t2.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t2.i = t2.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t2.i = t2.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    sp.i = cfr.i - t2.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:784
    pc.u = *CAST<uint32_t*>(cfr.i8p + 36);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:45
    pcBase.i = *CAST<intptr_t*>(cfr.i8p + 16);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:46
    pcBase.i = *CAST<intptr_t*>(pcBase.i8p + 64);            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:47
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:49
    t3.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x40)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t3.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x9);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_tail_call)
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i = -t3.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1849
    t0.i64 = *CAST<int64_t*>(cfr.i8p + (t3.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1850
    if ((t0.i64 & tagMask.i64) != 0)                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1851
        goto _offlineasm_121_arrayProfileForCall__done;
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x38)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t3.u = *CAST<uint32_t*>(t0.i8p);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1853
    *CAST<int32_t*>(t1.i8p + 4) = t3.i32;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1854

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_121_arrayProfileForCall__done)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:904
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:905
        int32_t temp = *CAST<int32_t*>(t0.i8p + 336) + int32_t(0xa);
        *CAST<int32_t*>(t0.i8p + 336) = temp;
        if (temp < 0)
            goto  _offlineasm_checkSwitchToJITForEpilogue__121_checkSwitchToJIT__continue;
    }
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_replace(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_checkSwitchToJITForEpilogue__121_checkSwitchToJIT__continue)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t2.i = *CAST<intptr_t*>(t1.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1861
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_doCall__122_loadConstantOrVariable__constant;
    t3.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_doCall__122_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCall__122_loadConstantOrVariable__constant)
    t3.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t3.i = *CAST<intptr_t*>(t3.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t3.i64 = *CAST<int64_t*>(t3.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCall__122_loadConstantOrVariable__done)
    if (t3.i64 != t2.i64)                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1863
        goto _offlineasm_122_doCall__opCallSlow;
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i32 = t3.i32 << (intptr_t(0x3) & 0x1f);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1865
    t3.clearHighWord();
    t3.i = -t3.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1866
    t3.i = t3.i + cfr.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1867
    *CAST<int64_t*>(t3.i8p + 24) = t2.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1868
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int32_t*>(cfr.i8p + 36) = pc.i32;                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1870
    *CAST<int32_t*>(t3.i8p + 32) = t2.i32;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1871
    sp.i = t3.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1872
    t3.u = *CAST<uint32_t*>(cfr.i8p + 32);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:826
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:827
    t2.i = *CAST<intptr_t*>(t2.i8p + 40);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:828
    if (t2.i32 <= t3.i32)                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:829
        goto _offlineasm_doCall__prepareCall__noArityFixup;
    t3.i = t2.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:830

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCall__prepareCall__noArityFixup)
    t3.i32 = t3.i32 * int32_t(0x8);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:834
    t3.clearHighWord();
    t3.i32 = t3.i32 + int32_t(0x37);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:835
    t3.clearHighWord();
    t3.i32 = t3.i32 & int32_t(-16);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:836
    t3.clearHighWord();
    t2.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:838
    t2.i = t2.i + t3.i;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:839
    t3.u = *CAST<uint32_t*>(sp.i8p + 32);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:841
    t3.i32 = t3.i32 * int32_t(0x8);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:843
    t3.clearHighWord();
    t3.i32 = t3.i32 + int32_t(0x37);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:844
    t3.clearHighWord();
    t3.i32 = t3.i32 & int32_t(-16);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:845
    t3.clearHighWord();
    sp.i = sp.i + intptr_t(0x10);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:848
    t3.i32 = t3.i32 - int32_t(0x10);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:849
    t3.clearHighWord();
    lr.i = *CAST<intptr_t*>(cfr.i8p + 8);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:850
    t2.i = t2.i - t3.i;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:858
    cfr.i = *CAST<intptr_t*>(cfr.i8p);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:859

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCall__prepareCall__copyLoop)
    t3.i32 = t3.i32 - int32_t(0x8);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:862
    t3.clearHighWord();
    pc.i = *CAST<intptr_t*>(sp.i8p + (t3.i << 0));           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:863
    *CAST<intptr_t*>(t2.i8p + (t3.i << 0)) = pc.i;           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:864
    if (t3.i32 != 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:865
        goto _offlineasm_doCall__prepareCall__copyLoop;
    sp.i = t2.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:867
    opcode = *CAST<Opcode*>(t1.i8p + 32);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:868
    DISPATCH_OPCODE();
    lr.opcode = getOpcode(llint_cloop_did_return_from_js_4); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:810
    opcode = *CAST<Opcode*>(t1.i8p + 32);
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_cloop_did_return_from_js_4)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:778
    t2.u = *CAST<uint32_t*>(t2.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t2.i = t2.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t2.i = t2.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    sp.i = cfr.i - t2.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:784
    pc.u = *CAST<uint32_t*>(cfr.i8p + 36);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:45
    pcBase.i = *CAST<intptr_t*>(cfr.i8p + 16);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:46
    pcBase.i = *CAST<intptr_t*>(pcBase.i8p + 64);            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:47
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:49
    t3.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x40)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t3.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x9);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_122_doCall__opCallSlow)
    *CAST<int32_t*>(cfr.i8p + 36) = pc.i32;                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:341
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:343
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:344
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_call(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    if (t1.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:877
        goto _offlineasm_doCall__slowPathForCall__callCallSlowPath__122_action__dontUpdateSP;
    sp.i = t1.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:878
    t3.u = *CAST<uint32_t*>(cfr.i8p + 32);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:826
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:827
    t2.i = *CAST<intptr_t*>(t2.i8p + 40);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:828
    if (t2.i32 <= t3.i32)                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:829
        goto _offlineasm_doCall__slowPathForCall__callCallSlowPath__action__122_prepareCall__noArityFixup;
    t3.i = t2.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:830

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCall__slowPathForCall__callCallSlowPath__action__122_prepareCall__noArityFixup)
    t3.i32 = t3.i32 * int32_t(0x8);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:834
    t3.clearHighWord();
    t3.i32 = t3.i32 + int32_t(0x37);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:835
    t3.clearHighWord();
    t3.i32 = t3.i32 & int32_t(-16);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:836
    t3.clearHighWord();
    t2.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:838
    t2.i = t2.i + t3.i;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:839
    t3.u = *CAST<uint32_t*>(sp.i8p + 32);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:841
    t3.i32 = t3.i32 * int32_t(0x8);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:843
    t3.clearHighWord();
    t3.i32 = t3.i32 + int32_t(0x37);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:844
    t3.clearHighWord();
    t3.i32 = t3.i32 & int32_t(-16);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:845
    t3.clearHighWord();
    sp.i = sp.i + intptr_t(0x10);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:848
    t3.i32 = t3.i32 - int32_t(0x10);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:849
    t3.clearHighWord();
    lr.i = *CAST<intptr_t*>(cfr.i8p + 8);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:850
    t2.i = t2.i - t3.i;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:858
    cfr.i = *CAST<intptr_t*>(cfr.i8p);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:859

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCall__slowPathForCall__callCallSlowPath__action__122_prepareCall__copyLoop)
    t3.i32 = t3.i32 - int32_t(0x8);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:862
    t3.clearHighWord();
    pc.i = *CAST<intptr_t*>(sp.i8p + (t3.i << 0));           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:863
    *CAST<intptr_t*>(t2.i8p + (t3.i << 0)) = pc.i;           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:864
    if (t3.i32 != 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:865
        goto _offlineasm_doCall__slowPathForCall__callCallSlowPath__action__122_prepareCall__copyLoop;
    sp.i = t2.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:867
    opcode = t0.opcode;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:868
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCall__slowPathForCall__callCallSlowPath__122_action__dontUpdateSP)
    lr.opcode = getOpcode(llint_cloop_did_return_from_js_5); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:810
    opcode = t0.opcode;
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_cloop_did_return_from_js_5)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:778
    t2.u = *CAST<uint32_t*>(t2.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t2.i = t2.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t2.i = t2.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    sp.i = cfr.i - t2.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:784
    pc.u = *CAST<uint32_t*>(cfr.i8p + 36);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:45
    pcBase.i = *CAST<intptr_t*>(cfr.i8p + 16);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:46
    pcBase.i = *CAST<intptr_t*>(pcBase.i8p + 64);            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:47
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:49
    t3.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x40)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t3.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x9);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_construct)
    t0.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x10)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t1.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x28)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    t2.i = *CAST<intptr_t*>(t1.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1861
    if (t0.i >= intptr_t(0x40000000))                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:383
        goto _offlineasm_doCall__123_loadConstantOrVariable__constant;
    t3.i64 = *CAST<int64_t*>(cfr.i8p + (t0.i << 3));         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:384
    goto _offlineasm_doCall__123_loadConstantOrVariable__done; // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:385

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCall__123_loadConstantOrVariable__constant)
    t3.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:387
    t3.i = *CAST<intptr_t*>(t3.i8p + 280);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:388
    t0.i = t0.i - intptr_t(0x40000000);                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:389
    t3.i64 = *CAST<int64_t*>(t3.i8p + (t0.i << 3));          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:390

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCall__123_loadConstantOrVariable__done)
    if (t3.i64 != t2.i64)                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1863
        goto _offlineasm_123_doCall__opCallSlow;
    t3.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x20)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    t3.i32 = t3.i32 << (intptr_t(0x3) & 0x1f);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1865
    t3.clearHighWord();
    t3.i = -t3.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1866
    t3.i = t3.i + cfr.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1867
    *CAST<int64_t*>(t3.i8p + 24) = t2.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1868
    t2.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x18)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int32_t*>(cfr.i8p + 36) = pc.i32;                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1870
    *CAST<int32_t*>(t3.i8p + 32) = t2.i32;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1871
    sp.i = t3.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1872
    sp.i = sp.i + intptr_t(0x10);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:819
    lr.opcode = getOpcode(llint_cloop_did_return_from_js_6); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:810
    opcode = *CAST<Opcode*>(t1.i8p + 32);
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_cloop_did_return_from_js_6)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:778
    t2.u = *CAST<uint32_t*>(t2.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t2.i = t2.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t2.i = t2.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    sp.i = cfr.i - t2.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:784
    pc.u = *CAST<uint32_t*>(cfr.i8p + 36);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:45
    pcBase.i = *CAST<intptr_t*>(cfr.i8p + 16);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:46
    pcBase.i = *CAST<intptr_t*>(pcBase.i8p + 64);            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:47
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:49
    t3.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x40)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t3.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x9);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_123_doCall__opCallSlow)
    *CAST<int32_t*>(cfr.i8p + 36) = pc.i32;                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:341
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:343
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:344
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_construct(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    if (t1.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:877
        goto _offlineasm_doCall__slowPathForCall__callCallSlowPath__123_action__dontUpdateSP;
    sp.i = t1.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:878
    sp.i = sp.i + intptr_t(0x10);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:819

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCall__slowPathForCall__callCallSlowPath__123_action__dontUpdateSP)
    lr.opcode = getOpcode(llint_cloop_did_return_from_js_7); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:810
    opcode = t0.opcode;
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_cloop_did_return_from_js_7)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:778
    t2.u = *CAST<uint32_t*>(t2.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t2.i = t2.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t2.i = t2.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    sp.i = cfr.i - t2.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:784
    pc.u = *CAST<uint32_t*>(cfr.i8p + 36);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:45
    pcBase.i = *CAST<intptr_t*>(cfr.i8p + 16);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:46
    pcBase.i = *CAST<intptr_t*>(pcBase.i8p + 64);            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:47
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:49
    t3.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x40)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t3.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x9);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_call_varargs)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_size_frame_for_varargs(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    t3.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:559
    t3.i = t3.i & intptr_t(-16384);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:560
    t3.i = *CAST<intptr_t*>(t3.i8p + 152);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:561
    if (*CAST<int64_t*>(t3.i8p + 20696) == 0)                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:562
        goto _offlineasm_doCallVarargs__branchIfException__noException;
    goto llint_throw_from_slow_path_trampoline;              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:563

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCallVarargs__branchIfException__noException)
    sp.i = t1.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1614
    *CAST<int32_t*>(cfr.i8p + 36) = pc.i32;                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:341
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:343
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:344
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_call_varargs(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    if (t1.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:877
        goto _offlineasm_doCallVarargs__slowPathForCall__callCallSlowPath__124_action__dontUpdateSP;
    sp.i = t1.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:878
    sp.i = sp.i + intptr_t(0x10);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:819

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCallVarargs__slowPathForCall__callCallSlowPath__124_action__dontUpdateSP)
    lr.opcode = getOpcode(llint_cloop_did_return_from_js_8); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:810
    opcode = t0.opcode;
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_cloop_did_return_from_js_8)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:778
    t2.u = *CAST<uint32_t*>(t2.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t2.i = t2.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t2.i = t2.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    sp.i = cfr.i - t2.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:784
    pc.u = *CAST<uint32_t*>(cfr.i8p + 36);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:45
    pcBase.i = *CAST<intptr_t*>(cfr.i8p + 16);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:46
    pcBase.i = *CAST<intptr_t*>(pcBase.i8p + 64);            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:47
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:49
    t3.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x40)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t3.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x9);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_tail_call_varargs)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:904
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:905
        int32_t temp = *CAST<int32_t*>(t0.i8p + 336) + int32_t(0xa);
        *CAST<int32_t*>(t0.i8p + 336) = temp;
        if (temp < 0)
            goto  _offlineasm_checkSwitchToJITForEpilogue__124_checkSwitchToJIT__continue;
    }
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_replace(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_checkSwitchToJITForEpilogue__124_checkSwitchToJIT__continue)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_size_frame_for_varargs(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    t3.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:559
    t3.i = t3.i & intptr_t(-16384);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:560
    t3.i = *CAST<intptr_t*>(t3.i8p + 152);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:561
    if (*CAST<int64_t*>(t3.i8p + 20696) == 0)                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:562
        goto _offlineasm_doCallVarargs__124_branchIfException__noException;
    goto llint_throw_from_slow_path_trampoline;              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:563

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCallVarargs__124_branchIfException__noException)
    sp.i = t1.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1614
    *CAST<int32_t*>(cfr.i8p + 36) = pc.i32;                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:341
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:343
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:344
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_call_varargs(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    if (t1.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:877
        goto _offlineasm_doCallVarargs__slowPathForCall__callCallSlowPath__125_action__dontUpdateSP;
    sp.i = t1.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:878
    t3.u = *CAST<uint32_t*>(cfr.i8p + 32);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:826
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:827
    t2.i = *CAST<intptr_t*>(t2.i8p + 40);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:828
    if (t2.i32 <= t3.i32)                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:829
        goto _offlineasm_doCallVarargs__slowPathForCall__callCallSlowPath__action__124_prepareCall__noArityFixup;
    t3.i = t2.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:830

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCallVarargs__slowPathForCall__callCallSlowPath__action__124_prepareCall__noArityFixup)
    t3.i32 = t3.i32 * int32_t(0x8);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:834
    t3.clearHighWord();
    t3.i32 = t3.i32 + int32_t(0x37);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:835
    t3.clearHighWord();
    t3.i32 = t3.i32 & int32_t(-16);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:836
    t3.clearHighWord();
    t2.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:838
    t2.i = t2.i + t3.i;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:839
    t3.u = *CAST<uint32_t*>(sp.i8p + 32);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:841
    t3.i32 = t3.i32 * int32_t(0x8);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:843
    t3.clearHighWord();
    t3.i32 = t3.i32 + int32_t(0x37);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:844
    t3.clearHighWord();
    t3.i32 = t3.i32 & int32_t(-16);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:845
    t3.clearHighWord();
    sp.i = sp.i + intptr_t(0x10);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:848
    t3.i32 = t3.i32 - int32_t(0x10);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:849
    t3.clearHighWord();
    lr.i = *CAST<intptr_t*>(cfr.i8p + 8);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:850
    t2.i = t2.i - t3.i;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:858
    cfr.i = *CAST<intptr_t*>(cfr.i8p);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:859

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCallVarargs__slowPathForCall__callCallSlowPath__action__124_prepareCall__copyLoop)
    t3.i32 = t3.i32 - int32_t(0x8);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:862
    t3.clearHighWord();
    pc.i = *CAST<intptr_t*>(sp.i8p + (t3.i << 0));           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:863
    *CAST<intptr_t*>(t2.i8p + (t3.i << 0)) = pc.i;           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:864
    if (t3.i32 != 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:865
        goto _offlineasm_doCallVarargs__slowPathForCall__callCallSlowPath__action__124_prepareCall__copyLoop;
    sp.i = t2.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:867
    opcode = t0.opcode;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:868
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCallVarargs__slowPathForCall__callCallSlowPath__125_action__dontUpdateSP)
    lr.opcode = getOpcode(llint_cloop_did_return_from_js_9); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:810
    opcode = t0.opcode;
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_cloop_did_return_from_js_9)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:778
    t2.u = *CAST<uint32_t*>(t2.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t2.i = t2.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t2.i = t2.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    sp.i = cfr.i - t2.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:784
    pc.u = *CAST<uint32_t*>(cfr.i8p + 36);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:45
    pcBase.i = *CAST<intptr_t*>(cfr.i8p + 16);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:46
    pcBase.i = *CAST<intptr_t*>(pcBase.i8p + 64);            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:47
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:49
    t3.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x40)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t3.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x9);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_tail_call_forward_arguments)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:904
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:905
        int32_t temp = *CAST<int32_t*>(t0.i8p + 336) + int32_t(0xa);
        *CAST<int32_t*>(t0.i8p + 336) = temp;
        if (temp < 0)
            goto  _offlineasm_checkSwitchToJITForEpilogue__125_checkSwitchToJIT__continue;
    }
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_replace(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_checkSwitchToJITForEpilogue__125_checkSwitchToJIT__continue)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_size_frame_for_forward_arguments(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    t3.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:559
    t3.i = t3.i & intptr_t(-16384);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:560
    t3.i = *CAST<intptr_t*>(t3.i8p + 152);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:561
    if (*CAST<int64_t*>(t3.i8p + 20696) == 0)                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:562
        goto _offlineasm_doCallVarargs__125_branchIfException__noException;
    goto llint_throw_from_slow_path_trampoline;              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:563

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCallVarargs__125_branchIfException__noException)
    sp.i = t1.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1614
    *CAST<int32_t*>(cfr.i8p + 36) = pc.i32;                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:341
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:343
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:344
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_tail_call_forward_arguments(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    if (t1.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:877
        goto _offlineasm_doCallVarargs__slowPathForCall__callCallSlowPath__126_action__dontUpdateSP;
    sp.i = t1.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:878
    t3.u = *CAST<uint32_t*>(cfr.i8p + 32);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:826
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:827
    t2.i = *CAST<intptr_t*>(t2.i8p + 40);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:828
    if (t2.i32 <= t3.i32)                                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:829
        goto _offlineasm_doCallVarargs__slowPathForCall__callCallSlowPath__action__125_prepareCall__noArityFixup;
    t3.i = t2.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:830

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCallVarargs__slowPathForCall__callCallSlowPath__action__125_prepareCall__noArityFixup)
    t3.i32 = t3.i32 * int32_t(0x8);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:834
    t3.clearHighWord();
    t3.i32 = t3.i32 + int32_t(0x37);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:835
    t3.clearHighWord();
    t3.i32 = t3.i32 & int32_t(-16);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:836
    t3.clearHighWord();
    t2.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:838
    t2.i = t2.i + t3.i;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:839
    t3.u = *CAST<uint32_t*>(sp.i8p + 32);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:841
    t3.i32 = t3.i32 * int32_t(0x8);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:843
    t3.clearHighWord();
    t3.i32 = t3.i32 + int32_t(0x37);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:844
    t3.clearHighWord();
    t3.i32 = t3.i32 & int32_t(-16);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:845
    t3.clearHighWord();
    sp.i = sp.i + intptr_t(0x10);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:848
    t3.i32 = t3.i32 - int32_t(0x10);                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:849
    t3.clearHighWord();
    lr.i = *CAST<intptr_t*>(cfr.i8p + 8);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:850
    t2.i = t2.i - t3.i;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:858
    cfr.i = *CAST<intptr_t*>(cfr.i8p);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:859

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCallVarargs__slowPathForCall__callCallSlowPath__action__125_prepareCall__copyLoop)
    t3.i32 = t3.i32 - int32_t(0x8);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:862
    t3.clearHighWord();
    pc.i = *CAST<intptr_t*>(sp.i8p + (t3.i << 0));           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:863
    *CAST<intptr_t*>(t2.i8p + (t3.i << 0)) = pc.i;           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:864
    if (t3.i32 != 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:865
        goto _offlineasm_doCallVarargs__slowPathForCall__callCallSlowPath__action__125_prepareCall__copyLoop;
    sp.i = t2.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:867
    opcode = t0.opcode;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:868
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCallVarargs__slowPathForCall__callCallSlowPath__126_action__dontUpdateSP)
    lr.opcode = getOpcode(llint_cloop_did_return_from_js_10); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:810
    opcode = t0.opcode;
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_cloop_did_return_from_js_10)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:778
    t2.u = *CAST<uint32_t*>(t2.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t2.i = t2.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t2.i = t2.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    sp.i = cfr.i - t2.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:784
    pc.u = *CAST<uint32_t*>(cfr.i8p + 36);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:45
    pcBase.i = *CAST<intptr_t*>(cfr.i8p + 16);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:46
    pcBase.i = *CAST<intptr_t*>(pcBase.i8p + 64);            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:47
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:49
    t3.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x40)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t3.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x9);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_construct_varargs)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_size_frame_for_varargs(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    t3.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:559
    t3.i = t3.i & intptr_t(-16384);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:560
    t3.i = *CAST<intptr_t*>(t3.i8p + 152);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:561
    if (*CAST<int64_t*>(t3.i8p + 20696) == 0)                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:562
        goto _offlineasm_doCallVarargs__126_branchIfException__noException;
    goto llint_throw_from_slow_path_trampoline;              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:563

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCallVarargs__126_branchIfException__noException)
    sp.i = t1.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1614
    *CAST<int32_t*>(cfr.i8p + 36) = pc.i32;                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:341
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:343
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:344
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_construct_varargs(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    if (t1.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:877
        goto _offlineasm_doCallVarargs__slowPathForCall__callCallSlowPath__127_action__dontUpdateSP;
    sp.i = t1.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:878
    sp.i = sp.i + intptr_t(0x10);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:819

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_doCallVarargs__slowPathForCall__callCallSlowPath__127_action__dontUpdateSP)
    lr.opcode = getOpcode(llint_cloop_did_return_from_js_11); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:810
    opcode = t0.opcode;
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_cloop_did_return_from_js_11)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:778
    t2.u = *CAST<uint32_t*>(t2.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t2.i = t2.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t2.i = t2.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    sp.i = cfr.i - t2.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:784
    pc.u = *CAST<uint32_t*>(cfr.i8p + 36);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:45
    pcBase.i = *CAST<intptr_t*>(cfr.i8p + 16);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:46
    pcBase.i = *CAST<intptr_t*>(pcBase.i8p + 64);            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:47
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:49
    t3.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x40)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t3.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x9);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_call_eval)
    *CAST<int32_t*>(cfr.i8p + 36) = pc.i32;                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:341
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:343
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:344
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_call_eval(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    if (t1.i == 0)                                           // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:877
        goto _offlineasm_slowPathForCall__callCallSlowPath__128_action__dontUpdateSP;
    sp.i = t1.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:878
    sp.i = sp.i + intptr_t(0x10);                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:819

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_slowPathForCall__callCallSlowPath__128_action__dontUpdateSP)
    lr.opcode = getOpcode(llint_cloop_did_return_from_js_12); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:810
    opcode = t0.opcode;
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_cloop_did_return_from_js_12)
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:778
    t2.u = *CAST<uint32_t*>(t2.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t2.i = t2.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t2.i = t2.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    sp.i = cfr.i - t2.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:784
    pc.u = *CAST<uint32_t*>(cfr.i8p + 36);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:45
    pcBase.i = *CAST<intptr_t*>(cfr.i8p + 16);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:46
    pcBase.i = *CAST<intptr_t*>(pcBase.i8p + 64);            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:47
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:49
    t3.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x40)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t3.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x9);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_generic_return_point)
    pc.u = *CAST<uint32_t*>(cfr.i8p + 36);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:45
    pcBase.i = *CAST<intptr_t*>(cfr.i8p + 16);               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:46
    pcBase.i = *CAST<intptr_t*>(pcBase.i8p + 64);            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:47
    t1.i = *CAST<int32_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x8)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:290
    *CAST<int64_t*>(cfr.i8p + (t1.i << 3)) = t0.i64;         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:49
    t3.i = *CAST<intptr_t*>(pcBase.i8p + (pc.i << 3) + intptr_t(0x40)); // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:294
    *CAST<int64_t*>(t3.i8p + 24) = t0.i64;                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:466
    pc.i = pc.i + intptr_t(0x9);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_strcat)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_strcat(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_push_with_scope)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_push_with_scope(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_assert)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_assert(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_yield)
    CRASH();                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:432

OFFLINE_ASM_OPCODE_LABEL(op_create_lexical_environment)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_create_lexical_environment(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_throw)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_throw(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x2);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_throw_static_error)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_throw_static_error(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_debug)
    t0.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1737
    t0.u = *CAST<uint32_t*>(t0.i8p + 44);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1738
    if (t0.i32 == 0)                                         // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1739
        goto _offlineasm_opDebugDone;
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_debug(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_opDebugDone)
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_GLUE_LABEL(llint_native_call_trampoline)
    PUSH(lr);                                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:750
    PUSH(cfr);                                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:751
    cfr.i = sp.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:753
    *CAST<intptr_t*>(cfr.i8p + 16) = intptr_t(0x0);          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1980
    t0.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1981
    t1.i = intptr_t(-16384) & t0.i;                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1982
    t1.i = *CAST<intptr_t*>(t1.i8p + 152);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1983
    *CAST<intptr_t*>(t1.i8p + 13560) = cfr.i;                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1984
    *CAST<intptr_t*>(cfr.i8p + 8) = lr.i;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1986
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1988
    t1.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1989
    t1.i = *CAST<intptr_t*>(t1.i8p + 24);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1990
    nativeFunc = *CAST<NativeFunction*>(t1.i8p + 56);        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1993
    functionReturnValue = JSValue::decode(nativeFunc(t0.execState));
    #if USE(JSVALUE32_64)
        t1.i = functionReturnValue.tag();
        t0.i = functionReturnValue.payload();
    #else // USE_JSVALUE64)
        t0.encodedJSValue = JSValue::encode(functionReturnValue);
    #endif // USE_JSVALUE64)
    t3.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2003
    t3.i = t3.i & intptr_t(-16384);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2004
    t3.i = *CAST<intptr_t*>(t3.i8p + 152);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2005
    POP(cfr);                                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:762
    POP(lr);                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:763
    if (*CAST<int64_t*>(t3.i8p + 20696) != 0)                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2009
        goto _offlineasm_nativeCallTrampoline__handleException;
    opcode = lr.opcode;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2010
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_nativeCallTrampoline__handleException)
    *CAST<intptr_t*>(t3.i8p + 13560) = cfr.i;                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2013
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:778
    t2.u = *CAST<uint32_t*>(t2.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t2.i = t2.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t2.i = t2.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    sp.i = cfr.i - t2.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:784
    goto llint_throw_from_slow_path_trampoline;              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2015

OFFLINE_ASM_GLUE_LABEL(llint_native_construct_trampoline)
    PUSH(lr);                                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:750
    PUSH(cfr);                                               // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:751
    cfr.i = sp.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:753
    *CAST<intptr_t*>(cfr.i8p + 16) = intptr_t(0x0);          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1980
    t0.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1981
    t1.i = intptr_t(-16384) & t0.i;                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1982
    t1.i = *CAST<intptr_t*>(t1.i8p + 152);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1983
    *CAST<intptr_t*>(t1.i8p + 13560) = cfr.i;                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1984
    *CAST<intptr_t*>(cfr.i8p + 8) = lr.i;                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1986
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1988
    t1.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1989
    t1.i = *CAST<intptr_t*>(t1.i8p + 24);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1990
    nativeFunc = *CAST<NativeFunction*>(t1.i8p + 64);        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:1993
    functionReturnValue = JSValue::decode(nativeFunc(t0.execState));
    #if USE(JSVALUE32_64)
        t1.i = functionReturnValue.tag();
        t0.i = functionReturnValue.payload();
    #else // USE_JSVALUE64)
        t0.encodedJSValue = JSValue::encode(functionReturnValue);
    #endif // USE_JSVALUE64)
    t3.i = *CAST<intptr_t*>(cfr.i8p + 24);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2003
    t3.i = t3.i & intptr_t(-16384);                          // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2004
    t3.i = *CAST<intptr_t*>(t3.i8p + 152);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2005
    POP(cfr);                                                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:762
    POP(lr);                                                 // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:763
    if (*CAST<int64_t*>(t3.i8p + 20696) != 0)                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2009
        goto _offlineasm_128_nativeCallTrampoline__handleException;
    opcode = lr.opcode;                                      // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2010
    DISPATCH_OPCODE();

  OFFLINE_ASM_LOCAL_LABEL(_offlineasm_128_nativeCallTrampoline__handleException)
    *CAST<intptr_t*>(t3.i8p + 13560) = cfr.i;                // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2013
    t2.i = *CAST<intptr_t*>(cfr.i8p + 16);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:778
    t2.u = *CAST<uint32_t*>(t2.i8p + 16);                    // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:772
    t2.i = t2.i << (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:773
    t2.i = t2.i + intptr_t(0x0);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:774
    sp.i = cfr.i - t2.i;                                     // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:784
    goto llint_throw_from_slow_path_trampoline;              // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:2015

OFFLINE_ASM_OPCODE_LABEL(op_get_enumerable_length)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_get_enumerable_length(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_has_indexed_property)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_has_indexed_property(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_has_structure_property)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_has_structure_property(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_has_generic_property)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_has_generic_property(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_get_direct_pname)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_get_direct_pname(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x7);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_get_property_enumerator)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_get_property_enumerator(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_enumerator_structure_pname)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_next_structure_enumerator_pname(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_enumerator_generic_pname)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_next_generic_enumerator_pname(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_to_index_string)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_to_index_string(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x3);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_create_rest)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_create_rest(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_instanceof)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = llint_slow_path_instanceof(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x4);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_get_by_id_with_this)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_get_by_id_with_this(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x6);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_get_by_val_with_this)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_get_by_val_with_this(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x6);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_put_by_id_with_this)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_put_by_id_with_this(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();

OFFLINE_ASM_OPCODE_LABEL(op_put_by_val_with_this)
    pc.i8p = pcBase.i8p + (pc.i << 3);                       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:302
    t0.i = cfr.i;                                            // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:313
    t1.i = pc.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:314
    {                                                        // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:77
        SlowPathReturnType result = slow_path_put_by_val_with_this(t0, t1);
        decodeResult(result, t0.vp, t1.vp);
    }
    pc.i = t0.i;                                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:306
    pc.i = pc.i - pcBase.i;                                  // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:307
    pc.i = pc.i >> (intptr_t(0x3) & 0x1f);                   // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:308
    pc.i = pc.i + intptr_t(0x5);                             // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:31
    opcode = *CAST<Opcode*>(pcBase.i8p + (pc.i << 3));       // /ssd/fuchsia/third_party/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:27
    DISPATCH_OPCODE();
OFFLINE_ASM_GLOBAL_LABEL(llintPCRangeEnd)
OFFLINE_ASM_END
#endif
