V8 Project
v8::internal::compiler::ArmOperandGenerator Class Reference
+ Inheritance diagram for v8::internal::compiler::ArmOperandGenerator:
+ Collaboration diagram for v8::internal::compiler::ArmOperandGenerator:

Public Member Functions

 ArmOperandGenerator (InstructionSelector *selector)
 
InstructionOperandUseOperand (Node *node, InstructionCode opcode)
 
bool CanBeImmediate (Node *node, InstructionCode opcode)
 
- Public Member Functions inherited from v8::internal::compiler::OperandGenerator
 OperandGenerator (InstructionSelector *selector)
 
InstructionOperandDefineAsRegister (Node *node)
 
InstructionOperandDefineSameAsFirst (Node *result)
 
InstructionOperandDefineAsFixed (Node *node, Register reg)
 
InstructionOperandDefineAsFixed (Node *node, DoubleRegister reg)
 
InstructionOperandDefineAsConstant (Node *node)
 
InstructionOperandDefineAsLocation (Node *node, LinkageLocation location, MachineType type)
 
InstructionOperandUse (Node *node)
 
InstructionOperandUseRegister (Node *node)
 
InstructionOperandUseUnique (Node *node)
 
InstructionOperandUseUniqueRegister (Node *node)
 
InstructionOperandUseFixed (Node *node, Register reg)
 
InstructionOperandUseFixed (Node *node, DoubleRegister reg)
 
InstructionOperandUseImmediate (Node *node)
 
InstructionOperandUseLocation (Node *node, LinkageLocation location, MachineType type)
 
InstructionOperandTempRegister ()
 
InstructionOperandTempDoubleRegister ()
 
InstructionOperandTempRegister (Register reg)
 
InstructionOperandTempImmediate (int32_t imm)
 
InstructionOperandLabel (BasicBlock *block)
 

Private Member Functions

bool ImmediateFitsAddrMode1Instruction (int32_t imm) const
 

Additional Inherited Members

- Protected Member Functions inherited from v8::internal::compiler::OperandGenerator
Graphgraph () const
 
InstructionSelector * selector () const
 
InstructionSequencesequence () const
 
Isolateisolate () const
 
Zonezone () const
 

Detailed Description

Definition at line 14 of file instruction-selector-arm.cc.

Constructor & Destructor Documentation

◆ ArmOperandGenerator()

v8::internal::compiler::ArmOperandGenerator::ArmOperandGenerator ( InstructionSelector *  selector)
inlineexplicit

Definition at line 16 of file instruction-selector-arm.cc.

Member Function Documentation

◆ CanBeImmediate()

bool v8::internal::compiler::ArmOperandGenerator::CanBeImmediate ( Node *  node,
InstructionCode  opcode 
)
inline

Definition at line 26 of file instruction-selector-arm.cc.

26  {
27  Int32Matcher m(node);
28  if (!m.HasValue()) return false;
29  int32_t value = m.Value();
30  switch (ArchOpcodeField::decode(opcode)) {
31  case kArmAnd:
32  case kArmMov:
33  case kArmMvn:
34  case kArmBic:
35  return ImmediateFitsAddrMode1Instruction(value) ||
37 
38  case kArmAdd:
39  case kArmSub:
40  case kArmCmp:
41  case kArmCmn:
42  return ImmediateFitsAddrMode1Instruction(value) ||
44 
45  case kArmTst:
46  case kArmTeq:
47  case kArmOrr:
48  case kArmEor:
49  case kArmRsb:
51 
52  case kArmVldrF32:
53  case kArmVstrF32:
54  case kArmVldrF64:
55  case kArmVstrF64:
56  return value >= -1020 && value <= 1020 && (value % 4) == 0;
57 
58  case kArmLdrb:
59  case kArmLdrsb:
60  case kArmStrb:
61  case kArmLdr:
62  case kArmStr:
63  case kArmStoreWriteBarrier:
64  return value >= -4095 && value <= 4095;
65 
66  case kArmLdrh:
67  case kArmLdrsh:
68  case kArmStrh:
69  return value >= -255 && value <= 255;
70 
71  case kArchCallCodeObject:
72  case kArchCallJSFunction:
73  case kArchJmp:
74  case kArchNop:
75  case kArchRet:
76  case kArchTruncateDoubleToI:
77  case kArmMul:
78  case kArmMla:
79  case kArmMls:
80  case kArmSdiv:
81  case kArmUdiv:
82  case kArmBfc:
83  case kArmUbfx:
84  case kArmVcmpF64:
85  case kArmVaddF64:
86  case kArmVsubF64:
87  case kArmVmulF64:
88  case kArmVmlaF64:
89  case kArmVmlsF64:
90  case kArmVdivF64:
91  case kArmVmodF64:
92  case kArmVnegF64:
93  case kArmVsqrtF64:
94  case kArmVcvtF32F64:
95  case kArmVcvtF64F32:
96  case kArmVcvtF64S32:
97  case kArmVcvtF64U32:
98  case kArmVcvtS32F64:
99  case kArmVcvtU32F64:
100  case kArmPush:
101  return false;
102  }
103  UNREACHABLE();
104  return false;
105  }
#define UNREACHABLE()
Definition: logging.h:30
int int32_t
Definition: unicode.cc:24
IntMatcher< int32_t, IrOpcode::kInt32Constant > Int32Matcher
Definition: node-matchers.h:79

References v8::internal::BitFieldBase< T, shift, size, uint32_t >::decode(), ImmediateFitsAddrMode1Instruction(), and UNREACHABLE.

Referenced by v8::internal::compiler::TryMatchImmediateOrShift(), and UseOperand().

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

◆ ImmediateFitsAddrMode1Instruction()

bool v8::internal::compiler::ArmOperandGenerator::ImmediateFitsAddrMode1Instruction ( int32_t  imm) const
inlineprivate

Definition at line 108 of file instruction-selector-arm.cc.

108  {
110  }
static bool ImmediateFitsAddrMode1Instruction(int32_t imm32)

References v8::internal::Assembler::ImmediateFitsAddrMode1Instruction().

Referenced by CanBeImmediate().

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

◆ UseOperand()

InstructionOperand* v8::internal::compiler::ArmOperandGenerator::UseOperand ( Node *  node,
InstructionCode  opcode 
)
inline

Definition at line 19 of file instruction-selector-arm.cc.

19  {
20  if (CanBeImmediate(node, opcode)) {
21  return UseImmediate(node);
22  }
23  return UseRegister(node);
24  }
bool CanBeImmediate(Node *node, InstructionCode opcode)
InstructionOperand * UseImmediate(Node *node)
InstructionOperand * UseRegister(Node *node)

References CanBeImmediate(), v8::internal::compiler::OperandGenerator::UseImmediate(), and v8::internal::compiler::OperandGenerator::UseRegister().

+ Here is the call graph for this function:

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