5#ifndef V8_CODEGEN_X64_ASSEMBLER_X64_INL_H_
6#define V8_CODEGEN_X64_ASSEMBLER_X64_INL_H_
31 emit(0x48 | (
reg.code() & 0x8) >> 1 | rm_reg.
code() >> 3);
35 emit(0x48 | (
reg.code() & 0x8) >> 1 | rm_reg.
code() >> 3);
39 emit(0x48 | (
reg.code() & 0x8) >> 1 | rm_reg.
code() >> 3);
47 emit(0x48 | (
reg.code() & 0x8) >> 1 | op.
rex());
70 uint8_t rex_bits =
reg.high_bit() << 2 | rm_reg.
high_bit();
71 if (rex_bits != 0)
emit(0x40 | rex_bits);
75 uint8_t rex_bits =
reg.high_bit() << 2 | op.
rex();
76 if (rex_bits != 0)
emit(0x40 | rex_bits);
80 uint8_t rex_bits = (
reg.code() & 0x8) >> 1 | op.
rex();
81 if (rex_bits != 0)
emit(0x40 | rex_bits);
85 uint8_t rex_bits = (
reg.code() & 0x8) >> 1 | (
base.code() & 0x8) >> 3;
86 if (rex_bits != 0)
emit(0x40 | rex_bits);
90 uint8_t rex_bits = (
reg.code() & 0x8) >> 1 | (
base.code() & 0x8) >> 3;
91 if (rex_bits != 0)
emit(0x40 | rex_bits);
95 uint8_t rex_bits = (
reg.code() & 0x8) >> 1 | (
base.code() & 0x8) >> 3;
96 if (rex_bits != 0)
emit(0x40 | rex_bits);
112 if (!
reg.is_byte_register()) {
119 if (!
reg.is_byte_register()) {
130 uint8_t rxb =
static_cast<uint8_t
>(~((
reg.high_bit() << 2) | rm.
high_bit()))
137 uint8_t rxb =
static_cast<uint8_t
>(~((
reg.high_bit() << 2) | rm.
rex())) << 5;
144 uint8_t rv =
static_cast<uint8_t
>(~((
reg.high_bit() << 4) | v.
code())) << 3;
151 emit(w | ((~v.
code() & 0xf) << 3) | l | pp);
198 return ReadUnalignedValue<int32_t>(
pc) +
pc + 4;
203 WritableJitAllocation* jit_allocation,
205 if (jit_allocation) {
218 return static_cast<int32_t
>(
offset);
242 int32_t builtin_id = ReadUnalignedValue<int32_t>(
pc);
244 return static_cast<Builtin>(builtin_id);
248 return ReadUnalignedValue<uint32_t>(
pc);
252 uint32_t new_constant,
253 WritableJitAllocation* jit_allocation,
255 if (jit_allocation) {
256 jit_allocation->WriteUnalignedValue<uint32_t>(
pc, new_constant);
258 WriteUnalignedValue<uint32_t>(
pc, new_constant);
273 pc_, ReadUnalignedValue<int32_t>(
pc_) -
static_cast<int32_t>(delta));
277 pc_, ReadUnalignedValue<Address>(
pc_) + delta);
308 Tagged_t compressed = ReadUnalignedValue<Tagged_t>(
pc_);
321 return origin->code_target_object_handle_at(
pc_);
324 return origin->compressed_embedded_object_handle_at(
pc_);
333 return ReadUnalignedValue<Address>(
pc_);
347 return WasmCodePointer{ReadUnalignedValue<uint32_t>(
pc_)};
361 return ReadUnalignedValue<Address>(
pc_);
371 return ReadUnalignedValue<JSDispatchHandle>(
pc_);
403 return ReadUnalignedValue<Address>(
pc_);
IndirectHandle< Code > GetCodeTarget(intptr_t code_target_index) const
IndirectHandle< HeapObject > GetEmbeddedObject(EmbeddedObjectIndex index) const
static int32_t relative_target_offset(Address target, Address pc)
static constexpr int kSpecialTargetSize
static void deserialization_set_target_internal_reference_at(Address pc, Address target, WritableJitAllocation &jit_allocation, RelocInfo::Mode mode=RelocInfo::INTERNAL_REFERENCE)
void emit_optional_rex_8(Register reg)
static void set_uint32_constant_at(Address pc, Address constant_pool, uint32_t new_constant, WritableJitAllocation *jit_allocation, ICacheFlushMode icache_flush_mode=FLUSH_ICACHE_IF_NEEDED)
void emit_optional_rex_32(Register reg, Register rm_reg)
void emit_vex3_byte1(XMMRegister reg, XMMRegister rm, LeadingOpcode m)
void emit_rex_32(Register reg, Register rm_reg)
static V8_INLINE void set_target_address_at(Address pc, Address constant_pool, Address target, WritableJitAllocation *jit_allocation, ICacheFlushMode icache_flush_mode=FLUSH_ICACHE_IF_NEEDED)
Handle< HeapObject > compressed_embedded_object_handle_at(Address pc, Address constant_pool)
void emit_vex_prefix(XMMRegister v, VectorLength l, SIMDPrefix pp, LeadingOpcode m, VexW w)
static Builtin target_builtin_at(Address pc)
static int deserialization_special_target_size(Address location)
void emit_vex3_byte2(VexW w, XMMRegister v, VectorLength l, SIMDPrefix pp)
static V8_INLINE Address target_address_at(Address pc, Address constant_pool)
void emit_vex2_byte1(XMMRegister reg, XMMRegister v, VectorLength l, SIMDPrefix pp)
Handle< Code > code_target_object_handle_at(Address pc)
static uint32_t uint32_constant_at(Address pc, Address constant_pool)
static constexpr bool IsBuiltinId(Builtin builtin)
static bool SupportsOptimizer()
static V8_INLINE bool InTrustedSpace(Tagged< HeapObject > object)
static V8_INLINE bool InCodeSpace(Tagged< HeapObject > object)
V8_INLINE constexpr uint8_t rex() const
static constexpr XMMRegister from_code(int8_t code)
constexpr int8_t code() const
constexpr int high_bit() const
V8_INLINE Address target_internal_reference()
static constexpr bool IsInternalReference(Mode mode)
static constexpr bool IsOffHeapTarget(Mode mode)
static constexpr bool IsCompressedEmbeddedObject(Mode mode)
V8_INLINE Address target_address()
static constexpr bool IsNearBuiltinEntry(Mode mode)
V8_INLINE Address target_internal_reference_address()
static constexpr bool IsCodeTarget(Mode mode)
static constexpr bool IsWasmCall(Mode mode)
V8_INLINE int target_address_size()
V8_INLINE Builtin target_builtin_at(Assembler *origin)
V8_INLINE WasmCodePointer wasm_code_pointer_table_entry() const
V8_INLINE Address target_off_heap_target()
static constexpr bool IsWasmStubCall(Mode mode)
static constexpr bool IsEmbeddedObjectMode(Mode mode)
static constexpr bool IsExternalReference(Mode mode)
V8_INLINE Address target_external_reference()
V8_INLINE Tagged< HeapObject > target_object(PtrComprCageBase cage_base)
V8_INLINE Address constant_pool_entry_address()
V8_INLINE JSDispatchHandle js_dispatch_handle()
V8_INLINE DirectHandle< HeapObject > target_object_handle(Assembler *origin)
static constexpr bool IsFullEmbeddedObject(Mode mode)
@ WASM_CODE_POINTER_TABLE_ENTRY
V8_INLINE Address target_address_address()
static V8_INLINE Tagged_t CompressObject(Address tagged)
static V8_INLINE Address DecompressTagged(TOnHeapAddress on_heap_addr, Tagged_t raw_value)
V8_INLINE void WriteUnalignedValue(Address address, T value)
V8_INLINE void set_target_object(Tagged< InstructionStream > host, Tagged< HeapObject > target, WriteBarrierMode write_barrier_mode=UPDATE_WRITE_BARRIER, ICacheFlushMode icache_flush_mode=FLUSH_ICACHE_IF_NEEDED)
WritableJitAllocation & jit_allocation_
V8_INLINE void set_wasm_code_pointer_table_entry(WasmCodePointer, ICacheFlushMode icache_flush_mode=FLUSH_ICACHE_IF_NEEDED)
V8_INLINE void apply(intptr_t delta)
V8_INLINE void set_target_external_reference(Address, ICacheFlushMode icache_flush_mode=FLUSH_ICACHE_IF_NEEDED)
#define V8_EXTERNAL_CODE_SPACE_BOOL
#define COMPRESS_POINTERS_BOOL
#define HAS_SMI_TAG(value)
#define V8_ENABLE_SANDBOX_BOOL
constexpr int kTaggedSize
void FlushInstructionCache(void *start, size_t size)
kInterpreterTrampolineOffset Tagged< HeapObject >
base::StrongAlias< JSDispatchHandleAliasTag, uint32_t > JSDispatchHandle
constexpr int kSystemPointerSize
Handle< T > IndirectHandle
Tagged< To > Cast(Tagged< From > value, const v8::SourceLocation &loc=INIT_SOURCE_LOCATION_IN_DEBUG)
#define DCHECK_IMPLIES(v1, v2)
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)