OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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_ |
OLD | NEW |