Index: src/ia32/codegen-ia32.h |
=================================================================== |
--- src/ia32/codegen-ia32.h (revision 4703) |
+++ src/ia32/codegen-ia32.h (working copy) |
@@ -1083,6 +1083,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. 4 bits for each of the 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_IA32_CODEGEN_IA32_H_ |