5#ifndef RUNTIME_VM_CONSTANTS_ARM_H_
6#define RUNTIME_VM_CONSTANTS_ARM_H_
8#ifndef RUNTIME_VM_CONSTANTS_H_
9#error Do not include constants_arm.h directly; use constants.h instead.
32#define LR LR_DO_NOT_USE_DIRECTLY
34#define R(reg) (static_cast<RegList>(1) << (reg))
38#if defined(DART_TARGET_OS_ANDROID) || defined(DART_TARGET_OS_LINUX)
40#elif defined(DART_TARGET_OS_MACOS_IOS) || defined(DART_TARGET_OS_WINDOWS)
102#if defined(DART_TARGET_OS_MACOS) || defined(DART_TARGET_OS_MACOS_IOS)
172#if defined(VFPv3_D16)
228#if defined(VFPv3_D16)
260 return static_cast<DRegister>((q * 2) + 1);
264#if defined(VFPv3_D32)
273#if defined(VFPv3_D32)
357#if defined(DART_PRECOMPILER)
648 (1 <<
R0) | (1 <<
R1) | (1 <<
R2) | (1 <<
R3);
650#if defined(DART_TARGET_OS_MACOS) || defined(DART_TARGET_OS_MACOS_IOS)
652 (1 <<
R4) | (1 <<
R5) | (1 <<
R6) | (1 <<
R8) | (1 <<
R10) | (1 <<
R11);
656 (1 <<
R7) | (1 <<
R8) | (1 <<
R9) |
665 (1 <<
PP) | (1 <<
THR) | (1 <<
LR) |
680#if defined(DART_TARGET_OS_MACOS) || defined(DART_TARGET_OS_MACOS_IOS)
725#if defined(DART_TARGET_OS_MACOS_IOS)
951#if defined(TARGET_ARCH_IS_32_BIT)
957#error "Unexpected word size"
959#if !defined(DART_COMPRESSED_POINTERS)
962#error Cannot compress ARM32
1008 return *
reinterpret_cast<const int32_t*
>(
this);
1013 *
reinterpret_cast<int32_t*
>(
this) =
value;
1085 return static_cast<int32_t
>(bits << 8) >> 8;
1093 return ((
Bits(8, 12) << 4) |
Bits(0, 4));
1098 return ((
Bits(16, 4) << 12) |
Bits(0, 12));
1103 uint32_t imm32 = (
Bit(19) << 31) | (((1 << 5) -
Bit(18)) << 25) |
1104 (
Bits(16, 2) << 23) | (
Bits(0, 4) << 19);
1105 return bit_cast<float, uint32_t>(imm32);
1110 uint64_t imm64 = (
Bit(19) * (1LL << 63)) | (((1LL << 8) -
Bit(18)) << 54) |
1111 (
Bits(16, 2) * (1LL << 52)) | (
Bits(0, 4) * (1LL << 48));
1112 return bit_cast<double, uint64_t>(imm64);
1154 return ((
Bits(20, 5) & 0x19) != 0x10) &&
1165 return ((
Bit(25) == 0) && ((
Bits(20, 5) & 0x19) == 0x10) && (
Bit(7) == 0));
1169 return ((
Bit(25) == 0) && (
Bits(4, 4) == 9));
1218 return ((
Bit(24) == 0) && (
Bits(9, 3) == 5));
1227 return ((
Bits(21, 4) == 2) && (
Bits(9, 3) == 5) &&
1228 ((
Bits(4, 4) & 0xd) == 1));
1235 return ((
Bits(20, 5) & 0x12) == 0x10) && (
Bits(9, 3) == 5);
1243 return (
Bits(9, 3) == 5) && ((puw == 2) || (puw == 3) || (puw == 5));
1248 return (
Bits(25, 3) == 1);
1253 return (
Bits(24, 4) == 4) && (
Bit(20) == 0);
1275 (
Bits(8, 4) == 0b1111) && (
Bits(16, 4) == 0b1111));
1303 DISALLOW_ALLOCATION();
1304 DISALLOW_IMPLICIT_CONSTRUCTORS(
Instr);
1338#define LINK_REGISTER (LinkRegister())
#define ASSERT_EQUAL(expected, actual)
static constexpr ExtensionStrategy kArgumentStackExtension
static constexpr Register kSecondReturnReg
static constexpr intptr_t kCalleeSaveCpuRegisters
static constexpr AlignmentStrategy kArgumentRegisterAlignmentVarArgs
static constexpr AlignmentStrategy kFieldAlignment
static const FpuRegister FpuArgumentRegisters[]
static const Register ArgumentRegisters[]
static constexpr bool kArgumentIntRegXorFpuReg
static constexpr intptr_t kNumDFpuArgRegs
static const DRegister FpuDArgumentRegisters[]
static constexpr intptr_t kFpuArgumentRegisters
static constexpr intptr_t kNumSFpuArgRegs
static const SRegister FpuSArgumentRegisters[]
static constexpr FpuRegister kReturnFpuReg
static constexpr intptr_t kNumFpuArgRegs
static constexpr Register kPointerToReturnStructRegisterCall
static constexpr Register kFirstNonArgumentRegister
static constexpr Register kFfiAnyNonAbiRegister
static constexpr AlignmentStrategy kArgumentStackAlignmentVarArgs
static constexpr Register kPointerToReturnStructRegisterReturn
static constexpr AlignmentStrategy kArgumentRegisterAlignment
static constexpr ExtensionStrategy kReturnRegisterExtension
COMPILE_ASSERT(((R(kFirstNonArgumentRegister)|R(kSecondNonArgumentRegister)) &(kArgumentRegisters|R(kPointerToReturnStructRegisterCall)))==0)
static constexpr Register kStackPointerRegister
static constexpr Register kReturnReg
static constexpr intptr_t kArgumentRegisters
static constexpr Register kSecondNonArgumentRegister
static constexpr ExtensionStrategy kArgumentRegisterExtension
static constexpr intptr_t kNumArgRegs
static constexpr AlignmentStrategy kArgumentStackAlignment
static Instr * At(uword pc)
Register BitFieldExtractRnField() const
bool IsDataProcessing() const
static constexpr int32_t kSimulatorBreakCode
Opcode OpcodeField() const
float ImmFloatField() const
int ShiftAmountField() const
bool IsSIMDLoadStore() const
SRegister SmField() const
bool IsBitFieldExtractSignExtended() const
SRegister SnField() const
uint8_t BitFieldExtractWidthField() const
QRegister QmField() const
Register DivRdField() const
Register DivRnField() const
static constexpr int32_t kSimulatorBreakpointInstruction
bool IsVFPDataProcessingOrSingleTransfer() const
uint16_t MovwField() const
void SetInstructionBits(int32_t value)
static constexpr int32_t kBreakPointInstruction
int32_t InstructionBits() const
int MediaOp1Field() const
bool IsBitFieldExtract() const
uint16_t BkptField() const
bool IsMultiplyOrSyncPrimitive() const
int RegShiftField() const
int Offset12Field() const
double ImmDoubleField() const
QRegister QnField() const
bool IsMiscellaneous() const
bool IsSIMDDataProcessing() const
Condition ConditionField() const
Register DivRmField() const
bool IsVFPDoubleTransfer() const
bool IsVFPMultipleLoadStore() const
DRegister DmField() const
static constexpr int32_t kNopInstruction
SRegister SdField() const
uint32_t SvcField() const
QRegister QdField() const
static constexpr int32_t kSimulatorRedirectCode
bool IsVFPLoadStore() const
DRegister DnField() const
bool IsDivUnsigned() const
static constexpr int32_t kBreakPointCode
DRegister DdField() const
static constexpr int32_t kSimulatorRedirectInstruction
uint8_t BitFieldExtractLSBField() const
int MediaOp2Field() const
int Bits(int shift, int count) const
int32_t SImmed24Field() const
static constexpr int CountOneBits32(uint32_t x)
VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE auto & d
const QRegister kAbiLastPreservedFpuReg
const FpuRegister kNoFpuRegister
float ReciprocalSqrtEstimate(float op)
const Register kWriteBarrierSlotReg
constexpr bool operator!=(Register r, LinkRegister lr)
@ TIMES_COMPRESSED_HALF_WORD_SIZE
@ TIMES_COMPRESSED_WORD_SIZE
const int kDartVolatileCpuRegCount
static DRegister EvenDRegisterOf(QRegister q)
static Condition InvertCondition(Condition c)
const RegList kAbiVolatileCpuRegs
const Register kExceptionObjectReg
static DRegister OddDRegisterOf(QRegister q)
const RegList kReservedCpuRegisters
const Register kWriteBarrierObjectReg
const RegList kAllFpuRegistersList
float ReciprocalStep(float op1, float op2)
const Register kWriteBarrierValueReg
const char *const fpu_reg_names[kNumberOfFpuRegisters]
constexpr intptr_t kInt32SizeLog2
Register ConcreteRegister(LinkRegister)
const Register CALLEE_SAVED_TEMP
const SRegister STMP DART_USED
static SRegister OddSRegisterOf(DRegister d)
static DRegister DRegisterOf(SRegister s)
constexpr uword kBreakInstructionFiller
const Register ARGS_DESC_REG
const Register DISPATCH_TABLE_REG
const int kNumberOfFpuRegisters
const RegList kAbiPreservedCpuRegs
constexpr uword kDataMemoryBarrier
constexpr bool operator==(Register r, LinkRegister)
constexpr RegList kDartAvailableCpuRegs
const int kAbiPreservedCpuRegCount
const RegList kDartVolatileCpuRegs
@ kBitFieldExtractLSBBits
@ kBitFieldExtractWidthBits
@ kBitFieldExtractLSBShift
@ kBitFieldExtractWidthShift
@ kBitFieldExtractRnShift
const RegList kFpuRegistersWithoutSOverlap
const intptr_t kStoreBufferWrapperSize
const int kAbiPreservedFpuRegCount
constexpr int kRegisterAllocationBias
static QRegister QRegisterOf(DRegister d)
const char *const fpu_d_reg_names[kNumberOfDRegisters]
const Register FUNCTION_REG
constexpr intptr_t kNumberOfReservedCpuRegisters
const Register IC_DATA_REG
const char *const cpu_reg_names[kNumberOfCpuRegisters]
float ReciprocalSqrtStep(float op1, float op2)
const RegList kAbiArgumentCpuRegs
@ kNumberOfOverlappingQRegisters
@ kNumberOfOverlappingDRegisters
const Register kStackTraceObjectReg
const RegList kAllCpuRegistersList
const intptr_t kPreferredLoopAlignment
simd128_value_t fpu_register_t
float ReciprocalEstimate(float op)
const char *const fpu_s_reg_names[kNumberOfSRegisters]
const RegList kAbiVolatileFpuRegs
@ kAlignedToWordSizeAndValueSize
@ kAlignedToValueSizeBut8AlignedTo4
COMPILE_ASSERT(kUnreachableReference==WeakTable::kNoValue)
const char *const cpu_reg_abi_names[kNumberOfCpuRegisters]
const int kFpuRegisterSize
static SRegister EvenSRegisterOf(DRegister d)
constexpr int kNumberOfDartAvailableCpuRegs
const QRegister kAbiFirstPreservedFpuReg
static constexpr Register kResultReg
static constexpr Register kLengthReg
static constexpr Register kTypeArgumentsReg
static constexpr Register kResultReg
static constexpr Register kTempReg
static constexpr Register kFunctionReg
static constexpr Register kContextReg
static constexpr Register kResultReg
static constexpr Register kInstantiatorTypeArgsReg
static constexpr Register kScratchReg
static constexpr Register kResultReg
static constexpr Register kTempReg
static constexpr Register kTypeArgumentsReg
static constexpr Register kResultReg
static constexpr Register kTagsReg
static constexpr Register kShapeReg
static constexpr Register kResultReg
static constexpr Register kTemp1Reg
static constexpr Register kTemp2Reg
static constexpr Register kResultReg
static constexpr Register kShapeReg
static constexpr Register kValue2Reg
static constexpr Register kValue0Reg
static constexpr Register kTempReg
static constexpr Register kValue1Reg
static constexpr Register kLengthReg
static constexpr Register kResultReg
static constexpr Register kObjectReg
static constexpr Register kSubTypeReg
static constexpr Register kSuperTypeReg
static constexpr Register kFunctionTypeArgumentsReg
static constexpr intptr_t kAbiRegisters
static constexpr Register kInstantiatorTypeArgumentsReg
static constexpr Register kDstNameReg
static constexpr Register kSuspendStateReg
static constexpr Register kTempReg
static constexpr Register kResultReg
static constexpr FpuRegister kValueReg
static constexpr Register kDestinationReg
static constexpr Register kSrcFrameReg
static constexpr Register kFrameSizeReg
static constexpr Register kSourceReg
static constexpr Register kTempReg
static constexpr Register kDstFrameReg
static constexpr Register kCpuRegistersForArgs[]
static constexpr FpuRegister kFpuRegistersForArgs[]
static constexpr Register kClassIdReg
static constexpr Register kResultReg
static constexpr Register kRecognizedKindReg
static constexpr FpuRegister kInputReg
static constexpr Register kArgsReg
static constexpr Register kFieldReg
static constexpr Register kResultReg
static constexpr Register kInstanceReg
static constexpr Register kAddressReg
static constexpr Register kScratchReg
static constexpr Register kAddressReg
static constexpr Register kScratchReg
static constexpr Register kResultReg
static constexpr Register kFieldReg
static constexpr Register kTypeArgsReg
static constexpr Register kEntryStartReg
static constexpr intptr_t kSavedRegisters
static constexpr Register kCurrentEntryIndexReg
static constexpr Register kProbeMaskReg
static constexpr Register kProbeDistanceReg
static constexpr Register kInstantiatorTypeArgumentsReg
static constexpr Register kScratchReg
static constexpr Register kResultTypeReg
static constexpr Register kUninstantiatedTypeArgumentsReg
static constexpr Register kResultTypeArgumentsReg
static constexpr Register kFunctionTypeArgumentsReg
static constexpr Register kFieldReg
static constexpr Register kLengthReg
static constexpr Register kIndexReg
static constexpr Register kStackTraceReg
static constexpr Register kExceptionReg
static constexpr Register kSrcFrameReg
static constexpr Register kDstFrameReg
static constexpr Register kFrameSizeReg
static constexpr Register kSuspendStateReg
static constexpr Register kExceptionReg
static constexpr Register kTempReg
static constexpr Register kResumePcReg
static constexpr Register kStackTraceReg
static constexpr Register kSuspendStateReg
static constexpr intptr_t kInternalRegisters
static constexpr Register kInstanceCidOrSignatureReg
static constexpr Register kResultReg
static constexpr Register kSrcFrameReg
static constexpr Register kFunctionDataReg
static constexpr Register kSuspendStateReg
static constexpr Register kTempReg
static constexpr Register kArgumentReg
static constexpr Register kDstFrameReg
static constexpr Register kTypeArgsReg
static constexpr Register kFrameSizeReg
static constexpr intptr_t kInternalRegisters
static constexpr intptr_t kSavedTypeArgumentRegisters
static constexpr Register kSuperTypeArgumentReg
static constexpr Register kSubTypeArgumentReg
static constexpr Register kInstanceTypeArgumentsReg
static constexpr Register kScratchReg
static constexpr Register kExceptionReg
static constexpr Register kSubtypeTestCacheReg
static constexpr Register kDstTypeReg
static constexpr Register kInstanceReg
static constexpr Register kFunctionTypeArgumentsReg
static constexpr Register kInstantiatorTypeArgumentsReg
static constexpr intptr_t kNonPreservedAbiRegisters
static constexpr Register kSubtypeTestCacheResultReg
static constexpr intptr_t kPreservedAbiRegisters
static constexpr Register kScratchReg
static constexpr intptr_t kAbiRegisters
static constexpr Register kInstanceOfResultReg