| Index: runtime/vm/intermediate_language_ia32.cc
|
| diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc
|
| index 0a334921a6dbd045f04eba30653d6972c9288da0..19ffac37acb9e35d70d7659d7e1301b0391c83cc 100644
|
| --- a/runtime/vm/intermediate_language_ia32.cc
|
| +++ b/runtime/vm/intermediate_language_ia32.cc
|
| @@ -1851,6 +1851,12 @@ void StoreInstanceFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| Register temp2 = locs()->temp(1).reg();
|
| FpuRegister fpu_temp = locs()->temp(2).fpu_reg();
|
|
|
| + if (ShouldEmitStoreBarrier()) {
|
| + // Value input is a writable register and should be manually preserved
|
| + // across allocation slow-path.
|
| + locs()->live_registers()->Add(locs()->in(1), kTagged);
|
| + }
|
| +
|
| Label store_pointer;
|
| Label store_double;
|
| Label store_float32x4;
|
| @@ -6463,6 +6469,9 @@ void BoxInt32Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| Label done;
|
| __ j(NO_OVERFLOW, &done);
|
| // Allocate a mint.
|
| + // Value input is writable register and has to be manually preserved
|
| + // on the slow path.
|
| + locs()->live_registers()->Add(locs()->in(0), kUnboxedInt32);
|
| BoxAllocationSlowPath::Allocate(
|
| compiler, this, compiler->mint_class(), out, kNoRegister);
|
| __ movl(FieldAddress(out, Mint::value_offset()), value);
|
|
|