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

Unified Diff: src/s390/simulator-s390.cc

Issue 2649113007: s390: TF Codegen Optimization (Closed)
Patch Set: remove 2 unnecessary unreachables Created 3 years, 11 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 | « src/s390/macro-assembler-s390.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/s390/simulator-s390.cc
diff --git a/src/s390/simulator-s390.cc b/src/s390/simulator-s390.cc
index 371a98f91b2322271663475c5597086b308af4d7..151d4c124475bdf43afeaae020547fa9aa83aaac 100644
--- a/src/s390/simulator-s390.cc
+++ b/src/s390/simulator-s390.cc
@@ -10117,15 +10117,26 @@ EVALUATE(SLGFR) {
}
EVALUATE(MSGFR) {
- UNIMPLEMENTED();
- USE(instr);
- return 0;
+ DCHECK_OPCODE(MSGFR);
+ DECODE_RRE_INSTRUCTION(r1, r2);
+ int64_t r1_val = get_register(r1);
+ int64_t r2_val = static_cast<int64_t>(get_low_register<int32_t>(r2));
+ int64_t product = r1_val * r2_val;
+ set_register(r1, product);
+ return length;
}
EVALUATE(DSGFR) {
- UNIMPLEMENTED();
- USE(instr);
- return 0;
+ DCHECK_OPCODE(DSGFR);
+ DECODE_RRE_INSTRUCTION(r1, r2);
+ DCHECK(r1 % 2 == 0);
+ int64_t r1_val = get_register(r1 + 1);
+ int64_t r2_val = static_cast<int64_t>(get_low_register<int32_t>(r2));
+ int64_t quotient = r1_val / r2_val;
+ int64_t remainder = r1_val % r2_val;
+ set_register(r1, remainder);
+ set_register(r1 + 1, quotient);
+ return length;
}
EVALUATE(KMAC) {
@@ -10201,9 +10212,13 @@ EVALUATE(KMC) {
}
EVALUATE(CGFR) {
- UNIMPLEMENTED();
- USE(instr);
- return 0;
+ DCHECK_OPCODE(CGFR);
+ DECODE_RRE_INSTRUCTION(r1, r2);
+ // Compare (64)
+ int64_t r1_val = get_register(r1);
+ int64_t r2_val = static_cast<int64_t>(get_low_register<int32_t>(r2));
+ SetS390ConditionCode<int64_t>(r1_val, r2_val);
+ return length;
}
EVALUATE(KIMD) {
@@ -11031,15 +11046,34 @@ EVALUATE(SLGF) {
}
EVALUATE(MSGF) {
- UNIMPLEMENTED();
- USE(instr);
- return 0;
+ DCHECK_OPCODE(MSGF);
+ DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
+ int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
+ int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
+ intptr_t d2_val = d2;
+ int64_t mem_val =
+ static_cast<int64_t>(ReadW(b2_val + d2_val + x2_val, instr));
+ int64_t r1_val = get_register(r1);
+ int64_t product = r1_val * mem_val;
+ set_register(r1, product);
+ return length;
}
EVALUATE(DSGF) {
- UNIMPLEMENTED();
- USE(instr);
- return 0;
+ DCHECK_OPCODE(DSGF);
+ DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
+ DCHECK(r1 % 2 == 0);
+ int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
+ int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
+ intptr_t d2_val = d2;
+ int64_t mem_val =
+ static_cast<int64_t>(ReadW(b2_val + d2_val + x2_val, instr));
+ int64_t r1_val = get_register(r1 + 1);
+ int64_t quotient = r1_val / mem_val;
+ int64_t remainder = r1_val % mem_val;
+ set_register(r1, remainder);
+ set_register(r1 + 1, quotient);
+ return length;
}
EVALUATE(LRVG) {
@@ -11598,9 +11632,20 @@ EVALUATE(ML) {
}
EVALUATE(DL) {
- UNIMPLEMENTED();
- USE(instr);
- return 0;
+ DCHECK_OPCODE(ML);
+ DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
+ int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
+ int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
+ DCHECK(r1 % 2 == 0);
+ uint32_t mem_val = ReadWU(b2_val + x2_val + d2, instr);
+ uint32_t r1_val = get_low_register<uint32_t>(r1 + 1);
+ uint64_t quotient =
+ static_cast<uint64_t>(r1_val) / static_cast<uint64_t>(mem_val);
+ uint64_t remainder =
+ static_cast<uint64_t>(r1_val) % static_cast<uint64_t>(mem_val);
+ set_low_register(r1, remainder);
+ set_low_register(r1 + 1, quotient);
+ return length;
}
EVALUATE(ALC) {
« no previous file with comments | « src/s390/macro-assembler-s390.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698