5#ifndef V8_CODEGEN_ARM_CONSTANTS_ARM_H_
6#define V8_CODEGEN_ARM_CONSTANTS_ARM_H_
18#if defined(__arm__) && !defined(__ARM_EABI__)
19#error ARM EABI support is required.
32 return ((length & 0xfff0) << 4) | (length & 0xf);
36 return ((
instr >> 4) & 0xfff0) | (
instr & 0xf);
172constexpr int H = 1 << 5;
173constexpr int S6 = 1 << 6;
174constexpr int L = 1 << 20;
175constexpr int S = 1 << 20;
176constexpr int W = 1 << 21;
177constexpr int A = 1 << 21;
178constexpr int B = 1 << 22;
179constexpr int N = 1 << 22;
180constexpr int U = 1 << 23;
183constexpr int I = 1 << 25;
184constexpr int B0 = 1 << 0;
185constexpr int B4 = 1 << 4;
186constexpr int B5 = 1 << 5;
187constexpr int B6 = 1 << 6;
188constexpr int B7 = 1 << 7;
189constexpr int B8 = 1 << 8;
190constexpr int B9 = 1 << 9;
191constexpr int B10 = 1 << 10;
192constexpr int B12 = 1 << 12;
193constexpr int B16 = 1 << 16;
194constexpr int B17 = 1 << 17;
195constexpr int B18 = 1 << 18;
196constexpr int B19 = 1 << 19;
197constexpr int B20 = 1 << 20;
198constexpr int B21 = 1 << 21;
199constexpr int B22 = 1 << 22;
200constexpr int B23 = 1 << 23;
201constexpr int B24 = 1 << 24;
202constexpr int B25 = 1 << 25;
203constexpr int B26 = 1 << 26;
204constexpr int B27 = 1 << 27;
205constexpr int B28 = 1 << 28;
459#define DECLARE_STATIC_TYPED_ACCESSOR(return_type, Name) \
460 static inline return_type Name(Instr instr) { \
461 char* temp = reinterpret_cast<char*>(&instr); \
462 return reinterpret_cast<Instruction*>(temp)->Name(); \
465#define DECLARE_STATIC_ACCESSOR(Name) DECLARE_STATIC_TYPED_ACCESSOR(int, Name)
469 return *
reinterpret_cast<const Instr*
>(
this);
610 int32_t new_imm24 = branch_offset /
kInstrSize;
611 CHECK(is_int24(new_imm24));
628 return (
Bit(24) == 1) && (
Bit(23) == 0) && (
Bit(20) == 0) &&
668 return (
Bits(four_bit + 3, four_bit) << 1) |
Bit(one_bit);
670 int reg_num = (
Bit(one_bit) << 4) |
Bits(four_bit + 3, four_bit);
688 static const char*
Name(
int reg);
691 static int Number(
const char* name);
693 struct RegisterAlias {
707 static const char*
Name(
int reg,
bool is_double);
712 static int Number(
const char* name,
bool* is_double);
Instr InstructionBits() const
int BitField(int hi, int lo) const
int VFPDRegValue(VFPRegPrecision pre)
int SImmed24Value() const
bool IsSpecialType0() const
int ImmedMovwMovtValue() const
bool IsNopLikeType1() const
static constexpr int kPcLoadDelta
int VFPNRegValue(VFPRegPrecision pre)
SoftwareInterruptCodes SvcValue() const
int Bits(int hi, int lo) const
int ShiftAmountValue() const
void SetBranchOffset(int32_t branch_offset, WritableJitAllocation *jit_allocation)
int ConditionValue() const
Condition ConditionField() const
int VFPMRegValue(VFPRegPrecision pre)
ShiftOp ShiftField() const
Opcode OpcodeField() const
int Offset12Value() const
V8_EXPORT_PRIVATE void SetInstructionBits(Instr value, WritableJitAllocation *jit_allocation=nullptr)
int RegShiftValue() const
int CoprocessorValue() const
int VFPGlueRegValue(VFPRegPrecision pre, int four_bit, int one_bit)
static Instruction * At(Address pc)
DISALLOW_IMPLICIT_CONSTRUCTORS(Instruction)
Float64 DoubleImmedVmov() const
static const RegisterAlias aliases_[]
static const char * names_[kNumRegisters]
static const char * Name(int reg)
static const char * names_[kNumVFPRegisters]
static const char * Name(int reg, bool is_double)
static int Number(const char *name, bool *is_double)
#define DECLARE_STATIC_TYPED_ACCESSOR(return_type, Name)
#define DECLARE_STATIC_ACCESSOR(Name)
Hint NegateHint(Hint ignored)
constexpr AddrMode PreIndex
constexpr MiscInstructionsBits74 CLZ
constexpr VFPRoundingMode kRoundToNearest
constexpr int32_t kDefaultStopCode
constexpr VFPRoundingMode kRoundToMinusInf
constexpr SRegisterField CPSR_x
constexpr BlockAddrMode ia_x
constexpr BarrierOption OSHST
constexpr NeonDataType NeonS16
constexpr VFPRoundingMode RP
int EncodeConstantPoolLength(int length)
constexpr BarrierOption NSHLD
constexpr int kPCRegister
constexpr NeonSize Neon32
constexpr int kLdrMaxReachBits
@ kUnsignedGreaterThanEqual
CheckForInexactConversion
@ kCheckForInexactConversion
@ kDontCheckForInexactConversion
constexpr uint32_t kVFPNConditionFlagBit
constexpr BarrierOption LD
constexpr BarrierOption ISHST
constexpr SoftwareInterruptCodes kStopCode
constexpr BlockAddrMode db_x
constexpr BlockAddrMode ia_w
const int kConstantPoolLengthMaxMask
constexpr BarrierOption ST
constexpr BarrierOption OSH
constexpr int kCoprocessorMask
int DecodeConstantPoolLength(int instr)
int32_t signed_bitextract_32(int msb, int lsb, uint32_t x)
constexpr uint32_t kMaxStopCode
constexpr AddrMode NegPreIndex
constexpr uint32_t kVFPUnderflowExceptionBit
constexpr AddrMode Offset
constexpr BlockAddrMode db_w
constexpr NeonSize Neon64
constexpr NeonDataType NeonS8
constexpr BlockAddrMode da
int NeonSz(NeonDataType dt)
constexpr NeonListType nlt_3
int MiscInstructionsBits74
constexpr BlockAddrMode kBlockAddrModeMask
constexpr SRegisterField SPSR_f
uint32_t SRegisterFieldMask
constexpr NeonListType nlt_2
constexpr MiscInstructionsBits74 BKPT
constexpr int kNumVFPSingleRegisters
constexpr MiscInstructionsBits74 BXJ
constexpr SoftwareInterruptCodes kBreakpoint
constexpr uint32_t kVFPFlushToZeroMask
Union< Smi, HeapNumber > Number
constexpr BarrierOption ISHLD
constexpr VFPRoundingMode RM
constexpr BarrierOption NSH
constexpr BlockAddrMode ia
constexpr NeonSize Neon16
constexpr uint8_t kInstrSizeLog2
constexpr VFPRoundingMode kRoundToPlusInf
constexpr VFPConversionMode kFPSCRRounding
NeonDataType NeonSizeToDataType(NeonSize size)
constexpr VFPRegPrecision kDoublePrecision
constexpr int kRegSizeInBitsLog2
constexpr SoftwareInterruptCodes kCallRtRedirected
constexpr SRegisterField SPSR_c
constexpr uint32_t kVFPInvalidOpExceptionBit
constexpr NeonDataType NeonU8
constexpr BlockAddrMode da_x
constexpr BarrierOption ISH
constexpr int kNumVFPDoubleRegisters
constexpr int kNoRegister
Condition NegateCondition(Condition cond)
constexpr BlockAddrMode da_w
constexpr VFPRoundingMode RZ
const int kConstantPoolMarkerMask
constexpr size_t kMaxPCRelativeCodeRangeInMB
NeonSize NeonDataTypeToSize(NeonDataType dt)
constexpr uint32_t kVFPOverflowExceptionBit
constexpr ShiftOp kNumberOfShifts
constexpr NeonDataType NeonU16
constexpr SRegisterField CPSR_c
constexpr BlockAddrMode db
constexpr NeonDataType NeonS32
constexpr MiscInstructionsBits74 BLX
constexpr SRegisterField SPSR_x
constexpr BarrierOption NSHST
constexpr uint32_t kVFPCConditionFlagBit
constexpr int kNumVFPRegisters
constexpr BarrierOption SY
constexpr BlockAddrMode ib
constexpr NeonDataType NeonU32
constexpr SRegisterField CPSR_f
constexpr SRegisterField SPSR_s
constexpr AddrMode PostIndex
constexpr VFPRoundingMode kRoundToZero
constexpr int kVldrMaxReachBits
constexpr AddrMode NegPostIndex
constexpr VFPRoundingMode RN
constexpr NeonDataType NeonU64
constexpr uint32_t kVFPVConditionFlagBit
constexpr uint8_t kInstrSize
constexpr NeonDataType NeonS64
constexpr VFPConversionMode kDefaultRoundToZero
constexpr BarrierOption OSHLD
int NeonU(NeonDataType dt)
constexpr SRegisterField CPSR_s
const uint32_t kVFPRoundingModeMask
constexpr int kRootRegisterBias
constexpr NeonListType nlt_1
constexpr AddrMode NegOffset
constexpr MiscInstructionsBits74 BX
constexpr NeonListType nlt_4
constexpr int kOpCodeMask
constexpr VFPRegPrecision kSinglePrecision
constexpr uint32_t kVFPInexactExceptionBit
constexpr VFPRegPrecision kSimd128Precision
constexpr uint32_t kVFPDefaultNaNModeControlBit
constexpr BlockAddrMode ib_w
constexpr BlockAddrMode ib_x
const int kConstantPoolMarker
constexpr uint32_t kVFPZConditionFlagBit
constexpr uint32_t kStopCodeMask
constexpr uint32_t kVFPExceptionMask
constexpr int kNumRegisters
#define DCHECK_NE(v1, v2)
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)
#define V8_EXPORT_PRIVATE