#include "src/codegen/x64/assembler-x64.h"
#include <cstring>
#include "src/utils/utils.h"
#if V8_TARGET_ARCH_X64
#if V8_LIBC_MSVCRT
#include <intrin.h>
#endif
#if V8_OS_DARWIN
#include <sys/sysctl.h>
#endif
#include "src/base/bits.h"
#include "src/base/cpu.h"
#include "src/codegen/assembler-inl.h"
#include "src/codegen/macro-assembler.h"
#include "src/deoptimizer/deoptimizer.h"
#include "src/flags/flags.h"
#include "src/init/v8.h"
namespace v8 {
namespace internal {
namespace {
#if V8_HOST_ARCH_IA32 || V8_HOST_ARCH_X64
V8_INLINE uint64_t xgetbv(unsigned int xcr) { … }
bool OSHasAVXSupport() { … }
#endif
}
bool CpuFeatures::SupportsWasmSimd128() { … }
void CpuFeatures::ProbeImpl(bool cross_compile) { … }
void CpuFeatures::PrintTarget() { … }
void CpuFeatures::PrintFeatures() { … }
uint32_t RelocInfo::wasm_call_tag() const { … }
Operand::Operand(Operand operand, int32_t offset) { … }
bool Operand::AddressUsesRegister(Register reg) const { … }
void Assembler::AllocateAndInstallRequestedHeapNumbers(LocalIsolate* isolate) { … }
bool ConstPool::AddSharedEntry(uint64_t data, int offset) { … }
bool ConstPool::TryRecordEntry(intptr_t data, RelocInfo::Mode mode) { … }
bool ConstPool::IsMoveRipRelative(Address instr) { … }
void ConstPool::Clear() { … }
void ConstPool::PatchEntries() { … }
void Assembler::PatchConstPool() { … }
bool Assembler::UseConstPoolFor(RelocInfo::Mode rmode) { … }
Assembler::Assembler(const AssemblerOptions& options,
std::unique_ptr<AssemblerBuffer> buffer)
: … { … }
void Assembler::GetCode(Isolate* isolate, CodeDesc* desc) { … }
void Assembler::GetCode(LocalIsolate* isolate, CodeDesc* desc,
SafepointTableBuilderBase* safepoint_table_builder,
int handler_table_offset) { … }
void Assembler::FinalizeJumpOptimizationInfo() { … }
#if defined(V8_OS_WIN_X64)
win64_unwindinfo::BuiltinUnwindInfo Assembler::GetUnwindInfo() const {
DCHECK(options().collect_win64_unwind_info);
DCHECK_NOT_NULL(xdata_encoder_);
return xdata_encoder_->unwinding_info();
}
#endif
void Assembler::Align(int m) { … }
void Assembler::AlignForJCCErratum(int inst_size) { … }
void Assembler::CodeTargetAlign() { … }
void Assembler::LoopHeaderAlign() { … }
bool Assembler::IsNop(Address addr) { … }
bool Assembler::IsJmpRel(Address addr) { … }
void Assembler::bind_to(Label* L, int pos) { … }
void Assembler::bind(Label* L) { … }
void Assembler::record_farjmp_position(Label* L, int pos) { … }
bool Assembler::is_optimizable_farjmp(int idx) { … }
void Assembler::GrowBuffer() { … }
void Assembler::emit_operand(int code, Operand adr) { … }
void Assembler::emit_label_operand(int code, Label* label, int addend) { … }
void Assembler::arithmetic_op(uint8_t opcode, Register reg, Operand op,
int size) { … }
void Assembler::arithmetic_op(uint8_t opcode, Register reg, Register rm_reg,
int size) { … }
void Assembler::arithmetic_op_16(uint8_t opcode, Register reg,
Register rm_reg) { … }
void Assembler::arithmetic_op_16(uint8_t opcode, Register reg, Operand rm_reg) { … }
void Assembler::arithmetic_op_8(uint8_t opcode, Register reg, Operand op) { … }
void Assembler::arithmetic_op_8(uint8_t opcode, Register reg, Register rm_reg) { … }
void Assembler::immediate_arithmetic_op(uint8_t subcode, Register dst,
Immediate src, int size) { … }
void Assembler::immediate_arithmetic_op(uint8_t subcode, Operand dst,
Immediate src, int size) { … }
void Assembler::immediate_arithmetic_op_16(uint8_t subcode, Register dst,
Immediate src) { … }
void Assembler::immediate_arithmetic_op_16(uint8_t subcode, Operand dst,
Immediate src) { … }
void Assembler::immediate_arithmetic_op_8(uint8_t subcode, Operand dst,
Immediate src) { … }
void Assembler::immediate_arithmetic_op_8(uint8_t subcode, Register dst,
Immediate src) { … }
void Assembler::shift(Register dst, Immediate shift_amount, int subcode,
int size) { … }
void Assembler::shift(Operand dst, Immediate shift_amount, int subcode,
int size) { … }
void Assembler::shift(Register dst, int subcode, int size) { … }
void Assembler::shift(Operand dst, int subcode, int size) { … }
void Assembler::bswapl(Register dst) { … }
void Assembler::bswapq(Register dst) { … }
void Assembler::btq(Operand dst, Register src) { … }
void Assembler::btsq(Operand dst, Register src) { … }
void Assembler::btsq(Register dst, Immediate imm8) { … }
void Assembler::btrq(Register dst, Immediate imm8) { … }
void Assembler::bsrl(Register dst, Register src) { … }
void Assembler::bsrl(Register dst, Operand src) { … }
void Assembler::bsrq(Register dst, Register src) { … }
void Assembler::bsrq(Register dst, Operand src) { … }
void Assembler::bsfl(Register dst, Register src) { … }
void Assembler::bsfl(Register dst, Operand src) { … }
void Assembler::bsfq(Register dst, Register src) { … }
void Assembler::bsfq(Register dst, Operand src) { … }
void Assembler::pblendw(XMMRegister dst, Operand src, uint8_t mask) { … }
void Assembler::pblendw(XMMRegister dst, XMMRegister src, uint8_t mask) { … }
void Assembler::palignr(XMMRegister dst, Operand src, uint8_t mask) { … }
void Assembler::palignr(XMMRegister dst, XMMRegister src, uint8_t mask) { … }
void Assembler::call(Label* L) { … }
void Assembler::call(Handle<Code> target, RelocInfo::Mode rmode) { … }
void Assembler::near_call(intptr_t disp, RelocInfo::Mode rmode) { … }
void Assembler::near_jmp(intptr_t disp, RelocInfo::Mode rmode) { … }
void Assembler::near_j(Condition cc, intptr_t disp, RelocInfo::Mode rmode) { … }
void Assembler::call(Register adr) { … }
void Assembler::call(Operand op) { … }
void Assembler::clc() { … }
void Assembler::cld() { … }
void Assembler::cdq() { … }
void Assembler::cmovq(Condition cc, Register dst, Register src) { … }
void Assembler::cmovq(Condition cc, Register dst, Operand src) { … }
void Assembler::cmovl(Condition cc, Register dst, Register src) { … }
void Assembler::cmovl(Condition cc, Register dst, Operand src) { … }
void Assembler::cmpb_al(Immediate imm8) { … }
void Assembler::lock() { … }
void Assembler::xaddb(Operand dst, Register src) { … }
void Assembler::xaddw(Operand dst, Register src) { … }
void Assembler::xaddl(Operand dst, Register src) { … }
void Assembler::xaddq(Operand dst, Register src) { … }
void Assembler::cmpxchgb(Operand dst, Register src) { … }
void Assembler::cmpxchgw(Operand dst, Register src) { … }
void Assembler::emit_cmpxchg(Operand dst, Register src, int size) { … }
void Assembler::mfence() { … }
void Assembler::lfence() { … }
void Assembler::cpuid() { … }
void Assembler::cqo() { … }
void Assembler::emit_dec(Register dst, int size) { … }
void Assembler::emit_dec(Operand dst, int size) { … }
void Assembler::decb(Register dst) { … }
void Assembler::decb(Operand dst) { … }
void Assembler::hlt() { … }
void Assembler::endbr64() { … }
void Assembler::emit_idiv(Register src, int size) { … }
void Assembler::emit_div(Register src, int size) { … }
void Assembler::emit_imul(Register src, int size) { … }
void Assembler::emit_imul(Operand src, int size) { … }
void Assembler::emit_imul(Register dst, Register src, int size) { … }
void Assembler::emit_imul(Register dst, Operand src, int size) { … }
void Assembler::emit_imul(Register dst, Register src, Immediate imm, int size) { … }
void Assembler::emit_imul(Register dst, Operand src, Immediate imm, int size) { … }
void Assembler::emit_inc(Register dst, int size) { … }
void Assembler::emit_inc(Operand dst, int size) { … }
void Assembler::int3() { … }
void Assembler::j(Condition cc, Label* L, Label::Distance distance) { … }
void Assembler::j(Condition cc, Address entry, RelocInfo::Mode rmode) { … }
void Assembler::j(Condition cc, Handle<Code> target, RelocInfo::Mode rmode) { … }
void Assembler::jmp_rel(int32_t offset) { … }
void Assembler::jmp(Label* L, Label::Distance distance) { … }
void Assembler::jmp(Handle<Code> target, RelocInfo::Mode rmode) { … }
#ifdef V8_ENABLE_CET_IBT
void Assembler::jmp(Register target, bool notrack) {
EnsureSpace ensure_space(this);
if (notrack) {
emit(0x3e);
}
emit_optional_rex_32(target);
emit(0xFF);
emit_modrm(0x4, target);
}
void Assembler::jmp(Operand src, bool notrack) {
EnsureSpace ensure_space(this);
if (notrack) {
emit(0x3e);
}
emit_optional_rex_32(src);
emit(0xFF);
emit_operand(0x4, src);
}
#else
void Assembler::jmp(Register target) { … }
void Assembler::jmp(Operand src) { … }
#endif
void Assembler::emit_lea(Register dst, Operand src, int size) { … }
void Assembler::load_rax(Address value, RelocInfo::Mode mode) { … }
void Assembler::load_rax(ExternalReference ref) { … }
void Assembler::leave() { … }
void Assembler::movb(Register dst, Operand src) { … }
void Assembler::movb(Register dst, Immediate imm) { … }
void Assembler::movb(Operand dst, Register src) { … }
void Assembler::movb(Operand dst, Immediate imm) { … }
void Assembler::movw(Register dst, Operand src) { … }
void Assembler::movw(Operand dst, Register src) { … }
void Assembler::movw(Operand dst, Immediate imm) { … }
void Assembler::emit_mov(Register dst, Operand src, int size) { … }
void Assembler::emit_mov(Register dst, Register src, int size) { … }
void Assembler::emit_mov(Operand dst, Register src, int size) { … }
void Assembler::emit_mov(Register dst, Immediate value, int size) { … }
void Assembler::emit_mov(Operand dst, Immediate value, int size) { … }
void Assembler::emit_mov(Register dst, Immediate64 value, int size) { … }
void Assembler::movq_imm64(Register dst, int64_t value) { … }
void Assembler::movq_heap_number(Register dst, double value) { … }
void Assembler::movl(Operand dst, Label* src) { … }
void Assembler::movsxbl(Register dst, Register src) { … }
void Assembler::movsxbl(Register dst, Operand src) { … }
void Assembler::movsxbq(Register dst, Operand src) { … }
void Assembler::movsxbq(Register dst, Register src) { … }
void Assembler::movsxwl(Register dst, Register src) { … }
void Assembler::movsxwl(Register dst, Operand src) { … }
void Assembler::movsxwq(Register dst, Operand src) { … }
void Assembler::movsxwq(Register dst, Register src) { … }
void Assembler::movsxlq(Register dst, Register src) { … }
void Assembler::movsxlq(Register dst, Operand src) { … }
void Assembler::emit_movzxb(Register dst, Operand src, int size) { … }
void Assembler::emit_movzxb(Register dst, Register src, int size) { … }
void Assembler::emit_movzxw(Register dst, Operand src, int size) { … }
void Assembler::emit_movzxw(Register dst, Register src, int size) { … }
void Assembler::repmovsb() { … }
void Assembler::repmovsw() { … }
void Assembler::emit_repmovs(int size) { … }
void Assembler::repstosl() { … }
void Assembler::repstosq() { … }
void Assembler::mull(Register src) { … }
void Assembler::mull(Operand src) { … }
void Assembler::mulq(Register src) { … }
void Assembler::mulq(Operand src) { … }
void Assembler::negb(Register reg) { … }
void Assembler::negw(Register reg) { … }
void Assembler::negl(Register reg) { … }
void Assembler::negq(Register reg) { … }
void Assembler::negb(Operand op) { … }
void Assembler::negw(Operand op) { … }
void Assembler::negl(Operand op) { … }
void Assembler::negq(Operand op) { … }
void Assembler::nop() { … }
void Assembler::emit_not(Register dst, int size) { … }
void Assembler::emit_not(Operand dst, int size) { … }
void Assembler::Nop(int n) { … }
void Assembler::emit_trace_instruction(Immediate markid) { … }
void Assembler::popq(Register dst) { … }
void Assembler::popq(Operand dst) { … }
void Assembler::popfq() { … }
void Assembler::pushq(Register src) { … }
void Assembler::pushq(Operand src) { … }
void Assembler::pushq(Immediate value) { … }
void Assembler::pushq_imm32(int32_t imm32) { … }
void Assembler::pushfq() { … }
void Assembler::incsspq(Register number_of_words) { … }
void Assembler::ret(int imm16) { … }
void Assembler::ud2() { … }
void Assembler::setcc(Condition cc, Register reg) { … }
void Assembler::shld(Register dst, Register src) { … }
void Assembler::shrd(Register dst, Register src) { … }
void Assembler::xchgb(Register reg, Operand op) { … }
void Assembler::xchgw(Register reg, Operand op) { … }
void Assembler::emit_xchg(Register dst, Register src, int size) { … }
void Assembler::emit_xchg(Register dst, Operand src, int size) { … }
void Assembler::store_rax(Address dst, RelocInfo::Mode mode) { … }
void Assembler::store_rax(ExternalReference ref) { … }
void Assembler::sub_sp_32(uint32_t imm) { … }
void Assembler::testb(Register dst, Register src) { … }
void Assembler::testb(Register reg, Immediate mask) { … }
void Assembler::testb(Operand op, Immediate mask) { … }
void Assembler::testb(Operand op, Register reg) { … }
void Assembler::testw(Register dst, Register src) { … }
void Assembler::testw(Register reg, Immediate mask) { … }
void Assembler::testw(Operand op, Immediate mask) { … }
void Assembler::testw(Operand op, Register reg) { … }
void Assembler::emit_test(Register dst, Register src, int size) { … }
void Assembler::emit_test(Register reg, Immediate mask, int size) { … }
void Assembler::emit_test(Operand op, Immediate mask, int size) { … }
void Assembler::emit_test(Operand op, Register reg, int size) { … }
void Assembler::fld(int i) { … }
void Assembler::fld1() { … }
void Assembler::fldz() { … }
void Assembler::fldpi() { … }
void Assembler::fldln2() { … }
void Assembler::fld_s(Operand adr) { … }
void Assembler::fld_d(Operand adr) { … }
void Assembler::fstp_s(Operand adr) { … }
void Assembler::fstp_d(Operand adr) { … }
void Assembler::fstp(int index) { … }
void Assembler::fild_s(Operand adr) { … }
void Assembler::fild_d(Operand adr) { … }
void Assembler::fistp_s(Operand adr) { … }
void Assembler::fisttp_s(Operand adr) { … }
void Assembler::fisttp_d(Operand adr) { … }
void Assembler::fist_s(Operand adr) { … }
void Assembler::fistp_d(Operand adr) { … }
void Assembler::fabs() { … }
void Assembler::fchs() { … }
void Assembler::fcos() { … }
void Assembler::fsin() { … }
void Assembler::fptan() { … }
void Assembler::fyl2x() { … }
void Assembler::f2xm1() { … }
void Assembler::fscale() { … }
void Assembler::fninit() { … }
void Assembler::fadd(int i) { … }
void Assembler::fsub(int i) { … }
void Assembler::fisub_s(Operand adr) { … }
void Assembler::fmul(int i) { … }
void Assembler::fdiv(int i) { … }
void Assembler::faddp(int i) { … }
void Assembler::fsubp(int i) { … }
void Assembler::fsubrp(int i) { … }
void Assembler::fmulp(int i) { … }
void Assembler::fdivp(int i) { … }
void Assembler::fprem() { … }
void Assembler::fprem1() { … }
void Assembler::fxch(int i) { … }
void Assembler::fincstp() { … }
void Assembler::ffree(int i) { … }
void Assembler::ftst() { … }
void Assembler::fucomp(int i) { … }
void Assembler::fucompp() { … }
void Assembler::fucomi(int i) { … }
void Assembler::fucomip() { … }
void Assembler::fcompp() { … }
void Assembler::fnstsw_ax() { … }
void Assembler::fwait() { … }
void Assembler::frndint() { … }
void Assembler::fnclex() { … }
void Assembler::sahf() { … }
void Assembler::emit_farith(int b1, int b2, int i) { … }
void Assembler::movd(XMMRegister dst, Register src) { … }
void Assembler::movd(XMMRegister dst, Operand src) { … }
void Assembler::movd(Register dst, XMMRegister src) { … }
void Assembler::movq(XMMRegister dst, Register src) { … }
void Assembler::movq(XMMRegister dst, Operand src) { … }
void Assembler::movq(Register dst, XMMRegister src) { … }
void Assembler::movq(XMMRegister dst, XMMRegister src) { … }
void Assembler::movdqa(Operand dst, XMMRegister src) { … }
void Assembler::movdqa(XMMRegister dst, Operand src) { … }
void Assembler::movdqa(XMMRegister dst, XMMRegister src) { … }
void Assembler::movdqu(Operand dst, XMMRegister src) { … }
void Assembler::movdqu(XMMRegister dst, Operand src) { … }
void Assembler::movdqu(XMMRegister dst, XMMRegister src) { … }
void Assembler::pinsrw(XMMRegister dst, Register src, uint8_t imm8) { … }
void Assembler::pinsrw(XMMRegister dst, Operand src, uint8_t imm8) { … }
void Assembler::pextrq(Register dst, XMMRegister src, int8_t imm8) { … }
void Assembler::pinsrq(XMMRegister dst, Register src, uint8_t imm8) { … }
void Assembler::pinsrq(XMMRegister dst, Operand src, uint8_t imm8) { … }
void Assembler::pinsrd(XMMRegister dst, Register src, uint8_t imm8) { … }
void Assembler::pinsrd(XMMRegister dst, Operand src, uint8_t imm8) { … }
void Assembler::pinsrb(XMMRegister dst, Register src, uint8_t imm8) { … }
void Assembler::pinsrb(XMMRegister dst, Operand src, uint8_t imm8) { … }
void Assembler::insertps(XMMRegister dst, XMMRegister src, uint8_t imm8) { … }
void Assembler::insertps(XMMRegister dst, Operand src, uint8_t imm8) { … }
void Assembler::movsd(Operand dst, XMMRegister src) { … }
void Assembler::movsd(XMMRegister dst, XMMRegister src) { … }
void Assembler::movsd(XMMRegister dst, Operand src) { … }
void Assembler::movaps(XMMRegister dst, XMMRegister src) { … }
void Assembler::movaps(XMMRegister dst, Operand src) { … }
void Assembler::shufps(XMMRegister dst, XMMRegister src, uint8_t imm8) { … }
void Assembler::movapd(XMMRegister dst, XMMRegister src) { … }
void Assembler::movupd(XMMRegister dst, Operand src) { … }
void Assembler::movupd(Operand dst, XMMRegister src) { … }
void Assembler::ucomiss(XMMRegister dst, XMMRegister src) { … }
void Assembler::ucomiss(XMMRegister dst, Operand src) { … }
void Assembler::movss(XMMRegister dst, XMMRegister src) { … }
void Assembler::movss(XMMRegister dst, Operand src) { … }
void Assembler::movss(Operand src, XMMRegister dst) { … }
void Assembler::movlps(XMMRegister dst, Operand src) { … }
void Assembler::movlps(Operand src, XMMRegister dst) { … }
void Assembler::movhps(XMMRegister dst, Operand src) { … }
void Assembler::movhps(Operand src, XMMRegister dst) { … }
void Assembler::cmpps(XMMRegister dst, XMMRegister src, int8_t cmp) { … }
void Assembler::cmpps(XMMRegister dst, Operand src, int8_t cmp) { … }
void Assembler::cmppd(XMMRegister dst, XMMRegister src, int8_t cmp) { … }
void Assembler::cmppd(XMMRegister dst, Operand src, int8_t cmp) { … }
void Assembler::cvtdq2pd(XMMRegister dst, XMMRegister src) { … }
void Assembler::cvttss2si(Register dst, Operand src) { … }
void Assembler::cvttss2si(Register dst, XMMRegister src) { … }
void Assembler::cvttsd2si(Register dst, Operand src) { … }
void Assembler::cvttsd2si(Register dst, XMMRegister src) { … }
void Assembler::cvttss2siq(Register dst, XMMRegister src) { … }
void Assembler::cvttss2siq(Register dst, Operand src) { … }
void Assembler::cvttsd2siq(Register dst, XMMRegister src) { … }
void Assembler::cvttsd2siq(Register dst, Operand src) { … }
void Assembler::cvttps2dq(XMMRegister dst, Operand src) { … }
void Assembler::cvttps2dq(XMMRegister dst, XMMRegister src) { … }
void Assembler::cvtlsi2sd(XMMRegister dst, Operand src) { … }
void Assembler::cvtlsi2sd(XMMRegister dst, Register src) { … }
void Assembler::cvtlsi2ss(XMMRegister dst, Operand src) { … }
void Assembler::cvtlsi2ss(XMMRegister dst, Register src) { … }
void Assembler::cvtqsi2ss(XMMRegister dst, Operand src) { … }
void Assembler::cvtqsi2ss(XMMRegister dst, Register src) { … }
void Assembler::cvtqsi2sd(XMMRegister dst, Operand src) { … }
void Assembler::cvtqsi2sd(XMMRegister dst, Register src) { … }
void Assembler::cvtsd2si(Register dst, XMMRegister src) { … }
void Assembler::cvtsd2siq(Register dst, XMMRegister src) { … }
void Assembler::haddps(XMMRegister dst, XMMRegister src) { … }
void Assembler::haddps(XMMRegister dst, Operand src) { … }
void Assembler::cmpeqss(XMMRegister dst, XMMRegister src) { … }
void Assembler::cmpeqsd(XMMRegister dst, XMMRegister src) { … }
void Assembler::cmpltsd(XMMRegister dst, XMMRegister src) { … }
void Assembler::roundss(XMMRegister dst, XMMRegister src, RoundingMode mode) { … }
void Assembler::roundss(XMMRegister dst, Operand src, RoundingMode mode) { … }
void Assembler::roundsd(XMMRegister dst, XMMRegister src, RoundingMode mode) { … }
void Assembler::roundsd(XMMRegister dst, Operand src, RoundingMode mode) { … }
void Assembler::roundps(XMMRegister dst, XMMRegister src, RoundingMode mode) { … }
void Assembler::roundpd(XMMRegister dst, XMMRegister src, RoundingMode mode) { … }
void Assembler::movmskpd(Register dst, XMMRegister src) { … }
void Assembler::movmskps(Register dst, XMMRegister src) { … }
void Assembler::pmovmskb(Register dst, XMMRegister src) { … }
#define VMOV_DUP …
VMOV_DUP
VMOV_DUP
#undef VMOV_DUP
#define BROADCAST …
BROADCAST
BROADCAST
BROADCAST
#undef BROADCAST
void Assembler::vinserti128(YMMRegister dst, YMMRegister src1, XMMRegister src2,
uint8_t imm8) { … }
void Assembler::vperm2f128(YMMRegister dst, YMMRegister src1, YMMRegister src2,
uint8_t imm8) { … }
void Assembler::vextractf128(XMMRegister dst, YMMRegister src, uint8_t imm8) { … }
template <typename Reg1, typename Reg2, typename Op>
void Assembler::fma_instr(uint8_t op, Reg1 dst, Reg2 src1, Op src2,
VectorLength l, SIMDPrefix pp, LeadingOpcode m,
VexW w) { … }
template EXPORT_TEMPLATE_DEFINE(…) void Assembler::fma_instr(
uint8_t op, XMMRegister dst, XMMRegister src1, XMMRegister src2,
VectorLength l, SIMDPrefix pp, LeadingOpcode m, VexW w);
template EXPORT_TEMPLATE_DEFINE(…) void Assembler::fma_instr(
uint8_t op, YMMRegister dst, YMMRegister src1, YMMRegister src2,
VectorLength l, SIMDPrefix pp, LeadingOpcode m, VexW w);
template EXPORT_TEMPLATE_DEFINE(…) void Assembler::fma_instr(
uint8_t op, XMMRegister dst, XMMRegister src1, Operand src2, VectorLength l,
SIMDPrefix pp, LeadingOpcode m, VexW w);
template EXPORT_TEMPLATE_DEFINE(…) void Assembler::fma_instr(
uint8_t op, YMMRegister dst, YMMRegister src1, Operand src2, VectorLength l,
SIMDPrefix pp, LeadingOpcode m, VexW w);
void Assembler::vmovd(XMMRegister dst, Register src) { … }
void Assembler::vmovd(XMMRegister dst, Operand src) { … }
void Assembler::vmovd(Register dst, XMMRegister src) { … }
void Assembler::vmovq(XMMRegister dst, Register src) { … }
void Assembler::vmovq(XMMRegister dst, Operand src) { … }
void Assembler::vmovq(Register dst, XMMRegister src) { … }
void Assembler::vmovdqa(XMMRegister dst, Operand src) { … }
void Assembler::vmovdqa(XMMRegister dst, XMMRegister src) { … }
void Assembler::vmovdqa(YMMRegister dst, Operand src) { … }
void Assembler::vmovdqa(YMMRegister dst, YMMRegister src) { … }
void Assembler::vmovdqu(XMMRegister dst, Operand src) { … }
void Assembler::vmovdqu(Operand dst, XMMRegister src) { … }
void Assembler::vmovdqu(XMMRegister dst, XMMRegister src) { … }
void Assembler::vmovdqu(YMMRegister dst, Operand src) { … }
void Assembler::vmovdqu(Operand dst, YMMRegister src) { … }
void Assembler::vmovdqu(YMMRegister dst, YMMRegister src) { … }
void Assembler::vmovlps(XMMRegister dst, XMMRegister src1, Operand src2) { … }
void Assembler::vmovlps(Operand dst, XMMRegister src) { … }
void Assembler::vmovhps(XMMRegister dst, XMMRegister src1, Operand src2) { … }
void Assembler::vmovhps(Operand dst, XMMRegister src) { … }
void Assembler::vinstr(uint8_t op, XMMRegister dst, XMMRegister src1,
XMMRegister src2, SIMDPrefix pp, LeadingOpcode m, VexW w,
CpuFeature feature) { … }
void Assembler::vinstr(uint8_t op, XMMRegister dst, XMMRegister src1,
Operand src2, SIMDPrefix pp, LeadingOpcode m, VexW w,
CpuFeature feature) { … }
template <typename Reg1, typename Reg2, typename Op>
void Assembler::vinstr(uint8_t op, Reg1 dst, Reg2 src1, Op src2, SIMDPrefix pp,
LeadingOpcode m, VexW w, CpuFeature feature) { … }
template EXPORT_TEMPLATE_DEFINE(…) void Assembler::vinstr(
uint8_t op, YMMRegister dst, YMMRegister src1, YMMRegister src2,
SIMDPrefix pp, LeadingOpcode m, VexW w, CpuFeature feature);
template EXPORT_TEMPLATE_DEFINE(…) void Assembler::vinstr(
uint8_t op, YMMRegister dst, XMMRegister src1, XMMRegister src2,
SIMDPrefix pp, LeadingOpcode m, VexW w, CpuFeature feature);
template EXPORT_TEMPLATE_DEFINE(…) void Assembler::vinstr(
uint8_t op, YMMRegister dst, YMMRegister src1, Operand src2, SIMDPrefix pp,
LeadingOpcode m, VexW w, CpuFeature feature);
template EXPORT_TEMPLATE_DEFINE(…) void Assembler::vinstr(
uint8_t op, YMMRegister dst, YMMRegister src1, XMMRegister src2,
SIMDPrefix pp, LeadingOpcode m, VexW w, CpuFeature feature);
template EXPORT_TEMPLATE_DEFINE(…) void Assembler::vinstr(
uint8_t op, YMMRegister dst, XMMRegister src1, Operand src2, SIMDPrefix pp,
LeadingOpcode m, VexW w, CpuFeature feature);
template EXPORT_TEMPLATE_DEFINE(…) void Assembler::vinstr(
uint8_t op, YMMRegister dst, XMMRegister src1, YMMRegister src2,
SIMDPrefix pp, LeadingOpcode m, VexW w, CpuFeature feature);
void Assembler::vps(uint8_t op, XMMRegister dst, XMMRegister src1,
XMMRegister src2) { … }
void Assembler::vps(uint8_t op, YMMRegister dst, YMMRegister src1,
YMMRegister src2) { … }
void Assembler::vps(uint8_t op, XMMRegister dst, XMMRegister src1,
Operand src2) { … }
void Assembler::vps(uint8_t op, YMMRegister dst, YMMRegister src1,
Operand src2) { … }
void Assembler::vps(uint8_t op, XMMRegister dst, XMMRegister src1,
XMMRegister src2, uint8_t imm8) { … }
void Assembler::vps(uint8_t op, YMMRegister dst, YMMRegister src1,
YMMRegister src2, uint8_t imm8) { … }
#define VPD …
VPD
VPD
VPD
#undef VPD
#define F16C …
void Assembler::vcvtph2ps(XMMRegister dst, XMMRegister src) { … }
void Assembler::vcvtph2ps(YMMRegister dst, XMMRegister src) { … }
void Assembler::vcvtps2ph(XMMRegister dst, YMMRegister src, uint8_t imm8) { … }
void Assembler::vcvtps2ph(XMMRegister dst, XMMRegister src, uint8_t imm8) { … }
#undef F16C
void Assembler::vucomiss(XMMRegister dst, XMMRegister src) { … }
void Assembler::vucomiss(XMMRegister dst, Operand src) { … }
void Assembler::vpmovmskb(Register dst, XMMRegister src) { … }
void Assembler::vss(uint8_t op, XMMRegister dst, XMMRegister src1,
XMMRegister src2) { … }
void Assembler::vss(uint8_t op, XMMRegister dst, XMMRegister src1,
Operand src2) { … }
void Assembler::bmi1q(uint8_t op, Register reg, Register vreg, Register rm) { … }
void Assembler::bmi1q(uint8_t op, Register reg, Register vreg, Operand rm) { … }
void Assembler::bmi1l(uint8_t op, Register reg, Register vreg, Register rm) { … }
void Assembler::bmi1l(uint8_t op, Register reg, Register vreg, Operand rm) { … }
void Assembler::tzcntq(Register dst, Register src) { … }
void Assembler::tzcntq(Register dst, Operand src) { … }
void Assembler::tzcntl(Register dst, Register src) { … }
void Assembler::tzcntl(Register dst, Operand src) { … }
void Assembler::lzcntq(Register dst, Register src) { … }
void Assembler::lzcntq(Register dst, Operand src) { … }
void Assembler::lzcntl(Register dst, Register src) { … }
void Assembler::lzcntl(Register dst, Operand src) { … }
void Assembler::popcntq(Register dst, Register src) { … }
void Assembler::popcntq(Register dst, Operand src) { … }
void Assembler::popcntl(Register dst, Register src) { … }
void Assembler::popcntl(Register dst, Operand src) { … }
void Assembler::bmi2q(SIMDPrefix pp, uint8_t op, Register reg, Register vreg,
Register rm) { … }
void Assembler::bmi2q(SIMDPrefix pp, uint8_t op, Register reg, Register vreg,
Operand rm) { … }
void Assembler::bmi2l(SIMDPrefix pp, uint8_t op, Register reg, Register vreg,
Register rm) { … }
void Assembler::bmi2l(SIMDPrefix pp, uint8_t op, Register reg, Register vreg,
Operand rm) { … }
void Assembler::rorxq(Register dst, Register src, uint8_t imm8) { … }
void Assembler::rorxq(Register dst, Operand src, uint8_t imm8) { … }
void Assembler::rorxl(Register dst, Register src, uint8_t imm8) { … }
void Assembler::rorxl(Register dst, Operand src, uint8_t imm8) { … }
void Assembler::pause() { … }
void Assembler::movups(XMMRegister dst, XMMRegister src) { … }
void Assembler::movups(XMMRegister dst, Operand src) { … }
void Assembler::movups(Operand dst, XMMRegister src) { … }
void Assembler::sse_instr(XMMRegister dst, XMMRegister src, uint8_t escape,
uint8_t opcode) { … }
void Assembler::sse_instr(XMMRegister dst, Operand src, uint8_t escape,
uint8_t opcode) { … }
void Assembler::sse2_instr(XMMRegister dst, XMMRegister src, uint8_t prefix,
uint8_t escape, uint8_t opcode) { … }
void Assembler::sse2_instr(XMMRegister dst, Operand src, uint8_t prefix,
uint8_t escape, uint8_t opcode) { … }
void Assembler::ssse3_instr(XMMRegister dst, XMMRegister src, uint8_t prefix,
uint8_t escape1, uint8_t escape2, uint8_t opcode) { … }
void Assembler::ssse3_instr(XMMRegister dst, Operand src, uint8_t prefix,
uint8_t escape1, uint8_t escape2, uint8_t opcode) { … }
void Assembler::sse4_instr(XMMRegister dst, Register src, uint8_t prefix,
uint8_t escape1, uint8_t escape2, uint8_t opcode,
int8_t imm8) { … }
void Assembler::sse4_instr(XMMRegister dst, XMMRegister src, uint8_t prefix,
uint8_t escape1, uint8_t escape2, uint8_t opcode) { … }
void Assembler::sse4_instr(XMMRegister dst, Operand src, uint8_t prefix,
uint8_t escape1, uint8_t escape2, uint8_t opcode) { … }
void Assembler::sse4_instr(Register dst, XMMRegister src, uint8_t prefix,
uint8_t escape1, uint8_t escape2, uint8_t opcode,
int8_t imm8) { … }
void Assembler::sse4_instr(Operand dst, XMMRegister src, uint8_t prefix,
uint8_t escape1, uint8_t escape2, uint8_t opcode,
int8_t imm8) { … }
void Assembler::sse4_2_instr(XMMRegister dst, XMMRegister src, uint8_t prefix,
uint8_t escape1, uint8_t escape2, uint8_t opcode) { … }
void Assembler::sse4_2_instr(XMMRegister dst, Operand src, uint8_t prefix,
uint8_t escape1, uint8_t escape2, uint8_t opcode) { … }
void Assembler::lddqu(XMMRegister dst, Operand src) { … }
void Assembler::movddup(XMMRegister dst, XMMRegister src) { … }
void Assembler::movddup(XMMRegister dst, Operand src) { … }
void Assembler::movshdup(XMMRegister dst, XMMRegister src) { … }
void Assembler::psrldq(XMMRegister dst, uint8_t shift) { … }
void Assembler::pshufhw(XMMRegister dst, XMMRegister src, uint8_t shuffle) { … }
void Assembler::pshufhw(XMMRegister dst, Operand src, uint8_t shuffle) { … }
void Assembler::pshuflw(XMMRegister dst, XMMRegister src, uint8_t shuffle) { … }
void Assembler::pshuflw(XMMRegister dst, Operand src, uint8_t shuffle) { … }
void Assembler::pshufd(XMMRegister dst, XMMRegister src, uint8_t shuffle) { … }
void Assembler::pshufd(XMMRegister dst, Operand src, uint8_t shuffle) { … }
void Assembler::emit_sse_operand(XMMRegister reg, Operand adr) { … }
void Assembler::emit_sse_operand(Register reg, Operand adr) { … }
void Assembler::emit_sse_operand(XMMRegister dst, XMMRegister src) { … }
void Assembler::emit_sse_operand(XMMRegister dst, Register src) { … }
void Assembler::emit_sse_operand(Register dst, XMMRegister src) { … }
void Assembler::emit_sse_operand(XMMRegister dst) { … }
void Assembler::db(uint8_t data) { … }
void Assembler::dd(uint32_t data) { … }
void Assembler::dq(uint64_t data) { … }
void Assembler::dq(Label* label) { … }
void Assembler::WriteBuiltinJumpTableEntry(Label* label, const int table_pos) { … }
void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) { … }
const int RelocInfo::kApplyMask = …;
bool RelocInfo::IsCodedSpecially() { … }
bool RelocInfo::IsInConstantPool() { … }
}
}
#endif