diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
commit | 32761a6cee1d0dee366b885b7b9c777e67885688 (patch) | |
tree | d6bec92bebfb216f4126356e55518842c2f476a1 /Source/JavaScriptCore/jit/RegisterSet.cpp | |
parent | a4e969f4965059196ca948db781e52f7cfebf19e (diff) | |
download | WebKitGtk-tarball-32761a6cee1d0dee366b885b7b9c777e67885688.tar.gz |
webkitgtk-2.4.11webkitgtk-2.4.11
Diffstat (limited to 'Source/JavaScriptCore/jit/RegisterSet.cpp')
-rw-r--r-- | Source/JavaScriptCore/jit/RegisterSet.cpp | 326 |
1 files changed, 13 insertions, 313 deletions
diff --git a/Source/JavaScriptCore/jit/RegisterSet.cpp b/Source/JavaScriptCore/jit/RegisterSet.cpp index 5418400b0..362ada0de 100644 --- a/Source/JavaScriptCore/jit/RegisterSet.cpp +++ b/Source/JavaScriptCore/jit/RegisterSet.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013-2015 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 @@ -30,325 +30,45 @@ #include "GPRInfo.h" #include "MacroAssembler.h" -#include "JSCInlines.h" -#include <wtf/CommaPrinter.h> namespace JSC { RegisterSet RegisterSet::stackRegisters() { - return RegisterSet( - MacroAssembler::stackPointerRegister, - MacroAssembler::framePointerRegister); -} - -RegisterSet RegisterSet::reservedHardwareRegisters() -{ -#if CPU(ARM64) -#if PLATFORM(IOS) - return RegisterSet(ARM64Registers::x18, ARM64Registers::lr); -#else - return RegisterSet(ARM64Registers::lr); -#endif // PLATFORM(IOS) -#else - return RegisterSet(); -#endif -} - -RegisterSet RegisterSet::runtimeRegisters() -{ -#if USE(JSVALUE64) - return RegisterSet(GPRInfo::tagTypeNumberRegister, GPRInfo::tagMaskRegister); -#else - return RegisterSet(); -#endif + RegisterSet result; + result.set(MacroAssembler::stackPointerRegister); + result.set(MacroAssembler::framePointerRegister); + return result; } RegisterSet RegisterSet::specialRegisters() { - return RegisterSet( - stackRegisters(), reservedHardwareRegisters(), runtimeRegisters()); -} - -RegisterSet RegisterSet::volatileRegistersForJSCall() -{ - RegisterSet volatileRegisters = allRegisters(); - volatileRegisters.exclude(RegisterSet::stackRegisters()); - volatileRegisters.exclude(RegisterSet::reservedHardwareRegisters()); - volatileRegisters.exclude(RegisterSet::vmCalleeSaveRegisters()); - return volatileRegisters; -} - -RegisterSet RegisterSet::stubUnavailableRegisters() -{ - return RegisterSet(specialRegisters(), vmCalleeSaveRegisters()); -} - -RegisterSet RegisterSet::macroScratchRegisters() -{ -#if CPU(X86_64) - return RegisterSet(MacroAssembler::s_scratchRegister); -#elif CPU(ARM64) - return RegisterSet(MacroAssembler::dataTempRegister, MacroAssembler::memoryTempRegister); -#elif CPU(MIPS) RegisterSet result; - result.set(MacroAssembler::immTempRegister); - result.set(MacroAssembler::dataTempRegister); - result.set(MacroAssembler::addrTempRegister); - result.set(MacroAssembler::cmpTempRegister); - return result; -#else - return RegisterSet(); + result.merge(stackRegisters()); + result.set(GPRInfo::callFrameRegister); +#if USE(JSVALUE64) + result.set(GPRInfo::tagTypeNumberRegister); + result.set(GPRInfo::tagMaskRegister); #endif + return result; } RegisterSet RegisterSet::calleeSaveRegisters() { RegisterSet result; -#if CPU(X86) - result.set(X86Registers::ebx); - result.set(X86Registers::ebp); - result.set(X86Registers::edi); - result.set(X86Registers::esi); -#elif CPU(X86_64) +#if CPU(X86_64) result.set(X86Registers::ebx); result.set(X86Registers::ebp); result.set(X86Registers::r12); result.set(X86Registers::r13); result.set(X86Registers::r14); result.set(X86Registers::r15); -#elif CPU(ARM_THUMB2) - result.set(ARMRegisters::r4); - result.set(ARMRegisters::r5); - result.set(ARMRegisters::r6); - result.set(ARMRegisters::r8); -#if !PLATFORM(IOS) - result.set(ARMRegisters::r9); -#endif - result.set(ARMRegisters::r10); - result.set(ARMRegisters::r11); -#elif CPU(ARM_TRADITIONAL) - result.set(ARMRegisters::r4); - result.set(ARMRegisters::r5); - result.set(ARMRegisters::r6); - result.set(ARMRegisters::r7); - result.set(ARMRegisters::r8); - result.set(ARMRegisters::r9); - result.set(ARMRegisters::r10); - result.set(ARMRegisters::r11); -#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. - for ( - ARM64Registers::RegisterID reg = ARM64Registers::x19; - reg <= ARM64Registers::x28; - reg = static_cast<ARM64Registers::RegisterID>(reg + 1)) - result.set(reg); - result.set(ARM64Registers::fp); - for ( - ARM64Registers::FPRegisterID reg = ARM64Registers::q8; - reg <= ARM64Registers::q15; - reg = static_cast<ARM64Registers::FPRegisterID>(reg + 1)) - result.set(reg); -#elif CPU(MIPS) -#else - UNREACHABLE_FOR_PLATFORM(); -#endif - return result; -} - -RegisterSet RegisterSet::vmCalleeSaveRegisters() -{ - RegisterSet result; -#if CPU(X86_64) - result.set(GPRInfo::regCS0); - result.set(GPRInfo::regCS1); - result.set(GPRInfo::regCS2); - result.set(GPRInfo::regCS3); - result.set(GPRInfo::regCS4); -#if OS(WINDOWS) - result.set(GPRInfo::regCS5); - result.set(GPRInfo::regCS6); -#endif -#elif CPU(ARM64) - result.set(GPRInfo::regCS0); - result.set(GPRInfo::regCS1); - result.set(GPRInfo::regCS2); - result.set(GPRInfo::regCS3); - result.set(GPRInfo::regCS4); - result.set(GPRInfo::regCS5); - result.set(GPRInfo::regCS6); - result.set(GPRInfo::regCS7); - result.set(GPRInfo::regCS8); - result.set(GPRInfo::regCS9); - result.set(FPRInfo::fpRegCS0); - result.set(FPRInfo::fpRegCS1); - result.set(FPRInfo::fpRegCS2); - result.set(FPRInfo::fpRegCS3); - result.set(FPRInfo::fpRegCS4); - result.set(FPRInfo::fpRegCS5); - result.set(FPRInfo::fpRegCS6); - result.set(FPRInfo::fpRegCS7); -#endif - return result; -} - -RegisterSet RegisterSet::llintBaselineCalleeSaveRegisters() -{ - RegisterSet result; -#if CPU(X86) -#elif CPU(X86_64) -#if !OS(WINDOWS) - result.set(GPRInfo::regCS2); - ASSERT(GPRInfo::regCS3 == GPRInfo::tagTypeNumberRegister); - ASSERT(GPRInfo::regCS4 == GPRInfo::tagMaskRegister); - result.set(GPRInfo::regCS3); - result.set(GPRInfo::regCS4); -#else - result.set(GPRInfo::regCS4); - ASSERT(GPRInfo::regCS5 == GPRInfo::tagTypeNumberRegister); - ASSERT(GPRInfo::regCS6 == GPRInfo::tagMaskRegister); - result.set(GPRInfo::regCS5); - result.set(GPRInfo::regCS6); -#endif -#elif CPU(ARM_THUMB2) -#elif CPU(ARM_TRADITIONAL) -#elif CPU(ARM64) - result.set(GPRInfo::regCS7); - ASSERT(GPRInfo::regCS8 == GPRInfo::tagTypeNumberRegister); - ASSERT(GPRInfo::regCS9 == GPRInfo::tagMaskRegister); - result.set(GPRInfo::regCS8); - result.set(GPRInfo::regCS9); -#elif CPU(MIPS) -#elif CPU(SH4) -#else - UNREACHABLE_FOR_PLATFORM(); -#endif - return result; -} - -RegisterSet RegisterSet::dfgCalleeSaveRegisters() -{ - RegisterSet result; -#if CPU(X86) -#elif CPU(X86_64) - result.set(GPRInfo::regCS0); - result.set(GPRInfo::regCS1); - result.set(GPRInfo::regCS2); -#if !OS(WINDOWS) - ASSERT(GPRInfo::regCS3 == GPRInfo::tagTypeNumberRegister); - ASSERT(GPRInfo::regCS4 == GPRInfo::tagMaskRegister); - result.set(GPRInfo::regCS3); - result.set(GPRInfo::regCS4); -#else - result.set(GPRInfo::regCS3); - result.set(GPRInfo::regCS4); - ASSERT(GPRInfo::regCS5 == GPRInfo::tagTypeNumberRegister); - ASSERT(GPRInfo::regCS6 == GPRInfo::tagMaskRegister); - result.set(GPRInfo::regCS5); - result.set(GPRInfo::regCS6); -#endif -#elif CPU(ARM_THUMB2) -#elif CPU(ARM_TRADITIONAL) -#elif CPU(ARM64) - ASSERT(GPRInfo::regCS8 == GPRInfo::tagTypeNumberRegister); - ASSERT(GPRInfo::regCS9 == GPRInfo::tagMaskRegister); - result.set(GPRInfo::regCS8); - result.set(GPRInfo::regCS9); -#elif CPU(MIPS) -#elif CPU(SH4) -#else - UNREACHABLE_FOR_PLATFORM(); -#endif - return result; -} - -RegisterSet RegisterSet::ftlCalleeSaveRegisters() -{ - RegisterSet result; -#if ENABLE(FTL_JIT) -#if CPU(X86_64) && !OS(WINDOWS) - result.set(GPRInfo::regCS0); - result.set(GPRInfo::regCS1); - result.set(GPRInfo::regCS2); - ASSERT(GPRInfo::regCS3 == GPRInfo::tagTypeNumberRegister); - ASSERT(GPRInfo::regCS4 == GPRInfo::tagMaskRegister); - result.set(GPRInfo::regCS3); - result.set(GPRInfo::regCS4); -#elif CPU(ARM64) - // B3 might save and use all ARM64 callee saves specified in the ABI. - result.set(GPRInfo::regCS0); - result.set(GPRInfo::regCS1); - result.set(GPRInfo::regCS2); - result.set(GPRInfo::regCS3); - result.set(GPRInfo::regCS4); - result.set(GPRInfo::regCS5); - result.set(GPRInfo::regCS6); - result.set(GPRInfo::regCS7); - ASSERT(GPRInfo::regCS8 == GPRInfo::tagTypeNumberRegister); - ASSERT(GPRInfo::regCS9 == GPRInfo::tagMaskRegister); - result.set(GPRInfo::regCS8); - result.set(GPRInfo::regCS9); - result.set(FPRInfo::fpRegCS0); - result.set(FPRInfo::fpRegCS1); - result.set(FPRInfo::fpRegCS2); - result.set(FPRInfo::fpRegCS3); - result.set(FPRInfo::fpRegCS4); - result.set(FPRInfo::fpRegCS5); - result.set(FPRInfo::fpRegCS6); - result.set(FPRInfo::fpRegCS7); #else UNREACHABLE_FOR_PLATFORM(); #endif -#endif return result; } -#if ENABLE(WEBASSEMBLY) -RegisterSet RegisterSet::webAssemblyCalleeSaveRegisters() -{ - RegisterSet result; -#if CPU(X86) -#elif CPU(X86_64) -#if !OS(WINDOWS) - ASSERT(GPRInfo::regCS3 == GPRInfo::tagTypeNumberRegister); - ASSERT(GPRInfo::regCS4 == GPRInfo::tagMaskRegister); - result.set(GPRInfo::regCS3); - result.set(GPRInfo::regCS4); -#else - ASSERT(GPRInfo::regCS5 == GPRInfo::tagTypeNumberRegister); - ASSERT(GPRInfo::regCS6 == GPRInfo::tagMaskRegister); - result.set(GPRInfo::regCS5); - result.set(GPRInfo::regCS6); -#endif -#elif CPU(ARM_THUMB2) -#elif CPU(ARM_TRADITIONAL) -#elif CPU(ARM64) - ASSERT(GPRInfo::regCS8 == GPRInfo::tagTypeNumberRegister); - ASSERT(GPRInfo::regCS9 == GPRInfo::tagMaskRegister); - result.set(GPRInfo::regCS8); - result.set(GPRInfo::regCS9); -#elif CPU(MIPS) -#elif CPU(SH4) -#else - UNREACHABLE_FOR_PLATFORM(); -#endif - return result; -} -#endif - -RegisterSet RegisterSet::registersToNotSaveForJSCall() -{ - return RegisterSet(RegisterSet::vmCalleeSaveRegisters(), RegisterSet::stackRegisters(), RegisterSet::reservedHardwareRegisters()); -} - -RegisterSet RegisterSet::registersToNotSaveForCCall() -{ - return RegisterSet(RegisterSet::calleeSaveRegisters(), RegisterSet::stackRegisters(), RegisterSet::reservedHardwareRegisters()); -} - RegisterSet RegisterSet::allGPRs() { RegisterSet result; @@ -373,29 +93,9 @@ RegisterSet RegisterSet::allRegisters() return result; } -size_t RegisterSet::numberOfSetGPRs() const -{ - RegisterSet temp = *this; - temp.filter(allGPRs()); - return temp.numberOfSetRegisters(); -} - -size_t RegisterSet::numberOfSetFPRs() const -{ - RegisterSet temp = *this; - temp.filter(allFPRs()); - return temp.numberOfSetRegisters(); -} - void RegisterSet::dump(PrintStream& out) const { - CommaPrinter comma; - out.print("["); - for (Reg reg = Reg::first(); reg <= Reg::last(); reg = reg.next()) { - if (get(reg)) - out.print(comma, reg); - } - out.print("]"); + m_vector.dump(out); } } // namespace JSC |