| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_X64_MACRO_ASSEMBLER_X64_H_ | 5 #ifndef V8_X64_MACRO_ASSEMBLER_X64_H_ |
| 6 #define V8_X64_MACRO_ASSEMBLER_X64_H_ | 6 #define V8_X64_MACRO_ASSEMBLER_X64_H_ |
| 7 | 7 |
| 8 #include "src/assembler.h" | 8 #include "src/assembler.h" |
| 9 #include "src/frames.h" | 9 #include "src/frames.h" |
| 10 #include "src/globals.h" | 10 #include "src/globals.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 const int kSmiConstantRegisterValue = 1; | 22 const int kSmiConstantRegisterValue = 1; |
| 23 // Actual value of root register is offset from the root array's start | 23 // Actual value of root register is offset from the root array's start |
| 24 // to take advantage of negitive 8-bit displacement values. | 24 // to take advantage of negitive 8-bit displacement values. |
| 25 const int kRootRegisterBias = 128; | 25 const int kRootRegisterBias = 128; |
| 26 | 26 |
| 27 // Convenience for platform-independent signatures. | 27 // Convenience for platform-independent signatures. |
| 28 typedef Operand MemOperand; | 28 typedef Operand MemOperand; |
| 29 | 29 |
| 30 enum RememberedSetAction { EMIT_REMEMBERED_SET, OMIT_REMEMBERED_SET }; | 30 enum RememberedSetAction { EMIT_REMEMBERED_SET, OMIT_REMEMBERED_SET }; |
| 31 enum SmiCheck { INLINE_SMI_CHECK, OMIT_SMI_CHECK }; | 31 enum SmiCheck { INLINE_SMI_CHECK, OMIT_SMI_CHECK }; |
| 32 enum PointersToHereCheck { |
| 33 kPointersToHereMaybeInteresting, |
| 34 kPointersToHereAreAlwaysInteresting |
| 35 }; |
| 32 | 36 |
| 33 enum SmiOperationConstraint { | 37 enum SmiOperationConstraint { |
| 34 PRESERVE_SOURCE_REGISTER, | 38 PRESERVE_SOURCE_REGISTER, |
| 35 BAILOUT_ON_NO_OVERFLOW, | 39 BAILOUT_ON_NO_OVERFLOW, |
| 36 BAILOUT_ON_OVERFLOW, | 40 BAILOUT_ON_OVERFLOW, |
| 37 NUMBER_OF_CONSTRAINTS | 41 NUMBER_OF_CONSTRAINTS |
| 38 }; | 42 }; |
| 39 | 43 |
| 40 STATIC_ASSERT(NUMBER_OF_CONSTRAINTS <= 8); | 44 STATIC_ASSERT(NUMBER_OF_CONSTRAINTS <= 8); |
| 41 | 45 |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 // stored. value and scratch registers are clobbered by the operation. | 217 // stored. value and scratch registers are clobbered by the operation. |
| 214 // The offset is the offset from the start of the object, not the offset from | 218 // The offset is the offset from the start of the object, not the offset from |
| 215 // the tagged HeapObject pointer. For use with FieldOperand(reg, off). | 219 // the tagged HeapObject pointer. For use with FieldOperand(reg, off). |
| 216 void RecordWriteField( | 220 void RecordWriteField( |
| 217 Register object, | 221 Register object, |
| 218 int offset, | 222 int offset, |
| 219 Register value, | 223 Register value, |
| 220 Register scratch, | 224 Register scratch, |
| 221 SaveFPRegsMode save_fp, | 225 SaveFPRegsMode save_fp, |
| 222 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, | 226 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, |
| 223 SmiCheck smi_check = INLINE_SMI_CHECK); | 227 SmiCheck smi_check = INLINE_SMI_CHECK, |
| 228 PointersToHereCheck pointers_to_here_check_for_value = |
| 229 kPointersToHereMaybeInteresting); |
| 224 | 230 |
| 225 // As above, but the offset has the tag presubtracted. For use with | 231 // As above, but the offset has the tag presubtracted. For use with |
| 226 // Operand(reg, off). | 232 // Operand(reg, off). |
| 227 void RecordWriteContextSlot( | 233 void RecordWriteContextSlot( |
| 228 Register context, | 234 Register context, |
| 229 int offset, | 235 int offset, |
| 230 Register value, | 236 Register value, |
| 231 Register scratch, | 237 Register scratch, |
| 232 SaveFPRegsMode save_fp, | 238 SaveFPRegsMode save_fp, |
| 233 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, | 239 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, |
| 234 SmiCheck smi_check = INLINE_SMI_CHECK) { | 240 SmiCheck smi_check = INLINE_SMI_CHECK, |
| 241 PointersToHereCheck pointers_to_here_check_for_value = |
| 242 kPointersToHereMaybeInteresting) { |
| 235 RecordWriteField(context, | 243 RecordWriteField(context, |
| 236 offset + kHeapObjectTag, | 244 offset + kHeapObjectTag, |
| 237 value, | 245 value, |
| 238 scratch, | 246 scratch, |
| 239 save_fp, | 247 save_fp, |
| 240 remembered_set_action, | 248 remembered_set_action, |
| 241 smi_check); | 249 smi_check, |
| 250 pointers_to_here_check_for_value); |
| 242 } | 251 } |
| 243 | 252 |
| 244 // Notify the garbage collector that we wrote a pointer into a fixed array. | 253 // Notify the garbage collector that we wrote a pointer into a fixed array. |
| 245 // |array| is the array being stored into, |value| is the | 254 // |array| is the array being stored into, |value| is the |
| 246 // object being stored. |index| is the array index represented as a non-smi. | 255 // object being stored. |index| is the array index represented as a non-smi. |
| 247 // All registers are clobbered by the operation RecordWriteArray | 256 // All registers are clobbered by the operation RecordWriteArray |
| 248 // filters out smis so it does not update the write barrier if the | 257 // filters out smis so it does not update the write barrier if the |
| 249 // value is a smi. | 258 // value is a smi. |
| 250 void RecordWriteArray( | 259 void RecordWriteArray( |
| 251 Register array, | 260 Register array, |
| 252 Register value, | 261 Register value, |
| 253 Register index, | 262 Register index, |
| 254 SaveFPRegsMode save_fp, | 263 SaveFPRegsMode save_fp, |
| 255 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, | 264 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, |
| 256 SmiCheck smi_check = INLINE_SMI_CHECK); | 265 SmiCheck smi_check = INLINE_SMI_CHECK, |
| 266 PointersToHereCheck pointers_to_here_check_for_value = |
| 267 kPointersToHereMaybeInteresting); |
| 268 |
| 269 void RecordWriteForMap( |
| 270 Register object, |
| 271 Register map, |
| 272 Register dst, |
| 273 SaveFPRegsMode save_fp); |
| 257 | 274 |
| 258 // For page containing |object| mark region covering |address| | 275 // For page containing |object| mark region covering |address| |
| 259 // dirty. |object| is the object being stored into, |value| is the | 276 // dirty. |object| is the object being stored into, |value| is the |
| 260 // object being stored. The address and value registers are clobbered by the | 277 // object being stored. The address and value registers are clobbered by the |
| 261 // operation. RecordWrite filters out smis so it does not update | 278 // operation. RecordWrite filters out smis so it does not update |
| 262 // the write barrier if the value is a smi. | 279 // the write barrier if the value is a smi. |
| 263 void RecordWrite( | 280 void RecordWrite( |
| 264 Register object, | 281 Register object, |
| 265 Register address, | 282 Register address, |
| 266 Register value, | 283 Register value, |
| 267 SaveFPRegsMode save_fp, | 284 SaveFPRegsMode save_fp, |
| 268 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, | 285 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, |
| 269 SmiCheck smi_check = INLINE_SMI_CHECK); | 286 SmiCheck smi_check = INLINE_SMI_CHECK, |
| 287 PointersToHereCheck pointers_to_here_check_for_value = |
| 288 kPointersToHereMaybeInteresting); |
| 270 | 289 |
| 271 // --------------------------------------------------------------------------- | 290 // --------------------------------------------------------------------------- |
| 272 // Debugger Support | 291 // Debugger Support |
| 273 | 292 |
| 274 void DebugBreak(); | 293 void DebugBreak(); |
| 275 | 294 |
| 276 // Generates function and stub prologue code. | 295 // Generates function and stub prologue code. |
| 277 void StubPrologue(); | 296 void StubPrologue(); |
| 278 void Prologue(bool code_pre_aging); | 297 void Prologue(bool code_pre_aging); |
| 279 | 298 |
| (...skipping 1317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1597 masm->popfq(); \ | 1616 masm->popfq(); \ |
| 1598 } \ | 1617 } \ |
| 1599 masm-> | 1618 masm-> |
| 1600 #else | 1619 #else |
| 1601 #define ACCESS_MASM(masm) masm-> | 1620 #define ACCESS_MASM(masm) masm-> |
| 1602 #endif | 1621 #endif |
| 1603 | 1622 |
| 1604 } } // namespace v8::internal | 1623 } } // namespace v8::internal |
| 1605 | 1624 |
| 1606 #endif // V8_X64_MACRO_ASSEMBLER_X64_H_ | 1625 #endif // V8_X64_MACRO_ASSEMBLER_X64_H_ |
| OLD | NEW |