Index: src/x64/codegen-x64.h |
=================================================================== |
--- src/x64/codegen-x64.h (revision 4559) |
+++ src/x64/codegen-x64.h (working copy) |
@@ -594,7 +594,9 @@ |
// Fast support for number to string. |
void GenerateNumberToString(ZoneList<Expression*>* args); |
- // Fast swapping of elements. |
+ // Fast swapping of elements. Takes three expressions, the object and two |
+ // indices. This should only be used if the indices are known to be |
+ // non-negative and within bounds of the elements array at the call site. |
void GenerateSwapElements(ZoneList<Expression*>* args); |
// Fast call for custom callbacks. |
@@ -998,6 +1000,42 @@ |
}; |
+class RecordWriteStub : public CodeStub { |
+ public: |
+ RecordWriteStub(Register object, Register addr, Register scratch) |
+ : object_(object), addr_(addr), scratch_(scratch) { } |
+ |
+ void Generate(MacroAssembler* masm); |
+ |
+ private: |
+ Register object_; |
+ Register addr_; |
+ Register scratch_; |
+ |
+#ifdef DEBUG |
+ void Print() { |
+ PrintF("RecordWriteStub (object reg %d), (addr reg %d), (scratch reg %d)\n", |
+ object_.code(), addr_.code(), scratch_.code()); |
+ } |
+#endif |
+ |
+ // Minor key encoding in 12 bits of three registers (object, address and |
+ // scratch) OOOOAAAASSSS. |
+ class ScratchBits : public BitField<uint32_t, 0, 4> {}; |
+ class AddressBits : public BitField<uint32_t, 4, 4> {}; |
+ class ObjectBits : public BitField<uint32_t, 8, 4> {}; |
+ |
+ Major MajorKey() { return RecordWrite; } |
+ |
+ int MinorKey() { |
+ // Encode the registers. |
+ return ObjectBits::encode(object_.code()) | |
+ AddressBits::encode(addr_.code()) | |
+ ScratchBits::encode(scratch_.code()); |
+ } |
+}; |
+ |
+ |
} } // namespace v8::internal |
#endif // V8_X64_CODEGEN_X64_H_ |