Index: src/ia32/codegen-ia32.h |
diff --git a/src/ia32/codegen-ia32.h b/src/ia32/codegen-ia32.h |
index b0adebe840eac535ac5d9d9ccee2c2785b26983d..f7ec0b580ef5ef9d1f5d2e47ec827f97c8f7bbd3 100644 |
--- a/src/ia32/codegen-ia32.h |
+++ b/src/ia32/codegen-ia32.h |
@@ -977,6 +977,42 @@ class NumberToStringStub: public CodeStub { |
}; |
+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_IA32_CODEGEN_IA32_H_ |