Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (167598 => 167599)
--- trunk/Source/_javascript_Core/ChangeLog 2014-04-21 18:08:49 UTC (rev 167598)
+++ trunk/Source/_javascript_Core/ChangeLog 2014-04-21 18:10:41 UTC (rev 167599)
@@ -1,3 +1,19 @@
+2014-04-21 Michael Saboff <msab...@apple.com>
+
+ REGRESSION(r167591): ARM64 and ARM traditional builds broken
+ https://bugs.webkit.org/show_bug.cgi?id=131935
+
+ Reviewed by Mark Hahnenberg.
+
+ Added store8(TrustedImm32, MacroAssembler::Address) to the ARM traditional and ARM64
+ macro assemblers. Added a new test for the original patch.
+
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::store8):
+ * assembler/MacroAssemblerARM64.h:
+ (JSC::MacroAssemblerARM64::store8):
+ * tests/stress/dfg-create-arguments-inline-alloc.js: New test.
+
2014-04-21 Mark Hahnenberg <mhahnenb...@apple.com>
Inline allocate Arguments objects in the DFG
Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerARM.h (167598 => 167599)
--- trunk/Source/_javascript_Core/assembler/MacroAssemblerARM.h 2014-04-21 18:08:49 UTC (rev 167598)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerARM.h 2014-04-21 18:10:41 UTC (rev 167599)
@@ -459,12 +459,23 @@
m_assembler.baseIndexTransfer32(ARMAssembler::StoreUint8, src, address.base, address.index, static_cast<int>(address.scale), address.offset);
}
+ void store8(RegisterID src, ImplicitAddress address)
+ {
+ m_assembler.dtrUp(ARMAssembler::StoreUint8, src, address.base, address.offset);
+ }
+
void store8(RegisterID src, const void* address)
{
move(TrustedImmPtr(address), ARMRegisters::S0);
m_assembler.dtrUp(ARMAssembler::StoreUint8, src, ARMRegisters::S0, 0);
}
+ void store8(TrustedImm32 imm, ImplicitAddress address)
+ {
+ move(imm, ARMRegisters::S1);
+ store8(ARMRegisters::S1, address);
+ }
+
void store8(TrustedImm32 imm, const void* address)
{
move(TrustedImm32(reinterpret_cast<ARMWord>(address)), ARMRegisters::S0);
Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerARM64.h (167598 => 167599)
--- trunk/Source/_javascript_Core/assembler/MacroAssemblerARM64.h 2014-04-21 18:08:49 UTC (rev 167598)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerARM64.h 2014-04-21 18:10:41 UTC (rev 167599)
@@ -1093,6 +1093,15 @@
m_assembler.strb(src, memoryTempRegister, 0);
}
+ void store8(RegisterID src, ImplicitAddress address)
+ {
+ if (tryStoreWithOffset<8>(src, address.base, address.offset))
+ return;
+
+ signExtend32ToPtr(TrustedImm32(address.offset), getCachedMemoryTempRegisterIDAndInvalidate());
+ m_assembler.str<8>(src, address.base, memoryTempRegister);
+ }
+
void store8(TrustedImm32 imm, void* address)
{
if (!imm.m_value) {
@@ -1104,7 +1113,17 @@
store8(dataTempRegister, address);
}
+ void store8(TrustedImm32 imm, ImplicitAddress address)
+ {
+ if (!imm.m_value) {
+ store8(ARM64Registers::zr, address);
+ return;
+ }
+ move(imm, getCachedDataTempRegisterIDAndInvalidate());
+ store8(dataTempRegister, address);
+ }
+
// Floating-point operations:
static bool supportsFloatingPoint() { return true; }
Added: trunk/Source/_javascript_Core/tests/stress/dfg-create-arguments-inline-alloc.js (0 => 167599)
--- trunk/Source/_javascript_Core/tests/stress/dfg-create-arguments-inline-alloc.js (rev 0)
+++ trunk/Source/_javascript_Core/tests/stress/dfg-create-arguments-inline-alloc.js 2014-04-21 18:10:41 UTC (rev 167599)
@@ -0,0 +1,19 @@
+var foo = function(o) {
+ var a = Array.prototype.slice.call(arguments);
+ var sum = 0;
+ for (var i = 0; i < a.length; ++i)
+ sum += a[i].x;
+ return sum;
+};
+
+noInline(foo);
+
+var niters = 10000;
+var total = 0;
+var o = {x: 42};
+for (var i = 0; i < niters; ++i) {
+ total += foo(o, o, o);
+}
+
+if (total != 42 * 3 * niters)
+ throw new Error("Incorrect result!");