V8 Project
assembler-x64.h File Reference
#include "src/serialize.h"
+ Include dependency graph for assembler-x64.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  v8::internal::Register
 
struct  v8::internal::XMMRegister
 
class  v8::internal::BASE_EMBEDDED< Visitor >
 
class  v8::internal::Assembler
 

Namespaces

 v8
 Debugger support for the V8 JavaScript engine.
 
 v8::internal
 

Macros

#define ASSEMBLER_INSTRUCTION_LIST(V)
 
#define SHIFT_INSTRUCTION_LIST(V)
 
#define DECLARE_INSTRUCTION(instruction)
 
#define DECLARE_SHIFT_INSTRUCTION(instruction, subcode)
 

Enumerations

enum  v8::internal::Condition {
  v8::internal::kNoCondition = -1 , v8::internal::eq = 0 << 28 , v8::internal::ne = 1 << 28 , v8::internal::cs = 2 << 28 ,
  v8::internal::cc = 3 << 28 , v8::internal::mi = 4 << 28 , v8::internal::pl = 5 << 28 , v8::internal::vs = 6 << 28 ,
  v8::internal::vc = 7 << 28 , v8::internal::hi = 8 << 28 , v8::internal::ls = 9 << 28 , v8::internal::ge = 10 << 28 ,
  v8::internal::lt = 11 << 28 , v8::internal::gt = 12 << 28 , v8::internal::le = 13 << 28 , v8::internal::al = 14 << 28 ,
  v8::internal::kSpecialCondition = 15 << 28 , v8::internal::kNumberOfConditions = 16 , v8::internal::hs = cs , v8::internal::lo = cc ,
  v8::internal::eq = 0 << 28 , v8::internal::ne = 1 << 28 , v8::internal::hs = cs , v8::internal::cs = 2 << 28 ,
  v8::internal::lo = cc , v8::internal::cc = 3 << 28 , v8::internal::mi = 4 << 28 , v8::internal::pl = 5 << 28 ,
  v8::internal::vs = 6 << 28 , v8::internal::vc = 7 << 28 , v8::internal::hi = 8 << 28 , v8::internal::ls = 9 << 28 ,
  v8::internal::ge = 10 << 28 , v8::internal::lt = 11 << 28 , v8::internal::gt = 12 << 28 , v8::internal::le = 13 << 28 ,
  v8::internal::al = 14 << 28 , v8::internal::nv = 15 , v8::internal::no_condition = -1 , v8::internal::overflow = 0 ,
  v8::internal::no_overflow = 1 , v8::internal::below = 2 , v8::internal::above_equal = 3 , v8::internal::equal = 4 ,
  v8::internal::not_equal = 5 , v8::internal::below_equal = 6 , v8::internal::above = 7 , v8::internal::negative = 8 ,
  v8::internal::positive = 9 , v8::internal::parity_even = 10 , v8::internal::parity_odd = 11 , v8::internal::less = 12 ,
  v8::internal::greater_equal = 13 , v8::internal::less_equal = 14 , v8::internal::greater = 15 , v8::internal::carry = below ,
  v8::internal::not_carry = above_equal , v8::internal::zero = equal , v8::internal::not_zero = not_equal , v8::internal::sign = negative ,
  v8::internal::not_sign = positive , v8::internal::kNoCondition = -1 , v8::internal::overflow = 0 , v8::internal::no_overflow = 1 ,
  v8::internal::Uless = 2 , v8::internal::Ugreater_equal = 3 , v8::internal::equal = 4 , v8::internal::not_equal = 5 ,
  v8::internal::Uless_equal = 6 , v8::internal::Ugreater = 7 , v8::internal::negative = 8 , v8::internal::positive = 9 ,
  v8::internal::parity_even = 10 , v8::internal::parity_odd = 11 , v8::internal::less = 12 , v8::internal::greater_equal = 13 ,
  v8::internal::less_equal = 14 , v8::internal::greater = 15 , v8::internal::ueq = 16 , v8::internal::nue = 17 ,
  v8::internal::cc_always = 18 , v8::internal::carry = below , v8::internal::not_carry = above_equal , v8::internal::zero = equal ,
  v8::internal::eq = 0 << 28 , v8::internal::not_zero = not_equal , v8::internal::ne = 1 << 28 , v8::internal::nz = not_equal ,
  v8::internal::sign = negative , v8::internal::not_sign = positive , v8::internal::mi = 4 << 28 , v8::internal::pl = 5 << 28 ,
  v8::internal::hi = 8 << 28 , v8::internal::ls = 9 << 28 , v8::internal::ge = 10 << 28 , v8::internal::lt = 11 << 28 ,
  v8::internal::gt = 12 << 28 , v8::internal::le = 13 << 28 , v8::internal::hs = cs , v8::internal::lo = cc ,
  v8::internal::al = 14 << 28 , v8::internal::cc_default = kNoCondition , v8::internal::kNoCondition = -1 , v8::internal::overflow = 0 ,
  v8::internal::no_overflow = 1 , v8::internal::Uless = 2 , v8::internal::Ugreater_equal = 3 , v8::internal::equal = 4 ,
  v8::internal::not_equal = 5 , v8::internal::Uless_equal = 6 , v8::internal::Ugreater = 7 , v8::internal::negative = 8 ,
  v8::internal::positive = 9 , v8::internal::parity_even = 10 , v8::internal::parity_odd = 11 , v8::internal::less = 12 ,
  v8::internal::greater_equal = 13 , v8::internal::less_equal = 14 , v8::internal::greater = 15 , v8::internal::ueq = 16 ,
  v8::internal::nue = 17 , v8::internal::cc_always = 18 , v8::internal::carry = below , v8::internal::not_carry = above_equal ,
  v8::internal::zero = equal , v8::internal::eq = 0 << 28 , v8::internal::not_zero = not_equal , v8::internal::ne = 1 << 28 ,
  v8::internal::nz = not_equal , v8::internal::sign = negative , v8::internal::not_sign = positive , v8::internal::mi = 4 << 28 ,
  v8::internal::pl = 5 << 28 , v8::internal::hi = 8 << 28 , v8::internal::ls = 9 << 28 , v8::internal::ge = 10 << 28 ,
  v8::internal::lt = 11 << 28 , v8::internal::gt = 12 << 28 , v8::internal::le = 13 << 28 , v8::internal::hs = cs ,
  v8::internal::lo = cc , v8::internal::al = 14 << 28 , v8::internal::cc_default = kNoCondition , v8::internal::no_condition = -1 ,
  v8::internal::overflow = 0 , v8::internal::no_overflow = 1 , v8::internal::below = 2 , v8::internal::above_equal = 3 ,
  v8::internal::equal = 4 , v8::internal::not_equal = 5 , v8::internal::below_equal = 6 , v8::internal::above = 7 ,
  v8::internal::negative = 8 , v8::internal::positive = 9 , v8::internal::parity_even = 10 , v8::internal::parity_odd = 11 ,
  v8::internal::less = 12 , v8::internal::greater_equal = 13 , v8::internal::less_equal = 14 , v8::internal::greater = 15 ,
  v8::internal::always = 16 , v8::internal::never = 17 , v8::internal::carry = below , v8::internal::not_carry = above_equal ,
  v8::internal::zero = equal , v8::internal::not_zero = not_equal , v8::internal::sign = negative , v8::internal::not_sign = positive ,
  v8::internal::last_condition = greater , v8::internal::no_condition = -1 , v8::internal::overflow = 0 , v8::internal::no_overflow = 1 ,
  v8::internal::below = 2 , v8::internal::above_equal = 3 , v8::internal::equal = 4 , v8::internal::not_equal = 5 ,
  v8::internal::below_equal = 6 , v8::internal::above = 7 , v8::internal::negative = 8 , v8::internal::positive = 9 ,
  v8::internal::parity_even = 10 , v8::internal::parity_odd = 11 , v8::internal::less = 12 , v8::internal::greater_equal = 13 ,
  v8::internal::less_equal = 14 , v8::internal::greater = 15 , v8::internal::carry = below , v8::internal::not_carry = above_equal ,
  v8::internal::zero = equal , v8::internal::not_zero = not_equal , v8::internal::sign = negative , v8::internal::not_sign = positive
}
 
