Ignore:
Timestamp:
Jul 12, 2017, 4:50:01 PM (8 years ago)
Author:
[email protected]
Message:

Move Probe code from AbstractMacroAssembler to MacroAssembler.
https://bugs.webkit.org/show_bug.cgi?id=174441

Reviewed by Saam Barati.

This is a pure refactoring patch for moving probe code from the AbstractMacroAssembler
to MacroAssembler. There is no code behavior change.

  • assembler/AbstractMacroAssembler.h:

(JSC::AbstractMacroAssembler<AssemblerType>::Address::indexedBy):
(JSC::AbstractMacroAssembler::CPUState::gprName): Deleted.
(JSC::AbstractMacroAssembler::CPUState::fprName): Deleted.
(JSC::AbstractMacroAssembler::CPUState::gpr): Deleted.
(JSC::AbstractMacroAssembler::CPUState::fpr): Deleted.
(JSC::MacroAssemblerType>::Address::indexedBy): Deleted.

  • assembler/MacroAssembler.h:

(JSC::MacroAssembler::CPUState::gprName):
(JSC::MacroAssembler::CPUState::fprName):
(JSC::MacroAssembler::CPUState::gpr):
(JSC::MacroAssembler::CPUState::fpr):

  • assembler/MacroAssemblerARM.cpp:

(JSC::MacroAssembler::probe):
(JSC::MacroAssemblerARM::probe): Deleted.

  • assembler/MacroAssemblerARM.h:
  • assembler/MacroAssemblerARM64.cpp:

(JSC::MacroAssembler::probe):
(JSC::MacroAssemblerARM64::probe): Deleted.

  • assembler/MacroAssemblerARM64.h:
  • assembler/MacroAssemblerARMv7.cpp:

(JSC::MacroAssembler::probe):
(JSC::MacroAssemblerARMv7::probe): Deleted.

  • assembler/MacroAssemblerARMv7.h:
  • assembler/MacroAssemblerMIPS.h:
  • assembler/MacroAssemblerX86Common.cpp:

(JSC::MacroAssembler::probe):
(JSC::MacroAssemblerX86Common::probe): Deleted.

  • assembler/MacroAssemblerX86Common.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h

    r215592 r219434  
    7777};
    7878
    79 template <class AssemblerType, class MacroAssemblerType>
     79template <class AssemblerType>
    8080class AbstractMacroAssembler : public AbstractMacroAssemblerBase {
    8181public:
    82     typedef AbstractMacroAssembler<AssemblerType, MacroAssemblerType> AbstractMacroAssemblerType;
     82    typedef AbstractMacroAssembler<AssemblerType> AbstractMacroAssemblerType;
    8383    typedef AssemblerType AssemblerType_T;
    8484
     
    372372    // it may be used as a destination for a jump.
    373373    class Label {
    374         template<class TemplateAssemblerType, class TemplateMacroAssemblerType>
    375         friend class AbstractMacroAssembler;
     374        friend class AbstractMacroAssembler<AssemblerType>;
    376375        friend struct DFG::OSRExit;
    377376        friend class Jump;
     
    409408    // addPtr(TrustedImmPtr(i), a, b)
    410409    class ConvertibleLoadLabel {
    411         template<class TemplateAssemblerType, class TemplateMacroAssemblerType>
    412         friend class AbstractMacroAssembler;
     410        friend class AbstractMacroAssembler<AssemblerType>;
    413411        friend class LinkBuffer;
    414412       
     
    433431    // patched after the code has been generated.
    434432    class DataLabelPtr {
    435         template<class TemplateAssemblerType, class TemplateMacroAssemblerType>
    436         friend class AbstractMacroAssembler;
     433        friend class AbstractMacroAssembler<AssemblerType>;
    437434        friend class LinkBuffer;
    438435    public:
     
    457454    // patched after the code has been generated.
    458455    class DataLabel32 {
    459         template<class TemplateAssemblerType, class TemplateMacroAssemblerType>
    460         friend class AbstractMacroAssembler;
     456        friend class AbstractMacroAssembler<AssemblerType>;
    461457        friend class LinkBuffer;
    462458    public:
     
    481477    // compact immediate to be patched after the code has been generated.
    482478    class DataLabelCompact {
    483         template<class TemplateAssemblerType, class TemplateMacroAssemblerType>
    484         friend class AbstractMacroAssembler;
     479        friend class AbstractMacroAssembler<AssemblerType>;
    485480        friend class LinkBuffer;
    486481    public:
     
    512507    // destination.
    513508    class Call {
    514         template<class TemplateAssemblerType, class TemplateMacroAssemblerType>
    515         friend class AbstractMacroAssembler;
     509        friend class AbstractMacroAssembler<AssemblerType>;
    516510
    517511    public:
     
    558552    // destination.
    559553    class Jump {
    560         template<class TemplateAssemblerType, class TemplateMacroAssemblerType>
    561         friend class AbstractMacroAssembler;
     554        friend class AbstractMacroAssembler<AssemblerType>;
    562555        friend class Call;
    563556        friend struct DFG::OSRExit;
     
    843836    }
    844837
    845 #if ENABLE(MASM_PROBE)
    846 
    847     struct CPUState {
    848         #define DECLARE_REGISTER(_type, _regName) \
    849             _type _regName;
    850         FOR_EACH_CPU_REGISTER(DECLARE_REGISTER)
    851         #undef DECLARE_REGISTER
    852 
    853         static const char* gprName(RegisterID regID)
    854         {
    855             switch (regID) {
    856                 #define DECLARE_REGISTER(_type, _regName) \
    857                 case RegisterID::_regName: \
    858                     return #_regName;
    859                 FOR_EACH_CPU_GPREGISTER(DECLARE_REGISTER)
    860                 #undef DECLARE_REGISTER
    861             default:
    862                 RELEASE_ASSERT_NOT_REACHED();
    863             }
    864         }
    865 
    866         static const char* fprName(FPRegisterID regID)
    867         {
    868             switch (regID) {
    869                 #define DECLARE_REGISTER(_type, _regName) \
    870                 case FPRegisterID::_regName: \
    871                     return #_regName;
    872                 FOR_EACH_CPU_FPREGISTER(DECLARE_REGISTER)
    873                 #undef DECLARE_REGISTER
    874             default:
    875                 RELEASE_ASSERT_NOT_REACHED();
    876             }
    877         }
    878 
    879         void*& gpr(RegisterID regID)
    880         {
    881             switch (regID) {
    882                 #define DECLARE_REGISTER(_type, _regName) \
    883                 case RegisterID::_regName: \
    884                     return _regName;
    885                 FOR_EACH_CPU_GPREGISTER(DECLARE_REGISTER)
    886                 #undef DECLARE_REGISTER
    887             default:
    888                 RELEASE_ASSERT_NOT_REACHED();
    889             }
    890         }
    891 
    892         double& fpr(FPRegisterID regID)
    893         {
    894             switch (regID) {
    895                 #define DECLARE_REGISTER(_type, _regName) \
    896                 case FPRegisterID::_regName: \
    897                     return _regName;
    898                 FOR_EACH_CPU_FPREGISTER(DECLARE_REGISTER)
    899                 #undef DECLARE_REGISTER
    900             default:
    901                 RELEASE_ASSERT_NOT_REACHED();
    902             }
    903         }
    904     };
    905 
    906     // This function emits code to preserve the CPUState (e.g. registers),
    907     // call a user supplied probe function, and restore the CPUState before
    908     // continuing with other JIT generated code.
    909     //
    910     // The user supplied probe function will be called with a single pointer to
    911     // a ProbeContext struct (defined above) which contains, among other things,
    912     // the preserved CPUState. This allows the user probe function to inspect
    913     // the CPUState at that point in the JIT generated code.
    914     //
    915     // If the user probe function alters the register values in the ProbeContext,
    916     // the altered values will be loaded into the CPU registers when the probe
    917     // returns.
    918     //
    919     // The ProbeContext is stack allocated and is only valid for the duration
    920     // of the call to the user probe function.
    921     //
    922     // Note: probe() should be implemented by the target specific MacroAssembler.
    923     // This prototype is only provided here to document the interface.
    924 
    925     void probe(ProbeFunction, void* arg);
    926 
    927 #endif // ENABLE(MASM_PROBE)
    928 
    929838    AssemblerType m_assembler;
    930839   
     
    11281037}; // class AbstractMacroAssembler
    11291038
    1130 template <class AssemblerType, class MacroAssemblerType>
    1131 inline typename AbstractMacroAssembler<AssemblerType, MacroAssemblerType>::BaseIndex
    1132 AbstractMacroAssembler<AssemblerType, MacroAssemblerType>::Address::indexedBy(
    1133     typename AbstractMacroAssembler<AssemblerType, MacroAssemblerType>::RegisterID index,
    1134     typename AbstractMacroAssembler<AssemblerType, MacroAssemblerType>::Scale scale) const
     1039template <class AssemblerType>
     1040inline typename AbstractMacroAssembler<AssemblerType>::BaseIndex
     1041AbstractMacroAssembler<AssemblerType>::Address::indexedBy(
     1042    typename AbstractMacroAssembler<AssemblerType>::RegisterID index,
     1043    typename AbstractMacroAssembler<AssemblerType>::Scale scale) const
    11351044{
    11361045    return BaseIndex(base, index, scale, offset);
Note: See TracChangeset for help on using the changeset viewer.