Bug 1233863 - ARM64: Set up pseudo stack pointer in proglogues. r?sstangl draft
authorJakob Stoklund Olesen <jolesen@mozilla.com>
Fri, 18 Dec 2015 15:40:14 -0800
changeset 316451 2804fa795970332c5da6d62678346f3be21e81c1
parent 316450 132cdc3c36b824430cb5c5c15b9b8441e69bdd5c
child 316452 0ae1b450100537af1bc7f971592572a9de0e7ee9
push id8559
push userjolesen@mozilla.com
push dateFri, 18 Dec 2015 23:39:48 +0000
reviewerssstangl
bugs1233863
milestone46.0a1
Bug 1233863 - ARM64: Set up pseudo stack pointer in proglogues. r?sstangl Use the existing masm.initStackPtr() function to set up the x28 register correctly on entry to jitted code. This is already done correctly in JitRuntime::generateEnterJIT().
js/src/irregexp/NativeRegExpMacroAssembler.cpp
js/src/vm/UnboxedObject.cpp
--- a/js/src/irregexp/NativeRegExpMacroAssembler.cpp
+++ b/js/src/irregexp/NativeRegExpMacroAssembler.cpp
@@ -117,18 +117,17 @@ NativeRegExpMacroAssembler::GenerateCode
     Label return_temp0;
 
     // Finalize code - write the entry point code now we know how many
     // registers we need.
     masm.bind(&entry_label_);
 
 #ifdef JS_CODEGEN_ARM64
     // ARM64 communicates stack address via sp, but uses a pseudo-sp for addressing.
-    MOZ_ASSERT(!masm.GetStackPointer64().Is(sp));
-    masm.Mov(masm.GetStackPointer64(), sp);
+    masm.initStackPtr();
 #endif
 
     // Push non-volatile registers which might be modified by jitcode.
     size_t pushedNonVolatileRegisters = 0;
     for (GeneralRegisterForwardIterator iter(savedNonVolatileRegisters); iter.more(); ++iter) {
         masm.Push(*iter);
         pushedNonVolatileRegisters++;
     }
--- a/js/src/vm/UnboxedObject.cpp
+++ b/js/src/vm/UnboxedObject.cpp
@@ -100,16 +100,21 @@ UnboxedLayout::makeConstructorCode(JSCon
     newKindReg = ecx;
     masm.loadPtr(Address(masm.getStackPointer(), sizeof(void*)), propertiesReg);
     masm.loadPtr(Address(masm.getStackPointer(), 2 * sizeof(void*)), newKindReg);
 #else
     propertiesReg = IntArgReg0;
     newKindReg = IntArgReg1;
 #endif
 
+#ifdef JS_CODEGEN_ARM64
+    // ARM64 communicates stack address via sp, but uses a pseudo-sp for addressing.
+    masm.initStackPtr();
+#endif
+
     MOZ_ASSERT(propertiesReg.volatile_());
     MOZ_ASSERT(newKindReg.volatile_());
 
     AllocatableGeneralRegisterSet regs(GeneralRegisterSet::All());
     regs.take(propertiesReg);
     regs.take(newKindReg);
     Register object = regs.takeAny(), scratch1 = regs.takeAny(), scratch2 = regs.takeAny();