| Index: src/arm/assembler-arm.h
|
| diff --git a/src/arm/assembler-arm.h b/src/arm/assembler-arm.h
|
| index 420d195f3d4e7c7e9ada4a86841453b44f38829e..9adf3095573acbd7195492d2f7a5669884469df9 100644
|
| --- a/src/arm/assembler-arm.h
|
| +++ b/src/arm/assembler-arm.h
|
| @@ -114,7 +114,7 @@ struct Register {
|
| kCode_no_reg = -1
|
| };
|
|
|
| - static const int kNumRegisters = Code::kAfterLast;
|
| + static constexpr int kNumRegisters = Code::kAfterLast;
|
|
|
| static Register from_code(int code) {
|
| DCHECK(code >= 0);
|
| @@ -144,13 +144,13 @@ struct Register {
|
| // r7: context register
|
| // r8: constant pool pointer register if FLAG_enable_embedded_constant_pool.
|
| // r9: lithium scratch
|
| -#define DECLARE_REGISTER(R) const Register R = {Register::kCode_##R};
|
| +#define DECLARE_REGISTER(R) constexpr Register R = {Register::kCode_##R};
|
| GENERAL_REGISTERS(DECLARE_REGISTER)
|
| #undef DECLARE_REGISTER
|
| -const Register no_reg = {Register::kCode_no_reg};
|
| +constexpr Register no_reg = {Register::kCode_no_reg};
|
|
|
| -static const bool kSimpleFPAliasing = false;
|
| -static const bool kSimdMaskRegisters = false;
|
| +constexpr bool kSimpleFPAliasing = false;
|
| +constexpr bool kSimdMaskRegisters = false;
|
|
|
| // Single word VFP register.
|
| struct SwVfpRegister {
|
| @@ -162,9 +162,9 @@ struct SwVfpRegister {
|
| kCode_no_reg = -1
|
| };
|
|
|
| - static const int kMaxNumRegisters = Code::kAfterLast;
|
| + static constexpr int kMaxNumRegisters = Code::kAfterLast;
|
|
|
| - static const int kSizeInBytes = 4;
|
| + static constexpr int kSizeInBytes = 4;
|
|
|
| bool is_valid() const { return 0 <= reg_code && reg_code < 32; }
|
| bool is(SwVfpRegister reg) const { return reg_code == reg.reg_code; }
|
| @@ -201,7 +201,7 @@ struct DwVfpRegister {
|
| kCode_no_reg = -1
|
| };
|
|
|
| - static const int kMaxNumRegisters = Code::kAfterLast;
|
| + static constexpr int kMaxNumRegisters = Code::kAfterLast;
|
|
|
| inline static int NumRegisters();
|
|
|
| @@ -209,7 +209,7 @@ struct DwVfpRegister {
|
| // hold 0.0, that does not fit in the immediate field of vmov instructions.
|
| // d14: 0.0
|
| // d15: scratch register.
|
| - static const int kSizeInBytes = 8;
|
| + static constexpr int kSizeInBytes = 8;
|
|
|
| bool is_valid() const { return 0 <= reg_code && reg_code < kMaxNumRegisters; }
|
| bool is(DwVfpRegister reg) const { return reg_code == reg.reg_code; }
|
| @@ -242,10 +242,9 @@ typedef DwVfpRegister DoubleRegister;
|
| // Double word VFP register d0-15.
|
| struct LowDwVfpRegister {
|
| public:
|
| - static const int kMaxNumLowRegisters = 16;
|
| - operator DwVfpRegister() const {
|
| - DwVfpRegister r = { reg_code };
|
| - return r;
|
| + static constexpr int kMaxNumLowRegisters = 16;
|
| + constexpr operator DwVfpRegister() const {
|
| + return DwVfpRegister { reg_code };
|
| }
|
| static LowDwVfpRegister from_code(int code) {
|
| LowDwVfpRegister r = { code };
|
| @@ -282,7 +281,7 @@ struct LowDwVfpRegister {
|
|
|
| // Quad word NEON register.
|
| struct QwNeonRegister {
|
| - static const int kMaxNumRegisters = 16;
|
| + static constexpr int kMaxNumRegisters = 16;
|
|
|
| static QwNeonRegister from_code(int code) {
|
| QwNeonRegister r = { code };
|
| @@ -328,102 +327,100 @@ typedef QwNeonRegister Simd128Register;
|
|
|
| // Support for the VFP registers s0 to s31 (d0 to d15).
|
| // Note that "s(N):s(N+1)" is the same as "d(N/2)".
|
| -const SwVfpRegister s0 = { 0 };
|
| -const SwVfpRegister s1 = { 1 };
|
| -const SwVfpRegister s2 = { 2 };
|
| -const SwVfpRegister s3 = { 3 };
|
| -const SwVfpRegister s4 = { 4 };
|
| -const SwVfpRegister s5 = { 5 };
|
| -const SwVfpRegister s6 = { 6 };
|
| -const SwVfpRegister s7 = { 7 };
|
| -const SwVfpRegister s8 = { 8 };
|
| -const SwVfpRegister s9 = { 9 };
|
| -const SwVfpRegister s10 = { 10 };
|
| -const SwVfpRegister s11 = { 11 };
|
| -const SwVfpRegister s12 = { 12 };
|
| -const SwVfpRegister s13 = { 13 };
|
| -const SwVfpRegister s14 = { 14 };
|
| -const SwVfpRegister s15 = { 15 };
|
| -const SwVfpRegister s16 = { 16 };
|
| -const SwVfpRegister s17 = { 17 };
|
| -const SwVfpRegister s18 = { 18 };
|
| -const SwVfpRegister s19 = { 19 };
|
| -const SwVfpRegister s20 = { 20 };
|
| -const SwVfpRegister s21 = { 21 };
|
| -const SwVfpRegister s22 = { 22 };
|
| -const SwVfpRegister s23 = { 23 };
|
| -const SwVfpRegister s24 = { 24 };
|
| -const SwVfpRegister s25 = { 25 };
|
| -const SwVfpRegister s26 = { 26 };
|
| -const SwVfpRegister s27 = { 27 };
|
| -const SwVfpRegister s28 = { 28 };
|
| -const SwVfpRegister s29 = { 29 };
|
| -const SwVfpRegister s30 = { 30 };
|
| -const SwVfpRegister s31 = { 31 };
|
| -
|
| -const DwVfpRegister no_dreg = { -1 };
|
| -const LowDwVfpRegister d0 = { 0 };
|
| -const LowDwVfpRegister d1 = { 1 };
|
| -const LowDwVfpRegister d2 = { 2 };
|
| -const LowDwVfpRegister d3 = { 3 };
|
| -const LowDwVfpRegister d4 = { 4 };
|
| -const LowDwVfpRegister d5 = { 5 };
|
| -const LowDwVfpRegister d6 = { 6 };
|
| -const LowDwVfpRegister d7 = { 7 };
|
| -const LowDwVfpRegister d8 = { 8 };
|
| -const LowDwVfpRegister d9 = { 9 };
|
| -const LowDwVfpRegister d10 = { 10 };
|
| -const LowDwVfpRegister d11 = { 11 };
|
| -const LowDwVfpRegister d12 = { 12 };
|
| -const LowDwVfpRegister d13 = { 13 };
|
| -const LowDwVfpRegister d14 = { 14 };
|
| -const LowDwVfpRegister d15 = { 15 };
|
| -const DwVfpRegister d16 = { 16 };
|
| -const DwVfpRegister d17 = { 17 };
|
| -const DwVfpRegister d18 = { 18 };
|
| -const DwVfpRegister d19 = { 19 };
|
| -const DwVfpRegister d20 = { 20 };
|
| -const DwVfpRegister d21 = { 21 };
|
| -const DwVfpRegister d22 = { 22 };
|
| -const DwVfpRegister d23 = { 23 };
|
| -const DwVfpRegister d24 = { 24 };
|
| -const DwVfpRegister d25 = { 25 };
|
| -const DwVfpRegister d26 = { 26 };
|
| -const DwVfpRegister d27 = { 27 };
|
| -const DwVfpRegister d28 = { 28 };
|
| -const DwVfpRegister d29 = { 29 };
|
| -const DwVfpRegister d30 = { 30 };
|
| -const DwVfpRegister d31 = { 31 };
|
| -
|
| -const QwNeonRegister q0 = { 0 };
|
| -const QwNeonRegister q1 = { 1 };
|
| -const QwNeonRegister q2 = { 2 };
|
| -const QwNeonRegister q3 = { 3 };
|
| -const QwNeonRegister q4 = { 4 };
|
| -const QwNeonRegister q5 = { 5 };
|
| -const QwNeonRegister q6 = { 6 };
|
| -const QwNeonRegister q7 = { 7 };
|
| -const QwNeonRegister q8 = { 8 };
|
| -const QwNeonRegister q9 = { 9 };
|
| -const QwNeonRegister q10 = { 10 };
|
| -const QwNeonRegister q11 = { 11 };
|
| -const QwNeonRegister q12 = { 12 };
|
| -const QwNeonRegister q13 = { 13 };
|
| -const QwNeonRegister q14 = { 14 };
|
| -const QwNeonRegister q15 = { 15 };
|
| -
|
| -
|
| -// Aliases for double registers. Defined using #define instead of
|
| -// "static const DwVfpRegister&" because Clang complains otherwise when a
|
| -// compilation unit that includes this header doesn't use the variables.
|
| -#define kFirstCalleeSavedDoubleReg d8
|
| -#define kLastCalleeSavedDoubleReg d15
|
| +constexpr SwVfpRegister s0 = { 0 };
|
| +constexpr SwVfpRegister s1 = { 1 };
|
| +constexpr SwVfpRegister s2 = { 2 };
|
| +constexpr SwVfpRegister s3 = { 3 };
|
| +constexpr SwVfpRegister s4 = { 4 };
|
| +constexpr SwVfpRegister s5 = { 5 };
|
| +constexpr SwVfpRegister s6 = { 6 };
|
| +constexpr SwVfpRegister s7 = { 7 };
|
| +constexpr SwVfpRegister s8 = { 8 };
|
| +constexpr SwVfpRegister s9 = { 9 };
|
| +constexpr SwVfpRegister s10 = { 10 };
|
| +constexpr SwVfpRegister s11 = { 11 };
|
| +constexpr SwVfpRegister s12 = { 12 };
|
| +constexpr SwVfpRegister s13 = { 13 };
|
| +constexpr SwVfpRegister s14 = { 14 };
|
| +constexpr SwVfpRegister s15 = { 15 };
|
| +constexpr SwVfpRegister s16 = { 16 };
|
| +constexpr SwVfpRegister s17 = { 17 };
|
| +constexpr SwVfpRegister s18 = { 18 };
|
| +constexpr SwVfpRegister s19 = { 19 };
|
| +constexpr SwVfpRegister s20 = { 20 };
|
| +constexpr SwVfpRegister s21 = { 21 };
|
| +constexpr SwVfpRegister s22 = { 22 };
|
| +constexpr SwVfpRegister s23 = { 23 };
|
| +constexpr SwVfpRegister s24 = { 24 };
|
| +constexpr SwVfpRegister s25 = { 25 };
|
| +constexpr SwVfpRegister s26 = { 26 };
|
| +constexpr SwVfpRegister s27 = { 27 };
|
| +constexpr SwVfpRegister s28 = { 28 };
|
| +constexpr SwVfpRegister s29 = { 29 };
|
| +constexpr SwVfpRegister s30 = { 30 };
|
| +constexpr SwVfpRegister s31 = { 31 };
|
| +
|
| +constexpr DwVfpRegister no_dreg = { -1 };
|
| +constexpr LowDwVfpRegister d0 = { 0 };
|
| +constexpr LowDwVfpRegister d1 = { 1 };
|
| +constexpr LowDwVfpRegister d2 = { 2 };
|
| +constexpr LowDwVfpRegister d3 = { 3 };
|
| +constexpr LowDwVfpRegister d4 = { 4 };
|
| +constexpr LowDwVfpRegister d5 = { 5 };
|
| +constexpr LowDwVfpRegister d6 = { 6 };
|
| +constexpr LowDwVfpRegister d7 = { 7 };
|
| +constexpr LowDwVfpRegister d8 = { 8 };
|
| +constexpr LowDwVfpRegister d9 = { 9 };
|
| +constexpr LowDwVfpRegister d10 = { 10 };
|
| +constexpr LowDwVfpRegister d11 = { 11 };
|
| +constexpr LowDwVfpRegister d12 = { 12 };
|
| +constexpr LowDwVfpRegister d13 = { 13 };
|
| +constexpr LowDwVfpRegister d14 = { 14 };
|
| +constexpr LowDwVfpRegister d15 = { 15 };
|
| +constexpr DwVfpRegister d16 = { 16 };
|
| +constexpr DwVfpRegister d17 = { 17 };
|
| +constexpr DwVfpRegister d18 = { 18 };
|
| +constexpr DwVfpRegister d19 = { 19 };
|
| +constexpr DwVfpRegister d20 = { 20 };
|
| +constexpr DwVfpRegister d21 = { 21 };
|
| +constexpr DwVfpRegister d22 = { 22 };
|
| +constexpr DwVfpRegister d23 = { 23 };
|
| +constexpr DwVfpRegister d24 = { 24 };
|
| +constexpr DwVfpRegister d25 = { 25 };
|
| +constexpr DwVfpRegister d26 = { 26 };
|
| +constexpr DwVfpRegister d27 = { 27 };
|
| +constexpr DwVfpRegister d28 = { 28 };
|
| +constexpr DwVfpRegister d29 = { 29 };
|
| +constexpr DwVfpRegister d30 = { 30 };
|
| +constexpr DwVfpRegister d31 = { 31 };
|
| +
|
| +constexpr QwNeonRegister q0 = { 0 };
|
| +constexpr QwNeonRegister q1 = { 1 };
|
| +constexpr QwNeonRegister q2 = { 2 };
|
| +constexpr QwNeonRegister q3 = { 3 };
|
| +constexpr QwNeonRegister q4 = { 4 };
|
| +constexpr QwNeonRegister q5 = { 5 };
|
| +constexpr QwNeonRegister q6 = { 6 };
|
| +constexpr QwNeonRegister q7 = { 7 };
|
| +constexpr QwNeonRegister q8 = { 8 };
|
| +constexpr QwNeonRegister q9 = { 9 };
|
| +constexpr QwNeonRegister q10 = { 10 };
|
| +constexpr QwNeonRegister q11 = { 11 };
|
| +constexpr QwNeonRegister q12 = { 12 };
|
| +constexpr QwNeonRegister q13 = { 13 };
|
| +constexpr QwNeonRegister q14 = { 14 };
|
| +constexpr QwNeonRegister q15 = { 15 };
|
| +
|
| +
|
| +// Aliases for double registers.
|
| +constexpr LowDwVfpRegister kFirstCalleeSavedDoubleReg = d8;
|
| +constexpr LowDwVfpRegister kLastCalleeSavedDoubleReg = d15;
|
| // kDoubleRegZero and kScratchDoubleReg must pair to form kScratchQuadReg. SIMD
|
| // code depends on kDoubleRegZero before kScratchDoubleReg.
|
| -#define kDoubleRegZero d14
|
| -#define kScratchDoubleReg d15
|
| +constexpr LowDwVfpRegister kDoubleRegZero = d14;
|
| +constexpr LowDwVfpRegister kScratchDoubleReg = d15;
|
| // After using kScratchQuadReg, kDoubleRegZero must be reset to 0.
|
| -#define kScratchQuadReg q7
|
| +constexpr QwNeonRegister kScratchQuadReg = q7;
|
|
|
| // Coprocessor register
|
| struct CRegister {
|
| @@ -443,24 +440,24 @@ struct CRegister {
|
| };
|
|
|
|
|
| -const CRegister no_creg = { -1 };
|
| +constexpr CRegister no_creg = { -1 };
|
|
|
| -const CRegister cr0 = { 0 };
|
| -const CRegister cr1 = { 1 };
|
| -const CRegister cr2 = { 2 };
|
| -const CRegister cr3 = { 3 };
|
| -const CRegister cr4 = { 4 };
|
| -const CRegister cr5 = { 5 };
|
| -const CRegister cr6 = { 6 };
|
| -const CRegister cr7 = { 7 };
|
| -const CRegister cr8 = { 8 };
|
| -const CRegister cr9 = { 9 };
|
| -const CRegister cr10 = { 10 };
|
| -const CRegister cr11 = { 11 };
|
| -const CRegister cr12 = { 12 };
|
| -const CRegister cr13 = { 13 };
|
| -const CRegister cr14 = { 14 };
|
| -const CRegister cr15 = { 15 };
|
| +constexpr CRegister cr0 = { 0 };
|
| +constexpr CRegister cr1 = { 1 };
|
| +constexpr CRegister cr2 = { 2 };
|
| +constexpr CRegister cr3 = { 3 };
|
| +constexpr CRegister cr4 = { 4 };
|
| +constexpr CRegister cr5 = { 5 };
|
| +constexpr CRegister cr6 = { 6 };
|
| +constexpr CRegister cr7 = { 7 };
|
| +constexpr CRegister cr8 = { 8 };
|
| +constexpr CRegister cr9 = { 9 };
|
| +constexpr CRegister cr10 = { 10 };
|
| +constexpr CRegister cr11 = { 11 };
|
| +constexpr CRegister cr12 = { 12 };
|
| +constexpr CRegister cr13 = { 13 };
|
| +constexpr CRegister cr14 = { 14 };
|
| +constexpr CRegister cr15 = { 15 };
|
|
|
|
|
| // Coprocessor number
|
| @@ -671,8 +668,8 @@ class NeonListOperand BASE_EMBEDDED {
|
| struct VmovIndex {
|
| unsigned char index;
|
| };
|
| -const VmovIndex VmovIndexLo = { 0 };
|
| -const VmovIndex VmovIndexHi = { 1 };
|
| +constexpr VmovIndex VmovIndexLo = { 0 };
|
| +constexpr VmovIndex VmovIndexHi = { 1 };
|
|
|
| class Assembler : public AssemblerBase {
|
| public:
|
| @@ -760,24 +757,24 @@ class Assembler : public AssemblerBase {
|
| // Here we are patching the address in the constant pool, not the actual call
|
| // instruction. The address in the constant pool is the same size as a
|
| // pointer.
|
| - static const int kSpecialTargetSize = kPointerSize;
|
| + static constexpr int kSpecialTargetSize = kPointerSize;
|
|
|
| // Size of an instruction.
|
| - static const int kInstrSize = sizeof(Instr);
|
| + static constexpr int kInstrSize = sizeof(Instr);
|
|
|
| // Distance between start of patched debug break slot and the emitted address
|
| // to jump to.
|
| // Patched debug break slot code is:
|
| // ldr ip, [pc, #0] @ emited address and start
|
| // blx ip
|
| - static const int kPatchDebugBreakSlotAddressOffset = 2 * kInstrSize;
|
| + static constexpr int kPatchDebugBreakSlotAddressOffset = 2 * kInstrSize;
|
|
|
| // Difference between address of current opcode and value read from pc
|
| // register.
|
| - static const int kPcLoadDelta = 8;
|
| + static constexpr int kPcLoadDelta = 8;
|
|
|
| - static const int kDebugBreakSlotInstructions = 4;
|
| - static const int kDebugBreakSlotLength =
|
| + static constexpr int kDebugBreakSlotInstructions = 4;
|
| + static constexpr int kDebugBreakSlotLength =
|
| kDebugBreakSlotInstructions * kInstrSize;
|
|
|
| // ---------------------------------------------------------------------------
|
| @@ -1592,12 +1589,14 @@ class Assembler : public AssemblerBase {
|
| // reach +/-4KB for integer PC-relative loads and +/-1KB for floating-point
|
| // PC-relative loads, thereby defining a maximum distance between the
|
| // instruction and the accessed constant.
|
| - static const int kMaxDistToIntPool = 4*KB;
|
| - static const int kMaxDistToFPPool = 1*KB;
|
| + static constexpr int kMaxDistToIntPool = 4 * KB;
|
| + static constexpr int kMaxDistToFPPool = 1 * KB;
|
| // All relocations could be integer, it therefore acts as the limit.
|
| - static const int kMinNumPendingConstants = 4;
|
| - static const int kMaxNumPending32Constants = kMaxDistToIntPool / kInstrSize;
|
| - static const int kMaxNumPending64Constants = kMaxDistToFPPool / kInstrSize;
|
| + static constexpr int kMinNumPendingConstants = 4;
|
| + static constexpr int kMaxNumPending32Constants =
|
| + kMaxDistToIntPool / kInstrSize;
|
| + static constexpr int kMaxNumPending64Constants =
|
| + kMaxDistToFPPool / kInstrSize;
|
|
|
| // Postpone the generation of the constant pool for the specified number of
|
| // instructions.
|
| @@ -1700,7 +1699,7 @@ class Assembler : public AssemblerBase {
|
| // the generated instructions. This is so that multi-instruction sequences do
|
| // not have to check for overflow. The same is true for writes of large
|
| // relocation info entries.
|
| - static const int kGap = 32;
|
| + static constexpr int kGap = 32;
|
|
|
| // Constant pool generation
|
| // Pools are emitted in the instruction stream, preferably after unconditional
|
| @@ -1716,8 +1715,8 @@ class Assembler : public AssemblerBase {
|
| // expensive. By default we only check again once a number of instructions
|
| // has been generated. That also means that the sizing of the buffers is not
|
| // an exact science, and that we rely on some slop to not overrun buffers.
|
| - static const int kCheckPoolIntervalInst = 32;
|
| - static const int kCheckPoolInterval = kCheckPoolIntervalInst * kInstrSize;
|
| + static constexpr int kCheckPoolIntervalInst = 32;
|
| + static constexpr int kCheckPoolInterval = kCheckPoolIntervalInst * kInstrSize;
|
|
|
|
|
| // Emission of the constant pool may be blocked in some code sequences.
|
| @@ -1731,7 +1730,7 @@ class Assembler : public AssemblerBase {
|
|
|
| // Relocation info generation
|
| // Each relocation is encoded as a variable size value
|
| - static const int kMaxRelocSize = RelocInfoWriter::kMaxSize;
|
| + static constexpr int kMaxRelocSize = RelocInfoWriter::kMaxSize;
|
| RelocInfoWriter reloc_info_writer;
|
|
|
| // ConstantPoolEntry records are used during code generation as temporary
|
| @@ -1785,7 +1784,7 @@ class Assembler : public AssemblerBase {
|
| friend class EnsureSpace;
|
| };
|
|
|
| -static const int kNoCodeAgeSequenceLength = 3 * Assembler::kInstrSize;
|
| +constexpr int kNoCodeAgeSequenceLength = 3 * Assembler::kInstrSize;
|
|
|
| class EnsureSpace BASE_EMBEDDED {
|
| public:
|
|
|