| OLD | NEW | 
|     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_X64_H_ |     5 #ifndef VM_ASSEMBLER_X64_H_ | 
|     6 #define VM_ASSEMBLER_X64_H_ |     6 #define VM_ASSEMBLER_X64_H_ | 
|     7  |     7  | 
|     8 #ifndef VM_ASSEMBLER_H_ |     8 #ifndef VM_ASSEMBLER_H_ | 
|     9 #error Do not include assembler_x64.h directly; use assembler.h instead. |     9 #error Do not include assembler_x64.h directly; use assembler.h instead. | 
|    10 #endif |    10 #endif | 
| (...skipping 632 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   643   void ffree(intptr_t value); |   643   void ffree(intptr_t value); | 
|   644  |   644  | 
|   645   void fsin(); |   645   void fsin(); | 
|   646   void fcos(); |   646   void fcos(); | 
|   647  |   647  | 
|   648   // 'size' indicates size in bytes and must be in the range 1..8. |   648   // 'size' indicates size in bytes and must be in the range 1..8. | 
|   649   void nop(int size = 1); |   649   void nop(int size = 1); | 
|   650   void int3(); |   650   void int3(); | 
|   651   void hlt(); |   651   void hlt(); | 
|   652  |   652  | 
 |   653   // Note: verified_mem mode forces far jumps. | 
|   653   void j(Condition condition, Label* label, bool near = kFarJump); |   654   void j(Condition condition, Label* label, bool near = kFarJump); | 
|   654   void j(Condition condition, const ExternalLabel* label); |   655   void j(Condition condition, const ExternalLabel* label); | 
|   655  |   656  | 
|   656   void jmp(Register reg); |   657   void jmp(Register reg); | 
 |   658   // Note: verified_mem mode forces far jumps. | 
|   657   void jmp(Label* label, bool near = kFarJump); |   659   void jmp(Label* label, bool near = kFarJump); | 
|   658   void jmp(const ExternalLabel* label); |   660   void jmp(const ExternalLabel* label); | 
|   659  |   661  | 
|   660   void lock(); |   662   void lock(); | 
|   661   void cmpxchgl(const Address& address, Register reg); |   663   void cmpxchgl(const Address& address, Register reg); | 
|   662   void lock_cmpxchgl(const Address& address, Register reg) { |   664   void lock_cmpxchgl(const Address& address, Register reg) { | 
|   663     lock(); |   665     lock(); | 
|   664     cmpxchgl(address, reg); |   666     cmpxchgl(address, reg); | 
|   665   } |   667   } | 
|   666  |   668  | 
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   741   // Destroys value. |   743   // Destroys value. | 
|   742   void StoreIntoObject(Register object,  // Object we are storing into. |   744   void StoreIntoObject(Register object,  // Object we are storing into. | 
|   743                        const Address& dest,  // Where we are storing into. |   745                        const Address& dest,  // Where we are storing into. | 
|   744                        Register value,  // Value we are storing. |   746                        Register value,  // Value we are storing. | 
|   745                        bool can_value_be_smi = true); |   747                        bool can_value_be_smi = true); | 
|   746  |   748  | 
|   747   void StoreIntoObjectNoBarrier(Register object, |   749   void StoreIntoObjectNoBarrier(Register object, | 
|   748                                 const Address& dest, |   750                                 const Address& dest, | 
|   749                                 Register value); |   751                                 Register value); | 
|   750  |   752  | 
 |   753   // Stores a Smi value into a heap object field that always contains a Smi. | 
 |   754   void StoreIntoSmiField(const Address& dest, Register value); | 
 |   755   void ZeroSmiField(const Address& dest); | 
 |   756   // Increments a Smi field. Leaves flags in same state as an 'addq'. | 
 |   757   void IncrementSmiField(const Address& dest, int64_t increment); | 
 |   758  | 
|   751   void DoubleNegate(XmmRegister d); |   759   void DoubleNegate(XmmRegister d); | 
|   752   void FloatNegate(XmmRegister f); |   760   void FloatNegate(XmmRegister f); | 
|   753  |   761  | 
|   754   void DoubleAbs(XmmRegister reg); |   762   void DoubleAbs(XmmRegister reg); | 
|   755  |   763  | 
|   756   void LockCmpxchgq(const Address& address, Register reg) { |   764   void LockCmpxchgq(const Address& address, Register reg) { | 
|   757     lock(); |   765     lock(); | 
|   758     cmpxchgq(address, reg); |   766     cmpxchgq(address, reg); | 
|   759   } |   767   } | 
|   760  |   768  | 
| (...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1069   void EmitGenericShift(bool wide, int rm, Register reg, const Immediate& imm); |  1077   void EmitGenericShift(bool wide, int rm, Register reg, const Immediate& imm); | 
|  1070   void EmitGenericShift(bool wide, int rm, Register operand, Register shifter); |  1078   void EmitGenericShift(bool wide, int rm, Register operand, Register shifter); | 
|  1071  |  1079  | 
|  1072   void StoreIntoObjectFilter(Register object, Register value, Label* no_update); |  1080   void StoreIntoObjectFilter(Register object, Register value, Label* no_update); | 
|  1073  |  1081  | 
|  1074   // Shorter filtering sequence that assumes that value is not a smi. |  1082   // Shorter filtering sequence that assumes that value is not a smi. | 
|  1075   void StoreIntoObjectFilterNoSmi(Register object, |  1083   void StoreIntoObjectFilterNoSmi(Register object, | 
|  1076                                   Register value, |  1084                                   Register value, | 
|  1077                                   Label* no_update); |  1085                                   Label* no_update); | 
|  1078  |  1086  | 
 |  1087   // Analogous to VerifiedMemory::Verify(address, kWordSize). | 
 |  1088   void VerifyHeapWord(const Address& address); | 
 |  1089   // Analogous to VerifiedMemory::Write. | 
 |  1090   void VerifiedWrite(const Address& dest, Register value); | 
 |  1091  | 
|  1079   void ComputeCounterAddressesForCid(intptr_t cid, |  1092   void ComputeCounterAddressesForCid(intptr_t cid, | 
|  1080                                      Heap::Space space, |  1093                                      Heap::Space space, | 
|  1081                                      Address* count_address, |  1094                                      Address* count_address, | 
|  1082                                      Address* size_address); |  1095                                      Address* size_address); | 
|  1083   DISALLOW_ALLOCATION(); |  1096   DISALLOW_ALLOCATION(); | 
|  1084   DISALLOW_COPY_AND_ASSIGN(Assembler); |  1097   DISALLOW_COPY_AND_ASSIGN(Assembler); | 
|  1085 }; |  1098 }; | 
|  1086  |  1099  | 
|  1087  |  1100  | 
|  1088 inline void Assembler::EmitUint8(uint8_t value) { |  1101 inline void Assembler::EmitUint8(uint8_t value) { | 
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1156 } |  1169 } | 
|  1157  |  1170  | 
|  1158  |  1171  | 
|  1159 inline void Assembler::EmitOperandSizeOverride() { |  1172 inline void Assembler::EmitOperandSizeOverride() { | 
|  1160   EmitUint8(0x66); |  1173   EmitUint8(0x66); | 
|  1161 } |  1174 } | 
|  1162  |  1175  | 
|  1163 }  // namespace dart |  1176 }  // namespace dart | 
|  1164  |  1177  | 
|  1165 #endif  // VM_ASSEMBLER_X64_H_ |  1178 #endif  // VM_ASSEMBLER_X64_H_ | 
| OLD | NEW |