V8 Project
v8::internal::MemOperand Class Reference

#include <assembler-arm64.h>

+ Inheritance diagram for v8::internal::MemOperand:
+ Collaboration diagram for v8::internal::MemOperand:

Public Types

enum  PairResult { kNotPair , kPairAB , kPairBA }
 
enum  OffsetAddend { offset_minus_one = -1 , offset_zero = 0 , offset_minus_one = -1 , offset_zero = 0 }
 
enum  OffsetAddend { offset_minus_one = -1 , offset_zero = 0 , offset_minus_one = -1 , offset_zero = 0 }
 

Public Member Functions

 MemOperand ()
 
 MemOperand (Register base, int64_t offset=0, AddrMode addrmode=Offset)
 
 MemOperand (Register base, Register regoffset, Shift shift=LSL, unsigned shift_amount=0)
 
 MemOperand (Register base, Register regoffset, Extend extend, unsigned shift_amount=0)
 
 MemOperand (Register base, const Operand &offset, AddrMode addrmode=Offset)
 
const Registerbase () const
 
const Registerregoffset () const
 
int64_t offset () const
 
AddrMode addrmode () const
 
Shift shift () const
 
Extend extend () const
 
unsigned shift_amount () const
 
bool IsImmediateOffset () const
 
bool IsRegisterOffset () const
 
bool IsPreIndex () const
 
bool IsPostIndex () const
 
Operand OffsetAsOperand () const
 
 MemOperand (Register rn, int32_t offset=0)
 
 MemOperand (Register rn, int32_t unit, int32_t multiplier, OffsetAddend offset_addend=offset_zero)
 
int32_t offset () const
 
bool OffsetIsInt16Encodable () const
 
 MemOperand (Register rn, int64_t offset=0)
 
 MemOperand (Register rn, int64_t unit, int64_t multiplier, OffsetAddend offset_addend=offset_zero)
 
int32_t offset () const
 
bool OffsetIsInt16Encodable () const
 
- Public Member Functions inherited from v8::internal::Operand
 Operand (Register reg, Shift shift=LSL, unsigned shift_amount=0)
 
 Operand (Register reg, Extend extend, unsigned shift_amount=0)
 
template<typename T >
 Operand (Handle< T > handle)
 
template<typename T >
 Operand (T t)
 
template<typename T >
 Operand (T t, RelocInfo::Mode rmode)
 
bool IsImmediate () const
 
bool IsShiftedRegister () const
 
bool IsExtendedRegister () const
 
bool IsZero () const
 
Operand ToExtendedRegister () const
 
Immediate immediate () const
 
int64_t ImmediateValue () const
 
Register reg () const
 
Shift shift () const
 
Extend extend () const
 
unsigned shift_amount () const
 
bool NeedsRelocation (const Assembler *assembler) const
 

Static Public Member Functions

static PairResult AreConsistentForPair (const MemOperand &operandA, const MemOperand &operandB, int access_size_log2=kXRegSizeLog2)
 
- Static Public Member Functions inherited from v8::internal::Operand
static Operand UntagSmi (Register smi)
 
static Operand UntagSmiAndScale (Register smi, int scale)
 

Private Attributes

Register base_
 
Register regoffset_
 
int64_t offset_
 
AddrMode addrmode_
 
Shift shift_
 
Extend extend_
 
unsigned shift_amount_
 
int32_t offset_
 

Friends

class Assembler
 

Detailed Description

Definition at line 703 of file assembler-arm64.h.

Member Enumeration Documentation

◆ OffsetAddend [1/2]

enum v8::internal::MemOperand::OffsetAddend
Enumerator
offset_minus_one 
offset_zero 
offset_minus_one 
offset_zero 

Definition at line 407 of file assembler-mips.h.

407  {
408  offset_minus_one = -1,
409  offset_zero = 0
410  };

◆ OffsetAddend [2/2]

enum v8::internal::MemOperand::OffsetAddend
Enumerator
offset_minus_one 
offset_zero 
offset_minus_one 
offset_zero 

Definition at line 397 of file assembler-mips64.h.

397  {
398  offset_minus_one = -1,
399  offset_zero = 0
400  };

