Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(456)

Side by Side Diff: runtime/vm/assembler_arm.h

Issue 1043943002: A few fixes for ARMv5TE. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | runtime/vm/assembler_arm.cc » ('j') | runtime/vm/assembler_arm.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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_
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/assembler_arm.cc » ('j') | runtime/vm/assembler_arm.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698