Chromium Code Reviews| 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 |