Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (165215 => 165216)
--- trunk/Source/_javascript_Core/ChangeLog 2014-03-06 22:13:05 UTC (rev 165215)
+++ trunk/Source/_javascript_Core/ChangeLog 2014-03-06 22:33:46 UTC (rev 165216)
@@ -1,3 +1,29 @@
+2014-03-06 Commit Queue <[email protected]>
+
+ Unreviewed, rolling out r165196.
+ http://trac.webkit.org/changeset/165196
+ https://bugs.webkit.org/show_bug.cgi?id=129822
+
+ broke arm64 on hardware (Requested by bfulgham on #webkit).
+
+ * assembler/ARM64Assembler.h:
+ (JSC::ARM64Assembler::lastRegister):
+ * assembler/MacroAssembler.h:
+ (JSC::MacroAssembler::isStackRelated):
+ (JSC::MacroAssembler::firstRealRegister):
+ (JSC::MacroAssembler::nextRegister):
+ (JSC::MacroAssembler::secondRealRegister):
+ * ftl/FTLLocation.cpp:
+ (JSC::FTL::Location::restoreInto):
+ * ftl/FTLSaveRestore.cpp:
+ (JSC::FTL::saveAllRegisters):
+ (JSC::FTL::restoreAllRegisters):
+ * ftl/FTLSlowPathCall.cpp:
+ * jit/RegisterSet.cpp:
+ (JSC::RegisterSet::specialRegisters):
+ (JSC::RegisterSet::calleeSaveRegisters):
+ * jit/RegisterSet.h:
+
2014-03-06 Mark Lam <[email protected]>
REGRESSION(r165205): broke the CLOOP build (Requested by smfr on #webkit).
Modified: trunk/Source/_javascript_Core/assembler/ARM64Assembler.h (165215 => 165216)
--- trunk/Source/_javascript_Core/assembler/ARM64Assembler.h 2014-03-06 22:13:05 UTC (rev 165215)
+++ trunk/Source/_javascript_Core/assembler/ARM64Assembler.h 2014-03-06 22:33:46 UTC (rev 165216)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012, 2014 Apple Inc. All rights reserved.
+ * Copyright (C) 2012 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -478,7 +478,7 @@
typedef ARM64Registers::FPRegisterID FPRegisterID;
static RegisterID firstRegister() { return ARM64Registers::x0; }
- static RegisterID lastRegister() { return ARM64Registers::sp; }
+ static RegisterID lastRegister() { return ARM64Registers::x28; }
static FPRegisterID firstFPRegister() { return ARM64Registers::q0; }
static FPRegisterID lastFPRegister() { return ARM64Registers::q31; }
Modified: trunk/Source/_javascript_Core/assembler/MacroAssembler.h (165215 => 165216)
--- trunk/Source/_javascript_Core/assembler/MacroAssembler.h 2014-03-06 22:13:05 UTC (rev 165215)
+++ trunk/Source/_javascript_Core/assembler/MacroAssembler.h 2014-03-06 22:33:46 UTC (rev 165216)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008, 2012, 2013, 2014 Apple Inc. All rights reserved.
+ * Copyright (C) 2008, 2012, 2013 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -69,11 +69,32 @@
class MacroAssembler : public MacroAssemblerBase {
public:
+ static bool isStackRelated(RegisterID reg)
+ {
+ return reg == stackPointerRegister || reg == framePointerRegister;
+ }
+
+ static RegisterID firstRealRegister()
+ {
+ RegisterID firstRegister = MacroAssembler::firstRegister();
+ while (MacroAssembler::isStackRelated(firstRegister))
+ firstRegister = static_cast<RegisterID>(firstRegister + 1);
+ return firstRegister;
+ }
+
static RegisterID nextRegister(RegisterID reg)
{
- return static_cast<RegisterID>(reg + 1);
+ RegisterID result = static_cast<RegisterID>(reg + 1);
+ while (MacroAssembler::isStackRelated(result))
+ result = static_cast<RegisterID>(result + 1);
+ return result;
}
+ static RegisterID secondRealRegister()
+ {
+ return nextRegister(firstRealRegister());
+ }
+
static FPRegisterID nextFPRegister(FPRegisterID reg)
{
return static_cast<FPRegisterID>(reg + 1);
Modified: trunk/Source/_javascript_Core/ftl/FTLLocation.cpp (165215 => 165216)
--- trunk/Source/_javascript_Core/ftl/FTLLocation.cpp 2014-03-06 22:13:05 UTC (rev 165215)
+++ trunk/Source/_javascript_Core/ftl/FTLLocation.cpp 2014-03-06 22:33:46 UTC (rev 165216)
@@ -29,7 +29,6 @@
#if ENABLE(FTL_JIT)
#include "FTLSaveRestore.h"
-#include "RegisterSet.h"
#include <wtf/CommaPrinter.h>
#include <wtf/DataLog.h>
#include <wtf/ListDump.h>
@@ -158,7 +157,7 @@
void Location::restoreInto(MacroAssembler& jit, char* savedRegisters, GPRReg result, unsigned numFramesToPop) const
{
- if (involvesGPR() && RegisterSet::stackRegisters().get(gpr())) {
+ if (involvesGPR() && MacroAssembler::isStackRelated(gpr())) {
// Make the result GPR contain the appropriate stack register.
if (numFramesToPop) {
jit.move(MacroAssembler::framePointerRegister, result);
@@ -175,7 +174,7 @@
}
if (isGPR()) {
- if (RegisterSet::stackRegisters().get(gpr())) {
+ if (MacroAssembler::isStackRelated(gpr())) {
// Already restored into result.
} else
jit.load64(savedRegisters + offsetOfGPR(gpr()), result);
@@ -198,7 +197,7 @@
return;
case Indirect:
- if (RegisterSet::stackRegisters().get(gpr())) {
+ if (MacroAssembler::isStackRelated(gpr())) {
// The stack register is already recovered into result.
jit.load64(MacroAssembler::Address(result, offset()), result);
return;
Modified: trunk/Source/_javascript_Core/ftl/FTLSaveRestore.cpp (165215 => 165216)
--- trunk/Source/_javascript_Core/ftl/FTLSaveRestore.cpp 2014-03-06 22:13:05 UTC (rev 165215)
+++ trunk/Source/_javascript_Core/ftl/FTLSaveRestore.cpp 2014-03-06 22:33:46 UTC (rev 165216)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013, 2014 Apple Inc. All rights reserved.
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -31,7 +31,6 @@
#include "FPRInfo.h"
#include "GPRInfo.h"
#include "MacroAssembler.h"
-#include "RegisterSet.h"
namespace JSC { namespace FTL {
@@ -70,77 +69,38 @@
return offsetOfFPR(reg.fpr());
}
-namespace {
-
-struct Regs {
- Regs()
- {
- special = RegisterSet::stackRegisters();
- special.merge(RegisterSet::reservedHardwareRegisters());
-
- first = MacroAssembler::firstRegister();
- while (special.get(first))
- first = MacroAssembler::nextRegister(first);
- second = MacroAssembler::nextRegister(first);
- while (special.get(second))
- second = MacroAssembler::nextRegister(second);
- }
-
- RegisterSet special;
- GPRReg first;
- GPRReg second;
-};
-
-} // anonymous namespace
-
void saveAllRegisters(MacroAssembler& jit, char* scratchMemory)
{
- Regs regs;
-
// Get the first register out of the way, so that we can use it as a pointer.
- jit.poke64(regs.first, 0);
- jit.move(MacroAssembler::TrustedImmPtr(scratchMemory), regs.first);
+ jit.poke64(MacroAssembler::firstRealRegister(), 0);
+ jit.move(MacroAssembler::TrustedImmPtr(scratchMemory), MacroAssembler::firstRealRegister());
// Get all of the other GPRs out of the way.
- for (MacroAssembler::RegisterID reg = regs.second; reg <= MacroAssembler::lastRegister(); reg = MacroAssembler::nextRegister(reg)) {
- if (regs.special.get(reg))
- continue;
- jit.store64(reg, MacroAssembler::Address(regs.first, offsetOfGPR(reg)));
- }
+ for (MacroAssembler::RegisterID reg = MacroAssembler::secondRealRegister(); reg <= MacroAssembler::lastRegister(); reg = MacroAssembler::nextRegister(reg))
+ jit.store64(reg, MacroAssembler::Address(MacroAssembler::firstRealRegister(), offsetOfGPR(reg)));
// Restore the first register into the second one and save it.
- jit.peek64(regs.second, 0);
- jit.store64(regs.second, MacroAssembler::Address(regs.first, offsetOfGPR(regs.first)));
+ jit.peek64(MacroAssembler::secondRealRegister(), 0);
+ jit.store64(MacroAssembler::secondRealRegister(), MacroAssembler::Address(MacroAssembler::firstRealRegister(), offsetOfGPR(MacroAssembler::firstRealRegister())));
// Finally save all FPR's.
- for (MacroAssembler::FPRegisterID reg = MacroAssembler::firstFPRegister(); reg <= MacroAssembler::lastFPRegister(); reg = MacroAssembler::nextFPRegister(reg)) {
- if (regs.special.get(reg))
- continue;
- jit.storeDouble(reg, MacroAssembler::Address(regs.first, offsetOfFPR(reg)));
- }
+ for (MacroAssembler::FPRegisterID reg = MacroAssembler::firstFPRegister(); reg <= MacroAssembler::lastFPRegister(); reg = MacroAssembler::nextFPRegister(reg))
+ jit.storeDouble(reg, MacroAssembler::Address(MacroAssembler::firstRealRegister(), offsetOfFPR(reg)));
}
void restoreAllRegisters(MacroAssembler& jit, char* scratchMemory)
{
- Regs regs;
-
// Give ourselves a pointer to the scratch memory.
- jit.move(MacroAssembler::TrustedImmPtr(scratchMemory), regs.first);
+ jit.move(MacroAssembler::TrustedImmPtr(scratchMemory), MacroAssembler::firstRealRegister());
// Restore all FPR's.
- for (MacroAssembler::FPRegisterID reg = MacroAssembler::firstFPRegister(); reg <= MacroAssembler::lastFPRegister(); reg = MacroAssembler::nextFPRegister(reg)) {
- if (regs.special.get(reg))
- continue;
- jit.loadDouble(MacroAssembler::Address(regs.first, offsetOfFPR(reg)), reg);
- }
+ for (MacroAssembler::FPRegisterID reg = MacroAssembler::firstFPRegister(); reg <= MacroAssembler::lastFPRegister(); reg = MacroAssembler::nextFPRegister(reg))
+ jit.loadDouble(MacroAssembler::Address(MacroAssembler::firstRealRegister(), offsetOfFPR(reg)), reg);
- for (MacroAssembler::RegisterID reg = regs.second; reg <= MacroAssembler::lastRegister(); reg = MacroAssembler::nextRegister(reg)) {
- if (regs.special.get(reg))
- continue;
- jit.load64(MacroAssembler::Address(regs.first, offsetOfGPR(reg)), reg);
- }
+ for (MacroAssembler::RegisterID reg = MacroAssembler::secondRealRegister(); reg <= MacroAssembler::lastRegister(); reg = MacroAssembler::nextRegister(reg))
+ jit.load64(MacroAssembler::Address(MacroAssembler::firstRealRegister(), offsetOfGPR(reg)), reg);
- jit.load64(MacroAssembler::Address(regs.first, offsetOfGPR(regs.first)), regs.first);
+ jit.load64(MacroAssembler::Address(MacroAssembler::firstRealRegister(), offsetOfGPR(MacroAssembler::firstRealRegister())), MacroAssembler::firstRealRegister());
}
} } // namespace JSC::FTL
Modified: trunk/Source/_javascript_Core/ftl/FTLSlowPathCall.cpp (165215 => 165216)
--- trunk/Source/_javascript_Core/ftl/FTLSlowPathCall.cpp 2014-03-06 22:13:05 UTC (rev 165215)
+++ trunk/Source/_javascript_Core/ftl/FTLSlowPathCall.cpp 2014-03-06 22:33:46 UTC (rev 165216)
@@ -52,9 +52,8 @@
, m_numArgs(numArgs)
, m_returnRegister(returnRegister)
{
- // We don't care that you're using callee-save, stack, or hardware registers.
+ // We don't care that you're using callee-save or stack registers.
m_usedRegisters.exclude(RegisterSet::stackRegisters());
- m_usedRegisters.exclude(RegisterSet::reservedHardwareRegisters());
m_usedRegisters.exclude(RegisterSet::calleeSaveRegisters());
// The return register doesn't need to be saved.
Modified: trunk/Source/_javascript_Core/jit/RegisterSet.cpp (165215 => 165216)
--- trunk/Source/_javascript_Core/jit/RegisterSet.cpp 2014-03-06 22:13:05 UTC (rev 165215)
+++ trunk/Source/_javascript_Core/jit/RegisterSet.cpp 2014-03-06 22:33:46 UTC (rev 165216)
@@ -42,34 +42,21 @@
return result;
}
-RegisterSet RegisterSet::reservedHardwareRegisters()
+RegisterSet RegisterSet::specialRegisters()
{
RegisterSet result;
-#if CPU(ARM64)
- result.set(ARM64Registers::lr);
-#endif
- return result;
-}
-
-RegisterSet RegisterSet::runtimeRegisters()
-{
- RegisterSet result;
+ result.merge(stackRegisters());
+ result.set(GPRInfo::callFrameRegister);
#if USE(JSVALUE64)
result.set(GPRInfo::tagTypeNumberRegister);
result.set(GPRInfo::tagMaskRegister);
#endif
+#if CPU(ARM64)
+ result.set(ARM64Registers::lr);
+#endif
return result;
}
-RegisterSet RegisterSet::specialRegisters()
-{
- RegisterSet result;
- result.merge(stackRegisters());
- result.merge(reservedHardwareRegisters());
- result.merge(runtimeRegisters());
- return result;
-}
-
RegisterSet RegisterSet::calleeSaveRegisters()
{
RegisterSet result;
@@ -82,9 +69,7 @@
result.set(X86Registers::r15);
#elif CPU(ARM64)
// We don't include LR in the set of callee-save registers even though it technically belongs
- // there. This is because we use this set to describe the set of registers that need to be saved
- // beyond what you would save by the platform-agnostic "preserve return address" and "restore
- // return address" operations in CCallHelpers.
+ // there. But, the way we use this list, it makes no sense to have it there.
for (
ARM64Registers::RegisterID reg = ARM64Registers::x19;
reg <= ARM64Registers::x28;
Modified: trunk/Source/_javascript_Core/jit/RegisterSet.h (165215 => 165216)
--- trunk/Source/_javascript_Core/jit/RegisterSet.h 2014-03-06 22:13:05 UTC (rev 165215)
+++ trunk/Source/_javascript_Core/jit/RegisterSet.h 2014-03-06 22:33:46 UTC (rev 165216)
@@ -42,9 +42,7 @@
RegisterSet() { }
static RegisterSet stackRegisters();
- static RegisterSet reservedHardwareRegisters();
- static RegisterSet runtimeRegisters();
- static RegisterSet specialRegisters(); // The union of stack, reserved hardware, and runtime registers.
+ static RegisterSet specialRegisters();
static RegisterSet calleeSaveRegisters();
static RegisterSet allGPRs();
static RegisterSet allFPRs();