Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | Static Public Member Functions | Protected Attributes | Private Member Functions | List of all members
dart::compiler::AssemblerBase Class Referenceabstract

#include <assembler_base.h>

Inheritance diagram for dart::compiler::AssemblerBase:
dart::StackResource dart::compiler::Assembler dart::compiler::Assembler dart::compiler::Assembler dart::compiler::Assembler dart::compiler::MicroAssembler dart::compiler::Assembler

Classes

class  CodeComment
 

Public Types

enum  JumpDistance : bool { kFarJump = false , kNearJump = true }
 
enum  CanBeSmi { kValueCanBeSmi , kValueIsNotSmi }
 
enum  MemoryOrder { kRelease , kRelaxedNonAtomic }
 
enum  RangeCheckCondition { kIfNotInRange = 0 , kIfInRange = 1 }
 

Public Member Functions

 AssemblerBase (ObjectPoolBuilder *object_pool_builder)
 
virtual ~AssemblerBase ()
 
intptr_t CodeSize () const
 
uword CodeAddress (intptr_t offset)
 
bool HasObjectPoolBuilder () const
 
ObjectPoolBuilderobject_pool_builder ()
 
intptr_t prologue_offset () const
 
bool has_monomorphic_entry () const
 
void mark_should_be_aligned ()
 
bool should_be_aligned () const
 