enum  v8::internal::ScaleFactor {
  v8::internal::times_1 = 0 , v8::internal::times_2 = 1 , v8::internal::times_4 = 2 , v8::internal::times_8 = 3 ,
  v8::internal::times_int_size = times_4 , v8::internal::times_half_pointer_size = times_2 , v8::internal::times_pointer_size = times_4 , v8::internal::times_twice_pointer_size = times_8 ,
  v8::internal::times_1 = 0 , v8::internal::times_2 = 1 , v8::internal::times_4 = 2 , v8::internal::times_8 = 3 ,
  v8::internal::times_int_size = times_4 , v8::internal::times_pointer_size = times_4 , v8::internal::times_1 = 0 , v8::internal::times_2 = 1 ,
  v8::internal::times_4 = 2 , v8::internal::times_8 = 3 , v8::internal::times_int_size = times_4 , v8::internal::times_half_pointer_size = times_2 ,
  v8::internal::times_pointer_size = times_4 , v8::internal::times_twice_pointer_size = times_8
}
 

Functions

Condition v8::internal::NegateCondition (Condition cond)
 
Condition v8::internal::CommuteCondition (Condition cond)
 

Variables

const int v8::internal::kRegister_rax_Code = 0
 
const int v8::internal::kRegister_rcx_Code = 1
 