◆ PairResult

enum v8::internal::MemOperand::PairResult
Enumerator
kNotPair 
kPairAB 
kPairBA 

Definition at line 737 of file assembler-arm64.h.

737  {
738  kNotPair, // Can't use a pair instruction.
739  kPairAB, // Can use a pair instruction (operandA has lower address).
740  kPairBA // Can use a pair instruction (operandB has lower address).
741  };

Constructor & Destructor Documentation

◆ MemOperand() [1/9]

v8::internal::MemOperand::MemOperand ( )
inline

Definition at line 454 of file assembler-arm64-inl.h.

Referenced by v8::internal::BASE_EMBEDDED< Visitor >::INLINE().

+ Here is the caller graph for this function:

◆ MemOperand() [2/9]

v8::internal::MemOperand::MemOperand ( Register  base,
int64_t  offset = 0,
AddrMode  addrmode = Offset 
)
inlineexplicit

Definition at line 460 of file assembler-arm64-inl.h.

463  DCHECK(base.Is64Bits() && !base.IsZero());
464 }
AddrMode addrmode() const
const Register & base() const
#define DCHECK(condition)
Definition: logging.h:205

References base(), DCHECK, v8::internal::CPURegister::Is64Bits(), and v8::internal::CPURegister::IsZero().

+ Here is the call graph for this function:

◆ MemOperand() [3/9]

v8::internal::MemOperand::MemOperand ( Register  base,
Register  regoffset,
Shift  shift = LSL,
unsigned  shift_amount = 0 
)
inlineexplicit

Definition at line 482 of file assembler-arm64-inl.h.

References base(), DCHECK, v8::internal::CPURegister::Is64Bits(), v8::internal::CPURegister::IsSP(), v8::internal::CPURegister::IsZero(), v8::internal::LSL, regoffset(), and shift().

+ Here is the call graph for this function:

◆ MemOperand() [4/9]

v8::internal::MemOperand::MemOperand ( Register  base,
Register  regoffset,
Extend  extend,
unsigned  shift_amount = 0 
)
inlineexplicit

Definition at line 467 of file assembler-arm64-inl.h.

473  DCHECK(base.Is64Bits() && !base.IsZero());
474  DCHECK(!regoffset.IsSP());
475  DCHECK((extend == UXTW) || (extend == SXTW) || (extend == SXTX));
476 
477  // SXTX extend mode requires a 64-bit offset register.
478  DCHECK(regoffset.Is64Bits() || (extend != SXTX));
479 }

References base(), DCHECK, extend(), v8::internal::CPURegister::Is64Bits(), v8::internal::CPURegister::IsSP(), v8::internal::CPURegister::IsZero(), regoffset(), v8::internal::SXTW, v8::internal::SXTX, and v8::internal::UXTW.

+ Here is the call graph for this function:

◆ MemOperand() [5/9]

v8::internal::MemOperand::MemOperand ( Register  base,
const Operand offset,
AddrMode  addrmode = Offset 
)
inlineexplicit

Definition at line 494 of file assembler-arm64-inl.h.

496  DCHECK(base.Is64Bits() && !base.IsZero());
497 
498  if (offset.IsImmediate()) {
499  offset_ = offset.ImmediateValue();
500 
501  regoffset_ = NoReg;
502  } else if (offset.IsShiftedRegister()) {
503  DCHECK(addrmode == Offset);
504 
505  regoffset_ = offset.reg();
506  shift_= offset.shift();
507  shift_amount_ = offset.shift_amount();
508 
509  extend_ = NO_EXTEND;
510  offset_ = 0;
511 
512  // These assertions match those in the shifted-register constructor.
514  DCHECK(shift_ == LSL);
515  } else {
516  DCHECK(offset.IsExtendedRegister());
517  DCHECK(addrmode == Offset);
518 
519  regoffset_ = offset.reg();
520  extend_ = offset.extend();
521  shift_amount_ = offset.shift_amount();
522 
523  shift_= NO_SHIFT;
524  offset_ = 0;
525 
526  // These assertions match those in the extended-register constructor.
527  DCHECK(!regoffset_.IsSP());
528  DCHECK((extend_ == UXTW) || (extend_ == SXTW) || (extend_ == SXTX));
529  DCHECK((regoffset_.Is64Bits() || (extend_ != SXTX)));
530  }
531 }

