| 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 are | 5 // modification, are permitted provided that the following conditions are |
| 6 // met: | 6 // 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 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 253 ScaleFactor scale, | 253 ScaleFactor scale, |
| 254 const ExternalReference& arr) { | 254 const ExternalReference& arr) { |
| 255 return Operand(index, scale, reinterpret_cast<int32_t>(arr.address()), | 255 return Operand(index, scale, reinterpret_cast<int32_t>(arr.address()), |
| 256 RelocInfo::EXTERNAL_REFERENCE); | 256 RelocInfo::EXTERNAL_REFERENCE); |
| 257 } | 257 } |
| 258 | 258 |
| 259 // Returns true if this Operand is a wrapper for the specified register. | 259 // Returns true if this Operand is a wrapper for the specified register. |
| 260 bool is_reg(Register reg) const; | 260 bool is_reg(Register reg) const; |
| 261 | 261 |
| 262 private: | 262 private: |
| 263 // Mutable because reg in ModR/M byte is set by Assembler via set_reg(). | 263 byte buf_[6]; |
| 264 mutable byte buf_[6]; | |
| 265 // The number of bytes in buf_. | 264 // The number of bytes in buf_. |
| 266 unsigned int len_; | 265 unsigned int len_; |
| 267 // Only valid if len_ > 4. | 266 // Only valid if len_ > 4. |
| 268 RelocInfo::Mode rmode_; | 267 RelocInfo::Mode rmode_; |
| 269 | 268 |
| 270 inline void set_modrm(int mod, // reg == 0 | 269 // Set the ModRM byte without an encoded 'reg' register. The |
| 271 Register rm); | 270 // register is encoded later as part of the emit_operand operation. |
| 271 inline void set_modrm(int mod, Register rm); |
| 272 |
| 272 inline void set_sib(ScaleFactor scale, Register index, Register base); | 273 inline void set_sib(ScaleFactor scale, Register index, Register base); |
| 273 inline void set_disp8(int8_t disp); | 274 inline void set_disp8(int8_t disp); |
| 274 inline void set_dispr(int32_t disp, RelocInfo::Mode rmode); | 275 inline void set_dispr(int32_t disp, RelocInfo::Mode rmode); |
| 275 inline void set_reg(Register reg) const; | |
| 276 | 276 |
| 277 friend class Assembler; | 277 friend class Assembler; |
| 278 }; | 278 }; |
| 279 | 279 |
| 280 | 280 |
| 281 // ----------------------------------------------------------------------------- | 281 // ----------------------------------------------------------------------------- |
| 282 // A Displacement describes the 32bit immediate field of an instruction which | 282 // A Displacement describes the 32bit immediate field of an instruction which |
| 283 // may be used together with a Label in order to refer to a yet unknown code | 283 // may be used together with a Label in order to refer to a yet unknown code |
| 284 // position. Displacements stored in the instruction stream are used to describe | 284 // position. Displacements stored in the instruction stream are used to describe |
| 285 // the instruction and to chain a list of instructions using the same Label. | 285 // the instruction and to chain a list of instructions using the same Label. |
| (...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 830 private: | 830 private: |
| 831 Assembler* assembler_; | 831 Assembler* assembler_; |
| 832 #ifdef DEBUG | 832 #ifdef DEBUG |
| 833 int space_before_; | 833 int space_before_; |
| 834 #endif | 834 #endif |
| 835 }; | 835 }; |
| 836 | 836 |
| 837 } } // namespace v8::internal | 837 } } // namespace v8::internal |
| 838 | 838 |
| 839 #endif // V8_ASSEMBLER_IA32_H_ | 839 #endif // V8_ASSEMBLER_IA32_H_ |
| OLD | NEW |