const int v8::internal::kRegister_rdx_Code = 2
 
const int v8::internal::kRegister_rbx_Code = 3
 
const int v8::internal::kRegister_rsp_Code = 4
 
const int v8::internal::kRegister_rbp_Code = 5
 
const int v8::internal::kRegister_rsi_Code = 6
 
const int v8::internal::kRegister_rdi_Code = 7
 
const int v8::internal::kRegister_r11_Code = 11
 
const int v8::internal::kRegister_r12_Code = 12
 
const int v8::internal::kRegister_r13_Code = 13
 
const int v8::internal::kRegister_r14_Code = 14
 
const int v8::internal::kRegister_r15_Code = 15
 
const Register v8::internal::rax = { kRegister_rax_Code }
 
const Register v8::internal::rcx = { kRegister_rcx_Code }
 
const Register v8::internal::rdx = { kRegister_rdx_Code }
 
const Register v8::internal::rbx = { kRegister_rbx_Code }
 
const Register v8::internal::rsp = { kRegister_rsp_Code }
 
const Register v8::internal::rbp = { kRegister_rbp_Code }
 
const Register v8::internal::rsi = { kRegister_rsi_Code }
 
const Register v8::internal::rdi = { kRegister_rdi_Code }
 
const Register v8::internal::r11 = { kRegister_r11_Code }
 
const Register v8::internal::r12 = { kRegister_r12_Code }
 
const Register v8::internal::r13 = { kRegister_r13_Code }
 
const Register v8::internal::r14 = { kRegister_r14_Code }
 
const Register v8::internal::r15 = { kRegister_r15_Code }
 
const Register v8::internal::arg_reg_1 = { kRegister_rdi_Code }
 
const Register v8::internal::arg_reg_2 = { kRegister_rsi_Code }
 
const Register v8::internal::arg_reg_3 = { kRegister_rdx_Code }
 
const Register v8::internal::arg_reg_4 = { kRegister_rcx_Code }
 
const XMMRegister v8::internal::xmm8 = { 8 }
 
const XMMRegister v8::internal::xmm9 = { 9 }
 
const XMMRegister v8::internal::xmm10 = { 10 }
 
const XMMRegister v8::internal::xmm11 = { 11 }
 
const XMMRegister v8::internal::xmm12 = { 12 }
 
const XMMRegister v8::internal::xmm13 = { 13 }
 
const XMMRegister v8::internal::xmm14 = { 14 }
 
const XMMRegister v8::internal::xmm15 = { 15 }
 

Macro Definition Documentation

◆ ASSEMBLER_INSTRUCTION_LIST

#define ASSEMBLER_INSTRUCTION_LIST (   V)
Value:
V(add) \
V(and) \
V(cmp) \
V(dec) \
V(idiv) \
V(div) \
V(imul) \
V(inc) \
V(lea) \
V(mov) \
V(movzxb) \
V(movzxw) \
V(neg) \
V(not) \
V(or) \
V(repmovs) \
V(sbb) \
V(sub) \
V(test) \
V(xchg) \
V(xor)
#define V(NAME, Name, id)
Definition: execution.h:170
OStream & dec(OStream &os)
Definition: ostreams.cc:122

Definition at line 445 of file assembler-x64.h.

◆ DECLARE_INSTRUCTION

#define DECLARE_INSTRUCTION (   instruction)

Definition at line 638 of file assembler-x64.h.

◆ DECLARE_SHIFT_INSTRUCTION

#define DECLARE_SHIFT_INSTRUCTION (   instruction,
  subcode 
)
Value:
void instruction##p(Register dst, Immediate imm8) { \
shift(dst, imm8, subcode, kPointerSize); \
} \
\
void instruction##l(Register dst, Immediate imm8) { \
shift(dst, imm8, subcode, kInt32Size); \
} \
\
void instruction##q(Register dst, Immediate imm8) { \
shift(dst, imm8, subcode, kInt64Size); \
} \
\
void instruction##p_cl(Register dst) { \
shift(dst, subcode, kPointerSize); \
} \
\
void instruction##l_cl(Register dst) { \
shift(dst, subcode, kInt32Size); \
} \
\
void instruction##q_cl(Register dst) { \
shift(dst, subcode, kInt64Size); \
}
const int kPointerSize
Definition: globals.h:129
const int kInt64Size
Definition: globals.h:126
const int kInt32Size
Definition: globals.h:125

Definition at line 816 of file assembler-x64.h.

◆ SHIFT_INSTRUCTION_LIST

#define SHIFT_INSTRUCTION_LIST (   V)
Value:
V(rol, 0x0) \
V(ror, 0x1) \
V(rcl, 0x2) \
V(rcr, 0x3) \
V(shl, 0x4) \
V(shr, 0x5) \
V(sar, 0x7) \

Definition at line 471 of file assembler-x64.h.