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)