Changeset 165216 in webkit


Ignore:
Timestamp:
Mar 6, 2014, 2:33:46 PM (11 years ago)
Author:
commit-queue@webkit.org
Message:

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:
Location:
trunk/Source/JavaScriptCore
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r165213 r165216  
     12014-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
    1272014-03-06  Mark Lam  <mark.lam@apple.com>
    228
  • trunk/Source/JavaScriptCore/assembler/ARM64Assembler.h

    r165196 r165216  
    11/*
    2  * Copyright (C) 2012, 2014 Apple Inc. All rights reserved.
     2 * Copyright (C) 2012 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    479479   
    480480    static RegisterID firstRegister() { return ARM64Registers::x0; }
    481     static RegisterID lastRegister() { return ARM64Registers::sp; }
     481    static RegisterID lastRegister() { return ARM64Registers::x28; }
    482482   
    483483    static FPRegisterID firstFPRegister() { return ARM64Registers::q0; }
  • trunk/Source/JavaScriptCore/assembler/MacroAssembler.h

    r165196 r165216  
    11/*
    2  * Copyright (C) 2008, 2012, 2013, 2014 Apple Inc. All rights reserved.
     2 * Copyright (C) 2008, 2012, 2013 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    7070public:
    7171
     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   
    7285    static RegisterID nextRegister(RegisterID reg)
    7386    {
    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());
    7596    }
    7697   
  • trunk/Source/JavaScriptCore/ftl/FTLLocation.cpp

    r165196 r165216  
    3030
    3131#include "FTLSaveRestore.h"
    32 #include "RegisterSet.h"
    3332#include <wtf/CommaPrinter.h>
    3433#include <wtf/DataLog.h>
     
    159158void Location::restoreInto(MacroAssembler& jit, char* savedRegisters, GPRReg result, unsigned numFramesToPop) const
    160159{
    161     if (involvesGPR() && RegisterSet::stackRegisters().get(gpr())) {
     160    if (involvesGPR() && MacroAssembler::isStackRelated(gpr())) {
    162161        // Make the result GPR contain the appropriate stack register.
    163162        if (numFramesToPop) {
     
    176175   
    177176    if (isGPR()) {
    178         if (RegisterSet::stackRegisters().get(gpr())) {
     177        if (MacroAssembler::isStackRelated(gpr())) {
    179178            // Already restored into result.
    180179        } else
     
    199198       
    200199    case Indirect:
    201         if (RegisterSet::stackRegisters().get(gpr())) {
     200        if (MacroAssembler::isStackRelated(gpr())) {
    202201            // The stack register is already recovered into result.
    203202            jit.load64(MacroAssembler::Address(result, offset()), result);
  • trunk/Source/JavaScriptCore/ftl/FTLSaveRestore.cpp

    r165196 r165216  
    11/*
    2  * Copyright (C) 2013, 2014 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3232#include "GPRInfo.h"
    3333#include "MacroAssembler.h"
    34 #include "RegisterSet.h"
    3534
    3635namespace JSC { namespace FTL {
     
    7170}
    7271
    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 namespace
    95 
    9672void saveAllRegisters(MacroAssembler& jit, char* scratchMemory)
    9773{
    98     Regs regs;
    99    
    10074    // 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());
    10377   
    10478    // 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)));
    11081   
    11182    // 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())));
    11485   
    11586    // 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)));
    12189}
    12290
    12391void restoreAllRegisters(MacroAssembler& jit, char* scratchMemory)
    12492{
    125     Regs regs;
    126    
    12793    // Give ourselves a pointer to the scratch memory.
    128     jit.move(MacroAssembler::TrustedImmPtr(scratchMemory), regs.first);
     94    jit.move(MacroAssembler::TrustedImmPtr(scratchMemory), MacroAssembler::firstRealRegister());
    12995   
    13096    // 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);
    13699   
    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);
    142102   
    143     jit.load64(MacroAssembler::Address(regs.first, offsetOfGPR(regs.first)), regs.first);
     103    jit.load64(MacroAssembler::Address(MacroAssembler::firstRealRegister(), offsetOfGPR(MacroAssembler::firstRealRegister())), MacroAssembler::firstRealRegister());
    144104}
    145105
  • trunk/Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp

    r165196 r165216  
    5353        , m_returnRegister(returnRegister)
    5454    {
    55         // We don't care that you're using callee-save, stack, or hardware registers.
     55        // We don't care that you're using callee-save or stack registers.
    5656        m_usedRegisters.exclude(RegisterSet::stackRegisters());
    57         m_usedRegisters.exclude(RegisterSet::reservedHardwareRegisters());
    5857        m_usedRegisters.exclude(RegisterSet::calleeSaveRegisters());
    5958       
  • trunk/Source/JavaScriptCore/jit/RegisterSet.cpp

    r165196 r165216  
    4343}
    4444
    45 RegisterSet RegisterSet::reservedHardwareRegisters()
     45RegisterSet RegisterSet::specialRegisters()
    4646{
    4747    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);
    5750#if USE(JSVALUE64)
    5851    result.set(GPRInfo::tagTypeNumberRegister);
    5952    result.set(GPRInfo::tagMaskRegister);
    6053#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
    7057    return result;
    7158}
     
    8370#elif CPU(ARM64)
    8471    // 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.
    8873    for (
    8974        ARM64Registers::RegisterID reg = ARM64Registers::x19;
  • trunk/Source/JavaScriptCore/jit/RegisterSet.h

    r165196 r165216  
    4343   
    4444    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();
    4846    static RegisterSet calleeSaveRegisters();
    4947    static RegisterSet allGPRs();
Note: See TracChangeset for help on using the changeset viewer.