Index: runtime/vm/assembler_arm.cc |
diff --git a/runtime/vm/assembler_arm.cc b/runtime/vm/assembler_arm.cc |
index 3618bcedf7154a7a7fe586c4765efda5f168bf47..d0e9d3c756f4dc01143353bee6b66743fab50028 100644 |
--- a/runtime/vm/assembler_arm.cc |
+++ b/runtime/vm/assembler_arm.cc |
@@ -3047,9 +3047,12 @@ void Assembler::AddImmediate(Register rd, |
} else if (Operand::CanHold(~(-value), &o)) { |
mvn(IP, o, cond); |
sub(rd, rn, Operand(IP), cond); |
- } else { |
+ } else if (value > 0) { |
LoadDecodableImmediate(IP, value, cond); |
add(rd, rn, Operand(IP), cond); |
+ } else { |
+ LoadDecodableImmediate(IP, -value, cond); |
+ sub(rd, rn, Operand(IP), cond); |
} |
} |
} |