5 #ifndef V8_ARM64_INSTRUCTIONS_ARM64_H_
6 #define V8_ARM64_INSTRUCTIONS_ARM64_H_
25 #if defined(ARM64_DEFINE_FP_STATICS)
26 #define DEFINE_FLOAT(name, value) extern const uint32_t name = value
27 #define DEFINE_DOUBLE(name, value) extern const uint64_t name = value
29 #define DEFINE_FLOAT(name, value) extern const float name
30 #define DEFINE_DOUBLE(name, value) extern const double name
100 return *
reinterpret_cast<const Instr*
>(
this);
104 *
reinterpret_cast<Instr*
>(
this) = new_instr;
132 #define DEFINE_GETTER(Name, HighBit, LowBit, Func) \
133 int64_t Name() const { return Func(HighBit, LowBit); }
141 int const offset = ((ImmPCRelHi() << ImmPCRelLo_width) | ImmPCRelLo());
142 int const width = ImmPCRelLo_width + ImmPCRelHi_width;
276 switch (branch_type) {
278 return ImmUncondBranch_width;
280 return ImmCondBranch_width;
282 return ImmCmpBranch_width;
284 return ImmTestBranch_width;
357 return reinterpret_cast<uintptr_t>(
this) + offset;
376 return reinterpret_cast<Address>(target) -
reinterpret_cast<Address>(
this);
382 return is_int21(offset);
uint64_t InlineData() const
bool IsInlineData() const
static InstructionSequence * At(Address address)
Instr InstructionBits() const
int32_t SignedBits(int msb, int lsb) const
bool IsCompareBranch() const
Instr Mask(uint32_t mask) const
bool IsAddSubExtended() const
Instruction * InstructionAtOffset(int64_t offset, CheckAlignment check=CHECK_ALIGNMENT)
static Instruction * Cast(T src)
bool IsUncondBranchImm() const
bool IsTestBranch() const
bool IsBranchAndLinkToRegister() const
static int32_t ImmBranchRange(ImmBranchType branch_type)
bool IsLdrLiteral() const
bool IsAddSubImmediate() const
uintptr_t LiteralAddress()
Instruction * following(int count=1)
bool IsCondBranchImm() const
bool IsAddSubShifted() const
bool IsLoadOrStore() const
void SetPCRelImmTarget(Instruction *target)
void SetImmPCOffsetTarget(Instruction *target)
Instruction * ImmPCOffsetTarget()
bool IsLdrLiteralX() const
bool IsTargetInImmPCOffsetRange(Instruction *target)
static const int ImmPCRelRangeBitwidth
static bool IsValidImmPCOffset(ImmBranchType branch_type, int32_t offset)
static bool IsValidPCRelOffset(int offset)
LSDataSize SizeLSPair() const
void SetImmLLiteral(Instruction *source)
Instruction * preceding(int count=1)
void SetBranchImmTarget(Instruction *target)
static int ImmBranchRangeBitwidth(ImmBranchType branch_type)
void SetInstructionBits(Instr new_instr)
bool IsLogicalImmediate() const
ImmBranchType BranchType() const
ptrdiff_t DistanceTo(Instruction *target)
uint32_t Bits(int msb, int lsb) const
bool IsPCRelAddressing() const
#define INSTRUCTION_FIELDS_LIST(V_)
#define DEFINE_GETTER(Name, HighBit, LowBit, Func)
#define DCHECK(condition)
bool IsAddressAligned(Address addr, intptr_t alignment, int offset=0)
@ UnconditionalBranchFMask
@ UnconditionalBranchFixed
DEFINE_FLOAT(kFP32PositiveInfinity, 0x7f800000)
LSDataSize CalcLSPairDataSize(LoadStorePairOp op)
const Instr kImmExceptionIsRedirectedCall
const unsigned kDebuggerTracingDirectivesMask
static const unsigned kPrintfArgPatternBits
const unsigned kPrintfLength
const unsigned kDebugParamsOffset
const unsigned kPrintfMaxArgCount
const unsigned kLoadLiteralScaleLog2
const Instr kImmExceptionIsPrintf
const unsigned kPrintfArgPatternListOffset
const Instr kImmExceptionIsDebug
int32_t signed_bitextract_32(int msb, int lsb, int32_t x)
const Instr kImmExceptionIsUnreachable
const unsigned kDebugCodeOffset
const unsigned kInstructionSize
const unsigned kInstructionSizeLog2
@ UnconditionalBranchToRegisterMask
uint32_t unsigned_bitextract_32(int msb, int lsb, uint32_t x)
const unsigned kPrintfArgCountOffset
DEFINE_DOUBLE(kFP64PositiveInfinity, 0x7ff0000000000000UL)
const unsigned kDebugMessageOffset
Debugger support for the V8 JavaScript engine.
#define T(name, string, precedence)