References addrmode(), base(), DCHECK, extend_, v8::internal::CPURegister::Is64Bits(), v8::internal::CPURegister::IsSP(), v8::internal::CPURegister::IsZero(), v8::internal::LSL, v8::internal::NO_EXTEND, v8::internal::NO_SHIFT, v8::internal::Offset, offset(), offset_, regoffset_, shift_, shift_amount_, v8::internal::SXTW, v8::internal::SXTX, and v8::internal::UXTW.

+ Here is the call graph for this function:

◆ MemOperand() [6/9]

v8::internal::MemOperand::MemOperand ( Register  rn,
int32_t  offset = 0 
)
explicit

◆ MemOperand() [7/9]

v8::internal::MemOperand::MemOperand ( Register  rn,
int32_t  unit,
int32_t  multiplier,
OffsetAddend  offset_addend = offset_zero 
)
explicit

◆ MemOperand() [8/9]

v8::internal::MemOperand::MemOperand ( Register  rn,
int64_t  offset = 0 
)
explicit

◆ MemOperand() [9/9]

v8::internal::MemOperand::MemOperand ( Register  rn,
int64_t  unit,
int64_t  multiplier,
OffsetAddend  offset_addend = offset_zero 
)
explicit

Member Function Documentation

◆ addrmode()

AddrMode v8::internal::MemOperand::addrmode ( ) const
inline

Definition at line 724 of file assembler-arm64.h.

724 { return addrmode_; }

References addrmode_.

Referenced by MemOperand().

+ Here is the caller graph for this function:

◆ AreConsistentForPair()

static PairResult v8::internal::MemOperand::AreConsistentForPair ( const MemOperand operandA,
const MemOperand operandB,
int  access_size_log2 = kXRegSizeLog2 
)
static

◆ base()

const Register& v8::internal::MemOperand::base ( ) const
inline

Definition at line 721 of file assembler-arm64.h.

721 { return base_; }

References base_.

Referenced by MemOperand().

+ Here is the caller graph for this function:

◆ extend()

Extend v8::internal::MemOperand::extend ( ) const
inline

Definition at line 726 of file assembler-arm64.h.

726 { return extend_; }

References extend_.

Referenced by MemOperand(), and OffsetAsOperand().

+ Here is the caller graph for this function:

◆ IsImmediateOffset()

bool v8::internal::MemOperand::IsImmediateOffset ( ) const
inline

Definition at line 533 of file assembler-arm64-inl.h.

533  {
534  return (addrmode_ == Offset) && regoffset_.Is(NoReg);
535 }
bool Is(const CPURegister &other) const

References addrmode_, v8::internal::CPURegister::Is(), v8::internal::Offset, and regoffset_.

Referenced by OffsetAsOperand().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ IsPostIndex()

bool v8::internal::MemOperand::IsPostIndex ( ) const
inline

Definition at line 548 of file assembler-arm64-inl.h.

548  {
549  return addrmode_ == PostIndex;
550 }

References addrmode_, and v8::internal::PostIndex.

◆ IsPreIndex()

bool v8::internal::MemOperand::IsPreIndex ( ) const
inline

Definition at line 543 of file assembler-arm64-inl.h.

543  {
544  return addrmode_ == PreIndex;
545 }

References addrmode_, and v8::internal::PreIndex.

◆ IsRegisterOffset()

bool v8::internal::MemOperand::IsRegisterOffset ( ) const
inline

Definition at line 538 of file assembler-arm64-inl.h.

538  {
539  return (addrmode_ == Offset) && !regoffset_.Is(NoReg);
540 }

References addrmode_, v8::internal::CPURegister::Is(), v8::internal::Offset, and regoffset_.

Referenced by OffsetAsOperand().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ offset() [1/3]

int64_t v8::internal::MemOperand::offset ( ) const
inline

Definition at line 723 of file assembler-arm64.h.

723 { return offset_; }

References offset_.

