Flutter Engine
The Flutter Engine
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 AddScaled (Register dst, Register base, Register index, ScaleFactor scale, int32_t disp)=0
 
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 1212 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()
Definition: thread_state.h:27
ObjectPoolBuilder & object_pool_builder()

◆ ~AssemblerBase()

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

Definition at line 30 of file assembler_base.cc.

30{}

Member Function Documentation

◆ AddScaled()

virtual void dart::compiler::AssemblerBase::AddScaled ( Register  dst,
Register  base,
Register  index,
ScaleFactor  scale,
int32_t  disp 
)
pure virtual

◆ 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 1203 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)
SeparatedVector2 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
uint32_t uint32_t * format
va_start(args, format)
va_end(args)
const String & AllocateString(const char *buffer)
Definition: runtime_api.cc:235
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir Path to the cache directory This is different from the persistent_cache_path in embedder which is used for Skia shader cache icu native lib Path to the library file that exports the ICU data vm service The hostname IP address on which the Dart VM Service should be served If not defaults to or::depending on whether ipv6 is specified vm service A custom Dart VM Service port The default is to pick a randomly available open port disable vm Disable the Dart VM Service The Dart VM Service is never available in release mode disable vm service Disable mDNS Dart VM Service publication Bind to the IPv6 localhost address for the Dart VM Service Ignored if vm service host is set endless trace buffer
Definition: switches.h:126

◆ comments()

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

Definition at line 1201 of file assembler_base.h.

1201{ 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}
GLenum type
virtual void CompareImmediate(Register reg, target::word imm, OperandSize width=kWordBytes)=0
void LoadAbstractTypeNullability(Register dst, Register type)
uint8_t value

◆ 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 1180 of file assembler_base.h.

1180{ 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
dst
Definition: cp.py:12

◆ 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 1144 of file assembler_base.h.

1144 {
1145 return FinalizeHashForSize(/*bit_size=*/kBitsPerInt32, hash, scratch);
1146 }
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 1174 of file assembler_base.h.

1174 {
1176 }
void FinalizeInstructions(const MemoryRegion &region)
ClipOpAndAA opAA SkRegion region
Definition: SkRecords.h:238

◆ GetPointerOffsets()

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

Definition at line 1182 of file assembler_base.h.

1182 {
1183 return buffer_.pointer_offsets();
1184 }
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 =
365
366 while (CodeSize() < offset) {
367 Breakpoint();
368 }
369 ASSERT(CodeSize() == offset);
370
371 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
374
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:120
static constexpr intptr_t kWordSize
Definition: runtime_api.h:274
intptr_t word
Definition: globals.h:500

◆ 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());
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 {
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}
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
Definition: switches.h:259

◆ 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()) <=
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);
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());
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 {
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()) <=
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 {
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
static uword GetInstanceSize(const dart::Class &handle)
Definition: runtime_api.cc:515
static classid_t GetId(const dart::Class &handle)
Definition: runtime_api.cc:441

◆ 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 1210 of file assembler_base.h.

1210{ 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 1231 of file assembler_base.h.

1231 {
1232 Label done;
1234 Stop("Expected Smi");
1235 Bind(&done);
1236 }
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 1239 of file assembler_base.h.

◆ has_monomorphic_entry_

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

Definition at line 1241 of file assembler_base.h.

◆ prologue_offset_

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

Definition at line 1240 of file assembler_base.h.

◆ should_be_aligned_

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

Definition at line 1242 of file assembler_base.h.

◆ unchecked_entry_offset_

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

Definition at line 1244 of file assembler_base.h.


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