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

Unified Diff: runtime/vm/assembler_mips.h

Issue 14556002: Uses slt and sltu for signed vs. unsigned comparison by the MIPS assembler. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 8 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 | « runtime/tests/vm/vm.status ('k') | runtime/vm/assembler_mips.cc » ('j') | 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 22131)
+++ runtime/vm/assembler_mips.h (working copy)
@@ -709,70 +709,82 @@
bne(rd, CMPRES, l);
}
- void BranchGreater(Register rd, int32_t value, Label* l) {
- if (Utils::IsInt(kImmBits, -value)) {
- addiu(CMPRES, rd, Immediate(-value));
- bgtz(CMPRES, l);
- } else {
- LoadImmediate(CMPRES, value);
- subu(CMPRES, rd, CMPRES);
- bgtz(CMPRES, l);
- }
+ void BranchSignedGreater(Register rd, Register rs, Label* l) {
+ slt(CMPRES, rs, rd); // CMPRES = rd > rs ? 1 : 0.
+ bne(CMPRES, ZR, l);
}
+ void BranchSignedGreater(Register rd, int32_t value, Label* l) {
+ LoadImmediate(CMPRES, value);
+ BranchSignedGreater(rd, CMPRES, l);
+ }
+
void BranchGreater(Register rd, Register rs, Label* l) {
regis 2013/04/30 00:14:50 I suppose this is an unsigned compare? The name i
zra 2013/04/30 00:30:07 Done.
- subu(CMPRES, rd, rs);
- bgtz(CMPRES, l);
+ sltu(CMPRES, rs, rd);
+ bne(CMPRES, ZR, l);
}
- void BranchGreaterEqual(Register rd, int32_t value, Label* l) {
- if (Utils::IsInt(kImmBits, -value)) {
- addiu(CMPRES, rd, Immediate(-value));
- bgez(CMPRES, l);
- } else {
- LoadImmediate(CMPRES, value);
- subu(CMPRES, rd, CMPRES);
- bgez(CMPRES, l);
- }
+ void BranchGreater(Register rd, int32_t value, Label* l) {
+ LoadImmediate(CMPRES, value);
+ BranchGreater(rd, CMPRES, l);
}
+ void BranchSignedGreaterEqual(Register rd, Register rs, Label* l) {
+ slt(CMPRES, rd, rs); // CMPRES = rd < rs ? 1 : 0.
+ beq(CMPRES, ZR, l); // If CMPRES = 0, then rd >= rs.
+ }
+
+ void BranchSignedGreaterEqual(Register rd, int32_t value, Label* l) {
+ LoadImmediate(CMPRES, value);
+ BranchSignedGreaterEqual(rd, CMPRES, l);
+ }
+
void BranchGreaterEqual(Register rd, Register rs, Label* l) {
- subu(CMPRES, rd, rs);
- bgez(CMPRES, l);
+ sltu(CMPRES, rd, rs); // CMPRES = rd < rs ? 1 : 0.
+ beq(CMPRES, ZR, l);
}
- void BranchLess(Register rd, int32_t value, Label* l) {
- if (Utils::IsInt(kImmBits, -value)) {
- addiu(CMPRES, rd, Immediate(-value));
- bltz(CMPRES, l);
- } else {
- LoadImmediate(CMPRES, value);
- subu(CMPRES, rd, CMPRES);
- bltz(CMPRES, l);
- }
+ void BranchGreaterEqual(Register rd, int32_t value, Label* l) {
+ LoadImmediate(CMPRES, value);
+ BranchGreaterEqual(rd, CMPRES, l);
}
+ void BranchSignedLess(Register rd, Register rs, Label* l) {
+ BranchSignedGreater(rs, rd, l);
+ }
+
+ void BranchSignedLess(Register rd, int32_t value, Label* l) {
+ LoadImmediate(CMPRES, value);
+ BranchSignedGreater(CMPRES, rd, l);
+ }
+
void BranchLess(Register rd, Register rs, Label* l) {
- subu(CMPRES, rd, rs);
- bltz(CMPRES, l);
+ BranchGreater(rs, rd, l);
}
- void BranchLessEqual(Register rd, int32_t value, Label* l) {
- if (Utils::IsInt(kImmBits, -value)) {
- addiu(CMPRES, rd, Immediate(-value));
- blez(CMPRES, l);
- } else {
- LoadImmediate(CMPRES, value);
- subu(CMPRES, rd, CMPRES);
- blez(CMPRES, l);
- }
+ void BranchLess(Register rd, int32_t value, Label* l) {
+ LoadImmediate(CMPRES, value);
+ BranchGreater(CMPRES, rd, l);
}
+ void BranchSignedLessEqual(Register rd, Register rs, Label* l) {
+ BranchSignedGreaterEqual(rs, rd, l);
+ }
+
+ void BranchSignedLessEqual(Register rd, int32_t value, Label* l) {
+ LoadImmediate(CMPRES, value);
+ BranchSignedGreaterEqual(CMPRES, rd, l);
+ }
+
void BranchLessEqual(Register rd, Register rs, Label* l) {
- subu(CMPRES, rd, rs);
- blez(CMPRES, l);
+ BranchGreaterEqual(rs, rd, l);
}
+ void BranchLessEqual(Register rd, int32_t value, Label* l) {
+ LoadImmediate(CMPRES, value);
+ BranchGreaterEqual(CMPRES, rd, l);
+ }
+
void Push(Register rt) {
addiu(SP, SP, Immediate(-kWordSize));
sw(rt, Address(SP));
« no previous file with comments | « runtime/tests/vm/vm.status ('k') | runtime/vm/assembler_mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698