| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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_ARM_H_ | 5 #ifndef VM_ASSEMBLER_ARM_H_ |
| 6 #define VM_ASSEMBLER_ARM_H_ | 6 #define VM_ASSEMBLER_ARM_H_ |
| 7 | 7 |
| 8 #ifndef VM_ASSEMBLER_H_ | 8 #ifndef VM_ASSEMBLER_H_ |
| 9 #error Do not include assembler_arm.h directly; use assembler.h instead. | 9 #error Do not include assembler_arm.h directly; use assembler.h instead. |
| 10 #endif | 10 #endif |
| (...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 451 | 451 |
| 452 void ldrb(Register rd, Address ad, Condition cond = AL); | 452 void ldrb(Register rd, Address ad, Condition cond = AL); |
| 453 void strb(Register rd, Address ad, Condition cond = AL); | 453 void strb(Register rd, Address ad, Condition cond = AL); |
| 454 | 454 |
| 455 void ldrh(Register rd, Address ad, Condition cond = AL); | 455 void ldrh(Register rd, Address ad, Condition cond = AL); |
| 456 void strh(Register rd, Address ad, Condition cond = AL); | 456 void strh(Register rd, Address ad, Condition cond = AL); |
| 457 | 457 |
| 458 void ldrsb(Register rd, Address ad, Condition cond = AL); | 458 void ldrsb(Register rd, Address ad, Condition cond = AL); |
| 459 void ldrsh(Register rd, Address ad, Condition cond = AL); | 459 void ldrsh(Register rd, Address ad, Condition cond = AL); |
| 460 | 460 |
| 461 void ldrd(Register rd, Address ad, Condition cond = AL); | 461 // ldrd and strd actually support the full range of addressing modes, but |
| 462 void strd(Register rd, Address ad, Condition cond = AL); | 462 // we don't use them, and we need to split them up into two instructions for |
| 463 // ARMv5TE, so we only support the base + offset mode. |
| 464 void ldrd(Register rd, Register rn, int32_t offset, Condition cond = AL); |
| 465 void strd(Register rd, Register rn, int32_t offset, Condition cond = AL); |
| 463 | 466 |
| 464 void ldm(BlockAddressMode am, Register base, | 467 void ldm(BlockAddressMode am, Register base, |
| 465 RegList regs, Condition cond = AL); | 468 RegList regs, Condition cond = AL); |
| 466 void stm(BlockAddressMode am, Register base, | 469 void stm(BlockAddressMode am, Register base, |
| 467 RegList regs, Condition cond = AL); | 470 RegList regs, Condition cond = AL); |
| 468 | 471 |
| 469 void ldrex(Register rd, Register rn, Condition cond = AL); | 472 void ldrex(Register rd, Register rn, Condition cond = AL); |
| 470 void strex(Register rd, Register rt, Register rn, Condition cond = AL); | 473 void strex(Register rd, Register rt, Register rn, Condition cond = AL); |
| 471 | 474 |
| 472 // Miscellaneous instructions. | 475 // Miscellaneous instructions. |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 628 void CompareImmediate(Register rn, int32_t value, Condition cond = AL); | 631 void CompareImmediate(Register rn, int32_t value, Condition cond = AL); |
| 629 | 632 |
| 630 | 633 |
| 631 // Signed integer division of left by right. Checks to see if integer | 634 // Signed integer division of left by right. Checks to see if integer |
| 632 // division is supported. If not, uses the FPU for division with | 635 // division is supported. If not, uses the FPU for division with |
| 633 // temporary registers tmpl and tmpr. tmpl and tmpr must be different | 636 // temporary registers tmpl and tmpr. tmpl and tmpr must be different |
| 634 // registers. | 637 // registers. |
| 635 void IntegerDivide(Register result, Register left, Register right, | 638 void IntegerDivide(Register result, Register left, Register right, |
| 636 DRegister tmpl, DRegister tmpr); | 639 DRegister tmpl, DRegister tmpr); |
| 637 | 640 |
| 638 // If we aren't on ARMv7, there is no smull. | |
| 639 void CheckMultSignedOverflow(Register left, | |
| 640 Register right, | |
| 641 Register tmp, | |
| 642 DRegister dtmp0, DRegister dtmp1, | |
| 643 Label* overflow); | |
| 644 | |
| 645 // Load and Store. | 641 // Load and Store. |
| 646 // These three do not clobber IP. | 642 // These three do not clobber IP. |
| 647 void LoadPatchableImmediate(Register rd, int32_t value, Condition cond = AL); | 643 void LoadPatchableImmediate(Register rd, int32_t value, Condition cond = AL); |
| 648 void LoadDecodableImmediate(Register rd, int32_t value, Condition cond = AL); | 644 void LoadDecodableImmediate(Register rd, int32_t value, Condition cond = AL); |
| 649 void LoadImmediate(Register rd, int32_t value, Condition cond = AL); | 645 void LoadImmediate(Register rd, int32_t value, Condition cond = AL); |
| 650 // These two may clobber IP. | 646 // These two may clobber IP. |
| 651 void LoadSImmediate(SRegister sd, float value, Condition cond = AL); | 647 void LoadSImmediate(SRegister sd, float value, Condition cond = AL); |
| 652 void LoadDImmediate(DRegister dd, double value, | 648 void LoadDImmediate(DRegister dd, double value, |
| 653 Register scratch, Condition cond = AL); | 649 Register scratch, Condition cond = AL); |
| 654 | 650 |
| (...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1119 Register new_value, | 1115 Register new_value, |
| 1120 FieldContent old_content); | 1116 FieldContent old_content); |
| 1121 | 1117 |
| 1122 DISALLOW_ALLOCATION(); | 1118 DISALLOW_ALLOCATION(); |
| 1123 DISALLOW_COPY_AND_ASSIGN(Assembler); | 1119 DISALLOW_COPY_AND_ASSIGN(Assembler); |
| 1124 }; | 1120 }; |
| 1125 | 1121 |
| 1126 } // namespace dart | 1122 } // namespace dart |
| 1127 | 1123 |
| 1128 #endif // VM_ASSEMBLER_ARM_H_ | 1124 #endif // VM_ASSEMBLER_ARM_H_ |
| OLD | NEW |