This fixes JavaScriptCore on big endian systems (mainly ppc). Without the patch, attempting to run any JS results in a crash as the generated code was endian specific. --- Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm +++ Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm @@ -1435,13 +1435,13 @@ llintOpWithMetadata(op_put_by_id, OpPutById, macro (size, get, dispatch, metadat loadp StructureChain::m_vector[t3], t3 assert(macro (ok) btpnz t3, ok end) - loadp Structure::m_prototype[t2], t2 + loadp Structure::m_prototype + PayloadOffset[t2], t2 btpz t2, .opPutByIdTransitionChainDone .opPutByIdTransitionChainLoop: loadp [t3], t1 bineq t1, JSCell::m_structureID[t2], .opPutByIdSlow addp 4, t3 - loadp Structure::m_prototype[t1], t2 + loadp Structure::m_prototype + PayloadOffset[t1], t2 btpnz t2, .opPutByIdTransitionChainLoop .opPutByIdTransitionChainDone: @@ -1952,7 +1952,7 @@ end) op(llint_throw_from_slow_path_trampoline, macro() - loadp Callee[cfr], t1 + loadp Callee + PayloadOffset[cfr], t1 andp MarkedBlockMask, t1 loadp MarkedBlockFooterOffset + MarkedBlock::Footer::m_vm[t1], t1 copyCalleeSavesToVMEntryFrameCalleeSavesBuffer(t1, t2) @@ -1962,7 +1962,7 @@ op(llint_throw_from_slow_path_trampoline, macro() # When throwing from the interpreter (i.e. throwing from LLIntSlowPaths), so # the throw target is not necessarily interpreted code, we come to here. # This essentially emulates the JIT's throwing protocol. - loadp Callee[cfr], t1 + loadp Callee + PayloadOffset[cfr], t1 andp MarkedBlockMask, t1 loadp MarkedBlockFooterOffset + MarkedBlock::Footer::m_vm[t1], t1 jmp VM::targetMachinePCForThrow[t1]