5#ifndef V8_CODEGEN_ARM64_MACRO_ASSEMBLER_ARM64_INL_H_
6#define V8_CODEGEN_ARM64_MACRO_ASSEMBLER_ARM64_INL_H_
41 DCHECK(allow_macro_instructions());
48 DCHECK(allow_macro_instructions());
54 DCHECK(allow_macro_instructions());
60 DCHECK(allow_macro_instructions());
67 DCHECK(allow_macro_instructions());
74 DCHECK(allow_macro_instructions());
81 DCHECK(allow_macro_instructions());
88 DCHECK(allow_macro_instructions());
95 DCHECK(allow_macro_instructions());
102 DCHECK(allow_macro_instructions());
113 Ccmp(rn.
W(), operand.
ToW(), nzcv, cond);
115 Ccmp(rn, operand, nzcv, cond);
121 DCHECK(allow_macro_instructions());
131 DCHECK(allow_macro_instructions());
153 DCHECK(allow_macro_instructions());
164 DCHECK(allow_macro_instructions());
186 DCHECK(allow_macro_instructions());
196 DCHECK(allow_macro_instructions());
201 DCHECK(allow_macro_instructions());
220 DCHECK(allow_macro_instructions());
230 DCHECK(allow_macro_instructions());
236 DCHECK(allow_macro_instructions());
243 DCHECK(allow_macro_instructions());
250 DCHECK(allow_macro_instructions());
257 DCHECK(allow_macro_instructions());
263 DCHECK(allow_macro_instructions());
266 Sbc(rd, zr, operand);
270 DCHECK(allow_macro_instructions());
273 Sbcs(rd, zr, operand);
277 DCHECK(allow_macro_instructions());
282#define DEFINE_FUNCTION(FN, REGTYPE, REG, OP) \
283 void MacroAssembler::FN(const REGTYPE REG, const MemOperand& addr) { \
284 DCHECK(allow_macro_instructions()); \
285 LoadStoreMacro(REG, addr, OP); \
288#undef DEFINE_FUNCTION
290#define DEFINE_FUNCTION(FN, REGTYPE, REG, REG2, OP) \
291 void MacroAssembler::FN(const REGTYPE REG, const REGTYPE REG2, \
292 const MemOperand& addr) { \
293 DCHECK(allow_macro_instructions()); \
294 LoadStorePairMacro(REG, REG2, addr, OP); \
297#undef DEFINE_FUNCTION
299#define DEFINE_FUNCTION(FN, OP) \
300 void MacroAssembler::FN(const Register& rt, const Register& rn) { \
301 DCHECK(allow_macro_instructions()); \
305#undef DEFINE_FUNCTION
307#define DEFINE_FUNCTION(FN, OP) \
308 void MacroAssembler::FN(const Register& rs, const Register& rt, \
309 const Register& rn) { \
310 DCHECK(allow_macro_instructions()); \
314#undef DEFINE_FUNCTION
316#define DEFINE_FUNCTION(FN, OP) \
317 void MacroAssembler::FN(const Register& rs, const Register& rt, \
318 const MemOperand& src) { \
319 DCHECK(allow_macro_instructions()); \
323#undef DEFINE_FUNCTION
325#define DEFINE_FUNCTION(FN, OP) \
326 void MacroAssembler::FN(const Register& rs, const Register& rs2, \
327 const Register& rt, const Register& rt2, \
328 const MemOperand& src) { \
329 DCHECK(allow_macro_instructions()); \
330 OP(rs, rs2, rt, rt2, src); \
333#undef DEFINE_FUNCTION
335#define DEFINE_LOAD_FUNCTION(FN, OP) \
336 void MacroAssembler::FN(const Register& rs, const Register& rt, \
337 const MemOperand& src) { \
338 DCHECK(allow_macro_instructions_); \
341#define DEFINE_STORE_FUNCTION(FN, OP) \
342 void MacroAssembler::FN(const Register& rs, const MemOperand& src) { \
343 DCHECK(allow_macro_instructions_); \
352#define DEFINE_SWP_FUNCTION(FN, OP) \
353 void MacroAssembler::FN(const Register& rs, const Register& rt, \
354 const MemOperand& src) { \
355 DCHECK(allow_macro_instructions_); \
363 DCHECK(allow_macro_instructions());
370 DCHECK(allow_macro_instructions());
376 DCHECK(allow_macro_instructions());
382 DCHECK(allow_macro_instructions());
388 DCHECK(allow_macro_instructions());
390 bfi(rd, rn, lsb, width);
395 DCHECK(allow_macro_instructions());
397 bfxil(rd, rn, lsb, width);
401 DCHECK(allow_macro_instructions());
426#ifdef V8_ENABLE_CONTROL_FLOW_INTEGRITY
432#ifdef V8_ENABLE_CONTROL_FLOW_INTEGRITY
440#ifdef V8_ENABLE_CONTROL_FLOW_INTEGRITY
446#ifdef V8_ENABLE_CONTROL_FLOW_INTEGRITY
452#ifdef V8_ENABLE_CONTROL_FLOW_INTEGRITY
460#ifdef V8_ENABLE_CONTROL_FLOW_INTEGRITY
468 DCHECK(allow_macro_instructions());
473 DCHECK(allow_macro_instructions());
479 DCHECK(allow_macro_instructions());
485 DCHECK(allow_macro_instructions());
491 DCHECK(allow_macro_instructions());
499 DCHECK(allow_macro_instructions());
506 DCHECK(allow_macro_instructions());
512 DCHECK(allow_macro_instructions());
519 DCHECK(allow_macro_instructions());
528 DCHECK(allow_macro_instructions());
531 csel(rd, xzr, rd, cond);
538 DCHECK(allow_macro_instructions());
543 csel(rd, rn, rd, cond);
548 DCHECK(allow_macro_instructions());
553 DCHECK(allow_macro_instructions());
560 DCHECK(allow_macro_instructions());
568 DCHECK(allow_macro_instructions());
571 csinc(rd, rn, rm, cond);
576 DCHECK(allow_macro_instructions());
579 csinv(rd, rn, rm, cond);
584 DCHECK(allow_macro_instructions());
587 csneg(rd, rn, rm, cond);
591 DCHECK(allow_macro_instructions());
596 DCHECK(allow_macro_instructions());
601 DCHECK(allow_macro_instructions());
602 debug(message, code, params);
607 DCHECK(allow_macro_instructions());
609 extr(rd, rn, rm, lsb);
613 DCHECK(allow_macro_instructions());
619 DCHECK(allow_macro_instructions());
625 DCHECK(allow_macro_instructions());
632 DCHECK(allow_macro_instructions());
640 DCHECK(allow_macro_instructions());
645 DCHECK(allow_macro_instructions());
658 DCHECK(allow_macro_instructions());
664 DCHECK(allow_macro_instructions());
669 DCHECK(allow_macro_instructions());
675 DCHECK(allow_macro_instructions());
681 DCHECK(allow_macro_instructions());
687 DCHECK(allow_macro_instructions());
693 DCHECK(allow_macro_instructions());
699 DCHECK(allow_macro_instructions());
705 DCHECK(allow_macro_instructions());
710 DCHECK(allow_macro_instructions());
717 DCHECK(allow_macro_instructions());
723 DCHECK(allow_macro_instructions());
729 DCHECK(allow_macro_instructions());
735 DCHECK(allow_macro_instructions());
741 DCHECK(allow_macro_instructions());
747 DCHECK(allow_macro_instructions());
752 DCHECK(allow_macro_instructions());
763 DCHECK(allow_macro_instructions());
768 DCHECK(allow_macro_instructions());
777 Fmov(vd,
static_cast<float>(imm));
790 DCHECK(allow_macro_instructions());
799 Fmov(vd,
static_cast<double>(imm));
817 DCHECK(allow_macro_instructions());
824 DCHECK(allow_macro_instructions());
830 DCHECK(allow_macro_instructions());
836 DCHECK(allow_macro_instructions());
842 DCHECK(allow_macro_instructions());
848 DCHECK(allow_macro_instructions());
853 DCHECK(allow_macro_instructions());
858 DCHECK(allow_macro_instructions());
863 DCHECK(allow_macro_instructions());
868 DCHECK(allow_macro_instructions());
874 DCHECK(allow_macro_instructions());
881 DCHECK(allow_macro_instructions());
888 DCHECK(allow_macro_instructions());
895 DCHECK(allow_macro_instructions());
902 DCHECK(allow_macro_instructions());
909 DCHECK(allow_macro_instructions());
915 DCHECK(allow_macro_instructions());
921 DCHECK(allow_macro_instructions());
933 DCHECK(allow_macro_instructions());
940 DCHECK(allow_macro_instructions());
946 DCHECK(allow_macro_instructions());
952 DCHECK(allow_macro_instructions());
959 DCHECK(allow_macro_instructions());
965 DCHECK(allow_macro_instructions());
971 DCHECK(allow_macro_instructions());
978 DCHECK(allow_macro_instructions());
985 DCHECK(allow_macro_instructions());
992 DCHECK(allow_macro_instructions());
994 sbfx(rd, rn, lsb, width);
999 DCHECK(allow_macro_instructions());
1000 scvtf(fd, rn, fbits);
1005 DCHECK(allow_macro_instructions());
1012 DCHECK(allow_macro_instructions());
1019 DCHECK(allow_macro_instructions());
1026 DCHECK(allow_macro_instructions());
1033 DCHECK(allow_macro_instructions());
1040 DCHECK(allow_macro_instructions());
1047 DCHECK(allow_macro_instructions());
1053 DCHECK(allow_macro_instructions());
1059 DCHECK(allow_macro_instructions());
1065 DCHECK(allow_macro_instructions());
1072 DCHECK(allow_macro_instructions());
1074 ubfiz(rd, rn, lsb, width);
1079 DCHECK(allow_macro_instructions());
1081 sbfiz(rd, rn, lsb, width);
1086 DCHECK(allow_macro_instructions());
1088 ubfx(rd, rn, lsb, width);
1093 DCHECK(allow_macro_instructions());
1094 ucvtf(fd, rn, fbits);
1099 DCHECK(allow_macro_instructions());
1106 DCHECK(allow_macro_instructions());
1113 DCHECK(allow_macro_instructions());
1119 DCHECK(allow_macro_instructions());
1125 DCHECK(allow_macro_instructions());
1131 DCHECK(allow_macro_instructions());
1141#ifdef V8_COMPRESS_POINTERS
1156 if (
v8_flags.enable_slow_asserts) {
1170 if (src.IsImmediateOffset() && src.shift_amount() == 0) {
1199 if (
v8_flags.enable_slow_asserts) {
1211 Label* not_smi_label) {
1215 Tbz(value, 0, smi_label);
1216 if (not_smi_label) {
1221 Tbnz(value, 0, not_smi_label);
1239 JumpIfSmi(value,
nullptr, not_smi_label);
1250template <MacroAssembler::StoreLRMode lr_mode>
1255 (src2 == lr) || (src3 == lr)));
1257 (src2 != lr) && (src3 != lr)));
1259#ifdef V8_ENABLE_CONTROL_FLOW_INTEGRITY
1272template <MacroAssembler::StoreLRMode lr_mode>
1276#ifdef V8_ENABLE_CONTROL_FLOW_INTEGRITY
1291template <MacroAssembler::LoadLRMode lr_mode>
1307 (dst2 == lr) || (dst3 == lr)));
1309 (dst2 != lr) && (dst3 != lr));
1311#ifdef V8_ENABLE_CONTROL_FLOW_INTEGRITY
1318template <MacroAssembler::StoreLRMode lr_mode>
1322#ifdef V8_ENABLE_CONTROL_FLOW_INTEGRITY
1328 if (
offset.IsImmediate()) {
1332 Check(
le, AbortReason::kStackAccessBelowStackPointer);
1338template <MacroAssembler::LoadLRMode lr_mode>
1340 if (
offset.IsImmediate()) {
1344 Check(
le, AbortReason::kStackAccessBelowStackPointer);
1351#ifdef V8_ENABLE_CONTROL_FLOW_INTEGRITY
1360 uint64_t size =
count * unit_size;
1366#ifdef V8_TARGET_OS_WIN
1367 while (size > kStackPageSize) {
1368 Sub(sp, sp, kStackPageSize);
1370 size -= kStackPageSize;
1377 bool assume_sp_aligned) {
1378 if (unit_size == 0)
return;
1384 if (size.IsZero()) {
1389#ifdef V8_TARGET_OS_WIN
1397 Mov(bytes_scratch, size);
1400 Label touch_next_page;
1402 Bind(&touch_next_page);
1403 Sub(sp, sp, kStackPageSize);
1405 if (assume_sp_aligned) {
1412 Sub(bytes_scratch, bytes_scratch, kStackPageSize);
1415 Cmp(bytes_scratch, kStackPageSize);
1416 B(
gt, &touch_next_page);
1418 Sub(sp, sp, bytes_scratch);
1426 uint64_t size =
count * unit_size;
1437 if (unit_size == 0)
return;
1443 if (size.IsZero()) {
1506 const uint64_t bit_pattern,
1508 int bits =
reg.SizeInBits();
1519 const uint64_t bit_pattern,
1521 int bits =
reg.SizeInBits();
static bool IsImmFP32(uint32_t bits)
void uxtb(Register dst, Register src, int rotate=0, Condition cond=al)
void rev32(const Register &rd, const Register &rn)
void fcvtnu(const Register &rd, const VRegister &vn)
void cset(const Register &rd, Condition cond)
void umaddl(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void fcvtzs(const Register &rd, const VRegister &vn, int fbits=0)
void csetm(const Register &rd, Condition cond)
void hint(SystemHint code)
void bfi(Register dst, Register src, int lsb, int width, Condition cond=al)
void fcvtzu(const Register &rd, const VRegister &vn, int fbits=0)
void fnmsub(const VRegister &vd, const VRegister &vn, const VRegister &vm, const VRegister &va)
void csinc(const Register &rd, const Register &rn, const Register &rm, Condition cond)
void ucvtf(const VRegister &fd, const Register &rn, int fbits=0)
void smull(Register dstL, Register dstH, Register src1, Register src2, SBit s=LeaveCC, Condition cond=al)
void br(const Register &xn)
void b(int branch_offset, Condition cond=al, RelocInfo::Mode rmode=RelocInfo::NO_INFO)
void fmsub(const VRegister &vd, const VRegister &vn, const VRegister &vm, const VRegister &va)
void sbfiz(const Register &rd, const Register &rn, int lsb, int width)
void sxtw(const Register &rd, const Register &rn)
void mneg(const Register &rd, const Register &rn, const Register &rm)
void sxtb(Register dst, Register src, int rotate=0, Condition cond=al)
void bti(BranchTargetIdentifier id)
void mul(Register dst, Register src1, Register src2, SBit s=LeaveCC, Condition cond=al)
void asrv(const Register &rd, const Register &rn, const Register &rm)
void scvtf(const VRegister &fd, const Register &rn, int fbits=0)
void fmaxnm(const VRegister &vd, const VRegister &vn, const VRegister &vm)
void madd(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void sbfx(Register dst, Register src, int lsb, int width, Condition cond=al)
void bl(int branch_offset, Condition cond=al, RelocInfo::Mode rmode=RelocInfo::NO_INFO)
void msr(SRegisterFieldMask fields, const Operand &src, Condition cond=al)
Simd128Register Simd128Register ra
void lslv(const Register &rd, const Register &rn, const Register &rm)
void fcvtms(const Register &rd, const VRegister &vn)
void sxth(Register dst, Register src, int rotate=0, Condition cond=al)
static constexpr bool IsImmAddSub(int64_t immediate)
void lsr(Register dst, Register src1, const Operand &src2, SBit s=LeaveCC, Condition cond=al)
void fcvtmu(const Register &rd, const VRegister &vn)
void msub(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void cneg(const Register &rd, const Register &rn, Condition cond)
void fcmp(const VRegister &vn, const VRegister &vm)
void cls(const Register &rd, const Register &rn)
void umulh(const Register &rd, const Register &rn, const Register &rm)
void str(Register src, const MemOperand &dst, Condition cond=al)
void rorv(const Register &rd, const Register &rn, const Register &rm)
void fmov(const VRegister &fd, double imm)
void smaddl(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void rbit(Register dst, Register src, Condition cond=al)
void shift(Operand dst, Immediate shift_amount, int subcode, int size)
void clz(Register dst, Register src, Condition cond=al)
void extr(const Register &rd, const Register &rn, const Register &rm, int lsb)
void fcvt(const VRegister &vd, const VRegister &vn)
void dmb(BarrierOption option)
void fcvtns(const Register &rd, const VRegister &vn)
void udiv(Register dst, Register src1, Register src2, Condition cond=al)
void smsubl(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void fadd(const VRegister &vd, const VRegister &vn, const VRegister &vm)
static bool IsImmFP64(uint64_t bits)
void fminnm(const VRegister &vd, const VRegister &vn, const VRegister &vm)
void fccmp(const VRegister &vn, const VRegister &vm, StatusFlags nzcv, Condition cond)
void fmadd(const VRegister &vd, const VRegister &vn, const VRegister &vm, const VRegister &va)
void lsl(Register dst, Register src1, const Operand &src2, SBit s=LeaveCC, Condition cond=al)
void cinc(const Register &rd, const Register &rn, Condition cond)
void ubfiz(const Register &rd, const Register &rn, int lsb, int width)
void smulh(const Register &rd, const Register &rn, const Register &rm)
void fsub(const VRegister &vd, const VRegister &vn, const VRegister &vm)
void bfxil(const Register &rd, const Register &rn, int lsb, int width)
void uxth(Register dst, Register src, int rotate=0, Condition cond=al)
void csel(const Register &rd, const Register &rn, const Register &rm, Condition cond)
void ubfx(Register dst, Register src, int lsb, int width, Condition cond=al)
void fmax(const VRegister &vd, const VRegister &vn, const VRegister &vm)
void dsb(BarrierOption option)
void mrs(Register dst, SRegister s, Condition cond=al)
void rev(Register dst, Register src, Condition cond=al)
void fdiv(const VRegister &vd, const VRegister &vn, const VRegister &vm)
void rev16(const Register &rd, const Register &rn)
void DataProcImmediate(const Register &rd, const Register &rn, int immediate, Instr op)
void sdiv(Register dst, Register src1, Register src2, Condition cond=al)
void movk(const Register &rd, uint64_t imm, int shift=-1)
void cinv(const Register &rd, const Register &rn, Condition cond)
void CmpPlainRegister(const Register &rn, const Register &rm)
void fnmadd(const VRegister &vd, const VRegister &vn, const VRegister &vm, const VRegister &va)
void DataProcPlainRegister(const Register &rd, const Register &rn, const Register &rm, Instr op)
void ldr(Register dst, const MemOperand &src, Condition cond=al)
void fmul(const VRegister &vd, const VRegister &vn, const VRegister &vm)
void uxtw(const Register &rd, const Register &rn)
void fmin(const VRegister &vd, const VRegister &vn, const VRegister &vm)
void fcvtas(const Register &rd, const VRegister &vn)
void umsubl(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void fcsel(const VRegister &vd, const VRegister &vn, const VRegister &vm, Condition cond)
void fcvtau(const Register &rd, const VRegister &vn)
const Register & AppropriateZeroRegFor(const CPURegister ®) const
void csinv(const Register &rd, const Register &rn, const Register &rm, Condition cond)
void csneg(const Register &rd, const Register &rn, const Register &rm, Condition cond)
void lsrv(const Register &rd, const Register &rn, const Register &rm)
void CheckVeneerPool(bool force_emit, bool require_jump, size_t margin=kVeneerDistanceMargin)
static constexpr int kFixedSlotCountAboveFp
Isolate * isolate() const
void Mul(const Register &rd, const Register &rn, const Register &rm)
void CmovX(const Register &rd, const Register &rn, Condition cond)
void Asr(const Register &rd, const Register &rn, unsigned shift)
void Msub(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void Fcvt(const VRegister &fd, const VRegister &fn)
void Sxtb(const Register &rd, const Register &rn)
void InitializeRootRegister()
void AddSubWithCarryMacro(const Register &rd, const Register &rn, const Operand &operand, FlagsUpdate S, AddSubWithCarryOp op)
void Umulh(const Register &rd, const Register &rn, const Register &rm)
void Cmp(const Register &rn, int imm)
void AddSubMacro(const Register &rd, const Register &rn, const Operand &operand, FlagsUpdate S, AddSubOp op)
void Madd(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void CcmpTagged(const Register &rn, const Operand &operand, StatusFlags nzcv, Condition cond)
void Drop(int count, Condition cond=al)
void Dsb(BarrierDomain domain, BarrierType type)
void Udiv(const Register &rd, const Register &rn, const Register &rm)
void Orr(const Register &rd, const Register &rn, const Operand &operand)
void Neg(const Register &rd, const Operand &operand)
void Adcs(const Register &rd, const Register &rn, const Operand &operand)
void Add(const Register &rd, const Register &rn, const Operand &operand)
void Bics(const Register &rd, const Register &rn, const Operand &operand)
void PushArgument(const Register &arg)
void Mneg(const Register &rd, const Register &rn, const Register &rm)
void Umaddl(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void Adds(const Register &rd, const Register &rn, const Operand &operand)
void SmiUntag(Register reg, SBit s=LeaveCC)
void Fcvtau(const Register &rd, const VRegister &fn)
void Fmin(const VRegister &fd, const VRegister &fn, const VRegister &fm)
void Bind(Label *label, BranchTargetIdentifier id=BranchTargetIdentifier::kNone)
void Csneg(const Register &rd, const Register &rn, const Register &rm, Condition cond)
void Umsubl(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void Bic(const VRegister &vd, const int imm8, const int left_shift=0)
void Fmax(const VRegister &fd, const VRegister &fn, const VRegister &fm)
void Fnmadd(const VRegister &fd, const VRegister &fn, const VRegister &fm, const VRegister &fa)
void Ands(const Register &rd, const Register &rn, const Operand &operand)
void AssertPositiveOrZero(Register value) NOOP_UNLESS_DEBUG_CODE
void Uxth(const Register &rd, const Register &rn)
void Fcvtzu(const Register &rd, const VRegister &fn)
void CompareAndBranch(const Register &lhs, const Operand &rhs, Condition cond, Label *label)
void Fmov(VRegister fd, VRegister fn)
void Ngcs(const Register &rd, const Operand &operand)
void Fcvtms(const Register &rd, const VRegister &fn)
void Msr(SystemRegister sysreg, const Register &rt)
void Lsr(const Register &rd, const Register &rn, unsigned shift)
void Tst(const Register &rn, const Operand &operand)
void Smsubl(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void Fminnm(const VRegister &fd, const VRegister &fn, const VRegister &fm)
void Bfxil(const Register &rd, const Register &rn, unsigned lsb, unsigned width)
void Sxth(const Register &rd, const Register &rn)
void AssertFeedbackVector(Register object, Register scratch) NOOP_UNLESS_DEBUG_CODE
void LoadRootRelative(Register destination, int32_t offset) final
void JumpIfSmi(Register value, Label *smi_label)
void PopHelper(int count, int size, const CPURegister &dst0, const CPURegister &dst1, const CPURegister &dst2, const CPURegister &dst3)
void Poke(const CPURegister &src, const Operand &offset)
void Fabs(const VRegister &fd, const VRegister &fn)
void Smull(const Register &rd, const Register &rn, const Register &rm)
void Cmn(const Register &rn, const Operand &operand)
void Sbc(const Register &rd, const Register &rn, const Operand &operand)
void Hint(SystemHint code)
void Ror(const Register &rd, const Register &rs, unsigned shift)
void TestAndBranchIfAllClear(const Register ®, const uint64_t bit_pattern, Label *label)
void Smaddl(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void B(Label *label, BranchType type, Register reg=NoReg, int bit=-1)
void Clz(const Register &rd, const Register &rn)
void Peek(const CPURegister &dst, const Operand &offset)
void Fmaxnm(const VRegister &fd, const VRegister &fn, const VRegister &fm)
void Uxtw(const Register &rd, const Register &rn)
void Tbz(const Register &rt, unsigned bit_pos, Label *label)
void JumpIfUnsignedLessThan(Register x, int32_t y, Label *dest)
void Scvtf(const VRegister &fd, const Register &rn, unsigned fbits=0)
void Dmb(BarrierDomain domain, BarrierType type)
void Ccmn(const Register &rn, const Operand &operand, StatusFlags nzcv, Condition cond)
void Mrs(const Register &rt, SystemRegister sysreg)
void Cinc(const Register &rd, const Register &rn, Condition cond)
void Debug(const char *message, uint32_t code, Instr params=BREAK)
void CompareTaggedAndBranch(const Register &lhs, const Operand &rhs, Condition cond, Label *label)
void Lsl(const Register &rd, const Register &rn, unsigned shift)
void SmiTag(Register reg, SBit s=LeaveCC)
void Fcvtns(const Register &rd, const VRegister &fn)
void Umull(const Register &rd, const Register &rn, const Register &rm)
void Eor(const Register &rd, const Register &rn, const Operand &operand)
void Sbcs(const Register &rd, const Register &rn, const Operand &operand)
void Fdiv(const VRegister &fd, const VRegister &fn, const VRegister &fm)
void Fmadd(const VRegister &fd, const VRegister &fn, const VRegister &fm, const VRegister &fa)
void Ldr(const CPURegister &rt, const Operand &imm)
void Ubfiz(const Register &rd, const Register &rn, unsigned lsb, unsigned width)
void Uxtb(const Register &rd, const Register &rn)
void DropSlots(int64_t count)
void AssertSmi(Register object, AbortReason reason=AbortReason::kOperandIsNotASmi) NOOP_UNLESS_DEBUG_CODE
void Blr(const Register &xn)
void Mov(const Register &rd, const Operand &operand, DiscardMoveMode discard_mode=kDontDiscardForSameWReg)
void JumpIfEqual(Register x, int32_t y, Label *dest)
void Sbfiz(const Register &rd, const Register &rn, unsigned lsb, unsigned width)
void And(Register dst, Register src1, const Operand &src2, Condition cond=al)
void Csinc(const Register &rd, const Register &rn, const Register &rm, Condition cond)
void Sdiv(const Register &rd, const Register &rn, const Register &rm)
void Negs(const Register &rd, const Operand &operand)
void BindExceptionHandler(Label *label)
void Fadd(const VRegister &fd, const VRegister &fn, const VRegister &fm)
void Fcmp(const VRegister &fn, const VRegister &fm)
void Fccmp(const VRegister &fn, const VRegister &fm, StatusFlags nzcv, Condition cond)
void Ucvtf(const VRegister &fd, const Register &rn, unsigned fbits=0)
void Rbit(const Register &rd, const Register &rn)
void Orn(const Register &rd, const Register &rn, const Operand &operand)
void LogicalMacro(const Register &rd, const Register &rn, const Operand &operand, LogicalOp op)
void Cls(const Register &rd, const Register &rn)
void Sbfx(Register dst, Register src, int lsb, int width, Condition cond=al)
void Tbnz(const Register &rt, unsigned bit_pos, Label *label)
void Subs(const Register &rd, const Register &rn, const Operand &operand)
void Rev(const Register &rd, const Register &rn)
void Movi(const VRegister &vd, uint64_t imm, Shift shift=LSL, int shift_amount=0)
void Cset(const Register &rd, Condition cond)
void JumpIfNotSmi(Register value, Label *not_smi_label)
void Smulh(const Register &rd, const Register &rn, const Register &rm)
void Fnmsub(const VRegister &fd, const VRegister &fn, const VRegister &fm, const VRegister &fa)
void SmiToInt32(Register smi)
void Claim(int64_t count, uint64_t unit_size=kXRegSize)
void Cneg(const Register &rd, const Register &rn, Condition cond)
void Fsub(const VRegister &fd, const VRegister &fn, const VRegister &fm)
void Fcvtnu(const Register &rd, const VRegister &fn)
void Fcvtas(const Register &rd, const VRegister &fn)
void Bfi(const Register &rd, const Register &rn, unsigned lsb, unsigned width)
void Ubfx(Register dst, Register src, int lsb, int width, Condition cond=al)
void Cinv(const Register &rd, const Register &rn, Condition cond)
void Fcvtzs(const Register &rd, const VRegister &fn)
void CmpTagged(const Register &r1, const Register &r2)
void Check(Condition cond, AbortReason reason)
void TestAndBranchIfAnySet(const Register ®, const uint64_t bit_pattern, Label *label)
void Fcvtmu(const Register &rd, const VRegister &fn)
void Mvn(const Register &rd, uint64_t imm)
void JumpIfLessThan(Register x, int32_t y, Label *dest)
void Ccmp(const Register &rn, const Operand &operand, StatusFlags nzcv, Condition cond)
void Adc(const Register &rd, const Register &rn, const Operand &operand)
void Sub(const Register &rd, const Register &rn, const Operand &operand)
void CzeroX(const Register &rd, Condition cond)
void Rev16(const Register &rd, const Register &rn)
void Fcsel(const VRegister &fd, const VRegister &fn, const VRegister &fm, Condition cond)
void ConditionalCompareMacro(const Register &rn, const Operand &operand, StatusFlags nzcv, Condition cond, ConditionalCompareOp op)
void Eon(const Register &rd, const Register &rn, const Operand &operand)
void Cbnz(const Register &rt, Label *label)
void Cbz(const Register &rt, Label *label)
void Csetm(const Register &rd, Condition cond)
void Csinv(const Register &rd, const Register &rn, const Register &rm, Condition cond)
void BindJumpTarget(Label *label)
void Sxtw(const Register &rd, const Register &rn)
void Rev32(const Register &rd, const Register &rn)
void Movi64bitHelper(const VRegister &vd, uint64_t imm)
void BindJumpOrCallTarget(Label *label)
void PushHelper(int count, int size, const CPURegister &src0, const CPURegister &src1, const CPURegister &src2, const CPURegister &src3)
static const int kSmiShift
void Extr(const Register &rd, const Register &rn, const Register &rm, unsigned lsb)
void Movk(const Register &rd, uint64_t imm, int shift=-1)
void Fmul(const VRegister &fd, const VRegister &fn, const VRegister &fm)
void BindCallTarget(Label *label)
void Fmsub(const VRegister &fd, const VRegister &fn, const VRegister &fm, const VRegister &fa)
void Br(const Register &xn)
void Ngc(const Register &rd, const Operand &operand)
void DropArguments(Register count)
int64_t ImmediateValue() const
unsigned shift_amount() const
bool IsShiftedRegister() const
constexpr bool is_valid() const
Register AcquireSameSizeAs(const Register ®)
#define COMPRESS_POINTERS_BOOL
#define DEFINE_LOAD_FUNCTION(FN, OP)
#define DEFINE_SWP_FUNCTION(FN, OP)
#define DEFINE_FUNCTION(FN, REGTYPE, REG, OP)
#define ATOMIC_MEMORY_SIMPLE_MACRO_LIST(V, DEF, MASM_PRE, ASM_PRE)
#define STLX_MACRO_LIST(V)
#define CAS_SINGLE_MACRO_LIST(V)
#define LDA_STL_MACRO_LIST(V)
#define LSPAIR_MACRO_LIST(V)
#define ATOMIC_MEMORY_STORE_MACRO_MODES(V, MASM, ASM)
#define ATOMIC_MEMORY_LOAD_MACRO_MODES(V, MASM, ASM)
#define CAS_PAIR_MACRO_LIST(V)
constexpr unsigned CountTrailingZeros(T value)
constexpr bool IsPowerOfTwo(T value)
V8_INLINE Dest bit_cast(Source const &source)
constexpr Register kRootRegister
constexpr AddrMode PreIndex
V8_EXPORT_PRIVATE int CountSetBits(uint64_t value, int width)
constexpr int kBitsPerByte
MemOperand ExitFrameCallerStackSlotOperand(int index)
int MaskToBit(uint64_t mask)
constexpr ConditionalCompareOp CCMP
MemOperand FieldMemOperand(Register object, int offset)
constexpr int kSystemPointerSize
constexpr bool SmiValuesAre31Bits()
V8_EXPORT_PRIVATE bool AreAliased(const CPURegister ®1, const CPURegister ®2, const CPURegister ®3=NoReg, const CPURegister ®4=NoReg, const CPURegister ®5=NoReg, const CPURegister ®6=NoReg, const CPURegister ®7=NoReg, const CPURegister ®8=NoReg)
V8_EXPORT_PRIVATE FlagValues v8_flags
constexpr bool SmiValuesAre32Bits()
constexpr Register kPtrComprCageBaseRegister
V8_EXPORT_PRIVATE bool AreSameSizeAndType(const CPURegister ®1, const CPURegister ®2=NoCPUReg, const CPURegister ®3=NoCPUReg, const CPURegister ®4=NoCPUReg, const CPURegister ®5=NoCPUReg, const CPURegister ®6=NoCPUReg, const CPURegister ®7=NoCPUReg, const CPURegister ®8=NoCPUReg)
MemOperand ExitFrameStackSlotOperand(int offset)
constexpr Register padreg
constexpr ConditionalCompareOp CCMN
#define DCHECK_IMPLIES(v1, v2)
#define DCHECK_GE(v1, v2)
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)
#define DCHECK_GT(v1, v2)
constexpr T RoundUp(T x, intptr_t m)