35#ifndef V8_CODEGEN_MIPS64_ASSEMBLER_MIPS64_H_
36#define V8_CODEGEN_MIPS64_ASSEMBLER_MIPS64_H_
55class SafepointTableBuilder;
75 :
Operand(static_cast<intptr_t>(value.ptr())) {}
152 std::unique_ptr<AssemblerBuffer> = {});
155 std::unique_ptr<AssemblerBuffer> buffer = {})
161 static constexpr int kNoHandlerTable = 0;
165 int handler_table_offset);
171 GetCode(isolate, desc, kNoSafepointTable, kNoHandlerTable);
185 return static_cast<int>(pc_for_safepoint_ - buffer_start_);
204 enum OffsetSize :
int { kOffset26 = 26, kOffset21 = 21, kOffset16 = 16 };
208 bool is_near(
Label* L);
210 bool is_near_branch(
Label* L);
227 return branch_offset_helper(
L, OffsetSize::kOffset16);
230 return branch_offset_helper(
L, OffsetSize::kOffset21);
233 return branch_offset_helper(
L, OffsetSize::kOffset26);
236 return branch_offset(
L) >> 2;
239 return branch_offset21(
L) >> 2;
242 return branch_offset26(
L) >> 2;
258 set_target_value_at(
pc, target, jit_allocation, icache_flush_mode);
262 Address constant_pool) {
263 return target_address_at(
pc);
266 Address
pc, Address constant_pool, Address target,
269 set_target_address_at(
pc, target, jit_allocation, icache_flush_mode);
273 Address
pc, uint64_t target,
281 Address instruction_payload);
291 Address
pc, Address constant_pool, uint32_t new_constant,
307 static constexpr int kOptimizedBranchAndLinkLongReturnOffset = 4 *
kInstrSize;
315 static constexpr int kSpecialTargetSize = 0;
321 static constexpr int kInstructionsFor32BitConstant = 2;
322 static constexpr int kInstructionsFor64BitConstant = 4;
329 static constexpr int kMaxBranchOffset = (1 << (18 - 1)) - 1;
332 static constexpr int kMaxCompactBranchOffset = (1 << (28 - 1)) - 1;
334 static constexpr int kTrampolineSlotsSize =
359 PROPERTY_ACCESS_INLINED,
360 PROPERTY_ACCESS_INLINED_CONTEXT,
361 PROPERTY_ACCESS_INLINED_CONTEXT_DONT_DELETE,
364 FIRST_IC_MARKER = PROPERTY_ACCESS_INLINED,
370 void nop(
unsigned int type = 0) {
372 Register nop_rt_reg = (type == 0) ? zero_reg : at;
373 sll(zero_reg, nop_rt_reg, type,
true);
379 inline void b(
Label* L) {
b(shifted_branch_offset(
L)); }
389 beq(rs, rt, shifted_branch_offset(
L));
394 bgezc(rt, shifted_branch_offset(
L));
398 bgeuc(rs, rt, shifted_branch_offset(
L));
402 bgec(rs, rt, shifted_branch_offset(
L));
407 bgezalc(rt, shifted_branch_offset(
L));
411 bgezall(rs, branch_offset(
L) >> 2);
416 bgtzc(rt, shifted_branch_offset(
L));
421 blezc(rt, shifted_branch_offset(
L));
426 bltzc(rt, shifted_branch_offset(
L));
430 bltuc(rs, rt, shifted_branch_offset(
L));
434 bltc(rs, rt, shifted_branch_offset(
L));
437 void nal() { bltzal(zero_reg, 0); }
440 blezalc(rt, shifted_branch_offset(
L));
444 bltzalc(rt, shifted_branch_offset(
L));
448 bgtzalc(rt, shifted_branch_offset(
L));
452 beqzalc(rt, shifted_branch_offset(
L));
456 beqc(rs, rt, shifted_branch_offset(
L));
460 beqzc(rs, shifted_branch_offset21(
L));
464 bnezalc(rt, shifted_branch_offset(
L));
468 bnec(rs, rt, shifted_branch_offset(
L));
472 bnezc(rt, shifted_branch_offset21(
L));
476 bne(rs, rt, shifted_branch_offset(
L));
480 bovc(rs, rt, shifted_branch_offset(
L));
484 bnvc(rs, rt, shifted_branch_offset(
L));
497 void j(int64_t target);
624 void break_(uint32_t code,
bool break_as_stop =
false);
625 void stop(uint32_t code = kMaxStopCode);
804 bc1eqz(shifted_branch_offset(
L), ft);
808 bc1nez(shifted_branch_offset(
L), ft);
819 bc1f(shifted_branch_offset(
L),
cc);
823 bc1t(shifted_branch_offset(
L),
cc);
830 bz_v(wt, shifted_branch_offset(
L));
834 bz_b(wt, shifted_branch_offset(
L));
838 bz_h(wt, shifted_branch_offset(
L));
842 bz_w(wt, shifted_branch_offset(
L));
846 bz_d(wt, shifted_branch_offset(
L));
850 bnz_v(wt, shifted_branch_offset(
L));
854 bnz_b(wt, shifted_branch_offset(
L));
858 bnz_h(wt, shifted_branch_offset(
L));
862 bnz_w(wt, shifted_branch_offset(
L));
866 bnz_d(wt, shifted_branch_offset(
L));
1431 assem_->StartBlockTrampolinePool();
1448 assem_->StartBlockGrowBuffer();
1472 void dp(uintptr_t data) { dq(data); }
1482 inline bool overflow()
const {
return pc_ >= reloc_info_writer.pos() - kGap; }
1486 return reloc_info_writer.pos() -
pc_;
1494 i->SetInstructionBits(
instr, jit_allocation);
1497 return *
reinterpret_cast<Instr*
>(buffer_start_ +
pos);
1502 i->SetInstructionBits(
instr, jit_allocation);
1585 SINGLE_ACCESS =
false,
1593 int second_access_add_to_offset = 4);
1595 inline static void set_target_internal_reference_encoded_at(
1614 if (no_trampoline_pool_before_ <
pc_offset)
1621 trampoline_pool_blocked_nesting_--;
1622 if (trampoline_pool_blocked_nesting_ == 0) {
1623 CheckTrampolinePoolQuick(1);
1628 return trampoline_pool_blocked_nesting_ > 0;
1635 DCHECK(!block_buffer_growth_);
1636 block_buffer_growth_ =
true;
1640 DCHECK(block_buffer_growth_);
1641 block_buffer_growth_ =
false;
1647 if (IsPrevInstrCompactBranch()) {
1654 CheckTrampolinePool();
1662 static const int kMaximalBufferSize = 512 *
MB;
1666 static constexpr int kBufferCheckInterval = 1 * KB / 2;
1673 static constexpr int kGap = 64;
1674 static_assert(AssemblerBase::kMinimalBufferSize >= 2 * kGap);
1679 static constexpr int kCheckConstIntervalInst = 32;
1680 static constexpr int kCheckConstInterval =
1683 int next_buffer_check_;
1686 int trampoline_pool_blocked_nesting_;
1687 int no_trampoline_pool_before_;
1690 int last_trampoline_pool_end_;
1693 bool block_buffer_growth_;
1697 static constexpr int kMaxRelocSize = RelocInfoWriter::kMaxSize;
1701 int last_bound_pos_;
1709 inline void emit(
Instr x,
1712 inline void CheckForEmitInForbiddenSlot();
1713 template <
typename T>
1762 Opcode opcode, int32_t offset26,
1780 template <
typename RegType>
1784 template <
typename DstType,
typename SrcType>
1786 SrcType src, DstType dst);
1854 free_slot_count_ = 0;
1860 free_slot_count_ = slot_count;
1861 end_ =
start + slot_count * kTrampolineSlotsSize;
1866 int trampoline_slot = kInvalidSlotPos;
1867 if (free_slot_count_ <= 0) {
1874 trampoline_slot = next_slot_;
1876 next_slot_ += kTrampolineSlotsSize;
1878 return trampoline_slot;
1885 int free_slot_count_;
1889 int unbound_labels_count_;
1895 bool trampoline_emitted_;
1896 static constexpr int kInvalidSlotPos = -1;
1900 std::set<int64_t> internal_reference_positions_;
1902 return internal_reference_positions_.find(
L->pos()) !=
1903 internal_reference_positions_.end();
1908 bool prev_instr_compact_branch_ =
false;
1910 Trampoline trampoline_;
1911 bool internal_trampoline_exception_;
1916 uint8_t* pc_for_safepoint_;
1918 RegList scratch_register_list_;
1939 :
available_(assembler->GetScratchRegisterList()),
1968class LoadStoreLaneParams {
DISALLOW_IMPLICIT_CONSTRUCTORS(BlockGrowBufferScope)
BlockGrowBufferScope(Assembler *assem)
DISALLOW_IMPLICIT_CONSTRUCTORS(BlockTrampolinePoolScope)
BlockTrampolinePoolScope(Assembler *assem)
~BlockTrampolinePoolScope()
Trampoline(int start, int slot_count)
void pcnt_b(MSARegister wd, MSARegister ws)
void mod_u_h(MSARegister wd, MSARegister ws, MSARegister wt)
void bind_to(Label *L, int pos)
void stop(uint32_t code=kMaxStopCode)
void beqc(Register rs, Register rt, int16_t offset)
void bset_b(MSARegister wd, MSARegister ws, MSARegister wt)
void bnegi_w(MSARegister wd, MSARegister ws, uint32_t m)
void AdjustBaseAndOffset(MemOperand *src, OffsetAccessType access_type=OffsetAccessType::SINGLE_ACCESS, int second_access_add_to_offset=4)
void clt_s_w(MSARegister wd, MSARegister ws, MSARegister wt)
void GenInstrMsaBit(SecondaryField operation, SecondaryField df, uint32_t m, MSARegister ws, MSARegister wd)
void dsubu(Register rd, Register rs, Register rt)
static void set_target_value_at(Address pc, uint64_t target, WritableJitAllocation *jit_allocation=nullptr, ICacheFlushMode icache_flush_mode=FLUSH_ICACHE_IF_NEEDED)
void bltz(Register rs, int16_t offset)
void srli_d(MSARegister wd, MSARegister ws, uint32_t m)
void copy_u_h(Register rd, MSARegister ws, uint32_t n)
void ld(Register rd, const MemOperand &rs)
void dmuhu(Register rd, Register rs, Register rt)
void fcun_w(MSARegister wd, MSARegister ws, MSARegister wt)
void sd(Register rd, const MemOperand &rs)
void addv_b(MSARegister wd, MSARegister ws, MSARegister wt)
void aver_s_d(MSARegister wd, MSARegister ws, MSARegister wt)
void aver_u_h(MSARegister wd, MSARegister ws, MSARegister wt)
void GetCode(LocalIsolate *isolate, CodeDesc *desc)
void min_s_b(MSARegister wd, MSARegister ws, MSARegister wt)
void fill_w(MSARegister wd, Register rs)
void srari_w(MSARegister wd, MSARegister ws, uint32_t m)
void fcult_d(MSARegister wd, MSARegister ws, MSARegister wt)
void st_b(MSARegister wd, const MemOperand &rs)
void seb(Register rd, Register rt)
void dextm_(Register rt, Register rs, uint16_t pos, uint16_t size)
static bool IsBnec(Instr instr)
bool is_near(Label *L, OffsetSize bits)
void clti_u_h(MSARegister wd, MSARegister ws, uint32_t imm5)
void subsuu_s_b(MSARegister wd, MSARegister ws, MSARegister wt)
bool is_buffer_growth_blocked() const
void mul_q_h(MSARegister wd, MSARegister ws, MSARegister wt)
bool is_internal_reference(Label *L)
void GenInstrImmediate(Opcode opcode, Register rs, uint32_t offset21)
void fcne_w(MSARegister wd, MSARegister ws, MSARegister wt)
uint64_t branch_long_offset(Label *L)
void dotp_s_h(MSARegister wd, MSARegister ws, MSARegister wt)
void slti(Register rd, Register rs, int32_t j)
void pckod_h(MSARegister wd, MSARegister ws, MSARegister wt)
void class_s(FPURegister fd, FPURegister fs)
void slt(Register rd, Register rs, Register rt)
void lwl(Register rd, const MemOperand &rs)
void jic(Register rt, int16_t offset)
void ilvev_h(MSARegister wd, MSARegister ws, MSARegister wt)
void add_d(FPURegister fd, FPURegister fs, FPURegister ft)
void div_s_w(MSARegister wd, MSARegister ws, MSARegister wt)
void clti_s_w(MSARegister wd, MSARegister ws, uint32_t imm5)
void lbu(Register rd, const MemOperand &rs)
void ave_u_b(MSARegister wd, MSARegister ws, MSARegister wt)
void dati(Register rs, int32_t j)
void movf(Register rd, Register rs, uint16_t cc=0)
static bool IsJ(Instr instr)
void bclr_b(MSARegister wd, MSARegister ws, MSARegister wt)
void break_(uint32_t code, bool break_as_stop=false)
void aver_u_b(MSARegister wd, MSARegister ws, MSARegister wt)
void hadd_s_d(MSARegister wd, MSARegister ws, MSARegister wt)
void fadd_d(MSARegister wd, MSARegister ws, MSARegister wt)
void ffql_w(MSARegister wd, MSARegister ws)
void ceqi_b(MSARegister wd, MSARegister ws, uint32_t imm5)
void bclri_h(MSARegister wd, MSARegister ws, uint32_t m)
void mfhc1(Register rt, FPURegister fs)
void splat_w(MSARegister wd, MSARegister ws, Register rt)
void bnezalc(Register rt, Label *L)
void bneg_b(MSARegister wd, MSARegister ws, MSARegister wt)
void fadd_w(MSARegister wd, MSARegister ws, MSARegister wt)
void label_at_put(Label *L, int at_offset)
void dmod(Register rd, Register rs, Register rt)
static bool IsPush(Instr instr)
void bgezal(Register rs, int16_t offset)
void cvt_s_w(FPURegister fd, FPURegister fs)
static bool IsJump(Instr instr)
void mulv_d(MSARegister wd, MSARegister ws, MSARegister wt)
void bgezc(Register rt, Label *L)
bool is_valid_msa_df_n(SecondaryField elm_df, uint32_t n)
void movz_s(FPURegister fd, FPURegister fs, Register rt)
void round_l_d(FPURegister fd, FPURegister fs)
void fill_d(MSARegister wd, Register rs)
void bgeuc(Register rs, Register rt, int16_t offset)
void fmax_w(MSARegister wd, MSARegister ws, MSARegister wt)
static uint32_t GetRtField(Instr instr)
void addu(Register rd, Register rs, Register rt)
void binsli_w(MSARegister wd, MSARegister ws, uint32_t m)
void CheckTrampolinePool()
void fmin_d(MSARegister wd, MSARegister ws, MSARegister wt)
void dsra(Register rt, Register rd, uint16_t sa)
void GenInstrMsaBranch(SecondaryField operation, MSARegister wt, int32_t offset16)
void ftint_u_d(MSARegister wd, MSARegister ws)
void fexp2_w(MSARegister wd, MSARegister ws, MSARegister wt)
void asub_s_w(MSARegister wd, MSARegister ws, MSARegister wt)
void movz_d(FPURegister fd, FPURegister fs, Register rt)
void srli_b(MSARegister wd, MSARegister ws, uint32_t m)
void ftrunc_s_d(MSARegister wd, MSARegister ws)
void fmul_w(MSARegister wd, MSARegister ws, MSARegister wt)
void frint_w(MSARegister wd, MSARegister ws)
void adds_u_h(MSARegister wd, MSARegister ws, MSARegister wt)
void ffint_u_w(MSARegister wd, MSARegister ws)
void mina_s(FPURegister fd, FPURegister fs, FPURegister ft)
void mul_q_w(MSARegister wd, MSARegister ws, MSARegister wt)
void madd_q_w(MSARegister wd, MSARegister ws, MSARegister wt)
void fseq_w(MSARegister wd, MSARegister ws, MSARegister wt)
void dpadd_s_d(MSARegister wd, MSARegister ws, MSARegister wt)
bool is_trampoline_emitted() const
void srai_b(MSARegister wd, MSARegister ws, uint32_t m)
void min_a_h(MSARegister wd, MSARegister ws, MSARegister wt)
void scd(Register rd, const MemOperand &rs)
void addvi_w(MSARegister wd, MSARegister ws, uint32_t imm5)
void vshf_d(MSARegister wd, MSARegister ws, MSARegister wt)
void hadd_u_b(MSARegister wd, MSARegister ws, MSARegister wt)
void max_u_d(MSARegister wd, MSARegister ws, MSARegister wt)
void pref(int32_t hint, const MemOperand &rs)
static bool IsLw(Instr instr)
void dmult(Register rs, Register rt)
void bset_w(MSARegister wd, MSARegister ws, MSARegister wt)
void ctc1(Register rt, FPUControlRegister fs)
void binsl_w(MSARegister wd, MSARegister ws, MSARegister wt)
void maddv_h(MSARegister wd, MSARegister ws, MSARegister wt)
void splati_b(MSARegister wd, MSARegister ws, uint32_t n)
void EndBlockTrampolinePool()
void target_at_put(int pos, int target_pos, bool is_internal)
void mod_u_w(MSARegister wd, MSARegister ws, MSARegister wt)
void ceil_w_s(FPURegister fd, FPURegister fs)
void subs_s_w(MSARegister wd, MSARegister ws, MSARegister wt)
void ld_h(MSARegister wd, const MemOperand &rs)
void beqzalc(Register rt, int16_t offset)
void maxi_s_b(MSARegister wd, MSARegister ws, uint32_t imm5)
void add_a_b(MSARegister wd, MSARegister ws, MSARegister wt)
void ffint_s_w(MSARegister wd, MSARegister ws)
void copy_u_b(Register rd, MSARegister ws, uint32_t n)
void hsub_u_d(MSARegister wd, MSARegister ws, MSARegister wt)
void beqc(Register rs, Register rt, Label *L)
void fsne_w(MSARegister wd, MSARegister ws, MSARegister wt)
void movn_d(FPURegister fd, FPURegister fs, Register rt)
void cle_s_b(MSARegister wd, MSARegister ws, MSARegister wt)
void ave_u_w(MSARegister wd, MSARegister ws, MSARegister wt)
void fcult_w(MSARegister wd, MSARegister ws, MSARegister wt)
static bool IsBzc(Instr instr)
void sra_h(MSARegister wd, MSARegister ws, MSARegister wt)
void and_v(MSARegister wd, MSARegister ws, MSARegister wt)
void asub_s_b(MSARegister wd, MSARegister ws, MSARegister wt)
void lwr(Register rd, const MemOperand &rs)
void maddf_s(FPURegister fd, FPURegister fs, FPURegister ft)
void ori_b(MSARegister wd, MSARegister ws, uint32_t imm8)
void bgez(Register rs, int16_t offset)
void srari_d(MSARegister wd, MSARegister ws, uint32_t m)
void pckev_w(MSARegister wd, MSARegister ws, MSARegister wt)
void cmp(FPUCondition cond, SecondaryField fmt, FPURegister fd, FPURegister ft, FPURegister fs)
void fmax_a_d(MSARegister wd, MSARegister ws, MSARegister wt)
void copy_s_h(Register rd, MSARegister ws, uint32_t n)
void ffql_d(MSARegister wd, MSARegister ws)
void bnz_b(MSARegister wt, Label *L)
void subs_s_b(MSARegister wd, MSARegister ws, MSARegister wt)
static uint32_t GetOpcodeField(Instr instr)
void seleqz(SecondaryField fmt, FPURegister fd, FPURegister fs, FPURegister ft)
void div_s_d(MSARegister wd, MSARegister ws, MSARegister wt)
void xor_v(MSARegister wd, MSARegister ws, MSARegister wt)
void swc1(FPURegister fs, const MemOperand &dst)
void cvt_l_s(FPURegister fd, FPURegister fs)
void dpadd_u_b(MSARegister wd, MSARegister ws, MSARegister wt)
void msubr_q_h(MSARegister wd, MSARegister ws, MSARegister wt)
void lb(Register rd, const MemOperand &rs)
void jalr(Register rs, Register rd=ra)
void binsli_d(MSARegister wd, MSARegister ws, uint32_t m)
void movz(Register rd, Register rs, Register rt)
void fcule_d(MSARegister wd, MSARegister ws, MSARegister wt)
void sltiu(Register rd, Register rs, int32_t j)
void maxa_s(FPURegister fd, FPURegister fs, FPURegister ft)
void ld_d(MSARegister wd, const MemOperand &rs)
void fsub_w(MSARegister wd, MSARegister ws, MSARegister wt)
static bool IsBne(Instr instr)
Assembler(const MaybeAssemblerZone &, const AssemblerOptions &options, std::unique_ptr< AssemblerBuffer > buffer={})
static bool IsPop(Instr instr)
void tltu(Register rs, Register rt, uint16_t code)
void tgeu(Register rs, Register rt, uint16_t code)
void max_u_h(MSARegister wd, MSARegister ws, MSARegister wt)
void GenInstrMsa2RF(SecondaryField operation, SecondaryField df, MSARegister ws, MSARegister wd)
void ldi_b(MSARegister wd, int32_t imm10)
void mini_u_w(MSARegister wd, MSARegister ws, uint32_t imm5)
void bc1f(int16_t offset, uint16_t cc=0)
void asub_s_d(MSARegister wd, MSARegister ws, MSARegister wt)
void subs_u_b(MSARegister wd, MSARegister ws, MSARegister wt)
void shf_w(MSARegister wd, MSARegister ws, uint32_t imm8)
void jialc(Register rt, int16_t offset)
void bnezalc(Register rt, int16_t offset)
void insve_b(MSARegister wd, uint32_t n, MSARegister ws)
void dbitswap(Register rd, Register rt)
static int deserialization_special_target_size(Address instruction_payload)
void ceq_b(MSARegister wd, MSARegister ws, MSARegister wt)
void clti_s_b(MSARegister wd, MSARegister ws, uint32_t imm5)
void madd_q_h(MSARegister wd, MSARegister ws, MSARegister wt)
void pcnt_h(MSARegister wd, MSARegister ws)
void bc1nez(int16_t offset, FPURegister ft)
void bc1eqz(int16_t offset, FPURegister ft)
static bool IsSwRegFpOffset(Instr instr)
void AllocateAndInstallRequestedHeapNumbers(LocalIsolate *isolate)
void mulu(Register rd, Register rs, Register rt)
void GenInstrJump(Opcode opcode, uint32_t address)
void min_a_b(MSARegister wd, MSARegister ws, MSARegister wt)
void fcmp(FPURegister src1, const double src2, FPUCondition cond)
void bltzalc(Register rt, Label *L)
void sdc1(FPURegister fs, const MemOperand &dst)
void dpsub_s_d(MSARegister wd, MSARegister ws, MSARegister wt)
void bltuc(Register rs, Register rt, int16_t offset)
void bnvc(Register rs, Register rt, Label *L)
void binsri_d(MSARegister wd, MSARegister ws, uint32_t m)
void divu(Register rd, Register rs, Register rt)
void mov_d(FPURegister fd, FPURegister fs)
void min_d(FPURegister fd, FPURegister fs, FPURegister ft)
void modu(Register rd, Register rs, Register rt)
void rint_d(FPURegister fd, FPURegister fs)
void shf_b(MSARegister wd, MSARegister ws, uint32_t imm8)
void ddivu(Register rs, Register rt)
void lld(Register rd, const MemOperand &rs)
void EmittedCompactBranchInstruction()
void bnec(Register rs, Register rt, Label *L)
void copy_s_b(Register rd, MSARegister ws, uint32_t n)
void st_w(MSARegister wd, const MemOperand &rs)
void dalign(Register rd, Register rs, Register rt, uint8_t bp)
void sll_w(MSARegister wd, MSARegister ws, MSARegister wt)
static uint32_t GetFunctionField(Instr instr)
void dpsub_s_b(MSARegister wd, MSARegister ws, MSARegister wt)
void next(Label *L, bool is_internal)
void maddv_w(MSARegister wd, MSARegister ws, MSARegister wt)
void hadd_s_h(MSARegister wd, MSARegister ws, MSARegister wt)
void pckev_b(MSARegister wd, MSARegister ws, MSARegister wt)
void sdr(Register rd, const MemOperand &rs)
void div_u_h(MSARegister wd, MSARegister ws, MSARegister wt)
static void deserialization_set_target_internal_reference_at(Address pc, Address target, WritableJitAllocation &jit_allocation, RelocInfo::Mode mode=RelocInfo::INTERNAL_REFERENCE)
void dlsa(Register rd, Register rt, Register rs, uint8_t sa)
void floor_l_s(FPURegister fd, FPURegister fs)
void maxi_u_h(MSARegister wd, MSARegister ws, uint32_t imm5)
void fsueq_w(MSARegister wd, MSARegister ws, MSARegister wt)
void bnz_h(MSARegister wt, Label *L)
void bc1t(Label *L, uint16_t cc=0)
void maddv_b(MSARegister wd, MSARegister ws, MSARegister wt)
void GenInstrRegister(Opcode opcode, Register rs, Register rt, Register rd, uint16_t sa=0, SecondaryField func=nullptrSF)
void asub_u_d(MSARegister wd, MSARegister ws, MSARegister wt)
void msubf_d(FPURegister fd, FPURegister fs, FPURegister ft)
void dpsub_s_w(MSARegister wd, MSARegister ws, MSARegister wt)
void c(FPUCondition cond, SecondaryField fmt, FPURegister ft, FPURegister fs, uint16_t cc=0)
void subsus_s_b(MSARegister wd, MSARegister ws, MSARegister wt)
void mulv_w(MSARegister wd, MSARegister ws, MSARegister wt)
static Address target_address_at(Address pc)
void mul_s(FPURegister fd, FPURegister fs, FPURegister ft)
void srlri_h(MSARegister wd, MSARegister ws, uint32_t m)
void fmsub_d(MSARegister wd, MSARegister ws, MSARegister wt)
void StartBlockGrowBuffer()
void subsus_u_d(MSARegister wd, MSARegister ws, MSARegister wt)
void ave_s_d(MSARegister wd, MSARegister ws, MSARegister wt)
void maddr_q_h(MSARegister wd, MSARegister ws, MSARegister wt)
void srar_b(MSARegister wd, MSARegister ws, MSARegister wt)
void subvi_w(MSARegister wd, MSARegister ws, uint32_t imm5)
bool is_trampoline_pool_blocked() const
void fcaf_d(MSARegister wd, MSARegister ws, MSARegister wt)
void st_d(MSARegister wd, const MemOperand &rs)
void c_s(FPUCondition cond, FPURegister ft, FPURegister fs, uint16_t cc=0)
static uint32_t GetFunction(Instr instr)
void StartBlockTrampolinePool()
static bool IsJalr(Instr instr)
void srl_w(MSARegister wd, MSARegister ws, MSARegister wt)
void auipc(Register rs, int16_t imm16)
void maxi_u_b(MSARegister wd, MSARegister ws, uint32_t imm5)
void nop(unsigned int type=0)
void sat_u_d(MSARegister wd, MSARegister ws, uint32_t m)
void bc1t(int16_t offset, uint16_t cc=0)
void dpsub_u_h(MSARegister wd, MSARegister ws, MSARegister wt)
void clt_s_d(MSARegister wd, MSARegister ws, MSARegister wt)
void cle_s_h(MSARegister wd, MSARegister ws, MSARegister wt)
void cvt_l_d(FPURegister fd, FPURegister fs)
void recip_s(FPURegister fd, FPURegister fs)
void round_w_s(FPURegister fd, FPURegister fs)
void ilvr_h(MSARegister wd, MSARegister ws, MSARegister wt)
int32_t shifted_branch_offset26(Label *L)
void cvt_d_s(FPURegister fd, FPURegister fs)
void cvt_d_w(FPURegister fd, FPURegister fs)
static bool IsBc(Instr instr)
void clt_s_b(MSARegister wd, MSARegister ws, MSARegister wt)
void bset_h(MSARegister wd, MSARegister ws, MSARegister wt)
int InstructionsGeneratedSince(Label *label)
static V8_INLINE void set_target_address_at(Address pc, Address target, WritableJitAllocation *jit_allocation, ICacheFlushMode icache_flush_mode=FLUSH_ICACHE_IF_NEEDED)
void abs_d(FPURegister fd, FPURegister fs)
void cvt_w_d(FPURegister fd, FPURegister fs)
void bmz_v(MSARegister wd, MSARegister ws, MSARegister wt)
void ldi_d(MSARegister wd, int32_t imm10)
void addv_w(MSARegister wd, MSARegister ws, MSARegister wt)
void fdiv_d(MSARegister wd, MSARegister ws, MSARegister wt)
void ceqi_d(MSARegister wd, MSARegister ws, uint32_t imm5)
void frsqrt_w(MSARegister wd, MSARegister ws)
void max_a_h(MSARegister wd, MSARegister ws, MSARegister wt)
void binsl_d(MSARegister wd, MSARegister ws, MSARegister wt)
bool has_exception() const
void div(Register rs, Register rt)
void slli_w(MSARegister wd, MSARegister ws, uint32_t m)
int32_t shifted_branch_offset(Label *L)
void balc(int32_t offset)
void div_u_w(MSARegister wd, MSARegister ws, MSARegister wt)
static bool IsOri(Instr instr)
static uint32_t GetSa(Instr instr)
void bclr_d(MSARegister wd, MSARegister ws, MSARegister wt)
void fcueq_w(MSARegister wd, MSARegister ws, MSARegister wt)
void binsr_h(MSARegister wd, MSARegister ws, MSARegister wt)
void fslt_w(MSARegister wd, MSARegister ws, MSARegister wt)
void mod_s_h(MSARegister wd, MSARegister ws, MSARegister wt)
void beqzc(Register rs, Label *L)
void insert_b(MSARegister wd, uint32_t n, Register rs)
void GenInstrMsaI5(SecondaryField operation, SecondaryField df, int32_t imm5, MSARegister ws, MSARegister wd)
void mod_s_b(MSARegister wd, MSARegister ws, MSARegister wt)
void GenInstrMsa3RF(SecondaryField operation, uint32_t df, MSARegister wt, MSARegister ws, MSARegister wd)
void GenInstrRegister(Opcode opcode, SecondaryField fmt, Register rt, FPUControlRegister fs, SecondaryField func=nullptrSF)
void bgezall(Register rs, Label *L)
void srlri_b(MSARegister wd, MSARegister ws, uint32_t m)
void div_u_d(MSARegister wd, MSARegister ws, MSARegister wt)
void srar_h(MSARegister wd, MSARegister ws, MSARegister wt)
void daui(Register rt, Register rs, int32_t j)
void ldi_h(MSARegister wd, int32_t imm10)
void neg_d(FPURegister fd, FPURegister fs)
void subsuu_u_w(MSARegister wd, MSARegister ws, MSARegister wt)
void class_d(FPURegister fd, FPURegister fs)
void fcaf_w(MSARegister wd, MSARegister ws, MSARegister wt)
void subsuu_u_d(MSARegister wd, MSARegister ws, MSARegister wt)
void fexdo_w(MSARegister wd, MSARegister ws, MSARegister wt)
void blezc(Register rt, int16_t offset)
void rint_s(FPURegister fd, FPURegister fs)
void subvi_b(MSARegister wd, MSARegister ws, uint32_t imm5)
void fsune_w(MSARegister wd, MSARegister ws, MSARegister wt)
void slli_b(MSARegister wd, MSARegister ws, uint32_t m)
void sld_d(MSARegister wd, MSARegister ws, Register rt)
void rint(SecondaryField fmt, FPURegister fd, FPURegister fs)
void asub_u_h(MSARegister wd, MSARegister ws, MSARegister wt)
void splat_d(MSARegister wd, MSARegister ws, Register rt)
void GenInstrMsaElm(SecondaryField operation, SecondaryField df, uint32_t n, SrcType src, DstType dst)
void trunc_w_s(FPURegister fd, FPURegister fs)
void bnec(Register rs, Register rt, int16_t offset)
void msubv_w(MSARegister wd, MSARegister ws, MSARegister wt)
void slli_h(MSARegister wd, MSARegister ws, uint32_t m)
void ilvl_b(MSARegister wd, MSARegister ws, MSARegister wt)
void min_s_d(MSARegister wd, MSARegister ws, MSARegister wt)
intptr_t available_space() const
void ceqi_h(MSARegister wd, MSARegister ws, uint32_t imm5)
static uint32_t GetLabelConst(Instr instr)
void bltc(Register rs, Register rt, int16_t offset)
void srari_b(MSARegister wd, MSARegister ws, uint32_t m)
void bnvc(Register rs, Register rt, int16_t offset)
void trunc_l_d(FPURegister fd, FPURegister fs)
void hadd_u_w(MSARegister wd, MSARegister ws, MSARegister wt)
void adds_a_b(MSARegister wd, MSARegister ws, MSARegister wt)
void mul(Register rd, Register rs, Register rt)
void ll(Register rd, const MemOperand &rs)
void dotp_s_b(MSARegister wd, MSARegister ws, MSARegister wt)
void fill_b(MSARegister wd, Register rs)
void ave_s_w(MSARegister wd, MSARegister ws, MSARegister wt)
void subvi_h(MSARegister wd, MSARegister ws, uint32_t imm5)
int32_t branch_offset26(Label *L)
void teq(Register rs, Register rt, uint16_t code)
void bnz_v(MSARegister wt, Label *L)
void clei_s_b(MSARegister wd, MSARegister ws, uint32_t imm5)
void dsrl(Register rd, Register rt, uint16_t sa)
static uint32_t GetRsField(Instr instr)
void lsa(Register rd, Register rt, Register rs, uint8_t sa)
void bclr_w(MSARegister wd, MSARegister ws, MSARegister wt)
void floor_w_s(FPURegister fd, FPURegister fs)
void bclri_w(MSARegister wd, MSARegister ws, uint32_t m)
void bc1eqz(Label *L, FPURegister ft)
void tlt(Register rs, Register rt, uint16_t code)
void fmul_d(MSARegister wd, MSARegister ws, MSARegister wt)
void fmadd_d(MSARegister wd, MSARegister ws, MSARegister wt)
void dmuh(Register rd, Register rs, Register rt)
void subsuu_s_w(MSARegister wd, MSARegister ws, MSARegister wt)
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 EmitForbiddenSlotInstruction()
void insve_d(MSARegister wd, uint32_t n, MSARegister ws)
bool is_near_r6(Label *L)
void bnz_d(MSARegister wt, int16_t offset)
static Instr SetSwOffset(Instr instr, int16_t offset)
void sld_h(MSARegister wd, MSARegister ws, Register rt)
void hadd_s_b(MSARegister wd, MSARegister ws, MSARegister wt)
void bne(Register rs, Register rt, int16_t offset)
void binsli_b(MSARegister wd, MSARegister ws, uint32_t m)
void dotp_u_h(MSARegister wd, MSARegister ws, MSARegister wt)
void rotr(Register rd, Register rt, uint16_t sa)
void dpadd_u_w(MSARegister wd, MSARegister ws, MSARegister wt)
void dmul(Register rd, Register rs, Register rt)
void bz_h(MSARegister wt, int16_t offset)
void mini_u_h(MSARegister wd, MSARegister ws, uint32_t imm5)
void mtc1(Register rt, FPURegister fs)
void ilvod_d(MSARegister wd, MSARegister ws, MSARegister wt)
static bool IsJr(Instr instr)
void clei_s_w(MSARegister wd, MSARegister ws, uint32_t imm5)
void dpadd_s_h(MSARegister wd, MSARegister ws, MSARegister wt)
void maddf_d(FPURegister fd, FPURegister fs, FPURegister ft)
void bseli_b(MSARegister wd, MSARegister ws, uint32_t imm8)
void frint_d(MSARegister wd, MSARegister ws)
void sel_s(FPURegister fd, FPURegister fs, FPURegister ft)
void ftrunc_s_w(MSARegister wd, MSARegister ws)
void min_u_h(MSARegister wd, MSARegister ws, MSARegister wt)
void min_s_w(MSARegister wd, MSARegister ws, MSARegister wt)
void lw(Register rd, const MemOperand &rs)
void pcnt_d(MSARegister wd, MSARegister ws)
void RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data=0)
void binsl_h(MSARegister wd, MSARegister ws, MSARegister wt)
void splati_w(MSARegister wd, MSARegister ws, uint32_t n)
void dmodu(Register rd, Register rs, Register rt)
void ilvod_b(MSARegister wd, MSARegister ws, MSARegister wt)
void add_a_w(MSARegister wd, MSARegister ws, MSARegister wt)
void maxi_s_w(MSARegister wd, MSARegister ws, uint32_t imm5)
void beqzalc(Register rt, Label *L)
void binsli_h(MSARegister wd, MSARegister ws, uint32_t m)
void floor_l_d(FPURegister fd, FPURegister fs)
void bz_w(MSARegister wt, int16_t offset)
void sat_u_b(MSARegister wd, MSARegister ws, uint32_t m)
void dsrl32(Register rt, Register rd, uint16_t sa)
static bool IsLui(Instr instr)
void bltzc(Register rt, int16_t offset)
void max_a_b(MSARegister wd, MSARegister ws, MSARegister wt)
static uint32_t uint32_constant_at(Address pc, Address constant_pool)
void GenInstrRegister(Opcode opcode, FPURegister fr, FPURegister ft, FPURegister fs, FPURegister fd, SecondaryField func=nullptrSF)
void dsra32(Register rt, Register rd, uint16_t sa)
void msub_d(FPURegister fd, FPURegister fr, FPURegister fs, FPURegister ft)
void adds_s_h(MSARegister wd, MSARegister ws, MSARegister wt)
void lwupc(Register rs, int32_t offset19)
void nloc_h(MSARegister wd, MSARegister ws)
void bseti_w(MSARegister wd, MSARegister ws, uint32_t m)
void fsle_d(MSARegister wd, MSARegister ws, MSARegister wt)
void hsub_u_h(MSARegister wd, MSARegister ws, MSARegister wt)
void addvi_h(MSARegister wd, MSARegister ws, uint32_t imm5)
void clt_u_b(MSARegister wd, MSARegister ws, MSARegister wt)
void seleqz_d(FPURegister fd, FPURegister fs, FPURegister ft)
void nor_v(MSARegister wd, MSARegister ws, MSARegister wt)
void fsaf_d(MSARegister wd, MSARegister ws, MSARegister wt)
void ilvr_w(MSARegister wd, MSARegister ws, MSARegister wt)
void adds_u_d(MSARegister wd, MSARegister ws, MSARegister wt)
bool IsPrevInstrCompactBranch()
void print(const Label *L)
void fsult_d(MSARegister wd, MSARegister ws, MSARegister wt)
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)
void ceil_l_s(FPURegister fd, FPURegister fs)
bool MustUseReg(RelocInfo::Mode rmode)
void madd_s(FPURegister fd, FPURegister fr, FPURegister fs, FPURegister ft)
void insert_d(MSARegister wd, uint32_t n, Register rs)
void mulv_b(MSARegister wd, MSARegister ws, MSARegister wt)
void srlri_d(MSARegister wd, MSARegister ws, uint32_t m)
void set_pc_for_safepoint()
void ilvl_w(MSARegister wd, MSARegister ws, MSARegister wt)
void fmax_a_w(MSARegister wd, MSARegister ws, MSARegister wt)
static uint32_t GetRdField(Instr instr)
void hsub_s_b(MSARegister wd, MSARegister ws, MSARegister wt)
void min_u_d(MSARegister wd, MSARegister ws, MSARegister wt)
RegList * GetScratchRegisterList()
void dpadd_u_d(MSARegister wd, MSARegister ws, MSARegister wt)
void addvi_b(MSARegister wd, MSARegister ws, uint32_t imm5)
void bneg_h(MSARegister wd, MSARegister ws, MSARegister wt)
void bmnzi_b(MSARegister wd, MSARegister ws, uint32_t imm8)
void dotp_s_d(MSARegister wd, MSARegister ws, MSARegister wt)
void addiu(Register rd, Register rs, int32_t j)
void fseq_d(MSARegister wd, MSARegister ws, MSARegister wt)
void xori(Register rd, Register rs, int32_t j)
static uint32_t GetRt(Instr instr)
void srai_d(MSARegister wd, MSARegister ws, uint32_t m)
static Register GetRdReg(Instr instr)
void fexupr_d(MSARegister wd, MSARegister ws)
void hadd_u_d(MSARegister wd, MSARegister ws, MSARegister wt)
void GenInstrMsa3R(SecondaryField operation, SecondaryField df, RegType t, MSARegister ws, MSARegister wd)
void sll_h(MSARegister wd, MSARegister ws, MSARegister wt)
static int32_t GetBranchOffset(Instr instr)
void ave_s_h(MSARegister wd, MSARegister ws, MSARegister wt)
void rotrv(Register rd, Register rt, Register rs)
void bnegi_h(MSARegister wd, MSARegister ws, uint32_t m)
static bool IsBnezc(Instr instr)
void fexupl_d(MSARegister wd, MSARegister ws)
void selnez_d(FPURegister fd, FPURegister fs, FPURegister ft)
void subsuu_s_h(MSARegister wd, MSARegister ws, MSARegister wt)
void subs_s_d(MSARegister wd, MSARegister ws, MSARegister wt)
void ceqi_w(MSARegister wd, MSARegister ws, uint32_t imm5)
void fsueq_d(MSARegister wd, MSARegister ws, MSARegister wt)
void trunc_w_d(FPURegister fd, FPURegister fs)
void aver_s_w(MSARegister wd, MSARegister ws, MSARegister wt)
void bset_d(MSARegister wd, MSARegister ws, MSARegister wt)
void dshd(Register rd, Register rt)
void selnez(SecondaryField fmt, FPURegister fd, FPURegister fs, FPURegister ft)
void frcp_w(MSARegister wd, MSARegister ws)
void clt_u_h(MSARegister wd, MSARegister ws, MSARegister wt)
void sltu(Register rd, Register rs, Register rt)
void addiupc(Register rs, int32_t imm19)
void binsri_h(MSARegister wd, MSARegister ws, uint32_t m)
void max_d(FPURegister fd, FPURegister fs, FPURegister ft)
void ori(Register rd, Register rs, int32_t j)
void fsle_w(MSARegister wd, MSARegister ws, MSARegister wt)
void bgec(Register rs, Register rt, Label *L)
static bool IsAddImmediate(Instr instr)
void andi(Register rd, Register rs, int32_t j)
void frcp_d(MSARegister wd, MSARegister ws)
int32_t shifted_branch_offset21(Label *L)
void selnez(Register rs, Register rt, Register rd)
void binsri_b(MSARegister wd, MSARegister ws, uint32_t m)
void dpsub_u_b(MSARegister wd, MSARegister ws, MSARegister wt)
void ftq_h(MSARegister wd, MSARegister ws, MSARegister wt)
void fceq_d(MSARegister wd, MSARegister ws, MSARegister wt)
void ldr(Register rd, const MemOperand &rs)
void fclass_w(MSARegister wd, MSARegister ws)
void bseti_h(MSARegister wd, MSARegister ws, uint32_t m)
void clti_s_h(MSARegister wd, MSARegister ws, uint32_t imm5)
void ddiv(Register rd, Register rs, Register rt)
void bgezalc(Register rt, Label *L)
void addv_h(MSARegister wd, MSARegister ws, MSARegister wt)
void GenInstrImmediate(Opcode opcode, int32_t offset26, CompactBranchType is_compact_branch=CompactBranchType::NO)
void dmultu(Register rs, Register rt)
void sc(Register rd, const MemOperand &rs)
void cle_u_d(MSARegister wd, MSARegister ws, MSARegister wt)
void rsqrt_d(FPURegister fd, FPURegister fs)
void bz_d(MSARegister wt, int16_t offset)
void div(Register rd, Register rs, Register rt)
void fcune_w(MSARegister wd, MSARegister ws, MSARegister wt)
void fsqrt_w(MSARegister wd, MSARegister ws)
void sub_s(FPURegister fd, FPURegister fs, FPURegister ft)
void add_s(FPURegister fd, FPURegister fs, FPURegister ft)
void insve_h(MSARegister wd, uint32_t n, MSARegister ws)
void subsus_s_d(MSARegister wd, MSARegister ws, MSARegister wt)
void fsule_w(MSARegister wd, MSARegister ws, MSARegister wt)
void fexupl_w(MSARegister wd, MSARegister ws)
void ffqr_w(MSARegister wd, MSARegister ws)
void ilvev_w(MSARegister wd, MSARegister ws, MSARegister wt)
void mov_s(FPURegister fd, FPURegister fs)
void fexupr_w(MSARegister wd, MSARegister ws)
void swl(Register rd, const MemOperand &rs)
void trunc_l_s(FPURegister fd, FPURegister fs)
void sb(Register rd, const MemOperand &rs)
void msubv_b(MSARegister wd, MSARegister ws, MSARegister wt)
void ceq_w(MSARegister wd, MSARegister ws, MSARegister wt)
void madd_d(FPURegister fd, FPURegister fr, FPURegister fs, FPURegister ft)
void srlri_w(MSARegister wd, MSARegister ws, uint32_t m)
static bool IsMsaBranch(Instr instr)
void min_u_b(MSARegister wd, MSARegister ws, MSARegister wt)
void subsuu_s_d(MSARegister wd, MSARegister ws, MSARegister wt)
void fcle_w(MSARegister wd, MSARegister ws, MSARegister wt)
void splati_h(MSARegister wd, MSARegister ws, uint32_t n)
void daddiu(Register rd, Register rs, int32_t j)
static uint32_t GetRs(Instr instr)
void ins_(Register rt, Register rs, uint16_t pos, uint16_t size)
void fslt_d(MSARegister wd, MSARegister ws, MSARegister wt)
void cmp_s(FPUCondition cond, FPURegister fd, FPURegister fs, FPURegister ft)
static Register GetRsReg(Instr instr)
void dotp_u_w(MSARegister wd, MSARegister ws, MSARegister wt)
void max_s_h(MSARegister wd, MSARegister ws, MSARegister wt)
void mulr_q_w(MSARegister wd, MSARegister ws, MSARegister wt)
uint64_t jump_offset(Label *L)
void srlr_h(MSARegister wd, MSARegister ws, MSARegister wt)
void blezalc(Register rt, Label *L)
void pckod_b(MSARegister wd, MSARegister ws, MSARegister wt)
void lui(Register rd, int32_t j)
void max(SecondaryField fmt, FPURegister fd, FPURegister fs, FPURegister ft)
void clti_u_b(MSARegister wd, MSARegister ws, uint32_t imm5)
void hsub_s_w(MSARegister wd, MSARegister ws, MSARegister wt)
void subsus_s_w(MSARegister wd, MSARegister ws, MSARegister wt)
void clti_u_d(MSARegister wd, MSARegister ws, uint32_t imm5)
void maddr_q_w(MSARegister wd, MSARegister ws, MSARegister wt)
static bool IsBranch(Instr instr)
void aver_s_b(MSARegister wd, MSARegister ws, MSARegister wt)
void lh(Register rd, const MemOperand &rs)
void GenInstrMsaMI10(SecondaryField operation, int32_t s10, Register rs, MSARegister wd)
void dext_(Register rt, Register rs, uint16_t pos, uint16_t size)
static bool IsBeqzc(Instr instr)
void bsel_v(MSARegister wd, MSARegister ws, MSARegister wt)
static int RelocateInternalReference(RelocInfo::Mode rmode, Address pc, intptr_t pc_delta, WritableJitAllocation *jit_allocation=nullptr)
void ave_s_b(MSARegister wd, MSARegister ws, MSARegister wt)
void addvi_d(MSARegister wd, MSARegister ws, uint32_t imm5)
void srav(Register rt, Register rd, Register rs)
void fmin_a_d(MSARegister wd, MSARegister ws, MSARegister wt)
void bgtzalc(Register rt, Label *L)
void subs_u_w(MSARegister wd, MSARegister ws, MSARegister wt)
int pc_offset_for_safepoint()
void srlr_d(MSARegister wd, MSARegister ws, MSARegister wt)
void align(Register rd, Register rs, Register rt, uint8_t bp)
void fsor_d(MSARegister wd, MSARegister ws, MSARegister wt)
void insve_w(MSARegister wd, uint32_t n, MSARegister ws)
void fceq_w(MSARegister wd, MSARegister ws, MSARegister wt)
void ilvod_w(MSARegister wd, MSARegister ws, MSARegister wt)
void subsus_s_h(MSARegister wd, MSARegister ws, MSARegister wt)
void dinsu_(Register rt, Register rs, uint16_t pos, uint16_t size)
void bz_b(MSARegister wt, Label *L)
void max_s(FPURegister fd, FPURegister fs, FPURegister ft)
void ilvl_d(MSARegister wd, MSARegister ws, MSARegister wt)
void clt_u_d(MSARegister wd, MSARegister ws, MSARegister wt)
void muh(Register rd, Register rs, Register rt)
void dpadd_u_h(MSARegister wd, MSARegister ws, MSARegister wt)
void subs_s_h(MSARegister wd, MSARegister ws, MSARegister wt)
void BlockTrampolinePoolFor(int instructions)
void sldi_h(MSARegister wd, MSARegister ws, uint32_t n)
void and_(Register rd, Register rs, Register rt)
void addv_d(MSARegister wd, MSARegister ws, MSARegister wt)
void GenInstrRegister(Opcode opcode, Register rs, Register rt, uint16_t msb, uint16_t lsb, SecondaryField func)
static int16_t GetLwOffset(Instr instr)
void pcnt_w(MSARegister wd, MSARegister ws)
void mulr_q_h(MSARegister wd, MSARegister ws, MSARegister wt)
void max_s_b(MSARegister wd, MSARegister ws, MSARegister wt)
void sat_s_d(MSARegister wd, MSARegister ws, uint32_t m)
void dpsub_u_w(MSARegister wd, MSARegister ws, MSARegister wt)
void GenInstrImmediate(Opcode opcode, Register rs, Register rt, int32_t j, CompactBranchType is_compact_branch=CompactBranchType::NO)
void subs_u_d(MSARegister wd, MSARegister ws, MSARegister wt)
void sdl(Register rd, const MemOperand &rs)
void srar_w(MSARegister wd, MSARegister ws, MSARegister wt)
void srari_h(MSARegister wd, MSARegister ws, uint32_t m)
void GetCode(Isolate *isolate, CodeDesc *desc)
void binsri_w(MSARegister wd, MSARegister ws, uint32_t m)
void ldc1(FPURegister fd, const MemOperand &src)
void bltzal(Register rs, int16_t offset)
static Instr SetAddImmediateOffset(Instr instr, int16_t offset)
void st_h(MSARegister wd, const MemOperand &rs)
void ceq_d(MSARegister wd, MSARegister ws, MSARegister wt)
void dotp_u_d(MSARegister wd, MSARegister ws, MSARegister wt)
void subs_u_h(MSARegister wd, MSARegister ws, MSARegister wt)
void srai_h(MSARegister wd, MSARegister ws, uint32_t m)
void msub_q_h(MSARegister wd, MSARegister ws, MSARegister wt)
void ext_(Register rt, Register rs, uint16_t pos, uint16_t size)
void msub_s(FPURegister fd, FPURegister fr, FPURegister fs, FPURegister ft)
void max_u_w(MSARegister wd, MSARegister ws, MSARegister wt)
void mult(Register rs, Register rt)
void sldi_w(MSARegister wd, MSARegister ws, uint32_t n)
void ctcmsa(MSAControlRegister cd, Register rs)
void sll_b(MSARegister wd, MSARegister ws, MSARegister wt)
static uint32_t GetSaField(Instr instr)
void binsr_b(MSARegister wd, MSARegister ws, MSARegister wt)
static uint32_t GetRd(Instr instr)
void fmin_w(MSARegister wd, MSARegister ws, MSARegister wt)
void ilvev_b(MSARegister wd, MSARegister ws, MSARegister wt)
void fsqrt_d(MSARegister wd, MSARegister ws)
void add_a_d(MSARegister wd, MSARegister ws, MSARegister wt)
static Instr SetLwOffset(Instr instr, int16_t offset)
void bnz_w(MSARegister wt, Label *L)
bool is_valid_msa_df_m(SecondaryField bit_df, uint32_t m)
void dotp_s_w(MSARegister wd, MSARegister ws, MSARegister wt)
void cfcmsa(Register rd, MSAControlRegister cs)
void dsrlv(Register rd, Register rt, Register rs)
void vshf_w(MSARegister wd, MSARegister ws, MSARegister wt)
void mini_u_d(MSARegister wd, MSARegister ws, uint32_t imm5)
void ave_u_d(MSARegister wd, MSARegister ws, MSARegister wt)
void fmin_a_w(MSARegister wd, MSARegister ws, MSARegister wt)
void clei_u_w(MSARegister wd, MSARegister ws, uint32_t imm5)
void bc1nez(Label *L, FPURegister ft)
void GenInstrRegister(Opcode opcode, SecondaryField fmt, Register rt, FPURegister fs, FPURegister fd, SecondaryField func=nullptrSF)
void fsor_w(MSARegister wd, MSARegister ws, MSARegister wt)
void fsaf_w(MSARegister wd, MSARegister ws, MSARegister wt)
void aver_u_d(MSARegister wd, MSARegister ws, MSARegister wt)
void fsune_d(MSARegister wd, MSARegister ws, MSARegister wt)
static void instr_at_put(Address pc, Instr instr, WritableJitAllocation *jit_allocation=nullptr)
void lwu(Register rd, const MemOperand &rs)
void MaybeEmitOutOfLineConstantPool()
void fsne_d(MSARegister wd, MSARegister ws, MSARegister wt)
void clei_u_b(MSARegister wd, MSARegister ws, uint32_t imm5)
void clei_s_d(MSARegister wd, MSARegister ws, uint32_t imm5)
void dinsm_(Register rt, Register rs, uint16_t pos, uint16_t size)
void bgtzc(Register rt, Label *L)
void beqzc(Register rs, int32_t offset)
void mini_s_h(MSARegister wd, MSARegister ws, uint32_t imm5)
void subv_h(MSARegister wd, MSARegister ws, MSARegister wt)
void bz_v(MSARegister wt, int16_t offset)
void sat_s_b(MSARegister wd, MSARegister ws, uint32_t m)
void bovc(Register rs, Register rt, int16_t offset)
void srl(Register rd, Register rt, uint16_t sa)
void cfc1(Register rt, FPUControlRegister fs)
void min_a_w(MSARegister wd, MSARegister ws, MSARegister wt)
void ftint_s_d(MSARegister wd, MSARegister ws)
void srai_w(MSARegister wd, MSARegister ws, uint32_t m)
void mod(Register rd, Register rs, Register rt)
void ffint_u_d(MSARegister wd, MSARegister ws)
void bne(Register rs, Register rt, Label *L)
void msubf_s(FPURegister fd, FPURegister fs, FPURegister ft)
void vshf_b(MSARegister wd, MSARegister ws, MSARegister wt)
void splati_d(MSARegister wd, MSARegister ws, uint32_t n)
void mod_u_b(MSARegister wd, MSARegister ws, MSARegister wt)
void adds_s_b(MSARegister wd, MSARegister ws, MSARegister wt)
void GenInstrMsaVec(SecondaryField operation, MSARegister wt, MSARegister ws, MSARegister wd)
void maxi_s_h(MSARegister wd, MSARegister ws, uint32_t imm5)
void fmadd_w(MSARegister wd, MSARegister ws, MSARegister wt)
void hsub_u_b(MSARegister wd, MSARegister ws, MSARegister wt)
void asub_s_h(MSARegister wd, MSARegister ws, MSARegister wt)
void fcne_d(MSARegister wd, MSARegister ws, MSARegister wt)
void subsuu_u_h(MSARegister wd, MSARegister ws, MSARegister wt)
void sll(Register rd, Register rt, uint16_t sa, bool coming_from_nop=false)
int32_t branch_offset_helper(Label *L, OffsetSize bits)
void mod_s_d(MSARegister wd, MSARegister ws, MSARegister wt)
void fcle_d(MSARegister wd, MSARegister ws, MSARegister wt)
void fcule_w(MSARegister wd, MSARegister ws, MSARegister wt)
void adds_a_w(MSARegister wd, MSARegister ws, MSARegister wt)
void GenInstrMsaI8(SecondaryField operation, uint32_t imm8, MSARegister ws, MSARegister wd)
void copy_u_w(Register rd, MSARegister ws, uint32_t n)
void recip_d(FPURegister fd, FPURegister fs)
static V8_INLINE Address target_address_at(Address pc, Address constant_pool)
void dsrav(Register rd, Register rt, Register rs)
static Instr instr_at(Address pc)
void clt_s_h(MSARegister wd, MSARegister ws, MSARegister wt)
void hsub_s_h(MSARegister wd, MSARegister ws, MSARegister wt)
void sra_w(MSARegister wd, MSARegister ws, MSARegister wt)
void cvt_d_l(FPURegister fd, FPURegister fs)
void sel_d(FPURegister fd, FPURegister fs, FPURegister ft)
void bneg_w(MSARegister wd, MSARegister ws, MSARegister wt)
void insert_h(MSARegister wd, uint32_t n, Register rs)
void dotp_u_b(MSARegister wd, MSARegister ws, MSARegister wt)
void clei_s_h(MSARegister wd, MSARegister ws, uint32_t imm5)
void mfc1(Register rt, FPURegister fs)
void maxa(SecondaryField fmt, FPURegister fd, FPURegister fs, FPURegister ft)
static bool IsEmittedConstant(Instr instr)
void fmsub_w(MSARegister wd, MSARegister ws, MSARegister wt)
void bz_d(MSARegister wt, Label *L)
void bmnz_v(MSARegister wd, MSARegister ws, MSARegister wt)
void subv_b(MSARegister wd, MSARegister ws, MSARegister wt)
void max_a_w(MSARegister wd, MSARegister ws, MSARegister wt)
void dclz(Register rd, Register rs)
void cvt_s_d(FPURegister fd, FPURegister fs)
void maxi_s_d(MSARegister wd, MSARegister ws, uint32_t imm5)
void ddiv(Register rs, Register rt)
void fsub_d(MSARegister wd, MSARegister ws, MSARegister wt)
void clt_u_w(MSARegister wd, MSARegister ws, MSARegister wt)
void movf_s(FPURegister fd, FPURegister fs, uint16_t cc=0)
void round_l_s(FPURegister fd, FPURegister fs)
void bnz_b(MSARegister wt, int16_t offset)
void ave_u_h(MSARegister wd, MSARegister ws, MSARegister wt)
void clti_u_w(MSARegister wd, MSARegister ws, uint32_t imm5)
void blez(Register rs, int16_t offset)
void srlv(Register rd, Register rt, Register rs)
void maxi_u_d(MSARegister wd, MSARegister ws, uint32_t imm5)
void movt(Register rd, Register rs, uint16_t cc=0)
void round_w_d(FPURegister fd, FPURegister fs)
void pckod_w(MSARegister wd, MSARegister ws, MSARegister wt)
void movt_d(FPURegister fd, FPURegister fs, uint16_t cc=0)
uint64_t jump_address(Label *L)
void flog2_d(MSARegister wd, MSARegister ws)
void fsun_w(MSARegister wd, MSARegister ws, MSARegister wt)
void min_u_w(MSARegister wd, MSARegister ws, MSARegister wt)
void bz_v(MSARegister wt, Label *L)
int32_t get_trampoline_entry(int32_t pos)
static bool IsMov(Instr instr, Register rd, Register rs)
void rsqrt_s(FPURegister fd, FPURegister fs)
void GenInstrMsa2R(SecondaryField operation, SecondaryField df, MSARegister ws, MSARegister wd)
void div_d(FPURegister fd, FPURegister fs, FPURegister ft)
void GenInstrImmediate(Opcode opcode, Register r1, FPURegister r2, int32_t j, CompactBranchType is_compact_branch=CompactBranchType::NO)
void bclri_b(MSARegister wd, MSARegister ws, uint32_t m)
void ilvl_h(MSARegister wd, MSARegister ws, MSARegister wt)
void selnez_s(FPURegister fd, FPURegister fs, FPURegister ft)
void sll_d(MSARegister wd, MSARegister ws, MSARegister wt)
static Register GetRtReg(Instr instr)
void xor_(Register rd, Register rs, Register rt)
void fmax_d(MSARegister wd, MSARegister ws, MSARegister wt)
void or_(Register rd, Register rs, Register rt)
void bgezalc(Register rt, int16_t offset)
void cvt_s_l(FPURegister fd, FPURegister fs)
void cle_u_b(MSARegister wd, MSARegister ws, MSARegister wt)
void cmp_d(FPUCondition cond, FPURegister fd, FPURegister fs, FPURegister ft)
void GenInstrImmediate(Opcode opcode, Register rs, SecondaryField SF, int32_t j, CompactBranchType is_compact_branch=CompactBranchType::NO)
static bool IsSw(Instr instr)
void GetCode(LocalIsolate *isolate, CodeDesc *desc, SafepointTableBuilderBase *safepoint_table_builder, int handler_table_offset)
void srli_w(MSARegister wd, MSARegister ws, uint32_t m)
void beq(Register rs, Register rt, int16_t offset)
void bltuc(Register rs, Register rt, Label *L)
void neg_s(FPURegister fd, FPURegister fs)
void bnz_d(MSARegister wt, Label *L)
void dextu_(Register rt, Register rs, uint16_t pos, uint16_t size)
void ftrunc_u_w(MSARegister wd, MSARegister ws)
void max_a_d(MSARegister wd, MSARegister ws, MSARegister wt)
void div_s_b(MSARegister wd, MSARegister ws, MSARegister wt)
void bnz_v(MSARegister wt, int16_t offset)
void mini_s_b(MSARegister wd, MSARegister ws, uint32_t imm5)
void mod_u_d(MSARegister wd, MSARegister ws, MSARegister wt)
void dpsub_s_h(MSARegister wd, MSARegister ws, MSARegister wt)
void sel(SecondaryField fmt, FPURegister fd, FPURegister fs, FPURegister ft)
void sat_s_h(MSARegister wd, MSARegister ws, uint32_t m)
void aver_u_w(MSARegister wd, MSARegister ws, MSARegister wt)
void ilvr_b(MSARegister wd, MSARegister ws, MSARegister wt)
void ffint_s_d(MSARegister wd, MSARegister ws)
static bool IsCompactBranchSupported()
void fcune_d(MSARegister wd, MSARegister ws, MSARegister wt)
void fcueq_d(MSARegister wd, MSARegister ws, MSARegister wt)
void bovc(Register rs, Register rt, Label *L)
void ffqr_d(MSARegister wd, MSARegister ws)
void dmtc1(Register rt, FPURegister fs)
static bool IsBeqc(Instr instr)
void div_s_h(MSARegister wd, MSARegister ws, MSARegister wt)
void min_s(FPURegister fd, FPURegister fs, FPURegister ft)
void srl_d(MSARegister wd, MSARegister ws, MSARegister wt)
void copy_s_d(Register rd, MSARegister ws, uint32_t n)
void bnezc(Register rt, int32_t offset)
void sld_w(MSARegister wd, MSARegister ws, Register rt)
void aver_s_h(MSARegister wd, MSARegister ws, MSARegister wt)
void min_a_d(MSARegister wd, MSARegister ws, MSARegister wt)
void nlzc_h(MSARegister wd, MSARegister ws)
void tne(Register rs, Register rt, uint16_t code)
void add_a_h(MSARegister wd, MSARegister ws, MSARegister wt)
void lhu(Register rd, const MemOperand &rs)
void EndBlockGrowBuffer()
void mini_u_b(MSARegister wd, MSARegister ws, uint32_t imm5)
void fcun_d(MSARegister wd, MSARegister ws, MSARegister wt)
void min_s_h(MSARegister wd, MSARegister ws, MSARegister wt)
void bltzc(Register rt, Label *L)
void bgtz(Register rs, int16_t offset)
void subv_w(MSARegister wd, MSARegister ws, MSARegister wt)
void cle_u_h(MSARegister wd, MSARegister ws, MSARegister wt)
void ld_w(MSARegister wd, const MemOperand &rs)
void ldpc(Register rs, int32_t offset18)
void ftrunc_u_d(MSARegister wd, MSARegister ws)
void adds_u_w(MSARegister wd, MSARegister ws, MSARegister wt)
void bgec(Register rs, Register rt, int16_t offset)
void bltc(Register rs, Register rt, Label *L)
void fsun_d(MSARegister wd, MSARegister ws, MSARegister wt)
void splat_b(MSARegister wd, MSARegister ws, Register rt)
void tge(Register rs, Register rt, uint16_t code)
void sw(Register rd, const MemOperand &rs)
void max_u_b(MSARegister wd, MSARegister ws, MSARegister wt)
void maxa_d(FPURegister fd, FPURegister fs, FPURegister ft)
void frsqrt_d(MSARegister wd, MSARegister ws)
void hadd_s_w(MSARegister wd, MSARegister ws, MSARegister wt)
void maddv_d(MSARegister wd, MSARegister ws, MSARegister wt)
void nloc_w(MSARegister wd, MSARegister ws)
void ftint_u_w(MSARegister wd, MSARegister ws)
void drotrv(Register rd, Register rt, Register rs)
void insert_w(MSARegister wd, uint32_t n, Register rs)
void srli_h(MSARegister wd, MSARegister ws, uint32_t m)
void blezalc(Register rt, int16_t offset)
void ldl(Register rd, const MemOperand &rs)
void adds_s_d(MSARegister wd, MSARegister ws, MSARegister wt)
void muhu(Register rd, Register rs, Register rt)
void GenInstrMsaI10(SecondaryField operation, SecondaryField df, int32_t imm10, MSARegister wd)
void ftq_w(MSARegister wd, MSARegister ws, MSARegister wt)
bool is_near_pre_r6(Label *L)
void maxi_u_w(MSARegister wd, MSARegister ws, uint32_t imm5)
void hsub_s_d(MSARegister wd, MSARegister ws, MSARegister wt)
static bool IsNal(Instr instr)
void mina(SecondaryField fmt, FPURegister fd, FPURegister fs, FPURegister ft)
void ceq_h(MSARegister wd, MSARegister ws, MSARegister wt)
void GenInstrImmediate(Opcode opcode, Register base, Register rt, int32_t offset9, int bit6, SecondaryField func)
void srar_d(MSARegister wd, MSARegister ws, MSARegister wt)
void fcor_w(MSARegister wd, MSARegister ws, MSARegister wt)
void movn(Register rd, Register rs, Register rt)
static uint32_t GetImmediate16(Instr instr)
void dpadd_s_w(MSARegister wd, MSARegister ws, MSARegister wt)
void bclr_h(MSARegister wd, MSARegister ws, MSARegister wt)
void mthc1(Register rt, FPURegister fs)
void msubv_h(MSARegister wd, MSARegister ws, MSARegister wt)
void cle_u_w(MSARegister wd, MSARegister ws, MSARegister wt)
void adds_a_d(MSARegister wd, MSARegister ws, MSARegister wt)
void c_d(FPUCondition cond, FPURegister ft, FPURegister fs, uint16_t cc=0)
static void JumpLabelToJumpRegister(Address pc)
void nloc_b(MSARegister wd, MSARegister ws)
void cle_s_w(MSARegister wd, MSARegister ws, MSARegister wt)
void sld_b(MSARegister wd, MSARegister ws, Register rt)
void sat_s_w(MSARegister wd, MSARegister ws, uint32_t m)
void binsl_b(MSARegister wd, MSARegister ws, MSARegister wt)
void ilvev_d(MSARegister wd, MSARegister ws, MSARegister wt)
void asub_u_b(MSARegister wd, MSARegister ws, MSARegister wt)
void sldi_d(MSARegister wd, MSARegister ws, uint32_t n)
void movt_s(FPURegister fd, FPURegister fs, uint16_t cc=0)
void nlzc_d(MSARegister wd, MSARegister ws)
void hsub_u_w(MSARegister wd, MSARegister ws, MSARegister wt)
void move_v(MSARegister wd, MSARegister ws)
void cvt_w_s(FPURegister fd, FPURegister fs)
int BranchOffset(Instr instr)
void ilvod_h(MSARegister wd, MSARegister ws, MSARegister wt)
void shf_h(MSARegister wd, MSARegister ws, uint32_t imm8)
void sqrt_d(FPURegister fd, FPURegister fs)
void ceil_l_d(FPURegister fd, FPURegister fs)
int32_t branch_offset(Label *L)
void aui(Register rt, Register rs, int32_t j)
void dsbh(Register rd, Register rt)
void nori_b(MSARegister wd, MSARegister ws, uint32_t imm8)
void sat_u_h(MSARegister wd, MSARegister ws, uint32_t m)
void hadd_u_h(MSARegister wd, MSARegister ws, MSARegister wt)
void seleqz_s(FPURegister fd, FPURegister fs, FPURegister ft)
void beq(Register rs, Register rt, Label *L)
void slli_d(MSARegister wd, MSARegister ws, uint32_t m)
void nlzc_b(MSARegister wd, MSARegister ws)
void bnezc(Register rt, Label *L)
void srlr_b(MSARegister wd, MSARegister ws, MSARegister wt)
void seleqz(Register rd, Register rs, Register rt)
void nloc_d(MSARegister wd, MSARegister ws)
void binsr_d(MSARegister wd, MSARegister ws, MSARegister wt)
void bseti_d(MSARegister wd, MSARegister ws, uint32_t m)
void fexp2_d(MSARegister wd, MSARegister ws, MSARegister wt)
static bool IsAndImmediate(Instr instr)
void adds_u_b(MSARegister wd, MSARegister ws, MSARegister wt)
void ClearCompactBranchState()
void clei_u_d(MSARegister wd, MSARegister ws, uint32_t imm5)
void dahi(Register rs, int32_t j)
void sra_d(MSARegister wd, MSARegister ws, MSARegister wt)
void abs_s(FPURegister fd, FPURegister fs)
void andi_b(MSARegister wd, MSARegister ws, uint32_t imm8)
void bnegi_d(MSARegister wd, MSARegister ws, uint32_t m)
void dmulu(Register rd, Register rs, Register rt)
void daddu(Register rd, Register rs, Register rt)
void mina_d(FPURegister fd, FPURegister fs, FPURegister ft)
void binsr_w(MSARegister wd, MSARegister ws, MSARegister wt)
void bnegi_b(MSARegister wd, MSARegister ws, uint32_t m)
void lwc1(FPURegister fd, const MemOperand &src)
void fdiv_w(MSARegister wd, MSARegister ws, MSARegister wt)
void bz_b(MSARegister wt, int16_t offset)
void GenInstrImmediate(Opcode opcode, Register rs, int32_t offset21, CompactBranchType is_compact_branch=CompactBranchType::NO)
Assembler(const AssemblerOptions &, std::unique_ptr< AssemblerBuffer >={})
void adds_s_w(MSARegister wd, MSARegister ws, MSARegister wt)
void bneg_d(MSARegister wd, MSARegister ws, MSARegister wt)
void sh(Register rd, const MemOperand &rs)
void fclass_d(MSARegister wd, MSARegister ws)
void instr_at_put(int pos, Instr instr, WritableJitAllocation *jit_allocation=nullptr)
void srl_h(MSARegister wd, MSARegister ws, MSARegister wt)
void min(SecondaryField fmt, FPURegister fd, FPURegister fs, FPURegister ft)
int64_t buffer_space() const
void multu(Register rs, Register rt)
void clti_s_d(MSARegister wd, MSARegister ws, uint32_t imm5)
void copy_s_w(Register rd, MSARegister ws, uint32_t n)
void lwpc(Register rs, int32_t offset19)
void bitswap(Register rd, Register rt)
void bnz_w(MSARegister wt, int16_t offset)
void subsus_u_h(MSARegister wd, MSARegister ws, MSARegister wt)
void mulv_h(MSARegister wd, MSARegister ws, MSARegister wt)
void ldi_w(MSARegister wd, int32_t imm10)
void fsult_w(MSARegister wd, MSARegister ws, MSARegister wt)
void fcor_d(MSARegister wd, MSARegister ws, MSARegister wt)
void adds_a_h(MSARegister wd, MSARegister ws, MSARegister wt)
void bltzalc(Register rt, int16_t offset)
void ddivu(Register rd, Register rs, Register rt)
void fill_h(MSARegister wd, Register rs)
void ilvr_d(MSARegister wd, MSARegister ws, MSARegister wt)
void subsus_u_b(MSARegister wd, MSARegister ws, MSARegister wt)
void wsbh(Register rd, Register rt)
void pckev_d(MSARegister wd, MSARegister ws, MSARegister wt)
void sldi_b(MSARegister wd, MSARegister ws, uint32_t n)
void movn_s(FPURegister fd, FPURegister fs, Register rt)
void divu(Register rs, Register rt)
void clz(Register rd, Register rs)
void fsule_d(MSARegister wd, MSARegister ws, MSARegister wt)
void blezc(Register rt, Label *L)
void max_s_w(MSARegister wd, MSARegister ws, MSARegister wt)
void bnz_h(MSARegister wt, int16_t offset)
void dsllv(Register rd, Register rt, Register rs)
void dins_(Register rt, Register rs, uint16_t pos, uint16_t size)
void max_s_d(MSARegister wd, MSARegister ws, MSARegister wt)
void fclt_w(MSARegister wd, MSARegister ws, MSARegister wt)
void mini_s_w(MSARegister wd, MSARegister ws, uint32_t imm5)
void swr(Register rd, const MemOperand &rs)
void dpsub_u_d(MSARegister wd, MSARegister ws, MSARegister wt)
void drotr32(Register rd, Register rt, uint16_t sa)
void nor(Register rd, Register rs, Register rt)
static bool IsBeq(Instr instr)
static bool IsLwRegFpNegOffset(Instr instr)
static bool IsLwRegFpOffset(Instr instr)
void sllv(Register rd, Register rt, Register rs)
void msub_q_w(MSARegister wd, MSARegister ws, MSARegister wt)
void CheckTrampolinePoolQuick(int extra_instructions=0)
int SizeOfCodeGeneratedSince(Label *label)
static bool IsSwRegFpNegOffset(Instr instr)
void movf_d(FPURegister fd, FPURegister fs, uint16_t cc=0)
void mod_s_w(MSARegister wd, MSARegister ws, MSARegister wt)
void bclri_d(MSARegister wd, MSARegister ws, uint32_t m)
void flog2_w(MSARegister wd, MSARegister ws)
void ftint_s_w(MSARegister wd, MSARegister ws)
void bgtzc(Register rt, int16_t offset)
void srl_b(MSARegister wd, MSARegister ws, MSARegister wt)
void ceil_w_d(FPURegister fd, FPURegister fs)
static bool IsJal(Instr instr)
void bmzi_b(MSARegister wd, MSARegister ws, uint32_t imm8)
void div_s(FPURegister fd, FPURegister fs, FPURegister ft)
void bc1f(Label *L, uint16_t cc=0)
void bz_h(MSARegister wt, Label *L)
void pckev_h(MSARegister wd, MSARegister ws, MSARegister wt)
void dsll(Register rd, Register rt, uint16_t sa)
void aluipc(Register rs, int16_t imm16)
void splat_h(MSARegister wd, MSARegister ws, Register rt)
void nlzc_w(MSARegister wd, MSARegister ws)
int32_t branch_offset21(Label *L)
void fexdo_h(MSARegister wd, MSARegister ws, MSARegister wt)
void subsus_u_w(MSARegister wd, MSARegister ws, MSARegister wt)
void RecordDeoptReason(DeoptimizeReason reason, uint32_t node_id, SourcePosition position, int id)
void subsuu_u_b(MSARegister wd, MSARegister ws, MSARegister wt)
void BlockTrampolinePoolBefore(int pc_offset)
void bz_w(MSARegister wt, Label *L)
void dsll32(Register rt, Register rd, uint16_t sa)
void mul_d(FPURegister fd, FPURegister fs, FPURegister ft)
void dmfc1(Register rt, FPURegister fs)
static bool IsNop(Instr instr, unsigned int type)
void clei_u_h(MSARegister wd, MSARegister ws, uint32_t imm5)
void bgeuc(Register rs, Register rt, Label *L)
void msubr_q_w(MSARegister wd, MSARegister ws, MSARegister wt)
void sub_d(FPURegister fd, FPURegister fs, FPURegister ft)
void sqrt_s(FPURegister fd, FPURegister fs)
void or_v(MSARegister wd, MSARegister ws, MSARegister wt)
void ld_b(MSARegister wd, const MemOperand &rs)
void srlr_w(MSARegister wd, MSARegister ws, MSARegister wt)
void sra(Register rt, Register rd, uint16_t sa)
void pckod_d(MSARegister wd, MSARegister ws, MSARegister wt)
void floor_w_d(FPURegister fd, FPURegister fs)
void dpadd_s_b(MSARegister wd, MSARegister ws, MSARegister wt)
void subvi_d(MSARegister wd, MSARegister ws, uint32_t imm5)
void bgtzalc(Register rt, int16_t offset)
void sra_b(MSARegister wd, MSARegister ws, MSARegister wt)
void mini_s_d(MSARegister wd, MSARegister ws, uint32_t imm5)
void fclt_d(MSARegister wd, MSARegister ws, MSARegister wt)
void drotr(Register rd, Register rt, uint16_t sa)
void subu(Register rd, Register rs, Register rt)
void asub_u_w(MSARegister wd, MSARegister ws, MSARegister wt)
void div_u_b(MSARegister wd, MSARegister ws, MSARegister wt)
void sat_u_w(MSARegister wd, MSARegister ws, uint32_t m)
void subv_d(MSARegister wd, MSARegister ws, MSARegister wt)
int target_at(int pos, bool is_internal)
void bgezc(Register rt, int16_t offset)
void seh(Register rd, Register rt)
void msubv_d(MSARegister wd, MSARegister ws, MSARegister wt)
void vshf_h(MSARegister wd, MSARegister ws, MSARegister wt)
void GenInstrRegister(Opcode opcode, SecondaryField fmt, FPURegister ft, FPURegister fs, FPURegister fd, SecondaryField func=nullptrSF)
void bseti_b(MSARegister wd, MSARegister ws, uint32_t m)
void xori_b(MSARegister wd, MSARegister ws, uint32_t imm8)
void cle_s_d(MSARegister wd, MSARegister ws, MSARegister wt)
void bgezall(Register rs, int16_t offset)
EnsureSpace(Assembler *assembler)
V8_EXPORT_PRIVATE Address address() const
LoadStoreLaneParams(MachineRepresentation rep, uint8_t laneidx)
LoadStoreLaneParams(uint8_t laneidx, MSASize sz, int lanes)
bool OffsetIsInt16Encodable() const
MemOperand(Register rn, int32_t offset=0)
V8_INLINE Operand(Tagged< Smi > value)
RelocInfo::Mode rmode() const
V8_INLINE Operand(const ExternalReference &f)
union v8::internal::Operand::Value value_
Operand(Handle< HeapObject > handle)
V8_INLINE Operand(int64_t immediate, RelocInfo::Mode rmode=RelocInfo::NO_INFO)
HeapNumberRequest heap_number_request() const
bool IsHeapNumberRequest() const
V8_INLINE bool is_reg() const
bool is_heap_number_request_
static Operand EmbeddedNumber(double number)
int32_t immediate() const
V8_INLINE Operand(Register rm)
constexpr bool is_valid() const
UseScratchRegisterScope(Assembler *assembler)
void Exclude(const RegList &list)
~UseScratchRegisterScope()
void Exclude(const Register ®1, const Register ®2=no_reg)
bool hasAvailable() const
void Include(const Register ®1, const Register ®2=no_reg)
void Include(const RegList &list)
static const ArchVariants kArchVariant
const v8::base::TimeTicks end_
too high values may cause the compiler to set high thresholds for inlining to as much as possible avoid inlined allocation of objects that cannot escape trace load stores from virtual maglev objects use TurboFan fast string builder analyze liveness of environment slots and zap dead values trace TurboFan load elimination emit data about basic block usage in builtins to this enable builtin reordering when run mksnapshot flag for emit warnings when applying builtin profile data verify register allocation in TurboFan randomly schedule instructions to stress dependency tracking enable store store elimination in TurboFan rewrite far to near simulate GC compiler thread race related to allow float parameters to be passed in simulator mode JS Wasm Run additional turbo_optimize_inlined_js_wasm_wrappers enable experimental feedback collection in generic lowering enable Turboshaft s WasmLoadElimination enable Turboshaft s low level load elimination for JS enable Turboshaft s escape analysis for string concatenation use enable Turbolev features that we want to ship in the not too far future trace individual Turboshaft reduction steps trace intermediate Turboshaft reduction steps invocation count threshold for early optimization Enables optimizations which favor memory size over execution speed Enables sampling allocation profiler with X as a sample interval min size of a semi the new space consists of two semi spaces max size of the Collect garbage after Collect garbage after keeps maps alive for< n > old space garbage collections print one detailed trace line in allocation gc speed threshold for starting incremental marking via a task in percent of available threshold for starting incremental marking immediately in percent of available Use a single schedule for determining a marking schedule between JS and C objects schedules the minor GC task with kUserVisible priority max worker number of concurrent for NumberOfWorkerThreads start background threads that allocate memory concurrent_array_buffer_sweeping use parallel threads to clear weak refs in the atomic pause trace progress of the incremental marking trace object counts and memory usage * MB
constexpr Register no_reg
V8_INLINE IndirectHandle< T > handle(Tagged< T > object, Isolate *isolate)
constexpr uint8_t kPcLoadDelta
std::variant< Zone *, AccountingAllocator * > MaybeAssemblerZone
constexpr uint64_t kSmiShiftMask
constexpr uint8_t kInstrSize
#define DCHECK_IMPLIES(v1, v2)
#define DCHECK(condition)
#define DCHECK_LT(v1, v2)
#define DCHECK_EQ(v1, v2)
#define V8_EXPORT_PRIVATE
HeapNumberRequest heap_number_request