5#ifndef RUNTIME_VM_COMPILER_ASSEMBLER_ASSEMBLER_RISCV_H_
6#define RUNTIME_VM_COMPILER_ASSEMBLER_ASSEMBLER_RISCV_H_
8#if defined(DART_PRECOMPILED_RUNTIME)
9#error "AOT runtime should not use compiler sources (including header files)"
12#ifndef RUNTIME_VM_COMPILER_ASSEMBLER_ASSEMBLER_H_
13#error Do not include assembler_riscv.h directly; use assembler.h instead.
30class FlowGraphCompiler;
45 intptr_t
offset()
const {
return offset_; }
52class FieldAddress :
public Address {
111 bltu(rs2, rs1, l,
d);
114 bgeu(rs2, rs1, l,
d);
209 void subiw(
Register rd,
Register rs1, intptr_t imm) { addiw(rd, rs1, -imm); }
257 std::memory_order order = std::memory_order_relaxed);
261 std::memory_order order = std::memory_order_relaxed);
265 std::memory_order order = std::memory_order_relaxed);
269 std::memory_order order = std::memory_order_relaxed);
273 std::memory_order order = std::memory_order_relaxed);
277 std::memory_order order = std::memory_order_relaxed);
281 std::memory_order order = std::memory_order_relaxed);
285 std::memory_order order = std::memory_order_relaxed);
289 std::memory_order order = std::memory_order_relaxed);
293 std::memory_order order = std::memory_order_relaxed);
297 std::memory_order order = std::memory_order_relaxed);
303 std::memory_order order = std::memory_order_relaxed);
307 std::memory_order order = std::memory_order_relaxed);
311 std::memory_order order = std::memory_order_relaxed);
315 std::memory_order order = std::memory_order_relaxed);
319 std::memory_order order = std::memory_order_relaxed);
323 std::memory_order order = std::memory_order_relaxed);
327 std::memory_order order = std::memory_order_relaxed);
331 std::memory_order order = std::memory_order_relaxed);
335 std::memory_order order = std::memory_order_relaxed);
339 std::memory_order order = std::memory_order_relaxed);
343 std::memory_order order = std::memory_order_relaxed);
349 std::memory_order order = std::memory_order_relaxed) {
355 std::memory_order order = std::memory_order_relaxed) {
361 std::memory_order order = std::memory_order_relaxed) {
362 lrd(rd,
addr, order);
367 std::memory_order order = std::memory_order_relaxed) {
368 scd(rd, rs2,
addr, order);
373 std::memory_order order = std::memory_order_relaxed) {
374 lrq(rd,
addr, order);
379 std::memory_order order = std::memory_order_relaxed) {
380 scq(rd, rs2,
addr, order);
650 void c_j(
Label* label);
652 void c_jal(
Label* label);
660 void c_li(
Register rd, intptr_t imm);
661 void c_lui(
Register rd, uintptr_t imm);
708 std::memory_order order,
806 void Write16(intptr_t position, uint16_t instruction) {
816 void Write32(intptr_t position, uint32_t instruction) {
865 void Drop(intptr_t stack_elements) {
866 ASSERT(stack_elements >= 0);
867 if (stack_elements > 0) {
1023 const Object& equivalence,
1046 int32_t disp)
override {
1105 srli(rd, rd, shift);
1122 int32_t payload_offset,
1213 LoadObjectHelper(
dst, obj,
false);
1221 LoadObjectHelper(
dst, obj,
true, snapshot_behavior);
1252 if (immediate == 0) {
1282 bool can_be_null =
false)
override;
1300 bool enter_safepoint);
1302 bool exit_safepoint,
1303 bool ignore_unwind_in_progress =
false,
1304 bool set_tag =
true);
1362 intptr_t instance_size,
1369 intptr_t instance_size,
1382 Stop(
"Allocation canary");
1427 intptr_t index_scale);
1431 intptr_t index_scale,
1433 intptr_t index)
const;
1437 intptr_t index_scale,
1442 intptr_t index_scale,
1451 intptr_t index_scale,
1463 Register offset_in_words_as_smi)
override;
1467 int32_t
offset)
override {
1508 bool constant_pool_allowed_;
1510 enum DeferredCompareType {
1517 DeferredCompareType deferred_compare_ = kNone;
1520 intptr_t deferred_imm_ = 0;
1523 void LoadObjectHelper(
1536 DISALLOW_ALLOCATION();
static void done(const char *config, const char *src, const char *srcOptions, const char *name)
static void round(SkPoint *p)
bool equals(SkDrawable *a, SkDrawable *b)
Address(Register base, Register index)=delete
Address(Register base, intptr_t offset)
intptr_t CodeSize() const
void Stop(const char *message)
ObjectPoolBuilder & object_pool_builder()
void Store(intptr_t position, T value)
T Load(intptr_t position)
void PushRegistersInOrder(std::initializer_list< Register > regs)
void StoreDToOffset(FRegister src, Register base, int32_t offset)
void PopRegisterPair(Register r0, Register r1)
void MoveUnboxedDouble(FpuRegister dst, FpuRegister src)
void RestorePoolPointer()
void LoadClassId(Register result, Register object)
void RestoreCodePointer()
void AndImmediate(Register rd, intx_t imm) override
void LoadPoolPointer(Register pp=PP)
void Call(Address target)
bool CanLoadFromObjectPool(const Object &object) const
void CompareClassId(Register object, intptr_t class_id, Register scratch=kNoRegister)
void AddImmediate(Register dest, intx_t imm)
void PushRegisters(const RegisterSet ®isters)
void LoadSFromOffset(SRegister reg, Register base, int32_t offset, Condition cond=AL)
void StoreUnboxedDouble(FpuRegister src, Register base, int32_t offset)
void CompareObject(Register reg, const Object &object)
void MoveUnboxedSimd128(FpuRegister dst, FpuRegister src)
void BranchIfZero(Register rn, Label *label, JumpDistance distance=kFarJump)
void LoadUniqueObject(Register dst, const Object &obj, ObjectPoolBuilderEntry::SnapshotBehavior snapshot_behavior=ObjectPoolBuilderEntry::kSnapshotable)
void LoadObject(Register dst, const Object &obj)
void CombineHashes(Register dst, Register other) override
void MonomorphicCheckedEntryJIT()
void BranchIfSmi(Register reg, Label *label, JumpDistance distance=kFarJump) override
void LoadTaggedClassIdMayBeSmi(Register result, Register object)
void Call(const Code &code)
void RestorePinnedRegisters()
void LoadDFromOffset(DRegister reg, Register base, int32_t offset, Condition cond=AL)
void TransitionNativeToGenerated(Register scratch, bool exit_safepoint, bool ignore_unwind_in_progress=false, bool set_tag=true)
void TsanLoadAcquire(Register addr)
void ComputeElementAddressForIntIndex(Register address, bool is_external, intptr_t cid, intptr_t index_scale, Register array, intptr_t index)
void PushRegisterPair(Register r0, Register r1)
void StoreZero(const Address &address, Register temp=kNoRegister)
Address ElementAddressForRegIndex(bool is_external, intptr_t cid, intptr_t index_scale, bool index_unboxed, Register array, Register index, Register temp)
void LoadIndexedPayload(Register dest, Register base, int32_t payload_offset, Register index, ScaleFactor scale, OperandSize sz=kWordBytes) override
void SetIf(Condition condition, Register rd)
void EmitEntryFrameVerification()
Assembler(ObjectPoolBuilder *object_pool_builder, intptr_t far_branch_level=0)
void EnterFrame(intptr_t frame_size)
void LoadImmediate(Register reg, intx_t imm) override
void LoadFieldFromOffset(Register reg, Register base, int32_t offset, OperandSize type=kFourBytes) override
void CheckAllocationCanary(Register top, Register tmp=TMP)
void j(Condition condition, Label *label, JumpDistance distance=kFarJump)
void SmiUntag(Register reg)
void TryAllocateObject(intptr_t cid, intptr_t instance_size, Label *failure, JumpDistance distance, Register instance_reg, Register temp_reg) override
void Jump(Label *label, JumpDistance distance=kFarJump)
void StoreWordToPoolIndex(Register src, intptr_t index, Register pp=PP)
void LoadDImmediate(FRegister reg, double immd)
void CompareObjectRegisters(Register rn, Register rm)
void LoadFromStack(Register dst, intptr_t depth)
void EnterDartFrame(intptr_t frame_size, bool load_pool_pointer=true)
void EnterOsrFrame(intptr_t extra_size, Register new_pp=kNoRegister)
Address ElementAddressForIntIndex(bool is_external, intptr_t cid, intptr_t index_scale, Register array, intptr_t index) const
void PushRegister(Register r)
void LoadMemoryValue(Register dst, Register base, int32_t offset)
void b(Label *label, Condition cond=AL)
void Store(Register src, const Address &address, OperandSize sz=kWordBytes) override
void set_constant_pool_allowed(bool b)
void StoreDFieldToOffset(FRegister src, Register base, int32_t offset)
Address PrepareLargeOffset(Register base, int32_t offset)
static bool AddressCanHoldConstantIndex(const Object &constant, bool is_external, intptr_t cid, intptr_t index_scale)
void MultiplyBranchOverflow(Register rd, Register rs1, Register rs2, Label *overflow)
void StoreObjectIntoObjectNoBarrier(Register object, const Address &dest, const Object &value, MemoryOrder memory_order=kRelaxedNonAtomic, OperandSize size=kWordBytes) override
void EnterDartFrame(intptr_t frame_size, Register new_pp=kNoRegister)
void EnterFullSafepoint(Register scratch)
void LoadClassById(Register result, Register class_id)
void StoreSToOffset(FRegister src, Register base, int32_t offset)
void PushValueAtOffset(Register base, int32_t offset)
void LoadIsolate(Register dst)
void LoadAcquire(Register dst, const Address &address, OperandSize size=kWordBytes) override
void LsrImmediate(Register rd, int32_t shift) override
void SetReturnAddress(Register value)
void AddShifted(Register dest, Register base, Register index, intx_t shift)
void GenerateUnRelocatedPcRelativeCall(intptr_t offset_into_target=0)
void XorImmediate(Register rd, Register rn, intx_t imm, OperandSize sz=kWordBytes)
void LoadSFromOffset(FRegister dest, Register base, int32_t offset)
void LoadInt32FromBoxOrSmi(Register result, Register value) override
void BranchIf(Condition condition, Label *label, JumpDistance distance=kFarJump)
void PushObject(const Object &object)
void ComputeElementAddressForRegIndex(Register address, bool is_external, intptr_t cid, intptr_t index_scale, bool index_unboxed, Register array, Register index)
void AndRegisters(Register dst, Register src1, Register src2=kNoRegister) override
void PushImmediate(int64_t immediate)
void LoadDFromOffset(FRegister dest, Register base, int32_t offset)
void CompareWithMemoryValue(Register value, Address address, OperandSize size=kWordBytes) override
void LoadWordFromPoolIndex(Register dst, intptr_t index, Register pp=PP)
void LoadUnboxedSimd128(FpuRegister dst, Register base, int32_t offset)
void StoreMemoryValue(Register src, Register base, int32_t offset)
void LoadSFieldFromOffset(FRegister dest, Register base, int32_t offset)
void TransitionGeneratedToNative(Register destination_address, Register new_exit_frame, Register new_exit_through_ffi, bool enter_safepoint)
void AddImmediate(Register dest, Register rn, intx_t imm, OperandSize sz=kWordBytes)
void StoreToStack(Register src, intptr_t depth)
void Call(Register target)
void AddScaled(Register dest, Register base, Register index, ScaleFactor scale, int32_t disp) override
void LoadStaticFieldAddress(Register address, Register field, Register scratch, bool is_shared)
void SubRegisters(Register dest, Register src)
void PopRegisters(const RegisterSet ®isters)
void StoreInternalPointer(Register object, const Address &dest, Register value)
void MulImmediate(Register reg, int32_t imm, OperandSize width=kFourBytes) override
void AddRegisters(Register dest, Register src)
void MulImmediate(Register dest, intx_t imm, OperandSize width=kWordBytes) override
void Bind(Label *label) override
void ReserveAlignedFrameSpace(intptr_t frame_space)
static intptr_t EntryPointToPcMarkerOffset()
void MonomorphicCheckedEntryAOT()
void RangeCheck(Register value, Register temp, intptr_t low, intptr_t high, RangeCheckCondition condition, Label *target) override
void Load(Register dest, const Address &address, OperandSize sz=kWordBytes) override
void AndImmediate(Register rd, Register rn, intx_t imm, OperandSize sz=kWordBytes)
bool constant_pool_allowed() const
void PopRegister(Register r)
void AddImmediateBranchOverflow(Register rd, Register rs1, intx_t imm, Label *overflow)
void LslRegister(Register dst, Register shift) override
void add(Register rd, Register rn, Operand o, Condition cond=AL)
void Call(Address target, Condition cond=AL)
void CallCFunction(Register target)
void StoreSToOffset(SRegister reg, Register base, int32_t offset, Condition cond=AL)
void WriteAllocationCanary(Register top)
void CallRuntime(const RuntimeEntry &entry, intptr_t argument_count)
void ExtractInstanceSizeFromTags(Register result, Register tags)
void LoadObject(Register rd, const Object &object, Condition cond=AL)
void CompareRegisters(Register rn, Register rm)
void ArrayStoreBarrier(Register object, Register slot, Register value, CanBeSmi can_value_be_smi, Register scratch) override
void CompareToStack(Register src, intptr_t depth)
void LoadImmediate(Register rd, Immediate value, Condition cond=AL)
void AndImmediate(Register rd, Register rs, int32_t imm, Condition cond=AL)
void LoadFromOffset(Register reg, Register base, int32_t offset, OperandSize type=kFourBytes) override
void PushNativeCalleeSavedRegisters()
void Jump(const Address &address)
void ExtendValue(Register rd, Register rn, OperandSize sz) override
void StoreBarrier(Register object, Register value, CanBeSmi can_value_be_smi, Register scratch) override
void MaybeTraceAllocation(intptr_t cid, Label *trace, Register temp_reg, JumpDistance distance=JumpDistance::kFarJump)
void TestImmediate(Register rn, intx_t imm, OperandSize sz=kWordBytes)
static bool IsSafeSmi(const Object &object)
void and_(Register rd, Register rn, Operand o, Condition cond=AL)
static int32_t HeapDataOffset(bool is_external, intptr_t cid)
void Drop(intptr_t stack_elements)
void StoreUnboxedSimd128(FpuRegister src, Register base, int32_t offset)
void EnterCFrame(intptr_t frame_space)
void OrImmediate(Register rd, Register rn, intx_t imm, OperandSize sz=kWordBytes)
void VerifyStoreNeedsNoWriteBarrier(Register object, Register value) override
void MulImmediate(Register dest, Register rn, intx_t imm, OperandSize width=kWordBytes)
void CompareWords(Register reg1, Register reg2, intptr_t offset, Register count, Register temp, Label *equals) override
void AddBranchOverflow(Register rd, Register rs1, Register rs2, Label *overflow)
Address PrepareAtomicOffset(Register base, int32_t offset)
void BranchIfNotSmi(Register reg, Label *label, JumpDistance distance=kFarJump)
void GenerateUnRelocatedPcRelativeTailCall(intptr_t offset_into_target=0)
void LoadInt64FromBoxOrSmi(Register result, Register value) override
void CallCFunction(Address target)
static bool IsSafe(const Object &object)
void BranchIfBit(Register rn, intptr_t bit_number, Condition condition, Label *label, JumpDistance distance=kFarJump)
void SubtractBranchOverflow(Register rd, Register rs1, Register rs2, Label *overflow)
void Jump(Register target)
void LoadClassIdMayBeSmi(Register result, Register object)
void JumpAndLinkPatchable(const Code &code, CodeEntryKind entry_kind=CodeEntryKind::kNormal, ObjectPoolBuilderEntry::SnapshotBehavior snapshot_behavior=ObjectPoolBuilderEntry::kSnapshotable)
void ExtendAndSmiTagValue(Register rd, Register rn, OperandSize sz=kWordBytes) override
void JumpAndLinkWithEquivalence(const Code &code, const Object &equivalence, CodeEntryKind entry_kind=CodeEntryKind::kNormal)
void OrImmediate(Register rd, intx_t imm)
void LoadUnboxedDouble(FpuRegister dst, Register base, int32_t offset)
void CountLeadingZeroes(Register rd, Register rs)
void LoadIsolateGroup(Register dst)
void LoadFieldAddressForRegOffset(Register address, Register instance, Register offset_in_words_as_smi) override
void MultiplyImmediateBranchOverflow(Register rd, Register rs1, intx_t imm, Label *overflow)
void PopNativeCalleeSavedRegisters()
void BranchOnMonomorphicCheckedEntryJIT(Label *label)
void Store(Register reg, const Address &address, OperandSize type, Condition cond)
void StoreSFieldToOffset(FRegister src, Register base, int32_t offset)
void SmiUntag(Register reg, Condition cond=AL)
void MoveRegister(Register rd, Register rm, Condition cond)
void CompareImmediate(Register rn, intx_t imm, OperandSize sz=kWordBytes) override
void Breakpoint() override
void TsanStoreRelease(Register addr)
void sub(Register rd, Register rn, Operand o, Condition cond=AL)
void LoadFieldAddressForOffset(Register address, Register instance, int32_t offset) override
void LoadDFieldFromOffset(FRegister dest, Register base, int32_t offset)
void TryAllocateArray(intptr_t cid, intptr_t instance_size, Label *failure, Register instance, Register end_address, Register temp1, Register temp2)
void TestRegisters(Register rn, Register rm)
void StoreToOffset(Register reg, Register base, int32_t offset, OperandSize type=kFourBytes) override
void ExtractClassIdFromTags(Register result, Register tags)
void LeaveDartFrame(intptr_t fp_sp_dist)
void MaybeTraceAllocation(Register cid, Label *trace, Register temp_reg, JumpDistance distance=JumpDistance::kFarJump)
void JumpAndLink(const Code &code, ObjectPoolBuilderEntry::Patchability patchable=ObjectPoolBuilderEntry::kNotPatchable, CodeEntryKind entry_kind=CodeEntryKind::kNormal, ObjectPoolBuilderEntry::SnapshotBehavior snapshot_behavior=ObjectPoolBuilderEntry::kSnapshotable)
void FinalizeHashForSize(intptr_t bit_size, Register dst, Register scratch=TMP) override
void SmiUntag(Register dst, Register src)
void EnsureHasClassIdInDEBUG(intptr_t cid, Register src, Register scratch, bool can_be_null=false) override
void LslImmediate(Register rd, int32_t shift)
void SmiTag(Register dst, Register src)
void LoadQImmediate(FRegister reg, simd128_value_t immq)
void SubtractImmediateBranchOverflow(Register rd, Register rs1, intx_t imm, Label *overflow)
void StoreDToOffset(DRegister reg, Register base, int32_t offset, Condition cond=AL)
void CheckFpSpDist(intptr_t fp_sp_dist)
void AddImmediate(Register rd, int32_t value, Condition cond=AL)
void LoadSImmediate(FRegister reg, float imms)
void ExitFullSafepoint(Register scratch, bool ignore_unwind_in_progress)
void LoadNativeEntry(Register dst, const ExternalLabel *label, ObjectPoolBuilderEntry::Patchability patchable)
void CopyMemoryWords(Register src, Register dst, Register size, Register temp)
void StoreRelease(Register src, const Address &address, OperandSize size=kWordBytes) override
static constexpr intptr_t kEntryPointToPcMarkerOffset
void SetupGlobalPoolAndDispatchTable()
void SmiTag(Register reg) override
void ArithmeticShiftRightImmediate(Register reg, intptr_t shift) override
FieldAddress(Register base, Register index)=delete
FieldAddress(Register base, intptr_t offset)
void clmulh(Register rd, Register rs1, Register rs2)
void li(Register rd, intptr_t imm)
void fmvwx(FRegister rd, Register rs1)
void ctzw(Register rd, Register rs)
void csrw(uint32_t csr, Register rs)
void fsw(FRegister rs2, Address addr)
void csrc(uint32_t csr, Register rs)
void div(Register rd, Register rs1, Register rs2)
void scw(Register rd, Register rs2, Address addr, std::memory_order order=std::memory_order_relaxed)
uint32_t Read32(intptr_t position)
void jr(Register rs1, intptr_t offset=0)
intptr_t UpdateCBOffset(intptr_t branch_position, intptr_t new_offset)
void csrci(uint32_t csr, uint32_t imm)
void set_far_branch_level(intptr_t level)
void sh2adduw(Register rd, Register rs1, Register rs2)
void flts(Register rd, FRegister rs1, FRegister rs2)
void fabss(FRegister rd, FRegister rs)
void sh1adduw(Register rd, Register rs1, Register rs2)
void blt(Register rs1, Register rs2, Label *l, JumpDistance d=kFarJump)
void binv(Register rd, Register rs1, Register rs2)
void not_(Register rd, Register rs)
void flw(FRegister rd, Address addr)
void sb(Register rs2, Address addr)
void sgtz(Register rd, Register rs)
void lui(Register rd, intptr_t imm)
void fmsubs(FRegister rd, FRegister rs1, FRegister rs2, FRegister rs3, RoundingMode rounding=RNE)
void fled(Register rd, FRegister rs1, FRegister rs2)
void fsgnjd(FRegister rd, FRegister rs1, FRegister rs2)
void rorw(Register rd, Register rs1, Register rs2)
void clmulr(Register rd, Register rs1, Register rs2)
void csrr(Register rd, uint32_t csr)
void Emit32(uint32_t instruction)
void amoorw(Register rd, Register rs2, Address addr, std::memory_order order=std::memory_order_relaxed)
void roriw(Register rd, Register rs1, intx_t imm)
void fgts(Register rd, FRegister rs1, FRegister rs2)
void bleu(Register rs1, Register rs2, Label *l, JumpDistance d=kFarJump)
void fnmadds(FRegister rd, FRegister rs1, FRegister rs2, FRegister rs3, RoundingMode rounding=RNE)
void sw(Register rs2, Address addr)
void sh3add(Register rd, Register rs1, Register rs2)
void EmitBType(intptr_t imm, Register rs2, Register rs1, Funct3 funct3, Opcode opcode)
void slliuw(Register rd, Register rs1, intx_t imm)
void jalr(Register rd, Register rs1, intptr_t offset=0)
void mul(Register rd, Register rs1, Register rs2)
void EmitRType(Funct7 funct7, Register rs2, Register rs1, Funct3 funct3, Register rd, Opcode opcode)
void fsgnjns(FRegister rd, FRegister rs1, FRegister rs2)
void SimulatorPrintObject(Register rs1)
void fnegs(FRegister rd, FRegister rs)
void bext(Register rd, Register rs1, Register rs2)
void csrsi(uint32_t csr, uint32_t imm)
void EmitRType(Funct7 funct7, FRegister rs2, FRegister rs1, Funct3 funct3, Register rd, Opcode opcode)
void EmitRType(Funct7 funct7, FRegister rs2, Register rs1, Funct3 funct3, FRegister rd, Opcode opcode)
void lb(Register rd, Address addr, std::memory_order order)
void rev8(Register rd, Register rs)
void sltz(Register rd, Register rs)
void sw(Register rs2, Address addr, std::memory_order order)
void amoaddw(Register rd, Register rs2, Address addr, std::memory_order order=std::memory_order_relaxed)
void feqs(Register rd, FRegister rs1, FRegister rs2)
void fmaxs(FRegister rd, FRegister rs1, FRegister rs2)
void csrrc(Register rd, uint32_t csr, Register rs1)
void fnegd(FRegister rd, FRegister rs)
void bclr(Register rd, Register rs1, Register rs2)
void rori(Register rd, Register rs1, intx_t imm)
bool Supports(Extension extension) const
void bne(Register rs1, Register rs2, Label *l, JumpDistance d=kFarJump)
void mulh(Register rd, Register rs1, Register rs2)
void fcvtdwu(FRegister rd, Register rs1, RoundingMode rounding=RNE)
uint16_t Read16(intptr_t position)
void jal(Register rd, Label *label, JumpDistance d=kFarJump)
void jal(Label *label, JumpDistance d=kFarJump)
void Emit16(uint16_t instruction)
void xnor(Register rd, Register rs1, Register rs2)
void bset(Register rd, Register rs1, Register rs2)
void auipc(Register rd, intptr_t imm)
void fnmsubs(FRegister rd, FRegister rs1, FRegister rs2, FRegister rs3, RoundingMode rounding=RNE)
void amomaxw(Register rd, Register rs2, Address addr, std::memory_order order=std::memory_order_relaxed)
void andn(Register rd, Register rs1, Register rs2)
void fcvtwus(Register rd, FRegister rs1, RoundingMode rounding=RNE)
void sltu(Register rd, Register rs1, Register rs2)
void blez(Register rs, Label *label, JumpDistance distance=kFarJump)
void csrs(uint32_t csr, Register rs)
void fcvtdw(FRegister rd, Register rs1, RoundingMode rounding=RNE)
void EmitRType(Funct7 funct7, FRegister rs2, FRegister rs1, RoundingMode round, Register rd, Opcode opcode)
void seqz(Register rd, Register rs)
void fsubd(FRegister rd, FRegister rs1, FRegister rs2, RoundingMode rounding=RNE)
void fged(Register rd, FRegister rs1, FRegister rs2)
void lbu(Register rd, Address addr)
void maxu(Register rd, Register rs1, Register rs2)
intptr_t far_branch_level() const
void feqd(Register rd, FRegister rs1, FRegister rs2)
void lhu(Register rd, Address addr)
void lb(Register rd, Address addr)
bool Supports(ExtensionSet extensions) const
void fnmaddd(FRegister rd, FRegister rs1, FRegister rs2, FRegister rs3, RoundingMode rounding=RNE)
void srl(Register rd, Register rs1, Register rs2)
void mulhsu(Register rd, Register rs1, Register rs2)
void clz(Register rd, Register rs)
void amoxorw(Register rd, Register rs2, Address addr, std::memory_order order=std::memory_order_relaxed)
void bexti(Register rd, Register rs1, intx_t shamt)
void fclassd(Register rd, FRegister rs1)
void amominuw(Register rd, Register rs2, Address addr, std::memory_order order=std::memory_order_relaxed)
void Emit64(uint64_t instruction)
void bseti(Register rd, Register rs1, intx_t shamt)
void fmadds(FRegister rd, FRegister rs1, FRegister rs2, FRegister rs3, RoundingMode rounding=RNE)
void fcvtws(Register rd, FRegister rs1, RoundingMode rounding=RNE)
void mv(Register rd, Register rs)
void csrrci(Register rd, uint32_t csr, uint32_t imm)
void EmitRType(Funct7 funct7, FRegister rs2, Register rs1, RoundingMode round, FRegister rd, Opcode opcode)
void fabsd(FRegister rd, FRegister rs)
void csrrsi(Register rd, uint32_t csr, uint32_t imm)
intptr_t UpdateCJOffset(intptr_t branch_position, intptr_t new_offset)
void jalr_fixed(Register rd, Register rs1, intptr_t offset)
void mulhu(Register rd, Register rs1, Register rs2)
void snez(Register rd, Register rs)
void orcb(Register rd, Register rs)
void bgtz(Register rs, Label *label, JumpDistance distance=kFarJump)
void fsgnjxs(FRegister rd, FRegister rs1, FRegister rs2)
void or_(Register rd, Register rs1, Register rs2)
void jalr(Register rs1, intptr_t offset=0)
void fnmsubd(FRegister rd, FRegister rs1, FRegister rs2, FRegister rs3, RoundingMode rounding=RNE)
void fmsubd(FRegister rd, FRegister rs1, FRegister rs2, FRegister rs3, RoundingMode rounding=RNE)
void fsd(FRegister rs2, Address addr)
void adduw(Register rd, Register rs1, Register rs2)
void fadds(FRegister rd, FRegister rs1, FRegister rs2, RoundingMode rounding=RNE)
void csrrs(Register rd, uint32_t csr, Register rs1)
void ctz(Register rd, Register rs)
void EmitCJump(Label *label, COpcode op)
void sh(Register rs2, Address addr)
void EmitJump(Register rd, Label *label, Opcode op, JumpDistance distance)
void binvi(Register rd, Register rs1, intx_t shamt)
void lw(Register rd, Address addr, std::memory_order order)
void fmind(FRegister rd, FRegister rs1, FRegister rs2)
void bltz(Register rs, Label *label, JumpDistance distance=kFarJump)
void sub(Register rd, Register rs1, Register rs2)
void sltiu(Register rd, Register rs1, intptr_t imm)
void EmitSType(intptr_t imm, FRegister rs2, Register rs1, Funct3 funct3, Opcode opcode)
void fsgnjs(FRegister rd, FRegister rs1, FRegister rs2)
void EmitRType(Funct7 funct7, FRegister rs2, FRegister rs1, Funct3 funct3, FRegister rd, Opcode opcode)
void Write32(intptr_t position, uint32_t instruction)
void EmitRType(Funct5 funct5, std::memory_order order, Register rs2, Register rs1, Funct3 funct3, Register rd, Opcode opcode)
void fsgnjnd(FRegister rd, FRegister rs1, FRegister rs2)
void fcvtsw(FRegister rd, Register rs1, RoundingMode rounding=RNE)
intptr_t UpdateFarOffset(intptr_t branch_position, intptr_t new_offset)
void fcvtwud(Register rd, FRegister rs1, RoundingMode rounding=RNE)
void sll(Register rd, Register rs1, Register rs2)
void minu(Register rd, Register rs1, Register rs2)
void fcvtwd(Register rd, FRegister rs1, RoundingMode rounding=RNE)
void ror(Register rd, Register rs1, Register rs2)
void bgt(Register rs1, Register rs2, Label *l, JumpDistance d=kFarJump)
void beqz(Register rs, Label *label, JumpDistance distance=kFarJump)
void sh3adduw(Register rd, Register rs1, Register rs2)
void xor_(Register rd, Register rs1, Register rs2)
void csrrw(Register rd, uint32_t csr, Register rs1)
void amoandw(Register rd, Register rs2, Address addr, std::memory_order order=std::memory_order_relaxed)
intptr_t UpdateJOffset(intptr_t branch_position, intptr_t new_offset)
void fmuls(FRegister rd, FRegister rs1, FRegister rs2, RoundingMode rounding=RNE)
void bltu(Register rs1, Register rs2, Label *l, JumpDistance d=kFarJump)
void bgtu(Register rs1, Register rs2, Label *l, JumpDistance d=kFarJump)
void rolw(Register rd, Register rs1, Register rs2)
void sb(Register rs2, Address addr, std::memory_order order)
void fdivs(FRegister rd, FRegister rs1, FRegister rs2, RoundingMode rounding=RNE)
void csrwi(uint32_t csr, uint32_t imm)
void EmitRType(Funct7 funct7, FRegister rs2, FRegister rs1, RoundingMode round, FRegister rd, Opcode opcode)
void ble(Register rs1, Register rs2, Label *l, JumpDistance d=kFarJump)
void fmvxw(Register rd, FRegister rs1)
void lh(Register rd, Address addr)
void lui_fixed(Register rd, intptr_t imm)
void lh(Register rd, Address addr, std::memory_order order)
void remu(Register rd, Register rs1, Register rs2)
void fmaddd(FRegister rd, FRegister rs1, FRegister rs2, FRegister rs3, RoundingMode rounding=RNE)
void lw(Register rd, Address addr)
void EmitBranch(Register rs1, Register rs2, Label *label, Funct3 func, JumpDistance distance)
void ori(Register rd, Register rs1, intptr_t imm)
void fcvtds(FRegister rd, FRegister rs1, RoundingMode rounding=RNE)
void neg(Register rd, Register rs)
void j(Label *label, JumpDistance d=kFarJump)
void fgtd(Register rd, FRegister rs1, FRegister rs2)
void amominw(Register rd, Register rs2, Address addr, std::memory_order order=std::memory_order_relaxed)
void fges(Register rd, FRegister rs1, FRegister rs2)
void bclri(Register rd, Register rs1, intx_t shamt)
void addi(Register rd, Register rs1, intptr_t imm)
void fcvtswu(FRegister rd, Register rs1, RoundingMode rounding=RNE)
void sh1add(Register rd, Register rs1, Register rs2)
void EmitR4Type(FRegister rs3, Funct2 funct2, FRegister rs2, FRegister rs1, RoundingMode round, FRegister rd, Opcode opcode)
void srli(Register rd, Register rs1, intptr_t shamt)
void fmins(FRegister rd, FRegister rs1, FRegister rs2)
void amoswapw(Register rd, Register rs2, Address addr, std::memory_order order=std::memory_order_relaxed)
void sextb(Register rd, Register rs)
void xori(Register rd, Register rs1, intptr_t imm)
void bnez(Register rs, Label *label, JumpDistance distance=kFarJump)
intptr_t UpdateBOffset(intptr_t branch_position, intptr_t new_offset)
void bgeu(Register rs1, Register rs2, Label *l, JumpDistance d=kFarJump)
void zexth(Register rd, Register rs)
void amomaxuw(Register rd, Register rs2, Address addr, std::memory_order order=std::memory_order_relaxed)
void fsqrts(FRegister rd, FRegister rs1, RoundingMode rounding=RNE)
void fmvd(FRegister rd, FRegister rs)
void srai(Register rd, Register rs1, intptr_t shamt)
void fles(Register rd, FRegister rs1, FRegister rs2)
void bge(Register rs1, Register rs2, Label *l, JumpDistance d=kFarJump)
void min(Register rd, Register rs1, Register rs2)
void lrw(Register rd, Address addr, std::memory_order order=std::memory_order_relaxed)
intptr_t far_branch_level_
void EmitCBranch(Register rs1p, Label *label, COpcode op)
void fsubs(FRegister rd, FRegister rs1, FRegister rs2, RoundingMode rounding=RNE)
void add(Register rd, Register rs1, Register rs2)
void Write16(intptr_t position, uint16_t instruction)
void fmaxd(FRegister rd, FRegister rs1, FRegister rs2)
void sra(Register rd, Register rs1, Register rs2)
void bgez(Register rs, Label *label, JumpDistance distance=kFarJump)
void rol(Register rd, Register rs1, Register rs2)
void EmitRType(Funct7 funct7, intptr_t shamt, Register rs1, Funct3 funct3, Register rd, Opcode opcode)
void sexth(Register rd, Register rs)
MicroAssembler(ObjectPoolBuilder *object_pool_builder, intptr_t far_branch_level, ExtensionSet extensions)
void clmul(Register rd, Register rs1, Register rs2)
void cpop(Register rd, Register rs)
void EmitSType(intptr_t imm, Register rs2, Register rs1, Funct3 funct3, Opcode opcode)
void fclasss(Register rd, FRegister rs1)
void fence(HartEffects predecessor, HartEffects successor)
void EmitIType(intptr_t imm, Register rs1, Funct3 funct3, Register rd, Opcode opcode)
void faddd(FRegister rd, FRegister rs1, FRegister rs2, RoundingMode rounding=RNE)
void fmuld(FRegister rd, FRegister rs1, FRegister rs2, RoundingMode rounding=RNE)
void subi(Register rd, Register rs1, intptr_t imm)
void cpopw(Register rd, Register rs)
void and_(Register rd, Register rs1, Register rs2)
void fsgnjxd(FRegister rd, FRegister rs1, FRegister rs2)
void beq(Register rs1, Register rs2, Label *l, JumpDistance d=kFarJump)
void sh2add(Register rd, Register rs1, Register rs2)
void rem(Register rd, Register rs1, Register rs2)
void max(Register rd, Register rs1, Register rs2)
void slli(Register rd, Register rs1, intptr_t shamt)
void fsqrtd(FRegister rd, FRegister rs1, RoundingMode rounding=RNE)
void clzw(Register rd, Register rs)
void slti(Register rd, Register rs1, intptr_t imm)
void andi(Register rd, Register rs1, intptr_t imm)
void slt(Register rd, Register rs1, Register rs2)
void divu(Register rd, Register rs1, Register rs2)
void csrrwi(Register rd, uint32_t csr, uint32_t imm)
void fdivd(FRegister rd, FRegister rs1, FRegister rs2, RoundingMode rounding=RNE)
void fltd(Register rd, FRegister rs1, FRegister rs2)
void EmitJType(intptr_t imm, Register rd, Opcode opcode)
void fcvtsd(FRegister rd, FRegister rs1, RoundingMode rounding=RNE)
void sh(Register rs2, Address addr, std::memory_order order)
void EmitIType(intptr_t imm, Register rs1, Funct3 funct3, FRegister rd, Opcode opcode)
void EmitUType(intptr_t imm, Register rd, Opcode opcode)
void orn(Register rd, Register rs1, Register rs2)
void fld(FRegister rd, Address addr)
void fmvs(FRegister rd, FRegister rs)
static word DataOffsetFor(intptr_t cid)
static word value_offset()
VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE auto & d
Dart_NativeFunction function
word ToRawSmi(const dart::Object &a)
static constexpr intptr_t kWordSize
bool IsSameObject(const Object &a, const Object &b)
const Object & NullObject()
constexpr OperandSize kWordBytes
static constexpr intptr_t kAllocationCanary
it will be possible to load the file into Perfetto s trace viewer disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap size