benchmarks/JetStream2/RexBench/OfflineAssembler/expected.js (5,672 lines of code) (raw):

/* * DO NOT EDIT THIS FILE, it is autogenerated. */ "use strict"; let expectedASTDumpedAsLines = [ "if ARMv7k", "", "else", " skip", "end", "if ARMv7s", "", "else", " skip", "end", "const PtrSize = constexpr (sizeof(void*))", "if JSVALUE64", "const CallFrameHeaderSlots = 5", "else", "const CallFrameHeaderSlots = 4", "const CallFrameAlignSlots = 1", "end", "const SlotSize = 8", "const JSEnvironmentRecord_variables = (((sizeof JSEnvironmentRecord + SlotSize) - 1) & (~(SlotSize - 1)))", "const DirectArguments_storage = (((sizeof DirectArguments + SlotSize) - 1) & (~(SlotSize - 1)))", "const StackAlignment = 16", "const StackAlignmentSlots = 2", "const StackAlignmentMask = (StackAlignment - 1)", "const CallerFrameAndPCSize = (2 * PtrSize)", "const CallerFrame = 0", "const ReturnPC = (CallerFrame + PtrSize)", "const CodeBlock = (ReturnPC + PtrSize)", "const Callee = (CodeBlock + SlotSize)", "const ArgumentCount = (Callee + SlotSize)", "const ThisArgumentOffset = (ArgumentCount + SlotSize)", "const FirstArgumentOffset = (ThisArgumentOffset + SlotSize)", "const CallFrameHeaderSize = ThisArgumentOffset", "if JSVALUE64", "const TagBitTypeOther = 2", "const TagBitBool = 4", "const TagBitUndefined = 8", "const ValueEmpty = 0", "const ValueFalse = (TagBitTypeOther | TagBitBool)", "const ValueTrue = ((TagBitTypeOther | TagBitBool) | 1)", "const ValueUndefined = (TagBitTypeOther | TagBitUndefined)", "const ValueNull = TagBitTypeOther", "const TagTypeNumber = 18446462598732840000", "const TagMask = (TagTypeNumber | TagBitTypeOther)", "else", "const Int32Tag = (-1)", "const BooleanTag = (-2)", "const NullTag = (-3)", "const UndefinedTag = (-4)", "const CellTag = (-5)", "const EmptyValueTag = (-6)", "const DeletedValueTag = (-7)", "const LowestTag = DeletedValueTag", "end", "const PutByIdPrimaryTypeMask = constexpr (PutByIdPrimaryTypeMask)", "const PutByIdPrimaryTypeSecondary = constexpr (PutByIdPrimaryTypeSecondary)", "const PutByIdPrimaryTypeObjectWithStructure = constexpr (PutByIdPrimaryTypeObjectWithStructure)", "const PutByIdPrimaryTypeObjectWithStructureOrOther = constexpr (PutByIdPrimaryTypeObjectWithStructureOrOther)", "const PutByIdSecondaryTypeMask = constexpr (PutByIdSecondaryTypeMask)", "const PutByIdSecondaryTypeBottom = constexpr (PutByIdSecondaryTypeBottom)", "const PutByIdSecondaryTypeBoolean = constexpr (PutByIdSecondaryTypeBoolean)", "const PutByIdSecondaryTypeOther = constexpr (PutByIdSecondaryTypeOther)", "const PutByIdSecondaryTypeInt32 = constexpr (PutByIdSecondaryTypeInt32)", "const PutByIdSecondaryTypeNumber = constexpr (PutByIdSecondaryTypeNumber)", "const PutByIdSecondaryTypeString = constexpr (PutByIdSecondaryTypeString)", "const PutByIdSecondaryTypeSymbol = constexpr (PutByIdSecondaryTypeSymbol)", "const PutByIdSecondaryTypeObject = constexpr (PutByIdSecondaryTypeObject)", "const PutByIdSecondaryTypeObjectOrOther = constexpr (PutByIdSecondaryTypeObjectOrOther)", "const PutByIdSecondaryTypeTop = constexpr (PutByIdSecondaryTypeTop)", "const CallOpCodeSize = 9", "if ((X86_64 or ARM64) or C_LOOP)", "const maxFrameExtentForSlowPathCall = 0", "else", "if ((ARM or ARMv7_TRADITIONAL) or ARMv7)", "const maxFrameExtentForSlowPathCall = 24", "else", "if (X86 or X86_WIN)", "const maxFrameExtentForSlowPathCall = 40", "else", "if MIPS", "const maxFrameExtentForSlowPathCall = 40", "else", "if X86_64_WIN", "const maxFrameExtentForSlowPathCall = 64", "else", " skip", "end", "end", "end", "end", "end", "if ((X86_64 or X86_64_WIN) or ARM64)", "const CalleeSaveSpaceAsVirtualRegisters = 3", "else", "const CalleeSaveSpaceAsVirtualRegisters = 0", "end", "const CalleeSaveSpaceStackAligned = ((((CalleeSaveSpaceAsVirtualRegisters * SlotSize) + StackAlignment) - 1) & (~StackAlignmentMask))", "const ClearWatchpoint = constexpr (ClearWatchpoint)", "const IsWatched = constexpr (IsWatched)", "const IsInvalidated = constexpr (IsInvalidated)", "const ShadowChickenTailMarker = constexpr (ShadowChicken::Packet::tailMarkerValue)", "const ArithProfileInt = 1048576", "const ArithProfileIntInt = 1179648", "const ArithProfileNumber = 2097152", "const ArithProfileNumberInt = 2228224", "const ArithProfileNumberNumber = 2359296", "const ArithProfileIntNumber = 1310720", "if JSVALUE64", "const PC = t4", "if ARM64", "const PB = csr7", "const tagTypeNumber = csr8", "const tagMask = csr9", "else", "if X86_64", "const PB = csr2", "const tagTypeNumber = csr3", "const tagMask = csr4", "else", "if X86_64_WIN", "const PB = csr4", "const tagTypeNumber = csr5", "const tagMask = csr6", "else", "if C_LOOP", "const PB = csr0", "const tagTypeNumber = csr1", "const tagMask = csr2", "else", " skip", "end", "end", "end", "end", "macro loadisFromInstruction(offset, dest)", " loadis (offset * 8)[PB, PC, 8], dest", "end", "macro loadpFromInstruction(offset, dest)", " loadp (offset * 8)[PB, PC, 8], dest", "end", "macro storeisToInstruction(value, offset)", " storei value, (offset * 8)[PB, PC, 8]", "end", "macro storepToInstruction(value, offset)", " storep value, (offset * 8)[PB, PC, 8]", "end", "else", "const PC = t4", "macro loadisFromInstruction(offset, dest)", " loadis (offset * 4)[PC], dest", "end", "macro loadpFromInstruction(offset, dest)", " loadp (offset * 4)[PC], dest", "end", "macro storeisToInstruction(value, offset)", " storei value, (offset * 4)[PC]", "end", "end", "if X86_64_WIN", "const extraTempReg = t0", "else", "const extraTempReg = t5", "end", "if BIG_ENDIAN", "const TagOffset = 0", "const PayloadOffset = 4", "else", "const TagOffset = 4", "const PayloadOffset = 0", "end", "const IsArray = constexpr (IsArray)", "const IndexingShapeMask = constexpr (IndexingShapeMask)", "const NoIndexingShape = constexpr (NoIndexingShape)", "const Int32Shape = constexpr (Int32Shape)", "const DoubleShape = constexpr (DoubleShape)", "const ContiguousShape = constexpr (ContiguousShape)", "const ArrayStorageShape = constexpr (ArrayStorageShape)", "const SlowPutArrayStorageShape = constexpr (SlowPutArrayStorageShape)", "const StringType = constexpr (StringType)", "const SymbolType = constexpr (SymbolType)", "const ObjectType = constexpr (ObjectType)", "const FinalObjectType = constexpr (FinalObjectType)", "const JSFunctionType = constexpr (JSFunctionType)", "const ArrayType = constexpr (ArrayType)", "const DerivedArrayType = constexpr (DerivedArrayType)", "const ProxyObjectType = constexpr (ProxyObjectType)", "const Int8ArrayType = constexpr (Int8ArrayType)", "const Int16ArrayType = constexpr (Int16ArrayType)", "const Int32ArrayType = constexpr (Int32ArrayType)", "const Uint8ArrayType = constexpr (Uint8ArrayType)", "const Uint8ClampedArrayType = constexpr (Uint8ClampedArrayType)", "const Uint16ArrayType = constexpr (Uint16ArrayType)", "const Uint32ArrayType = constexpr (Uint32ArrayType)", "const Float32ArrayType = constexpr (Float32ArrayType)", "const Float64ArrayType = constexpr (Float64ArrayType)", "const FirstArrayType = Int8ArrayType", "const LastArrayType = Float64ArrayType", "const MasqueradesAsUndefined = constexpr (MasqueradesAsUndefined)", "const ImplementsDefaultHasInstance = constexpr (ImplementsDefaultHasInstance)", "const FirstConstantRegisterIndex = constexpr (FirstConstantRegisterIndex)", "const GlobalCode = constexpr (GlobalCode)", "const EvalCode = constexpr (EvalCode)", "const FunctionCode = constexpr (FunctionCode)", "const ModuleCode = constexpr (ModuleCode)", "const LLIntReturnPC = (ArgumentCount + TagOffset)", "const HashFlags8BitBuffer = 8", "const firstOutOfLineOffset = 100", "const GlobalProperty = constexpr (GlobalProperty)", "const GlobalVar = constexpr (GlobalVar)", "const GlobalLexicalVar = constexpr (GlobalLexicalVar)", "const ClosureVar = constexpr (ClosureVar)", "const LocalClosureVar = constexpr (LocalClosureVar)", "const ModuleVar = constexpr (ModuleVar)", "const GlobalPropertyWithVarInjectionChecks = constexpr (GlobalPropertyWithVarInjectionChecks)", "const GlobalVarWithVarInjectionChecks = constexpr (GlobalVarWithVarInjectionChecks)", "const GlobalLexicalVarWithVarInjectionChecks = constexpr (GlobalLexicalVarWithVarInjectionChecks)", "const ClosureVarWithVarInjectionChecks = constexpr (ClosureVarWithVarInjectionChecks)", "const ResolveTypeMask = constexpr (GetPutInfo::typeBits)", "const InitializationModeMask = constexpr (GetPutInfo::initializationBits)", "const InitializationModeShift = constexpr (GetPutInfo::initializationShift)", "const NotInitialization = constexpr (InitializationMode::NotInitialization)", "const MarkedBlockSize = constexpr (MarkedBlock::blockSize)", "const MarkedBlockMask = (~(MarkedBlockSize - 1))", "const BlackThreshold = constexpr (blackThreshold)", "if JSVALUE64", "const JSFinalObjectSizeClassIndex = 1", "else", "const JSFinalObjectSizeClassIndex = 3", "end", "const VectorBufferOffset = 0", "if JSVALUE64", "const VectorSizeOffset = 12", "else", "const VectorSizeOffset = 8", "end", "macro crash()", "if C_LOOP", " cloopCrash ", "else", " call _llint_crash", "end", "end", "macro assert(assertion)", "if ASSERT_ENABLED", " assertion(.ok)", " crash()", ".ok:", "else", " skip", "end", "end", "if X86_64", "macro probe(action)", " push a0, a1", " push a2, a3", " push t0, t1", " push t2, t3", " push t4, t5", " action()", " pop t5, t4", " pop t3, t2", " pop t1, t0", " pop a3, a2", " pop a1, a0", "end", "else", " skip", "end", "macro checkStackPointerAlignment(tempReg, location)", "if (ARM64 or C_LOOP)", "", "else", "if ((ARM or ARMv7) or ARMv7_TRADITIONAL)", " move sp, tempReg", " andp StackAlignmentMask, tempReg", "else", " andp sp, StackAlignmentMask, tempReg", "end", " btpz tempReg, .stackPointerOkay", " move location, tempReg", " break ", ".stackPointerOkay:", "end", "end", "if (((C_LOOP or ARM64) or X86_64) or X86_64_WIN)", "const CalleeSaveRegisterCount = 0", "else", "if ((ARM or ARMv7_TRADITIONAL) or ARMv7)", "const CalleeSaveRegisterCount = 7", "else", "if MIPS", "const CalleeSaveRegisterCount = 1", "else", "if (X86 or X86_WIN)", "const CalleeSaveRegisterCount = 3", "else", " skip", "end", "end", "end", "end", "const CalleeRegisterSaveSize = (CalleeSaveRegisterCount * PtrSize)", "const VMEntryTotalFrameSize = ((((CalleeRegisterSaveSize + sizeof VMEntryRecord) + StackAlignment) - 1) & (~StackAlignmentMask))", "macro pushCalleeSaves()", "if (((C_LOOP or ARM64) or X86_64) or X86_64_WIN)", "", "else", "if (ARM or ARMv7_TRADITIONAL)", " emit \"push {r4-r10}\"", "else", "if ARMv7", " emit \"push {r4-r6, r8-r11}\"", "else", "if MIPS", " emit \"addiu $sp, $sp, -4\"", " emit \"sw $s4, 0($sp)\"", " emit \"move $s4, $gp\"", "else", "if X86", " emit \"push %esi\"", " emit \"push %edi\"", " emit \"push %ebx\"", "else", "if X86_WIN", " emit \"push esi\"", " emit \"push edi\"", " emit \"push ebx\"", "else", " skip", "end", "end", "end", "end", "end", "end", "end", "macro popCalleeSaves()", "if (((C_LOOP or ARM64) or X86_64) or X86_64_WIN)", "", "else", "if (ARM or ARMv7_TRADITIONAL)", " emit \"pop {r4-r10}\"", "else", "if ARMv7", " emit \"pop {r4-r6, r8-r11}\"", "else", "if MIPS", " emit \"lw $s4, 0($sp)\"", " emit \"addiu $sp, $sp, 4\"", "else", "if X86", " emit \"pop %ebx\"", " emit \"pop %edi\"", " emit \"pop %esi\"", "else", "if X86_WIN", " emit \"pop ebx\"", " emit \"pop edi\"", " emit \"pop esi\"", "else", " skip", "end", "end", "end", "end", "end", "end", "end", "macro preserveCallerPCAndCFR()", "if ((((C_LOOP or ARM) or ARMv7) or ARMv7_TRADITIONAL) or MIPS)", " push lr", " push cfr", "else", "if (((X86 or X86_WIN) or X86_64) or X86_64_WIN)", " push cfr", "else", "if ARM64", " push cfr, lr", "else", " error", "end", "end", "end", " move sp, cfr", "end", "macro restoreCallerPCAndCFR()", " move cfr, sp", "if ((((C_LOOP or ARM) or ARMv7) or ARMv7_TRADITIONAL) or MIPS)", " pop cfr", " pop lr", "else", "if (((X86 or X86_WIN) or X86_64) or X86_64_WIN)", " pop cfr", "else", "if ARM64", " pop lr, cfr", "else", " skip", "end", "end", "end", "end", "macro preserveCalleeSavesUsedByLLInt()", " subp CalleeSaveSpaceStackAligned, sp", "if C_LOOP", "", "else", "if (ARM or ARMv7_TRADITIONAL)", "", "else", "if ARMv7", "", "else", "if ARM64", " emit \"stp x27, x28, [x29, #-16]\"", " emit \"stp xzr, x26, [x29, #-32]\"", "else", "if MIPS", "", "else", "if X86", "", "else", "if X86_WIN", "", "else", "if X86_64", " storep csr4, (-8)[cfr]", " storep csr3, (-16)[cfr]", " storep csr2, (-24)[cfr]", "else", "if X86_64_WIN", " storep csr6, (-8)[cfr]", " storep csr5, (-16)[cfr]", " storep csr4, (-24)[cfr]", "else", " skip", "end", "end", "end", "end", "end", "end", "end", "end", "end", "end", "macro restoreCalleeSavesUsedByLLInt()", "if C_LOOP", "", "else", "if (ARM or ARMv7_TRADITIONAL)", "", "else", "if ARMv7", "", "else", "if ARM64", " emit \"ldp xzr, x26, [x29, #-32]\"", " emit \"ldp x27, x28, [x29, #-16]\"", "else", "if MIPS", "", "else", "if X86", "", "else", "if X86_WIN", "", "else", "if X86_64", " loadp (-24)[cfr], csr2", " loadp (-16)[cfr], csr3", " loadp (-8)[cfr], csr4", "else", "if X86_64_WIN", " loadp (-24)[cfr], csr4", " loadp (-16)[cfr], csr5", " loadp (-8)[cfr], csr6", "else", " skip", "end", "end", "end", "end", "end", "end", "end", "end", "end", "end", "macro copyCalleeSavesToVMEntryFrameCalleeSavesBuffer(vm, temp)", "if ((ARM64 or X86_64) or X86_64_WIN)", " loadp VM::topVMEntryFrame[vm], temp", " vmEntryRecord(temp, temp)", " leap VMEntryRecord::calleeSaveRegistersBuffer[temp], temp", "if ARM64", " storep csr0, 0[temp]", " storep csr1, 8[temp]", " storep csr2, 16[temp]", " storep csr3, 24[temp]", " storep csr4, 32[temp]", " storep csr5, 40[temp]", " storep csr6, 48[temp]", " storep csr7, 56[temp]", " storep csr8, 64[temp]", " storep csr9, 72[temp]", " stored csfr0, 80[temp]", " stored csfr1, 88[temp]", " stored csfr2, 96[temp]", " stored csfr3, 104[temp]", " stored csfr4, 112[temp]", " stored csfr5, 120[temp]", " stored csfr6, 128[temp]", " stored csfr7, 136[temp]", "else", "if X86_64", " storep csr0, 0[temp]", " storep csr1, 8[temp]", " storep csr2, 16[temp]", " storep csr3, 24[temp]", " storep csr4, 32[temp]", "else", "if X86_64_WIN", " storep csr0, 0[temp]", " storep csr1, 8[temp]", " storep csr2, 16[temp]", " storep csr3, 24[temp]", " storep csr4, 32[temp]", " storep csr5, 40[temp]", " storep csr6, 48[temp]", "else", " skip", "end", "end", "end", "else", " skip", "end", "end", "macro restoreCalleeSavesFromVMEntryFrameCalleeSavesBuffer(vm, temp)", "if ((ARM64 or X86_64) or X86_64_WIN)", " loadp VM::topVMEntryFrame[vm], temp", " vmEntryRecord(temp, temp)", " leap VMEntryRecord::calleeSaveRegistersBuffer[temp], temp", "if ARM64", " loadp 0[temp], csr0", " loadp 8[temp], csr1", " loadp 16[temp], csr2", " loadp 24[temp], csr3", " loadp 32[temp], csr4", " loadp 40[temp], csr5", " loadp 48[temp], csr6", " loadp 56[temp], csr7", " loadp 64[temp], csr8", " loadp 72[temp], csr9", " loadd 80[temp], csfr0", " loadd 88[temp], csfr1", " loadd 96[temp], csfr2", " loadd 104[temp], csfr3", " loadd 112[temp], csfr4", " loadd 120[temp], csfr5", " loadd 128[temp], csfr6", " loadd 136[temp], csfr7", "else", "if X86_64", " loadp 0[temp], csr0", " loadp 8[temp], csr1", " loadp 16[temp], csr2", " loadp 24[temp], csr3", " loadp 32[temp], csr4", "else", "if X86_64_WIN", " loadp 0[temp], csr0", " loadp 8[temp], csr1", " loadp 16[temp], csr2", " loadp 24[temp], csr3", " loadp 32[temp], csr4", " loadp 40[temp], csr5", " loadp 48[temp], csr6", "else", " skip", "end", "end", "end", "else", " skip", "end", "end", "macro preserveReturnAddressAfterCall(destinationRegister)", "if (((((C_LOOP or ARM) or ARMv7) or ARMv7_TRADITIONAL) or ARM64) or MIPS)", " move lr, destinationRegister", "else", "if (((X86 or X86_WIN) or X86_64) or X86_64_WIN)", " pop destinationRegister", "else", " error", "end", "end", "end", "macro functionPrologue()", "if (((X86 or X86_WIN) or X86_64) or X86_64_WIN)", " push cfr", "else", "if ARM64", " push cfr, lr", "else", "if ((((C_LOOP or ARM) or ARMv7) or ARMv7_TRADITIONAL) or MIPS)", " push lr", " push cfr", "else", " skip", "end", "end", "end", " move sp, cfr", "end", "macro functionEpilogue()", "if (((X86 or X86_WIN) or X86_64) or X86_64_WIN)", " pop cfr", "else", "if ARM64", " pop lr, cfr", "else", "if ((((C_LOOP or ARM) or ARMv7) or ARMv7_TRADITIONAL) or MIPS)", " pop cfr", " pop lr", "else", " skip", "end", "end", "end", "end", "macro vmEntryRecord(entryFramePointer, resultReg)", " subp entryFramePointer, VMEntryTotalFrameSize, resultReg", "end", "macro getFrameRegisterSizeForCodeBlock(codeBlock, size)", " loadi CodeBlock::m_numCalleeLocals[codeBlock], size", " lshiftp 3, size", " addp maxFrameExtentForSlowPathCall, size", "end", "macro restoreStackPointerAfterCall()", " loadp CodeBlock[cfr], t2", " getFrameRegisterSizeForCodeBlock(t2, t2)", "if ARMv7", " subp cfr, t2, t2", " move t2, sp", "else", " subp cfr, t2, sp", "end", "end", "macro traceExecution()", "if COLLECT_STATS", " callSlowPath(_llint_count_opcode)", "else", " skip", "end", "if EXECUTION_TRACING", " callSlowPath(_llint_trace)", "else", " skip", "end", "end", "macro traceSlowPathExecution()", "if COLLECT_STATS", " callSlowPath(_llint_count_opcode_slow_path)", "else", " skip", "end", "end", "macro callOpcodeSlowPath(slowPath)", " traceSlowPathExecution()", " callSlowPath(slowPath)", "end", "macro callTargetFunction(callee)", "if C_LOOP", " cloopCallJSFunction callee", "else", " call callee", "end", " restoreStackPointerAfterCall()", " dispatchAfterCall()", "end", "macro prepareForRegularCall(callee, temp1, temp2, temp3)", " addp CallerFrameAndPCSize, sp", "end", "macro prepareForTailCall(callee, temp1, temp2, temp3)", " restoreCalleeSavesUsedByLLInt()", " loadi (PayloadOffset + ArgumentCount)[cfr], temp2", " loadp CodeBlock[cfr], temp1", " loadp CodeBlock::m_numParameters[temp1], temp1", " bilteq temp1, temp2, .noArityFixup", " move temp1, temp2", ".noArityFixup:", " muli SlotSize, temp2", " addi ((StackAlignment - 1) + CallFrameHeaderSize), temp2", " andi (~StackAlignmentMask), temp2", " move cfr, temp1", " addp temp2, temp1", " loadi (PayloadOffset + ArgumentCount)[sp], temp2", " muli SlotSize, temp2", " addi ((StackAlignment - 1) + CallFrameHeaderSize), temp2", " andi (~StackAlignmentMask), temp2", "if (((((ARM or ARMv7_TRADITIONAL) or ARMv7) or ARM64) or C_LOOP) or MIPS)", " addp (2 * PtrSize), sp", " subi (2 * PtrSize), temp2", " loadp PtrSize[cfr], lr", "else", " addp PtrSize, sp", " subi PtrSize, temp2", " loadp PtrSize[cfr], temp3", " storep temp3, 0[sp]", "end", " subp temp2, temp1", " loadp 0[cfr], cfr", ".copyLoop:", " subi PtrSize, temp2", " loadp 0[sp, temp2, 1], temp3", " storep temp3, 0[temp1, temp2, 1]", " btinz temp2, .copyLoop", " move temp1, sp", " jmp callee", "end", "macro slowPathForCall(slowPath, prepareCall)", " traceSlowPathExecution()", " callCallSlowPath(slowPath, macro (callee, calleeFramePtr)", " btpz calleeFramePtr, .dontUpdateSP", " move calleeFramePtr, sp", " prepareCall(callee, t2, t3, t4)", ".dontUpdateSP:", " callTargetFunction(callee)", "end)", "end", "macro arrayProfile(cellAndIndexingType, profile, scratch)", "const cell = cellAndIndexingType", "const indexingType = cellAndIndexingType", " loadi JSCell::m_structureID[cell], scratch", " storei scratch, ArrayProfile::m_lastSeenStructureID[profile]", " loadb JSCell::m_indexingTypeAndMisc[cell], indexingType", "end", "macro skipIfIsRememberedOrInEden(cell, slowPath)", " memfence ", " bba JSCell::m_cellState[cell], BlackThreshold, .done", " slowPath()", ".done:", "end", "macro notifyWrite(set, slow)", " bbneq WatchpointSet::m_state[set], IsInvalidated, slow", "end", "macro checkSwitchToJIT(increment, action)", " loadp CodeBlock[cfr], t0", " baddis increment, (CodeBlock::m_llintExecuteCounter + BaselineExecutionCounter::m_counter)[t0], .continue", " action()", ".continue:", "end", "macro checkSwitchToJITForEpilogue()", " checkSwitchToJIT(10, macro ()", " callOpcodeSlowPath(_llint_replace)", "end)", "end", "macro assertNotConstant(index)", " assert(macro (ok)", " bilt index, FirstConstantRegisterIndex, ok", "end)", "end", "macro functionForCallCodeBlockGetter(targetRegister)", "if JSVALUE64", " loadp Callee[cfr], targetRegister", "else", " loadp (Callee + PayloadOffset)[cfr], targetRegister", "end", " loadp JSFunction::m_executable[targetRegister], targetRegister", " loadp FunctionExecutable::m_codeBlockForCall[targetRegister], targetRegister", "end", "macro functionForConstructCodeBlockGetter(targetRegister)", "if JSVALUE64", " loadp Callee[cfr], targetRegister", "else", " loadp (Callee + PayloadOffset)[cfr], targetRegister", "end", " loadp JSFunction::m_executable[targetRegister], targetRegister", " loadp FunctionExecutable::m_codeBlockForConstruct[targetRegister], targetRegister", "end", "macro notFunctionCodeBlockGetter(targetRegister)", " loadp CodeBlock[cfr], targetRegister", "end", "macro functionCodeBlockSetter(sourceRegister)", " storep sourceRegister, CodeBlock[cfr]", "end", "macro notFunctionCodeBlockSetter(sourceRegister)", "", "end", "macro prologue(codeBlockGetter, codeBlockSetter, osrSlowPath, traceSlowPath)", " preserveCallerPCAndCFR()", "if EXECUTION_TRACING", " subp maxFrameExtentForSlowPathCall, sp", " callSlowPath(traceSlowPath)", " addp maxFrameExtentForSlowPathCall, sp", "else", " skip", "end", " codeBlockGetter(t1)", "if (notC_LOOP)", " baddis 5, (CodeBlock::m_llintExecuteCounter + BaselineExecutionCounter::m_counter)[t1], .continue", "if JSVALUE64", " move cfr, a0", " move PC, a1", " cCall2(osrSlowPath)", "else", " subp 8, sp", " move cfr, a0", " move PC, a1", " cCall2(osrSlowPath)", " addp 8, sp", "end", " btpz r0, .recover", " move cfr, sp", "if ARM64", " pop lr, cfr", "else", "if (((ARM or ARMv7) or ARMv7_TRADITIONAL) or MIPS)", " pop cfr", " pop lr", "else", " pop cfr", "end", "end", " jmp r0", ".recover:", " codeBlockGetter(t1)", ".continue:", "else", " skip", "end", " codeBlockSetter(t1)", " preserveCalleeSavesUsedByLLInt()", "if JSVALUE64", " loadp CodeBlock::m_instructions[t1], PB", " move 0, PC", "else", " loadp CodeBlock::m_instructions[t1], PC", "end", " getFrameRegisterSizeForCodeBlock(t1, t0)", " subp cfr, t0, t0", " bpa t0, cfr, .needStackCheck", " loadp CodeBlock::m_vm[t1], t2", "if C_LOOP", " bpbeq VM::m_cloopStackLimit[t2], t0, .stackHeightOK", "else", " bpbeq VM::m_softStackLimit[t2], t0, .stackHeightOK", "end", ".needStackCheck:", " subp maxFrameExtentForSlowPathCall, sp", " callSlowPath(_llint_stack_check)", " bpeq r1, 0, .stackHeightOKGetCodeBlock", " move r1, cfr", " dispatch(0)", ".stackHeightOKGetCodeBlock:", " codeBlockGetter(t1)", " getFrameRegisterSizeForCodeBlock(t1, t0)", " subp cfr, t0, t0", ".stackHeightOK:", " move t0, sp", "if JSVALUE64", " move TagTypeNumber, tagTypeNumber", " addp TagBitTypeOther, tagTypeNumber, tagMask", "else", " skip", "end", "end", "macro functionInitialization(profileArgSkip)", " loadi CodeBlock::m_numParameters[t1], t0", " addp (-profileArgSkip), t0", " assert(macro (ok)", " bpgteq t0, 0, ok", "end)", " btpz t0, .argumentProfileDone", " loadp (CodeBlock::m_argumentValueProfiles + VectorBufferOffset)[t1], t3", " mulp sizeof ValueProfile, t0, t2", " lshiftp 3, t0", " addp t2, t3", ".argumentProfileLoop:", "if JSVALUE64", " loadq ((ThisArgumentOffset - 8) + (profileArgSkip * 8))[cfr, t0, 1], t2", " subp sizeof ValueProfile, t3", " storeq t2, ((profileArgSkip * sizeof ValueProfile) + ValueProfile::m_buckets)[t3]", "else", " loadi (((ThisArgumentOffset + TagOffset) - 8) + (profileArgSkip * 8))[cfr, t0, 1], t2", " subp sizeof ValueProfile, t3", " storei t2, (((profileArgSkip * sizeof ValueProfile) + ValueProfile::m_buckets) + TagOffset)[t3]", " loadi (((ThisArgumentOffset + PayloadOffset) - 8) + (profileArgSkip * 8))[cfr, t0, 1], t2", " storei t2, (((profileArgSkip * sizeof ValueProfile) + ValueProfile::m_buckets) + PayloadOffset)[t3]", "end", " baddpnz (-8), t0, .argumentProfileLoop", ".argumentProfileDone:", "end", "macro doReturn()", " restoreCalleeSavesUsedByLLInt()", " restoreCallerPCAndCFR()", " ret ", "end", "if C_LOOP", "_llint_vm_entry_to_javascript:", "else", "_vmEntryToJavaScript:", "end", " doVMEntry(makeJavaScriptCall)", "if C_LOOP", "_llint_vm_entry_to_native:", "else", "_vmEntryToNative:", "end", " doVMEntry(makeHostFunctionCall)", "if (notC_LOOP)", "_sanitizeStackForVMImpl:", "if (X86 or X86_WIN)", " loadp 4[sp], a0", "else", " skip", "end", "const vm = a0", "const address = a1", "const zeroValue = a2", " loadp VM::m_lastStackTop[vm], address", " bpbeq sp, address, .zeroFillDone", " move 0, zeroValue", ".zeroFillLoop:", " storep zeroValue, 0[address]", " addp PtrSize, address", " bpa sp, address, .zeroFillLoop", ".zeroFillDone:", " move sp, address", " storep address, VM::m_lastStackTop[vm]", " ret ", "_vmEntryRecord:", "if (X86 or X86_WIN)", " loadp 4[sp], a0", "else", " skip", "end", " vmEntryRecord(a0, r0)", " ret ", "else", " skip", "end", "if C_LOOP", "_llint_entry:", " crash()", "else", "macro initPCRelative(pcBase)", "if (((X86_64 or X86_64_WIN) or X86) or X86_WIN)", " call _relativePCBase", "_relativePCBase:", " pop pcBase", "else", "if ARM64", "", "else", "if ARMv7", "_relativePCBase:", " move pc, pcBase", " subp 3, pcBase", "else", "if (ARM or ARMv7_TRADITIONAL)", "_relativePCBase:", " move pc, pcBase", " subp 8, pcBase", "else", "if MIPS", " la _relativePCBase, pcBase", " setcallreg pcBase", "_relativePCBase:", "else", " skip", "end", "end", "end", "end", "end", "end", "macro setEntryAddress(index, label)", "if (X86_64 or X86_64_WIN)", " leap (label - _relativePCBase)[t1], t3", " move index, t4", " storep t3, 0[a0, t4, 8]", "else", "if (X86 or X86_WIN)", " leap (label - _relativePCBase)[t1], t3", " move index, t4", " storep t3, 0[a0, t4, 4]", "else", "if ARM64", " pcrtoaddr label, t1", " move index, t4", " storep t1, 0[a0, t4, 8]", "else", "if ((ARM or ARMv7) or ARMv7_TRADITIONAL)", " mvlbl (label - _relativePCBase), t4", " addp t4, t1, t4", " move index, t3", " storep t4, 0[a0, t3, 4]", "else", "if MIPS", " la label, t4", " la _relativePCBase, t3", " subp t3, t4", " addp t4, t1, t4", " move index, t3", " storep t4, 0[a0, t3, 4]", "else", " skip", "end", "end", "end", "end", "end", "end", "_llint_entry:", " functionPrologue()", " pushCalleeSaves()", "if (X86 or X86_WIN)", " loadp 20[sp], a0", "else", " skip", "end", " initPCRelative(t1)", " setEntryAddress(0, _llint_op_enter)", " setEntryAddress(1, _llint_op_get_scope)", " setEntryAddress(2, _llint_op_create_direct_arguments)", " setEntryAddress(3, _llint_op_create_scoped_arguments)", " setEntryAddress(4, _llint_op_create_cloned_arguments)", " setEntryAddress(5, _llint_op_create_this)", " setEntryAddress(6, _llint_op_get_argument)", " setEntryAddress(7, _llint_op_argument_count)", " setEntryAddress(8, _llint_op_to_this)", " setEntryAddress(9, _llint_op_check_tdz)", " setEntryAddress(10, _llint_op_new_object)", " setEntryAddress(11, _llint_op_new_array)", " setEntryAddress(12, _llint_op_new_array_with_size)", " setEntryAddress(13, _llint_op_new_array_with_spread)", " setEntryAddress(14, _llint_op_spread)", " setEntryAddress(15, _llint_op_new_array_buffer)", " setEntryAddress(16, _llint_op_new_regexp)", " setEntryAddress(17, _llint_op_mov)", " setEntryAddress(18, _llint_op_not)", " setEntryAddress(19, _llint_op_eq)", " setEntryAddress(20, _llint_op_eq_null)", " setEntryAddress(21, _llint_op_neq)", " setEntryAddress(22, _llint_op_neq_null)", " setEntryAddress(23, _llint_op_stricteq)", " setEntryAddress(24, _llint_op_nstricteq)", " setEntryAddress(25, _llint_op_less)", " setEntryAddress(26, _llint_op_lesseq)", " setEntryAddress(27, _llint_op_greater)", " setEntryAddress(28, _llint_op_greatereq)", " setEntryAddress(29, _llint_op_inc)", " setEntryAddress(30, _llint_op_dec)", " setEntryAddress(31, _llint_op_to_number)", " setEntryAddress(32, _llint_op_to_string)", " setEntryAddress(33, _llint_op_negate)", " setEntryAddress(34, _llint_op_add)", " setEntryAddress(35, _llint_op_mul)", " setEntryAddress(36, _llint_op_div)", " setEntryAddress(37, _llint_op_mod)", " setEntryAddress(38, _llint_op_sub)", " setEntryAddress(39, _llint_op_pow)", " setEntryAddress(40, _llint_op_lshift)", " setEntryAddress(41, _llint_op_rshift)", " setEntryAddress(42, _llint_op_urshift)", " setEntryAddress(43, _llint_op_unsigned)", " setEntryAddress(44, _llint_op_bitand)", " setEntryAddress(45, _llint_op_bitxor)", " setEntryAddress(46, _llint_op_bitor)", " setEntryAddress(47, _llint_op_overrides_has_instance)", " setEntryAddress(48, _llint_op_instanceof)", " setEntryAddress(49, _llint_op_instanceof_custom)", " setEntryAddress(50, _llint_op_typeof)", " setEntryAddress(51, _llint_op_is_empty)", " setEntryAddress(52, _llint_op_is_undefined)", " setEntryAddress(53, _llint_op_is_boolean)", " setEntryAddress(54, _llint_op_is_number)", " setEntryAddress(55, _llint_op_is_object)", " setEntryAddress(56, _llint_op_is_object_or_null)", " setEntryAddress(57, _llint_op_is_function)", " setEntryAddress(58, _llint_op_is_cell_with_type)", " setEntryAddress(59, _llint_op_in)", " setEntryAddress(60, _llint_op_get_array_length)", " setEntryAddress(61, _llint_op_get_by_id)", " setEntryAddress(62, _llint_op_get_by_id_proto_load)", " setEntryAddress(63, _llint_op_get_by_id_unset)", " setEntryAddress(64, _llint_op_get_by_id_with_this)", " setEntryAddress(65, _llint_op_get_by_val_with_this)", " setEntryAddress(66, _llint_op_try_get_by_id)", " setEntryAddress(67, _llint_op_put_by_id)", " setEntryAddress(68, _llint_op_put_by_id_with_this)", " setEntryAddress(69, _llint_op_del_by_id)", " setEntryAddress(70, _llint_op_get_by_val)", " setEntryAddress(71, _llint_op_put_by_val)", " setEntryAddress(72, _llint_op_put_by_val_with_this)", " setEntryAddress(73, _llint_op_put_by_val_direct)", " setEntryAddress(74, _llint_op_del_by_val)", " setEntryAddress(75, _llint_op_put_by_index)", " setEntryAddress(76, _llint_op_put_getter_by_id)", " setEntryAddress(77, _llint_op_put_setter_by_id)", " setEntryAddress(78, _llint_op_put_getter_setter_by_id)", " setEntryAddress(79, _llint_op_put_getter_by_val)", " setEntryAddress(80, _llint_op_put_setter_by_val)", " setEntryAddress(81, _llint_op_define_data_property)", " setEntryAddress(82, _llint_op_define_accessor_property)", " setEntryAddress(83, _llint_op_jmp)", " setEntryAddress(84, _llint_op_jtrue)", " setEntryAddress(85, _llint_op_jfalse)", " setEntryAddress(86, _llint_op_jeq_null)", " setEntryAddress(87, _llint_op_jneq_null)", " setEntryAddress(88, _llint_op_jneq_ptr)", " setEntryAddress(89, _llint_op_jless)", " setEntryAddress(90, _llint_op_jlesseq)", " setEntryAddress(91, _llint_op_jgreater)", " setEntryAddress(92, _llint_op_jgreatereq)", " setEntryAddress(93, _llint_op_jnless)", " setEntryAddress(94, _llint_op_jnlesseq)", " setEntryAddress(95, _llint_op_jngreater)", " setEntryAddress(96, _llint_op_jngreatereq)", " setEntryAddress(97, _llint_op_loop_hint)", " setEntryAddress(98, _llint_op_switch_imm)", " setEntryAddress(99, _llint_op_switch_char)", " setEntryAddress(100, _llint_op_switch_string)", " setEntryAddress(101, _llint_op_new_func)", " setEntryAddress(102, _llint_op_new_func_exp)", " setEntryAddress(103, _llint_op_new_generator_func)", " setEntryAddress(104, _llint_op_new_generator_func_exp)", " setEntryAddress(105, _llint_op_new_async_func)", " setEntryAddress(106, _llint_op_new_async_func_exp)", " setEntryAddress(107, _llint_op_set_function_name)", " setEntryAddress(108, _llint_op_call)", " setEntryAddress(109, _llint_op_tail_call)", " setEntryAddress(110, _llint_op_call_eval)", " setEntryAddress(111, _llint_op_call_varargs)", " setEntryAddress(112, _llint_op_tail_call_varargs)", " setEntryAddress(113, _llint_op_tail_call_forward_arguments)", " setEntryAddress(114, _llint_op_ret)", " setEntryAddress(115, _llint_op_construct)", " setEntryAddress(116, _llint_op_construct_varargs)", " setEntryAddress(117, _llint_op_strcat)", " setEntryAddress(118, _llint_op_to_primitive)", " setEntryAddress(119, _llint_op_resolve_scope)", " setEntryAddress(120, _llint_op_get_from_scope)", " setEntryAddress(121, _llint_op_put_to_scope)", " setEntryAddress(122, _llint_op_get_from_arguments)", " setEntryAddress(123, _llint_op_put_to_arguments)", " setEntryAddress(124, _llint_op_push_with_scope)", " setEntryAddress(125, _llint_op_create_lexical_environment)", " setEntryAddress(126, _llint_op_get_parent_scope)", " setEntryAddress(127, _llint_op_catch)", " setEntryAddress(128, _llint_op_throw)", " setEntryAddress(129, _llint_op_throw_static_error)", " setEntryAddress(130, _llint_op_debug)", " setEntryAddress(131, _llint_op_end)", " setEntryAddress(132, _llint_op_profile_type)", " setEntryAddress(133, _llint_op_profile_control_flow)", " setEntryAddress(134, _llint_op_get_enumerable_length)", " setEntryAddress(135, _llint_op_has_indexed_property)", " setEntryAddress(136, _llint_op_has_structure_property)", " setEntryAddress(137, _llint_op_has_generic_property)", " setEntryAddress(138, _llint_op_get_direct_pname)", " setEntryAddress(139, _llint_op_get_property_enumerator)", " setEntryAddress(140, _llint_op_enumerator_structure_pname)", " setEntryAddress(141, _llint_op_enumerator_generic_pname)", " setEntryAddress(142, _llint_op_to_index_string)", " setEntryAddress(143, _llint_op_assert)", " setEntryAddress(144, _llint_op_unreachable)", " setEntryAddress(145, _llint_op_create_rest)", " setEntryAddress(146, _llint_op_get_rest_length)", " setEntryAddress(147, _llint_op_yield)", " setEntryAddress(148, _llint_op_check_traps)", " setEntryAddress(149, _llint_op_log_shadow_chicken_prologue)", " setEntryAddress(150, _llint_op_log_shadow_chicken_tail)", " setEntryAddress(151, _llint_op_resolve_scope_for_hoisting_func_decl_in_eval)", " setEntryAddress(152, _llint_op_nop)", " setEntryAddress(153, _llint_program_prologue)", " setEntryAddress(154, _llint_eval_prologue)", " setEntryAddress(155, _llint_module_program_prologue)", " setEntryAddress(156, _llint_function_for_call_prologue)", " setEntryAddress(157, _llint_function_for_construct_prologue)", " setEntryAddress(158, _llint_function_for_call_arity_check)", " setEntryAddress(159, _llint_function_for_construct_arity_check)", " setEntryAddress(160, _llint_generic_return_point)", " setEntryAddress(161, _llint_throw_from_slow_path_trampoline)", " setEntryAddress(162, _llint_throw_during_call_trampoline)", " setEntryAddress(163, _llint_native_call_trampoline)", " setEntryAddress(164, _llint_native_construct_trampoline)", " setEntryAddress(165, _handleUncaughtException)", " popCalleeSaves()", " functionEpilogue()", " ret ", "end", "_llint_program_prologue:", " prologue(notFunctionCodeBlockGetter, notFunctionCodeBlockSetter, _llint_entry_osr, _llint_trace_prologue)", " dispatch(0)", "_llint_module_program_prologue:", " prologue(notFunctionCodeBlockGetter, notFunctionCodeBlockSetter, _llint_entry_osr, _llint_trace_prologue)", " dispatch(0)", "_llint_eval_prologue:", " prologue(notFunctionCodeBlockGetter, notFunctionCodeBlockSetter, _llint_entry_osr, _llint_trace_prologue)", " dispatch(0)", "_llint_function_for_call_prologue:", " prologue(functionForCallCodeBlockGetter, functionCodeBlockSetter, _llint_entry_osr_function_for_call, _llint_trace_prologue_function_for_call)", " functionInitialization(0)", " dispatch(0)", "_llint_function_for_construct_prologue:", " prologue(functionForConstructCodeBlockGetter, functionCodeBlockSetter, _llint_entry_osr_function_for_construct, _llint_trace_prologue_function_for_construct)", " functionInitialization(1)", " dispatch(0)", "_llint_function_for_call_arity_check:", " prologue(functionForCallCodeBlockGetter, functionCodeBlockSetter, _llint_entry_osr_function_for_call_arityCheck, _llint_trace_arityCheck_for_call)", " functionArityCheck(.functionForCallBegin, _slow_path_call_arityCheck)", ".functionForCallBegin:", " functionInitialization(0)", " dispatch(0)", "_llint_function_for_construct_arity_check:", " prologue(functionForConstructCodeBlockGetter, functionCodeBlockSetter, _llint_entry_osr_function_for_construct_arityCheck, _llint_trace_arityCheck_for_construct)", " functionArityCheck(.functionForConstructBegin, _slow_path_construct_arityCheck)", ".functionForConstructBegin:", " functionInitialization(1)", " dispatch(0)", "if JSVALUE64", "macro jumpToInstruction()", " jmp 0[PB, PC, 8]", "end", "macro dispatch(advance)", " addp advance, PC", " jumpToInstruction()", "end", "macro dispatchInt(advance)", " addi advance, PC", " jumpToInstruction()", "end", "macro dispatchIntIndirect(offset)", " dispatchInt((offset * 8)[PB, PC, 8])", "end", "macro dispatchAfterCall()", " loadi (ArgumentCount + TagOffset)[cfr], PC", " loadp CodeBlock[cfr], PB", " loadp CodeBlock::m_instructions[PB], PB", " loadisFromInstruction(1, t1)", " storeq r0, 0[cfr, t1, 8]", " valueProfile(r0, (CallOpCodeSize - 1), t3)", " dispatch(CallOpCodeSize)", "end", "macro cCall2(function)", " checkStackPointerAlignment(t4, 3134242818)", "if (X86_64 or ARM64)", " call function", "else", "if X86_64_WIN", " move a1, a2", " move a0, a1", " subp 48, sp", " move sp, a0", " addp 32, a0", " call function", " addp 48, sp", " move 8[r0], r1", " move 0[r0], r0", "else", "if C_LOOP", " cloopCallSlowPath function, a0, a1", "else", " error", "end", "end", "end", "end", "macro cCall2Void(function)", "if C_LOOP", " cloopCallSlowPathVoid function, a0, a1", "else", "if X86_64_WIN", " subp 32, sp", " call function", " addp 32, sp", "else", " cCall2(function)", "end", "end", "end", "macro cCall4(function)", " checkStackPointerAlignment(t4, 3134242820)", "if (X86_64 or ARM64)", " call function", "else", "if X86_64_WIN", " subp 64, sp", " call function", " addp 64, sp", "else", " error", "end", "end", "end", "macro doVMEntry(makeCall)", " functionPrologue()", " pushCalleeSaves()", "const entry = a0", "const vm = a1", "const protoCallFrame = a2", " vmEntryRecord(cfr, sp)", " checkStackPointerAlignment(t4, 3134249985)", " storep vm, VMEntryRecord::m_vm[sp]", " loadp VM::topCallFrame[vm], t4", " storep t4, VMEntryRecord::m_prevTopCallFrame[sp]", " loadp VM::topVMEntryFrame[vm], t4", " storep t4, VMEntryRecord::m_prevTopVMEntryFrame[sp]", " loadi ProtoCallFrame::paddedArgCount[protoCallFrame], t4", " addp CallFrameHeaderSlots, t4, t4", " lshiftp 3, t4", " subp sp, t4, t3", " bqbeq sp, t3, .throwStackOverflow", "if C_LOOP", " bpaeq t3, VM::m_cloopStackLimit[vm], .stackHeightOK", "else", " bpaeq t3, VM::m_softStackLimit[vm], .stackHeightOK", "end", "if C_LOOP", " move entry, t4", " move vm, t5", " cloopCallSlowPath _llint_stack_check_at_vm_entry, vm, t3", " bpeq t0, 0, .stackCheckFailed", " move t4, entry", " move t5, vm", " jmp .stackHeightOK", ".stackCheckFailed:", " move t4, entry", " move t5, vm", "else", " skip", "end", ".throwStackOverflow:", " move vm, a0", " move protoCallFrame, a1", " cCall2(_llint_throw_stack_overflow_error)", " vmEntryRecord(cfr, t4)", " loadp VMEntryRecord::m_vm[t4], vm", " loadp VMEntryRecord::m_prevTopCallFrame[t4], extraTempReg", " storep extraTempReg, VM::topCallFrame[vm]", " loadp VMEntryRecord::m_prevTopVMEntryFrame[t4], extraTempReg", " storep extraTempReg, VM::topVMEntryFrame[vm]", " subp cfr, CalleeRegisterSaveSize, sp", " popCalleeSaves()", " functionEpilogue()", " ret ", ".stackHeightOK:", " move t3, sp", " move 4, t3", ".copyHeaderLoop:", " subi 1, t3", " loadq 0[protoCallFrame, t3, 8], extraTempReg", " storeq extraTempReg, CodeBlock[sp, t3, 8]", " btinz t3, .copyHeaderLoop", " loadi (PayloadOffset + ProtoCallFrame::argCountAndCodeOriginValue)[protoCallFrame], t4", " subi 1, t4", " loadi ProtoCallFrame::paddedArgCount[protoCallFrame], extraTempReg", " subi 1, extraTempReg", " bieq t4, extraTempReg, .copyArgs", " move ValueUndefined, t3", ".fillExtraArgsLoop:", " subi 1, extraTempReg", " storeq t3, (ThisArgumentOffset + 8)[sp, extraTempReg, 8]", " bineq t4, extraTempReg, .fillExtraArgsLoop", ".copyArgs:", " loadp ProtoCallFrame::args[protoCallFrame], t3", ".copyArgsLoop:", " btiz t4, .copyArgsDone", " subi 1, t4", " loadq 0[t3, t4, 8], extraTempReg", " storeq extraTempReg, (ThisArgumentOffset + 8)[sp, t4, 8]", " jmp .copyArgsLoop", ".copyArgsDone:", "if ARM64", " move sp, t4", " storep t4, VM::topCallFrame[vm]", "else", " storep sp, VM::topCallFrame[vm]", "end", " storep cfr, VM::topVMEntryFrame[vm]", " checkStackPointerAlignment(extraTempReg, 3134249986)", " makeCall(entry, t3)", " checkStackPointerAlignment(t2, 3134249987)", " vmEntryRecord(cfr, t4)", " loadp VMEntryRecord::m_vm[t4], vm", " loadp VMEntryRecord::m_prevTopCallFrame[t4], t2", " storep t2, VM::topCallFrame[vm]", " loadp VMEntryRecord::m_prevTopVMEntryFrame[t4], t2", " storep t2, VM::topVMEntryFrame[vm]", " subp cfr, CalleeRegisterSaveSize, sp", " popCalleeSaves()", " functionEpilogue()", " ret ", "end", "macro makeJavaScriptCall(entry, temp)", " addp 16, sp", "if C_LOOP", " cloopCallJSFunction entry", "else", " call entry", "end", " subp 16, sp", "end", "macro makeHostFunctionCall(entry, temp)", " move entry, temp", " storep cfr, 0[sp]", " move sp, a0", "if C_LOOP", " storep lr, 8[sp]", " cloopCallNative temp", "else", "if X86_64_WIN", " subp 32, sp", " call temp", " addp 32, sp", "else", " call temp", "end", "end", "end", "_handleUncaughtException:", " loadp Callee[cfr], t3", " andp MarkedBlockMask, t3", " loadp MarkedBlock::m_vm[t3], t3", " restoreCalleeSavesFromVMEntryFrameCalleeSavesBuffer(t3, t0)", " loadp VM::callFrameForCatch[t3], cfr", " storep 0, VM::callFrameForCatch[t3]", " loadp CallerFrame[cfr], cfr", " vmEntryRecord(cfr, t2)", " loadp VMEntryRecord::m_vm[t2], t3", " loadp VMEntryRecord::m_prevTopCallFrame[t2], extraTempReg", " storep extraTempReg, VM::topCallFrame[t3]", " loadp VMEntryRecord::m_prevTopVMEntryFrame[t2], extraTempReg", " storep extraTempReg, VM::topVMEntryFrame[t3]", " subp cfr, CalleeRegisterSaveSize, sp", " popCalleeSaves()", " functionEpilogue()", " ret ", "macro prepareStateForCCall()", " leap 0[PB, PC, 8], PC", "end", "macro restoreStateAfterCCall()", " move r0, PC", " subp PB, PC", " rshiftp 3, PC", "end", "macro callSlowPath(slowPath)", " prepareStateForCCall()", " move cfr, a0", " move PC, a1", " cCall2(slowPath)", " restoreStateAfterCCall()", "end", "macro traceOperand(fromWhere, operand)", " prepareStateForCCall()", " move fromWhere, a2", " move operand, a3", " move cfr, a0", " move PC, a1", " cCall4(_llint_trace_operand)", " restoreStateAfterCCall()", "end", "macro traceValue(fromWhere, operand)", " prepareStateForCCall()", " move fromWhere, a2", " move operand, a3", " move cfr, a0", " move PC, a1", " cCall4(_llint_trace_value)", " restoreStateAfterCCall()", "end", "macro callCallSlowPath(slowPath, action)", " storei PC, (ArgumentCount + TagOffset)[cfr]", " prepareStateForCCall()", " move cfr, a0", " move PC, a1", " cCall2(slowPath)", " action(r0, r1)", "end", "macro callTrapHandler(throwHandler)", " storei PC, (ArgumentCount + TagOffset)[cfr]", " prepareStateForCCall()", " move cfr, a0", " move PC, a1", " cCall2(_llint_slow_path_handle_traps)", " btpnz r0, throwHandler", " loadi (ArgumentCount + TagOffset)[cfr], PC", "end", "macro checkSwitchToJITForLoop()", " checkSwitchToJIT(1, macro ()", " storei PC, (ArgumentCount + TagOffset)[cfr]", " prepareStateForCCall()", " move cfr, a0", " move PC, a1", " cCall2(_llint_loop_osr)", " btpz r0, .recover", " move r1, sp", " jmp r0", ".recover:", " loadi (ArgumentCount + TagOffset)[cfr], PC", "end)", "end", "macro loadCaged(basePtr, source, dest, scratch)", " loadp source, dest", "if (GIGACAGE_ENABLED and (notC_LOOP))", " loadp basePtr, scratch", " btpz scratch, .done", " andp constexpr (GIGACAGE_MASK), dest", " addp scratch, dest", ".done:", "else", " skip", "end", "end", "macro loadVariable(operand, value)", " loadisFromInstruction(operand, value)", " loadq 0[cfr, value, 8], value", "end", "macro loadConstantOrVariable(index, value)", " bpgteq index, FirstConstantRegisterIndex, .constant", " loadq 0[cfr, index, 8], value", " jmp .done", ".constant:", " loadp CodeBlock[cfr], value", " loadp (CodeBlock::m_constantRegisters + VectorBufferOffset)[value], value", " subp FirstConstantRegisterIndex, index", " loadq 0[value, index, 8], value", ".done:", "end", "macro loadConstantOrVariableInt32(index, value, slow)", " loadConstantOrVariable(index, value)", " bqb value, tagTypeNumber, slow", "end", "macro loadConstantOrVariableCell(index, value, slow)", " loadConstantOrVariable(index, value)", " btqnz value, tagMask, slow", "end", "macro writeBarrierOnOperand(cellOperand)", " loadisFromInstruction(cellOperand, t1)", " loadConstantOrVariableCell(t1, t2, .writeBarrierDone)", " skipIfIsRememberedOrInEden(t2, macro ()", " push PB, PC", " move t2, a1", " move cfr, a0", " cCall2Void(_llint_write_barrier_slow)", " pop PC, PB", "end)", ".writeBarrierDone:", "end", "macro writeBarrierOnOperands(cellOperand, valueOperand)", " loadisFromInstruction(valueOperand, t1)", " loadConstantOrVariableCell(t1, t0, .writeBarrierDone)", " btpz t0, .writeBarrierDone", " writeBarrierOnOperand(cellOperand)", ".writeBarrierDone:", "end", "macro writeBarrierOnGlobal(valueOperand, loadHelper)", " loadisFromInstruction(valueOperand, t1)", " loadConstantOrVariableCell(t1, t0, .writeBarrierDone)", " btpz t0, .writeBarrierDone", " loadHelper(t3)", " skipIfIsRememberedOrInEden(t3, macro ()", " push PB, PC", " move cfr, a0", " move t3, a1", " cCall2Void(_llint_write_barrier_slow)", " pop PC, PB", "end)", ".writeBarrierDone:", "end", "macro writeBarrierOnGlobalObject(valueOperand)", " writeBarrierOnGlobal(valueOperand, macro (registerToStoreGlobal)", " loadp CodeBlock[cfr], registerToStoreGlobal", " loadp CodeBlock::m_globalObject[registerToStoreGlobal], registerToStoreGlobal", "end)", "end", "macro writeBarrierOnGlobalLexicalEnvironment(valueOperand)", " writeBarrierOnGlobal(valueOperand, macro (registerToStoreGlobal)", " loadp CodeBlock[cfr], registerToStoreGlobal", " loadp CodeBlock::m_globalObject[registerToStoreGlobal], registerToStoreGlobal", " loadp JSGlobalObject::m_globalLexicalEnvironment[registerToStoreGlobal], registerToStoreGlobal", "end)", "end", "macro valueProfile(value, operand, scratch)", " loadpFromInstruction(operand, scratch)", " storeq value, ValueProfile::m_buckets[scratch]", "end", "macro structureIDToStructureWithScratch(structureIDThenStructure, scratch)", " loadp CodeBlock[cfr], scratch", " loadp CodeBlock::m_vm[scratch], scratch", " loadp ((VM::heap + Heap::m_structureIDTable) + StructureIDTable::m_table)[scratch], scratch", " loadp 0[scratch, structureIDThenStructure, 8], structureIDThenStructure", "end", "macro loadStructureWithScratch(cell, structure, scratch)", " loadi JSCell::m_structureID[cell], structure", " structureIDToStructureWithScratch(structure, scratch)", "end", "macro loadStructureAndClobberFirstArg(cell, structure)", " loadi JSCell::m_structureID[cell], structure", " loadp CodeBlock[cfr], cell", " loadp CodeBlock::m_vm[cell], cell", " loadp ((VM::heap + Heap::m_structureIDTable) + StructureIDTable::m_table)[cell], cell", " loadp 0[cell, structure, 8], structure", "end", "macro functionArityCheck(doneLabel, slowPath)", " loadi (PayloadOffset + ArgumentCount)[cfr], t0", " biaeq t0, CodeBlock::m_numParameters[t1], doneLabel", " prepareStateForCCall()", " move cfr, a0", " move PC, a1", " cCall2(slowPath)", " btiz r0, .noError", " move r1, cfr", " jmp _llint_throw_from_slow_path_trampoline", ".noError:", " loadi CommonSlowPaths::ArityCheckData::paddedStackSpace[r1], t1", " btiz t1, .continue", " loadi (PayloadOffset + ArgumentCount)[cfr], t2", " addi CallFrameHeaderSlots, t2", " move t1, t3", " andi (StackAlignmentSlots - 1), t3", " btiz t3, .noExtraSlot", " move ValueUndefined, t0", ".fillExtraSlots:", " storeq t0, 0[cfr, t2, 8]", " addi 1, t2", " bsubinz 1, t3, .fillExtraSlots", " andi (~(StackAlignmentSlots - 1)), t1", " btiz t1, .continue", ".noExtraSlot:", " negq t1", " move cfr, t3", " subp (CalleeSaveSpaceAsVirtualRegisters * 8), t3", " addi CalleeSaveSpaceAsVirtualRegisters, t2", " move t1, t0", " lshiftp 3, t0", " addp t0, cfr", " addp t0, sp", ".copyLoop:", " loadq 0[t3], t0", " storeq t0, 0[t3, t1, 8]", " addp 8, t3", " bsubinz 1, t2, .copyLoop", " move t1, t2", " move ValueUndefined, t0", ".fillLoop:", " storeq t0, 0[t3, t1, 8]", " addp 8, t3", " baddinz 1, t2, .fillLoop", ".continue:", " loadp CodeBlock[cfr], t1", " loadp CodeBlock::m_instructions[t1], PB", " move 0, PC", " jmp doneLabel", "end", "macro branchIfException(label)", " loadp Callee[cfr], t3", " andp MarkedBlockMask, t3", " loadp MarkedBlock::m_vm[t3], t3", " btqz VM::m_exception[t3], .noException", " jmp label", ".noException:", "end", "_llint_op_enter:", " traceExecution()", " checkStackPointerAlignment(t2, 3735879905)", " loadp CodeBlock[cfr], t2", " loadi CodeBlock::m_numVars[t2], t2", " subq CalleeSaveSpaceAsVirtualRegisters, t2", " move cfr, t1", " subq (CalleeSaveSpaceAsVirtualRegisters * 8), t1", " btiz t2, .opEnterDone", " move ValueUndefined, t0", " negi t2", " sxi2q t2, t2", ".opEnterLoop:", " storeq t0, 0[t1, t2, 8]", " addq 1, t2", " btqnz t2, .opEnterLoop", ".opEnterDone:", " callOpcodeSlowPath(_slow_path_enter)", " dispatch(constexpr (op_enter_length))", "_llint_op_get_argument:", " traceExecution()", " loadisFromInstruction(1, t1)", " loadisFromInstruction(2, t2)", " loadi (PayloadOffset + ArgumentCount)[cfr], t0", " bilteq t0, t2, .opGetArgumentOutOfBounds", " loadq ThisArgumentOffset[cfr, t2, 8], t0", " storeq t0, 0[cfr, t1, 8]", " valueProfile(t0, 3, t2)", " dispatch(constexpr (op_get_argument_length))", ".opGetArgumentOutOfBounds:", " storeq ValueUndefined, 0[cfr, t1, 8]", " valueProfile(ValueUndefined, 3, t2)", " dispatch(constexpr (op_get_argument_length))", "_llint_op_argument_count:", " traceExecution()", " loadisFromInstruction(1, t1)", " loadi (PayloadOffset + ArgumentCount)[cfr], t0", " subi 1, t0", " orq TagTypeNumber, t0", " storeq t0, 0[cfr, t1, 8]", " dispatch(constexpr (op_argument_count_length))", "_llint_op_get_scope:", " traceExecution()", " loadp Callee[cfr], t0", " loadp JSCallee::m_scope[t0], t0", " loadisFromInstruction(1, t1)", " storeq t0, 0[cfr, t1, 8]", " dispatch(constexpr (op_get_scope_length))", "_llint_op_to_this:", " traceExecution()", " loadisFromInstruction(1, t0)", " loadq 0[cfr, t0, 8], t0", " btqnz t0, tagMask, .opToThisSlow", " bbneq JSCell::m_type[t0], FinalObjectType, .opToThisSlow", " loadStructureWithScratch(t0, t1, t2)", " loadpFromInstruction(2, t2)", " bpneq t1, t2, .opToThisSlow", " dispatch(constexpr (op_to_this_length))", ".opToThisSlow:", " callOpcodeSlowPath(_slow_path_to_this)", " dispatch(constexpr (op_to_this_length))", "_llint_op_check_tdz:", " traceExecution()", " loadisFromInstruction(1, t0)", " loadConstantOrVariable(t0, t1)", " bqneq t1, ValueEmpty, .opNotTDZ", " callOpcodeSlowPath(_slow_path_throw_tdz_error)", ".opNotTDZ:", " dispatch(constexpr (op_check_tdz_length))", "_llint_op_mov:", " traceExecution()", " loadisFromInstruction(2, t1)", " loadisFromInstruction(1, t0)", " loadConstantOrVariable(t1, t2)", " storeq t2, 0[cfr, t0, 8]", " dispatch(constexpr (op_mov_length))", "_llint_op_not:", " traceExecution()", " loadisFromInstruction(2, t0)", " loadisFromInstruction(1, t1)", " loadConstantOrVariable(t0, t2)", " xorq ValueFalse, t2", " btqnz t2, (~1), .opNotSlow", " xorq ValueTrue, t2", " storeq t2, 0[cfr, t1, 8]", " dispatch(constexpr (op_not_length))", ".opNotSlow:", " callOpcodeSlowPath(_slow_path_not)", " dispatch(constexpr (op_not_length))", "macro equalityComparison(integerComparison, slowPath)", " traceExecution()", " loadisFromInstruction(3, t0)", " loadisFromInstruction(2, t2)", " loadisFromInstruction(1, t3)", " loadConstantOrVariableInt32(t0, t1, .slow)", " loadConstantOrVariableInt32(t2, t0, .slow)", " integerComparison(t0, t1, t0)", " orq ValueFalse, t0", " storeq t0, 0[cfr, t3, 8]", " dispatch(4)", ".slow:", " callOpcodeSlowPath(slowPath)", " dispatch(4)", "end", "_llint_op_eq:", " equalityComparison(macro (left, right, result)", " cieq left, right, result", "end, _slow_path_eq)", "_llint_op_neq:", " equalityComparison(macro (left, right, result)", " cineq left, right, result", "end, _slow_path_neq)", "macro equalNullComparison()", " loadisFromInstruction(2, t0)", " loadq 0[cfr, t0, 8], t0", " btqnz t0, tagMask, .immediate", " btbnz JSCell::m_flags[t0], MasqueradesAsUndefined, .masqueradesAsUndefined", " move 0, t0", " jmp .done", ".masqueradesAsUndefined:", " loadStructureWithScratch(t0, t2, t1)", " loadp CodeBlock[cfr], t0", " loadp CodeBlock::m_globalObject[t0], t0", " cpeq Structure::m_globalObject[t2], t0, t0", " jmp .done", ".immediate:", " andq (~TagBitUndefined), t0", " cqeq t0, ValueNull, t0", ".done:", "end", "_llint_op_eq_null:", " traceExecution()", " equalNullComparison()", " loadisFromInstruction(1, t1)", " orq ValueFalse, t0", " storeq t0, 0[cfr, t1, 8]", " dispatch(constexpr (op_eq_null_length))", "_llint_op_neq_null:", " traceExecution()", " equalNullComparison()", " loadisFromInstruction(1, t1)", " xorq ValueTrue, t0", " storeq t0, 0[cfr, t1, 8]", " dispatch(constexpr (op_neq_null_length))", "macro strictEq(equalityOperation, slowPath)", " traceExecution()", " loadisFromInstruction(3, t0)", " loadisFromInstruction(2, t2)", " loadConstantOrVariable(t0, t1)", " loadConstantOrVariable(t2, t0)", " move t0, t2", " orq t1, t2", " btqz t2, tagMask, .slow", " bqaeq t0, tagTypeNumber, .leftOK", " btqnz t0, tagTypeNumber, .slow", ".leftOK:", " bqaeq t1, tagTypeNumber, .rightOK", " btqnz t1, tagTypeNumber, .slow", ".rightOK:", " equalityOperation(t0, t1, t0)", " loadisFromInstruction(1, t1)", " orq ValueFalse, t0", " storeq t0, 0[cfr, t1, 8]", " dispatch(4)", ".slow:", " callOpcodeSlowPath(slowPath)", " dispatch(4)", "end", "_llint_op_stricteq:", " strictEq(macro (left, right, result)", " cqeq left, right, result", "end, _slow_path_stricteq)", "_llint_op_nstricteq:", " strictEq(macro (left, right, result)", " cqneq left, right, result", "end, _slow_path_nstricteq)", "macro preOp(arithmeticOperation, slowPath)", " traceExecution()", " loadisFromInstruction(1, t0)", " loadq 0[cfr, t0, 8], t1", " bqb t1, tagTypeNumber, .slow", " arithmeticOperation(t1, .slow)", " orq tagTypeNumber, t1", " storeq t1, 0[cfr, t0, 8]", " dispatch(2)", ".slow:", " callOpcodeSlowPath(slowPath)", " dispatch(2)", "end", "_llint_op_inc:", " preOp(macro (value, slow)", " baddio 1, value, slow", "end, _slow_path_inc)", "_llint_op_dec:", " preOp(macro (value, slow)", " bsubio 1, value, slow", "end, _slow_path_dec)", "_llint_op_to_number:", " traceExecution()", " loadisFromInstruction(2, t0)", " loadisFromInstruction(1, t1)", " loadConstantOrVariable(t0, t2)", " bqaeq t2, tagTypeNumber, .opToNumberIsImmediate", " btqz t2, tagTypeNumber, .opToNumberSlow", ".opToNumberIsImmediate:", " storeq t2, 0[cfr, t1, 8]", " valueProfile(t2, 3, t0)", " dispatch(constexpr (op_to_number_length))", ".opToNumberSlow:", " callOpcodeSlowPath(_slow_path_to_number)", " dispatch(constexpr (op_to_number_length))", "_llint_op_to_string:", " traceExecution()", " loadisFromInstruction(2, t1)", " loadisFromInstruction(1, t2)", " loadConstantOrVariable(t1, t0)", " btqnz t0, tagMask, .opToStringSlow", " bbneq JSCell::m_type[t0], StringType, .opToStringSlow", ".opToStringIsString:", " storeq t0, 0[cfr, t2, 8]", " dispatch(constexpr (op_to_string_length))", ".opToStringSlow:", " callOpcodeSlowPath(_slow_path_to_string)", " dispatch(constexpr (op_to_string_length))", "_llint_op_negate:", " traceExecution()", " loadisFromInstruction(2, t0)", " loadisFromInstruction(1, t1)", " loadConstantOrVariable(t0, t3)", " loadisFromInstruction(3, t2)", " bqb t3, tagTypeNumber, .opNegateNotInt", " btiz t3, 2147483647, .opNegateSlow", " negi t3", " ori ArithProfileInt, t2", " orq tagTypeNumber, t3", " storeisToInstruction(t2, 3)", " storeq t3, 0[cfr, t1, 8]", " dispatch(constexpr (op_negate_length))", ".opNegateNotInt:", " btqz t3, tagTypeNumber, .opNegateSlow", " xorq 9223372036854776000, t3", " ori ArithProfileNumber, t2", " storeq t3, 0[cfr, t1, 8]", " storeisToInstruction(t2, 3)", " dispatch(constexpr (op_negate_length))", ".opNegateSlow:", " callOpcodeSlowPath(_slow_path_negate)", " dispatch(constexpr (op_negate_length))", "macro binaryOpCustomStore(integerOperationAndStore, doubleOperation, slowPath)", " loadisFromInstruction(3, t0)", " loadisFromInstruction(2, t2)", " loadConstantOrVariable(t0, t1)", " loadConstantOrVariable(t2, t0)", " bqb t0, tagTypeNumber, .op1NotInt", " bqb t1, tagTypeNumber, .op2NotInt", " loadisFromInstruction(1, t2)", " integerOperationAndStore(t1, t0, .slow, t2)", " loadisFromInstruction(4, t1)", " ori ArithProfileIntInt, t1", " storeisToInstruction(t1, 4)", " dispatch(5)", ".op1NotInt:", " btqz t0, tagTypeNumber, .slow", " bqaeq t1, tagTypeNumber, .op1NotIntOp2Int", " btqz t1, tagTypeNumber, .slow", " addq tagTypeNumber, t1", " fq2d t1, ft1", " loadisFromInstruction(4, t2)", " ori ArithProfileNumberNumber, t2", " storeisToInstruction(t2, 4)", " jmp .op1NotIntReady", ".op1NotIntOp2Int:", " loadisFromInstruction(4, t2)", " ori ArithProfileNumberInt, t2", " storeisToInstruction(t2, 4)", " ci2d t1, ft1", ".op1NotIntReady:", " loadisFromInstruction(1, t2)", " addq tagTypeNumber, t0", " fq2d t0, ft0", " doubleOperation(ft1, ft0)", " fd2q ft0, t0", " subq tagTypeNumber, t0", " storeq t0, 0[cfr, t2, 8]", " dispatch(5)", ".op2NotInt:", " loadisFromInstruction(1, t2)", " btqz t1, tagTypeNumber, .slow", " loadisFromInstruction(4, t3)", " ori ArithProfileIntNumber, t3", " storeisToInstruction(t3, 4)", " ci2d t0, ft0", " addq tagTypeNumber, t1", " fq2d t1, ft1", " doubleOperation(ft1, ft0)", " fd2q ft0, t0", " subq tagTypeNumber, t0", " storeq t0, 0[cfr, t2, 8]", " dispatch(5)", ".slow:", " callOpcodeSlowPath(slowPath)", " dispatch(5)", "end", "macro binaryOp(integerOperation, doubleOperation, slowPath)", " binaryOpCustomStore(macro (left, right, slow, index)", " integerOperation(left, right, slow)", " orq tagTypeNumber, right", " storeq right, 0[cfr, index, 8]", "end, doubleOperation, slowPath)", "end", "_llint_op_add:", " traceExecution()", " binaryOp(macro (left, right, slow)", " baddio left, right, slow", "end, macro (left, right)", " addd left, right", "end, _slow_path_add)", "_llint_op_mul:", " traceExecution()", " binaryOpCustomStore(macro (left, right, slow, index)", " move right, t3", " bmulio left, t3, slow", " btinz t3, .done", " bilt left, 0, slow", " bilt right, 0, slow", ".done:", " orq tagTypeNumber, t3", " storeq t3, 0[cfr, index, 8]", "end, macro (left, right)", " muld left, right", "end, _slow_path_mul)", "_llint_op_sub:", " traceExecution()", " binaryOp(macro (left, right, slow)", " bsubio left, right, slow", "end, macro (left, right)", " subd left, right", "end, _slow_path_sub)", "_llint_op_div:", " traceExecution()", "if (X86_64 or X86_64_WIN)", " binaryOpCustomStore(macro (left, right, slow, index)", " btiz left, slow", " bineq left, (-1), .notNeg2TwoThe31DivByNeg1", " bieq right, (-2147483648), .slow", ".notNeg2TwoThe31DivByNeg1:", " btinz right, .intOK", " bilt left, 0, slow", ".intOK:", " move left, t3", " move right, t0", " cdqi ", " idivi t3", " btinz t1, slow", " orq tagTypeNumber, t0", " storeq t0, 0[cfr, index, 8]", "end, macro (left, right)", " divd left, right", "end, _slow_path_div)", "else", " callOpcodeSlowPath(_slow_path_div)", " dispatch(constexpr (op_div_length))", "end", "macro bitOp(operation, slowPath, advance)", " loadisFromInstruction(3, t0)", " loadisFromInstruction(2, t2)", " loadisFromInstruction(1, t3)", " loadConstantOrVariable(t0, t1)", " loadConstantOrVariable(t2, t0)", " bqb t0, tagTypeNumber, .slow", " bqb t1, tagTypeNumber, .slow", " operation(t1, t0)", " orq tagTypeNumber, t0", " storeq t0, 0[cfr, t3, 8]", " dispatch(advance)", ".slow:", " callOpcodeSlowPath(slowPath)", " dispatch(advance)", "end", "_llint_op_lshift:", " traceExecution()", " bitOp(macro (left, right)", " lshifti left, right", "end, _slow_path_lshift, constexpr (op_lshift_length))", "_llint_op_rshift:", " traceExecution()", " bitOp(macro (left, right)", " rshifti left, right", "end, _slow_path_rshift, constexpr (op_rshift_length))", "_llint_op_urshift:", " traceExecution()", " bitOp(macro (left, right)", " urshifti left, right", "end, _slow_path_urshift, constexpr (op_urshift_length))", "_llint_op_unsigned:", " traceExecution()", " loadisFromInstruction(1, t0)", " loadisFromInstruction(2, t1)", " loadConstantOrVariable(t1, t2)", " bilt t2, 0, .opUnsignedSlow", " storeq t2, 0[cfr, t0, 8]", " dispatch(constexpr (op_unsigned_length))", ".opUnsignedSlow:", " callOpcodeSlowPath(_slow_path_unsigned)", " dispatch(constexpr (op_unsigned_length))", "_llint_op_bitand:", " traceExecution()", " bitOp(macro (left, right)", " andi left, right", "end, _slow_path_bitand, constexpr (op_bitand_length))", "_llint_op_bitxor:", " traceExecution()", " bitOp(macro (left, right)", " xori left, right", "end, _slow_path_bitxor, constexpr (op_bitxor_length))", "_llint_op_bitor:", " traceExecution()", " bitOp(macro (left, right)", " ori left, right", "end, _slow_path_bitor, constexpr (op_bitor_length))", "_llint_op_overrides_has_instance:", " traceExecution()", " loadisFromInstruction(1, t3)", " loadisFromInstruction(3, t1)", " loadConstantOrVariable(t1, t0)", " loadp CodeBlock[cfr], t2", " loadp CodeBlock::m_globalObject[t2], t2", " loadp JSGlobalObject::m_functionProtoHasInstanceSymbolFunction[t2], t2", " bqneq t0, t2, .opOverridesHasInstanceNotDefaultSymbol", " loadisFromInstruction(2, t1)", " loadConstantOrVariable(t1, t0)", " tbz JSCell::m_flags[t0], ImplementsDefaultHasInstance, t1", " orq ValueFalse, t1", " storeq t1, 0[cfr, t3, 8]", " dispatch(constexpr (op_overrides_has_instance_length))", ".opOverridesHasInstanceNotDefaultSymbol:", " storeq ValueTrue, 0[cfr, t3, 8]", " dispatch(constexpr (op_overrides_has_instance_length))", "_llint_op_instanceof_custom:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_instanceof_custom)", " dispatch(constexpr (op_instanceof_custom_length))", "_llint_op_is_empty:", " traceExecution()", " loadisFromInstruction(2, t1)", " loadisFromInstruction(1, t2)", " loadConstantOrVariable(t1, t0)", " cqeq t0, ValueEmpty, t3", " orq ValueFalse, t3", " storeq t3, 0[cfr, t2, 8]", " dispatch(constexpr (op_is_empty_length))", "_llint_op_is_undefined:", " traceExecution()", " loadisFromInstruction(2, t1)", " loadisFromInstruction(1, t2)", " loadConstantOrVariable(t1, t0)", " btqz t0, tagMask, .opIsUndefinedCell", " cqeq t0, ValueUndefined, t3", " orq ValueFalse, t3", " storeq t3, 0[cfr, t2, 8]", " dispatch(constexpr (op_is_undefined_length))", ".opIsUndefinedCell:", " btbnz JSCell::m_flags[t0], MasqueradesAsUndefined, .masqueradesAsUndefined", " move ValueFalse, t1", " storeq t1, 0[cfr, t2, 8]", " dispatch(constexpr (op_is_undefined_length))", ".masqueradesAsUndefined:", " loadStructureWithScratch(t0, t3, t1)", " loadp CodeBlock[cfr], t1", " loadp CodeBlock::m_globalObject[t1], t1", " cpeq Structure::m_globalObject[t3], t1, t0", " orq ValueFalse, t0", " storeq t0, 0[cfr, t2, 8]", " dispatch(constexpr (op_is_undefined_length))", "_llint_op_is_boolean:", " traceExecution()", " loadisFromInstruction(2, t1)", " loadisFromInstruction(1, t2)", " loadConstantOrVariable(t1, t0)", " xorq ValueFalse, t0", " tqz t0, (~1), t0", " orq ValueFalse, t0", " storeq t0, 0[cfr, t2, 8]", " dispatch(constexpr (op_is_boolean_length))", "_llint_op_is_number:", " traceExecution()", " loadisFromInstruction(2, t1)", " loadisFromInstruction(1, t2)", " loadConstantOrVariable(t1, t0)", " tqnz t0, tagTypeNumber, t1", " orq ValueFalse, t1", " storeq t1, 0[cfr, t2, 8]", " dispatch(constexpr (op_is_number_length))", "_llint_op_is_cell_with_type:", " traceExecution()", " loadisFromInstruction(3, t0)", " loadisFromInstruction(2, t1)", " loadisFromInstruction(1, t2)", " loadConstantOrVariable(t1, t3)", " btqnz t3, tagMask, .notCellCase", " cbeq JSCell::m_type[t3], t0, t1", " orq ValueFalse, t1", " storeq t1, 0[cfr, t2, 8]", " dispatch(constexpr (op_is_cell_with_type_length))", ".notCellCase:", " storeq ValueFalse, 0[cfr, t2, 8]", " dispatch(constexpr (op_is_cell_with_type_length))", "_llint_op_is_object:", " traceExecution()", " loadisFromInstruction(2, t1)", " loadisFromInstruction(1, t2)", " loadConstantOrVariable(t1, t0)", " btqnz t0, tagMask, .opIsObjectNotCell", " cbaeq JSCell::m_type[t0], ObjectType, t1", " orq ValueFalse, t1", " storeq t1, 0[cfr, t2, 8]", " dispatch(constexpr (op_is_object_length))", ".opIsObjectNotCell:", " storeq ValueFalse, 0[cfr, t2, 8]", " dispatch(constexpr (op_is_object_length))", "macro loadPropertyAtVariableOffset(propertyOffsetAsInt, objectAndStorage, value)", " bilt propertyOffsetAsInt, firstOutOfLineOffset, .isInline", " loadCaged(_g_jsValueGigacageBasePtr, JSObject::m_butterfly[objectAndStorage], objectAndStorage, value)", " negi propertyOffsetAsInt", " sxi2q propertyOffsetAsInt, propertyOffsetAsInt", " jmp .ready", ".isInline:", " addp (sizeof JSObject - ((firstOutOfLineOffset - 2) * 8)), objectAndStorage", ".ready:", " loadq ((firstOutOfLineOffset - 2) * 8)[objectAndStorage, propertyOffsetAsInt, 8], value", "end", "macro storePropertyAtVariableOffset(propertyOffsetAsInt, objectAndStorage, value, scratch)", " bilt propertyOffsetAsInt, firstOutOfLineOffset, .isInline", " loadCaged(_g_jsValueGigacageBasePtr, JSObject::m_butterfly[objectAndStorage], objectAndStorage, scratch)", " negi propertyOffsetAsInt", " sxi2q propertyOffsetAsInt, propertyOffsetAsInt", " jmp .ready", ".isInline:", " addp (sizeof JSObject - ((firstOutOfLineOffset - 2) * 8)), objectAndStorage", ".ready:", " storeq value, ((firstOutOfLineOffset - 2) * 8)[objectAndStorage, propertyOffsetAsInt, 8]", "end", "_llint_op_get_by_id:", " traceExecution()", " loadisFromInstruction(2, t0)", " loadConstantOrVariableCell(t0, t3, .opGetByIdSlow)", " loadi JSCell::m_structureID[t3], t1", " loadisFromInstruction(4, t2)", " bineq t2, t1, .opGetByIdSlow", " loadisFromInstruction(5, t1)", " loadisFromInstruction(1, t2)", " loadPropertyAtVariableOffset(t1, t3, t0)", " storeq t0, 0[cfr, t2, 8]", " valueProfile(t0, 8, t1)", " dispatch(constexpr (op_get_by_id_length))", ".opGetByIdSlow:", " callOpcodeSlowPath(_llint_slow_path_get_by_id)", " dispatch(constexpr (op_get_by_id_length))", "_llint_op_get_by_id_proto_load:", " traceExecution()", " loadisFromInstruction(2, t0)", " loadConstantOrVariableCell(t0, t3, .opGetByIdProtoSlow)", " loadi JSCell::m_structureID[t3], t1", " loadisFromInstruction(4, t2)", " bineq t2, t1, .opGetByIdProtoSlow", " loadisFromInstruction(5, t1)", " loadpFromInstruction(6, t3)", " loadisFromInstruction(1, t2)", " loadPropertyAtVariableOffset(t1, t3, t0)", " storeq t0, 0[cfr, t2, 8]", " valueProfile(t0, 8, t1)", " dispatch(constexpr (op_get_by_id_proto_load_length))", ".opGetByIdProtoSlow:", " callOpcodeSlowPath(_llint_slow_path_get_by_id)", " dispatch(constexpr (op_get_by_id_proto_load_length))", "_llint_op_get_by_id_unset:", " traceExecution()", " loadisFromInstruction(2, t0)", " loadConstantOrVariableCell(t0, t3, .opGetByIdUnsetSlow)", " loadi JSCell::m_structureID[t3], t1", " loadisFromInstruction(4, t2)", " bineq t2, t1, .opGetByIdUnsetSlow", " loadisFromInstruction(1, t2)", " storeq ValueUndefined, 0[cfr, t2, 8]", " valueProfile(ValueUndefined, 8, t1)", " dispatch(constexpr (op_get_by_id_unset_length))", ".opGetByIdUnsetSlow:", " callOpcodeSlowPath(_llint_slow_path_get_by_id)", " dispatch(constexpr (op_get_by_id_unset_length))", "_llint_op_get_array_length:", " traceExecution()", " loadisFromInstruction(2, t0)", " loadpFromInstruction(4, t1)", " loadConstantOrVariableCell(t0, t3, .opGetArrayLengthSlow)", " move t3, t2", " arrayProfile(t2, t1, t0)", " btiz t2, IsArray, .opGetArrayLengthSlow", " btiz t2, IndexingShapeMask, .opGetArrayLengthSlow", " loadisFromInstruction(1, t1)", " loadCaged(_g_jsValueGigacageBasePtr, JSObject::m_butterfly[t3], t0, t2)", " loadi ((-sizeof IndexingHeader) + IndexingHeader::u.lengths.publicLength)[t0], t0", " bilt t0, 0, .opGetArrayLengthSlow", " orq tagTypeNumber, t0", " valueProfile(t0, 8, t2)", " storeq t0, 0[cfr, t1, 8]", " dispatch(constexpr (op_get_array_length_length))", ".opGetArrayLengthSlow:", " callOpcodeSlowPath(_llint_slow_path_get_by_id)", " dispatch(constexpr (op_get_array_length_length))", "_llint_op_put_by_id:", " traceExecution()", " loadisFromInstruction(1, t3)", " loadConstantOrVariableCell(t3, t0, .opPutByIdSlow)", " loadisFromInstruction(4, t2)", " bineq t2, JSCell::m_structureID[t0], .opPutByIdSlow", " loadisFromInstruction(3, t1)", " loadConstantOrVariable(t1, t3)", " loadpFromInstruction(8, t1)", " btpnz t1, PutByIdPrimaryTypeMask, .opPutByIdTypeCheckObjectWithStructureOrOther", " andp PutByIdSecondaryTypeMask, t1", " bplt t1, PutByIdSecondaryTypeString, .opPutByIdTypeCheckLessThanString", " bplt t1, PutByIdSecondaryTypeObjectOrOther, .opPutByIdTypeCheckLessThanObjectOrOther", " bpeq t1, PutByIdSecondaryTypeTop, .opPutByIdDoneCheckingTypes", " btqz t3, tagMask, .opPutByIdTypeCheckObject", ".opPutByIdTypeCheckOther:", " andq (~TagBitUndefined), t3", " bqeq t3, ValueNull, .opPutByIdDoneCheckingTypes", " jmp .opPutByIdSlow", ".opPutByIdTypeCheckLessThanObjectOrOther:", " btqnz t3, tagMask, .opPutByIdSlow", " bpeq t1, PutByIdSecondaryTypeObject, .opPutByIdTypeCheckObject", " bpeq t1, PutByIdSecondaryTypeSymbol, .opPutByIdTypeCheckSymbol", " bbeq JSCell::m_type[t3], StringType, .opPutByIdDoneCheckingTypes", " jmp .opPutByIdSlow", ".opPutByIdTypeCheckObject:", " bbaeq JSCell::m_type[t3], ObjectType, .opPutByIdDoneCheckingTypes", " jmp .opPutByIdSlow", ".opPutByIdTypeCheckSymbol:", " bbeq JSCell::m_type[t3], SymbolType, .opPutByIdDoneCheckingTypes", " jmp .opPutByIdSlow", ".opPutByIdTypeCheckLessThanString:", " bplt t1, PutByIdSecondaryTypeInt32, .opPutByIdTypeCheckLessThanInt32", " bpeq t1, PutByIdSecondaryTypeNumber, .opPutByIdTypeCheckNumber", " bqaeq t3, tagTypeNumber, .opPutByIdDoneCheckingTypes", " jmp .opPutByIdSlow", ".opPutByIdTypeCheckNumber:", " btqnz t3, tagTypeNumber, .opPutByIdDoneCheckingTypes", " jmp .opPutByIdSlow", ".opPutByIdTypeCheckLessThanInt32:", " bpneq t1, PutByIdSecondaryTypeBoolean, .opPutByIdTypeCheckBottomOrOther", " xorq ValueFalse, t3", " btqz t3, (~1), .opPutByIdDoneCheckingTypes", " jmp .opPutByIdSlow", ".opPutByIdTypeCheckBottomOrOther:", " bpeq t1, PutByIdSecondaryTypeOther, .opPutByIdTypeCheckOther", " jmp .opPutByIdSlow", ".opPutByIdTypeCheckObjectWithStructureOrOther:", " btqz t3, tagMask, .opPutByIdTypeCheckObjectWithStructure", " btpnz t1, PutByIdPrimaryTypeObjectWithStructureOrOther, .opPutByIdTypeCheckOther", " jmp .opPutByIdSlow", ".opPutByIdTypeCheckObjectWithStructure:", " urshiftp 3, t1", " bineq t1, JSCell::m_structureID[t3], .opPutByIdSlow", ".opPutByIdDoneCheckingTypes:", " loadisFromInstruction(6, t1)", " btiz t1, .opPutByIdNotTransition", " loadpFromInstruction(7, t3)", " btpz t3, .opPutByIdTransitionDirect", " loadp StructureChain::m_vector[t3], t3", " assert(macro (ok)", " btpnz t3, ok", "end)", " structureIDToStructureWithScratch(t2, t1)", " loadq Structure::m_prototype[t2], t2", " bqeq t2, ValueNull, .opPutByIdTransitionChainDone", ".opPutByIdTransitionChainLoop:", " loadp 0[t3], t1", " loadi JSCell::m_structureID[t2], t2", " bineq t2, (Structure::m_blob + StructureIDBlob::u.fields.structureID)[t1], .opPutByIdSlow", " addp 8, t3", " loadq Structure::m_prototype[t1], t2", " bqneq t2, ValueNull, .opPutByIdTransitionChainLoop", ".opPutByIdTransitionChainDone:", " loadisFromInstruction(6, t1)", ".opPutByIdTransitionDirect:", " storei t1, JSCell::m_structureID[t0]", " writeBarrierOnOperand(1)", " loadisFromInstruction(1, t1)", " loadConstantOrVariable(t1, t0)", ".opPutByIdNotTransition:", " loadisFromInstruction(3, t1)", " loadConstantOrVariable(t1, t2)", " loadisFromInstruction(5, t1)", " storePropertyAtVariableOffset(t1, t0, t2, t3)", " writeBarrierOnOperands(1, 3)", " dispatch(constexpr (op_put_by_id_length))", ".opPutByIdSlow:", " callOpcodeSlowPath(_llint_slow_path_put_by_id)", " dispatch(constexpr (op_put_by_id_length))", "macro finishGetByVal(result, scratch)", " loadisFromInstruction(1, scratch)", " storeq result, 0[cfr, scratch, 8]", " valueProfile(result, 5, scratch)", " dispatch(6)", "end", "macro finishIntGetByVal(result, scratch)", " orq tagTypeNumber, result", " finishGetByVal(result, scratch)", "end", "macro finishDoubleGetByVal(result, scratch1, scratch2)", " fd2q result, scratch1", " subq tagTypeNumber, scratch1", " finishGetByVal(scratch1, scratch2)", "end", "_llint_op_get_by_val:", " traceExecution()", " loadisFromInstruction(2, t2)", " loadConstantOrVariableCell(t2, t0, .opGetByValSlow)", " loadpFromInstruction(4, t3)", " move t0, t2", " arrayProfile(t2, t3, t1)", " loadisFromInstruction(3, t3)", " loadConstantOrVariableInt32(t3, t1, .opGetByValSlow)", " sxi2q t1, t1", " loadCaged(_g_jsValueGigacageBasePtr, JSObject::m_butterfly[t0], t3, t5)", " andi IndexingShapeMask, t2", " bieq t2, Int32Shape, .opGetByValIsContiguous", " bineq t2, ContiguousShape, .opGetByValNotContiguous", ".opGetByValIsContiguous:", " biaeq t1, ((-sizeof IndexingHeader) + IndexingHeader::u.lengths.publicLength)[t3], .opGetByValOutOfBounds", " loadisFromInstruction(1, t0)", " loadq 0[t3, t1, 8], t2", " btqz t2, .opGetByValOutOfBounds", " jmp .opGetByValDone", ".opGetByValNotContiguous:", " bineq t2, DoubleShape, .opGetByValNotDouble", " biaeq t1, ((-sizeof IndexingHeader) + IndexingHeader::u.lengths.publicLength)[t3], .opGetByValOutOfBounds", " loadis 8[PB, PC, 8], t0", " loadd 0[t3, t1, 8], ft0", " bdnequn ft0, ft0, .opGetByValOutOfBounds", " fd2q ft0, t2", " subq tagTypeNumber, t2", " jmp .opGetByValDone", ".opGetByValNotDouble:", " subi ArrayStorageShape, t2", " bia t2, (SlowPutArrayStorageShape - ArrayStorageShape), .opGetByValNotIndexedStorage", " biaeq t1, ((-sizeof IndexingHeader) + IndexingHeader::u.lengths.vectorLength)[t3], .opGetByValOutOfBounds", " loadisFromInstruction(1, t0)", " loadq ArrayStorage::m_vector[t3, t1, 8], t2", " btqz t2, .opGetByValOutOfBounds", ".opGetByValDone:", " storeq t2, 0[cfr, t0, 8]", " valueProfile(t2, 5, t0)", " dispatch(constexpr (op_get_by_val_length))", ".opGetByValOutOfBounds:", " loadpFromInstruction(4, t0)", " storeb 1, ArrayProfile::m_outOfBounds[t0]", " jmp .opGetByValSlow", ".opGetByValNotIndexedStorage:", " loadb JSCell::m_type[t0], t2", " subi FirstArrayType, t2", " bia t2, (LastArrayType - FirstArrayType), .opGetByValSlow", " loadCaged(_g_primitiveGigacageBasePtr, JSArrayBufferView::m_vector[t0], t3, t5)", " biaeq t1, JSArrayBufferView::m_length[t0], .opGetByValSlow", " bia t2, (Uint8ClampedArrayType - FirstArrayType), .opGetByValAboveUint8ClampedArray", " bia t2, (Int16ArrayType - FirstArrayType), .opGetByValInt32ArrayOrUint8Array", " bineq t2, (Int8ArrayType - FirstArrayType), .opGetByValInt16Array", " loadbs 0[t3, t1, 1], t0", " finishIntGetByVal(t0, t1)", ".opGetByValInt16Array:", " loadhs 0[t3, t1, 2], t0", " finishIntGetByVal(t0, t1)", ".opGetByValInt32ArrayOrUint8Array:", " bieq t2, (Int32ArrayType - FirstArrayType), .opGetByValInt32Array", " loadb 0[t3, t1, 1], t0", " finishIntGetByVal(t0, t1)", ".opGetByValInt32Array:", " loadi 0[t3, t1, 4], t0", " finishIntGetByVal(t0, t1)", ".opGetByValAboveUint8ClampedArray:", " bia t2, (Uint32ArrayType - FirstArrayType), .opGetByValAboveUint32Array", " bieq t2, (Uint32ArrayType - FirstArrayType), .opGetByValUint32Array", " loadh 0[t3, t1, 2], t0", " finishIntGetByVal(t0, t1)", ".opGetByValUint32Array:", " loadi 0[t3, t1, 4], t0", " bilt t0, 0, .opGetByValSlow", " finishIntGetByVal(t0, t1)", ".opGetByValAboveUint32Array:", " bieq t2, (Float32ArrayType - FirstArrayType), .opGetByValSlow", " loadd 0[t3, t1, 8], ft0", " bdnequn ft0, ft0, .opGetByValSlow", " finishDoubleGetByVal(ft0, t0, t1)", ".opGetByValSlow:", " callOpcodeSlowPath(_llint_slow_path_get_by_val)", " dispatch(constexpr (op_get_by_val_length))", "macro contiguousPutByVal(storeCallback)", " biaeq t3, ((-sizeof IndexingHeader) + IndexingHeader::u.lengths.publicLength)[t0], .outOfBounds", ".storeResult:", " loadisFromInstruction(3, t2)", " storeCallback(t2, t1, 0[t0, t3, 8])", " dispatch(5)", ".outOfBounds:", " biaeq t3, ((-sizeof IndexingHeader) + IndexingHeader::u.lengths.vectorLength)[t0], .opPutByValOutOfBounds", " loadp 32[PB, PC, 8], t2", " storeb 1, ArrayProfile::m_mayStoreToHole[t2]", " addi 1, t3, t2", " storei t2, ((-sizeof IndexingHeader) + IndexingHeader::u.lengths.publicLength)[t0]", " jmp .storeResult", "end", "macro putByVal(slowPath)", " traceExecution()", " loadisFromInstruction(1, t0)", " loadConstantOrVariableCell(t0, t1, .opPutByValSlow)", " loadpFromInstruction(4, t3)", " move t1, t2", " arrayProfile(t2, t3, t0)", " loadisFromInstruction(2, t0)", " loadConstantOrVariableInt32(t0, t3, .opPutByValSlow)", " sxi2q t3, t3", " loadCaged(_g_jsValueGigacageBasePtr, JSObject::m_butterfly[t1], t0, t5)", " andi IndexingShapeMask, t2", " bineq t2, Int32Shape, .opPutByValNotInt32", " contiguousPutByVal(macro (operand, scratch, address)", " loadConstantOrVariable(operand, scratch)", " bpb scratch, tagTypeNumber, .opPutByValSlow", " storep scratch, address", " writeBarrierOnOperands(1, 3)", "end)", ".opPutByValNotInt32:", " bineq t2, DoubleShape, .opPutByValNotDouble", " contiguousPutByVal(macro (operand, scratch, address)", " loadConstantOrVariable(operand, scratch)", " bqb scratch, tagTypeNumber, .notInt", " ci2d scratch, ft0", " jmp .ready", ".notInt:", " addp tagTypeNumber, scratch", " fq2d scratch, ft0", " bdnequn ft0, ft0, .opPutByValSlow", ".ready:", " stored ft0, address", " writeBarrierOnOperands(1, 3)", "end)", ".opPutByValNotDouble:", " bineq t2, ContiguousShape, .opPutByValNotContiguous", " contiguousPutByVal(macro (operand, scratch, address)", " loadConstantOrVariable(operand, scratch)", " storep scratch, address", " writeBarrierOnOperands(1, 3)", "end)", ".opPutByValNotContiguous:", " bineq t2, ArrayStorageShape, .opPutByValSlow", " biaeq t3, ((-sizeof IndexingHeader) + IndexingHeader::u.lengths.vectorLength)[t0], .opPutByValOutOfBounds", " btqz ArrayStorage::m_vector[t0, t3, 8], .opPutByValArrayStorageEmpty", ".opPutByValArrayStorageStoreResult:", " loadisFromInstruction(3, t2)", " loadConstantOrVariable(t2, t1)", " storeq t1, ArrayStorage::m_vector[t0, t3, 8]", " writeBarrierOnOperands(1, 3)", " dispatch(5)", ".opPutByValArrayStorageEmpty:", " loadpFromInstruction(4, t1)", " storeb 1, ArrayProfile::m_mayStoreToHole[t1]", " addi 1, ArrayStorage::m_numValuesInVector[t0]", " bib t3, ((-sizeof IndexingHeader) + IndexingHeader::u.lengths.publicLength)[t0], .opPutByValArrayStorageStoreResult", " addi 1, t3, t1", " storei t1, ((-sizeof IndexingHeader) + IndexingHeader::u.lengths.publicLength)[t0]", " jmp .opPutByValArrayStorageStoreResult", ".opPutByValOutOfBounds:", " loadpFromInstruction(4, t0)", " storeb 1, ArrayProfile::m_outOfBounds[t0]", ".opPutByValSlow:", " callOpcodeSlowPath(slowPath)", " dispatch(5)", "end", "_llint_op_put_by_val:", " putByVal(_llint_slow_path_put_by_val)", "_llint_op_put_by_val_direct:", " putByVal(_llint_slow_path_put_by_val_direct)", "_llint_op_jmp:", " traceExecution()", " dispatchIntIndirect(1)", "macro jumpTrueOrFalse(conditionOp, slow)", " loadisFromInstruction(1, t1)", " loadConstantOrVariable(t1, t0)", " xorq ValueFalse, t0", " btqnz t0, (-1), .slow", " conditionOp(t0, .target)", " dispatch(3)", ".target:", " dispatchIntIndirect(2)", ".slow:", " callOpcodeSlowPath(slow)", " dispatch(0)", "end", "macro equalNull(cellHandler, immediateHandler)", " loadisFromInstruction(1, t0)", " assertNotConstant(t0)", " loadq 0[cfr, t0, 8], t0", " btqnz t0, tagMask, .immediate", " loadStructureWithScratch(t0, t2, t1)", " cellHandler(t2, JSCell::m_flags[t0], .target)", " dispatch(3)", ".target:", " dispatchIntIndirect(2)", ".immediate:", " andq (~TagBitUndefined), t0", " immediateHandler(t0, .target)", " dispatch(3)", "end", "_llint_op_jeq_null:", " traceExecution()", " equalNull(macro (structure, value, target)", " btbz value, MasqueradesAsUndefined, .notMasqueradesAsUndefined", " loadp CodeBlock[cfr], t0", " loadp CodeBlock::m_globalObject[t0], t0", " bpeq Structure::m_globalObject[structure], t0, target", ".notMasqueradesAsUndefined:", "end, macro (value, target)", " bqeq value, ValueNull, target", "end)", "_llint_op_jneq_null:", " traceExecution()", " equalNull(macro (structure, value, target)", " btbz value, MasqueradesAsUndefined, target", " loadp CodeBlock[cfr], t0", " loadp CodeBlock::m_globalObject[t0], t0", " bpneq Structure::m_globalObject[structure], t0, target", "end, macro (value, target)", " bqneq value, ValueNull, target", "end)", "_llint_op_jneq_ptr:", " traceExecution()", " loadisFromInstruction(1, t0)", " loadisFromInstruction(2, t1)", " loadp CodeBlock[cfr], t2", " loadp CodeBlock::m_globalObject[t2], t2", " loadp JSGlobalObject::m_specialPointers[t2, t1, 8], t1", " bpneq t1, 0[cfr, t0, 8], .opJneqPtrTarget", " dispatch(5)", ".opJneqPtrTarget:", " storei 1, 32[PB, PC, 8]", " dispatchIntIndirect(3)", "macro compare(integerCompare, doubleCompare, slowPath)", " loadisFromInstruction(1, t2)", " loadisFromInstruction(2, t3)", " loadConstantOrVariable(t2, t0)", " loadConstantOrVariable(t3, t1)", " bqb t0, tagTypeNumber, .op1NotInt", " bqb t1, tagTypeNumber, .op2NotInt", " integerCompare(t0, t1, .jumpTarget)", " dispatch(4)", ".op1NotInt:", " btqz t0, tagTypeNumber, .slow", " bqb t1, tagTypeNumber, .op1NotIntOp2NotInt", " ci2d t1, ft1", " jmp .op1NotIntReady", ".op1NotIntOp2NotInt:", " btqz t1, tagTypeNumber, .slow", " addq tagTypeNumber, t1", " fq2d t1, ft1", ".op1NotIntReady:", " addq tagTypeNumber, t0", " fq2d t0, ft0", " doubleCompare(ft0, ft1, .jumpTarget)", " dispatch(4)", ".op2NotInt:", " ci2d t0, ft0", " btqz t1, tagTypeNumber, .slow", " addq tagTypeNumber, t1", " fq2d t1, ft1", " doubleCompare(ft0, ft1, .jumpTarget)", " dispatch(4)", ".jumpTarget:", " dispatchIntIndirect(3)", ".slow:", " callOpcodeSlowPath(slowPath)", " dispatch(0)", "end", "_llint_op_switch_imm:", " traceExecution()", " loadisFromInstruction(3, t2)", " loadisFromInstruction(1, t3)", " loadConstantOrVariable(t2, t1)", " loadp CodeBlock[cfr], t2", " loadp CodeBlock::m_rareData[t2], t2", " muli sizeof SimpleJumpTable, t3", " loadp (CodeBlock::RareData::m_switchJumpTables + VectorBufferOffset)[t2], t2", " addp t3, t2", " bqb t1, tagTypeNumber, .opSwitchImmNotInt", " subi SimpleJumpTable::min[t2], t1", " biaeq t1, (SimpleJumpTable::branchOffsets + VectorSizeOffset)[t2], .opSwitchImmFallThrough", " loadp (SimpleJumpTable::branchOffsets + VectorBufferOffset)[t2], t3", " loadis 0[t3, t1, 4], t1", " btiz t1, .opSwitchImmFallThrough", " dispatch(t1)", ".opSwitchImmNotInt:", " btqnz t1, tagTypeNumber, .opSwitchImmSlow", ".opSwitchImmFallThrough:", " dispatchIntIndirect(2)", ".opSwitchImmSlow:", " callOpcodeSlowPath(_llint_slow_path_switch_imm)", " dispatch(0)", "_llint_op_switch_char:", " traceExecution()", " loadisFromInstruction(3, t2)", " loadisFromInstruction(1, t3)", " loadConstantOrVariable(t2, t1)", " loadp CodeBlock[cfr], t2", " loadp CodeBlock::m_rareData[t2], t2", " muli sizeof SimpleJumpTable, t3", " loadp (CodeBlock::RareData::m_switchJumpTables + VectorBufferOffset)[t2], t2", " addp t3, t2", " btqnz t1, tagMask, .opSwitchCharFallThrough", " bbneq JSCell::m_type[t1], StringType, .opSwitchCharFallThrough", " bineq JSString::m_length[t1], 1, .opSwitchCharFallThrough", " loadp JSString::m_value[t1], t0", " btpz t0, .opSwitchOnRope", " loadp StringImpl::m_data8[t0], t1", " btinz StringImpl::m_hashAndFlags[t0], HashFlags8BitBuffer, .opSwitchChar8Bit", " loadh 0[t1], t0", " jmp .opSwitchCharReady", ".opSwitchChar8Bit:", " loadb 0[t1], t0", ".opSwitchCharReady:", " subi SimpleJumpTable::min[t2], t0", " biaeq t0, (SimpleJumpTable::branchOffsets + VectorSizeOffset)[t2], .opSwitchCharFallThrough", " loadp (SimpleJumpTable::branchOffsets + VectorBufferOffset)[t2], t2", " loadis 0[t2, t0, 4], t1", " btiz t1, .opSwitchCharFallThrough", " dispatch(t1)", ".opSwitchCharFallThrough:", " dispatchIntIndirect(2)", ".opSwitchOnRope:", " callOpcodeSlowPath(_llint_slow_path_switch_char)", " dispatch(0)", "macro arrayProfileForCall()", " loadisFromInstruction(4, t3)", " negp t3", " loadq ThisArgumentOffset[cfr, t3, 8], t0", " btqnz t0, tagMask, .done", " loadpFromInstruction((CallOpCodeSize - 2), t1)", " loadi JSCell::m_structureID[t0], t3", " storei t3, ArrayProfile::m_lastSeenStructureID[t1]", ".done:", "end", "macro doCall(slowPath, prepareCall)", " loadisFromInstruction(2, t0)", " loadpFromInstruction(5, t1)", " loadp LLIntCallLinkInfo::callee[t1], t2", " loadConstantOrVariable(t0, t3)", " bqneq t3, t2, .opCallSlow", " loadisFromInstruction(4, t3)", " lshifti 3, t3", " negp t3", " addp cfr, t3", " storeq t2, Callee[t3]", " loadisFromInstruction(3, t2)", " storei PC, (ArgumentCount + TagOffset)[cfr]", " storei t2, (ArgumentCount + PayloadOffset)[t3]", " move t3, sp", " prepareCall(LLIntCallLinkInfo::machineCodeTarget[t1], t2, t3, t4)", " callTargetFunction(LLIntCallLinkInfo::machineCodeTarget[t1])", ".opCallSlow:", " slowPathForCall(slowPath, prepareCall)", "end", "_llint_op_ret:", " traceExecution()", " checkSwitchToJITForEpilogue()", " loadisFromInstruction(1, t2)", " loadConstantOrVariable(t2, r0)", " doReturn()", "_llint_op_to_primitive:", " traceExecution()", " loadisFromInstruction(2, t2)", " loadisFromInstruction(1, t3)", " loadConstantOrVariable(t2, t0)", " btqnz t0, tagMask, .opToPrimitiveIsImm", " bbaeq JSCell::m_type[t0], ObjectType, .opToPrimitiveSlowCase", ".opToPrimitiveIsImm:", " storeq t0, 0[cfr, t3, 8]", " dispatch(constexpr (op_to_primitive_length))", ".opToPrimitiveSlowCase:", " callOpcodeSlowPath(_slow_path_to_primitive)", " dispatch(constexpr (op_to_primitive_length))", "_llint_op_catch:", " loadp Callee[cfr], t3", " andp MarkedBlockMask, t3", " loadp MarkedBlock::m_vm[t3], t3", " restoreCalleeSavesFromVMEntryFrameCalleeSavesBuffer(t3, t0)", " loadp VM::callFrameForCatch[t3], cfr", " storep 0, VM::callFrameForCatch[t3]", " restoreStackPointerAfterCall()", " loadp CodeBlock[cfr], PB", " loadp CodeBlock::m_instructions[PB], PB", " loadp VM::targetInterpreterPCForThrow[t3], PC", " subp PB, PC", " rshiftp 3, PC", " callOpcodeSlowPath(_llint_slow_path_check_if_exception_is_uncatchable_and_notify_profiler)", " bpeq r1, 0, .isCatchableException", " jmp _llint_throw_from_slow_path_trampoline", ".isCatchableException:", " loadp Callee[cfr], t3", " andp MarkedBlockMask, t3", " loadp MarkedBlock::m_vm[t3], t3", " loadq VM::m_exception[t3], t0", " storeq 0, VM::m_exception[t3]", " loadisFromInstruction(1, t2)", " storeq t0, 0[cfr, t2, 8]", " loadq Exception::m_value[t0], t3", " loadisFromInstruction(2, t2)", " storeq t3, 0[cfr, t2, 8]", " traceExecution()", " dispatch(constexpr (op_catch_length))", "_llint_op_end:", " traceExecution()", " checkSwitchToJITForEpilogue()", " loadisFromInstruction(1, t0)", " assertNotConstant(t0)", " loadq 0[cfr, t0, 8], r0", " doReturn()", "_llint_throw_from_slow_path_trampoline:", " loadp Callee[cfr], t1", " andp MarkedBlockMask, t1", " loadp MarkedBlock::m_vm[t1], t1", " copyCalleeSavesToVMEntryFrameCalleeSavesBuffer(t1, t2)", " callSlowPath(_llint_slow_path_handle_exception)", " loadp Callee[cfr], t1", " andp MarkedBlockMask, t1", " loadp MarkedBlock::m_vm[t1], t1", " jmp VM::targetMachinePCForThrow[t1]", "_llint_throw_during_call_trampoline:", " preserveReturnAddressAfterCall(t2)", " jmp _llint_throw_from_slow_path_trampoline", "macro nativeCallTrampoline(executableOffsetToFunction)", " functionPrologue()", " storep 0, CodeBlock[cfr]", " loadp Callee[cfr], t0", " andp MarkedBlockMask, t0, t1", " loadp MarkedBlock::m_vm[t1], t1", " storep cfr, VM::topCallFrame[t1]", "if (ARM64 or C_LOOP)", " storep lr, ReturnPC[cfr]", "else", " skip", "end", " move cfr, a0", " loadp Callee[cfr], t1", " loadp JSFunction::m_executable[t1], t1", " checkStackPointerAlignment(t3, 3735879681)", "if C_LOOP", " cloopCallNative executableOffsetToFunction[t1]", "else", "if X86_64_WIN", " subp 32, sp", "else", " skip", "end", " call executableOffsetToFunction[t1]", "if X86_64_WIN", " addp 32, sp", "else", " skip", "end", "end", " loadp Callee[cfr], t3", " andp MarkedBlockMask, t3", " loadp MarkedBlock::m_vm[t3], t3", " btqnz VM::m_exception[t3], .handleException", " functionEpilogue()", " ret ", ".handleException:", " storep cfr, VM::topCallFrame[t3]", " jmp _llint_throw_from_slow_path_trampoline", "end", "macro getConstantScope(dst)", " loadpFromInstruction(6, t0)", " loadisFromInstruction(dst, t1)", " storeq t0, 0[cfr, t1, 8]", "end", "macro varInjectionCheck(slowPath)", " loadp CodeBlock[cfr], t0", " loadp CodeBlock::m_globalObject[t0], t0", " loadp JSGlobalObject::m_varInjectionWatchpoint[t0], t0", " bbeq WatchpointSet::m_state[t0], IsInvalidated, slowPath", "end", "macro resolveScope()", " loadisFromInstruction(5, t2)", " loadisFromInstruction(2, t0)", " loadp 0[cfr, t0, 8], t0", " btiz t2, .resolveScopeLoopEnd", ".resolveScopeLoop:", " loadp JSScope::m_next[t0], t0", " subi 1, t2", " btinz t2, .resolveScopeLoop", ".resolveScopeLoopEnd:", " loadisFromInstruction(1, t1)", " storeq t0, 0[cfr, t1, 8]", "end", "_llint_op_resolve_scope:", " traceExecution()", " loadisFromInstruction(4, t0)", " bineq t0, GlobalProperty, .rGlobalVar", " getConstantScope(1)", " dispatch(constexpr (op_resolve_scope_length))", ".rGlobalVar:", " bineq t0, GlobalVar, .rGlobalLexicalVar", " getConstantScope(1)", " dispatch(constexpr (op_resolve_scope_length))", ".rGlobalLexicalVar:", " bineq t0, GlobalLexicalVar, .rClosureVar", " getConstantScope(1)", " dispatch(constexpr (op_resolve_scope_length))", ".rClosureVar:", " bineq t0, ClosureVar, .rModuleVar", " resolveScope()", " dispatch(constexpr (op_resolve_scope_length))", ".rModuleVar:", " bineq t0, ModuleVar, .rGlobalPropertyWithVarInjectionChecks", " getConstantScope(1)", " dispatch(constexpr (op_resolve_scope_length))", ".rGlobalPropertyWithVarInjectionChecks:", " bineq t0, GlobalPropertyWithVarInjectionChecks, .rGlobalVarWithVarInjectionChecks", " varInjectionCheck(.rDynamic)", " getConstantScope(1)", " dispatch(constexpr (op_resolve_scope_length))", ".rGlobalVarWithVarInjectionChecks:", " bineq t0, GlobalVarWithVarInjectionChecks, .rGlobalLexicalVarWithVarInjectionChecks", " varInjectionCheck(.rDynamic)", " getConstantScope(1)", " dispatch(constexpr (op_resolve_scope_length))", ".rGlobalLexicalVarWithVarInjectionChecks:", " bineq t0, GlobalLexicalVarWithVarInjectionChecks, .rClosureVarWithVarInjectionChecks", " varInjectionCheck(.rDynamic)", " getConstantScope(1)", " dispatch(constexpr (op_resolve_scope_length))", ".rClosureVarWithVarInjectionChecks:", " bineq t0, ClosureVarWithVarInjectionChecks, .rDynamic", " varInjectionCheck(.rDynamic)", " resolveScope()", " dispatch(constexpr (op_resolve_scope_length))", ".rDynamic:", " callOpcodeSlowPath(_slow_path_resolve_scope)", " dispatch(constexpr (op_resolve_scope_length))", "macro loadWithStructureCheck(operand, slowPath)", " loadisFromInstruction(operand, t0)", " loadq 0[cfr, t0, 8], t0", " loadStructureWithScratch(t0, t2, t1)", " loadpFromInstruction(5, t1)", " bpneq t2, t1, slowPath", "end", "macro getProperty()", " loadisFromInstruction(6, t1)", " loadPropertyAtVariableOffset(t1, t0, t2)", " valueProfile(t2, 7, t0)", " loadisFromInstruction(1, t0)", " storeq t2, 0[cfr, t0, 8]", "end", "macro getGlobalVar(tdzCheckIfNecessary)", " loadpFromInstruction(6, t0)", " loadq 0[t0], t0", " tdzCheckIfNecessary(t0)", " valueProfile(t0, 7, t1)", " loadisFromInstruction(1, t1)", " storeq t0, 0[cfr, t1, 8]", "end", "macro getClosureVar()", " loadisFromInstruction(6, t1)", " loadq JSEnvironmentRecord_variables[t0, t1, 8], t0", " valueProfile(t0, 7, t1)", " loadisFromInstruction(1, t1)", " storeq t0, 0[cfr, t1, 8]", "end", "_llint_op_get_from_scope:", " traceExecution()", " loadisFromInstruction(4, t0)", " andi ResolveTypeMask, t0", " bineq t0, GlobalProperty, .gGlobalVar", " loadWithStructureCheck(2, .gDynamic)", " getProperty()", " dispatch(constexpr (op_get_from_scope_length))", ".gGlobalVar:", " bineq t0, GlobalVar, .gGlobalLexicalVar", " getGlobalVar(macro (v)", "", "end)", " dispatch(constexpr (op_get_from_scope_length))", ".gGlobalLexicalVar:", " bineq t0, GlobalLexicalVar, .gClosureVar", " getGlobalVar(macro (value)", " bqeq value, ValueEmpty, .gDynamic", "end)", " dispatch(constexpr (op_get_from_scope_length))", ".gClosureVar:", " bineq t0, ClosureVar, .gGlobalPropertyWithVarInjectionChecks", " loadVariable(2, t0)", " getClosureVar()", " dispatch(constexpr (op_get_from_scope_length))", ".gGlobalPropertyWithVarInjectionChecks:", " bineq t0, GlobalPropertyWithVarInjectionChecks, .gGlobalVarWithVarInjectionChecks", " loadWithStructureCheck(2, .gDynamic)", " getProperty()", " dispatch(constexpr (op_get_from_scope_length))", ".gGlobalVarWithVarInjectionChecks:", " bineq t0, GlobalVarWithVarInjectionChecks, .gGlobalLexicalVarWithVarInjectionChecks", " varInjectionCheck(.gDynamic)", " getGlobalVar(macro (v)", "", "end)", " dispatch(constexpr (op_get_from_scope_length))", ".gGlobalLexicalVarWithVarInjectionChecks:", " bineq t0, GlobalLexicalVarWithVarInjectionChecks, .gClosureVarWithVarInjectionChecks", " varInjectionCheck(.gDynamic)", " getGlobalVar(macro (value)", " bqeq value, ValueEmpty, .gDynamic", "end)", " dispatch(constexpr (op_get_from_scope_length))", ".gClosureVarWithVarInjectionChecks:", " bineq t0, ClosureVarWithVarInjectionChecks, .gDynamic", " varInjectionCheck(.gDynamic)", " loadVariable(2, t0)", " getClosureVar()", " dispatch(constexpr (op_get_from_scope_length))", ".gDynamic:", " callOpcodeSlowPath(_llint_slow_path_get_from_scope)", " dispatch(constexpr (op_get_from_scope_length))", "macro putProperty()", " loadisFromInstruction(3, t1)", " loadConstantOrVariable(t1, t2)", " loadisFromInstruction(6, t1)", " storePropertyAtVariableOffset(t1, t0, t2, t3)", "end", "macro putGlobalVariable()", " loadisFromInstruction(3, t0)", " loadConstantOrVariable(t0, t1)", " loadpFromInstruction(5, t2)", " loadpFromInstruction(6, t0)", " notifyWrite(t2, .pDynamic)", " storeq t1, 0[t0]", "end", "macro putClosureVar()", " loadisFromInstruction(3, t1)", " loadConstantOrVariable(t1, t2)", " loadisFromInstruction(6, t1)", " storeq t2, JSEnvironmentRecord_variables[t0, t1, 8]", "end", "macro putLocalClosureVar()", " loadisFromInstruction(3, t1)", " loadConstantOrVariable(t1, t2)", " loadpFromInstruction(5, t3)", " btpz t3, .noVariableWatchpointSet", " notifyWrite(t3, .pDynamic)", ".noVariableWatchpointSet:", " loadisFromInstruction(6, t1)", " storeq t2, JSEnvironmentRecord_variables[t0, t1, 8]", "end", "macro checkTDZInGlobalPutToScopeIfNecessary()", " loadisFromInstruction(4, t0)", " andi InitializationModeMask, t0", " rshifti InitializationModeShift, t0", " bineq t0, NotInitialization, .noNeedForTDZCheck", " loadpFromInstruction(6, t0)", " loadq 0[t0], t0", " bqeq t0, ValueEmpty, .pDynamic", ".noNeedForTDZCheck:", "end", "_llint_op_put_to_scope:", " traceExecution()", " loadisFromInstruction(4, t0)", " andi ResolveTypeMask, t0", " bineq t0, LocalClosureVar, .pGlobalProperty", " loadVariable(1, t0)", " putLocalClosureVar()", " writeBarrierOnOperands(1, 3)", " dispatch(constexpr (op_put_to_scope_length))", ".pGlobalProperty:", " bineq t0, GlobalProperty, .pGlobalVar", " loadWithStructureCheck(1, .pDynamic)", " putProperty()", " writeBarrierOnOperands(1, 3)", " dispatch(constexpr (op_put_to_scope_length))", ".pGlobalVar:", " bineq t0, GlobalVar, .pGlobalLexicalVar", " writeBarrierOnGlobalObject(3)", " putGlobalVariable()", " dispatch(constexpr (op_put_to_scope_length))", ".pGlobalLexicalVar:", " bineq t0, GlobalLexicalVar, .pClosureVar", " writeBarrierOnGlobalLexicalEnvironment(3)", " checkTDZInGlobalPutToScopeIfNecessary()", " putGlobalVariable()", " dispatch(constexpr (op_put_to_scope_length))", ".pClosureVar:", " bineq t0, ClosureVar, .pGlobalPropertyWithVarInjectionChecks", " loadVariable(1, t0)", " putClosureVar()", " writeBarrierOnOperands(1, 3)", " dispatch(constexpr (op_put_to_scope_length))", ".pGlobalPropertyWithVarInjectionChecks:", " bineq t0, GlobalPropertyWithVarInjectionChecks, .pGlobalVarWithVarInjectionChecks", " loadWithStructureCheck(1, .pDynamic)", " putProperty()", " writeBarrierOnOperands(1, 3)", " dispatch(constexpr (op_put_to_scope_length))", ".pGlobalVarWithVarInjectionChecks:", " bineq t0, GlobalVarWithVarInjectionChecks, .pGlobalLexicalVarWithVarInjectionChecks", " writeBarrierOnGlobalObject(3)", " varInjectionCheck(.pDynamic)", " putGlobalVariable()", " dispatch(constexpr (op_put_to_scope_length))", ".pGlobalLexicalVarWithVarInjectionChecks:", " bineq t0, GlobalLexicalVarWithVarInjectionChecks, .pClosureVarWithVarInjectionChecks", " writeBarrierOnGlobalLexicalEnvironment(3)", " varInjectionCheck(.pDynamic)", " checkTDZInGlobalPutToScopeIfNecessary()", " putGlobalVariable()", " dispatch(constexpr (op_put_to_scope_length))", ".pClosureVarWithVarInjectionChecks:", " bineq t0, ClosureVarWithVarInjectionChecks, .pModuleVar", " varInjectionCheck(.pDynamic)", " loadVariable(1, t0)", " putClosureVar()", " writeBarrierOnOperands(1, 3)", " dispatch(constexpr (op_put_to_scope_length))", ".pModuleVar:", " bineq t0, ModuleVar, .pDynamic", " callOpcodeSlowPath(_slow_path_throw_strict_mode_readonly_property_write_error)", " dispatch(constexpr (op_put_to_scope_length))", ".pDynamic:", " callOpcodeSlowPath(_llint_slow_path_put_to_scope)", " dispatch(constexpr (op_put_to_scope_length))", "_llint_op_get_from_arguments:", " traceExecution()", " loadVariable(2, t0)", " loadi 24[PB, PC, 8], t1", " loadq DirectArguments_storage[t0, t1, 8], t0", " valueProfile(t0, 4, t1)", " loadisFromInstruction(1, t1)", " storeq t0, 0[cfr, t1, 8]", " dispatch(constexpr (op_get_from_arguments_length))", "_llint_op_put_to_arguments:", " traceExecution()", " loadVariable(1, t0)", " loadi 16[PB, PC, 8], t1", " loadisFromInstruction(3, t3)", " loadConstantOrVariable(t3, t2)", " storeq t2, DirectArguments_storage[t0, t1, 8]", " writeBarrierOnOperands(1, 3)", " dispatch(constexpr (op_put_to_arguments_length))", "_llint_op_get_parent_scope:", " traceExecution()", " loadVariable(2, t0)", " loadp JSScope::m_next[t0], t0", " loadisFromInstruction(1, t1)", " storeq t0, 0[cfr, t1, 8]", " dispatch(constexpr (op_get_parent_scope_length))", "_llint_op_profile_type:", " traceExecution()", " loadp CodeBlock[cfr], t1", " loadp CodeBlock::m_vm[t1], t1", " loadp VM::m_typeProfilerLog[t1], t1", " loadp TypeProfilerLog::m_currentLogEntryPtr[t1], t2", " loadisFromInstruction(1, t3)", " loadConstantOrVariable(t3, t0)", " bqeq t0, ValueEmpty, .opProfileTypeDone", " storeq t0, TypeProfilerLog::LogEntry::value[t2]", " loadpFromInstruction(2, t3)", " storep t3, TypeProfilerLog::LogEntry::location[t2]", " btqz t0, tagMask, .opProfileTypeIsCell", " storei 0, TypeProfilerLog::LogEntry::structureID[t2]", " jmp .opProfileTypeSkipIsCell", ".opProfileTypeIsCell:", " loadi JSCell::m_structureID[t0], t3", " storei t3, TypeProfilerLog::LogEntry::structureID[t2]", ".opProfileTypeSkipIsCell:", " addp sizeof TypeProfilerLog::LogEntry, t2", " storep t2, TypeProfilerLog::m_currentLogEntryPtr[t1]", " loadp TypeProfilerLog::m_logEndPtr[t1], t1", " bpneq t2, t1, .opProfileTypeDone", " callOpcodeSlowPath(_slow_path_profile_type_clear_log)", ".opProfileTypeDone:", " dispatch(constexpr (op_profile_type_length))", "_llint_op_profile_control_flow:", " traceExecution()", " loadpFromInstruction(1, t0)", " addq 1, BasicBlockLocation::m_executionCount[t0]", " dispatch(constexpr (op_profile_control_flow_length))", "_llint_op_get_rest_length:", " traceExecution()", " loadi (PayloadOffset + ArgumentCount)[cfr], t0", " subi 1, t0", " loadisFromInstruction(2, t1)", " bilteq t0, t1, .storeZero", " subi t1, t0", " jmp .boxUp", ".storeZero:", " move 0, t0", ".boxUp:", " orq tagTypeNumber, t0", " loadisFromInstruction(1, t1)", " storeq t0, 0[cfr, t1, 8]", " dispatch(constexpr (op_get_rest_length_length))", "_llint_op_log_shadow_chicken_prologue:", " traceExecution()", " acquireShadowChickenPacket(.opLogShadowChickenPrologueSlow)", " storep cfr, ShadowChicken::Packet::frame[t0]", " loadp CallerFrame[cfr], t1", " storep t1, ShadowChicken::Packet::callerFrame[t0]", " loadp Callee[cfr], t1", " storep t1, ShadowChicken::Packet::callee[t0]", " loadVariable(1, t1)", " storep t1, ShadowChicken::Packet::scope[t0]", " dispatch(constexpr (op_log_shadow_chicken_prologue_length))", ".opLogShadowChickenPrologueSlow:", " callOpcodeSlowPath(_llint_slow_path_log_shadow_chicken_prologue)", " dispatch(constexpr (op_log_shadow_chicken_prologue_length))", "_llint_op_log_shadow_chicken_tail:", " traceExecution()", " acquireShadowChickenPacket(.opLogShadowChickenTailSlow)", " storep cfr, ShadowChicken::Packet::frame[t0]", " storep ShadowChickenTailMarker, ShadowChicken::Packet::callee[t0]", " loadVariable(1, t1)", " storep t1, ShadowChicken::Packet::thisValue[t0]", " loadVariable(2, t1)", " storep t1, ShadowChicken::Packet::scope[t0]", " loadp CodeBlock[cfr], t1", " storep t1, ShadowChicken::Packet::codeBlock[t0]", " storei PC, ShadowChicken::Packet::callSiteIndex[t0]", " dispatch(constexpr (op_log_shadow_chicken_tail_length))", ".opLogShadowChickenTailSlow:", " callOpcodeSlowPath(_llint_slow_path_log_shadow_chicken_tail)", " dispatch(constexpr (op_log_shadow_chicken_tail_length))", "else", "macro dispatch(advance)", " addp (advance * 4), PC", " jmp 0[PC]", "end", "macro dispatchBranchWithOffset(pcOffset)", " lshifti 2, pcOffset", " addp pcOffset, PC", " jmp 0[PC]", "end", "macro dispatchBranch(pcOffset)", " loadi pcOffset, t0", " dispatchBranchWithOffset(t0)", "end", "macro dispatchAfterCall()", " loadi (ArgumentCount + TagOffset)[cfr], PC", " loadi 4[PC], t3", " storei r1, TagOffset[cfr, t3, 8]", " storei r0, PayloadOffset[cfr, t3, 8]", " valueProfile(r1, r0, (4 * (CallOpCodeSize - 1)), t3)", " dispatch(CallOpCodeSize)", "end", "macro cCall2(function)", "if (((ARM or ARMv7) or ARMv7_TRADITIONAL) or MIPS)", " call function", "else", "if (X86 or X86_WIN)", " subp 8, sp", " push a1", " push a0", " call function", " addp 16, sp", "else", "if C_LOOP", " cloopCallSlowPath function, a0, a1", "else", " error", "end", "end", "end", "end", "macro cCall2Void(function)", "if C_LOOP", " cloopCallSlowPathVoid function, a0, a1", "else", " cCall2(function)", "end", "end", "macro cCall4(function)", "if (((ARM or ARMv7) or ARMv7_TRADITIONAL) or MIPS)", " call function", "else", "if (X86 or X86_WIN)", " push a3", " push a2", " push a1", " push a0", " call function", " addp 16, sp", "else", "if C_LOOP", " error", "else", " error", "end", "end", "end", "end", "macro callSlowPath(slowPath)", " move cfr, a0", " move PC, a1", " cCall2(slowPath)", " move r0, PC", "end", "macro doVMEntry(makeCall)", " functionPrologue()", " pushCalleeSaves()", "if (X86 or X86_WIN)", " loadp 16[cfr], a2", " loadp 12[cfr], a1", " loadp 8[cfr], a0", "else", " skip", "end", "const entry = a0", "const vm = a1", "const protoCallFrame = a2", "if ARMv7", " vmEntryRecord(cfr, t3)", " move t3, sp", "else", " vmEntryRecord(cfr, sp)", "end", " storep vm, VMEntryRecord::m_vm[sp]", " loadp VM::topCallFrame[vm], t4", " storep t4, VMEntryRecord::m_prevTopCallFrame[sp]", " loadp VM::topVMEntryFrame[vm], t4", " storep t4, VMEntryRecord::m_prevTopVMEntryFrame[sp]", "if (X86_WIN or MIPS)", " addp (CallFrameAlignSlots * SlotSize), sp, t3", " andp (~StackAlignmentMask), t3", " subp t3, (CallFrameAlignSlots * SlotSize), sp", "else", "if ((ARM or ARMv7) or ARMv7_TRADITIONAL)", " addp (CallFrameAlignSlots * SlotSize), sp, t3", " clrbp t3, StackAlignmentMask, t3", "if ARMv7", " subp t3, (CallFrameAlignSlots * SlotSize), t3", " move t3, sp", "else", " subp t3, (CallFrameAlignSlots * SlotSize), sp", "end", "else", " skip", "end", "end", " loadi ProtoCallFrame::paddedArgCount[protoCallFrame], t4", " addp CallFrameHeaderSlots, t4, t4", " lshiftp 3, t4", " subp sp, t4, t3", " bpa t3, sp, .throwStackOverflow", "if C_LOOP", " bpaeq t3, VM::m_cloopStackLimit[vm], .stackHeightOK", "else", " bpaeq t3, VM::m_softStackLimit[vm], .stackHeightOK", "end", "if C_LOOP", " move entry, t4", " move vm, t5", " cloopCallSlowPath _llint_stack_check_at_vm_entry, vm, t3", " bpeq t0, 0, .stackCheckFailed", " move t4, entry", " move t5, vm", " jmp .stackHeightOK", ".stackCheckFailed:", " move t4, entry", " move t5, vm", "else", " skip", "end", ".throwStackOverflow:", " subp 8, sp", " move vm, a0", " move protoCallFrame, a1", " cCall2(_llint_throw_stack_overflow_error)", "if ARMv7", " vmEntryRecord(cfr, t3)", " move t3, sp", "else", " vmEntryRecord(cfr, sp)", "end", " loadp VMEntryRecord::m_vm[sp], t5", " loadp VMEntryRecord::m_prevTopCallFrame[sp], t4", " storep t4, VM::topCallFrame[t5]", " loadp VMEntryRecord::m_prevTopVMEntryFrame[sp], t4", " storep t4, VM::topVMEntryFrame[t5]", "if ARMv7", " subp cfr, CalleeRegisterSaveSize, t5", " move t5, sp", "else", " subp cfr, CalleeRegisterSaveSize, sp", "end", " popCalleeSaves()", " functionEpilogue()", " ret ", ".stackHeightOK:", " move t3, sp", " move 4, t3", ".copyHeaderLoop:", " subi 1, t3", " loadi TagOffset[protoCallFrame, t3, 8], t5", " storei t5, (TagOffset + CodeBlock)[sp, t3, 8]", " loadi PayloadOffset[protoCallFrame, t3, 8], t5", " storei t5, (PayloadOffset + CodeBlock)[sp, t3, 8]", " btinz t3, .copyHeaderLoop", " loadi (PayloadOffset + ProtoCallFrame::argCountAndCodeOriginValue)[protoCallFrame], t4", " subi 1, t4", " loadi ProtoCallFrame::paddedArgCount[protoCallFrame], t5", " subi 1, t5", " bieq t4, t5, .copyArgs", ".fillExtraArgsLoop:", " subi 1, t5", " storei UndefinedTag, ((ThisArgumentOffset + 8) + TagOffset)[sp, t5, 8]", " storei 0, ((ThisArgumentOffset + 8) + PayloadOffset)[sp, t5, 8]", " bineq t4, t5, .fillExtraArgsLoop", ".copyArgs:", " loadp ProtoCallFrame::args[protoCallFrame], t3", ".copyArgsLoop:", " btiz t4, .copyArgsDone", " subi 1, t4", " loadi TagOffset[t3, t4, 8], t5", " storei t5, ((ThisArgumentOffset + 8) + TagOffset)[sp, t4, 8]", " loadi PayloadOffset[t3, t4, 8], t5", " storei t5, ((ThisArgumentOffset + 8) + PayloadOffset)[sp, t4, 8]", " jmp .copyArgsLoop", ".copyArgsDone:", " storep sp, VM::topCallFrame[vm]", " storep cfr, VM::topVMEntryFrame[vm]", " makeCall(entry, t3, t4)", "if ARMv7", " vmEntryRecord(cfr, t3)", " move t3, sp", "else", " vmEntryRecord(cfr, sp)", "end", " loadp VMEntryRecord::m_vm[sp], t5", " loadp VMEntryRecord::m_prevTopCallFrame[sp], t4", " storep t4, VM::topCallFrame[t5]", " loadp VMEntryRecord::m_prevTopVMEntryFrame[sp], t4", " storep t4, VM::topVMEntryFrame[t5]", "if ARMv7", " subp cfr, CalleeRegisterSaveSize, t5", " move t5, sp", "else", " subp cfr, CalleeRegisterSaveSize, sp", "end", " popCalleeSaves()", " functionEpilogue()", " ret ", "end", "macro makeJavaScriptCall(entry, temp, unused)", " addp CallerFrameAndPCSize, sp", " checkStackPointerAlignment(temp, 3134249986)", "if C_LOOP", " cloopCallJSFunction entry", "else", " call entry", "end", " checkStackPointerAlignment(temp, 3134249987)", " subp CallerFrameAndPCSize, sp", "end", "macro makeHostFunctionCall(entry, temp1, temp2)", " move entry, temp1", " storep cfr, 0[sp]", "if C_LOOP", " move sp, a0", " storep lr, PtrSize[sp]", " cloopCallNative temp1", "else", "if (X86 or X86_WIN)", " move 0, temp2", " move temp2, 4[sp]", " move sp, a0", " push temp2", " push a0", " call temp1", " addp 8, sp", "else", " move sp, a0", " call temp1", "end", "end", "end", "_handleUncaughtException:", " loadp (Callee + PayloadOffset)[cfr], t3", " andp MarkedBlockMask, t3", " loadp MarkedBlock::m_vm[t3], t3", " restoreCalleeSavesFromVMEntryFrameCalleeSavesBuffer(t3, t0)", " loadp VM::callFrameForCatch[t3], cfr", " storep 0, VM::callFrameForCatch[t3]", " loadp CallerFrame[cfr], cfr", "if ARMv7", " vmEntryRecord(cfr, t3)", " move t3, sp", "else", " vmEntryRecord(cfr, sp)", "end", " loadp VMEntryRecord::m_vm[sp], t3", " loadp VMEntryRecord::m_prevTopCallFrame[sp], t5", " storep t5, VM::topCallFrame[t3]", " loadp VMEntryRecord::m_prevTopVMEntryFrame[sp], t5", " storep t5, VM::topVMEntryFrame[t3]", "if ARMv7", " subp cfr, CalleeRegisterSaveSize, t3", " move t3, sp", "else", " subp cfr, CalleeRegisterSaveSize, sp", "end", " popCalleeSaves()", " functionEpilogue()", " ret ", "macro doReturnFromHostFunction(extraStackSpace)", " functionEpilogue(extraStackSpace)", " ret ", "end", "macro traceOperand(fromWhere, operand)", " move fromWhere, a2", " move operand, a3", " move cfr, a0", " move PC, a1", " cCall4(_llint_trace_operand)", " move r0, PC", " move r1, cfr", "end", "macro traceValue(fromWhere, operand)", " move fromWhere, a2", " move operand, a3", " move cfr, a0", " move PC, a1", " cCall4(_llint_trace_value)", " move r0, PC", " move r1, cfr", "end", "macro callCallSlowPath(slowPath, action)", " storep PC, (ArgumentCount + TagOffset)[cfr]", " move cfr, a0", " move PC, a1", " cCall2(slowPath)", " action(r0, r1)", "end", "macro callTrapHandler(throwHandler)", " storei PC, (ArgumentCount + TagOffset)[cfr]", " move cfr, a0", " move PC, a1", " cCall2(_llint_slow_path_handle_traps)", " btpnz r0, throwHandler", " loadi (ArgumentCount + TagOffset)[cfr], PC", "end", "macro checkSwitchToJITForLoop()", " checkSwitchToJIT(1, macro ()", " storei PC, (ArgumentCount + TagOffset)[cfr]", " move cfr, a0", " move PC, a1", " cCall2(_llint_loop_osr)", " btpz r0, .recover", " move r1, sp", " jmp r0", ".recover:", " loadi (ArgumentCount + TagOffset)[cfr], PC", "end)", "end", "macro loadVariable(operand, index, tag, payload)", " loadisFromInstruction(operand, index)", " loadi TagOffset[cfr, index, 8], tag", " loadi PayloadOffset[cfr, index, 8], payload", "end", "macro loadConstantOrVariable(index, tag, payload)", " bigteq index, FirstConstantRegisterIndex, .constant", " loadi TagOffset[cfr, index, 8], tag", " loadi PayloadOffset[cfr, index, 8], payload", " jmp .done", ".constant:", " loadp CodeBlock[cfr], payload", " loadp (CodeBlock::m_constantRegisters + VectorBufferOffset)[payload], payload", " loadp TagOffset[payload, index, 8], tag", " loadp PayloadOffset[payload, index, 8], payload", ".done:", "end", "macro loadConstantOrVariableTag(index, tag)", " bigteq index, FirstConstantRegisterIndex, .constant", " loadi TagOffset[cfr, index, 8], tag", " jmp .done", ".constant:", " loadp CodeBlock[cfr], tag", " loadp (CodeBlock::m_constantRegisters + VectorBufferOffset)[tag], tag", " loadp TagOffset[tag, index, 8], tag", ".done:", "end", "macro loadConstantOrVariable2Reg(index, tag, payload)", " bigteq index, FirstConstantRegisterIndex, .constant", " loadi TagOffset[cfr, index, 8], tag", " loadi PayloadOffset[cfr, index, 8], payload", " jmp .done", ".constant:", " loadp CodeBlock[cfr], tag", " loadp (CodeBlock::m_constantRegisters + VectorBufferOffset)[tag], tag", " lshifti 3, index", " addp index, tag", " loadp PayloadOffset[tag], payload", " loadp TagOffset[tag], tag", ".done:", "end", "macro loadConstantOrVariablePayloadTagCustom(index, tagCheck, payload)", " bigteq index, FirstConstantRegisterIndex, .constant", " tagCheck(TagOffset[cfr, index, 8])", " loadi PayloadOffset[cfr, index, 8], payload", " jmp .done", ".constant:", " loadp CodeBlock[cfr], payload", " loadp (CodeBlock::m_constantRegisters + VectorBufferOffset)[payload], payload", " tagCheck(TagOffset[payload, index, 8])", " loadp PayloadOffset[payload, index, 8], payload", ".done:", "end", "macro loadConstantOrVariablePayload(index, expectedTag, payload, slow)", " loadConstantOrVariablePayloadTagCustom(index, macro (actualTag)", " bineq actualTag, expectedTag, slow", "end, payload)", "end", "macro loadConstantOrVariablePayloadUnchecked(index, payload)", " loadConstantOrVariablePayloadTagCustom(index, macro (actualTag)", "", "end, payload)", "end", "macro writeBarrierOnOperand(cellOperand)", " loadisFromInstruction(cellOperand, t1)", " loadConstantOrVariablePayload(t1, CellTag, t2, .writeBarrierDone)", " skipIfIsRememberedOrInEden(t2, macro ()", " push cfr, PC", " subp 8, sp", " move t2, a1", " move cfr, a0", " cCall2Void(_llint_write_barrier_slow)", " addp 8, sp", " pop PC, cfr", "end)", ".writeBarrierDone:", "end", "macro writeBarrierOnOperands(cellOperand, valueOperand)", " loadisFromInstruction(valueOperand, t1)", " loadConstantOrVariableTag(t1, t0)", " bineq t0, CellTag, .writeBarrierDone", " writeBarrierOnOperand(cellOperand)", ".writeBarrierDone:", "end", "macro writeBarrierOnGlobal(valueOperand, loadHelper)", " loadisFromInstruction(valueOperand, t1)", " loadConstantOrVariableTag(t1, t0)", " bineq t0, CellTag, .writeBarrierDone", " loadHelper(t3)", " skipIfIsRememberedOrInEden(t3, macro ()", " push cfr, PC", " subp 8, sp", " move cfr, a0", " move t3, a1", " cCall2Void(_llint_write_barrier_slow)", " addp 8, sp", " pop PC, cfr", "end)", ".writeBarrierDone:", "end", "macro writeBarrierOnGlobalObject(valueOperand)", " writeBarrierOnGlobal(valueOperand, macro (registerToStoreGlobal)", " loadp CodeBlock[cfr], registerToStoreGlobal", " loadp CodeBlock::m_globalObject[registerToStoreGlobal], registerToStoreGlobal", "end)", "end", "macro writeBarrierOnGlobalLexicalEnvironment(valueOperand)", " writeBarrierOnGlobal(valueOperand, macro (registerToStoreGlobal)", " loadp CodeBlock[cfr], registerToStoreGlobal", " loadp CodeBlock::m_globalObject[registerToStoreGlobal], registerToStoreGlobal", " loadp JSGlobalObject::m_globalLexicalEnvironment[registerToStoreGlobal], registerToStoreGlobal", "end)", "end", "macro valueProfile(tag, payload, operand, scratch)", " loadp operand[PC], scratch", " storei tag, (ValueProfile::m_buckets + TagOffset)[scratch]", " storei payload, (ValueProfile::m_buckets + PayloadOffset)[scratch]", "end", "macro functionArityCheck(doneLabel, slowPath)", " loadi (PayloadOffset + ArgumentCount)[cfr], t0", " biaeq t0, CodeBlock::m_numParameters[t1], doneLabel", " move cfr, a0", " move PC, a1", " cCall2(slowPath)", " btiz r0, .noError", " move r1, cfr", " jmp _llint_throw_from_slow_path_trampoline", ".noError:", " loadp CommonSlowPaths::ArityCheckData::thunkToCall[r1], t3", " btpz t3, .proceedInline", " loadp CommonSlowPaths::ArityCheckData::paddedStackSpace[r1], a0", " call t3", "if ASSERT_ENABLED", " loadp ReturnPC[cfr], t0", " loadp 0[t0], t0", "else", " skip", "end", " jmp .continue", ".proceedInline:", " loadi CommonSlowPaths::ArityCheckData::paddedStackSpace[r1], t1", " btiz t1, .continue", " loadi (PayloadOffset + ArgumentCount)[cfr], t2", " addi CallFrameHeaderSlots, t2", " move t1, t3", " andi (StackAlignmentSlots - 1), t3", " btiz t3, .noExtraSlot", ".fillExtraSlots:", " move 0, t0", " storei t0, PayloadOffset[cfr, t2, 8]", " move UndefinedTag, t0", " storei t0, TagOffset[cfr, t2, 8]", " addi 1, t2", " bsubinz 1, t3, .fillExtraSlots", " andi (~(StackAlignmentSlots - 1)), t1", " btiz t1, .continue", ".noExtraSlot:", " negi t1", " move cfr, t3", " move t1, t0", " lshiftp 3, t0", " addp t0, cfr", " addp t0, sp", ".copyLoop:", " loadi PayloadOffset[t3], t0", " storei t0, PayloadOffset[t3, t1, 8]", " loadi TagOffset[t3], t0", " storei t0, TagOffset[t3, t1, 8]", " addp 8, t3", " bsubinz 1, t2, .copyLoop", " move t1, t2", ".fillLoop:", " move 0, t0", " storei t0, PayloadOffset[t3, t1, 8]", " move UndefinedTag, t0", " storei t0, TagOffset[t3, t1, 8]", " addp 8, t3", " baddinz 1, t2, .fillLoop", ".continue:", " loadp CodeBlock[cfr], t1", " loadp CodeBlock::m_instructions[t1], PC", " jmp doneLabel", "end", "macro branchIfException(label)", " loadp (Callee + PayloadOffset)[cfr], t3", " andp MarkedBlockMask, t3", " loadp MarkedBlock::m_vm[t3], t3", " btiz VM::m_exception[t3], .noException", " jmp label", ".noException:", "end", "_llint_op_enter:", " traceExecution()", " checkStackPointerAlignment(t2, 3735879905)", " loadp CodeBlock[cfr], t2", " loadi CodeBlock::m_numVars[t2], t2", " btiz t2, .opEnterDone", " move UndefinedTag, t0", " move 0, t1", " negi t2", ".opEnterLoop:", " storei t0, TagOffset[cfr, t2, 8]", " storei t1, PayloadOffset[cfr, t2, 8]", " addi 1, t2", " btinz t2, .opEnterLoop", ".opEnterDone:", " callOpcodeSlowPath(_slow_path_enter)", " dispatch(constexpr (op_enter_length))", "_llint_op_get_argument:", " traceExecution()", " loadisFromInstruction(1, t1)", " loadisFromInstruction(2, t2)", " loadi (PayloadOffset + ArgumentCount)[cfr], t0", " bilteq t0, t2, .opGetArgumentOutOfBounds", " loadi (ThisArgumentOffset + TagOffset)[cfr, t2, 8], t0", " loadi (ThisArgumentOffset + PayloadOffset)[cfr, t2, 8], t3", " storei t0, TagOffset[cfr, t1, 8]", " storei t3, PayloadOffset[cfr, t1, 8]", " valueProfile(t0, t3, 12, t1)", " dispatch(constexpr (op_get_argument_length))", ".opGetArgumentOutOfBounds:", " storei UndefinedTag, TagOffset[cfr, t1, 8]", " storei 0, PayloadOffset[cfr, t1, 8]", " valueProfile(UndefinedTag, 0, 12, t1)", " dispatch(constexpr (op_get_argument_length))", "_llint_op_argument_count:", " traceExecution()", " loadisFromInstruction(1, t2)", " loadi (PayloadOffset + ArgumentCount)[cfr], t0", " subi 1, t0", " move Int32Tag, t1", " storei t1, TagOffset[cfr, t2, 8]", " storei t0, PayloadOffset[cfr, t2, 8]", " dispatch(constexpr (op_argument_count_length))", "_llint_op_get_scope:", " traceExecution()", " loadi (Callee + PayloadOffset)[cfr], t0", " loadi JSCallee::m_scope[t0], t0", " loadisFromInstruction(1, t1)", " storei CellTag, TagOffset[cfr, t1, 8]", " storei t0, PayloadOffset[cfr, t1, 8]", " dispatch(constexpr (op_get_scope_length))", "_llint_op_to_this:", " traceExecution()", " loadi 4[PC], t0", " bineq TagOffset[cfr, t0, 8], CellTag, .opToThisSlow", " loadi PayloadOffset[cfr, t0, 8], t0", " bbneq JSCell::m_type[t0], FinalObjectType, .opToThisSlow", " loadpFromInstruction(2, t2)", " bpneq JSCell::m_structureID[t0], t2, .opToThisSlow", " dispatch(constexpr (op_to_this_length))", ".opToThisSlow:", " callOpcodeSlowPath(_slow_path_to_this)", " dispatch(constexpr (op_to_this_length))", "_llint_op_check_tdz:", " traceExecution()", " loadisFromInstruction(1, t0)", " loadConstantOrVariableTag(t0, t1)", " bineq t1, EmptyValueTag, .opNotTDZ", " callOpcodeSlowPath(_slow_path_throw_tdz_error)", ".opNotTDZ:", " dispatch(constexpr (op_check_tdz_length))", "_llint_op_mov:", " traceExecution()", " loadi 8[PC], t1", " loadi 4[PC], t0", " loadConstantOrVariable(t1, t2, t3)", " storei t2, TagOffset[cfr, t0, 8]", " storei t3, PayloadOffset[cfr, t0, 8]", " dispatch(constexpr (op_mov_length))", "_llint_op_not:", " traceExecution()", " loadi 8[PC], t0", " loadi 4[PC], t1", " loadConstantOrVariable(t0, t2, t3)", " bineq t2, BooleanTag, .opNotSlow", " xori 1, t3", " storei t2, TagOffset[cfr, t1, 8]", " storei t3, PayloadOffset[cfr, t1, 8]", " dispatch(constexpr (op_not_length))", ".opNotSlow:", " callOpcodeSlowPath(_slow_path_not)", " dispatch(constexpr (op_not_length))", "_llint_op_eq:", " traceExecution()", " loadi 12[PC], t2", " loadi 8[PC], t0", " loadConstantOrVariable(t2, t3, t1)", " loadConstantOrVariable2Reg(t0, t2, t0)", " bineq t2, t3, .opEqSlow", " bieq t2, CellTag, .opEqSlow", " bib t2, LowestTag, .opEqSlow", " loadi 4[PC], t2", " cieq t0, t1, t0", " storei BooleanTag, TagOffset[cfr, t2, 8]", " storei t0, PayloadOffset[cfr, t2, 8]", " dispatch(constexpr (op_eq_length))", ".opEqSlow:", " callOpcodeSlowPath(_slow_path_eq)", " dispatch(constexpr (op_eq_length))", "_llint_op_eq_null:", " traceExecution()", " loadi 8[PC], t0", " loadi 4[PC], t3", " assertNotConstant(t0)", " loadi TagOffset[cfr, t0, 8], t1", " loadi PayloadOffset[cfr, t0, 8], t0", " bineq t1, CellTag, .opEqNullImmediate", " btbnz JSCell::m_flags[t0], MasqueradesAsUndefined, .opEqNullMasqueradesAsUndefined", " move 0, t1", " jmp .opEqNullNotImmediate", ".opEqNullMasqueradesAsUndefined:", " loadp JSCell::m_structureID[t0], t1", " loadp CodeBlock[cfr], t0", " loadp CodeBlock::m_globalObject[t0], t0", " cpeq Structure::m_globalObject[t1], t0, t1", " jmp .opEqNullNotImmediate", ".opEqNullImmediate:", " cieq t1, NullTag, t2", " cieq t1, UndefinedTag, t1", " ori t2, t1", ".opEqNullNotImmediate:", " storei BooleanTag, TagOffset[cfr, t3, 8]", " storei t1, PayloadOffset[cfr, t3, 8]", " dispatch(constexpr (op_eq_null_length))", "_llint_op_neq:", " traceExecution()", " loadi 12[PC], t2", " loadi 8[PC], t0", " loadConstantOrVariable(t2, t3, t1)", " loadConstantOrVariable2Reg(t0, t2, t0)", " bineq t2, t3, .opNeqSlow", " bieq t2, CellTag, .opNeqSlow", " bib t2, LowestTag, .opNeqSlow", " loadi 4[PC], t2", " cineq t0, t1, t0", " storei BooleanTag, TagOffset[cfr, t2, 8]", " storei t0, PayloadOffset[cfr, t2, 8]", " dispatch(constexpr (op_neq_length))", ".opNeqSlow:", " callOpcodeSlowPath(_slow_path_neq)", " dispatch(constexpr (op_neq_length))", "_llint_op_neq_null:", " traceExecution()", " loadi 8[PC], t0", " loadi 4[PC], t3", " assertNotConstant(t0)", " loadi TagOffset[cfr, t0, 8], t1", " loadi PayloadOffset[cfr, t0, 8], t0", " bineq t1, CellTag, .opNeqNullImmediate", " btbnz JSCell::m_flags[t0], MasqueradesAsUndefined, .opNeqNullMasqueradesAsUndefined", " move 1, t1", " jmp .opNeqNullNotImmediate", ".opNeqNullMasqueradesAsUndefined:", " loadp JSCell::m_structureID[t0], t1", " loadp CodeBlock[cfr], t0", " loadp CodeBlock::m_globalObject[t0], t0", " cpneq Structure::m_globalObject[t1], t0, t1", " jmp .opNeqNullNotImmediate", ".opNeqNullImmediate:", " cineq t1, NullTag, t2", " cineq t1, UndefinedTag, t1", " andi t2, t1", ".opNeqNullNotImmediate:", " storei BooleanTag, TagOffset[cfr, t3, 8]", " storei t1, PayloadOffset[cfr, t3, 8]", " dispatch(constexpr (op_neq_null_length))", "macro strictEq(equalityOperation, slowPath)", " loadi 12[PC], t2", " loadi 8[PC], t0", " loadConstantOrVariable(t2, t3, t1)", " loadConstantOrVariable2Reg(t0, t2, t0)", " bineq t2, t3, .slow", " bib t2, LowestTag, .slow", " bineq t2, CellTag, .notStringOrSymbol", " bbaeq JSCell::m_type[t0], ObjectType, .notStringOrSymbol", " bbb JSCell::m_type[t1], ObjectType, .slow", ".notStringOrSymbol:", " loadi 4[PC], t2", " equalityOperation(t0, t1, t0)", " storei BooleanTag, TagOffset[cfr, t2, 8]", " storei t0, PayloadOffset[cfr, t2, 8]", " dispatch(4)", ".slow:", " callOpcodeSlowPath(slowPath)", " dispatch(4)", "end", "_llint_op_stricteq:", " traceExecution()", " strictEq(macro (left, right, result)", " cieq left, right, result", "end, _slow_path_stricteq)", "_llint_op_nstricteq:", " traceExecution()", " strictEq(macro (left, right, result)", " cineq left, right, result", "end, _slow_path_nstricteq)", "_llint_op_inc:", " traceExecution()", " loadi 4[PC], t0", " bineq TagOffset[cfr, t0, 8], Int32Tag, .opIncSlow", " loadi PayloadOffset[cfr, t0, 8], t1", " baddio 1, t1, .opIncSlow", " storei t1, PayloadOffset[cfr, t0, 8]", " dispatch(constexpr (op_inc_length))", ".opIncSlow:", " callOpcodeSlowPath(_slow_path_inc)", " dispatch(constexpr (op_inc_length))", "_llint_op_dec:", " traceExecution()", " loadi 4[PC], t0", " bineq TagOffset[cfr, t0, 8], Int32Tag, .opDecSlow", " loadi PayloadOffset[cfr, t0, 8], t1", " bsubio 1, t1, .opDecSlow", " storei t1, PayloadOffset[cfr, t0, 8]", " dispatch(constexpr (op_dec_length))", ".opDecSlow:", " callOpcodeSlowPath(_slow_path_dec)", " dispatch(constexpr (op_dec_length))", "_llint_op_to_number:", " traceExecution()", " loadi 8[PC], t0", " loadi 4[PC], t1", " loadConstantOrVariable(t0, t2, t3)", " bieq t2, Int32Tag, .opToNumberIsInt", " biaeq t2, LowestTag, .opToNumberSlow", ".opToNumberIsInt:", " storei t2, TagOffset[cfr, t1, 8]", " storei t3, PayloadOffset[cfr, t1, 8]", " valueProfile(t2, t3, 12, t1)", " dispatch(constexpr (op_to_number_length))", ".opToNumberSlow:", " callOpcodeSlowPath(_slow_path_to_number)", " dispatch(constexpr (op_to_number_length))", "_llint_op_to_string:", " traceExecution()", " loadi 8[PC], t0", " loadi 4[PC], t1", " loadConstantOrVariable(t0, t2, t3)", " bineq t2, CellTag, .opToStringSlow", " bbneq JSCell::m_type[t3], StringType, .opToStringSlow", ".opToStringIsString:", " storei t2, TagOffset[cfr, t1, 8]", " storei t3, PayloadOffset[cfr, t1, 8]", " dispatch(constexpr (op_to_string_length))", ".opToStringSlow:", " callOpcodeSlowPath(_slow_path_to_string)", " dispatch(constexpr (op_to_string_length))", "_llint_op_negate:", " traceExecution()", " loadi 8[PC], t0", " loadi 4[PC], t3", " loadConstantOrVariable(t0, t1, t2)", " loadisFromInstruction(3, t0)", " bineq t1, Int32Tag, .opNegateSrcNotInt", " btiz t2, 2147483647, .opNegateSlow", " negi t2", " ori ArithProfileInt, t0", " storei Int32Tag, TagOffset[cfr, t3, 8]", " storeisToInstruction(t0, 3)", " storei t2, PayloadOffset[cfr, t3, 8]", " dispatch(constexpr (op_negate_length))", ".opNegateSrcNotInt:", " bia t1, LowestTag, .opNegateSlow", " xori 2147483648, t1", " ori ArithProfileNumber, t0", " storei t2, PayloadOffset[cfr, t3, 8]", " storeisToInstruction(t0, 3)", " storei t1, TagOffset[cfr, t3, 8]", " dispatch(constexpr (op_negate_length))", ".opNegateSlow:", " callOpcodeSlowPath(_slow_path_negate)", " dispatch(constexpr (op_negate_length))", "macro binaryOpCustomStore(integerOperationAndStore, doubleOperation, slowPath)", " loadi 12[PC], t2", " loadi 8[PC], t0", " loadConstantOrVariable(t2, t3, t1)", " loadConstantOrVariable2Reg(t0, t2, t0)", " bineq t2, Int32Tag, .op1NotInt", " bineq t3, Int32Tag, .op2NotInt", " loadisFromInstruction(4, t5)", " ori ArithProfileIntInt, t5", " storeisToInstruction(t5, 4)", " loadi 4[PC], t2", " integerOperationAndStore(t3, t1, t0, .slow, t2)", " dispatch(5)", ".op1NotInt:", " bia t2, LowestTag, .slow", " bib t3, LowestTag, .op1NotIntOp2Double", " bineq t3, Int32Tag, .slow", " loadisFromInstruction(4, t5)", " ori ArithProfileNumberInt, t5", " storeisToInstruction(t5, 4)", " ci2d t1, ft1", " jmp .op1NotIntReady", ".op1NotIntOp2Double:", " fii2d t1, t3, ft1", " loadisFromInstruction(4, t5)", " ori ArithProfileNumberNumber, t5", " storeisToInstruction(t5, 4)", ".op1NotIntReady:", " loadi 4[PC], t1", " fii2d t0, t2, ft0", " doubleOperation(ft1, ft0)", " stored ft0, 0[cfr, t1, 8]", " dispatch(5)", ".op2NotInt:", " loadi 4[PC], t2", " bia t3, LowestTag, .slow", " loadisFromInstruction(4, t5)", " ori ArithProfileIntNumber, t5", " storeisToInstruction(t5, 4)", " ci2d t0, ft0", " fii2d t1, t3, ft1", " doubleOperation(ft1, ft0)", " stored ft0, 0[cfr, t2, 8]", " dispatch(5)", ".slow:", " callOpcodeSlowPath(slowPath)", " dispatch(5)", "end", "macro binaryOp(integerOperation, doubleOperation, slowPath)", " binaryOpCustomStore(macro (int32Tag, left, right, slow, index)", " integerOperation(left, right, slow)", " storei int32Tag, TagOffset[cfr, index, 8]", " storei right, PayloadOffset[cfr, index, 8]", "end, doubleOperation, slowPath)", "end", "_llint_op_add:", " traceExecution()", " binaryOp(macro (left, right, slow)", " baddio left, right, slow", "end, macro (left, right)", " addd left, right", "end, _slow_path_add)", "_llint_op_mul:", " traceExecution()", " binaryOpCustomStore(macro (int32Tag, left, right, slow, index)", "const scratch = int32Tag", " move right, scratch", " bmulio left, scratch, slow", " btinz scratch, .done", " bilt left, 0, slow", " bilt right, 0, slow", ".done:", " storei Int32Tag, TagOffset[cfr, index, 8]", " storei scratch, PayloadOffset[cfr, index, 8]", "end, macro (left, right)", " muld left, right", "end, _slow_path_mul)", "_llint_op_sub:", " traceExecution()", " binaryOp(macro (left, right, slow)", " bsubio left, right, slow", "end, macro (left, right)", " subd left, right", "end, _slow_path_sub)", "_llint_op_div:", " traceExecution()", " binaryOpCustomStore(macro (int32Tag, left, right, slow, index)", " ci2d left, ft0", " ci2d right, ft1", " divd ft0, ft1", " bcd2i ft1, right, .notInt", " storei int32Tag, TagOffset[cfr, index, 8]", " storei right, PayloadOffset[cfr, index, 8]", " jmp .done", ".notInt:", " stored ft1, 0[cfr, index, 8]", ".done:", "end, macro (left, right)", " divd left, right", "end, _slow_path_div)", "macro bitOp(operation, slowPath, advance)", " loadi 12[PC], t2", " loadi 8[PC], t0", " loadConstantOrVariable(t2, t3, t1)", " loadConstantOrVariable2Reg(t0, t2, t0)", " bineq t3, Int32Tag, .slow", " bineq t2, Int32Tag, .slow", " loadi 4[PC], t2", " operation(t1, t0)", " storei t3, TagOffset[cfr, t2, 8]", " storei t0, PayloadOffset[cfr, t2, 8]", " dispatch(advance)", ".slow:", " callOpcodeSlowPath(slowPath)", " dispatch(advance)", "end", "_llint_op_lshift:", " traceExecution()", " bitOp(macro (left, right)", " lshifti left, right", "end, _slow_path_lshift, constexpr (op_lshift_length))", "_llint_op_rshift:", " traceExecution()", " bitOp(macro (left, right)", " rshifti left, right", "end, _slow_path_rshift, constexpr (op_rshift_length))", "_llint_op_urshift:", " traceExecution()", " bitOp(macro (left, right)", " urshifti left, right", "end, _slow_path_urshift, constexpr (op_urshift_length))", "_llint_op_unsigned:", " traceExecution()", " loadi 4[PC], t0", " loadi 8[PC], t1", " loadConstantOrVariablePayload(t1, Int32Tag, t2, .opUnsignedSlow)", " bilt t2, 0, .opUnsignedSlow", " storei t2, PayloadOffset[cfr, t0, 8]", " storei Int32Tag, TagOffset[cfr, t0, 8]", " dispatch(constexpr (op_unsigned_length))", ".opUnsignedSlow:", " callOpcodeSlowPath(_slow_path_unsigned)", " dispatch(constexpr (op_unsigned_length))", "_llint_op_bitand:", " traceExecution()", " bitOp(macro (left, right)", " andi left, right", "end, _slow_path_bitand, constexpr (op_bitand_length))", "_llint_op_bitxor:", " traceExecution()", " bitOp(macro (left, right)", " xori left, right", "end, _slow_path_bitxor, constexpr (op_bitxor_length))", "_llint_op_bitor:", " traceExecution()", " bitOp(macro (left, right)", " ori left, right", "end, _slow_path_bitor, constexpr (op_bitor_length))", "_llint_op_overrides_has_instance:", " traceExecution()", " loadisFromInstruction(1, t3)", " storei BooleanTag, TagOffset[cfr, t3, 8]", " loadisFromInstruction(3, t0)", " loadConstantOrVariablePayload(t0, CellTag, t2, .opOverrideshasInstanceValueNotCell)", " loadConstantOrVariable(t0, t1, t2)", " bineq t1, CellTag, .opOverrideshasInstanceValueNotCell", " loadp CodeBlock[cfr], t1", " loadp CodeBlock::m_globalObject[t1], t1", " loadp JSGlobalObject::m_functionProtoHasInstanceSymbolFunction[t1], t1", " bineq t1, t2, .opOverrideshasInstanceValueNotDefault", " loadisFromInstruction(2, t0)", " loadConstantOrVariablePayloadUnchecked(t0, t1)", " tbz JSCell::m_flags[t1], ImplementsDefaultHasInstance, t0", " storei t0, PayloadOffset[cfr, t3, 8]", " dispatch(constexpr (op_overrides_has_instance_length))", ".opOverrideshasInstanceValueNotCell:", ".opOverrideshasInstanceValueNotDefault:", " storei 1, PayloadOffset[cfr, t3, 8]", " dispatch(constexpr (op_overrides_has_instance_length))", "_llint_op_instanceof_custom:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_instanceof_custom)", " dispatch(constexpr (op_instanceof_custom_length))", "_llint_op_is_empty:", " traceExecution()", " loadi 8[PC], t1", " loadi 4[PC], t0", " loadConstantOrVariable(t1, t2, t3)", " cieq t2, EmptyValueTag, t3", " storei BooleanTag, TagOffset[cfr, t0, 8]", " storei t3, PayloadOffset[cfr, t0, 8]", " dispatch(constexpr (op_is_empty_length))", "_llint_op_is_undefined:", " traceExecution()", " loadi 8[PC], t1", " loadi 4[PC], t0", " loadConstantOrVariable(t1, t2, t3)", " storei BooleanTag, TagOffset[cfr, t0, 8]", " bieq t2, CellTag, .opIsUndefinedCell", " cieq t2, UndefinedTag, t3", " storei t3, PayloadOffset[cfr, t0, 8]", " dispatch(constexpr (op_is_undefined_length))", ".opIsUndefinedCell:", " btbnz JSCell::m_flags[t3], MasqueradesAsUndefined, .opIsUndefinedMasqueradesAsUndefined", " move 0, t1", " storei t1, PayloadOffset[cfr, t0, 8]", " dispatch(constexpr (op_is_undefined_length))", ".opIsUndefinedMasqueradesAsUndefined:", " loadp JSCell::m_structureID[t3], t1", " loadp CodeBlock[cfr], t3", " loadp CodeBlock::m_globalObject[t3], t3", " cpeq Structure::m_globalObject[t1], t3, t1", " storei t1, PayloadOffset[cfr, t0, 8]", " dispatch(constexpr (op_is_undefined_length))", "_llint_op_is_boolean:", " traceExecution()", " loadi 8[PC], t1", " loadi 4[PC], t2", " loadConstantOrVariableTag(t1, t0)", " cieq t0, BooleanTag, t0", " storei BooleanTag, TagOffset[cfr, t2, 8]", " storei t0, PayloadOffset[cfr, t2, 8]", " dispatch(constexpr (op_is_boolean_length))", "_llint_op_is_number:", " traceExecution()", " loadi 8[PC], t1", " loadi 4[PC], t2", " loadConstantOrVariableTag(t1, t0)", " storei BooleanTag, TagOffset[cfr, t2, 8]", " addi 1, t0", " cib t0, (LowestTag + 1), t1", " storei t1, PayloadOffset[cfr, t2, 8]", " dispatch(constexpr (op_is_number_length))", "_llint_op_is_cell_with_type:", " traceExecution()", " loadi 8[PC], t1", " loadi 4[PC], t2", " loadConstantOrVariable(t1, t0, t3)", " storei BooleanTag, TagOffset[cfr, t2, 8]", " bineq t0, CellTag, .notCellCase", " loadi 12[PC], t0", " cbeq JSCell::m_type[t3], t0, t1", " storei t1, PayloadOffset[cfr, t2, 8]", " dispatch(constexpr (op_is_cell_with_type_length))", ".notCellCase:", " storep 0, PayloadOffset[cfr, t2, 8]", " dispatch(constexpr (op_is_cell_with_type_length))", "_llint_op_is_object:", " traceExecution()", " loadi 8[PC], t1", " loadi 4[PC], t2", " loadConstantOrVariable(t1, t0, t3)", " storei BooleanTag, TagOffset[cfr, t2, 8]", " bineq t0, CellTag, .opIsObjectNotCell", " cbaeq JSCell::m_type[t3], ObjectType, t1", " storei t1, PayloadOffset[cfr, t2, 8]", " dispatch(constexpr (op_is_object_length))", ".opIsObjectNotCell:", " storep 0, PayloadOffset[cfr, t2, 8]", " dispatch(constexpr (op_is_object_length))", "macro loadPropertyAtVariableOffsetKnownNotInline(propertyOffset, objectAndStorage, tag, payload)", " assert(macro (ok)", " bigteq propertyOffset, firstOutOfLineOffset, ok", "end)", " negi propertyOffset", " loadp JSObject::m_butterfly[objectAndStorage], objectAndStorage", " loadi (TagOffset + ((firstOutOfLineOffset - 2) * 8))[objectAndStorage, propertyOffset, 8], tag", " loadi (PayloadOffset + ((firstOutOfLineOffset - 2) * 8))[objectAndStorage, propertyOffset, 8], payload", "end", "macro loadPropertyAtVariableOffset(propertyOffset, objectAndStorage, tag, payload)", " bilt propertyOffset, firstOutOfLineOffset, .isInline", " loadp JSObject::m_butterfly[objectAndStorage], objectAndStorage", " negi propertyOffset", " jmp .ready", ".isInline:", " addp (sizeof JSObject - ((firstOutOfLineOffset - 2) * 8)), objectAndStorage", ".ready:", " loadi (TagOffset + ((firstOutOfLineOffset - 2) * 8))[objectAndStorage, propertyOffset, 8], tag", " loadi (PayloadOffset + ((firstOutOfLineOffset - 2) * 8))[objectAndStorage, propertyOffset, 8], payload", "end", "macro storePropertyAtVariableOffset(propertyOffsetAsInt, objectAndStorage, tag, payload)", " bilt propertyOffsetAsInt, firstOutOfLineOffset, .isInline", " loadp JSObject::m_butterfly[objectAndStorage], objectAndStorage", " negi propertyOffsetAsInt", " jmp .ready", ".isInline:", " addp (sizeof JSObject - ((firstOutOfLineOffset - 2) * 8)), objectAndStorage", ".ready:", " storei tag, (TagOffset + ((firstOutOfLineOffset - 2) * 8))[objectAndStorage, propertyOffsetAsInt, 8]", " storei payload, (PayloadOffset + ((firstOutOfLineOffset - 2) * 8))[objectAndStorage, propertyOffsetAsInt, 8]", "end", "_llint_op_get_by_id:", " traceExecution()", " loadi 8[PC], t0", " loadi 16[PC], t1", " loadConstantOrVariablePayload(t0, CellTag, t3, .opGetByIdSlow)", " loadi 20[PC], t2", " bineq JSCell::m_structureID[t3], t1, .opGetByIdSlow", " loadPropertyAtVariableOffset(t2, t3, t0, t1)", " loadi 4[PC], t2", " storei t0, TagOffset[cfr, t2, 8]", " storei t1, PayloadOffset[cfr, t2, 8]", " valueProfile(t0, t1, 32, t2)", " dispatch(constexpr (op_get_by_id_length))", ".opGetByIdSlow:", " callOpcodeSlowPath(_llint_slow_path_get_by_id)", " dispatch(constexpr (op_get_by_id_length))", "_llint_op_get_by_id_proto_load:", " traceExecution()", " loadi 8[PC], t0", " loadi 16[PC], t1", " loadConstantOrVariablePayload(t0, CellTag, t3, .opGetByIdProtoSlow)", " loadi 20[PC], t2", " bineq JSCell::m_structureID[t3], t1, .opGetByIdProtoSlow", " loadpFromInstruction(6, t3)", " loadPropertyAtVariableOffset(t2, t3, t0, t1)", " loadi 4[PC], t2", " storei t0, TagOffset[cfr, t2, 8]", " storei t1, PayloadOffset[cfr, t2, 8]", " valueProfile(t0, t1, 32, t2)", " dispatch(constexpr (op_get_by_id_proto_load_length))", ".opGetByIdProtoSlow:", " callOpcodeSlowPath(_llint_slow_path_get_by_id)", " dispatch(constexpr (op_get_by_id_proto_load_length))", "_llint_op_get_by_id_unset:", " traceExecution()", " loadi 8[PC], t0", " loadi 16[PC], t1", " loadConstantOrVariablePayload(t0, CellTag, t3, .opGetByIdUnsetSlow)", " bineq JSCell::m_structureID[t3], t1, .opGetByIdUnsetSlow", " loadi 4[PC], t2", " storei UndefinedTag, TagOffset[cfr, t2, 8]", " storei 0, PayloadOffset[cfr, t2, 8]", " valueProfile(UndefinedTag, 0, 32, t2)", " dispatch(constexpr (op_get_by_id_unset_length))", ".opGetByIdUnsetSlow:", " callOpcodeSlowPath(_llint_slow_path_get_by_id)", " dispatch(constexpr (op_get_by_id_unset_length))", "_llint_op_get_array_length:", " traceExecution()", " loadi 8[PC], t0", " loadp 16[PC], t1", " loadConstantOrVariablePayload(t0, CellTag, t3, .opGetArrayLengthSlow)", " move t3, t2", " arrayProfile(t2, t1, t0)", " btiz t2, IsArray, .opGetArrayLengthSlow", " btiz t2, IndexingShapeMask, .opGetArrayLengthSlow", " loadi 4[PC], t1", " loadp JSObject::m_butterfly[t3], t0", " loadi ((-sizeof IndexingHeader) + IndexingHeader::u.lengths.publicLength)[t0], t0", " bilt t0, 0, .opGetArrayLengthSlow", " valueProfile(Int32Tag, t0, 32, t2)", " storep t0, PayloadOffset[cfr, t1, 8]", " storep Int32Tag, TagOffset[cfr, t1, 8]", " dispatch(constexpr (op_get_array_length_length))", ".opGetArrayLengthSlow:", " callOpcodeSlowPath(_llint_slow_path_get_by_id)", " dispatch(constexpr (op_get_array_length_length))", "_llint_op_put_by_id:", " traceExecution()", " writeBarrierOnOperands(1, 3)", " loadi 4[PC], t3", " loadConstantOrVariablePayload(t3, CellTag, t0, .opPutByIdSlow)", " loadi JSCell::m_structureID[t0], t2", " bineq t2, 16[PC], .opPutByIdSlow", " loadi 12[PC], t1", " loadConstantOrVariable(t1, t2, t3)", " loadi 32[PC], t1", " btinz t1, PutByIdPrimaryTypeMask, .opPutByIdTypeCheckObjectWithStructureOrOther", " andi PutByIdSecondaryTypeMask, t1", " bilt t1, PutByIdSecondaryTypeString, .opPutByIdTypeCheckLessThanString", " bilt t1, PutByIdSecondaryTypeObjectOrOther, .opPutByIdTypeCheckLessThanObjectOrOther", " bieq t1, PutByIdSecondaryTypeTop, .opPutByIdDoneCheckingTypes", " bieq t2, CellTag, .opPutByIdTypeCheckObject", ".opPutByIdTypeCheckOther:", " bieq t2, NullTag, .opPutByIdDoneCheckingTypes", " bieq t2, UndefinedTag, .opPutByIdDoneCheckingTypes", " jmp .opPutByIdSlow", ".opPutByIdTypeCheckLessThanObjectOrOther:", " bineq t2, CellTag, .opPutByIdSlow", " bieq t1, PutByIdSecondaryTypeObject, .opPutByIdTypeCheckObject", " bieq t1, PutByIdSecondaryTypeSymbol, .opPutByIdTypeCheckSymbol", " bbeq JSCell::m_type[t3], StringType, .opPutByIdDoneCheckingTypes", " jmp .opPutByIdSlow", ".opPutByIdTypeCheckObject:", " bbaeq JSCell::m_type[t3], ObjectType, .opPutByIdDoneCheckingTypes", " jmp .opPutByIdSlow", ".opPutByIdTypeCheckSymbol:", " bbeq JSCell::m_type[t3], SymbolType, .opPutByIdDoneCheckingTypes", " jmp .opPutByIdSlow", ".opPutByIdTypeCheckLessThanString:", " bilt t1, PutByIdSecondaryTypeInt32, .opPutByIdTypeCheckLessThanInt32", " bieq t1, PutByIdSecondaryTypeNumber, .opPutByIdTypeCheckNumber", " bieq t2, Int32Tag, .opPutByIdDoneCheckingTypes", " jmp .opPutByIdSlow", ".opPutByIdTypeCheckNumber:", " bib t2, (LowestTag + 1), .opPutByIdDoneCheckingTypes", " jmp .opPutByIdSlow", ".opPutByIdTypeCheckLessThanInt32:", " bineq t1, PutByIdSecondaryTypeBoolean, .opPutByIdTypeCheckBottomOrOther", " bieq t2, BooleanTag, .opPutByIdDoneCheckingTypes", " jmp .opPutByIdSlow", ".opPutByIdTypeCheckBottomOrOther:", " bieq t1, PutByIdSecondaryTypeOther, .opPutByIdTypeCheckOther", " jmp .opPutByIdSlow", ".opPutByIdTypeCheckObjectWithStructureOrOther:", " bieq t2, CellTag, .opPutByIdTypeCheckObjectWithStructure", " btinz t1, PutByIdPrimaryTypeObjectWithStructureOrOther, .opPutByIdTypeCheckOther", " jmp .opPutByIdSlow", ".opPutByIdTypeCheckObjectWithStructure:", " andi PutByIdSecondaryTypeMask, t1", " bineq t1, JSCell::m_structureID[t3], .opPutByIdSlow", ".opPutByIdDoneCheckingTypes:", " loadi 24[PC], t1", " btiz t1, .opPutByIdNotTransition", " loadp 28[PC], t3", " btpz t3, .opPutByIdTransitionDirect", " loadi 16[PC], t2", " loadp StructureChain::m_vector[t3], t3", " assert(macro (ok)", " btpnz t3, ok", "end)", " loadp Structure::m_prototype[t2], t2", " btpz t2, .opPutByIdTransitionChainDone", ".opPutByIdTransitionChainLoop:", " loadp 0[t3], t1", " bpneq t1, JSCell::m_structureID[t2], .opPutByIdSlow", " addp 4, t3", " loadp Structure::m_prototype[t1], t2", " btpnz t2, .opPutByIdTransitionChainLoop", ".opPutByIdTransitionChainDone:", " loadi 24[PC], t1", ".opPutByIdTransitionDirect:", " storei t1, JSCell::m_structureID[t0]", " loadi 12[PC], t1", " loadConstantOrVariable(t1, t2, t3)", " loadi 20[PC], t1", " storePropertyAtVariableOffset(t1, t0, t2, t3)", " writeBarrierOnOperand(1)", " dispatch(constexpr (op_put_by_id_length))", ".opPutByIdNotTransition:", " loadi 12[PC], t1", " loadConstantOrVariable(t1, t2, t3)", " loadi 20[PC], t1", " storePropertyAtVariableOffset(t1, t0, t2, t3)", " dispatch(constexpr (op_put_by_id_length))", ".opPutByIdSlow:", " callOpcodeSlowPath(_llint_slow_path_put_by_id)", " dispatch(constexpr (op_put_by_id_length))", "_llint_op_get_by_val:", " traceExecution()", " loadi 8[PC], t2", " loadConstantOrVariablePayload(t2, CellTag, t0, .opGetByValSlow)", " move t0, t2", " loadp 16[PC], t3", " arrayProfile(t2, t3, t1)", " loadi 12[PC], t3", " loadConstantOrVariablePayload(t3, Int32Tag, t1, .opGetByValSlow)", " loadp JSObject::m_butterfly[t0], t3", " andi IndexingShapeMask, t2", " bieq t2, Int32Shape, .opGetByValIsContiguous", " bineq t2, ContiguousShape, .opGetByValNotContiguous", ".opGetByValIsContiguous:", " biaeq t1, ((-sizeof IndexingHeader) + IndexingHeader::u.lengths.publicLength)[t3], .opGetByValOutOfBounds", " loadi TagOffset[t3, t1, 8], t2", " loadi PayloadOffset[t3, t1, 8], t1", " jmp .opGetByValDone", ".opGetByValNotContiguous:", " bineq t2, DoubleShape, .opGetByValNotDouble", " biaeq t1, ((-sizeof IndexingHeader) + IndexingHeader::u.lengths.publicLength)[t3], .opGetByValOutOfBounds", " loadd 0[t3, t1, 8], ft0", " bdnequn ft0, ft0, .opGetByValSlow", " fd2ii ft0, t1, t2", " loadi 4[PC], t0", " jmp .opGetByValNotEmpty", ".opGetByValNotDouble:", " subi ArrayStorageShape, t2", " bia t2, (SlowPutArrayStorageShape - ArrayStorageShape), .opGetByValSlow", " biaeq t1, ((-sizeof IndexingHeader) + IndexingHeader::u.lengths.vectorLength)[t3], .opGetByValOutOfBounds", " loadi (ArrayStorage::m_vector + TagOffset)[t3, t1, 8], t2", " loadi (ArrayStorage::m_vector + PayloadOffset)[t3, t1, 8], t1", ".opGetByValDone:", " loadi 4[PC], t0", " bieq t2, EmptyValueTag, .opGetByValOutOfBounds", ".opGetByValNotEmpty:", " storei t2, TagOffset[cfr, t0, 8]", " storei t1, PayloadOffset[cfr, t0, 8]", " valueProfile(t2, t1, 20, t0)", " dispatch(constexpr (op_get_by_val_length))", ".opGetByValOutOfBounds:", " loadpFromInstruction(4, t0)", " storeb 1, ArrayProfile::m_outOfBounds[t0]", ".opGetByValSlow:", " callOpcodeSlowPath(_llint_slow_path_get_by_val)", " dispatch(constexpr (op_get_by_val_length))", "macro contiguousPutByVal(storeCallback)", " biaeq t3, ((-sizeof IndexingHeader) + IndexingHeader::u.lengths.publicLength)[t0], .outOfBounds", ".storeResult:", " loadi 12[PC], t2", " storeCallback(t2, t1, t0, t3)", " dispatch(5)", ".outOfBounds:", " biaeq t3, ((-sizeof IndexingHeader) + IndexingHeader::u.lengths.vectorLength)[t0], .opPutByValOutOfBounds", " loadp 16[PC], t2", " storeb 1, ArrayProfile::m_mayStoreToHole[t2]", " addi 1, t3, t2", " storei t2, ((-sizeof IndexingHeader) + IndexingHeader::u.lengths.publicLength)[t0]", " jmp .storeResult", "end", "macro putByVal(slowPath)", " traceExecution()", " writeBarrierOnOperands(1, 3)", " loadi 4[PC], t0", " loadConstantOrVariablePayload(t0, CellTag, t1, .opPutByValSlow)", " move t1, t2", " loadp 16[PC], t3", " arrayProfile(t2, t3, t0)", " loadi 8[PC], t0", " loadConstantOrVariablePayload(t0, Int32Tag, t3, .opPutByValSlow)", " loadp JSObject::m_butterfly[t1], t0", " andi IndexingShapeMask, t2", " bineq t2, Int32Shape, .opPutByValNotInt32", " contiguousPutByVal(macro (operand, scratch, base, index)", " loadConstantOrVariablePayload(operand, Int32Tag, scratch, .opPutByValSlow)", " storei Int32Tag, TagOffset[base, index, 8]", " storei scratch, PayloadOffset[base, index, 8]", "end)", ".opPutByValNotInt32:", " bineq t2, DoubleShape, .opPutByValNotDouble", " contiguousPutByVal(macro (operand, scratch, base, index)", "const tag = scratch", "const payload = operand", " loadConstantOrVariable2Reg(operand, tag, payload)", " bineq tag, Int32Tag, .notInt", " ci2d payload, ft0", " jmp .ready", ".notInt:", " fii2d payload, tag, ft0", " bdnequn ft0, ft0, .opPutByValSlow", ".ready:", " stored ft0, 0[base, index, 8]", "end)", ".opPutByValNotDouble:", " bineq t2, ContiguousShape, .opPutByValNotContiguous", " contiguousPutByVal(macro (operand, scratch, base, index)", "const tag = scratch", "const payload = operand", " loadConstantOrVariable2Reg(operand, tag, payload)", " storei tag, TagOffset[base, index, 8]", " storei payload, PayloadOffset[base, index, 8]", "end)", ".opPutByValNotContiguous:", " bineq t2, ArrayStorageShape, .opPutByValSlow", " biaeq t3, ((-sizeof IndexingHeader) + IndexingHeader::u.lengths.vectorLength)[t0], .opPutByValOutOfBounds", " bieq (ArrayStorage::m_vector + TagOffset)[t0, t3, 8], EmptyValueTag, .opPutByValArrayStorageEmpty", ".opPutByValArrayStorageStoreResult:", " loadi 12[PC], t2", " loadConstantOrVariable2Reg(t2, t1, t2)", " storei t1, (ArrayStorage::m_vector + TagOffset)[t0, t3, 8]", " storei t2, (ArrayStorage::m_vector + PayloadOffset)[t0, t3, 8]", " dispatch(5)", ".opPutByValArrayStorageEmpty:", " loadp 16[PC], t1", " storeb 1, ArrayProfile::m_mayStoreToHole[t1]", " addi 1, ArrayStorage::m_numValuesInVector[t0]", " bib t3, ((-sizeof IndexingHeader) + IndexingHeader::u.lengths.publicLength)[t0], .opPutByValArrayStorageStoreResult", " addi 1, t3, t1", " storei t1, ((-sizeof IndexingHeader) + IndexingHeader::u.lengths.publicLength)[t0]", " jmp .opPutByValArrayStorageStoreResult", ".opPutByValOutOfBounds:", " loadpFromInstruction(4, t0)", " storeb 1, ArrayProfile::m_outOfBounds[t0]", ".opPutByValSlow:", " callOpcodeSlowPath(slowPath)", " dispatch(5)", "end", "_llint_op_put_by_val:", " putByVal(_llint_slow_path_put_by_val)", "_llint_op_put_by_val_direct:", " putByVal(_llint_slow_path_put_by_val_direct)", "_llint_op_jmp:", " traceExecution()", " dispatchBranch(4[PC])", "macro jumpTrueOrFalse(conditionOp, slow)", " loadi 4[PC], t1", " loadConstantOrVariablePayload(t1, BooleanTag, t0, .slow)", " conditionOp(t0, .target)", " dispatch(3)", ".target:", " dispatchBranch(8[PC])", ".slow:", " callOpcodeSlowPath(slow)", " dispatch(0)", "end", "macro equalNull(cellHandler, immediateHandler)", " loadi 4[PC], t0", " assertNotConstant(t0)", " loadi TagOffset[cfr, t0, 8], t1", " loadi PayloadOffset[cfr, t0, 8], t0", " bineq t1, CellTag, .immediate", " loadp JSCell::m_structureID[t0], t2", " cellHandler(t2, JSCell::m_flags[t0], .target)", " dispatch(3)", ".target:", " dispatchBranch(8[PC])", ".immediate:", " ori 1, t1", " immediateHandler(t1, .target)", " dispatch(3)", "end", "_llint_op_jeq_null:", " traceExecution()", " equalNull(macro (structure, value, target)", " btbz value, MasqueradesAsUndefined, .opJeqNullNotMasqueradesAsUndefined", " loadp CodeBlock[cfr], t0", " loadp CodeBlock::m_globalObject[t0], t0", " bpeq Structure::m_globalObject[structure], t0, target", ".opJeqNullNotMasqueradesAsUndefined:", "end, macro (value, target)", " bieq value, NullTag, target", "end)", "_llint_op_jneq_null:", " traceExecution()", " equalNull(macro (structure, value, target)", " btbz value, MasqueradesAsUndefined, target", " loadp CodeBlock[cfr], t0", " loadp CodeBlock::m_globalObject[t0], t0", " bpneq Structure::m_globalObject[structure], t0, target", "end, macro (value, target)", " bineq value, NullTag, target", "end)", "_llint_op_jneq_ptr:", " traceExecution()", " loadi 4[PC], t0", " loadi 8[PC], t1", " loadp CodeBlock[cfr], t2", " loadp CodeBlock::m_globalObject[t2], t2", " bineq TagOffset[cfr, t0, 8], CellTag, .opJneqPtrBranch", " loadp JSGlobalObject::m_specialPointers[t2, t1, 4], t1", " bpeq PayloadOffset[cfr, t0, 8], t1, .opJneqPtrFallThrough", ".opJneqPtrBranch:", " storei 1, 16[PC]", " dispatchBranch(12[PC])", ".opJneqPtrFallThrough:", " dispatch(constexpr (op_jneq_ptr_length))", "macro compare(integerCompare, doubleCompare, slowPath)", " loadi 4[PC], t2", " loadi 8[PC], t3", " loadConstantOrVariable(t2, t0, t1)", " loadConstantOrVariable2Reg(t3, t2, t3)", " bineq t0, Int32Tag, .op1NotInt", " bineq t2, Int32Tag, .op2NotInt", " integerCompare(t1, t3, .jumpTarget)", " dispatch(4)", ".op1NotInt:", " bia t0, LowestTag, .slow", " bib t2, LowestTag, .op1NotIntOp2Double", " bineq t2, Int32Tag, .slow", " ci2d t3, ft1", " jmp .op1NotIntReady", ".op1NotIntOp2Double:", " fii2d t3, t2, ft1", ".op1NotIntReady:", " fii2d t1, t0, ft0", " doubleCompare(ft0, ft1, .jumpTarget)", " dispatch(4)", ".op2NotInt:", " ci2d t1, ft0", " bia t2, LowestTag, .slow", " fii2d t3, t2, ft1", " doubleCompare(ft0, ft1, .jumpTarget)", " dispatch(4)", ".jumpTarget:", " dispatchBranch(12[PC])", ".slow:", " callOpcodeSlowPath(slowPath)", " dispatch(0)", "end", "_llint_op_switch_imm:", " traceExecution()", " loadi 12[PC], t2", " loadi 4[PC], t3", " loadConstantOrVariable(t2, t1, t0)", " loadp CodeBlock[cfr], t2", " loadp CodeBlock::m_rareData[t2], t2", " muli sizeof SimpleJumpTable, t3", " loadp (CodeBlock::RareData::m_switchJumpTables + VectorBufferOffset)[t2], t2", " addp t3, t2", " bineq t1, Int32Tag, .opSwitchImmNotInt", " subi SimpleJumpTable::min[t2], t0", " biaeq t0, (SimpleJumpTable::branchOffsets + VectorSizeOffset)[t2], .opSwitchImmFallThrough", " loadp (SimpleJumpTable::branchOffsets + VectorBufferOffset)[t2], t3", " loadi 0[t3, t0, 4], t1", " btiz t1, .opSwitchImmFallThrough", " dispatchBranchWithOffset(t1)", ".opSwitchImmNotInt:", " bib t1, LowestTag, .opSwitchImmSlow", ".opSwitchImmFallThrough:", " dispatchBranch(8[PC])", ".opSwitchImmSlow:", " callOpcodeSlowPath(_llint_slow_path_switch_imm)", " dispatch(0)", "_llint_op_switch_char:", " traceExecution()", " loadi 12[PC], t2", " loadi 4[PC], t3", " loadConstantOrVariable(t2, t1, t0)", " loadp CodeBlock[cfr], t2", " loadp CodeBlock::m_rareData[t2], t2", " muli sizeof SimpleJumpTable, t3", " loadp (CodeBlock::RareData::m_switchJumpTables + VectorBufferOffset)[t2], t2", " addp t3, t2", " bineq t1, CellTag, .opSwitchCharFallThrough", " bbneq JSCell::m_type[t0], StringType, .opSwitchCharFallThrough", " bineq JSString::m_length[t0], 1, .opSwitchCharFallThrough", " loadp JSString::m_value[t0], t0", " btpz t0, .opSwitchOnRope", " loadp StringImpl::m_data8[t0], t1", " btinz StringImpl::m_hashAndFlags[t0], HashFlags8BitBuffer, .opSwitchChar8Bit", " loadh 0[t1], t0", " jmp .opSwitchCharReady", ".opSwitchChar8Bit:", " loadb 0[t1], t0", ".opSwitchCharReady:", " subi SimpleJumpTable::min[t2], t0", " biaeq t0, (SimpleJumpTable::branchOffsets + VectorSizeOffset)[t2], .opSwitchCharFallThrough", " loadp (SimpleJumpTable::branchOffsets + VectorBufferOffset)[t2], t2", " loadi 0[t2, t0, 4], t1", " btiz t1, .opSwitchCharFallThrough", " dispatchBranchWithOffset(t1)", ".opSwitchCharFallThrough:", " dispatchBranch(8[PC])", ".opSwitchOnRope:", " callOpcodeSlowPath(_llint_slow_path_switch_char)", " dispatch(0)", "macro arrayProfileForCall()", " loadi 16[PC], t3", " negi t3", " bineq (ThisArgumentOffset + TagOffset)[cfr, t3, 8], CellTag, .done", " loadi (ThisArgumentOffset + PayloadOffset)[cfr, t3, 8], t0", " loadp JSCell::m_structureID[t0], t0", " loadpFromInstruction((CallOpCodeSize - 2), t1)", " storep t0, ArrayProfile::m_lastSeenStructureID[t1]", ".done:", "end", "macro doCall(slowPath, prepareCall)", " loadi 8[PC], t0", " loadi 20[PC], t1", " loadp LLIntCallLinkInfo::callee[t1], t2", " loadConstantOrVariablePayload(t0, CellTag, t3, .opCallSlow)", " bineq t3, t2, .opCallSlow", " loadi 16[PC], t3", " lshifti 3, t3", " negi t3", " addp cfr, t3", " storei t2, (Callee + PayloadOffset)[t3]", " loadi 12[PC], t2", " storei PC, (ArgumentCount + TagOffset)[cfr]", " storei t2, (ArgumentCount + PayloadOffset)[t3]", " storei CellTag, (Callee + TagOffset)[t3]", " move t3, sp", " prepareCall(LLIntCallLinkInfo::machineCodeTarget[t1], t2, t3, t4)", " callTargetFunction(LLIntCallLinkInfo::machineCodeTarget[t1])", ".opCallSlow:", " slowPathForCall(slowPath, prepareCall)", "end", "_llint_op_ret:", " traceExecution()", " checkSwitchToJITForEpilogue()", " loadi 4[PC], t2", " loadConstantOrVariable(t2, t1, t0)", " doReturn()", "_llint_op_to_primitive:", " traceExecution()", " loadi 8[PC], t2", " loadi 4[PC], t3", " loadConstantOrVariable(t2, t1, t0)", " bineq t1, CellTag, .opToPrimitiveIsImm", " bbaeq JSCell::m_type[t0], ObjectType, .opToPrimitiveSlowCase", ".opToPrimitiveIsImm:", " storei t1, TagOffset[cfr, t3, 8]", " storei t0, PayloadOffset[cfr, t3, 8]", " dispatch(constexpr (op_to_primitive_length))", ".opToPrimitiveSlowCase:", " callOpcodeSlowPath(_slow_path_to_primitive)", " dispatch(constexpr (op_to_primitive_length))", "_llint_op_catch:", " loadp (Callee + PayloadOffset)[cfr], t3", " andp MarkedBlockMask, t3", " loadp MarkedBlock::m_vm[t3], t3", " restoreCalleeSavesFromVMEntryFrameCalleeSavesBuffer(t3, t0)", " loadp VM::callFrameForCatch[t3], cfr", " storep 0, VM::callFrameForCatch[t3]", " restoreStackPointerAfterCall()", " loadi VM::targetInterpreterPCForThrow[t3], PC", " callOpcodeSlowPath(_llint_slow_path_check_if_exception_is_uncatchable_and_notify_profiler)", " bpeq r1, 0, .isCatchableException", " jmp _llint_throw_from_slow_path_trampoline", ".isCatchableException:", " loadp (Callee + PayloadOffset)[cfr], t3", " andp MarkedBlockMask, t3", " loadp MarkedBlock::m_vm[t3], t3", " loadi VM::m_exception[t3], t0", " storei 0, VM::m_exception[t3]", " loadi 4[PC], t2", " storei t0, PayloadOffset[cfr, t2, 8]", " storei CellTag, TagOffset[cfr, t2, 8]", " loadi (Exception::m_value + TagOffset)[t0], t1", " loadi (Exception::m_value + PayloadOffset)[t0], t0", " loadi 8[PC], t2", " storei t0, PayloadOffset[cfr, t2, 8]", " storei t1, TagOffset[cfr, t2, 8]", " traceExecution()", " dispatch(3)", "_llint_op_end:", " traceExecution()", " checkSwitchToJITForEpilogue()", " loadi 4[PC], t0", " assertNotConstant(t0)", " loadi TagOffset[cfr, t0, 8], t1", " loadi PayloadOffset[cfr, t0, 8], t0", " doReturn()", "_llint_throw_from_slow_path_trampoline:", " callSlowPath(_llint_slow_path_handle_exception)", " loadp Callee[cfr], t1", " andp MarkedBlockMask, t1", " loadp MarkedBlock::m_vm[t1], t1", " copyCalleeSavesToVMEntryFrameCalleeSavesBuffer(t1, t2)", " jmp VM::targetMachinePCForThrow[t1]", "_llint_throw_during_call_trampoline:", " preserveReturnAddressAfterCall(t2)", " jmp _llint_throw_from_slow_path_trampoline", "macro nativeCallTrampoline(executableOffsetToFunction)", " functionPrologue()", " storep 0, CodeBlock[cfr]", " loadi (Callee + PayloadOffset)[cfr], t1", "if (X86 or X86_WIN)", " subp 8, sp", " andp MarkedBlockMask, t1", " loadp MarkedBlock::m_vm[t1], t3", " storep cfr, VM::topCallFrame[t3]", " move cfr, a0", " storep a0, 0[sp]", " loadi (Callee + PayloadOffset)[cfr], t1", " loadp JSFunction::m_executable[t1], t1", " checkStackPointerAlignment(t3, 3735879681)", " call executableOffsetToFunction[t1]", " loadp (Callee + PayloadOffset)[cfr], t3", " andp MarkedBlockMask, t3", " loadp MarkedBlock::m_vm[t3], t3", " addp 8, sp", "else", "if ((((ARM or ARMv7) or ARMv7_TRADITIONAL) or C_LOOP) or MIPS)", " subp 8, sp", " andp MarkedBlockMask, t1", " loadp MarkedBlock::m_vm[t1], t1", " storep cfr, VM::topCallFrame[t1]", " move cfr, a0", " loadi (Callee + PayloadOffset)[cfr], t1", " loadp JSFunction::m_executable[t1], t1", " checkStackPointerAlignment(t3, 3735879681)", "if C_LOOP", " cloopCallNative executableOffsetToFunction[t1]", "else", " call executableOffsetToFunction[t1]", "end", " loadp (Callee + PayloadOffset)[cfr], t3", " andp MarkedBlockMask, t3", " loadp MarkedBlock::m_vm[t3], t3", " addp 8, sp", "else", " error", "end", "end", " btinz VM::m_exception[t3], .handleException", " functionEpilogue()", " ret ", ".handleException:", " storep cfr, VM::topCallFrame[t3]", " jmp _llint_throw_from_slow_path_trampoline", "end", "macro getConstantScope(dst)", " loadpFromInstruction(6, t0)", " loadisFromInstruction(dst, t1)", " storei CellTag, TagOffset[cfr, t1, 8]", " storei t0, PayloadOffset[cfr, t1, 8]", "end", "macro varInjectionCheck(slowPath)", " loadp CodeBlock[cfr], t0", " loadp CodeBlock::m_globalObject[t0], t0", " loadp JSGlobalObject::m_varInjectionWatchpoint[t0], t0", " bbeq WatchpointSet::m_state[t0], IsInvalidated, slowPath", "end", "macro resolveScope()", " loadp CodeBlock[cfr], t0", " loadisFromInstruction(5, t2)", " loadisFromInstruction(2, t0)", " loadp PayloadOffset[cfr, t0, 8], t0", " btiz t2, .resolveScopeLoopEnd", ".resolveScopeLoop:", " loadp JSScope::m_next[t0], t0", " subi 1, t2", " btinz t2, .resolveScopeLoop", ".resolveScopeLoopEnd:", " loadisFromInstruction(1, t1)", " storei CellTag, TagOffset[cfr, t1, 8]", " storei t0, PayloadOffset[cfr, t1, 8]", "end", "_llint_op_resolve_scope:", " traceExecution()", " loadisFromInstruction(4, t0)", " bineq t0, GlobalProperty, .rGlobalVar", " getConstantScope(1)", " dispatch(7)", ".rGlobalVar:", " bineq t0, GlobalVar, .rGlobalLexicalVar", " getConstantScope(1)", " dispatch(7)", ".rGlobalLexicalVar:", " bineq t0, GlobalLexicalVar, .rClosureVar", " getConstantScope(1)", " dispatch(7)", ".rClosureVar:", " bineq t0, ClosureVar, .rModuleVar", " resolveScope()", " dispatch(7)", ".rModuleVar:", " bineq t0, ModuleVar, .rGlobalPropertyWithVarInjectionChecks", " getConstantScope(1)", " dispatch(7)", ".rGlobalPropertyWithVarInjectionChecks:", " bineq t0, GlobalPropertyWithVarInjectionChecks, .rGlobalVarWithVarInjectionChecks", " varInjectionCheck(.rDynamic)", " getConstantScope(1)", " dispatch(7)", ".rGlobalVarWithVarInjectionChecks:", " bineq t0, GlobalVarWithVarInjectionChecks, .rGlobalLexicalVarWithVarInjectionChecks", " varInjectionCheck(.rDynamic)", " getConstantScope(1)", " dispatch(7)", ".rGlobalLexicalVarWithVarInjectionChecks:", " bineq t0, GlobalLexicalVarWithVarInjectionChecks, .rClosureVarWithVarInjectionChecks", " varInjectionCheck(.rDynamic)", " getConstantScope(1)", " dispatch(7)", ".rClosureVarWithVarInjectionChecks:", " bineq t0, ClosureVarWithVarInjectionChecks, .rDynamic", " varInjectionCheck(.rDynamic)", " resolveScope()", " dispatch(7)", ".rDynamic:", " callOpcodeSlowPath(_slow_path_resolve_scope)", " dispatch(7)", "macro loadWithStructureCheck(operand, slowPath)", " loadisFromInstruction(operand, t0)", " loadp PayloadOffset[cfr, t0, 8], t0", " loadpFromInstruction(5, t1)", " bpneq JSCell::m_structureID[t0], t1, slowPath", "end", "macro getProperty()", " loadisFromInstruction(6, t3)", " loadPropertyAtVariableOffset(t3, t0, t1, t2)", " valueProfile(t1, t2, 28, t0)", " loadisFromInstruction(1, t0)", " storei t1, TagOffset[cfr, t0, 8]", " storei t2, PayloadOffset[cfr, t0, 8]", "end", "macro getGlobalVar(tdzCheckIfNecessary)", " loadpFromInstruction(6, t0)", " loadp TagOffset[t0], t1", " loadp PayloadOffset[t0], t2", " tdzCheckIfNecessary(t1)", " valueProfile(t1, t2, 28, t0)", " loadisFromInstruction(1, t0)", " storei t1, TagOffset[cfr, t0, 8]", " storei t2, PayloadOffset[cfr, t0, 8]", "end", "macro getClosureVar()", " loadisFromInstruction(6, t3)", " loadp (JSEnvironmentRecord_variables + TagOffset)[t0, t3, 8], t1", " loadp (JSEnvironmentRecord_variables + PayloadOffset)[t0, t3, 8], t2", " valueProfile(t1, t2, 28, t0)", " loadisFromInstruction(1, t0)", " storei t1, TagOffset[cfr, t0, 8]", " storei t2, PayloadOffset[cfr, t0, 8]", "end", "_llint_op_get_from_scope:", " traceExecution()", " loadisFromInstruction(4, t0)", " andi ResolveTypeMask, t0", " bineq t0, GlobalProperty, .gGlobalVar", " loadWithStructureCheck(2, .gDynamic)", " getProperty()", " dispatch(8)", ".gGlobalVar:", " bineq t0, GlobalVar, .gGlobalLexicalVar", " getGlobalVar(macro (t)", "", "end)", " dispatch(8)", ".gGlobalLexicalVar:", " bineq t0, GlobalLexicalVar, .gClosureVar", " getGlobalVar(macro (tag)", " bieq tag, EmptyValueTag, .gDynamic", "end)", " dispatch(8)", ".gClosureVar:", " bineq t0, ClosureVar, .gGlobalPropertyWithVarInjectionChecks", " loadVariable(2, t2, t1, t0)", " getClosureVar()", " dispatch(8)", ".gGlobalPropertyWithVarInjectionChecks:", " bineq t0, GlobalPropertyWithVarInjectionChecks, .gGlobalVarWithVarInjectionChecks", " loadWithStructureCheck(2, .gDynamic)", " getProperty()", " dispatch(8)", ".gGlobalVarWithVarInjectionChecks:", " bineq t0, GlobalVarWithVarInjectionChecks, .gGlobalLexicalVarWithVarInjectionChecks", " varInjectionCheck(.gDynamic)", " getGlobalVar(macro (t)", "", "end)", " dispatch(8)", ".gGlobalLexicalVarWithVarInjectionChecks:", " bineq t0, GlobalLexicalVarWithVarInjectionChecks, .gClosureVarWithVarInjectionChecks", " varInjectionCheck(.gDynamic)", " getGlobalVar(macro (tag)", " bieq tag, EmptyValueTag, .gDynamic", "end)", " dispatch(8)", ".gClosureVarWithVarInjectionChecks:", " bineq t0, ClosureVarWithVarInjectionChecks, .gDynamic", " varInjectionCheck(.gDynamic)", " loadVariable(2, t2, t1, t0)", " getClosureVar()", " dispatch(8)", ".gDynamic:", " callOpcodeSlowPath(_llint_slow_path_get_from_scope)", " dispatch(8)", "macro putProperty()", " loadisFromInstruction(3, t1)", " loadConstantOrVariable(t1, t2, t3)", " loadisFromInstruction(6, t1)", " storePropertyAtVariableOffset(t1, t0, t2, t3)", "end", "macro putGlobalVariable()", " loadisFromInstruction(3, t0)", " loadConstantOrVariable(t0, t1, t2)", " loadpFromInstruction(5, t3)", " notifyWrite(t3, .pDynamic)", " loadpFromInstruction(6, t0)", " storei t1, TagOffset[t0]", " storei t2, PayloadOffset[t0]", "end", "macro putClosureVar()", " loadisFromInstruction(3, t1)", " loadConstantOrVariable(t1, t2, t3)", " loadisFromInstruction(6, t1)", " storei t2, (JSEnvironmentRecord_variables + TagOffset)[t0, t1, 8]", " storei t3, (JSEnvironmentRecord_variables + PayloadOffset)[t0, t1, 8]", "end", "macro putLocalClosureVar()", " loadisFromInstruction(3, t1)", " loadConstantOrVariable(t1, t2, t3)", " loadpFromInstruction(5, t5)", " btpz t5, .noVariableWatchpointSet", " notifyWrite(t5, .pDynamic)", ".noVariableWatchpointSet:", " loadisFromInstruction(6, t1)", " storei t2, (JSEnvironmentRecord_variables + TagOffset)[t0, t1, 8]", " storei t3, (JSEnvironmentRecord_variables + PayloadOffset)[t0, t1, 8]", "end", "_llint_op_put_to_scope:", " traceExecution()", " loadisFromInstruction(4, t0)", " andi ResolveTypeMask, t0", " bineq t0, LocalClosureVar, .pGlobalProperty", " writeBarrierOnOperands(1, 3)", " loadVariable(1, t2, t1, t0)", " putLocalClosureVar()", " dispatch(7)", ".pGlobalProperty:", " bineq t0, GlobalProperty, .pGlobalVar", " writeBarrierOnOperands(1, 3)", " loadWithStructureCheck(1, .pDynamic)", " putProperty()", " dispatch(7)", ".pGlobalVar:", " bineq t0, GlobalVar, .pGlobalLexicalVar", " writeBarrierOnGlobalObject(3)", " putGlobalVariable()", " dispatch(7)", ".pGlobalLexicalVar:", " bineq t0, GlobalLexicalVar, .pClosureVar", " writeBarrierOnGlobalLexicalEnvironment(3)", " putGlobalVariable()", " dispatch(7)", ".pClosureVar:", " bineq t0, ClosureVar, .pGlobalPropertyWithVarInjectionChecks", " writeBarrierOnOperands(1, 3)", " loadVariable(1, t2, t1, t0)", " putClosureVar()", " dispatch(7)", ".pGlobalPropertyWithVarInjectionChecks:", " bineq t0, GlobalPropertyWithVarInjectionChecks, .pGlobalVarWithVarInjectionChecks", " writeBarrierOnOperands(1, 3)", " loadWithStructureCheck(1, .pDynamic)", " putProperty()", " dispatch(7)", ".pGlobalVarWithVarInjectionChecks:", " bineq t0, GlobalVarWithVarInjectionChecks, .pGlobalLexicalVarWithVarInjectionChecks", " writeBarrierOnGlobalObject(3)", " varInjectionCheck(.pDynamic)", " putGlobalVariable()", " dispatch(7)", ".pGlobalLexicalVarWithVarInjectionChecks:", " bineq t0, GlobalLexicalVarWithVarInjectionChecks, .pClosureVarWithVarInjectionChecks", " writeBarrierOnGlobalLexicalEnvironment(3)", " varInjectionCheck(.pDynamic)", " putGlobalVariable()", " dispatch(7)", ".pClosureVarWithVarInjectionChecks:", " bineq t0, ClosureVarWithVarInjectionChecks, .pModuleVar", " writeBarrierOnOperands(1, 3)", " varInjectionCheck(.pDynamic)", " loadVariable(1, t2, t1, t0)", " putClosureVar()", " dispatch(7)", ".pModuleVar:", " bineq t0, ModuleVar, .pDynamic", " callOpcodeSlowPath(_slow_path_throw_strict_mode_readonly_property_write_error)", " dispatch(7)", ".pDynamic:", " callOpcodeSlowPath(_llint_slow_path_put_to_scope)", " dispatch(7)", "_llint_op_get_from_arguments:", " traceExecution()", " loadisFromInstruction(2, t0)", " loadi PayloadOffset[cfr, t0, 8], t0", " loadi 12[PC], t1", " loadi (DirectArguments_storage + TagOffset)[t0, t1, 8], t2", " loadi (DirectArguments_storage + PayloadOffset)[t0, t1, 8], t3", " loadisFromInstruction(1, t1)", " valueProfile(t2, t3, 16, t0)", " storei t2, TagOffset[cfr, t1, 8]", " storei t3, PayloadOffset[cfr, t1, 8]", " dispatch(5)", "_llint_op_put_to_arguments:", " traceExecution()", " writeBarrierOnOperands(1, 3)", " loadisFromInstruction(1, t0)", " loadi PayloadOffset[cfr, t0, 8], t0", " loadisFromInstruction(3, t1)", " loadConstantOrVariable(t1, t2, t3)", " loadi 8[PC], t1", " storei t2, (DirectArguments_storage + TagOffset)[t0, t1, 8]", " storei t3, (DirectArguments_storage + PayloadOffset)[t0, t1, 8]", " dispatch(4)", "_llint_op_get_parent_scope:", " traceExecution()", " loadisFromInstruction(2, t0)", " loadp PayloadOffset[cfr, t0, 8], t0", " loadp JSScope::m_next[t0], t0", " loadisFromInstruction(1, t1)", " storei CellTag, TagOffset[cfr, t1, 8]", " storei t0, PayloadOffset[cfr, t1, 8]", " dispatch(3)", "_llint_op_profile_type:", " traceExecution()", " loadp CodeBlock[cfr], t1", " loadp CodeBlock::m_vm[t1], t1", " loadp VM::m_typeProfilerLog[t1], t1", " loadisFromInstruction(1, t2)", " loadConstantOrVariable(t2, t5, t0)", " bieq t5, EmptyValueTag, .opProfileTypeDone", " loadp TypeProfilerLog::m_currentLogEntryPtr[t1], t2", " storei t5, (TypeProfilerLog::LogEntry::value + TagOffset)[t2]", " storei t0, (TypeProfilerLog::LogEntry::value + PayloadOffset)[t2]", " loadpFromInstruction(2, t3)", " storep t3, TypeProfilerLog::LogEntry::location[t2]", " bieq t5, CellTag, .opProfileTypeIsCell", " storei 0, TypeProfilerLog::LogEntry::structureID[t2]", " jmp .opProfileTypeSkipIsCell", ".opProfileTypeIsCell:", " loadi JSCell::m_structureID[t0], t3", " storei t3, TypeProfilerLog::LogEntry::structureID[t2]", ".opProfileTypeSkipIsCell:", " addp sizeof TypeProfilerLog::LogEntry, t2", " storep t2, TypeProfilerLog::m_currentLogEntryPtr[t1]", " loadp TypeProfilerLog::m_logEndPtr[t1], t1", " bpneq t2, t1, .opProfileTypeDone", " callOpcodeSlowPath(_slow_path_profile_type_clear_log)", ".opProfileTypeDone:", " dispatch(6)", "_llint_op_profile_control_flow:", " traceExecution()", " loadpFromInstruction(1, t0)", " loadi BasicBlockLocation::m_executionCount[t0], t1", " addi 1, t1", " bieq t1, 0, .done", " storei t1, BasicBlockLocation::m_executionCount[t0]", ".done:", " dispatch(2)", "_llint_op_get_rest_length:", " traceExecution()", " loadi (PayloadOffset + ArgumentCount)[cfr], t0", " subi 1, t0", " loadisFromInstruction(2, t1)", " bilteq t0, t1, .storeZero", " subi t1, t0", " jmp .finish", ".storeZero:", " move 0, t0", ".finish:", " loadisFromInstruction(1, t1)", " storei t0, PayloadOffset[cfr, t1, 8]", " storei Int32Tag, TagOffset[cfr, t1, 8]", " dispatch(3)", "_llint_op_log_shadow_chicken_prologue:", " traceExecution()", " acquireShadowChickenPacket(.opLogShadowChickenPrologueSlow)", " storep cfr, ShadowChicken::Packet::frame[t0]", " loadp CallerFrame[cfr], t1", " storep t1, ShadowChicken::Packet::callerFrame[t0]", " loadp (Callee + PayloadOffset)[cfr], t1", " storep t1, ShadowChicken::Packet::callee[t0]", " loadisFromInstruction(1, t1)", " loadi PayloadOffset[cfr, t1, 8], t1", " storep t1, ShadowChicken::Packet::scope[t0]", " dispatch(2)", ".opLogShadowChickenPrologueSlow:", " callOpcodeSlowPath(_llint_slow_path_log_shadow_chicken_prologue)", " dispatch(2)", "_llint_op_log_shadow_chicken_tail:", " traceExecution()", " acquireShadowChickenPacket(.opLogShadowChickenTailSlow)", " storep cfr, ShadowChicken::Packet::frame[t0]", " storep ShadowChickenTailMarker, ShadowChicken::Packet::callee[t0]", " loadVariable(1, t3, t2, t1)", " storei t2, (TagOffset + ShadowChicken::Packet::thisValue)[t0]", " storei t1, (PayloadOffset + ShadowChicken::Packet::thisValue)[t0]", " loadisFromInstruction(2, t1)", " loadi PayloadOffset[cfr, t1, 8], t1", " storep t1, ShadowChicken::Packet::scope[t0]", " loadp CodeBlock[cfr], t1", " storep t1, ShadowChicken::Packet::codeBlock[t0]", " storei PC, ShadowChicken::Packet::callSiteIndex[t0]", " dispatch(3)", ".opLogShadowChickenTailSlow:", " callOpcodeSlowPath(_llint_slow_path_log_shadow_chicken_tail)", " dispatch(3)", "end", "_llint_op_create_direct_arguments:", " traceExecution()", " callOpcodeSlowPath(_slow_path_create_direct_arguments)", " dispatch(constexpr (op_create_direct_arguments_length))", "_llint_op_create_scoped_arguments:", " traceExecution()", " callOpcodeSlowPath(_slow_path_create_scoped_arguments)", " dispatch(constexpr (op_create_scoped_arguments_length))", "_llint_op_create_cloned_arguments:", " traceExecution()", " callOpcodeSlowPath(_slow_path_create_cloned_arguments)", " dispatch(constexpr (op_create_cloned_arguments_length))", "_llint_op_create_this:", " traceExecution()", " callOpcodeSlowPath(_slow_path_create_this)", " dispatch(constexpr (op_create_this_length))", "_llint_op_new_object:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_new_object)", " dispatch(constexpr (op_new_object_length))", "_llint_op_new_func:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_new_func)", " dispatch(constexpr (op_new_func_length))", "_llint_op_new_generator_func:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_new_generator_func)", " dispatch(constexpr (op_new_generator_func_length))", "_llint_op_new_async_func:", " traceExecution()", " callSlowPath(_llint_slow_path_new_async_func)", " dispatch(constexpr (op_new_async_func_length))", "_llint_op_new_array:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_new_array)", " dispatch(constexpr (op_new_array_length))", "_llint_op_new_array_with_spread:", " traceExecution()", " callOpcodeSlowPath(_slow_path_new_array_with_spread)", " dispatch(constexpr (op_new_array_with_spread_length))", "_llint_op_spread:", " traceExecution()", " callOpcodeSlowPath(_slow_path_spread)", " dispatch(constexpr (op_spread_length))", "_llint_op_new_array_with_size:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_new_array_with_size)", " dispatch(constexpr (op_new_array_with_size_length))", "_llint_op_new_array_buffer:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_new_array_buffer)", " dispatch(constexpr (op_new_array_buffer_length))", "_llint_op_new_regexp:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_new_regexp)", " dispatch(constexpr (op_new_regexp_length))", "_llint_op_less:", " traceExecution()", " callOpcodeSlowPath(_slow_path_less)", " dispatch(constexpr (op_less_length))", "_llint_op_lesseq:", " traceExecution()", " callOpcodeSlowPath(_slow_path_lesseq)", " dispatch(constexpr (op_lesseq_length))", "_llint_op_greater:", " traceExecution()", " callOpcodeSlowPath(_slow_path_greater)", " dispatch(constexpr (op_greater_length))", "_llint_op_greatereq:", " traceExecution()", " callOpcodeSlowPath(_slow_path_greatereq)", " dispatch(constexpr (op_greatereq_length))", "_llint_op_mod:", " traceExecution()", " callOpcodeSlowPath(_slow_path_mod)", " dispatch(constexpr (op_mod_length))", "_llint_op_pow:", " traceExecution()", " callOpcodeSlowPath(_slow_path_pow)", " dispatch(constexpr (op_pow_length))", "_llint_op_typeof:", " traceExecution()", " callOpcodeSlowPath(_slow_path_typeof)", " dispatch(constexpr (op_typeof_length))", "_llint_op_is_object_or_null:", " traceExecution()", " callOpcodeSlowPath(_slow_path_is_object_or_null)", " dispatch(constexpr (op_is_object_or_null_length))", "_llint_op_is_function:", " traceExecution()", " callOpcodeSlowPath(_slow_path_is_function)", " dispatch(constexpr (op_is_function_length))", "_llint_op_in:", " traceExecution()", " callOpcodeSlowPath(_slow_path_in)", " dispatch(constexpr (op_in_length))", "_llint_op_try_get_by_id:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_try_get_by_id)", " dispatch(constexpr (op_try_get_by_id_length))", "_llint_op_del_by_id:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_del_by_id)", " dispatch(constexpr (op_del_by_id_length))", "_llint_op_del_by_val:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_del_by_val)", " dispatch(constexpr (op_del_by_val_length))", "_llint_op_put_by_index:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_put_by_index)", " dispatch(constexpr (op_put_by_index_length))", "_llint_op_put_getter_by_id:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_put_getter_by_id)", " dispatch(constexpr (op_put_getter_by_id_length))", "_llint_op_put_setter_by_id:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_put_setter_by_id)", " dispatch(constexpr (op_put_setter_by_id_length))", "_llint_op_put_getter_setter_by_id:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_put_getter_setter_by_id)", " dispatch(constexpr (op_put_getter_setter_by_id_length))", "_llint_op_put_getter_by_val:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_put_getter_by_val)", " dispatch(constexpr (op_put_getter_by_val_length))", "_llint_op_put_setter_by_val:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_put_setter_by_val)", " dispatch(constexpr (op_put_setter_by_val_length))", "_llint_op_define_data_property:", " traceExecution()", " callOpcodeSlowPath(_slow_path_define_data_property)", " dispatch(constexpr (op_define_data_property_length))", "_llint_op_define_accessor_property:", " traceExecution()", " callOpcodeSlowPath(_slow_path_define_accessor_property)", " dispatch(constexpr (op_define_accessor_property_length))", "_llint_op_jtrue:", " traceExecution()", " jumpTrueOrFalse(macro (value, target)", " btinz value, target", "end, _llint_slow_path_jtrue)", "_llint_op_jfalse:", " traceExecution()", " jumpTrueOrFalse(macro (value, target)", " btiz value, target", "end, _llint_slow_path_jfalse)", "_llint_op_jless:", " traceExecution()", " compare(macro (left, right, target)", " bilt left, right, target", "end, macro (left, right, target)", " bdlt left, right, target", "end, _llint_slow_path_jless)", "_llint_op_jnless:", " traceExecution()", " compare(macro (left, right, target)", " bigteq left, right, target", "end, macro (left, right, target)", " bdgtequn left, right, target", "end, _llint_slow_path_jnless)", "_llint_op_jgreater:", " traceExecution()", " compare(macro (left, right, target)", " bigt left, right, target", "end, macro (left, right, target)", " bdgt left, right, target", "end, _llint_slow_path_jgreater)", "_llint_op_jngreater:", " traceExecution()", " compare(macro (left, right, target)", " bilteq left, right, target", "end, macro (left, right, target)", " bdltequn left, right, target", "end, _llint_slow_path_jngreater)", "_llint_op_jlesseq:", " traceExecution()", " compare(macro (left, right, target)", " bilteq left, right, target", "end, macro (left, right, target)", " bdlteq left, right, target", "end, _llint_slow_path_jlesseq)", "_llint_op_jnlesseq:", " traceExecution()", " compare(macro (left, right, target)", " bigt left, right, target", "end, macro (left, right, target)", " bdgtun left, right, target", "end, _llint_slow_path_jnlesseq)", "_llint_op_jgreatereq:", " traceExecution()", " compare(macro (left, right, target)", " bigteq left, right, target", "end, macro (left, right, target)", " bdgteq left, right, target", "end, _llint_slow_path_jgreatereq)", "_llint_op_jngreatereq:", " traceExecution()", " compare(macro (left, right, target)", " bilt left, right, target", "end, macro (left, right, target)", " bdltun left, right, target", "end, _llint_slow_path_jngreatereq)", "_llint_op_loop_hint:", " traceExecution()", " checkSwitchToJITForLoop()", " dispatch(constexpr (op_loop_hint_length))", "_llint_op_check_traps:", " traceExecution()", " loadp CodeBlock[cfr], t1", " loadp CodeBlock::m_vm[t1], t1", " loadb (VM::m_traps + VMTraps::m_needTrapHandling)[t1], t0", " btpnz t0, .handleTraps", ".afterHandlingTraps:", " dispatch(constexpr (op_check_traps_length))", ".handleTraps:", " callTrapHandler(.throwHandler)", " jmp .afterHandlingTraps", ".throwHandler:", " jmp _llint_throw_from_slow_path_trampoline", "macro acquireShadowChickenPacket(slow)", " loadp CodeBlock[cfr], t1", " loadp CodeBlock::m_vm[t1], t1", " loadp VM::m_shadowChicken[t1], t2", " loadp ShadowChicken::m_logCursor[t2], t0", " bpaeq t0, ShadowChicken::m_logEnd[t2], slow", " addp sizeof ShadowChicken::Packet, t0, t1", " storep t1, ShadowChicken::m_logCursor[t2]", "end", "_llint_op_nop:", " dispatch(constexpr (op_nop_length))", "_llint_op_switch_string:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_switch_string)", " dispatch(0)", "_llint_op_new_func_exp:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_new_func_exp)", " dispatch(constexpr (op_new_func_exp_length))", "_llint_op_new_generator_func_exp:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_new_generator_func_exp)", " dispatch(constexpr (op_new_generator_func_exp_length))", "_llint_op_new_async_func_exp:", " traceExecution()", " callSlowPath(_llint_slow_path_new_async_func_exp)", " dispatch(constexpr (op_new_async_func_exp_length))", "_llint_op_set_function_name:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_set_function_name)", " dispatch(constexpr (op_set_function_name_length))", "_llint_op_call:", " traceExecution()", " arrayProfileForCall()", " doCall(_llint_slow_path_call, prepareForRegularCall)", "_llint_op_tail_call:", " traceExecution()", " arrayProfileForCall()", " checkSwitchToJITForEpilogue()", " doCall(_llint_slow_path_call, prepareForTailCall)", "_llint_op_construct:", " traceExecution()", " doCall(_llint_slow_path_construct, prepareForRegularCall)", "macro doCallVarargs(frameSlowPath, slowPath, prepareCall)", " callOpcodeSlowPath(frameSlowPath)", " branchIfException(_llint_throw_from_slow_path_trampoline)", "if JSVALUE64", " move r1, sp", "else", "if ARMv7", " subp r1, CallerFrameAndPCSize, t2", " move t2, sp", "else", " subp r1, CallerFrameAndPCSize, sp", "end", "end", " slowPathForCall(slowPath, prepareCall)", "end", "_llint_op_call_varargs:", " traceExecution()", " doCallVarargs(_llint_slow_path_size_frame_for_varargs, _llint_slow_path_call_varargs, prepareForRegularCall)", "_llint_op_tail_call_varargs:", " traceExecution()", " checkSwitchToJITForEpilogue()", " doCallVarargs(_llint_slow_path_size_frame_for_varargs, _llint_slow_path_call_varargs, prepareForTailCall)", "_llint_op_tail_call_forward_arguments:", " traceExecution()", " checkSwitchToJITForEpilogue()", " doCallVarargs(_llint_slow_path_size_frame_for_forward_arguments, _llint_slow_path_tail_call_forward_arguments, prepareForTailCall)", "_llint_op_construct_varargs:", " traceExecution()", " doCallVarargs(_llint_slow_path_size_frame_for_varargs, _llint_slow_path_construct_varargs, prepareForRegularCall)", "_llint_op_call_eval:", " traceExecution()", " slowPathForCall(_llint_slow_path_call_eval, prepareForRegularCall)", "_llint_generic_return_point:", " dispatchAfterCall()", "_llint_op_strcat:", " traceExecution()", " callOpcodeSlowPath(_slow_path_strcat)", " dispatch(constexpr (op_strcat_length))", "_llint_op_push_with_scope:", " traceExecution()", " callOpcodeSlowPath(_slow_path_push_with_scope)", " dispatch(constexpr (op_push_with_scope_length))", "_llint_op_assert:", " traceExecution()", " callOpcodeSlowPath(_slow_path_assert)", " dispatch(constexpr (op_assert_length))", "_llint_op_unreachable:", " traceExecution()", " callOpcodeSlowPath(_slow_path_unreachable)", " dispatch(constexpr (op_unreachable_length))", "_llint_op_yield:", " notSupported()", "_llint_op_create_lexical_environment:", " traceExecution()", " callOpcodeSlowPath(_slow_path_create_lexical_environment)", " dispatch(constexpr (op_create_lexical_environment_length))", "_llint_op_throw:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_throw)", " dispatch(constexpr (op_throw_length))", "_llint_op_throw_static_error:", " traceExecution()", " callOpcodeSlowPath(_slow_path_throw_static_error)", " dispatch(constexpr (op_throw_static_error_length))", "_llint_op_debug:", " traceExecution()", " loadp CodeBlock[cfr], t0", " loadi CodeBlock::m_debuggerRequests[t0], t0", " btiz t0, .opDebugDone", " callOpcodeSlowPath(_llint_slow_path_debug)", ".opDebugDone:", " dispatch(constexpr (op_debug_length))", "_llint_native_call_trampoline:", " nativeCallTrampoline(NativeExecutable::m_function)", "_llint_native_construct_trampoline:", " nativeCallTrampoline(NativeExecutable::m_constructor)", "_llint_op_get_enumerable_length:", " traceExecution()", " callOpcodeSlowPath(_slow_path_get_enumerable_length)", " dispatch(constexpr (op_get_enumerable_length_length))", "_llint_op_has_indexed_property:", " traceExecution()", " callOpcodeSlowPath(_slow_path_has_indexed_property)", " dispatch(constexpr (op_has_indexed_property_length))", "_llint_op_has_structure_property:", " traceExecution()", " callOpcodeSlowPath(_slow_path_has_structure_property)", " dispatch(constexpr (op_has_structure_property_length))", "_llint_op_has_generic_property:", " traceExecution()", " callOpcodeSlowPath(_slow_path_has_generic_property)", " dispatch(constexpr (op_has_generic_property_length))", "_llint_op_get_direct_pname:", " traceExecution()", " callOpcodeSlowPath(_slow_path_get_direct_pname)", " dispatch(constexpr (op_get_direct_pname_length))", "_llint_op_get_property_enumerator:", " traceExecution()", " callOpcodeSlowPath(_slow_path_get_property_enumerator)", " dispatch(constexpr (op_get_property_enumerator_length))", "_llint_op_enumerator_structure_pname:", " traceExecution()", " callOpcodeSlowPath(_slow_path_next_structure_enumerator_pname)", " dispatch(constexpr (op_enumerator_structure_pname_length))", "_llint_op_enumerator_generic_pname:", " traceExecution()", " callOpcodeSlowPath(_slow_path_next_generic_enumerator_pname)", " dispatch(constexpr (op_enumerator_generic_pname_length))", "_llint_op_to_index_string:", " traceExecution()", " callOpcodeSlowPath(_slow_path_to_index_string)", " dispatch(constexpr (op_to_index_string_length))", "_llint_op_create_rest:", " traceExecution()", " callOpcodeSlowPath(_slow_path_create_rest)", " dispatch(constexpr (op_create_rest_length))", "_llint_op_instanceof:", " traceExecution()", " callOpcodeSlowPath(_llint_slow_path_instanceof)", " dispatch(constexpr (op_instanceof_length))", "_llint_op_get_by_id_with_this:", " traceExecution()", " callOpcodeSlowPath(_slow_path_get_by_id_with_this)", " dispatch(constexpr (op_get_by_id_with_this_length))", "_llint_op_get_by_val_with_this:", " traceExecution()", " callOpcodeSlowPath(_slow_path_get_by_val_with_this)", " dispatch(constexpr (op_get_by_val_with_this_length))", "_llint_op_put_by_id_with_this:", " traceExecution()", " callOpcodeSlowPath(_slow_path_put_by_id_with_this)", " dispatch(constexpr (op_put_by_id_with_this_length))", "_llint_op_put_by_val_with_this:", " traceExecution()", " callOpcodeSlowPath(_slow_path_put_by_val_with_this)", " dispatch(constexpr (op_put_by_val_with_this_length))", "_llint_op_resolve_scope_for_hoisting_func_decl_in_eval:", " traceExecution()", " callOpcodeSlowPath(_slow_path_resolve_scope_for_hoisting_func_decl_in_eval)", " dispatch(constexpr (op_resolve_scope_for_hoisting_func_decl_in_eval_length))", "macro notSupported()", "if ASSERT_ENABLED", " crash()", "else", " break ", "end", "end" ];