Skip to content

Commit 902e2b0

Browse files
dcharkescommit-bot@chromium.org
authored andcommitted
Revert "[vm] Arm Assembler simplify code for SubImmediateSetFlags"
This reverts commit be38459. Reason for revert: Comments in other pieces of the code state that kMinInt should be able to flow into SubImmediateSetFlags. Original change's description: > [vm] Arm Assembler simplify code for SubImmediateSetFlags > > See https://dart-review.googlesource.com/c/sdk/+/124136/9/runtime/vm/compiler/assembler/assembler_arm.cc#3203 > > Change-Id: I8d2a1bb781f22d6aae0e02eacf042a203a44790d > Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try,vm-ffi-android-product-arm-try,vm-ffi-android-release-arm-try,vm-kernel-linux-release-simarm-try,vm-kernel-precomp-android-release-arm_x64-try,vm-kernel-precomp-bare-linux-release-simarm-try,vm-kernel-precomp-linux-debug-simarm_x64-try,vm-kernel-precomp-linux-release-simarm-try,vm-kernel-precomp-linux-release-simarm_x64-try > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134333 > Commit-Queue: Daco Harkes <dacoharkes@google.com> > Reviewed-by: Martin Kustermann <kustermann@google.com> TBR=kustermann@google.com,dacoharkes@google.com # Not skipping CQ checks because original CL landed > 1 day ago. Change-Id: Idb6ec6e55256c3a4894179a844d118a41378a074 Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try, vm-ffi-android-product-arm-try, vm-ffi-android-release-arm-try, vm-kernel-linux-release-simarm-try, vm-kernel-precomp-android-release-arm_x64-try, vm-kernel-precomp-bare-linux-release-simarm-try, vm-kernel-precomp-linux-debug-simarm_x64-try, vm-kernel-precomp-linux-release-simarm-try, vm-kernel-precomp-linux-release-simarm_x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/135645 Reviewed-by: Daco Harkes <dacoharkes@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com>
1 parent c096f9d commit 902e2b0

1 file changed

Lines changed: 21 additions & 3 deletions

File tree

runtime/vm/compiler/assembler/assembler_arm.cc

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3164,16 +3164,34 @@ void Assembler::SubImmediate(Register rd,
31643164
Register rn,
31653165
int32_t value,
31663166
Condition cond) {
3167-
ASSERT(value != kMinInt32); // Cannot be negated.
31683167
AddImmediate(rd, rn, -value, cond);
31693168
}
31703169

31713170
void Assembler::SubImmediateSetFlags(Register rd,
31723171
Register rn,
31733172
int32_t value,
31743173
Condition cond) {
3175-
ASSERT(value != kMinInt32); // Cannot be negated.
3176-
AddImmediateSetFlags(rd, rn, -value, cond);
3174+
Operand o;
3175+
if (Operand::CanHold(value, &o)) {
3176+
// Handles value == kMinInt32.
3177+
subs(rd, rn, o, cond);
3178+
} else if (Operand::CanHold(-value, &o)) {
3179+
ASSERT(value != kMinInt32); // Would cause erroneous overflow detection.
3180+
adds(rd, rn, o, cond);
3181+
} else {
3182+
ASSERT(rn != IP);
3183+
if (Operand::CanHold(~value, &o)) {
3184+
mvn(IP, o, cond);
3185+
subs(rd, rn, Operand(IP), cond);
3186+
} else if (Operand::CanHold(~(-value), &o)) {
3187+
ASSERT(value != kMinInt32); // Would cause erroneous overflow detection.
3188+
mvn(IP, o, cond);
3189+
adds(rd, rn, Operand(IP), cond);
3190+
} else {
3191+
LoadDecodableImmediate(IP, value, cond);
3192+
subs(rd, rn, Operand(IP), cond);
3193+
}
3194+
}
31773195
}
31783196

31793197
void Assembler::AndImmediate(Register rd,

0 commit comments

Comments
 (0)