OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 } | 153 } |
154 | 154 |
155 #define DEFINE_GETTER(Name, HighBit, LowBit, Func) \ | 155 #define DEFINE_GETTER(Name, HighBit, LowBit, Func) \ |
156 int64_t Name() const { return Func(HighBit, LowBit); } | 156 int64_t Name() const { return Func(HighBit, LowBit); } |
157 INSTRUCTION_FIELDS_LIST(DEFINE_GETTER) | 157 INSTRUCTION_FIELDS_LIST(DEFINE_GETTER) |
158 #undef DEFINE_GETTER | 158 #undef DEFINE_GETTER |
159 | 159 |
160 // ImmPCRel is a compound field (not present in INSTRUCTION_FIELDS_LIST), | 160 // ImmPCRel is a compound field (not present in INSTRUCTION_FIELDS_LIST), |
161 // formed from ImmPCRelLo and ImmPCRelHi. | 161 // formed from ImmPCRelLo and ImmPCRelHi. |
162 int ImmPCRel() const { | 162 int ImmPCRel() const { |
| 163 ASSERT(IsPCRelAddressing()); |
163 int const offset = ((ImmPCRelHi() << ImmPCRelLo_width) | ImmPCRelLo()); | 164 int const offset = ((ImmPCRelHi() << ImmPCRelLo_width) | ImmPCRelLo()); |
164 int const width = ImmPCRelLo_width + ImmPCRelHi_width; | 165 int const width = ImmPCRelLo_width + ImmPCRelHi_width; |
165 return signed_bitextract_32(width-1, 0, offset); | 166 return signed_bitextract_32(width - 1, 0, offset); |
166 } | 167 } |
167 | 168 |
168 uint64_t ImmLogical(); | 169 uint64_t ImmLogical(); |
169 float ImmFP32(); | 170 float ImmFP32(); |
170 double ImmFP64(); | 171 double ImmFP64(); |
171 | 172 |
172 LSDataSize SizeLSPair() const { | 173 LSDataSize SizeLSPair() const { |
173 return CalcLSPairDataSize( | 174 return CalcLSPairDataSize( |
174 static_cast<LoadStorePairOp>(Mask(LoadStorePairMask))); | 175 static_cast<LoadStorePairOp>(Mask(LoadStorePairMask))); |
175 } | 176 } |
(...skipping 20 matching lines...) Expand all Loading... |
196 } | 197 } |
197 | 198 |
198 bool IsLdrLiteralX() const { | 199 bool IsLdrLiteralX() const { |
199 return Mask(LoadLiteralMask) == LDR_x_lit; | 200 return Mask(LoadLiteralMask) == LDR_x_lit; |
200 } | 201 } |
201 | 202 |
202 bool IsPCRelAddressing() const { | 203 bool IsPCRelAddressing() const { |
203 return Mask(PCRelAddressingFMask) == PCRelAddressingFixed; | 204 return Mask(PCRelAddressingFMask) == PCRelAddressingFixed; |
204 } | 205 } |
205 | 206 |
| 207 bool IsAdr() const { |
| 208 return Mask(PCRelAddressingMask) == ADR; |
| 209 } |
| 210 |
206 bool IsLogicalImmediate() const { | 211 bool IsLogicalImmediate() const { |
207 return Mask(LogicalImmediateFMask) == LogicalImmediateFixed; | 212 return Mask(LogicalImmediateFMask) == LogicalImmediateFixed; |
208 } | 213 } |
209 | 214 |
210 bool IsAddSubImmediate() const { | 215 bool IsAddSubImmediate() const { |
211 return Mask(AddSubImmediateFMask) == AddSubImmediateFixed; | 216 return Mask(AddSubImmediateFMask) == AddSubImmediateFixed; |
212 } | 217 } |
213 | 218 |
| 219 bool IsAddSubShifted() const { |
| 220 return Mask(AddSubShiftedFMask) == AddSubShiftedFixed; |
| 221 } |
| 222 |
214 bool IsAddSubExtended() const { | 223 bool IsAddSubExtended() const { |
215 return Mask(AddSubExtendedFMask) == AddSubExtendedFixed; | 224 return Mask(AddSubExtendedFMask) == AddSubExtendedFixed; |
216 } | 225 } |
217 | 226 |
218 // Match any loads or stores, including pairs. | 227 // Match any loads or stores, including pairs. |
219 bool IsLoadOrStore() const { | 228 bool IsLoadOrStore() const { |
220 return Mask(LoadStoreAnyFMask) == LoadStoreAnyFixed; | 229 return Mask(LoadStoreAnyFMask) == LoadStoreAnyFixed; |
221 } | 230 } |
222 | 231 |
223 // Match any loads, including pairs. | 232 // Match any loads, including pairs. |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
380 | 389 |
381 template<typename T> V8_INLINE static Instruction* Cast(T src) { | 390 template<typename T> V8_INLINE static Instruction* Cast(T src) { |
382 return reinterpret_cast<Instruction*>(src); | 391 return reinterpret_cast<Instruction*>(src); |
383 } | 392 } |
384 | 393 |
385 V8_INLINE ptrdiff_t DistanceTo(Instruction* target) { | 394 V8_INLINE ptrdiff_t DistanceTo(Instruction* target) { |
386 return reinterpret_cast<Address>(target) - reinterpret_cast<Address>(this); | 395 return reinterpret_cast<Address>(target) - reinterpret_cast<Address>(this); |
387 } | 396 } |
388 | 397 |
389 | 398 |
| 399 static const int ImmPCRelRangeBitwidth = 21; |
| 400 static bool IsValidPCRelOffset(int offset) { |
| 401 return is_int21(offset); |
| 402 } |
390 void SetPCRelImmTarget(Instruction* target); | 403 void SetPCRelImmTarget(Instruction* target); |
391 void SetBranchImmTarget(Instruction* target); | 404 void SetBranchImmTarget(Instruction* target); |
392 }; | 405 }; |
393 | 406 |
394 | 407 |
395 // Where Instruction looks at instructions generated by the Assembler, | 408 // Where Instruction looks at instructions generated by the Assembler, |
396 // InstructionSequence looks at instructions sequences generated by the | 409 // InstructionSequence looks at instructions sequences generated by the |
397 // MacroAssembler. | 410 // MacroAssembler. |
398 class InstructionSequence : public Instruction { | 411 class InstructionSequence : public Instruction { |
399 public: | 412 public: |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
492 TRACE_ENABLE = 1 << 6, | 505 TRACE_ENABLE = 1 << 6, |
493 TRACE_DISABLE = 2 << 6, | 506 TRACE_DISABLE = 2 << 6, |
494 TRACE_OVERRIDE = 3 << 6 | 507 TRACE_OVERRIDE = 3 << 6 |
495 }; | 508 }; |
496 | 509 |
497 | 510 |
498 } } // namespace v8::internal | 511 } } // namespace v8::internal |
499 | 512 |
500 | 513 |
501 #endif // V8_ARM64_INSTRUCTIONS_ARM64_H_ | 514 #endif // V8_ARM64_INSTRUCTIONS_ARM64_H_ |
OLD | NEW |