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