| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_ARM64_ASSEMBLER_ARM64_H_ | 5 #ifndef V8_ARM64_ASSEMBLER_ARM64_H_ |
| 6 #define V8_ARM64_ASSEMBLER_ARM64_H_ | 6 #define V8_ARM64_ASSEMBLER_ARM64_H_ |
| 7 | 7 |
| 8 #include <deque> | 8 #include <deque> |
| 9 #include <list> | 9 #include <list> |
| 10 #include <map> | 10 #include <map> |
| (...skipping 1477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1488 void ldp(const CPURegister& rt, const CPURegister& rt2, | 1488 void ldp(const CPURegister& rt, const CPURegister& rt2, |
| 1489 const MemOperand& src); | 1489 const MemOperand& src); |
| 1490 | 1490 |
| 1491 // Store integer or FP register pair. | 1491 // Store integer or FP register pair. |
| 1492 void stp(const CPURegister& rt, const CPURegister& rt2, | 1492 void stp(const CPURegister& rt, const CPURegister& rt2, |
| 1493 const MemOperand& dst); | 1493 const MemOperand& dst); |
| 1494 | 1494 |
| 1495 // Load word pair with sign extension. | 1495 // Load word pair with sign extension. |
| 1496 void ldpsw(const Register& rt, const Register& rt2, const MemOperand& src); | 1496 void ldpsw(const Register& rt, const Register& rt2, const MemOperand& src); |
| 1497 | 1497 |
| 1498 // Load integer or FP register pair, non-temporal. | |
| 1499 void ldnp(const CPURegister& rt, const CPURegister& rt2, | |
| 1500 const MemOperand& src); | |
| 1501 | |
| 1502 // Store integer or FP register pair, non-temporal. | |
| 1503 void stnp(const CPURegister& rt, const CPURegister& rt2, | |
| 1504 const MemOperand& dst); | |
| 1505 | |
| 1506 // Load literal to register from a pc relative address. | 1498 // Load literal to register from a pc relative address. |
| 1507 void ldr_pcrel(const CPURegister& rt, int imm19); | 1499 void ldr_pcrel(const CPURegister& rt, int imm19); |
| 1508 | 1500 |
| 1509 // Load literal to register. | 1501 // Load literal to register. |
| 1510 void ldr(const CPURegister& rt, const Immediate& imm); | 1502 void ldr(const CPURegister& rt, const Immediate& imm); |
| 1511 | 1503 |
| 1512 // Move instructions. The default shift of -1 indicates that the move | 1504 // Move instructions. The default shift of -1 indicates that the move |
| 1513 // instruction will calculate an appropriate 16-bit immediate and left shift | 1505 // instruction will calculate an appropriate 16-bit immediate and left shift |
| 1514 // that is equal to the 64-bit immediate argument. If an explicit left shift | 1506 // that is equal to the 64-bit immediate argument. If an explicit left shift |
| 1515 // is specified (0, 16, 32 or 48), the immediate must be a 16-bit value. | 1507 // is specified (0, 16, 32 or 48), the immediate must be a 16-bit value. |
| (...skipping 487 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2003 | 1995 |
| 2004 // Find an appropriate LoadStoreOp or LoadStorePairOp for the specified | 1996 // Find an appropriate LoadStoreOp or LoadStorePairOp for the specified |
| 2005 // registers. Only simple loads are supported; sign- and zero-extension (such | 1997 // registers. Only simple loads are supported; sign- and zero-extension (such |
| 2006 // as in LDPSW_x or LDRB_w) are not supported. | 1998 // as in LDPSW_x or LDRB_w) are not supported. |
| 2007 static inline LoadStoreOp LoadOpFor(const CPURegister& rt); | 1999 static inline LoadStoreOp LoadOpFor(const CPURegister& rt); |
| 2008 static inline LoadStorePairOp LoadPairOpFor(const CPURegister& rt, | 2000 static inline LoadStorePairOp LoadPairOpFor(const CPURegister& rt, |
| 2009 const CPURegister& rt2); | 2001 const CPURegister& rt2); |
| 2010 static inline LoadStoreOp StoreOpFor(const CPURegister& rt); | 2002 static inline LoadStoreOp StoreOpFor(const CPURegister& rt); |
| 2011 static inline LoadStorePairOp StorePairOpFor(const CPURegister& rt, | 2003 static inline LoadStorePairOp StorePairOpFor(const CPURegister& rt, |
| 2012 const CPURegister& rt2); | 2004 const CPURegister& rt2); |
| 2013 static inline LoadStorePairNonTemporalOp LoadPairNonTemporalOpFor( | |
| 2014 const CPURegister& rt, const CPURegister& rt2); | |
| 2015 static inline LoadStorePairNonTemporalOp StorePairNonTemporalOpFor( | |
| 2016 const CPURegister& rt, const CPURegister& rt2); | |
| 2017 static inline LoadLiteralOp LoadLiteralOpFor(const CPURegister& rt); | 2005 static inline LoadLiteralOp LoadLiteralOpFor(const CPURegister& rt); |
| 2018 | 2006 |
| 2019 // Remove the specified branch from the unbound label link chain. | 2007 // Remove the specified branch from the unbound label link chain. |
| 2020 // If available, a veneer for this label can be used for other branches in the | 2008 // If available, a veneer for this label can be used for other branches in the |
| 2021 // chain if the link chain cannot be fixed up without this branch. | 2009 // chain if the link chain cannot be fixed up without this branch. |
| 2022 void RemoveBranchFromLabelLinkChain(Instruction* branch, | 2010 void RemoveBranchFromLabelLinkChain(Instruction* branch, |
| 2023 Label* label, | 2011 Label* label, |
| 2024 Instruction* label_veneer = NULL); | 2012 Instruction* label_veneer = NULL); |
| 2025 | 2013 |
| 2026 private: | 2014 private: |
| 2027 // Instruction helpers. | 2015 // Instruction helpers. |
| 2028 void MoveWide(const Register& rd, | 2016 void MoveWide(const Register& rd, |
| 2029 uint64_t imm, | 2017 uint64_t imm, |
| 2030 int shift, | 2018 int shift, |
| 2031 MoveWideImmediateOp mov_op); | 2019 MoveWideImmediateOp mov_op); |
| 2032 void DataProcShiftedRegister(const Register& rd, | 2020 void DataProcShiftedRegister(const Register& rd, |
| 2033 const Register& rn, | 2021 const Register& rn, |
| 2034 const Operand& operand, | 2022 const Operand& operand, |
| 2035 FlagsUpdate S, | 2023 FlagsUpdate S, |
| 2036 Instr op); | 2024 Instr op); |
| 2037 void DataProcExtendedRegister(const Register& rd, | 2025 void DataProcExtendedRegister(const Register& rd, |
| 2038 const Register& rn, | 2026 const Register& rn, |
| 2039 const Operand& operand, | 2027 const Operand& operand, |
| 2040 FlagsUpdate S, | 2028 FlagsUpdate S, |
| 2041 Instr op); | 2029 Instr op); |
| 2042 void LoadStorePairNonTemporal(const CPURegister& rt, | |
| 2043 const CPURegister& rt2, | |
| 2044 const MemOperand& addr, | |
| 2045 LoadStorePairNonTemporalOp op); | |
| 2046 void ConditionalSelect(const Register& rd, | 2030 void ConditionalSelect(const Register& rd, |
| 2047 const Register& rn, | 2031 const Register& rn, |
| 2048 const Register& rm, | 2032 const Register& rm, |
| 2049 Condition cond, | 2033 Condition cond, |
| 2050 ConditionalSelectOp op); | 2034 ConditionalSelectOp op); |
| 2051 void DataProcessing1Source(const Register& rd, | 2035 void DataProcessing1Source(const Register& rd, |
| 2052 const Register& rn, | 2036 const Register& rn, |
| 2053 DataProcessing1SourceOp op); | 2037 DataProcessing1SourceOp op); |
| 2054 void DataProcessing3Source(const Register& rd, | 2038 void DataProcessing3Source(const Register& rd, |
| 2055 const Register& rn, | 2039 const Register& rn, |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2311 class EnsureSpace BASE_EMBEDDED { | 2295 class EnsureSpace BASE_EMBEDDED { |
| 2312 public: | 2296 public: |
| 2313 explicit EnsureSpace(Assembler* assembler) { | 2297 explicit EnsureSpace(Assembler* assembler) { |
| 2314 assembler->CheckBufferSpace(); | 2298 assembler->CheckBufferSpace(); |
| 2315 } | 2299 } |
| 2316 }; | 2300 }; |
| 2317 | 2301 |
| 2318 } } // namespace v8::internal | 2302 } } // namespace v8::internal |
| 2319 | 2303 |
| 2320 #endif // V8_ARM64_ASSEMBLER_ARM64_H_ | 2304 #endif // V8_ARM64_ASSEMBLER_ARM64_H_ |
| OLD | NEW |