5 #ifndef V8_ARM64_MACRO_ASSEMBLER_ARM64_INL_H_
6 #define V8_ARM64_MACRO_ASSEMBLER_ARM64_INL_H_
49 DCHECK(allow_macro_instructions_);
58 DCHECK(allow_macro_instructions_);
66 DCHECK(allow_macro_instructions_);
74 DCHECK(allow_macro_instructions_);
83 DCHECK(allow_macro_instructions_);
92 DCHECK(allow_macro_instructions_);
101 DCHECK(allow_macro_instructions_);
110 DCHECK(allow_macro_instructions_);
119 DCHECK(allow_macro_instructions_);
129 DCHECK(allow_macro_instructions_);
142 DCHECK(allow_macro_instructions_);
154 DCHECK(allow_macro_instructions_);
166 DCHECK(allow_macro_instructions_);
179 DCHECK(allow_macro_instructions_);
192 DCHECK(allow_macro_instructions_);
203 DCHECK(allow_macro_instructions_);
209 DCHECK(allow_macro_instructions_);
216 DCHECK(allow_macro_instructions_);
228 DCHECK(allow_macro_instructions_);
236 DCHECK(allow_macro_instructions_);
245 DCHECK(allow_macro_instructions_);
254 DCHECK(allow_macro_instructions_);
263 DCHECK(allow_macro_instructions_);
271 DCHECK(allow_macro_instructions_);
274 Sbc(rd, zr, operand);
280 DCHECK(allow_macro_instructions_);
283 Sbcs(rd, zr, operand);
288 DCHECK(allow_macro_instructions_);
294 #define DEFINE_FUNCTION(FN, REGTYPE, REG, OP) \
295 void MacroAssembler::FN(const REGTYPE REG, const MemOperand& addr) { \
296 DCHECK(allow_macro_instructions_); \
297 LoadStoreMacro(REG, addr, OP); \
300 #undef DEFINE_FUNCTION
303 #define DEFINE_FUNCTION(FN, REGTYPE, REG, REG2, OP) \
304 void MacroAssembler::FN(const REGTYPE REG, const REGTYPE REG2, \
305 const MemOperand& addr) { \
306 DCHECK(allow_macro_instructions_); \
307 LoadStorePairMacro(REG, REG2, addr, OP); \
310 #undef DEFINE_FUNCTION
316 DCHECK(allow_macro_instructions_);
325 DCHECK(allow_macro_instructions_);
338 DCHECK(allow_macro_instructions_);
347 DCHECK(allow_macro_instructions_);
349 bfi(rd, rn, lsb, width);
357 DCHECK(allow_macro_instructions_);
359 bfxil(rd, rn, lsb, width);
364 DCHECK(allow_macro_instructions_);
370 DCHECK(allow_macro_instructions_);
376 DCHECK(allow_macro_instructions_);
383 DCHECK(allow_macro_instructions_);
390 DCHECK(allow_macro_instructions_);
398 DCHECK(allow_macro_instructions_);
408 DCHECK(allow_macro_instructions_);
416 DCHECK(allow_macro_instructions_);
423 DCHECK(allow_macro_instructions_);
432 DCHECK(allow_macro_instructions_);
443 DCHECK(allow_macro_instructions_);
446 csel(rd, xzr, rd, cond);
455 DCHECK(allow_macro_instructions_);
460 csel(rd, rn, rd, cond);
466 DCHECK(allow_macro_instructions_);
474 DCHECK(allow_macro_instructions_);
485 DCHECK(allow_macro_instructions_);
488 csinc(rd, rn, rm, cond);
496 DCHECK(allow_macro_instructions_);
499 csinv(rd, rn, rm, cond);
507 DCHECK(allow_macro_instructions_);
510 csneg(rd, rn, rm, cond);
515 DCHECK(allow_macro_instructions_);
521 DCHECK(allow_macro_instructions_);
527 DCHECK(allow_macro_instructions_);
528 debug(message, code, params);
536 DCHECK(allow_macro_instructions_);
538 extr(rd, rn, rm, lsb);
543 DCHECK(allow_macro_instructions_);
551 DCHECK(allow_macro_instructions_);
560 DCHECK(allow_macro_instructions_);
562 fccmp(fn, fm, nzcv, cond);
567 DCHECK(allow_macro_instructions_);
573 DCHECK(allow_macro_instructions_);
589 DCHECK(allow_macro_instructions_);
591 fcsel(fd, fn, fm, cond);
596 DCHECK(allow_macro_instructions_);
602 DCHECK(allow_macro_instructions_);
609 DCHECK(allow_macro_instructions_);
616 DCHECK(allow_macro_instructions_);
623 DCHECK(allow_macro_instructions_);
630 DCHECK(allow_macro_instructions_);
637 DCHECK(allow_macro_instructions_);
644 DCHECK(allow_macro_instructions_);
649 DCHECK(allow_macro_instructions_);
658 DCHECK(allow_macro_instructions_);
667 DCHECK(allow_macro_instructions_);
668 fmadd(fd, fn, fm, fa);
675 DCHECK(allow_macro_instructions_);
683 DCHECK(allow_macro_instructions_);
691 DCHECK(allow_macro_instructions_);
699 DCHECK(allow_macro_instructions_);
705 DCHECK(allow_macro_instructions_);
717 DCHECK(allow_macro_instructions_);
723 DCHECK(allow_macro_instructions_);
725 Fmov(fd,
static_cast<float>(imm));
732 }
else if ((imm == 0.0) && (copysign(1.0, imm) == 1.0)) {
741 DCHECK(allow_macro_instructions_);
743 Fmov(fd,
static_cast<double>(imm));
750 }
else if ((imm == 0.0) && (copysign(1.0, imm) == 1.0)) {
763 DCHECK(allow_macro_instructions_);
773 DCHECK(allow_macro_instructions_);
774 fmsub(fd, fn, fm, fa);
781 DCHECK(allow_macro_instructions_);
787 DCHECK(allow_macro_instructions_);
796 DCHECK(allow_macro_instructions_);
805 DCHECK(allow_macro_instructions_);
811 DCHECK(allow_macro_instructions_);
817 DCHECK(allow_macro_instructions_);
823 DCHECK(allow_macro_instructions_);
829 DCHECK(allow_macro_instructions_);
835 DCHECK(allow_macro_instructions_);
843 DCHECK(allow_macro_instructions_);
849 DCHECK(allow_macro_instructions_);
855 DCHECK(allow_macro_instructions_);
861 DCHECK(allow_macro_instructions_);
869 DCHECK(allow_macro_instructions_);
876 DCHECK(allow_macro_instructions_);
882 DCHECK(allow_macro_instructions_);
891 DCHECK(allow_macro_instructions_);
900 DCHECK(allow_macro_instructions_);
909 DCHECK(allow_macro_instructions_);
918 DCHECK(allow_macro_instructions_);
928 DCHECK(allow_macro_instructions_);
930 madd(rd, rn, rm, ra);
937 DCHECK(allow_macro_instructions_);
944 DCHECK(allow_macro_instructions_);
956 DCHECK(allow_macro_instructions_);
963 DCHECK(allow_macro_instructions_);
970 DCHECK(allow_macro_instructions_);
979 DCHECK(allow_macro_instructions_);
981 msub(rd, rn, rm, ra);
988 DCHECK(allow_macro_instructions_);
995 DCHECK(allow_macro_instructions_);
1002 DCHECK(allow_macro_instructions_);
1010 DCHECK(allow_macro_instructions_);
1017 DCHECK(allow_macro_instructions_);
1024 DCHECK(allow_macro_instructions_);
1033 DCHECK(allow_macro_instructions_);
1042 DCHECK(allow_macro_instructions_);
1052 DCHECK(allow_macro_instructions_);
1054 sbfiz(rd, rn, lsb, width);
1062 DCHECK(allow_macro_instructions_);
1064 sbfx(rd, rn, lsb, width);
1071 DCHECK(allow_macro_instructions_);
1072 scvtf(fd, rn, fbits);
1079 DCHECK(allow_macro_instructions_);
1089 DCHECK(allow_macro_instructions_);
1099 DCHECK(allow_macro_instructions_);
1108 DCHECK(allow_macro_instructions_);
1117 DCHECK(allow_macro_instructions_);
1126 DCHECK(allow_macro_instructions_);
1132 DCHECK(allow_macro_instructions_);
1139 DCHECK(allow_macro_instructions_);
1146 DCHECK(allow_macro_instructions_);
1156 DCHECK(allow_macro_instructions_);
1158 ubfiz(rd, rn, lsb, width);
1166 DCHECK(allow_macro_instructions_);
1168 ubfx(rd, rn, lsb, width);
1175 DCHECK(allow_macro_instructions_);
1176 ucvtf(fd, rn, fbits);
1183 DCHECK(allow_macro_instructions_);
1193 DCHECK(allow_macro_instructions_);
1203 DCHECK(allow_macro_instructions_);
1210 DCHECK(allow_macro_instructions_);
1217 DCHECK(allow_macro_instructions_);
1224 DCHECK(allow_macro_instructions_);
1237 Bic(csp, temp, 0xf);
1248 InstructionAccurateScope scope(
this);
1256 bic(csp, source, 0xf);
1259 if (!is_uint12(imm)) {
1260 int64_t imm_top_12_bits = imm >> 12;
1261 sub(csp, source, imm_top_12_bits << 12);
1263 imm -= imm_top_12_bits << 12;
1266 sub(csp, source, imm);
1276 { InstructionAccurateScope scope(
this);
1288 ExternalReference roots_array_start =
1289 ExternalReference::roots_array_start(
isolate());
1353 Push(src1.
W(), wzr, src2.
W(), wzr);
1359 Label* not_smi_label) {
1363 Tbz(value, 0, smi_label);
1364 if (not_smi_label) {
1369 Tbnz(value, 0, not_smi_label);
1381 Label* both_smi_label,
1382 Label* not_smi_label) {
1387 Orr(tmp, value1, value2);
1388 JumpIfSmi(tmp, both_smi_label, not_smi_label);
1394 Label* either_smi_label,
1395 Label* not_smi_label) {
1400 And(tmp, value1, value2);
1401 JumpIfSmi(tmp, either_smi_label, not_smi_label);
1407 Label* not_smi_label) {
1414 Label* not_smi_label) {
1424 Abort(kObjectTagged);
1436 Abort(kObjectNotTagged);
1486 if (
string ==
NULL) {
1488 }
else if (not_string ==
NULL) {
1506 uint64_t
size = count * unit_size;
1523 if (unit_size == 0)
return;
1529 if (
size.IsZero()) {
1548 if (
size.IsZero()) {
1561 uint64_t
size = count * unit_size;
1581 if (unit_size == 0)
return;
1587 if (
size.IsZero()) {
1609 if (
size.IsZero()) {
1629 ((cond ==
eq) || (cond ==
ne))) {
1643 const uint64_t bit_pattern,
1650 Tst(reg, bit_pattern);
1657 const uint64_t bit_pattern,
1664 Tst(reg, bit_pattern);
1672 InstructionAccurateScope scope(
this, 1);
1678 InstructionAccurateScope scope(
this, 1);
1684 InstructionAccurateScope scope(
this, 1);
1690 DCHECK(strlen(marker_name) == 2);
1694 DCHECK(isprint(marker_name[0]) && isprint(marker_name[1]));
1696 InstructionAccurateScope scope(
this, 1);
1697 movn(xzr, (marker_name[1] << 8) | marker_name[0]);
An object reference managed by the v8 garbage collector.
Isolate * isolate() const
bool emit_debug_code() const
void rev32(const Register &rd, const Register &rn)
void cset(const Register &rd, Condition cond)
void umaddl(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void fcvtms(const Register &rd, const FPRegister &fn)
void fmov(FPRegister fd, double imm)
void uxtb(Register dst, const Operand &src, Condition cond=al)
void fcvtmu(const Register &rd, const FPRegister &fn)
void csetm(const Register &rd, Condition cond)
void rbit(const Register &rd, const Register &rn)
void frintn(const FPRegister &fd, const FPRegister &fn)
void movn(const Register &rd, uint64_t imm, int shift=-1)
void hint(SystemHint code)
void fnmsub(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm, const FPRegister &fa)
void bfi(Register dst, Register src, int lsb, int width, Condition cond=al)
void fminnm(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void stnp(const CPURegister &rt, const CPURegister &rt2, const MemOperand &dst)
void csinc(const Register &rd, const Register &rn, const Register &rm, Condition cond)
void smull(Register dstL, Register dstH, Register src1, Register src2, SBit s=LeaveCC, Condition cond=al)
void br(const Register &xn)
void fcmp(const FPRegister &fn, const FPRegister &fm)
void extr(const Register &rd, const Register &rn, const Register &rm, unsigned lsb)
void fcvtzu(const Register &rd, const FPRegister &fn)
void sxtw(const Register &rd, const Register &rn)
void fmax(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void mneg(const Register &rd, const Register &rn, const Register &rm)
void mul(Register dst, Register src1, Register src2, SBit s=LeaveCC, Condition cond=al)
void uxth(const Register &rd, const Register &rn)
void asrv(const Register &rd, const Register &rn, const Register &rm)
void ror(const Register &rd, const Register &rs, unsigned shift)
void fcvtnu(const Register &rd, const FPRegister &fn)
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 sxth(const Register &rd, const Register &rn)
void msr(SRegisterFieldMask fields, const Operand &src, Condition cond=al)
void frinta(const FPRegister &fd, const FPRegister &fn)
void fdiv(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void fcvtzs(const Register &rd, const FPRegister &fn)
void lslv(const Register &rd, const Register &rn, const Register &rm)
void lsr(Register dst, Register src1, const Operand &src2, SBit s=LeaveCC, Condition cond=al)
static bool IsImmAddSub(int64_t immediate)
void shift(Register dst, Immediate shift_amount, int subcode, int size)
void fadd(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void msub(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void fmin(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void cneg(const Register &rd, const Register &rn, Condition cond)
void dsb(BarrierDomain domain, BarrierType type)
void fcvtns(const Register &rd, const FPRegister &fn)
void dmb(BarrierDomain domain, BarrierType type)
void fcsel(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm, Condition cond)
void cls(const Register &rd, const Register &rn)
void rorv(const Register &rd, const Register &rn, const Register &rm)
void smaddl(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void fmaxnm(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void clz(Register dst, Register src, Condition cond=al)
void scvtf(const FPRegister &fd, const Register &rn, unsigned fbits=0)
void sub(Register dst, Register src1, const Operand &src2, SBit s=LeaveCC, Condition cond=al)
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 bl(int branch_offset, Condition cond=al)
void fneg(const FPRegister &fd, const FPRegister &fn)
void frintz(const FPRegister &fd, const FPRegister &fn)
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 smulh(const Register &rd, const Register &rn, const Register &rm)
void b(int branch_offset, Condition cond=al)
void fmul(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void mov(Register dst, const Operand &src, SBit s=LeaveCC, Condition cond=al)
void csel(const Register &rd, const Register &rn, const Register &rm, Condition cond)
void fnmadd(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm, const FPRegister &fa)
void ubfx(Register dst, Register src, int lsb, int width, Condition cond=al)
void ldnp(const CPURegister &rt, const CPURegister &rt2, const MemOperand &src)
void ucvtf(const FPRegister &fd, const Register &rn, unsigned fbits=0)
void mrs(Register dst, SRegister s, Condition cond=al)
void movz(const Register &rd, uint64_t imm, int shift=-1)
void rev16(const Register &rd, const Register &rn)
void bfxil(const Register &rd, const Register &rn, unsigned lsb, unsigned width)
void fcvt(const FPRegister &fd, const FPRegister &fn)
void sdiv(Register dst, Register src1, Register src2, Condition cond=al)
void sbfiz(const Register &rd, const Register &rn, unsigned lsb, unsigned width)
void movk(const Register &rd, uint64_t imm, int shift=-1)
void frintm(const FPRegister &fd, const FPRegister &fn)
void CheckVeneerPool(bool force_emit, bool require_jump, int margin=kVeneerDistanceMargin)
void cinv(const Register &rd, const Register &rn, Condition cond)
void fcvtau(const Register &rd, const FPRegister &fn)
void blr(const Register &xn)
void fsub(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void ldr(Register dst, const MemOperand &src, Condition cond=al)
void bic(Register dst, Register src1, const Operand &src2, SBit s=LeaveCC, Condition cond=al)
void fmadd(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm, const FPRegister &fa)
void fcvtas(const Register &rd, const FPRegister &fn)
static bool IsImmFP64(double imm)
void fmsub(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm, const FPRegister &fa)
void uxtw(const Register &rd, const Register &rn)
void fccmp(const FPRegister &fn, const FPRegister &fm, StatusFlags nzcv, Condition cond)
void sxtb(const Register &rd, const Register &rn)
void debug(const char *message, uint32_t code, Instr params=BREAK)
void ubfiz(const Register &rd, const Register &rn, unsigned lsb, unsigned width)
void rev(const Register &rd, const Register &rn)
void ret(const Register &xn=lr)
void umsubl(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
static bool IsImmFP32(float imm)
void asr(Register dst, Register src1, const Operand &src2, SBit s=LeaveCC, Condition cond=al)
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)
static bool IsSupported(CpuFeature f)
static const int kMapOffset
void Fcvtzs(const Register &rd, const FPRegister &fn)
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 SyncSystemStackPointer()
void Sxtb(const Register &rd, const Register &rn)
void InitializeRootRegister()
void Fsub(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void Stnp(const CPURegister &rt, const CPURegister &rt2, const MemOperand &dst)
void AddSubWithCarryMacro(const Register &rd, const Register &rn, const Operand &operand, FlagsUpdate S, AddSubWithCarryOp op)
void Frintz(const FPRegister &fd, const FPRegister &fn)
void Fnmsub(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm, const FPRegister &fa)
void Bic(const Register &rd, const Register &rn, const Operand &operand)
void AnnotateInstrumentation(const char *marker_name)
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 Fmaxnm(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void Drop(int count, Condition cond=al)
void SmiTagAndPush(Register src)
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 IsObjectNameType(Register object, Register scratch, Label *fail)
void Add(const Register &rd, const Register &rn, const Operand &operand)
void Bics(const Register &rd, const Register &rn, const Operand &operand)
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 IsObjectJSStringType(Register object, Register scratch, Label *fail)
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 Fabs(const FPRegister &fd, const FPRegister &fn)
void Fmov(FPRegister fd, FPRegister fn)
void Ands(const Register &rd, const Register &rn, const Operand &operand)
Handle< Object > code_object_
void Uxth(const Register &rd, const Register &rn)
void Fdiv(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void Fcvtms(const Register &rd, const FPRegister &fn)
static const int kSmiShift
void CompareAndBranch(const Register &lhs, const Operand &rhs, Condition cond, Label *label)
void Ngcs(const Register &rd, const Operand &operand)
void CompareObjectType(Register heap_object, Register map, Register type_reg, InstanceType type)
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 JumpIfBothNotSmi(Register value1, Register value2, Label *not_smi_label)
void Bfxil(const Register &rd, const Register &rn, unsigned lsb, unsigned width)
void mov(Register rd, Register rt)
void Sxth(const Register &rd, const Register &rn)
void BumpSystemStackPointer(const Operand &space)
void Fcvtmu(const Register &rd, const FPRegister &fn)
void Fmax(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void JumpIfSmi(Register value, Label *smi_label)
void Fsqrt(const FPRegister &fd, const FPRegister &fn)
void Smull(const Register &rd, const Register &rn, const Register &rm)
void Cmn(const Register &rn, const Operand &operand)
void Ldnp(const CPURegister &rt, const CPURegister &rt2, const MemOperand &src)
void Sbc(const Register &rd, const Register &rn, const Operand &operand)
void Fnmadd(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm, const FPRegister &fa)
void Hint(SystemHint code)
void SmiUntagToDouble(FPRegister dst, Register src, UntagMode mode=kNotSpeculativeUntag)
void Ror(const Register &rd, const Register &rs, unsigned shift)
void Fcvtas(const Register &rd, const FPRegister &fn)
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 Bfi(Register dst, Register src, Register scratch, int lsb, int width, Condition cond=al)
void Fmadd(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm, const FPRegister &fa)
void Uxtw(const Register &rd, const Register &rn)
STATIC_ASSERT((reg_zero==(reg_not_zero ^ 1)) &&(reg_bit_clear==(reg_bit_set ^ 1)) &&(always==(never ^ 1)))
void Tbz(const Register &rt, unsigned bit_pos, Label *label)
void Dmb(BarrierDomain domain, BarrierType type)
void Ccmn(const Register &rn, const Operand &operand, StatusFlags nzcv, Condition cond)
void Fmul(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void Mrs(const Register &rt, SystemRegister sysreg)
void Cinc(const Register &rd, const Register &rn, Condition cond)
const Register & StackPointer() const
void Debug(const char *message, uint32_t code, Instr params=BREAK)
void Lsl(const Register &rd, const Register &rn, unsigned shift)
void Frintm(const FPRegister &fd, const FPRegister &fn)
void SmiTag(Register reg, SBit s=LeaveCC)
void InlineData(uint64_t data)
void Eor(const Register &rd, const Register &rn, const Operand &operand)
void Fcsel(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm, Condition cond)
void IsInstanceJSObjectType(Register map, Register scratch, Label *fail)
void Fmin(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void Sbcs(const Register &rd, const Register &rn, const Operand &operand)
void JumpIfEitherNotSmi(Register value1, Register value2, Label *not_smi_label)
void JumpIfEitherSmi(Register reg1, Register reg2, Label *on_either_smi)
void Abort(BailoutReason msg)
void ClaimBySMI(const Register &count_smi, uint64_t unit_size=kXRegSize)
void Ubfiz(const Register &rd, const Register &rn, unsigned lsb, unsigned width)
void Uxtb(const Register &rd, const Register &rn)
void Fneg(const FPRegister &fd, const FPRegister &fn)
void Fcvtzu(const Register &rd, const FPRegister &fn)
void Blr(const Register &xn)
void ObjectTag(Register tagged_obj, Register obj)
void Mov(const Register &rd, const Operand &operand, DiscardMoveMode discard_mode=kDontDiscardForSameWReg)
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 DropBySMI(const Register &count_smi, uint64_t unit_size=kXRegSize)
void Sdiv(const Register &rd, const Register &rn, const Register &rm)
void Fminnm(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void Negs(const Register &rd, const Operand &operand)
void DisableInstrumentation()
void Fccmp(const FPRegister &fn, const FPRegister &fm, StatusFlags nzcv, Condition cond)
void Fcvtns(const Register &rd, const FPRegister &fn)
void EnableInstrumentation()
void Fadd(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void Fcmp(const FPRegister &fn, const FPRegister &fm)
void Rbit(const Register &rd, const Register &rn)
void Fcvtau(const Register &rd, const FPRegister &fn)
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 Frintn(const FPRegister &fd, const FPRegister &fn)
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 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 Frinta(const FPRegister &fd, const FPRegister &fn)
void Cneg(const Register &rd, const Register &rn, Condition cond)
void Ucvtf(const FPRegister &fd, const Register &rn, unsigned fbits=0)
void Fmsub(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm, const FPRegister &fa)
void Ldr(const CPURegister &rt, const Immediate &imm)
void Ubfx(Register dst, Register src, int lsb, int width, Condition cond=al)
void Cinv(const Register &rd, const Register &rn, Condition cond)
void Cmp(const Register &rn, const Operand &operand)
void TestAndBranchIfAnySet(const Register ®, const uint64_t bit_pattern, Label *label)
void IsObjectJSObjectType(Register heap_object, Register map, Register scratch, Label *fail)
void JumpIfBothSmi(Register value1, Register value2, Label *both_smi_label, Label *not_smi_label=NULL)
void Mvn(const Register &rd, uint64_t imm)
void AssertSmi(Register object)
void Fcvt(const FPRegister &fd, const FPRegister &fn)
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 Fcvtnu(const Register &rd, const FPRegister &fn)
void ObjectUntag(Register untagged_obj, Register obj)
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 Sxtw(const Register &rd, const Register &rn)
void Rev32(const Register &rd, const Register &rn)
void Claim(uint64_t count, uint64_t unit_size=kXRegSize)
void SmiUntagToFloat(FPRegister dst, Register src, UntagMode mode=kNotSpeculativeUntag)
void AssertStackConsistency()
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 Br(const Register &xn)
void Ngc(const Register &rd, const Operand &operand)
Handle< Object > CodeObject()
void Scvtf(const FPRegister &fd, const Register &rn, unsigned fbits=0)
static const int kInstanceTypeOffset
int64_t ImmediateValue() const
Register AcquireSameSizeAs(const Register ®)
enable harmony numeric enable harmony object literal extensions Optimize object Array DOM strings and string trace pretenuring decisions of HAllocate instructions Enables optimizations which favor memory size over execution speed maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining trace the tracking of allocation sites deoptimize every n garbage collections perform array bounds checks elimination analyze liveness of environment slots and zap dead values flushes the cache of optimized code for closures on every GC allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms do not emit check maps for constant values that have a leaf map
enable harmony numeric enable harmony object literal extensions Optimize object size
enable harmony numeric enable harmony object literal extensions Optimize object Array DOM strings and string trace pretenuring decisions of HAllocate instructions Enables optimizations which favor memory size over execution speed maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining trace the tracking of allocation sites deoptimize every n garbage collections perform array bounds checks elimination analyze liveness of environment slots and zap dead values flushes the cache of optimized code for closures on every GC allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes enable context specialization in TurboFan execution budget before interrupt is triggered max percentage of megamorphic generic ICs to allow optimization enable use of SAHF instruction if enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable use of MLS instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long mode(MIPS only)") DEFINE_BOOL(enable_always_align_csp
enable harmony numeric enable harmony object literal extensions Optimize object Array DOM strings and string trace pretenuring decisions of HAllocate instructions Enables optimizations which favor memory size over execution speed maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining trace the tracking of allocation sites deoptimize every n garbage collections perform array bounds checks elimination analyze liveness of environment slots and zap dead values flushes the cache of optimized code for closures on every GC allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes enable context specialization in TurboFan execution budget before interrupt is triggered max percentage of megamorphic generic ICs to allow optimization enable use of SAHF instruction if enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable use of MLS instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long enable alignment of csp to bytes on platforms which prefer the register to always be expose gc extension under the specified name show built in functions in stack traces use random jit cookie to mask large constants minimum length for automatic enable preparsing CPU profiler sampling interval in microseconds trace out of bounds accesses to external arrays default size of stack region v8 is allowed to maximum length of function source code printed in a stack trace min size of a semi space(in MBytes)
enable harmony numeric enable harmony object literal extensions Optimize object Array DOM strings and string trace pretenuring decisions of HAllocate instructions Enables optimizations which favor memory size over execution speed maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining trace the tracking of allocation sites deoptimize every n garbage collections perform array bounds checks elimination analyze liveness of environment slots and zap dead values flushes the cache of optimized code for closures on every GC allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes enable context specialization in TurboFan execution budget before interrupt is triggered max percentage of megamorphic generic ICs to allow optimization enable use of SAHF instruction if enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable use of MLS instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long enable alignment of csp to bytes on platforms which prefer the register to always be NULL
enable harmony numeric enable harmony object literal extensions Optimize object Array shift
#define DCHECK(condition)
#define DEFINE_FUNCTION(FN, REGTYPE, REG, OP)
#define LSPAIR_MACRO_LIST(V)
bool IsPowerOfTwo64(uint64_t value)
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)
const unsigned kXRegSizeInBits
static uint32_t float_to_rawbits(float value)
int MaskToBit(uint64_t mask)
const unsigned kWRegSizeInBits
const uint32_t kStringTag
@ LAST_NONCALLABLE_SPEC_OBJECT_TYPE
@ FIRST_NONCALLABLE_SPEC_OBJECT_TYPE
Handle< T > handle(T *t, Isolate *isolate)
MemOperand FieldMemOperand(Register object, int offset)
const bool FLAG_enable_slow_asserts
static uint64_t double_to_rawbits(double value)
MemOperand UntagSmiFieldMemOperand(Register object, int offset)
static void RoundUp(Vector< char > buffer, int *length, int *decimal_point)
STATIC_ASSERT(sizeof(CPURegister)==sizeof(Register))
int CountSetBits(uint64_t value, int width)
const uint32_t kIsNotStringMask
int CountTrailingZeros(uint64_t value, int width)
MemOperand UntagSmiMemOperand(Register object, int offset)
Debugger support for the V8 JavaScript engine.
bool Is(const CPURegister &other) const
unsigned SizeInBits() const
bool is(Register reg) const