Referenced by v8::internal::LCodeGen::EmitLoadDoubleRegister(), v8::internal::LCodeGen::GeneratePrologue(), MemOperand(), OffsetAsOperand(), and v8::internal::BASE_EMBEDDED< Visitor >::set_offset().

+ Here is the caller graph for this function:

◆ offset() [2/3]

int32_t v8::internal::MemOperand::offset ( ) const
inline

Definition at line 415 of file assembler-mips.h.

415 { return offset_; }

References offset_.

◆ offset() [3/3]

int32_t v8::internal::MemOperand::offset ( ) const
inline

Definition at line 405 of file assembler-mips64.h.

405 { return offset_; }

References offset_.

◆ OffsetAsOperand()

Operand v8::internal::MemOperand::OffsetAsOperand ( ) const
inline

Definition at line 552 of file assembler-arm64-inl.h.

552  {
553  if (IsImmediateOffset()) {
554  return offset();
555  } else {
557  if (extend() == NO_EXTEND) {
558  return Operand(regoffset(), shift(), shift_amount());
559  } else {
560  return Operand(regoffset(), extend(), shift_amount());
561  }
562  }
563 }
Operand(Register reg, Shift shift=LSL, unsigned shift_amount=0)

References DCHECK, extend(), IsImmediateOffset(), IsRegisterOffset(), v8::internal::NO_EXTEND, offset(), v8::internal::Operand::Operand(), regoffset(), shift(), and shift_amount().

+ Here is the call graph for this function:

◆ OffsetIsInt16Encodable() [1/2]

bool v8::internal::MemOperand::OffsetIsInt16Encodable ( ) const
inline

Definition at line 417 of file assembler-mips.h.

417  {
418  return is_int16(offset_);
419  }

References offset_.

◆ OffsetIsInt16Encodable() [2/2]

bool v8::internal::MemOperand::OffsetIsInt16Encodable ( ) const
inline

Definition at line 407 of file assembler-mips64.h.

407  {
408  return is_int16(offset_);
409  }

References offset_.

◆ regoffset()

const Register& v8::internal::MemOperand::regoffset ( ) const
inline

Definition at line 722 of file assembler-arm64.h.

722 { return regoffset_; }

References regoffset_.

Referenced by MemOperand(), and OffsetAsOperand().

+ Here is the caller graph for this function:

◆ shift()

Shift v8::internal::MemOperand::shift ( ) const
inline

Definition at line 725 of file assembler-arm64.h.

725 { return shift_; }

References shift_.

Referenced by MemOperand(), and OffsetAsOperand().

+ Here is the caller graph for this function:

◆ shift_amount()

unsigned v8::internal::MemOperand::shift_amount ( ) const
inline

Definition at line 727 of file assembler-arm64.h.

727 { return shift_amount_; }

References shift_amount_.

Referenced by OffsetAsOperand().

+ Here is the caller graph for this function:

Friends And Related Function Documentation

◆ Assembler

Assembler
friend

Definition at line 424 of file assembler-mips.h.

Member Data Documentation

◆ addrmode_

AddrMode v8::internal::MemOperand::addrmode_
private

◆ base_

Register v8::internal::MemOperand::base_
private

Definition at line 748 of file assembler-arm64.h.

Referenced by base().

◆ extend_

Extend v8::internal::MemOperand::extend_
private

Definition at line 753 of file assembler-arm64.h.

Referenced by extend(), and MemOperand().

◆ offset_ [1/2]

◆ offset_ [2/2]

int32_t v8::internal::MemOperand::offset_
private

Definition at line 422 of file assembler-mips.h.

◆ regoffset_

Register v8::internal::MemOperand::regoffset_
private

Definition at line 749 of file assembler-arm64.h.

Referenced by IsImmediateOffset(), IsRegisterOffset(), MemOperand(), and regoffset().

◆ shift_

Shift v8::internal::MemOperand::shift_
private

Definition at line 752 of file assembler-arm64.h.

Referenced by MemOperand(), and shift().

◆ shift_amount_

unsigned v8::internal::MemOperand::shift_amount_
private

Definition at line 754 of file assembler-arm64.h.

Referenced by MemOperand(), and shift_amount().


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