| OLD | NEW | 
|---|
| 1 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file | 
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a | 
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. | 
| 4 | 4 | 
| 5 #ifndef VM_ASSEMBLER_ARM64_H_ | 5 #ifndef VM_ASSEMBLER_ARM64_H_ | 
| 6 #define VM_ASSEMBLER_ARM64_H_ | 6 #define VM_ASSEMBLER_ARM64_H_ | 
| 7 | 7 | 
| 8 #ifndef VM_ASSEMBLER_H_ | 8 #ifndef VM_ASSEMBLER_H_ | 
| 9 #error Do not include assembler_arm64.h directly; use assembler.h instead. | 9 #error Do not include assembler_arm64.h directly; use assembler.h instead. | 
| 10 #endif | 10 #endif | 
| (...skipping 1180 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1191   void SmiUntag(Register dst, Register src) { | 1191   void SmiUntag(Register dst, Register src) { | 
| 1192     AsrImmediate(dst, src, kSmiTagSize); | 1192     AsrImmediate(dst, src, kSmiTagSize); | 
| 1193   } | 1193   } | 
| 1194   void SmiTag(Register reg) { | 1194   void SmiTag(Register reg) { | 
| 1195     LslImmediate(reg, reg, kSmiTagSize); | 1195     LslImmediate(reg, reg, kSmiTagSize); | 
| 1196   } | 1196   } | 
| 1197   void SmiTag(Register dst, Register src) { | 1197   void SmiTag(Register dst, Register src) { | 
| 1198     LslImmediate(dst, src, kSmiTagSize); | 1198     LslImmediate(dst, src, kSmiTagSize); | 
| 1199   } | 1199   } | 
| 1200 | 1200 | 
| 1201   // Branching to ExternalLabels. |  | 
| 1202   void Branch(const ExternalLabel* label) { |  | 
| 1203     LoadExternalLabel(TMP, label); |  | 
| 1204     br(TMP); |  | 
| 1205   } |  | 
| 1206 |  | 
| 1207   void Branch(const StubEntry& stub_entry); | 1201   void Branch(const StubEntry& stub_entry); | 
| 1208 |  | 
| 1209   // Fixed length branch to label. |  | 
| 1210   void BranchPatchable(const ExternalLabel* label) { |  | 
| 1211     // TODO(zra): Use LoadExternalLabelFixed if possible. |  | 
| 1212     LoadImmediateFixed(TMP, label->address()); |  | 
| 1213     br(TMP); |  | 
| 1214   } |  | 
| 1215 |  | 
| 1216   void BranchPatchable(const StubEntry& stub_entry); | 1202   void BranchPatchable(const StubEntry& stub_entry); | 
| 1217 | 1203 | 
| 1218   void BranchLink(const ExternalLabel* label) { | 1204   void BranchLink(const ExternalLabel* label); | 
| 1219     LoadExternalLabel(TMP, label); |  | 
| 1220     blr(TMP); |  | 
| 1221   } |  | 
| 1222 |  | 
| 1223   void BranchLink(const StubEntry& stub_entry); | 1205   void BranchLink(const StubEntry& stub_entry); | 
| 1224 | 1206 | 
| 1225   // BranchLinkPatchable must be a fixed-length sequence so we can patch it | 1207   // BranchLinkPatchable must be a fixed-length sequence so we can patch it | 
| 1226   // with the debugger. | 1208   // with the debugger. | 
| 1227   void BranchLinkPatchable(const ExternalLabel* label) { |  | 
| 1228     LoadExternalLabelFixed(TMP, label, kPatchable); |  | 
| 1229     blr(TMP); |  | 
| 1230   } |  | 
| 1231 |  | 
| 1232   void BranchLinkPatchable(const StubEntry& stub_entry); | 1209   void BranchLinkPatchable(const StubEntry& stub_entry); | 
| 1233 | 1210 | 
| 1234   // Macros accepting a pp Register argument may attempt to load values from | 1211   // Macros accepting a pp Register argument may attempt to load values from | 
| 1235   // the object pool when possible. Unless you are sure that the untagged object | 1212   // the object pool when possible. Unless you are sure that the untagged object | 
| 1236   // pool pointer is in another register, or that it is not available at all, | 1213   // pool pointer is in another register, or that it is not available at all, | 
| 1237   // PP should be passed for pp. | 1214   // PP should be passed for pp. | 
| 1238   void AddImmediate(Register dest, Register rn, int64_t imm); | 1215   void AddImmediate(Register dest, Register rn, int64_t imm); | 
| 1239   void AddImmediateSetFlags(Register dest, Register rn, int64_t imm); | 1216   void AddImmediateSetFlags(Register dest, Register rn, int64_t imm); | 
| 1240   void SubImmediateSetFlags(Register dest, Register rn, int64_t imm); | 1217   void SubImmediateSetFlags(Register dest, Register rn, int64_t imm); | 
| 1241   void AndImmediate(Register rd, Register rn, int64_t imm); | 1218   void AndImmediate(Register rd, Register rn, int64_t imm); | 
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1441     intptr_t pc_offset_; | 1418     intptr_t pc_offset_; | 
| 1442     const String& comment_; | 1419     const String& comment_; | 
| 1443 | 1420 | 
| 1444     DISALLOW_COPY_AND_ASSIGN(CodeComment); | 1421     DISALLOW_COPY_AND_ASSIGN(CodeComment); | 
| 1445   }; | 1422   }; | 
| 1446 | 1423 | 
| 1447   GrowableArray<CodeComment*> comments_; | 1424   GrowableArray<CodeComment*> comments_; | 
| 1448 | 1425 | 
| 1449   bool constant_pool_allowed_; | 1426   bool constant_pool_allowed_; | 
| 1450 | 1427 | 
|  | 1428   void Branch(const ExternalLabel* label); | 
|  | 1429   void BranchPatchable(const ExternalLabel* label); | 
|  | 1430   void BranchLinkPatchable(const ExternalLabel* label); | 
|  | 1431 | 
| 1451   void LoadObjectHelper(Register dst, const Object& obj, bool is_unique); | 1432   void LoadObjectHelper(Register dst, const Object& obj, bool is_unique); | 
| 1452 | 1433 | 
| 1453   void AddSubHelper(OperandSize os, bool set_flags, bool subtract, | 1434   void AddSubHelper(OperandSize os, bool set_flags, bool subtract, | 
| 1454                     Register rd, Register rn, Operand o) { | 1435                     Register rd, Register rn, Operand o) { | 
| 1455     ASSERT((rd != R31) && (rn != R31)); | 1436     ASSERT((rd != R31) && (rn != R31)); | 
| 1456     const Register crd = ConcreteRegister(rd); | 1437     const Register crd = ConcreteRegister(rd); | 
| 1457     const Register crn = ConcreteRegister(rn); | 1438     const Register crn = ConcreteRegister(rn); | 
| 1458     if (o.type() == Operand::Immediate) { | 1439     if (o.type() == Operand::Immediate) { | 
| 1459       ASSERT(rn != ZR); | 1440       ASSERT(rn != ZR); | 
| 1460       EmitAddSubImmOp(subtract ? SUBI : ADDI, crd, crn, o, os, set_flags); | 1441       EmitAddSubImmOp(subtract ? SUBI : ADDI, crd, crn, o, os, set_flags); | 
| (...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1942                                   Register value, | 1923                                   Register value, | 
| 1943                                   Label* no_update); | 1924                                   Label* no_update); | 
| 1944 | 1925 | 
| 1945   DISALLOW_ALLOCATION(); | 1926   DISALLOW_ALLOCATION(); | 
| 1946   DISALLOW_COPY_AND_ASSIGN(Assembler); | 1927   DISALLOW_COPY_AND_ASSIGN(Assembler); | 
| 1947 }; | 1928 }; | 
| 1948 | 1929 | 
| 1949 }  // namespace dart | 1930 }  // namespace dart | 
| 1950 | 1931 | 
| 1951 #endif  // VM_ASSEMBLER_ARM64_H_ | 1932 #endif  // VM_ASSEMBLER_ARM64_H_ | 
| OLD | NEW | 
|---|