void Comment (const char *format,...) PRINTF_ATTRIBUTE(2
 
virtual void Breakpoint ()=0
 
virtual void SmiTag (Register r)=0
 
virtual void Bind (Label *label)=0
 
void ExtendNonNegativeSmi (Register dst)
 
virtual void ExtendValue (Register dst, Register src, OperandSize sz)=0
 
virtual void ExtendAndSmiTagValue (Register dst, Register src, OperandSize sz)
 
virtual void MoveRegister (Register dst, Register src)
 
virtual void MoveAndSmiTagRegister (Register dst, Register src)
 
virtual void TryAllocateObject (intptr_t cid, intptr_t instance_size, Label *failure, JumpDistance distance, Register instance_reg, Register temp)=0
 
void TryAllocate (const Class &cls, Label *failure, JumpDistance distance, Register instance_reg, Register temp)
 
virtual void BranchIfSmi (Register reg, Label *label, JumpDistance distance=kFarJump)=0
 
virtual void ArithmeticShiftRightImmediate (Register reg, intptr_t shift)=0
 
virtual void CompareWords (Register reg1, Register reg2, intptr_t offset, Register count, Register temp, Label *equals)=0
 
void UnrolledMemCopy (Register dst_base, intptr_t dst_offset, Register src_base, intptr_t src_offset, intptr_t size, Register temp)
 
virtual void LoadFieldAddressForOffset (Register reg, Register base, int32_t offset)=0
 
virtual void LoadFieldAddressForRegOffset (Register address, Register instance, Register offset_in_words_as_smi)=0
 
virtual void LoadAcquire (Register dst, const Address &address, OperandSize size=kWordBytes)=0
 
virtual void StoreRelease (Register src, const Address &address, OperandSize size=kWordBytes)=0
 
virtual void Load (Register dst, const Address &address, OperandSize sz=kWordBytes)=0
 
virtual void Store (Register src, const Address &address, OperandSize sz=kWordBytes)=0
 
void StoreIntoObject (Register object, const Address &address, Register value, CanBeSmi can_be_smi=kValueCanBeSmi, MemoryOrder memory_order=kRelaxedNonAtomic, Register scratch=TMP, OperandSize size=kWordBytes)
 
void StoreIntoObjectNoBarrier (Register object, const Address &address, Register value, MemoryOrder memory_order=kRelaxedNonAtomic, OperandSize size=kWordBytes)
 
virtual void StoreObjectIntoObjectNoBarrier (Register object, const Address &address, const Object &value, MemoryOrder memory_order=kRelaxedNonAtomic, OperandSize size=kWordBytes)=0
 
virtual void LoadIndexedPayload (Register dst, Register base, int32_t offset, Register index, ScaleFactor scale, OperandSize sz=kWordBytes)=0
 
void LoadAcquireFromOffset (Register dst, Register base, int32_t offset=0, OperandSize size=kWordBytes)
 
void StoreReleaseToOffset (Register src, Register base, int32_t offset=0, OperandSize size=kWordBytes)
 
virtual void LoadFromOffset (Register dst, Register base, int32_t offset, OperandSize sz=kWordBytes)
 
virtual void StoreToOffset (Register src, Register base, int32_t offset, OperandSize sz=kWordBytes)
 
virtual void StoreIntoObjectOffset (Register object, int32_t offset, Register value, CanBeSmi can_be_smi=kValueCanBeSmi, MemoryOrder memory_order=kRelaxedNonAtomic, Register scratch=TMP, OperandSize size=kWordBytes)
 
virtual void StoreIntoObjectOffsetNoBarrier (Register object, int32_t offset, Register value, MemoryOrder memory_order=kRelaxedNonAtomic, OperandSize size=kWordBytes)
 
void StoreObjectIntoObjectOffsetNoBarrier (Register object, int32_t offset, const Object &value, MemoryOrder memory_order=kRelaxedNonAtomic, OperandSize size=kWordBytes)
 
void LoadField (Register dst, const FieldAddress &address, OperandSize sz=kWordBytes)
 
virtual void LoadFieldFromOffset (Register dst, Register base, int32_t offset, OperandSize sz=kWordBytes)
 
virtual void StoreFieldToOffset (Register src, Register base, int32_t offset, OperandSize sz=kWordBytes)
 
void LoadSmi (Register dst, const Address &address)
 
void LoadSmiField (Register dst, const FieldAddress &address)
 
void LoadSmiFromOffset (Register dst, Register base, int32_t offset)
 
void LoadSmiFieldFromOffset (Register dst, Register base, int32_t offset)
 
void LoadCompressedFieldAddressForRegOffset (Register address, Register instance, Register offset_in_words_as_smi)
 
void LoadAcquireCompressed (Register dst, const Address &address)
 
void LoadCompressed (Register dst, const Address &address)
 
void LoadIndexedCompressed (Register dst, Register base, int32_t offset, Register index)
 
void LoadCompressedSmi (Register dst, const Address &address)
 
void StoreReleaseCompressed (Register src, const Address &address)
 
void StoreReleaseCompressedToOffset (Register src, Register base, int32_t offset=0)
 
void StoreCompressedIntoObject (Register object, const Address &address, Register value, CanBeSmi can_be_smi=kValueCanBeSmi, MemoryOrder memory_order=kRelaxedNonAtomic, Register scratch=TMP)
 
void StoreCompressedIntoObjectNoBarrier (Register object, const Address &address, Register value, MemoryOrder memory_order=kRelaxedNonAtomic)
 
virtual void StoreCompressedObjectIntoObjectNoBarrier (Register object, const Address &address, const Object &value, MemoryOrder memory_order=kRelaxedNonAtomic)
 
void StoreCompressedIntoObjectOffset (Register object, int32_t offset, Register value, CanBeSmi can_be_smi=kValueCanBeSmi, MemoryOrder memory_order=kRelaxedNonAtomic, Register scratch=TMP)
 
void StoreCompressedIntoObjectOffsetNoBarrier (Register object, int32_t offset, Register value, MemoryOrder memory_order=kRelaxedNonAtomic)
 
void StoreCompressedObjectIntoObjectOffsetNoBarrier (Register object, int32_t offset, const Object &value, MemoryOrder memory_order=kRelaxedNonAtomic)
 
void StoreIntoArray (Register object, Register slot, Register value, CanBeSmi can_value_be_smi=kValueCanBeSmi, Register scratch=TMP, OperandSize size=kWordBytes)
 
void StoreCompressedIntoArray (Register object, Register slot, Register value, CanBeSmi can_value_be_smi=kValueCanBeSmi, Register scratch=TMP)
 
void LoadAcquireCompressedFromOffset (Register dst, Register base, int32_t offset)
 
void LoadCompressedField (Register dst, const FieldAddress &address)
 
void LoadCompressedFromOffset (Register dst, Register base, int32_t offset)
 
void LoadCompressedFieldFromOffset (Register dst, Register base, int32_t offset)
 
void LoadCompressedSmiField (Register dst, const FieldAddress &address)
 
void LoadCompressedSmiFromOffset (Register dst, Register base, int32_t offset)
 
void LoadCompressedSmiFieldFromOffset (Register dst, Register base, int32_t offset)
 
void LoadFromSlot (Register dst, Register base, const Slot &slot)
 
void StoreToSlot (Register src, Register base, const Slot &slot, CanBeSmi can_be_smi, MemoryOrder memory_order=kRelaxedNonAtomic, Register scratch=TMP)
 
void StoreToSlotNoBarrier (Register src, Register base, const Slot &slot, MemoryOrder memory_order=kRelaxedNonAtomic)
 
void StoreToSlot (Register src, Register base, const Slot &slot, MemoryOrder memory_order=kRelaxedNonAtomic, Register scratch=TMP)
 
virtual void LoadInt32FromBoxOrSmi (Register result, Register value)=0
 
virtual void LoadInt64FromBoxOrSmi (Register result, Register value)=0
 
void LoadWordFromBoxOrSmi (Register result, Register value)
 
void LoadAbstractTypeNullability (Register dst, Register type)
 
void CompareAbstractTypeNullabilityWith (Register type, int8_t value, Register scratch)
 
virtual void LoadImmediate (Register dst, target::word imm)=0
 
virtual void CompareImmediate (Register reg, target::word imm, OperandSize width=kWordBytes)=0
 
virtual void CompareWithMemoryValue (Register value, Address address, OperandSize size=kWordBytes)=0
 
virtual void AndImmediate (Register dst, target::word imm)=0
 
virtual void LsrImmediate (Register dst, int32_t shift)=0
 
virtual void MulImmediate (Register dst, target::word imm, OperandSize=kWordBytes)=0
 
virtual void AndRegisters (Register dst, Register src1, Register src2=kNoRegister)=0
 
virtual void LslRegister (Register dst, Register shift)=0
 
virtual void CombineHashes (Register dst, Register other)=0
 
void FinalizeHash (Register hash, Register scratch=TMP)
 
virtual void FinalizeHashForSize (intptr_t bit_size, Register hash, Register scratch=TMP)=0
 
void LoadTypeClassId (Register dst, Register src)
 
virtual void EnsureHasClassIdInDEBUG (intptr_t cid, Register src, Register scratch, bool can_be_null=false)=0
 
intptr_t InsertAlignedRelocation (BSS::Relocation reloc)
 
void MsanUnpoison (Register base, intptr_t length_in_bytes)
 
void MsanUnpoison (Register base, Register length_in_bytes)
 
void Unimplemented (const char *message)
 
void Untested (const char *message)
 
void Unreachable (const char *message)
 
void Stop (const char *message)
 
void FinalizeInstructions (const MemoryRegion &region)
 
intptr_t CountPointerOffsets () const
 
const ZoneGrowableArray< intptr_t > & GetPointerOffsets () const
 
const GrowableArray< CodeComment * > & comments () const
 
void BindUncheckedEntryPoint ()
 
intptr_t UncheckedEntryOffset () const
 
virtual void RangeCheck (Register value, Register temp, intptr_t low, intptr_t high, RangeCheckCondition condition, Label *target)=0
 
void VerifySmi (Register dst)
 
- Public Member Functions inherited from dart::StackResource
 StackResource (ThreadState *thread)
 
virtual ~StackResource ()
 
ThreadStatethread () const
 

Static Public Member Functions

void static bool EmittingComments ()
 
- Static Public Member Functions inherited from dart::StackResource
static void Unwind (ThreadState *thread)
 
static void UnwindAbove (ThreadState *thread, StackResource *new_top)
 

Protected Attributes

AssemblerBuffer buffer_
 
int32_t prologue_offset_ = -1
 
bool has_monomorphic_entry_ = false
 
bool should_be_aligned_ = false
 
intptr_t unchecked_entry_offset_ = 0
 

Private Member Functions

virtual void StoreBarrier (Register object, Register value, CanBeSmi can_be_smi, Register scratch)=0
 
virtual void ArrayStoreBarrier (Register object, Register slot, Register value, CanBeSmi can_be_smi, Register scratch)=0
 
virtual void VerifyStoreNeedsNoWriteBarrier (Register object, Register value)=0
 

Detailed Description

Definition at line 600 of file assembler_base.h.

Member Enumeration Documentation

◆ CanBeSmi

Enumerator
kValueCanBeSmi 
kValueIsNotSmi 

Definition at line 730 of file assembler_base.h.

◆ JumpDistance

Enumerator
kFarJump 
kNearJump 

Definition at line 608 of file assembler_base.h.

608 : bool {
609 kFarJump = false,
610 kNearJump = true,
611 };

◆ MemoryOrder

Enumerator
kRelease 
kRelaxedNonAtomic 

Definition at line 735 of file assembler_base.h.

735 {
736 // All previous writes to memory in this thread must be visible to other
737 // threads. Currently, only used for lazily populating hash indices in
738 // shared const maps and sets.
739 kRelease,
740
741 // All other stores.
743 };

◆ RangeCheckCondition

Enumerator
kIfNotInRange 
kIfInRange 

Definition at line 1201 of file assembler_base.h.

Constructor & Destructor Documentation

◆ AssemblerBase()

dart::compiler::AssemblerBase::AssemblerBase ( ObjectPoolBuilder object_pool_builder)
inlineexplicit

Definition at line 602 of file assembler_base.h.

604 object_pool_builder_(object_pool_builder) {}
StackResource(ThreadState *thread)
Definition allocation.h:25
static ThreadState * Current()
ObjectPoolBuilder & object_pool_builder()

◆ ~AssemblerBase()

dart::compiler::AssemblerBase::~AssemblerBase ( )
virtual

Definition at line 30 of file assembler_base.cc.

30{}

Member Function Documentation

◆ AndImmediate()

virtual void dart::compiler::AssemblerBase::AndImmediate ( Register  dst,
target::word  imm 
)
pure virtual

◆ AndRegisters()

virtual void dart::compiler::AssemblerBase::AndRegisters ( Register  dst,
Register  src1,
Register  src2 = kNoRegister 
)
pure virtual

◆ ArithmeticShiftRightImmediate()

virtual void dart::compiler::AssemblerBase::ArithmeticShiftRightImmediate ( Register  reg,
intptr_t  shift 
)
pure virtual

◆ ArrayStoreBarrier()

virtual void dart::compiler::AssemblerBase::ArrayStoreBarrier ( Register  object,
Register  slot,
Register  value,
CanBeSmi  can_be_smi,
Register  scratch 
)
privatepure virtual

◆ Bind()

virtual void dart::compiler::AssemblerBase::Bind ( Label label)
pure virtual

◆ BindUncheckedEntryPoint()

void dart::compiler::AssemblerBase::BindUncheckedEntryPoint ( )
inline

Definition at line 1192 of file assembler_base.h.

◆ BranchIfSmi()

virtual void dart::compiler::AssemblerBase::BranchIfSmi ( Register  reg,
Label label,
JumpDistance  distance = kFarJump 
)
pure virtual

◆ Breakpoint()

virtual void dart::compiler::AssemblerBase::Breakpoint ( )
pure virtual

◆ CodeAddress()

uword dart::compiler::AssemblerBase::CodeAddress ( intptr_t  offset)
inline

Definition at line 615 of file assembler_base.h.

615{ return buffer_.Address(offset); }
uword Address(intptr_t position)
Point offset

◆ CodeSize()

intptr_t dart::compiler::AssemblerBase::CodeSize ( ) const
inline

Definition at line 613 of file assembler_base.h.

613{ return buffer_.Size(); }

◆ CombineHashes()

virtual void dart::compiler::AssemblerBase::CombineHashes ( Register  dst,
Register  other 
)
pure virtual

◆ Comment()

void dart::compiler::AssemblerBase::Comment ( const char *  format,
  ... 
)

Definition at line 601 of file assembler_base.cc.

601 {
602 if (EmittingComments()) {
603 char buffer[1024];
604
605 va_list args;
608 va_end(args);
609
610 comments_.Add(
611 new CodeComment(buffer_.GetPosition(), AllocateString(buffer)));
612 }
613}
static int static int VSNPrint(char *str, size_t size, const char *format, va_list args)
void static bool EmittingComments()
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
static const uint8_t buffer[]
uint32_t uint32_t * format
va_start(args, format)
va_end(args)
const String & AllocateString(const char *buffer)

◆ comments()

const GrowableArray< CodeComment * > & dart::compiler::AssemblerBase::comments ( ) const
inline

Definition at line 1190 of file assembler_base.h.

1190{ return comments_; }

◆ CompareAbstractTypeNullabilityWith()

void dart::compiler::AssemblerBase::CompareAbstractTypeNullabilityWith ( Register  type,
int8_t  value,
Register  scratch 
)

Definition at line 350 of file assembler_base.cc.

352 {
354 CompareImmediate(scratch, value);
355}
virtual void CompareImmediate(Register reg, target::word imm, OperandSize width=kWordBytes)=0
void LoadAbstractTypeNullability(Register dst, Register type)

◆ CompareImmediate()

virtual void dart::compiler::AssemblerBase::CompareImmediate ( Register  reg,
target::word  imm,
OperandSize  width = kWordBytes 
)
pure virtual

◆ CompareWithMemoryValue()

virtual void dart::compiler::AssemblerBase::CompareWithMemoryValue ( Register  value,
Address  address,
OperandSize  size = kWordBytes 
)
pure virtual

◆ CompareWords()

virtual void dart::compiler::AssemblerBase::CompareWords ( Register  reg1,
Register  reg2,
intptr_t  offset,
Register  count,
Register  temp,
Label equals 
)
pure virtual

◆ CountPointerOffsets()

intptr_t dart::compiler::AssemblerBase::CountPointerOffsets ( ) const
inline

Definition at line 1169 of file assembler_base.h.

1169{ return buffer_.CountPointerOffsets(); }

◆ EmittingComments()

bool dart::compiler::AssemblerBase::EmittingComments ( )
static

Definition at line 615 of file assembler_base.cc.

615 {
616 return FLAG_code_comments || FLAG_disassemble || FLAG_disassemble_optimized ||
617 FLAG_disassemble_stubs;
618}

◆ EnsureHasClassIdInDEBUG()

virtual void dart::compiler::AssemblerBase::EnsureHasClassIdInDEBUG ( intptr_t  cid,
Register  src,
Register  scratch,
bool  can_be_null = false 
)
pure virtual

◆ ExtendAndSmiTagValue()

virtual void dart::compiler::AssemblerBase::ExtendAndSmiTagValue ( Register  dst,
Register  src,
OperandSize  sz 
)
inlinevirtual

Reimplemented in dart::compiler::Assembler, dart::compiler::Assembler, and dart::compiler::Assembler.

Definition at line 664 of file assembler_base.h.

666 {
667 ExtendValue(dst, src, sz);
668 SmiTag(dst);
669 }
virtual void SmiTag(Register r)=0
virtual void ExtendValue(Register dst, Register src, OperandSize sz)=0

◆ ExtendNonNegativeSmi()

void dart::compiler::AssemblerBase::ExtendNonNegativeSmi ( Register  dst)
inline

Definition at line 651 of file assembler_base.h.

651{}

◆ ExtendValue()

virtual void dart::compiler::AssemblerBase::ExtendValue ( Register  dst,
Register  src,
OperandSize  sz 
)
pure virtual

◆ FinalizeHash()

void dart::compiler::AssemblerBase::FinalizeHash ( Register  hash,
Register  scratch = TMP 
)
inline

Definition at line 1133 of file assembler_base.h.

1133 {
1134 return FinalizeHashForSize(/*bit_size=*/kBitsPerInt32, hash, scratch);
1135 }
static uint32_t hash(const SkShaderBase::GradientInfo &v)
virtual void FinalizeHashForSize(intptr_t bit_size, Register hash, Register scratch=TMP)=0
constexpr intptr_t kBitsPerInt32
Definition globals.h:466

◆ FinalizeHashForSize()

virtual void dart::compiler::AssemblerBase::FinalizeHashForSize ( intptr_t  bit_size,
Register  hash,
Register  scratch = TMP 
)
pure virtual

◆ FinalizeInstructions()

void dart::compiler::AssemblerBase::FinalizeInstructions ( const MemoryRegion region)
inline

Definition at line 1163 of file assembler_base.h.

1163 {
1165 }
void FinalizeInstructions(const MemoryRegion &region)

◆ GetPointerOffsets()

const ZoneGrowableArray< intptr_t > & dart::compiler::AssemblerBase::GetPointerOffsets ( ) const
inline

Definition at line 1171 of file assembler_base.h.

1171 {
1172 return buffer_.pointer_offsets();
1173 }
const ZoneGrowableArray< intptr_t > & pointer_offsets() const

◆ has_monomorphic_entry()

bool dart::compiler::AssemblerBase::has_monomorphic_entry ( ) const
inline

Definition at line 621 of file assembler_base.h.

◆ HasObjectPoolBuilder()

bool dart::compiler::AssemblerBase::HasObjectPoolBuilder ( ) const
inline

Definition at line 617 of file assembler_base.h.

617{ return object_pool_builder_ != nullptr; }

◆ InsertAlignedRelocation()

intptr_t dart::compiler::AssemblerBase::InsertAlignedRelocation ( BSS::Relocation  reloc)

Definition at line 357 of file assembler_base.cc.

357 {
358 // We cannot put a relocation at the very start (it's not a valid
359 // instruction)!
360 ASSERT(CodeSize() != 0);
361
362 // Align to a target word boundary.
363 const intptr_t offset =
364 Utils::RoundUp(CodeSize(), compiler::target::kWordSize);
365
366 while (CodeSize() < offset) {
367 Breakpoint();
368 }
369 ASSERT(CodeSize() == offset);
370
371 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
372 buffer_.Emit<compiler::target::word>(BSS::RelocationIndex(reloc) *
373 compiler::target::kWordSize);
374
375 ASSERT(CodeSize() == (offset + compiler::target::kWordSize));
376
377 return offset;
378}
static constexpr intptr_t RelocationIndex(Relocation reloc)
Definition bss_relocs.h:33
static constexpr T RoundUp(T x, uintptr_t alignment, uintptr_t offset=0)
Definition utils.h:105

◆ Load()

virtual void dart::compiler::AssemblerBase::Load ( Register  dst,
const Address address,
OperandSize  sz = kWordBytes 
)
pure virtual

◆ LoadAbstractTypeNullability()

void dart::compiler::AssemblerBase::LoadAbstractTypeNullability ( Register  dst,
Register  type 
)

Definition at line 345 of file assembler_base.cc.

345 {
346 LoadFromSlot(dst, type, Slot::AbstractType_flags());
347 AndImmediate(dst, compiler::target::UntaggedAbstractType::kNullabilityMask);
348}
void LoadFromSlot(Register dst, Register base, const Slot &slot)
virtual void AndImmediate(Register dst, target::word imm)=0

◆ LoadAcquire()

virtual void dart::compiler::AssemblerBase::LoadAcquire ( Register  dst,
const Address address,
OperandSize  size = kWordBytes 
)
pure virtual

◆ LoadAcquireCompressed()

void dart::compiler::AssemblerBase::LoadAcquireCompressed ( Register  dst,
const Address address 
)
inline

Definition at line 929 of file assembler_base.h.

929 {
930 LoadAcquire(dst, address);
931 }
virtual void LoadAcquire(Register dst, const Address &address, OperandSize size=kWordBytes)=0

◆ LoadAcquireCompressedFromOffset()

void dart::compiler::AssemblerBase::LoadAcquireCompressedFromOffset ( Register  dst,
Register  base,
int32_t  offset 
)

Definition at line 174 of file assembler_base.cc.

176 {
177 LoadAcquireCompressed(dst, Address(base, offset));
178}
void LoadAcquireCompressed(Register dst, const Address &address)

◆ LoadAcquireFromOffset()

void dart::compiler::AssemblerBase::LoadAcquireFromOffset ( Register  dst,
Register  base,
int32_t  offset = 0,
OperandSize  size = kWordBytes 
)

Definition at line 208 of file assembler_base.cc.

211 {
212 LoadAcquire(dst, Address(base, offset), size);
213}

◆ LoadCompressed()

void dart::compiler::AssemblerBase::LoadCompressed ( Register  dst,
const Address address 
)
inline

Definition at line 933 of file assembler_base.h.

933 {
934 Load(dst, address);
935 }
virtual void Load(Register dst, const Address &address, OperandSize sz=kWordBytes)=0

◆ LoadCompressedField()

void dart::compiler::AssemblerBase::LoadCompressedField ( Register  dst,
const FieldAddress address 
)

Definition at line 179 of file assembler_base.cc.

180 {
181 LoadCompressed(dst, address);
182}
void LoadCompressed(Register dst, const Address &address)

◆ LoadCompressedFieldAddressForRegOffset()

void dart::compiler::AssemblerBase::LoadCompressedFieldAddressForRegOffset ( Register  address,
Register  instance,
Register  offset_in_words_as_smi 
)
inline

Definition at line 923 of file assembler_base.h.

925 {
926 LoadFieldAddressForRegOffset(address, instance, offset_in_words_as_smi);
927 }
virtual void LoadFieldAddressForRegOffset(Register address, Register instance, Register offset_in_words_as_smi)=0
VkInstance instance
Definition main.cc:48

◆ LoadCompressedFieldFromOffset()

void dart::compiler::AssemblerBase::LoadCompressedFieldFromOffset ( Register  dst,
Register  base,
int32_t  offset 
)

Definition at line 188 of file assembler_base.cc.

190 {
191 LoadCompressed(dst, FieldAddress(base, offset));
192}

◆ LoadCompressedFromOffset()

void dart::compiler::AssemblerBase::LoadCompressedFromOffset ( Register  dst,
Register  base,
int32_t  offset 
)

Definition at line 183 of file assembler_base.cc.

185 {
186 LoadCompressed(dst, Address(base, offset));
187}

◆ LoadCompressedSmi()

void dart::compiler::AssemblerBase::LoadCompressedSmi ( Register  dst,
const Address address 
)
inline

Definition at line 946 of file assembler_base.h.

946 {
947 LoadSmi(dst, address);
948 }
void LoadSmi(Register dst, const Address &address)

◆ LoadCompressedSmiField()

void dart::compiler::AssemblerBase::LoadCompressedSmiField ( Register  dst,
const FieldAddress address 
)

Definition at line 193 of file assembler_base.cc.

194 {
195 LoadCompressedSmi(dst, address);
196}
void LoadCompressedSmi(Register dst, const Address &address)

◆ LoadCompressedSmiFieldFromOffset()

void dart::compiler::AssemblerBase::LoadCompressedSmiFieldFromOffset ( Register  dst,
Register  base,
int32_t  offset 
)

Definition at line 202 of file assembler_base.cc.

204 {
205 LoadCompressedSmi(dst, FieldAddress(base, offset));
206}

◆ LoadCompressedSmiFromOffset()

void dart::compiler::AssemblerBase::LoadCompressedSmiFromOffset ( Register  dst,
Register  base,
int32_t  offset 
)

Definition at line 197 of file assembler_base.cc.

199 {
200 LoadCompressedSmi(dst, Address(base, offset));
201}

◆ LoadField()

void dart::compiler::AssemblerBase::LoadField ( Register  dst,
const FieldAddress address,
OperandSize  sz = kWordBytes 
)

Definition at line 141 of file assembler_base.cc.

143 {
144 Load(dst, address, sz);
145}

◆ LoadFieldAddressForOffset()

virtual void dart::compiler::AssemblerBase::LoadFieldAddressForOffset ( Register  reg,
Register  base,
int32_t  offset 
)
pure virtual

◆ LoadFieldAddressForRegOffset()

virtual void dart::compiler::AssemblerBase::LoadFieldAddressForRegOffset ( Register  address,
Register  instance,
Register  offset_in_words_as_smi 
)
pure virtual

◆ LoadFieldFromOffset()

void dart::compiler::AssemblerBase::LoadFieldFromOffset ( Register  dst,
Register  base,
int32_t  offset,
OperandSize  sz = kWordBytes 
)
virtual

Reimplemented in dart::compiler::Assembler.

Definition at line 146 of file assembler_base.cc.

149 {
150 Load(dst, FieldAddress(base, offset), sz);
151}

◆ LoadFromOffset()

void dart::compiler::AssemblerBase::LoadFromOffset ( Register  dst,
Register  base,
int32_t  offset,
OperandSize  sz = kWordBytes 
)
virtual

Reimplemented in dart::compiler::Assembler.

Definition at line 127 of file assembler_base.cc.

130 {
131 Load(dst, Address(base, offset), sz);
132}

◆ LoadFromSlot()

void dart::compiler::AssemblerBase::LoadFromSlot ( Register  dst,
Register  base,
const Slot slot 
)

Definition at line 32 of file assembler_base.cc.

34 {
35 if (!slot.is_tagged()) {
36 // The result cannot be a floating point or SIMD value.
37 ASSERT(slot.representation() == kUntagged ||
38 RepresentationUtils::IsUnboxedInteger(slot.representation()));
39 // Since we only have a single destination register, the result value must
40 // fit into a register.
41 ASSERT(RepresentationUtils::ValueSize(slot.representation()) <=
42 compiler::target::kWordSize);
43 auto const sz = RepresentationUtils::OperandSize(slot.representation());
44 if (slot.has_untagged_instance()) {
45 LoadFromOffset(dst, base, slot.offset_in_bytes(), sz);
46 } else {
47 LoadFieldFromOffset(dst, base, slot.offset_in_bytes(), sz);
48 }
49 } else if (slot.has_untagged_instance()) {
50 // Non-Dart objects do not contain compressed pointers.
51 ASSERT(!slot.is_compressed());
52 LoadFromOffset(dst, base, slot.offset_in_bytes());
53 } else if (!slot.is_guarded_field() && slot.type().ToCid() == kSmiCid) {
54 if (slot.is_compressed()) {
55 LoadCompressedSmiFieldFromOffset(dst, base, slot.offset_in_bytes());
56 } else {
57 LoadSmiFieldFromOffset(dst, base, slot.offset_in_bytes());
58 }
59 } else {
60 if (slot.is_compressed()) {
61 LoadCompressedFieldFromOffset(dst, base, slot.offset_in_bytes());
62 } else {
63 LoadFieldFromOffset(dst, base, slot.offset_in_bytes());
64 }
65 }
66}
void LoadCompressedFieldFromOffset(Register dst, Register base, int32_t offset)
void LoadCompressedSmiFieldFromOffset(Register dst, Register base, int32_t offset)
void LoadSmiFieldFromOffset(Register dst, Register base, int32_t offset)
virtual void LoadFromOffset(Register dst, Register base, int32_t offset, OperandSize sz=kWordBytes)
virtual void LoadFieldFromOffset(Register dst, Register base, int32_t offset, OperandSize sz=kWordBytes)
static constexpr size_t ValueSize(Representation rep)
Definition locations.h:112
static constexpr bool IsUnboxedInteger(Representation rep)
Definition locations.h:92
static compiler::OperandSize OperandSize(Representation rep)
Definition locations.cc:16

◆ LoadImmediate()

virtual void dart::compiler::AssemblerBase::LoadImmediate ( Register  dst,
target::word  imm 
)
pure virtual

◆ LoadIndexedCompressed()

void dart::compiler::AssemblerBase::LoadIndexedCompressed ( Register  dst,
Register  base,
int32_t  offset,
Register  index 
)
inline

Definition at line 937 of file assembler_base.h.

940 {
941 LoadIndexedPayload(dst, base, offset, index, TIMES_WORD_SIZE, kWordBytes);
942 }
virtual void LoadIndexedPayload(Register dst, Register base, int32_t offset, Register index, ScaleFactor scale, OperandSize sz=kWordBytes)=0
constexpr OperandSize kWordBytes

◆ LoadIndexedPayload()

virtual void dart::compiler::AssemblerBase::LoadIndexedPayload ( Register  dst,
Register  base,
int32_t  offset,
Register  index,
ScaleFactor  scale,
OperandSize  sz = kWordBytes 
)
pure virtual

◆ LoadInt32FromBoxOrSmi()

virtual void dart::compiler::AssemblerBase::LoadInt32FromBoxOrSmi ( Register  result,
Register  value 
)
pure virtual

◆ LoadInt64FromBoxOrSmi()

virtual void dart::compiler::AssemblerBase::LoadInt64FromBoxOrSmi ( Register  result,
Register  value 
)
pure virtual

◆ LoadSmi()

void dart::compiler::AssemblerBase::LoadSmi ( Register  dst,
const Address address 
)
inline

Definition at line 875 of file assembler_base.h.

875 {
876 Load(dst, address);
877 DEBUG_ONLY(VerifySmi(dst));
878 }
#define DEBUG_ONLY(code)
Definition globals.h:141

◆ LoadSmiField()

void dart::compiler::AssemblerBase::LoadSmiField ( Register  dst,
const FieldAddress address 
)

Definition at line 160 of file assembler_base.cc.

160 {
161 LoadSmi(dst, address);
162}

◆ LoadSmiFieldFromOffset()

void dart::compiler::AssemblerBase::LoadSmiFieldFromOffset ( Register  dst,
Register  base,
int32_t  offset 
)

Definition at line 168 of file assembler_base.cc.

170 {
171 LoadSmi(dst, FieldAddress(base, offset));
172}

◆ LoadSmiFromOffset()

void dart::compiler::AssemblerBase::LoadSmiFromOffset ( Register  dst,
Register  base,
int32_t  offset 
)

Definition at line 163 of file assembler_base.cc.

165 {
166 LoadSmi(dst, Address(base, offset));
167}

◆ LoadTypeClassId()

void dart::compiler::AssemblerBase::LoadTypeClassId ( Register  dst,
Register  src 
)

Definition at line 331 of file assembler_base.cc.

331 {
332 if (dst != src) {
333 EnsureHasClassIdInDEBUG(kTypeCid, src, dst);
334 } else {
335#if !defined(TARGET_ARCH_IA32)
336 EnsureHasClassIdInDEBUG(kTypeCid, src, TMP);
337#else
338 // Skip check on IA32 since we don't have TMP.
339#endif
340 }
341 LoadFromSlot(dst, src, Slot::AbstractType_flags());
342 LsrImmediate(dst, compiler::target::UntaggedType::kTypeClassIdShift);
343}
virtual void LsrImmediate(Register dst, int32_t shift)=0
virtual void EnsureHasClassIdInDEBUG(intptr_t cid, Register src, Register scratch, bool can_be_null=false)=0
const Register TMP

◆ LoadWordFromBoxOrSmi()

void dart::compiler::AssemblerBase::LoadWordFromBoxOrSmi ( Register  result,
Register  value 
)
inline

Definition at line 1080 of file assembler_base.h.

1080 {
1081#if defined(TARGET_ARCH_IS_32_BIT)
1083#else
1085#endif
1086 }
virtual void LoadInt64FromBoxOrSmi(Register result, Register value)=0
virtual void LoadInt32FromBoxOrSmi(Register result, Register value)=0
GAsyncResult * result

◆ LslRegister()

virtual void dart::compiler::AssemblerBase::LslRegister ( Register  dst,
Register  shift 
)
pure virtual

◆ LsrImmediate()

virtual void dart::compiler::AssemblerBase::LsrImmediate ( Register  dst,
int32_t  shift 
)
pure virtual

◆ mark_should_be_aligned()

void dart::compiler::AssemblerBase::mark_should_be_aligned ( )
inline

Definition at line 625 of file assembler_base.h.

◆ MoveAndSmiTagRegister()

virtual void dart::compiler::AssemblerBase::MoveAndSmiTagRegister ( Register  dst,
Register  src 
)
inlinevirtual

Reimplemented in dart::compiler::Assembler.

Definition at line 679 of file assembler_base.h.

679 {
681 }
virtual void ExtendAndSmiTagValue(Register dst, Register src, OperandSize sz)

◆ MoveRegister()

virtual void dart::compiler::AssemblerBase::MoveRegister ( Register  dst,
Register  src 
)
inlinevirtual

Reimplemented in dart::compiler::Assembler.

Definition at line 674 of file assembler_base.h.

674 {
675 ExtendValue(dst, src, kWordBytes);
676 }

◆ MsanUnpoison() [1/2]

void dart::compiler::AssemblerBase::MsanUnpoison ( Register  base,
intptr_t  length_in_bytes 
)

Definition at line 380 of file assembler_base.cc.

380 {
381 Comment("MsanUnpoison base %s length_in_bytes %" Pd,
382 RegisterNames::RegisterName(base), length_in_bytes);
383 LeafRuntimeScope rt(static_cast<Assembler*>(this), /*frame_size=*/0,
384 /*preserve_registers=*/true);
387 rt.Call(kMsanUnpoisonRuntimeEntry, /*argument_count=*/2);
388}
static const Register ArgumentRegisters[]
static const char * RegisterName(Register reg)
Definition constants.h:46
virtual void MoveRegister(Register dst, Register src)
void Comment(const char *format,...) PRINTF_ATTRIBUTE(2
virtual void LoadImmediate(Register dst, target::word imm)=0
#define Pd
Definition globals.h:408

◆ MsanUnpoison() [2/2]

void dart::compiler::AssemblerBase::MsanUnpoison ( Register  base,
Register  length_in_bytes 
)

Definition at line 390 of file assembler_base.cc.

390 {
391 Comment("MsanUnpoison base %s length_in_bytes %s",
393 RegisterNames::RegisterName(length_in_bytes));
394 LeafRuntimeScope rt(static_cast<Assembler*>(this), /*frame_size=*/0,
395 /*preserve_registers=*/true);
398 if (length_in_bytes == a0) {
399 if (base == a1) {
400 MoveRegister(TMP, length_in_bytes);
401 MoveRegister(a0, base);
402 MoveRegister(a1, TMP);
403 } else {
404 MoveRegister(a1, length_in_bytes);
405 MoveRegister(a0, base);
406 }
407 } else {
408 MoveRegister(a0, base);
409 MoveRegister(a1, length_in_bytes);
410 }
411 rt.Call(kMsanUnpoisonRuntimeEntry, /*argument_count=*/2);
412}

◆ MulImmediate()

virtual void dart::compiler::AssemblerBase::MulImmediate ( Register  dst,
target::word  imm,
OperandSize  = kWordBytes 
)
pure virtual

◆ object_pool_builder()

ObjectPoolBuilder & dart::compiler::AssemblerBase::object_pool_builder ( )
inline

Definition at line 618 of file assembler_base.h.

618{ return *object_pool_builder_; }

◆ prologue_offset()

intptr_t dart::compiler::AssemblerBase::prologue_offset ( ) const
inline

Definition at line 620 of file assembler_base.h.

◆ RangeCheck()

virtual void dart::compiler::AssemblerBase::RangeCheck ( Register  value,
Register  temp,
intptr_t  low,
intptr_t  high,
RangeCheckCondition  condition,
Label target 
)
pure virtual

◆ should_be_aligned()

bool dart::compiler::AssemblerBase::should_be_aligned ( ) const
inline

Definition at line 626 of file assembler_base.h.

626{ return should_be_aligned_; }

◆ SmiTag()

virtual void dart::compiler::AssemblerBase::SmiTag ( Register  r)
pure virtual

◆ Stop()

void dart::compiler::AssemblerBase::Stop ( const char *  message)

Definition at line 620 of file assembler_base.cc.

620 {
621 Comment("Stop: %s", message);
622 Breakpoint();
623}
Win32Message message

◆ Store()

virtual void dart::compiler::AssemblerBase::Store ( Register  src,
const Address address,
OperandSize  sz = kWordBytes 
)
pure virtual

◆ StoreBarrier()

virtual void dart::compiler::AssemblerBase::StoreBarrier ( Register  object,
Register  value,
CanBeSmi  can_be_smi,
Register  scratch 
)
privatepure virtual

◆ StoreCompressedIntoArray()

void dart::compiler::AssemblerBase::StoreCompressedIntoArray ( Register  object,
Register  slot,
Register  value,
CanBeSmi  can_value_be_smi = kValueCanBeSmi,
Register  scratch = TMP 
)
inline

Definition at line 1023 of file assembler_base.h.

1027 {
1028 StoreIntoArray(object, slot, value, can_value_be_smi, scratch,
1029 kObjectBytes);
1030 }
void StoreIntoArray(Register object, Register slot, Register value, CanBeSmi can_value_be_smi=kValueCanBeSmi, Register scratch=TMP, OperandSize size=kWordBytes)

◆ StoreCompressedIntoObject()

void dart::compiler::AssemblerBase::StoreCompressedIntoObject ( Register  object,
const Address address,
Register  value,
CanBeSmi  can_be_smi = kValueCanBeSmi,
MemoryOrder  memory_order = kRelaxedNonAtomic,
Register  scratch = TMP 
)
inline

Definition at line 963 of file assembler_base.h.

969 {
970 StoreIntoObject(object, address, value, can_be_smi, memory_order, TMP,
972 }
void StoreIntoObject(Register object, const Address &address, Register value, CanBeSmi can_be_smi=kValueCanBeSmi, MemoryOrder memory_order=kRelaxedNonAtomic, Register scratch=TMP, OperandSize size=kWordBytes)

◆ StoreCompressedIntoObjectNoBarrier()

void dart::compiler::AssemblerBase::StoreCompressedIntoObjectNoBarrier ( Register  object,
const Address address,
Register  value,
MemoryOrder  memory_order = kRelaxedNonAtomic 
)
inline

Definition at line 973 of file assembler_base.h.

977 {
978 StoreIntoObjectNoBarrier(object, address, value, memory_order,
980 }
void StoreIntoObjectNoBarrier(Register object, const Address &address, Register value, MemoryOrder memory_order=kRelaxedNonAtomic, OperandSize size=kWordBytes)

◆ StoreCompressedIntoObjectOffset()

void dart::compiler::AssemblerBase::StoreCompressedIntoObjectOffset ( Register  object,
int32_t  offset,
Register  value,
CanBeSmi  can_be_smi = kValueCanBeSmi,
MemoryOrder  memory_order = kRelaxedNonAtomic,
Register  scratch = TMP 
)
inline

Definition at line 990 of file assembler_base.h.

996 {
997 StoreIntoObjectOffset(object, offset, value, can_be_smi, memory_order, TMP,
999 }
virtual void StoreIntoObjectOffset(Register object, int32_t offset, Register value, CanBeSmi can_be_smi=kValueCanBeSmi, MemoryOrder memory_order=kRelaxedNonAtomic, Register scratch=TMP, OperandSize size=kWordBytes)

◆ StoreCompressedIntoObjectOffsetNoBarrier()

void dart::compiler::AssemblerBase::StoreCompressedIntoObjectOffsetNoBarrier ( Register  object,
int32_t  offset,
Register  value,
MemoryOrder  memory_order = kRelaxedNonAtomic 
)
inline

Definition at line 1000 of file assembler_base.h.

1004 {
1005 StoreIntoObjectOffsetNoBarrier(object, offset, value, memory_order,
1006 kObjectBytes);
1007 }
virtual void StoreIntoObjectOffsetNoBarrier(Register object, int32_t offset, Register value, MemoryOrder memory_order=kRelaxedNonAtomic, OperandSize size=kWordBytes)

◆ StoreCompressedObjectIntoObjectNoBarrier()

virtual void dart::compiler::AssemblerBase::StoreCompressedObjectIntoObjectNoBarrier ( Register  object,
const Address address,
const Object value,
MemoryOrder  memory_order = kRelaxedNonAtomic 
)
inlinevirtual

Definition at line 981 of file assembler_base.h.

985 {
986 StoreObjectIntoObjectNoBarrier(object, address, value, memory_order,
988 }
virtual void StoreObjectIntoObjectNoBarrier(Register object, const Address &address, const Object &value, MemoryOrder memory_order=kRelaxedNonAtomic, OperandSize size=kWordBytes)=0

◆ StoreCompressedObjectIntoObjectOffsetNoBarrier()

void dart::compiler::AssemblerBase::StoreCompressedObjectIntoObjectOffsetNoBarrier ( Register  object,
int32_t  offset,
const Object value,
MemoryOrder  memory_order = kRelaxedNonAtomic 
)
inline

Definition at line 1008 of file assembler_base.h.

1012 {
1013 StoreObjectIntoObjectOffsetNoBarrier(object, offset, value, memory_order,
1014 kObjectBytes);
1015 }
void StoreObjectIntoObjectOffsetNoBarrier(Register object, int32_t offset, const Object &value, MemoryOrder memory_order=kRelaxedNonAtomic, OperandSize size=kWordBytes)

◆ StoreFieldToOffset()

void dart::compiler::AssemblerBase::StoreFieldToOffset ( Register  src,
Register  base,
int32_t  offset,
OperandSize  sz = kWordBytes 
)
virtual

Reimplemented in dart::compiler::Assembler.

Definition at line 153 of file assembler_base.cc.

156 {
157 Store(src, FieldAddress(base, offset), sz);
158}
virtual void Store(Register src, const Address &address, OperandSize sz=kWordBytes)=0

◆ StoreIntoArray()

void dart::compiler::AssemblerBase::StoreIntoArray ( Register  object,
Register  slot,
Register  value,
CanBeSmi  can_value_be_smi = kValueCanBeSmi,
Register  scratch = TMP,
OperandSize  size = kWordBytes 
)

Definition at line 283 of file assembler_base.cc.

288 {
289 ASSERT(object != scratch);
290 ASSERT(value != object);
291 ASSERT(value != scratch);
292 ASSERT(slot != object);
293 ASSERT(slot != value);
294 ASSERT(slot != scratch);
295 Store(value, Address(slot, 0), size);
296 ArrayStoreBarrier(object, slot, value, can_be_smi, scratch);
297}
virtual void ArrayStoreBarrier(Register object, Register slot, Register value, CanBeSmi can_be_smi, Register scratch)=0

◆ StoreIntoObject()

void dart::compiler::AssemblerBase::StoreIntoObject ( Register  object,
const Address address,
Register  value,
CanBeSmi  can_be_smi = kValueCanBeSmi,
MemoryOrder  memory_order = kRelaxedNonAtomic,
Register  scratch = TMP,
OperandSize  size = kWordBytes 
)

Definition at line 221 of file assembler_base.cc.

227 {
228 // A write barrier should never be applied when writing a reference to an
229 // object into itself.
230 ASSERT(object != value);
231 ASSERT(object != scratch);
232 ASSERT(value != scratch);
233 if (memory_order == kRelease) {
234 StoreRelease(value, address, size);
235 } else {
236 Store(value, address, size);
237 }
238 StoreBarrier(object, value, can_be_smi, scratch);
239}
virtual void StoreRelease(Register src, const Address &address, OperandSize size=kWordBytes)=0
virtual void StoreBarrier(Register object, Register value, CanBeSmi can_be_smi, Register scratch)=0

◆ StoreIntoObjectNoBarrier()

void dart::compiler::AssemblerBase::StoreIntoObjectNoBarrier ( Register  object,
const Address address,
Register  value,
MemoryOrder  memory_order = kRelaxedNonAtomic,
OperandSize  size = kWordBytes 
)

Definition at line 241 of file assembler_base.cc.

245 {
246 if (memory_order == kRelease) {
247 StoreRelease(value, address, size);
248 } else {
249 Store(value, address, size);
250 }
252}
virtual void VerifyStoreNeedsNoWriteBarrier(Register object, Register value)=0

◆ StoreIntoObjectOffset()

void dart::compiler::AssemblerBase::StoreIntoObjectOffset ( Register  object,
int32_t  offset,
Register  value,
CanBeSmi  can_be_smi = kValueCanBeSmi,
MemoryOrder  memory_order = kRelaxedNonAtomic,
Register  scratch = TMP,
OperandSize  size = kWordBytes 
)
virtual

Definition at line 254 of file assembler_base.cc.

260 {
261 StoreIntoObject(object, FieldAddress(object, offset), value, can_be_smi,
262 memory_order, scratch, size);
263}

◆ StoreIntoObjectOffsetNoBarrier()

void dart::compiler::AssemblerBase::StoreIntoObjectOffsetNoBarrier ( Register  object,
int32_t  offset,
Register  value,
MemoryOrder  memory_order = kRelaxedNonAtomic,
OperandSize  size = kWordBytes 
)
virtual

Definition at line 265 of file assembler_base.cc.

269 {
270 StoreIntoObjectNoBarrier(object, FieldAddress(object, offset), value,
271 memory_order, size);
272}

◆ StoreObjectIntoObjectNoBarrier()

virtual void dart::compiler::AssemblerBase::StoreObjectIntoObjectNoBarrier ( Register  object,
const Address address,
const Object value,
MemoryOrder  memory_order = kRelaxedNonAtomic,
OperandSize  size = kWordBytes 
)
pure virtual

◆ StoreObjectIntoObjectOffsetNoBarrier()

void dart::compiler::AssemblerBase::StoreObjectIntoObjectOffsetNoBarrier ( Register  object,
int32_t  offset,
const Object value,
MemoryOrder  memory_order = kRelaxedNonAtomic,
OperandSize  size = kWordBytes 
)

Definition at line 273 of file assembler_base.cc.

278 {
279 StoreObjectIntoObjectNoBarrier(object, FieldAddress(object, offset), value,
280 memory_order, size);
281}

◆ StoreRelease()

virtual void dart::compiler::AssemblerBase::StoreRelease ( Register  src,
const Address address,
OperandSize  size = kWordBytes 
)
pure virtual

◆ StoreReleaseCompressed()

void dart::compiler::AssemblerBase::StoreReleaseCompressed ( Register  src,
const Address address 
)
inline

Definition at line 954 of file assembler_base.h.

954 {
955 StoreRelease(src, address, kObjectBytes);
956 }

◆ StoreReleaseCompressedToOffset()

void dart::compiler::AssemblerBase::StoreReleaseCompressedToOffset ( Register  src,
Register  base,
int32_t  offset = 0 
)
inline

Definition at line 957 of file assembler_base.h.

959 {
961 }
void StoreReleaseToOffset(Register src, Register base, int32_t offset=0, OperandSize size=kWordBytes)

◆ StoreReleaseToOffset()

void dart::compiler::AssemblerBase::StoreReleaseToOffset ( Register  src,
Register  base,
int32_t  offset = 0,
OperandSize  size = kWordBytes 
)

Definition at line 214 of file assembler_base.cc.

217 {
218 StoreRelease(src, Address(base, offset), size);
219}

◆ StoreToOffset()

void dart::compiler::AssemblerBase::StoreToOffset ( Register  src,
Register  base,
int32_t  offset,
OperandSize  sz = kWordBytes 
)
virtual

Reimplemented in dart::compiler::Assembler.

Definition at line 134 of file assembler_base.cc.

137 {
138 Store(src, Address(base, offset), sz);
139}

◆ StoreToSlot() [1/2]

void dart::compiler::AssemblerBase::StoreToSlot ( Register  src,
Register  base,
const Slot slot,
CanBeSmi  can_be_smi,
MemoryOrder  memory_order = kRelaxedNonAtomic,
Register  scratch = TMP 
)

Definition at line 78 of file assembler_base.cc.

83 {
84 if (!slot.is_tagged() || slot.has_untagged_instance()) {
85 // Same as the no barrier case.
86 StoreToSlotNoBarrier(src, base, slot, memory_order);
87 } else if (slot.is_compressed()) {
88 StoreCompressedIntoObjectOffset(base, slot.offset_in_bytes(), src,
89 can_be_smi, memory_order, scratch);
90 } else {
91 StoreIntoObjectOffset(base, slot.offset_in_bytes(), src, can_be_smi,
92 memory_order, scratch);
93 }
94}
void StoreToSlotNoBarrier(Register src, Register base, const Slot &slot, MemoryOrder memory_order=kRelaxedNonAtomic)
void StoreCompressedIntoObjectOffset(Register object, int32_t offset, Register value, CanBeSmi can_be_smi=kValueCanBeSmi, MemoryOrder memory_order=kRelaxedNonAtomic, Register scratch=TMP)

◆ StoreToSlot() [2/2]

void dart::compiler::AssemblerBase::StoreToSlot ( Register  src,
Register  base,
const Slot slot,
MemoryOrder  memory_order = kRelaxedNonAtomic,
Register  scratch = TMP 
)

Definition at line 68 of file assembler_base.cc.

72 {
73 auto const can_be_smi =
74 slot.type().CanBeSmi() ? kValueCanBeSmi : kValueIsNotSmi;
75 StoreToSlot(src, base, slot, can_be_smi, memory_order, scratch);
76}
void StoreToSlot(Register src, Register base, const Slot &slot, CanBeSmi can_be_smi, MemoryOrder memory_order=kRelaxedNonAtomic, Register scratch=TMP)

◆ StoreToSlotNoBarrier()

void dart::compiler::AssemblerBase::StoreToSlotNoBarrier ( Register  src,
Register  base,
const Slot slot,
MemoryOrder  memory_order = kRelaxedNonAtomic 
)

Definition at line 96 of file assembler_base.cc.

99 {
100 if (!slot.is_tagged()) {
101 // The stored value cannot be a floating point or SIMD value.
102 ASSERT(slot.representation() == kUntagged ||
103 RepresentationUtils::IsUnboxedInteger(slot.representation()));
104 // Since we only have a single source register, the stored value must
105 // fit into a register.
106 ASSERT(RepresentationUtils::ValueSize(slot.representation()) <=
107 compiler::target::kWordSize);
108 auto const sz = RepresentationUtils::OperandSize(slot.representation());
109 if (slot.has_untagged_instance()) {
110 StoreToOffset(src, base, slot.offset_in_bytes(), sz);
111 } else {
112 StoreFieldToOffset(src, base, slot.offset_in_bytes(), sz);
113 }
114 } else if (slot.has_untagged_instance()) {
115 // Non-Dart objects do not contain compressed pointers.
116 ASSERT(!slot.is_compressed());
117 StoreToOffset(src, base, slot.offset_in_bytes());
118 } else if (slot.is_compressed()) {
119 StoreCompressedIntoObjectOffsetNoBarrier(base, slot.offset_in_bytes(), src,
120 memory_order);
121 } else {
122 StoreIntoObjectOffsetNoBarrier(base, slot.offset_in_bytes(), src,
123 memory_order);
124 }
125}
virtual void StoreFieldToOffset(Register src, Register base, int32_t offset, OperandSize sz=kWordBytes)
void StoreCompressedIntoObjectOffsetNoBarrier(Register object, int32_t offset, Register value, MemoryOrder memory_order=kRelaxedNonAtomic)
virtual void StoreToOffset(Register src, Register base, int32_t offset, OperandSize sz=kWordBytes)

◆ TryAllocate()

void dart::compiler::AssemblerBase::TryAllocate ( const Class cls,
Label failure,
JumpDistance  distance,
Register  instance_reg,
Register  temp 
)
inline

Definition at line 702 of file assembler_base.h.

706 {
707 TryAllocateObject(target::Class::GetId(cls),
708 target::Class::GetInstanceSize(cls), failure, distance,
709 instance_reg, temp);
710 }
virtual void TryAllocateObject(intptr_t cid, intptr_t instance_size, Label *failure, JumpDistance distance, Register instance_reg, Register temp)=0

◆ TryAllocateObject()

virtual void dart::compiler::AssemblerBase::TryAllocateObject ( intptr_t  cid,
intptr_t  instance_size,
Label failure,
JumpDistance  distance,
Register  instance_reg,
Register  temp 
)
pure virtual

◆ UncheckedEntryOffset()

intptr_t dart::compiler::AssemblerBase::UncheckedEntryOffset ( ) const
inline

Definition at line 1199 of file assembler_base.h.

1199{ return unchecked_entry_offset_; }

◆ Unimplemented()

void dart::compiler::AssemblerBase::Unimplemented ( const char *  message)

Definition at line 577 of file assembler_base.cc.

577 {
578 const char* format = "Unimplemented: %s";
579 const intptr_t len = Utils::SNPrint(nullptr, 0, format, message);
580 char* buffer = reinterpret_cast<char*>(malloc(len + 1));
582 Stop(buffer);
583}
static int SNPrint(char *str, size_t size, const char *format,...) PRINTF_ATTRIBUTE(3
void Stop(const char *message)
void * malloc(size_t size)
Definition allocation.cc:19

◆ Unreachable()

void dart::compiler::AssemblerBase::Unreachable ( const char *  message)

Definition at line 593 of file assembler_base.cc.

593 {
594 const char* format = "Unreachable: %s";
595 const intptr_t len = Utils::SNPrint(nullptr, 0, format, message);
596 char* buffer = reinterpret_cast<char*>(malloc(len + 1));
598 Stop(buffer);
599}

◆ UnrolledMemCopy()

void dart::compiler::AssemblerBase::UnrolledMemCopy ( Register  dst_base,
intptr_t  dst_offset,
Register  src_base,
intptr_t  src_offset,
intptr_t  size,
Register  temp 
)

Definition at line 299 of file assembler_base.cc.

304 {
305 intptr_t offset = 0;
306 if (target::kWordSize >= 8) {
307 while (offset + 8 <= size) {
308 LoadFromOffset(temp, src_base, src_offset + offset, kEightBytes);
309 StoreToOffset(temp, dst_base, dst_offset + offset, kEightBytes);
310 offset += 8;
311 }
312 }
313 while (offset + 4 <= size) {
314 LoadFromOffset(temp, src_base, src_offset + offset, kUnsignedFourBytes);
315 StoreToOffset(temp, dst_base, dst_offset + offset, kUnsignedFourBytes);
316 offset += 4;
317 }
318 while (offset + 2 <= size) {
319 LoadFromOffset(temp, src_base, src_offset + offset, kUnsignedTwoBytes);
320 StoreToOffset(temp, dst_base, dst_offset + offset, kUnsignedTwoBytes);
321 offset += 2;
322 }
323 while (offset + 1 <= size) {
324 LoadFromOffset(temp, src_base, src_offset + offset, kUnsignedByte);
325 StoreToOffset(temp, dst_base, dst_offset + offset, kUnsignedByte);
326 offset += 1;
327 }
328 ASSERT(offset == size);
329}

◆ Untested()

void dart::compiler::AssemblerBase::Untested ( const char *  message)

Definition at line 585 of file assembler_base.cc.

585 {
586 const char* format = "Untested: %s";
587 const intptr_t len = Utils::SNPrint(nullptr, 0, format, message);
588 char* buffer = reinterpret_cast<char*>(malloc(len + 1));
590 Stop(buffer);
591}

◆ VerifySmi()

void dart::compiler::AssemblerBase::VerifySmi ( Register  dst)
inline

Definition at line 1220 of file assembler_base.h.

1220 {
1221 Label done;
1222 BranchIfSmi(dst, &done, kNearJump);
1223 Stop("Expected Smi");
1224 Bind(&done);
1225 }
static void done(const char *config, const char *src, const char *srcOptions, const char *name)
Definition DM.cpp:263
virtual void BranchIfSmi(Register reg, Label *label, JumpDistance distance=kFarJump)=0
virtual void Bind(Label *label)=0

◆ VerifyStoreNeedsNoWriteBarrier()

virtual void dart::compiler::AssemblerBase::VerifyStoreNeedsNoWriteBarrier ( Register  object,
Register  value 
)
privatepure virtual

Member Data Documentation

◆ buffer_

AssemblerBuffer dart::compiler::AssemblerBase::buffer_
protected

Definition at line 1228 of file assembler_base.h.

◆ has_monomorphic_entry_

bool dart::compiler::AssemblerBase::has_monomorphic_entry_ = false
protected

Definition at line 1230 of file assembler_base.h.

◆ prologue_offset_

int32_t dart::compiler::AssemblerBase::prologue_offset_ = -1
protected

Definition at line 1229 of file assembler_base.h.

◆ should_be_aligned_

bool dart::compiler::AssemblerBase::should_be_aligned_ = false
protected

Definition at line 1231 of file assembler_base.h.

◆ unchecked_entry_offset_

intptr_t dart::compiler::AssemblerBase::unchecked_entry_offset_ = 0
protected

Definition at line 1233 of file assembler_base.h.


The documentation for this class was generated from the following files: