Ignore:
Timestamp:
Aug 17, 2018, 8:26:19 AM (7 years ago)
Author:
[email protected]
Message:

[JSC] Add GPRReg::InvalidGPRReg and FPRReg::InvalidFPRReg
https://bugs.webkit.org/show_bug.cgi?id=188589

Patch by Yusuke Suzuki <[email protected]> and Fujii Hironori <Fujii Hironori> on 2018-08-17
Reviewed by Mark Lam.
And reviewed by Yusuke Suzuki for Hironori's change.

Source/JavaScriptCore:

Since GPRReg(RegisterID) and FPRReg(FPRegisterID) do not include -1 in their enum values,
UBSan dumps bunch of warnings "runtime error: load of value 4294967295, which is not a valid value for type 'RegisterID'".

  • We add InvalidGPRReg and InvalidFPRReg to enum values of GPRReg and FPRReg to suppress the above warnings.
  • We make GPRReg and FPRReg int8_t enums.
  • We replace #define InvalidGPRReg ((JSC::GPRReg)-1) to static constexpr GPRReg InvalidGPRReg { GPRReg::InvalidGPRReg };.
  • We add operator+/- definition for RegisterIDs as a MSVC workaround. MSVC fails to resolve operator+ and operator- if enum : int8_t is used instead of enum.
  • assembler/ARM64Assembler.h:
  • assembler/ARMAssembler.h:
  • assembler/ARMv7Assembler.h:
  • assembler/MIPSAssembler.h:
  • assembler/MacroAssembler.h:
  • assembler/X86Assembler.h:
  • jit/CCallHelpers.h:

(JSC::CCallHelpers::clampArrayToSize):

  • jit/FPRInfo.h:
  • jit/GPRInfo.h:

(JSC::JSValueRegs::JSValueRegs):
(JSC::JSValueRegs::tagGPR const):
(JSC::JSValueRegs::payloadGPR const):
(JSC::JSValueSource::JSValueSource):
(JSC::JSValueSource::unboxedCell):
(JSC::JSValueSource::operator bool const):
(JSC::JSValueSource::base const):
(JSC::JSValueSource::tagGPR const):
(JSC::JSValueSource::payloadGPR const):
(JSC::JSValueSource::hasKnownTag const):

Source/WebCore:

  • cssjit/FunctionCall.h:

(WebCore::FunctionCall::FunctionCall):

  • cssjit/SelectorCompiler.cpp:

(WebCore::SelectorCompiler::SelectorCodeGenerator::modulo):

  • html/HTMLKeygenElement.cpp:

Remove using namespace WebCore not to introduce operator+/- which makes the resolution of operator+/- for RegisterID ambiguous.

File:
1 edited

Legend:

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

    r234880 r234984  
    4040namespace ARMRegisters {
    4141
    42     typedef enum {
     42    typedef enum : int8_t {
    4343        r0,
    4444        r1,
     
    6464        sp = r13,
    6565        lr = r14,
    66         pc = r15
     66        pc = r15,
     67        InvalidGPRReg = -1,
    6768    } RegisterID;
    6869
    69     typedef enum {
     70    typedef enum : int8_t {
    7071        apsr,
    7172        fpscr
    7273    } SPRegisterID;
    7374
    74     typedef enum {
     75    typedef enum : int8_t {
    7576        s0,
    7677        s1,
     
    107108    } FPSingleRegisterID;
    108109
    109     typedef enum {
     110    typedef enum : int8_t {
    110111        d0,
    111112        d1,
     
    142143        d31,
    143144#endif // CPU(ARM_NEON) || CPU(ARM_VFP_V3_D32)
     145        InvalidFPRReg = -1,
    144146    } FPDoubleRegisterID;
    145147
    146148#if CPU(ARM_NEON)
    147     typedef enum {
     149    typedef enum : int8_t {
    148150        q0,
    149151        q1,
Note: See TracChangeset for help on using the changeset viewer.