| Index: src/ia32/macro-assembler-ia32.cc
|
| diff --git a/src/ia32/macro-assembler-ia32.cc b/src/ia32/macro-assembler-ia32.cc
|
| index 33044bac733474e53c1aafaf219d2eff9f5c39fd..25a0a95974e90633f87a6069b19542bd7cc6a061 100644
|
| --- a/src/ia32/macro-assembler-ia32.cc
|
| +++ b/src/ia32/macro-assembler-ia32.cc
|
| @@ -2595,15 +2595,37 @@
|
|
|
| void MacroAssembler::LoadHeapObject(Register result,
|
| Handle<HeapObject> object) {
|
| - mov(result, object);
|
| + AllowDeferredHandleDereference embedding_raw_address;
|
| + if (isolate()->heap()->InNewSpace(*object)) {
|
| + Handle<Cell> cell = isolate()->factory()->NewCell(object);
|
| + mov(result, Operand::ForCell(cell));
|
| + } else {
|
| + mov(result, object);
|
| + }
|
| }
|
|
|
|
|
| void MacroAssembler::CmpHeapObject(Register reg, Handle<HeapObject> object) {
|
| - cmp(reg, object);
|
| -}
|
| -
|
| -void MacroAssembler::PushHeapObject(Handle<HeapObject> object) { Push(object); }
|
| + AllowDeferredHandleDereference using_raw_address;
|
| + if (isolate()->heap()->InNewSpace(*object)) {
|
| + Handle<Cell> cell = isolate()->factory()->NewCell(object);
|
| + cmp(reg, Operand::ForCell(cell));
|
| + } else {
|
| + cmp(reg, object);
|
| + }
|
| +}
|
| +
|
| +
|
| +void MacroAssembler::PushHeapObject(Handle<HeapObject> object) {
|
| + AllowDeferredHandleDereference using_raw_address;
|
| + if (isolate()->heap()->InNewSpace(*object)) {
|
| + Handle<Cell> cell = isolate()->factory()->NewCell(object);
|
| + push(Operand::ForCell(cell));
|
| + } else {
|
| + Push(object);
|
| + }
|
| +}
|
| +
|
|
|
| void MacroAssembler::CmpWeakValue(Register value, Handle<WeakCell> cell,
|
| Register scratch) {
|
|
|