37#ifndef V8_CODEGEN_S390_ASSEMBLER_S390_INL_H_
38#define V8_CODEGEN_S390_ASSEMBLER_S390_INL_H_
66 instr |=
static_cast<uint32_t
>(dis / 2);
81 return Memory<Address>(
pc_);
119 WritableJitAllocation* jit_allocation,
ICacheFlushMode icache_flush_mode) {
121 static_cast<Address>(target), jit_allocation,
141 int index =
instr & 0xFFFFFFFF;
232Address Assembler::target_address_at(Address
pc, Address constant_pool) {
236 Instruction::S390OpcodeValue(
reinterpret_cast<const uint8_t*
>(
pc));
238 Instruction::InstructionBits(
reinterpret_cast<const uint8_t*
>(
pc));
240 if (BRASL == op1 || BRCL == op1) {
246 Instruction::InstructionLength(
reinterpret_cast<const uint8_t*
>(
pc));
247 Opcode op2 = Instruction::S390OpcodeValue(
248 reinterpret_cast<const uint8_t*
>(
pc + instr1_length));
250 reinterpret_cast<const uint8_t*
>(
pc + instr1_length));
252 if (IIHF == op1 && IILF == op2) {
253 return static_cast<Address>(((instr_1 & 0xFFFFFFFF) << 32) |
254 ((instr_2 & 0xFFFFFFFF)));
261int Assembler::deserialization_special_target_size(
262 Address instruction_payload) {
263 return kSpecialTargetSize;
266void Assembler::deserialization_set_target_internal_reference_at(
267 Address
pc, Address target, WritableJitAllocation& jit_allocation,
268 RelocInfo::Mode mode) {
269 if (RelocInfo::IsInternalReferenceEncoded(mode)) {
270 set_target_address_at(
pc, kNullAddress, target, &jit_allocation,
278void Assembler::set_target_address_at(Address
pc, Address constant_pool,
280 WritableJitAllocation* jit_allocation,
281 ICacheFlushMode icache_flush_mode) {
284 Instruction::S390OpcodeValue(
reinterpret_cast<const uint8_t*
>(
pc));
286 Instruction::InstructionBits(
reinterpret_cast<const uint8_t*
>(
pc));
287 bool patched =
false;
289 if (BRASL == op1 || BRCL == op1) {
293 instr_1 |=
static_cast<uint32_t
>(halfwords);
294 Instruction::SetInstructionBits<SixByteInstr>(
295 reinterpret_cast<uint8_t*
>(
pc), instr_1, jit_allocation);
296 if (icache_flush_mode != SKIP_ICACHE_FLUSH) {
302 Instruction::InstructionLength(
reinterpret_cast<const uint8_t*
>(
pc));
303 Opcode op2 = Instruction::S390OpcodeValue(
304 reinterpret_cast<const uint8_t*
>(
pc + instr1_length));
306 reinterpret_cast<const uint8_t*
>(
pc + instr1_length));
308 if (IIHF == op1 && IILF == op2) {
312 instr_1 |=
reinterpret_cast<uint64_t
>(
target) >> 32;
314 Instruction::SetInstructionBits<SixByteInstr>(
315 reinterpret_cast<uint8_t*
>(
pc), instr_1, jit_allocation);
320 instr_2 |=
reinterpret_cast<uint64_t
>(
target) & 0xFFFFFFFF;
322 Instruction::SetInstructionBits<SixByteInstr>(
323 reinterpret_cast<uint8_t*
>(
pc + instr1_length), instr_2,
325 if (icache_flush_mode != SKIP_ICACHE_FLUSH) {
334uint32_t Assembler::uint32_constant_at(Address
pc, Address constant_pool) {
335 return static_cast<uint32_t
>(Assembler::target_address_at(
pc, constant_pool));
338void Assembler::set_uint32_constant_at(Address
pc, Address constant_pool,
339 uint32_t new_constant,
340 WritableJitAllocation* jit_allocation,
341 ICacheFlushMode icache_flush_mode) {
342 Assembler::set_target_address_at(
pc, constant_pool,
343 static_cast<Address>(new_constant),
344 jit_allocation, icache_flush_mode);
IndirectHandle< Code > GetCodeTarget(intptr_t code_target_index) const
IndirectHandle< HeapObject > GetEmbeddedObject(EmbeddedObjectIndex index) const
static constexpr int kSpecialTargetSize
static Tagged_t target_compressed_address_at(Address pc, Address constant_pool)
static void set_target_compressed_address_at(Address pc, Address constant_pool, Tagged_t target, WritableJitAllocation *jit_allocation, ICacheFlushMode icache_flush_mode=FLUSH_ICACHE_IF_NEEDED)
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)
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)
static V8_INLINE Address target_address_at(Address pc, Address constant_pool)
Handle< Code > code_target_object_handle_at(Address pc)
static uint32_t uint32_constant_at(Address pc, Address constant_pool)
static bool SupportsOptimizer()
static V8_INLINE DirectHandle FromSlot(Address *slot)
Instr InstructionBits() const
V8_EXPORT_PRIVATE void SetInstructionBits(Instr value, WritableJitAllocation *jit_allocation=nullptr)
V8_INLINE Operand(int32_t immediate, RelocInfo::Mode rmode=RelocInfo::NO_INFO)
V8_INLINE Address target_internal_reference()
static constexpr bool IsInternalReference(Mode mode)
static constexpr bool IsOffHeapTarget(Mode mode)
static constexpr bool IsRelativeCodeTarget(Mode mode)
static constexpr bool IsCompressedEmbeddedObject(Mode mode)
V8_INLINE Address target_address()
static constexpr bool IsInternalReferenceEncoded(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)
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
bool HasTargetAddressAddress() const
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 WriteValue(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)
void FlushInstructionCache(void *start, size_t size)
kInterpreterTrampolineOffset Tagged< HeapObject >
base::StrongAlias< JSDispatchHandleAliasTag, uint32_t > JSDispatchHandle
constexpr int kSystemPointerSize
Tagged< To > Cast(Tagged< From > value, const v8::SourceLocation &loc=INIT_SOURCE_LOCATION_IN_DEBUG)
#define DCHECK(condition)