28 #ifndef V8_ARM64_MACRO_ASSEMBLER_ARM64_INL_H_
29 #define V8_ARM64_MACRO_ASSEMBLER_ARM64_INL_H_
64 ASSERT(!code_object_.is_null());
72 ASSERT(allow_macro_instructions_);
81 ASSERT(allow_macro_instructions_);
89 ASSERT(allow_macro_instructions_);
97 ASSERT(allow_macro_instructions_);
106 ASSERT(allow_macro_instructions_);
115 ASSERT(allow_macro_instructions_);
124 ASSERT(allow_macro_instructions_);
133 ASSERT(allow_macro_instructions_);
142 ASSERT(allow_macro_instructions_);
152 ASSERT(allow_macro_instructions_);
165 ASSERT(allow_macro_instructions_);
177 ASSERT(allow_macro_instructions_);
188 ASSERT(allow_macro_instructions_);
200 ASSERT(allow_macro_instructions_);
212 ASSERT(allow_macro_instructions_);
222 ASSERT(allow_macro_instructions_);
228 ASSERT(allow_macro_instructions_);
235 ASSERT(allow_macro_instructions_);
247 ASSERT(allow_macro_instructions_);
255 ASSERT(allow_macro_instructions_);
264 ASSERT(allow_macro_instructions_);
273 ASSERT(allow_macro_instructions_);
282 ASSERT(allow_macro_instructions_);
290 ASSERT(allow_macro_instructions_);
293 Sbc(rd, zr, operand);
299 ASSERT(allow_macro_instructions_);
302 Sbcs(rd, zr, operand);
307 ASSERT(allow_macro_instructions_);
313 #define DEFINE_FUNCTION(FN, REGTYPE, REG, OP) \
314 void MacroAssembler::FN(const REGTYPE REG, const MemOperand& addr) { \
315 ASSERT(allow_macro_instructions_); \
316 LoadStoreMacro(REG, addr, OP); \
319 #undef DEFINE_FUNCTION
323 ASSERT(allow_macro_instructions_);
332 ASSERT(allow_macro_instructions_);
341 ASSERT(allow_macro_instructions_);
354 ASSERT(allow_macro_instructions_);
363 ASSERT(allow_macro_instructions_);
365 bfi(rd, rn, lsb, width);
373 ASSERT(allow_macro_instructions_);
375 bfxil(rd, rn, lsb, width);
380 ASSERT(allow_macro_instructions_);
386 ASSERT(allow_macro_instructions_);
392 ASSERT(allow_macro_instructions_);
399 ASSERT(allow_macro_instructions_);
406 ASSERT(allow_macro_instructions_);
414 ASSERT(allow_macro_instructions_);
424 ASSERT(allow_macro_instructions_);
432 ASSERT(allow_macro_instructions_);
439 ASSERT(allow_macro_instructions_);
448 ASSERT(allow_macro_instructions_);
459 ASSERT(allow_macro_instructions_);
462 csel(rd, xzr, rd, cond);
471 ASSERT(allow_macro_instructions_);
476 csel(rd, rn, rd, cond);
482 ASSERT(allow_macro_instructions_);
490 ASSERT(allow_macro_instructions_);
501 ASSERT(allow_macro_instructions_);
504 csinc(rd, rn, rm, cond);
512 ASSERT(allow_macro_instructions_);
515 csinv(rd, rn, rm, cond);
523 ASSERT(allow_macro_instructions_);
526 csneg(rd, rn, rm, cond);
531 ASSERT(allow_macro_instructions_);
537 ASSERT(allow_macro_instructions_);
543 ASSERT(allow_macro_instructions_);
544 debug(message, code, params);
552 ASSERT(allow_macro_instructions_);
554 extr(rd, rn, rm, lsb);
559 ASSERT(allow_macro_instructions_);
567 ASSERT(allow_macro_instructions_);
576 ASSERT(allow_macro_instructions_);
578 fccmp(fn, fm, nzcv, cond);
583 ASSERT(allow_macro_instructions_);
589 ASSERT(allow_macro_instructions_);
605 ASSERT(allow_macro_instructions_);
607 fcsel(fd, fn, fm, cond);
612 ASSERT(allow_macro_instructions_);
618 ASSERT(allow_macro_instructions_);
625 ASSERT(allow_macro_instructions_);
632 ASSERT(allow_macro_instructions_);
639 ASSERT(allow_macro_instructions_);
646 ASSERT(allow_macro_instructions_);
653 ASSERT(allow_macro_instructions_);
660 ASSERT(allow_macro_instructions_);
665 ASSERT(allow_macro_instructions_);
674 ASSERT(allow_macro_instructions_);
683 ASSERT(allow_macro_instructions_);
684 fmadd(fd, fn, fm, fa);
691 ASSERT(allow_macro_instructions_);
699 ASSERT(allow_macro_instructions_);
707 ASSERT(allow_macro_instructions_);
715 ASSERT(allow_macro_instructions_);
721 ASSERT(allow_macro_instructions_);
733 ASSERT(allow_macro_instructions_);
739 ASSERT(allow_macro_instructions_);
741 Fmov(fd, static_cast<float>(imm));
748 }
else if ((imm == 0.0) && (copysign(1.0, imm) == 1.0)) {
754 Mov(tmp, double_to_rawbits(imm));
761 ASSERT(allow_macro_instructions_);
763 Fmov(fd, static_cast<double>(imm));
770 }
else if ((imm == 0.0) && (copysign(1.0, imm) == 1.0)) {
776 Mov(tmp, float_to_rawbits(imm));
783 ASSERT(allow_macro_instructions_);
793 ASSERT(allow_macro_instructions_);
794 fmsub(fd, fn, fm, fa);
801 ASSERT(allow_macro_instructions_);
807 ASSERT(allow_macro_instructions_);
816 ASSERT(allow_macro_instructions_);
825 ASSERT(allow_macro_instructions_);
831 ASSERT(allow_macro_instructions_);
837 ASSERT(allow_macro_instructions_);
843 ASSERT(allow_macro_instructions_);
849 ASSERT(allow_macro_instructions_);
857 ASSERT(allow_macro_instructions_);
863 ASSERT(allow_macro_instructions_);
869 ASSERT(allow_macro_instructions_);
875 ASSERT(allow_macro_instructions_);
883 ASSERT(allow_macro_instructions_);
892 ASSERT(allow_macro_instructions_);
901 ASSERT(allow_macro_instructions_);
909 ASSERT(allow_macro_instructions_);
915 ASSERT(allow_macro_instructions_);
924 ASSERT(allow_macro_instructions_);
933 ASSERT(allow_macro_instructions_);
942 ASSERT(allow_macro_instructions_);
951 ASSERT(allow_macro_instructions_);
961 ASSERT(allow_macro_instructions_);
963 madd(rd, rn, rm, ra);
970 ASSERT(allow_macro_instructions_);
977 ASSERT(allow_macro_instructions_);
989 ASSERT(allow_macro_instructions_);
991 movk(rd, imm, shift);
996 ASSERT(allow_macro_instructions_);
1003 ASSERT(allow_macro_instructions_);
1013 ASSERT(allow_macro_instructions_);
1015 msub(rd, rn, rm, ra);
1022 ASSERT(allow_macro_instructions_);
1029 ASSERT(allow_macro_instructions_);
1036 ASSERT(allow_macro_instructions_);
1044 ASSERT(allow_macro_instructions_);
1051 ASSERT(allow_macro_instructions_);
1058 ASSERT(allow_macro_instructions_);
1067 ASSERT(allow_macro_instructions_);
1076 ASSERT(allow_macro_instructions_);
1086 ASSERT(allow_macro_instructions_);
1088 sbfiz(rd, rn, lsb, width);
1096 ASSERT(allow_macro_instructions_);
1098 sbfx(rd, rn, lsb, width);
1105 ASSERT(allow_macro_instructions_);
1106 scvtf(fd, rn, fbits);
1113 ASSERT(allow_macro_instructions_);
1123 ASSERT(allow_macro_instructions_);
1133 ASSERT(allow_macro_instructions_);
1142 ASSERT(allow_macro_instructions_);
1151 ASSERT(allow_macro_instructions_);
1160 ASSERT(allow_macro_instructions_);
1168 ASSERT(allow_macro_instructions_);
1174 ASSERT(allow_macro_instructions_);
1181 ASSERT(allow_macro_instructions_);
1188 ASSERT(allow_macro_instructions_);
1198 ASSERT(allow_macro_instructions_);
1200 ubfiz(rd, rn, lsb, width);
1208 ASSERT(allow_macro_instructions_);
1210 ubfx(rd, rn, lsb, width);
1217 ASSERT(allow_macro_instructions_);
1218 ucvtf(fd, rn, fbits);
1225 ASSERT(allow_macro_instructions_);
1235 ASSERT(allow_macro_instructions_);
1245 ASSERT(allow_macro_instructions_);
1252 ASSERT(allow_macro_instructions_);
1259 ASSERT(allow_macro_instructions_);
1266 ASSERT(allow_macro_instructions_);
1280 InstructionAccurateScope scope(
this);
1288 int64_t imm_top_12_bits = imm >> 12;
1290 imm -= imm_top_12_bits << 12;
1301 ExternalReference roots_array_start =
1302 ExternalReference::roots_array_start(
isolate());
1309 Lsl(dst, src, kSmiShift);
1321 Asr(dst, src, kSmiShift);
1335 Scvtf(dst, src, kSmiShift);
1346 Scvtf(dst, src, kSmiShift);
1352 Label* not_smi_label) {
1356 Tbz(value, 0, smi_label);
1357 if (not_smi_label) {
1362 Tbnz(value, 0, not_smi_label);
1374 Label* both_smi_label,
1375 Label* not_smi_label) {
1380 Orr(tmp, value1, value2);
1381 JumpIfSmi(tmp, both_smi_label, not_smi_label);
1387 Label* either_smi_label,
1388 Label* not_smi_label) {
1393 And(tmp, value1, value2);
1394 JumpIfSmi(tmp, either_smi_label, not_smi_label);
1400 Label* not_smi_label) {
1407 Label* not_smi_label) {
1455 if (
string ==
NULL) {
1457 }
else if (not_string ==
NULL) {
1475 uint64_t
size = count * unit_size;
1494 if (unit_size == 0) {
1517 (shift >= 0) ? (
LSL) : (
LSR),
1518 (shift >= 0) ? (shift) : (-shift));
1533 uint64_t
size = count * unit_size;
1555 if (unit_size == 0) {
1581 (shift >= 0) ? (
LSL) : (
LSR),
1582 (shift >= 0) ? (shift) : (-shift));
1604 ((cond ==
eq) || (cond ==
ne))) {
1618 const uint64_t bit_pattern,
1625 Tst(reg, bit_pattern);
1632 const uint64_t bit_pattern,
1639 Tst(reg, bit_pattern);
1647 InstructionAccurateScope scope(
this, 1);
1653 InstructionAccurateScope scope(
this, 1);
1659 InstructionAccurateScope scope(
this, 1);
1665 ASSERT(strlen(marker_name) == 2);
1669 ASSERT(isprint(marker_name[0]) && isprint(marker_name[1]));
1671 InstructionAccurateScope scope(
this, 1);
1672 movn(xzr, (marker_name[1] << 8) | marker_name[0]);
1677 #endif // V8_ARM64_MACRO_ASSEMBLER_ARM64_INL_H_
void Csetm(const Register &rd, Condition cond)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter NULL
void Neg(const Register &rd, const Operand &operand)
void SmiUntag(Register reg, SBit s=LeaveCC)
void lsl(const Register &rd, const Register &rn, unsigned shift)
void Mvn(const Register &rd, uint64_t imm)
Isolate * isolate() const
void sdiv(Register dst, Register src1, Register src2, Condition cond=al)
void Adr(const Register &rd, Label *label)
void ClaimBySMI(const Register &count_smi, uint64_t unit_size=kXRegSize)
void fsub(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void TestAndBranchIfAllClear(const Register ®, const uint64_t bit_pattern, Label *label)
void Cmn(const Register &rn, const Operand &operand)
void csinv(const Register &rd, const Register &rn, const Register &rm, Condition cond)
void Frintn(const FPRegister &fd, const FPRegister &fn)
void Adcs(const Register &rd, const Register &rn, const Operand &operand)
void Ands(const Register &rd, const Register &rn, const Operand &operand)
const Register & AppropriateZeroRegFor(const CPURegister ®) const
void Udiv(const Register &rd, const Register &rn, const Register &rm)
void Fminnm(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void Orr(const Register &rd, const Register &rn, const Operand &operand)
void Fsqrt(const FPRegister &fd, const FPRegister &fn)
void CmovX(const Register &rd, const Register &rn, Condition cond)
void SmiTag(Register reg, SBit s=LeaveCC)
void ldnp(const CPURegister &rt, const CPURegister &rt2, const MemOperand &src)
void scvtf(const FPRegister &fd, const Register &rn, unsigned fbits=0)
void sxtw(const Register &rd, const Register &rn)
void B(Label *label, BranchType type, Register reg=NoReg, int bit=-1)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function not JSFunction itself flushes the cache of optimized code for closures on every GC functions with arguments object maximum number of escape analysis fix point iterations allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms concurrent on stack replacement do not emit check maps for constant values that have a leaf map
void Ldp(const CPURegister &rt, const CPURegister &rt2, const MemOperand &src)
void Lsr(const Register &rd, const Register &rn, unsigned shift)
void sbfiz(const Register &rd, const Register &rn, unsigned lsb, unsigned width)
void Tbz(const Register &rt, unsigned bit_pos, Label *label)
void mrs(Register dst, SRegister s, Condition cond=al)
void CompareAndBranch(const Register &lhs, const Operand &rhs, Condition cond, Label *label)
void Fcvtas(const Register &rd, const FPRegister &fn)
void Debug(const char *message, uint32_t code, Instr params=BREAK)
void Ubfx(Register dst, Register src, int lsb, int width, Condition cond=al)
void Smaddl(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void SmiUntagToFloat(FPRegister dst, Register src, UntagMode mode=kNotSpeculativeUntag)
void IsObjectJSStringType(Register object, Register scratch, Label *fail)
void ConditionalCompareMacro(const Register &rn, const Operand &operand, StatusFlags nzcv, Condition cond, ConditionalCompareOp op)
void Ubfiz(const Register &rd, const Register &rn, unsigned lsb, unsigned width)
void Fabs(const FPRegister &fd, const FPRegister &fn)
void Cneg(const Register &rd, const Register &rn, Condition cond)
STATIC_ASSERT((reg_zero==(reg_not_zero^1))&&(reg_bit_clear==(reg_bit_set^1))&&(always==(never^1)))
void bfi(Register dst, Register src, int lsb, int width, Condition cond=al)
void rev16(const Register &rd, const Register &rn)
void fmadd(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm, const FPRegister &fa)
void msub(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void Sdiv(const Register &rd, const Register &rn, const Register &rm)
const unsigned kXRegSizeInBits
void Fcvtnu(const Register &rd, const FPRegister &fn)
void CzeroX(const Register &rd, Condition cond)
void csetm(const Register &rd, Condition cond)
void Fccmp(const FPRegister &fn, const FPRegister &fm, StatusFlags nzcv, Condition cond)
void Fmul(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void b(int branch_offset, Condition cond=al)
void JumpIfSmi(Register value, Label *smi_label)
void Ldr(const FPRegister &ft, double imm)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function not JSFunction itself flushes the cache of optimized code for closures on every GC functions with arguments object maximum number of escape analysis fix point iterations allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms concurrent on stack replacement do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes number of stack frames inspected by the profiler percentage of ICs that must have type info to allow optimization extra verbose compilation tracing generate extra emit comments in code disassembly enable use of SSE3 instructions if available enable use of CMOV instruction if available enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV 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 expose natives in global object expose freeBuffer extension expose gc extension under the specified name expose externalize string extension number of stack frames to capture disable builtin natives files print name of functions for which code is generated use random jit cookie to mask large constants trace lazy optimization use adaptive optimizations always try to OSR functions trace optimize function deoptimization minimum length for automatic enable preparsing maximum number of optimization attempts before giving up cache prototype transitions trace debugging JSON request response trace out of bounds accesses to external arrays trace_js_array_abuse automatically set the debug break flag when debugger commands are in the queue abort by crashing maximum length of function source code printed in a stack trace max size of the new max size of the old max size of executable always perform global GCs print one trace line following each garbage collection do not print trace line after scavenger collection print statistics of the maximum memory committed for the heap in only print modified registers Don t break for ASM_UNIMPLEMENTED_BREAK macros print stack trace when an illegal exception is thrown randomize hashes to avoid predictable hash Fixed seed to use to hash property Print the time it takes to deserialize the snapshot testing_bool_flag testing_int_flag string flag tmp file in which to serialize heap Print the time it takes to lazily compile hydrogen code stubs concurrent_recompilation concurrent_sweeping Print usage message
void DisableInstrumentation()
void smull(Register dstL, Register dstH, Register src1, Register src2, SBit s=LeaveCC, Condition cond=al)
void Adc(const Register &rd, const Register &rn, const Operand &operand)
void bfxil(const Register &rd, const Register &rn, unsigned lsb, unsigned width)
const Register & StackPointer() const
void clz(Register dst, Register src, Condition cond=al)
void fcvtns(const Register &rd, const FPRegister &fn)
void frintz(const FPRegister &fd, const FPRegister &fn)
int MaskToBit(uint64_t mask)
void fminnm(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void Bfi(Register dst, Register src, Register scratch, int lsb, int width, Condition cond=al)
void Fcsel(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm, Condition cond)
void rbit(const Register &rd, const Register &rn)
#define ASSERT(condition)
void JumpIfBothNotSmi(Register value1, Register value2, Label *not_smi_label)
void Fcvtau(const Register &rd, const FPRegister &fn)
void Subs(const Register &rd, const Register &rn, const Operand &operand)
void frintn(const FPRegister &fd, const FPRegister &fn)
void And(Register dst, Register src1, const Operand &src2, Condition cond=al)
void smsubl(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void csinc(const Register &rd, const Register &rn, const Register &rm, Condition cond)
void Ldnp(const CPURegister &rt, const CPURegister &rt2, const MemOperand &src)
void fneg(const FPRegister &fd, const FPRegister &fn)
void movk(const Register &rd, uint64_t imm, int shift=-1)
void Bic(const Register &rd, const Register &rn, const Operand &operand)
void Mul(const Register &rd, const Register &rn, const Register &rm)
void fdiv(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
const bool FLAG_enable_slow_asserts
void Sbfx(Register dst, Register src, int lsb, int width, Condition cond=al)
void cinv(const Register &rd, const Register &rn, Condition cond)
void Negs(const Register &rd, const Operand &operand)
void Umsubl(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void Extr(const Register &rd, const Register &rn, const Register &rm, unsigned lsb)
void extr(const Register &rd, const Register &rn, const Register &rm, unsigned lsb)
void udiv(const Register &rd, const Register &rn, const Register &rm)
void AssertSmi(Register object)
void fmsub(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm, const FPRegister &fa)
void asr(const Register &rd, const Register &rn, unsigned shift)
void Hint(SystemHint code)
void Msub(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void Csinv(const Register &rd, const Register &rn, const Register &rm, Condition cond)
void rev32(const Register &rd, const Register &rn)
Handle< Object > CodeObject()
void IsObjectNameType(Register object, Register scratch, Label *fail)
int CountSetBits(uint64_t value, int width)
void Eor(const Register &rd, const Register &rn, const Operand &operand)
void Csinc(const Register &rd, const Register &rn, const Register &rm, Condition cond)
void ret(const Register &xn=lr)
void stp(const CPURegister &rt, const CPURegister &rt2, const MemOperand &dst)
static bool IsImmFP64(double imm)
MemOperand UntagSmiFieldMemOperand(Register object, int offset)
void cneg(const Register &rd, const Register &rn, Condition cond)
void Sbcs(const Register &rd, const Register &rn, const Operand &operand)
MemOperand UntagSmiMemOperand(Register object, int offset)
void sxtb(const Register &rd, const Register &rn)
void IsObjectJSObjectType(Register heap_object, Register map, Register scratch, Label *fail)
void CompareObjectType(Register heap_object, Register map, Register type_reg, InstanceType type)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function not JSFunction itself flushes the cache of optimized code for closures on every GC functions with arguments object maximum number of escape analysis fix point iterations allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms concurrent on stack replacement do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes number of stack frames inspected by the profiler percentage of ICs that must have type info to allow optimization extra verbose compilation tracing generate extra emit comments in code disassembly enable use of SSE3 instructions if available enable use of CMOV instruction if available enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV 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_string(expose_natives_as
void Fadd(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object size
void Cbnz(const Register &rt, Label *label)
void fmax(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void uxth(const Register &rd, const Register &rn)
void Sxtb(const Register &rd, const Register &rn)
void fnmsub(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm, const FPRegister &fa)
void Uxtw(const Register &rd, const Register &rn)
STATIC_ASSERT(sizeof(CPURegister)==sizeof(Register))
void smulh(const Register &rd, const Register &rn, const Register &rm)
void AddSubWithCarryMacro(const Register &rd, const Register &rn, const Operand &operand, FlagsUpdate S, AddSubWithCarryOp op)
void br(const Register &xn)
void rev(const Register &rd, const Register &rn)
void csel(const Register &rd, const Register &rn, const Register &rm, Condition cond)
void TestAndBranchIfAnySet(const Register ®, const uint64_t bit_pattern, Label *label)
void Sbfiz(const Register &rd, const Register &rn, unsigned lsb, unsigned width)
void Fcmp(const FPRegister &fn, const FPRegister &fm)
#define DEFINE_FUNCTION(FN, REGTYPE, REG, OP)
void Dmb(BarrierDomain domain, BarrierType type)
void Fsub(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void Fcvtns(const Register &rd, const FPRegister &fn)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array shift
void IsInstanceJSObjectType(Register map, Register scratch, Label *fail)
void Eon(const Register &rd, const Register &rn, const Operand &operand)
void fmov(FPRegister fd, double imm)
void Rev32(const Register &rd, const Register &rn)
void umsubl(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void Bfxil(const Register &rd, const Register &rn, unsigned lsb, unsigned width)
void Fmov(FPRegister fd, FPRegister fn)
void EnableInstrumentation()
void Uxtb(const Register &rd, const Register &rn)
void Fcvtzs(const Register &rd, const FPRegister &fn)
void JumpIfEitherNotSmi(Register value1, Register value2, Label *not_smi_label)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function not JSFunction itself flushes the cache of optimized code for closures on every GC functions with arguments object maximum number of escape analysis fix point iterations allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms concurrent on stack replacement do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes number of stack frames inspected by the profiler percentage of ICs that must have type info to allow optimization extra verbose compilation tracing generate extra code(assertions) for debugging") DEFINE_bool(code_comments
void Sxtw(const Register &rd, const Register &rn)
void csneg(const Register &rd, const Register &rn, const Register &rm, Condition cond)
void mneg(const Register &rd, const Register &rn, const Register &rm)
void Ngc(const Register &rd, const Operand &operand)
void blr(const Register &xn)
void lslv(const Register &rd, const Register &rn, const Register &rm)
void ror(const Register &rd, const Register &rs, unsigned shift)
void stnp(const CPURegister &rt, const CPURegister &rt2, const MemOperand &dst)
void Bics(const Register &rd, const Register &rn, const Operand &operand)
void ubfiz(const Register &rd, const Register &rn, unsigned lsb, unsigned width)
void Fmin(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void fmin(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void Cinc(const Register &rd, const Register &rn, Condition cond)
void fcvtau(const Register &rd, const FPRegister &fn)
void Mneg(const Register &rd, const Register &rn, const Register &rm)
void movz(const Register &rd, uint64_t imm, int shift=-1)
void SmiUntagToDouble(FPRegister dst, Register src, UntagMode mode=kNotSpeculativeUntag)
void debug(const char *message, uint32_t code, Instr params=BREAK)
void fcvtnu(const Register &rd, const FPRegister &fn)
void sxth(const Register &rd, const Register &rn)
void Csneg(const Register &rd, const Register &rn, const Register &rm, Condition cond)
const uint32_t kStringTag
void Cset(const Register &rd, Condition cond)
void fcvtzu(const Register &rd, const FPRegister &fn)
void Fnmadd(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm, const FPRegister &fa)
void fmul(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void Fneg(const FPRegister &fd, const FPRegister &fn)
void cinc(const Register &rd, const Register &rn, Condition cond)
void Fcvtzu(const Register &rd, const FPRegister &fn)
void fadd(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void AnnotateInstrumentation(const char *marker_name)
void uxtb(Register dst, const Operand &src, Condition cond=al)
void Cbz(const Register &rt, Label *label)
void Drop(int count, Condition cond=al)
void Ngcs(const Register &rd, const Operand &operand)
void Sxth(const Register &rd, const Register &rn)
void Cls(const Register &rd, const Register &rn)
void Stp(const CPURegister &rt, const CPURegister &rt2, const MemOperand &dst)
void ldr(Register dst, const MemOperand &src, Condition cond=al)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array shift
static const int kMapOffset
void Orn(const Register &rd, const Register &rn, const Operand &operand)
bool is(Register reg) const
const uint32_t kIsNotStringMask
static bool IsImmFP32(float imm)
void cset(const Register &rd, Condition cond)
void Add(const Register &rd, const Register &rn, const Operand &operand)
void Tbnz(const Register &rt, unsigned bit_pos, Label *label)
void Rev(const Register &rd, const Register &rn)
void Fmsub(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm, const FPRegister &fa)
void fccmp(const FPRegister &fn, const FPRegister &fm, StatusFlags nzcv, Condition cond)
void Clz(const Register &rd, const Register &rn)
void Ldpsw(const Register &rt, const Register &rt2, const MemOperand &src)
void ldp(const CPURegister &rt, const CPURegister &rt2, const MemOperand &src)
Handle< T > handle(T *t, Isolate *isolate)
void bl(int branch_offset, Condition cond=al)
MemOperand FieldMemOperand(Register object, int offset)
void dmb(BarrierDomain domain, BarrierType type)
void ucvtf(const FPRegister &fd, const Register &rn, unsigned fbits=0)
bool emit_debug_code() const
void Smulh(const Register &rd, const Register &rn, const Register &rm)
void hint(SystemHint code)
void fsqrt(const FPRegister &fd, const FPRegister &fn)
void fcvtas(const Register &rd, const FPRegister &fn)
void Rbit(const Register &rd, const Register &rn)
void Frintz(const FPRegister &fd, const FPRegister &fn)
void sbfx(Register dst, Register src, int lsb, int width, Condition cond=al)
void asrv(const Register &rd, const Register &rn, const Register &rm)
void Msr(SystemRegister sysreg, const Register &rt)
void Mrs(const Register &rt, SystemRegister sysreg)
void Ror(const Register &rd, const Register &rs, unsigned shift)
void mov(Register dst, const Operand &src, SBit s=LeaveCC, Condition cond=al)
void BumpSystemStackPointer(const Operand &space)
void dsb(BarrierDomain domain, BarrierType type)
void Frinta(const FPRegister &fd, const FPRegister &fn)
void Fmadd(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm, const FPRegister &fa)
void Cmp(const Register &rn, const Operand &operand)
void Tst(const Register &rn, const Operand &operand)
void Lsl(const Register &rd, const Register &rn, unsigned shift)
void Fnmsub(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 umaddl(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void fcvtmu(const Register &rd, const FPRegister &fn)
void lsrv(const Register &rd, const Register &rn, const Register &rm)
void fmaxnm(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void Scvtf(const FPRegister &fd, const Register &rn, unsigned fbits=0)
void Ccmp(const Register &rn, const Operand &operand, StatusFlags nzcv, Condition cond)
void InlineData(uint64_t data)
void JumpIfNotSmi(Register value, Label *not_smi_label)
void cls(const Register &rd, const Register &rn)
void Smsubl(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void movn(const Register &rd, uint64_t imm, int shift=-1)
void Claim(uint64_t count, uint64_t unit_size=kXRegSize)
void Br(const Register &xn)
void Adds(const Register &rd, const Register &rn, const Operand &operand)
void Fcvtms(const Register &rd, const FPRegister &fn)
void Fmax(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void lsr(const Register &rd, const Register &rn, unsigned shift)
void Fcvtmu(const Register &rd, const FPRegister &fn)
void Smull(const Register &rd, const Register &rn, const Register &rm)
void ldpsw(const Register &rt, const Register &rt2, const MemOperand &src)
void fcmp(const FPRegister &fn, const FPRegister &fm)
void Rev16(const Register &rd, const Register &rn)
void Movk(const Register &rd, uint64_t imm, int shift=-1)
void fcvtzs(const Register &rd, const FPRegister &fn)
void Stnp(const CPURegister &rt, const CPURegister &rt2, const MemOperand &dst)
void CheckVeneerPool(bool force_emit, bool require_jump, int margin=kVeneerDistanceMargin)
bool Is(const CPURegister &other) const
void InitializeRootRegister()
void rorv(const Register &rd, const Register &rn, const Register &rm)
void fcvt(const FPRegister &fd, const FPRegister &fn)
void Ccmn(const Register &rn, const Operand &operand, StatusFlags nzcv, Condition cond)
void DropBySMI(const Register &count_smi, uint64_t unit_size=kXRegSize)
void JumpIfEitherSmi(Register reg1, Register reg2, Label *on_either_smi)
void Madd(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void uxtw(const Register &rd, const Register &rn)
void Asr(const Register &rd, const Register &rn, unsigned shift)
void adr(const Register &rd, Label *label)
void JumpIfBothSmi(Register value1, Register value2, Label *both_smi_label, Label *not_smi_label=NULL)
void Sbc(const Register &rd, const Register &rn, const Operand &operand)
void AddSubMacro(const Register &rd, const Register &rn, const Operand &operand, FlagsUpdate S, AddSubOp op)
void msr(SRegisterFieldMask fields, const Operand &src, Condition cond=al)
int CountTrailingZeros(uint64_t value, int width)
void madd(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
void Umaddl(const Register &rd, const Register &rn, const Register &rm, const Register &ra)
int64_t immediate() const
void Blr(const Register &xn)
Register AcquireSameSizeAs(const Register ®)
void Sub(const Register &rd, const Register &rn, const Operand &operand)
void frinta(const FPRegister &fd, const FPRegister &fn)
void Fdiv(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm)
void fcvtms(const Register &rd, const FPRegister &fn)
void sub(Register dst, Register src1, const Operand &src2, SBit s=LeaveCC, Condition cond=al)
void fnmadd(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm, const FPRegister &fa)
void Fcvt(const FPRegister &fd, const FPRegister &fn)
void Dsb(BarrierDomain domain, BarrierType type)
void Cinv(const Register &rd, const Register &rn, Condition cond)
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 mul(Register dst, Register src1, Register src2, SBit s=LeaveCC, Condition cond=al)
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)
void fcsel(const FPRegister &fd, const FPRegister &fn, const FPRegister &fm, Condition cond)
static const int kInstanceTypeOffset
unsigned SizeInBits() const
void LogicalMacro(const Register &rd, const Register &rn, const Operand &operand, LogicalOp op)
void Ucvtf(const FPRegister &fd, const Register &rn, unsigned fbits=0)
void Uxth(const Register &rd, const Register &rn)
void Mov(const Register &rd, const Operand &operand, DiscardMoveMode discard_mode=kDontDiscardForSameWReg)