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

Side by Side Diff: src/arm/assembler-arm.h

Issue 6530002: ARM: Enable loads and stores of VFP registers with offsets >= 1024 bytes. (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 9 years, 10 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 | src/arm/assembler-arm.cc » ('j') | src/arm/assembler-arm.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 1994-2006 Sun Microsystems Inc. 1 // Copyright (c) 1994-2006 Sun Microsystems Inc.
2 // All Rights Reserved. 2 // All Rights Reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions 5 // modification, are permitted provided that the following conditions
6 // are met: 6 // are met:
7 // 7 //
8 // - Redistributions of source code must retain the above copyright notice, 8 // - Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer. 9 // this list of conditions and the following disclaimer.
10 // 10 //
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 380
381 // rm <shift_op> shift_imm 381 // rm <shift_op> shift_imm
382 explicit Operand(Register rm, ShiftOp shift_op, int shift_imm); 382 explicit Operand(Register rm, ShiftOp shift_op, int shift_imm);
383 383
384 // rm <shift_op> rs 384 // rm <shift_op> rs
385 explicit Operand(Register rm, ShiftOp shift_op, Register rs); 385 explicit Operand(Register rm, ShiftOp shift_op, Register rs);
386 386
387 // Return true if this is a register operand. 387 // Return true if this is a register operand.
388 INLINE(bool is_reg() const); 388 INLINE(bool is_reg() const);
389 389
390 // Return true of this operand fits in one instruction so that no 390 // Return true if this operand fits in one instruction so that no
391 // 2-instruction solution with a load into the ip register is necessary. 391 // 2-instruction solution with a load into the ip register is necessary.
392 bool is_single_instruction() const; 392 bool is_single_instruction() const;
393 bool must_use_constant_pool() const; 393 bool must_use_constant_pool() const;
394 394
395 inline int32_t immediate() const { 395 inline int32_t immediate() const {
396 ASSERT(!rm_.is_valid()); 396 ASSERT(!rm_.is_valid());
397 return imm32_; 397 return imm32_;
398 } 398 }
399 399
400 Register rm() const { return rm_; } 400 Register rm() const { return rm_; }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 // [rn +/- rm <shift_op> shift_imm]! PreIndex/NegPreIndex 432 // [rn +/- rm <shift_op> shift_imm]! PreIndex/NegPreIndex
433 // [rn], +/- rm <shift_op> shift_imm PostIndex/NegPostIndex 433 // [rn], +/- rm <shift_op> shift_imm PostIndex/NegPostIndex
434 explicit MemOperand(Register rn, Register rm, 434 explicit MemOperand(Register rn, Register rm,
435 ShiftOp shift_op, int shift_imm, AddrMode am = Offset); 435 ShiftOp shift_op, int shift_imm, AddrMode am = Offset);
436 436
437 void set_offset(int32_t offset) { 437 void set_offset(int32_t offset) {
438 ASSERT(rm_.is(no_reg)); 438 ASSERT(rm_.is(no_reg));
439 offset_ = offset; 439 offset_ = offset;
440 } 440 }
441 441
442 uint32_t offset() { 442 uint32_t offset() const {
443 ASSERT(rm_.is(no_reg)); 443 ASSERT(rm_.is(no_reg));
444 return offset_; 444 return offset_;
445 } 445 }
446 446
447 Register rn() const { return rn_; } 447 Register rn() const { return rn_; }
448 Register rm() const { return rm_; } 448 Register rm() const { return rm_; }
449 449
450 bool OffsetIsEncodable() const {
Rodolph Perfetta 2011/02/16 16:48:54 load/store word and byte support a 12bits offset b
William Hesse 2011/02/17 11:27:29 Changed name to OffsetIsUint12Encodable On 2011/02
451 return offset_ >= 0 ? is_uint12(offset_) : is_uint12(-offset_);
452 }
453
450 private: 454 private:
451 Register rn_; // base 455 Register rn_; // base
452 Register rm_; // register offset 456 Register rm_; // register offset
453 int32_t offset_; // valid if rm_ == no_reg 457 int32_t offset_; // valid if rm_ == no_reg
454 ShiftOp shift_op_; 458 ShiftOp shift_op_;
455 int shift_imm_; // valid if rm_ != no_reg && rs_ == no_reg 459 int shift_imm_; // valid if rm_ != no_reg && rs_ == no_reg
456 AddrMode am_; // bits P, U, and W 460 AddrMode am_; // bits P, U, and W
457 461
458 friend class Assembler; 462 friend class Assembler;
459 }; 463 };
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after
895 LFlag l = Short); // v5 and above 899 LFlag l = Short); // v5 and above
896 900
897 // Support for VFP. 901 // Support for VFP.
898 // All these APIs support S0 to S31 and D0 to D15. 902 // All these APIs support S0 to S31 and D0 to D15.
899 // Currently these APIs do not support extended D registers, i.e, D16 to D31. 903 // Currently these APIs do not support extended D registers, i.e, D16 to D31.
900 // However, some simple modifications can allow 904 // However, some simple modifications can allow
901 // these APIs to support D16 to D31. 905 // these APIs to support D16 to D31.
902 906
903 void vldr(const DwVfpRegister dst, 907 void vldr(const DwVfpRegister dst,
904 const Register base, 908 const Register base,
905 int offset, // Offset must be a multiple of 4. 909 int offset,
910 const Condition cond = al);
911 void vldr(const DwVfpRegister dst,
912 const MemOperand& src,
906 const Condition cond = al); 913 const Condition cond = al);
907 914
908 void vldr(const SwVfpRegister dst, 915 void vldr(const SwVfpRegister dst,
909 const Register base, 916 const Register base,
910 int offset, // Offset must be a multiple of 4. 917 int offset,
918 const Condition cond = al);
919 void vldr(const SwVfpRegister dst,
920 const MemOperand& src,
911 const Condition cond = al); 921 const Condition cond = al);
912 922
913 void vstr(const DwVfpRegister src, 923 void vstr(const DwVfpRegister src,
914 const Register base, 924 const Register base,
915 int offset, // Offset must be a multiple of 4. 925 int offset,
926 const Condition cond = al);
927 void vstr(const DwVfpRegister src,
928 const MemOperand& dst,
916 const Condition cond = al); 929 const Condition cond = al);
917 930
918 void vstr(const SwVfpRegister src, 931 void vstr(const SwVfpRegister src,
919 const Register base, 932 const Register base,
920 int offset, // Offset must be a multiple of 4. 933 int offset,
934 const Condition cond = al);
935 void vstr(const SwVfpRegister src,
936 const MemOperand& dst,
921 const Condition cond = al); 937 const Condition cond = al);
922 938
923 void vmov(const DwVfpRegister dst, 939 void vmov(const DwVfpRegister dst,
924 double imm, 940 double imm,
925 const Condition cond = al); 941 const Condition cond = al);
926 void vmov(const SwVfpRegister dst, 942 void vmov(const SwVfpRegister dst,
927 const SwVfpRegister src, 943 const SwVfpRegister src,
928 const Condition cond = al); 944 const Condition cond = al);
929 void vmov(const DwVfpRegister dst, 945 void vmov(const DwVfpRegister dst,
930 const DwVfpRegister src, 946 const DwVfpRegister src,
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
1268 public: 1284 public:
1269 explicit EnsureSpace(Assembler* assembler) { 1285 explicit EnsureSpace(Assembler* assembler) {
1270 assembler->CheckBuffer(); 1286 assembler->CheckBuffer();
1271 } 1287 }
1272 }; 1288 };
1273 1289
1274 1290
1275 } } // namespace v8::internal 1291 } } // namespace v8::internal
1276 1292
1277 #endif // V8_ARM_ASSEMBLER_ARM_H_ 1293 #endif // V8_ARM_ASSEMBLER_ARM_H_
OLDNEW
« no previous file with comments | « no previous file | src/arm/assembler-arm.cc » ('j') | src/arm/assembler-arm.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698