Changeset 165216 in webkit
- Timestamp:
- Mar 6, 2014, 2:33:46 PM (11 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r165213 r165216 1 2014-03-06 Commit Queue <commit-queue@webkit.org> 2 3 Unreviewed, rolling out r165196. 4 http://trac.webkit.org/changeset/165196 5 https://bugs.webkit.org/show_bug.cgi?id=129822 6 7 broke arm64 on hardware (Requested by bfulgham on #webkit). 8 9 * assembler/ARM64Assembler.h: 10 (JSC::ARM64Assembler::lastRegister): 11 * assembler/MacroAssembler.h: 12 (JSC::MacroAssembler::isStackRelated): 13 (JSC::MacroAssembler::firstRealRegister): 14 (JSC::MacroAssembler::nextRegister): 15 (JSC::MacroAssembler::secondRealRegister): 16 * ftl/FTLLocation.cpp: 17 (JSC::FTL::Location::restoreInto): 18 * ftl/FTLSaveRestore.cpp: 19 (JSC::FTL::saveAllRegisters): 20 (JSC::FTL::restoreAllRegisters): 21 * ftl/FTLSlowPathCall.cpp: 22 * jit/RegisterSet.cpp: 23 (JSC::RegisterSet::specialRegisters): 24 (JSC::RegisterSet::calleeSaveRegisters): 25 * jit/RegisterSet.h: 26 1 27 2014-03-06 Mark Lam <mark.lam@apple.com> 2 28 -
trunk/Source/JavaScriptCore/assembler/ARM64Assembler.h
r165196 r165216 1 1 /* 2 * Copyright (C) 2012 , 2014Apple Inc. All rights reserved.2 * Copyright (C) 2012 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 479 479 480 480 static RegisterID firstRegister() { return ARM64Registers::x0; } 481 static RegisterID lastRegister() { return ARM64Registers:: sp; }481 static RegisterID lastRegister() { return ARM64Registers::x28; } 482 482 483 483 static FPRegisterID firstFPRegister() { return ARM64Registers::q0; } -
trunk/Source/JavaScriptCore/assembler/MacroAssembler.h
r165196 r165216 1 1 /* 2 * Copyright (C) 2008, 2012, 2013 , 2014Apple Inc. All rights reserved.2 * Copyright (C) 2008, 2012, 2013 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 70 70 public: 71 71 72 static bool isStackRelated(RegisterID reg) 73 { 74 return reg == stackPointerRegister || reg == framePointerRegister; 75 } 76 77 static RegisterID firstRealRegister() 78 { 79 RegisterID firstRegister = MacroAssembler::firstRegister(); 80 while (MacroAssembler::isStackRelated(firstRegister)) 81 firstRegister = static_cast<RegisterID>(firstRegister + 1); 82 return firstRegister; 83 } 84 72 85 static RegisterID nextRegister(RegisterID reg) 73 86 { 74 return static_cast<RegisterID>(reg + 1); 87 RegisterID result = static_cast<RegisterID>(reg + 1); 88 while (MacroAssembler::isStackRelated(result)) 89 result = static_cast<RegisterID>(result + 1); 90 return result; 91 } 92 93 static RegisterID secondRealRegister() 94 { 95 return nextRegister(firstRealRegister()); 75 96 } 76 97 -
trunk/Source/JavaScriptCore/ftl/FTLLocation.cpp
r165196 r165216 30 30 31 31 #include "FTLSaveRestore.h" 32 #include "RegisterSet.h"33 32 #include <wtf/CommaPrinter.h> 34 33 #include <wtf/DataLog.h> … … 159 158 void Location::restoreInto(MacroAssembler& jit, char* savedRegisters, GPRReg result, unsigned numFramesToPop) const 160 159 { 161 if (involvesGPR() && RegisterSet::stackRegisters().get(gpr())) {160 if (involvesGPR() && MacroAssembler::isStackRelated(gpr())) { 162 161 // Make the result GPR contain the appropriate stack register. 163 162 if (numFramesToPop) { … … 176 175 177 176 if (isGPR()) { 178 if ( RegisterSet::stackRegisters().get(gpr())) {177 if (MacroAssembler::isStackRelated(gpr())) { 179 178 // Already restored into result. 180 179 } else … … 199 198 200 199 case Indirect: 201 if ( RegisterSet::stackRegisters().get(gpr())) {200 if (MacroAssembler::isStackRelated(gpr())) { 202 201 // The stack register is already recovered into result. 203 202 jit.load64(MacroAssembler::Address(result, offset()), result); -
trunk/Source/JavaScriptCore/ftl/FTLSaveRestore.cpp
r165196 r165216 1 1 /* 2 * Copyright (C) 2013 , 2014Apple Inc. All rights reserved.2 * Copyright (C) 2013 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 32 32 #include "GPRInfo.h" 33 33 #include "MacroAssembler.h" 34 #include "RegisterSet.h"35 34 36 35 namespace JSC { namespace FTL { … … 71 70 } 72 71 73 namespace {74 75 struct Regs {76 Regs()77 {78 special = RegisterSet::stackRegisters();79 special.merge(RegisterSet::reservedHardwareRegisters());80 81 first = MacroAssembler::firstRegister();82 while (special.get(first))83 first = MacroAssembler::nextRegister(first);84 second = MacroAssembler::nextRegister(first);85 while (special.get(second))86 second = MacroAssembler::nextRegister(second);87 }88 89 RegisterSet special;90 GPRReg first;91 GPRReg second;92 };93 94 } // anonymous namespace95 96 72 void saveAllRegisters(MacroAssembler& jit, char* scratchMemory) 97 73 { 98 Regs regs;99 100 74 // Get the first register out of the way, so that we can use it as a pointer. 101 jit.poke64( regs.first, 0);102 jit.move(MacroAssembler::TrustedImmPtr(scratchMemory), regs.first);75 jit.poke64(MacroAssembler::firstRealRegister(), 0); 76 jit.move(MacroAssembler::TrustedImmPtr(scratchMemory), MacroAssembler::firstRealRegister()); 103 77 104 78 // Get all of the other GPRs out of the way. 105 for (MacroAssembler::RegisterID reg = regs.second; reg <= MacroAssembler::lastRegister(); reg = MacroAssembler::nextRegister(reg)) { 106 if (regs.special.get(reg)) 107 continue; 108 jit.store64(reg, MacroAssembler::Address(regs.first, offsetOfGPR(reg))); 109 } 79 for (MacroAssembler::RegisterID reg = MacroAssembler::secondRealRegister(); reg <= MacroAssembler::lastRegister(); reg = MacroAssembler::nextRegister(reg)) 80 jit.store64(reg, MacroAssembler::Address(MacroAssembler::firstRealRegister(), offsetOfGPR(reg))); 110 81 111 82 // Restore the first register into the second one and save it. 112 jit.peek64( regs.second, 0);113 jit.store64( regs.second, MacroAssembler::Address(regs.first, offsetOfGPR(regs.first)));83 jit.peek64(MacroAssembler::secondRealRegister(), 0); 84 jit.store64(MacroAssembler::secondRealRegister(), MacroAssembler::Address(MacroAssembler::firstRealRegister(), offsetOfGPR(MacroAssembler::firstRealRegister()))); 114 85 115 86 // Finally save all FPR's. 116 for (MacroAssembler::FPRegisterID reg = MacroAssembler::firstFPRegister(); reg <= MacroAssembler::lastFPRegister(); reg = MacroAssembler::nextFPRegister(reg)) { 117 if (regs.special.get(reg)) 118 continue; 119 jit.storeDouble(reg, MacroAssembler::Address(regs.first, offsetOfFPR(reg))); 120 } 87 for (MacroAssembler::FPRegisterID reg = MacroAssembler::firstFPRegister(); reg <= MacroAssembler::lastFPRegister(); reg = MacroAssembler::nextFPRegister(reg)) 88 jit.storeDouble(reg, MacroAssembler::Address(MacroAssembler::firstRealRegister(), offsetOfFPR(reg))); 121 89 } 122 90 123 91 void restoreAllRegisters(MacroAssembler& jit, char* scratchMemory) 124 92 { 125 Regs regs;126 127 93 // Give ourselves a pointer to the scratch memory. 128 jit.move(MacroAssembler::TrustedImmPtr(scratchMemory), regs.first);94 jit.move(MacroAssembler::TrustedImmPtr(scratchMemory), MacroAssembler::firstRealRegister()); 129 95 130 96 // Restore all FPR's. 131 for (MacroAssembler::FPRegisterID reg = MacroAssembler::firstFPRegister(); reg <= MacroAssembler::lastFPRegister(); reg = MacroAssembler::nextFPRegister(reg)) { 132 if (regs.special.get(reg)) 133 continue; 134 jit.loadDouble(MacroAssembler::Address(regs.first, offsetOfFPR(reg)), reg); 135 } 97 for (MacroAssembler::FPRegisterID reg = MacroAssembler::firstFPRegister(); reg <= MacroAssembler::lastFPRegister(); reg = MacroAssembler::nextFPRegister(reg)) 98 jit.loadDouble(MacroAssembler::Address(MacroAssembler::firstRealRegister(), offsetOfFPR(reg)), reg); 136 99 137 for (MacroAssembler::RegisterID reg = regs.second; reg <= MacroAssembler::lastRegister(); reg = MacroAssembler::nextRegister(reg)) { 138 if (regs.special.get(reg)) 139 continue; 140 jit.load64(MacroAssembler::Address(regs.first, offsetOfGPR(reg)), reg); 141 } 100 for (MacroAssembler::RegisterID reg = MacroAssembler::secondRealRegister(); reg <= MacroAssembler::lastRegister(); reg = MacroAssembler::nextRegister(reg)) 101 jit.load64(MacroAssembler::Address(MacroAssembler::firstRealRegister(), offsetOfGPR(reg)), reg); 142 102 143 jit.load64(MacroAssembler::Address( regs.first, offsetOfGPR(regs.first)), regs.first);103 jit.load64(MacroAssembler::Address(MacroAssembler::firstRealRegister(), offsetOfGPR(MacroAssembler::firstRealRegister())), MacroAssembler::firstRealRegister()); 144 104 } 145 105 -
trunk/Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp
r165196 r165216 53 53 , m_returnRegister(returnRegister) 54 54 { 55 // We don't care that you're using callee-save , stack, or hardwareregisters.55 // We don't care that you're using callee-save or stack registers. 56 56 m_usedRegisters.exclude(RegisterSet::stackRegisters()); 57 m_usedRegisters.exclude(RegisterSet::reservedHardwareRegisters());58 57 m_usedRegisters.exclude(RegisterSet::calleeSaveRegisters()); 59 58 -
trunk/Source/JavaScriptCore/jit/RegisterSet.cpp
r165196 r165216 43 43 } 44 44 45 RegisterSet RegisterSet:: reservedHardwareRegisters()45 RegisterSet RegisterSet::specialRegisters() 46 46 { 47 47 RegisterSet result; 48 #if CPU(ARM64) 49 result.set(ARM64Registers::lr); 50 #endif 51 return result; 52 } 53 54 RegisterSet RegisterSet::runtimeRegisters() 55 { 56 RegisterSet result; 48 result.merge(stackRegisters()); 49 result.set(GPRInfo::callFrameRegister); 57 50 #if USE(JSVALUE64) 58 51 result.set(GPRInfo::tagTypeNumberRegister); 59 52 result.set(GPRInfo::tagMaskRegister); 60 53 #endif 61 return result; 62 } 63 64 RegisterSet RegisterSet::specialRegisters() 65 { 66 RegisterSet result; 67 result.merge(stackRegisters()); 68 result.merge(reservedHardwareRegisters()); 69 result.merge(runtimeRegisters()); 54 #if CPU(ARM64) 55 result.set(ARM64Registers::lr); 56 #endif 70 57 return result; 71 58 } … … 83 70 #elif CPU(ARM64) 84 71 // We don't include LR in the set of callee-save registers even though it technically belongs 85 // there. This is because we use this set to describe the set of registers that need to be saved 86 // beyond what you would save by the platform-agnostic "preserve return address" and "restore 87 // return address" operations in CCallHelpers. 72 // there. But, the way we use this list, it makes no sense to have it there. 88 73 for ( 89 74 ARM64Registers::RegisterID reg = ARM64Registers::x19; -
trunk/Source/JavaScriptCore/jit/RegisterSet.h
r165196 r165216 43 43 44 44 static RegisterSet stackRegisters(); 45 static RegisterSet reservedHardwareRegisters(); 46 static RegisterSet runtimeRegisters(); 47 static RegisterSet specialRegisters(); // The union of stack, reserved hardware, and runtime registers. 45 static RegisterSet specialRegisters(); 48 46 static RegisterSet calleeSaveRegisters(); 49 47 static RegisterSet allGPRs();
Note:
See TracChangeset
for help on using the changeset viewer.