Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1107)

Unified Diff: runtime/vm/assembler_mips.h

Issue 23537030: Better handling of zero in compare and branch for MIPS. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/assembler_mips.h
===================================================================
--- runtime/vm/assembler_mips.h (revision 27311)
+++ runtime/vm/assembler_mips.h (working copy)
@@ -859,9 +859,13 @@
}
void BranchEqual(Register rd, int32_t value, Label* l) {
- ASSERT(rd != CMPRES2);
- LoadImmediate(CMPRES2, value);
- beq(rd, CMPRES2, l);
+ if (value == 0) {
+ beq(rd, ZR, l);
+ } else {
+ ASSERT(rd != CMPRES2);
+ LoadImmediate(CMPRES2, value);
+ beq(rd, CMPRES2, l);
+ }
}
void BranchEqual(Register rd, const Object& object, Label* l) {
@@ -871,9 +875,13 @@
}
void BranchNotEqual(Register rd, int32_t value, Label* l) {
- ASSERT(rd != CMPRES2);
- LoadImmediate(CMPRES2, value);
- bne(rd, CMPRES2, l);
+ if (value == 0) {
+ bne(rd, ZR, l);
+ } else {
+ ASSERT(rd != CMPRES2);
+ LoadImmediate(CMPRES2, value);
+ bne(rd, CMPRES2, l);
+ }
}
void BranchNotEqual(Register rd, const Object& object, Label* l) {
@@ -888,9 +896,13 @@
}
void BranchSignedGreater(Register rd, int32_t value, Label* l) {
- ASSERT(rd != CMPRES2);
- LoadImmediate(CMPRES2, value);
- BranchSignedGreater(rd, CMPRES2, l);
+ if (value == 0) {
+ bgtz(rd, l);
+ } else {
+ ASSERT(rd != CMPRES2);
+ LoadImmediate(CMPRES2, value);
+ BranchSignedGreater(rd, CMPRES2, l);
+ }
}
void BranchUnsignedGreater(Register rd, Register rs, Label* l) {
@@ -899,9 +911,13 @@
}
void BranchUnsignedGreater(Register rd, int32_t value, Label* l) {
- ASSERT(rd != CMPRES2);
- LoadImmediate(CMPRES2, value);
- BranchUnsignedGreater(rd, CMPRES2, l);
+ if (value == 0) {
+ BranchNotEqual(rd, 0, l);
+ } else {
+ ASSERT(rd != CMPRES2);
+ LoadImmediate(CMPRES2, value);
+ BranchUnsignedGreater(rd, CMPRES2, l);
+ }
}
void BranchSignedGreaterEqual(Register rd, Register rs, Label* l) {
@@ -910,13 +926,17 @@
}
void BranchSignedGreaterEqual(Register rd, int32_t value, Label* l) {
- if (Utils::IsInt(kImmBits, value)) {
- slti(CMPRES2, rd, Immediate(value));
- beq(CMPRES2, ZR, l);
+ if (value == 0) {
+ bgez(rd, l);
} else {
- ASSERT(rd != CMPRES2);
- LoadImmediate(CMPRES2, value);
- BranchSignedGreaterEqual(rd, CMPRES2, l);
+ if (Utils::IsInt(kImmBits, value)) {
+ slti(CMPRES2, rd, Immediate(value));
+ beq(CMPRES2, ZR, l);
+ } else {
+ ASSERT(rd != CMPRES2);
+ LoadImmediate(CMPRES2, value);
+ BranchSignedGreaterEqual(rd, CMPRES2, l);
+ }
}
}
@@ -926,13 +946,17 @@
}
void BranchUnsignedGreaterEqual(Register rd, int32_t value, Label* l) {
- if (Utils::IsUint(kImmBits, value)) {
- sltiu(CMPRES2, rd, Immediate(value));
- beq(CMPRES2, ZR, l);
+ if (value == 0) {
+ b(l);
} else {
- ASSERT(rd != CMPRES2);
- LoadImmediate(CMPRES2, value);
- BranchUnsignedGreaterEqual(rd, CMPRES2, l);
+ if (Utils::IsUint(kImmBits, value)) {
+ sltiu(CMPRES2, rd, Immediate(value));
+ beq(CMPRES2, ZR, l);
+ } else {
+ ASSERT(rd != CMPRES2);
+ LoadImmediate(CMPRES2, value);
+ BranchUnsignedGreaterEqual(rd, CMPRES2, l);
+ }
}
}
@@ -941,13 +965,17 @@
}
void BranchSignedLess(Register rd, int32_t value, Label* l) {
- if (Utils::IsInt(kImmBits, value)) {
- slti(CMPRES2, rd, Immediate(value));
- bne(CMPRES2, ZR, l);
+ if (value == 0) {
+ bltz(rd, l);
} else {
- ASSERT(rd != CMPRES2);
- LoadImmediate(CMPRES2, value);
- BranchSignedGreater(CMPRES2, rd, l);
+ if (Utils::IsInt(kImmBits, value)) {
+ slti(CMPRES2, rd, Immediate(value));
+ bne(CMPRES2, ZR, l);
+ } else {
+ ASSERT(rd != CMPRES2);
+ LoadImmediate(CMPRES2, value);
+ BranchSignedGreater(CMPRES2, rd, l);
+ }
}
}
@@ -956,6 +984,7 @@
}
void BranchUnsignedLess(Register rd, int32_t value, Label* l) {
+ ASSERT(value != 0);
if (Utils::IsUint(kImmBits, value)) {
sltiu(CMPRES2, rd, Immediate(value));
bne(CMPRES2, ZR, l);
@@ -971,9 +1000,13 @@
}
void BranchSignedLessEqual(Register rd, int32_t value, Label* l) {
- ASSERT(rd != CMPRES2);
- LoadImmediate(CMPRES2, value);
- BranchSignedGreaterEqual(CMPRES2, rd, l);
+ if (value == 0) {
+ blez(rd, l);
+ } else {
+ ASSERT(rd != CMPRES2);
+ LoadImmediate(CMPRES2, value);
+ BranchSignedGreaterEqual(CMPRES2, rd, l);
+ }
}
void BranchUnsignedLessEqual(Register rd, Register rs, Label* l) {
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698