28 #ifndef V8_ARM64_INSTRUCTIONS_ARM64_H_
29 #define V8_ARM64_INSTRUCTIONS_ARM64_H_
42 typedef uint32_t
Instr;
48 #if defined(ARM64_DEFINE_FP_STATICS)
49 #define DEFINE_FLOAT(name, value) extern const uint32_t name = value
50 #define DEFINE_DOUBLE(name, value) extern const uint64_t name = value
52 #define DEFINE_FLOAT(name, value) extern const float name
53 #define DEFINE_DOUBLE(name, value) extern const double name
54 #endif // defined(ARM64_DEFINE_FP_STATICS)
123 return *
reinterpret_cast<const Instr*
>(
this);
127 *
reinterpret_cast<Instr*
>(
this) = new_instr;
134 uint32_t
Bits(
int msb,
int lsb)
const {
155 #define DEFINE_GETTER(Name, HighBit, LowBit, Func) \
156 int64_t Name() const { return Func(HighBit, LowBit); }
163 int const offset = ((ImmPCRelHi() << ImmPCRelLo_width) | ImmPCRelLo());
164 int const width = ImmPCRelLo_width + ImmPCRelHi_width;
286 switch (branch_type) {
288 return ImmUncondBranch_width;
290 return ImmCondBranch_width;
292 return ImmCmpBranch_width;
294 return ImmTestBranch_width;
367 return reinterpret_cast<uint8_t*
>(
this) + offset;
386 return reinterpret_cast<Address>(target) - reinterpret_cast<Address>(
this);
501 #endif // V8_ARM64_INSTRUCTIONS_ARM64_H_
const unsigned kInstructionSizeLog2
bool IsPCRelAddressing() const
DEFINE_DOUBLE(kFP64PositiveInfinity, 0x7ff0000000000000UL)
int32_t SignedBits(int msb, int lsb) const
const unsigned kDebugMessageOffset
bool IsAddressAligned(Address addr, intptr_t alignment, int offset=0)
const Instr kImmExceptionIsRedirectedCall
bool IsUncondBranchImm() const
bool IsLdrLiteralX() const
#define INSTRUCTION_FIELDS_LIST(V_)
bool IsBranchAndLinkToRegister() const
const unsigned kLiteralEntrySizeLog2
bool IsLoadOrStore() const
DEFINE_FLOAT(kFP32PositiveInfinity, 0x7f800000)
Instr InstructionBits() const
V8_INLINE ptrdiff_t DistanceTo(Instruction *target)
void SetBranchImmTarget(Instruction *target)
#define ASSERT(condition)
#define DEFINE_GETTER(Name, HighBit, LowBit, Func)
static bool IsValidImmPCOffset(ImmBranchType branch_type, int32_t offset)
V8_INLINE Instruction * InstructionAtOffset(int64_t offset, CheckAlignment check=CHECK_ALIGNMENT)
const unsigned kDebuggerTracingDirectivesMask
static V8_INLINE Instruction * Cast(T src)
V8_INLINE Instr InstructionBits() const
bool IsInlineData() const
bool IsAddSubExtended() const
bool IsTestBranch() const
const Instr kImmExceptionIsPrintf
V8_INLINE Instruction * preceding(int count=1)
LSDataSize SizeLSPair() const
void SetImmPCOffsetTarget(Instruction *target)
uint32_t Bits(int msb, int lsb) const
bool IsCondBranchImm() const
void SetPCRelImmTarget(Instruction *target)
const unsigned kPrintfLength
Instruction * ImmPCOffsetTarget()
void check(i::Vector< const uint8_t > string)
const unsigned kInstructionSize
const unsigned kDebugParamsOffset
bool IsAddSubImmediate() const
bool IsLogicalImmediate() const
int32_t signed_bitextract_32(int msb, int lsb, int32_t x)
uint8_t * LiteralAddress()
#define T(name, string, precedence)
V8_INLINE Instruction * following(int count=1)
const Instr kImmExceptionIsUnreachable
static int ImmBranchRangeBitwidth(ImmBranchType branch_type)
const unsigned kDebugCodeOffset
bool IsTargetInImmPCOffsetRange(Instruction *target)
bool IsLdrLiteral() const
static int32_t ImmBranchRange(ImmBranchType branch_type)
void SetImmLLiteral(Instruction *source)
const unsigned kPrintfTypeOffset
bool IsCompareBranch() const
V8_INLINE void SetInstructionBits(Instr new_instr)
uint64_t InlineData() const
LSDataSize CalcLSPairDataSize(LoadStorePairOp op)
uint32_t unsigned_bitextract_32(int msb, int lsb, uint32_t x)
ImmBranchType BranchType() const
const Instr kImmExceptionIsDebug
static InstructionSequence * At(Address address)
Instr Mask(uint32_t mask) const