| Index: runtime/vm/assembler_ia32.cc
|
| ===================================================================
|
| --- runtime/vm/assembler_ia32.cc (revision 36182)
|
| +++ runtime/vm/assembler_ia32.cc (working copy)
|
| @@ -1985,20 +1985,35 @@
|
|
|
|
|
| void Assembler::AddImmediate(Register reg, const Immediate& imm) {
|
| - intptr_t value = imm.value();
|
| - if (value > 0) {
|
| + const intptr_t value = imm.value();
|
| + if (value == 0) {
|
| + return;
|
| + }
|
| + if ((value > 0) || (value == kMinInt32)) {
|
| if (value == 1) {
|
| incl(reg);
|
| - } else if (value != 0) {
|
| + } else {
|
| addl(reg, imm);
|
| }
|
| - } else if (value < 0) {
|
| - value = -value;
|
| + } else {
|
| + SubImmediate(reg, Immediate(-value));
|
| + }
|
| +}
|
| +
|
| +
|
| +void Assembler::SubImmediate(Register reg, const Immediate& imm) {
|
| + const intptr_t value = imm.value();
|
| + if (value == 0) {
|
| + return;
|
| + }
|
| + if ((value > 0) || (value == kMinInt32)) {
|
| if (value == 1) {
|
| decl(reg);
|
| - } else if (value != 0) {
|
| - subl(reg, Immediate(value));
|
| + } else {
|
| + subl(reg, imm);
|
| }
|
| + } else {
|
| + AddImmediate(reg, Immediate(-value));
|
| }
|
| }
|
|
|
|
|