| 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_
|
|
|