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

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

Issue 1905613002: S390: Fixed LBR, LGBR, LHR, LGHR instructions in simulator. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Removed existing LGBR, LHR, LGHR evals that redirected to original linear opcode search Created 4 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 | « no previous file | 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 c4cbdbe71c0247d64b897a3d201fe48b36b1b2be..983d71d678448874a7a0aaef94eb3ece1649f908 100644
--- a/src/s390/simulator-s390.cc
+++ b/src/s390/simulator-s390.cc
@@ -3724,17 +3724,19 @@ bool Simulator::DecodeFourByteArithmetic(Instruction* instr) {
RREInstruction* rrinst = reinterpret_cast<RREInstruction*>(instr);
int r1 = rrinst->R1Value();
int r2 = rrinst->R2Value();
-#ifdef V8_TARGET_ARCH_S390X
+ if (op == LGBR) {
int64_t r2_val = get_low_register<int64_t>(r2);
r2_val <<= 56;
r2_val >>= 56;
set_register(r1, r2_val);
-#else
+ } else if (op == LBR) {
int32_t r2_val = get_low_register<int32_t>(r2);
r2_val <<= 24;
r2_val >>= 24;
set_low_register(r1, r2_val);
-#endif
+ } else {
+ UNREACHABLE();
+ }
break;
}
case LGHR:
@@ -3742,17 +3744,19 @@ bool Simulator::DecodeFourByteArithmetic(Instruction* instr) {
RREInstruction* rrinst = reinterpret_cast<RREInstruction*>(instr);
int r1 = rrinst->R1Value();
int r2 = rrinst->R2Value();
-#ifdef V8_TARGET_ARCH_S390X
+ if (op == LGHR) {
int64_t r2_val = get_low_register<int64_t>(r2);
r2_val <<= 48;
r2_val >>= 48;
set_register(r1, r2_val);
-#else
+ } else if (op == LHR) {
int32_t r2_val = get_low_register<int32_t>(r2);
r2_val <<= 16;
r2_val >>= 16;
set_low_register(r1, r2_val);
-#endif
+ } else {
+ UNREACHABLE();
+ }
break;
}
case ALCR: {
@@ -6095,6 +6099,36 @@ EVALUATE(LBR) {
return length;
}
+EVALUATE(LGBR) {
+ DCHECK_OPCODE(LGBR);
+ DECODE_RRE_INSTRUCTION(r1, r2);
+ int64_t r2_val = get_low_register<int64_t>(r2);
+ r2_val <<= 56;
+ r2_val >>= 56;
+ set_register(r1, r2_val);
+ return length;
+}
+
+EVALUATE(LHR) {
+ DCHECK_OPCODE(LHR);
+ DECODE_RRE_INSTRUCTION(r1, r2);
+ int32_t r2_val = get_low_register<int32_t>(r2);
+ r2_val <<= 16;
+ r2_val >>= 16;
+ set_low_register(r1, r2_val);
+ return length;
+}
+
+EVALUATE(LGHR) {
+ DCHECK_OPCODE(LGHR);
+ DECODE_RRE_INSTRUCTION(r1, r2);
+ int64_t r2_val = get_low_register<int64_t>(r2);
+ r2_val <<= 48;
+ r2_val >>= 48;
+ set_register(r1, r2_val);
+ return length;
+}
+
EVALUATE(LGF) {
DCHECK_OPCODE(LGF);
DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
@@ -7007,10 +7041,6 @@ EVALUATE(LTGR) { return DecodeInstructionOriginal(instr); }
EVALUATE(LCGR) { return DecodeInstructionOriginal(instr); }
-EVALUATE(LGBR) { return DecodeInstructionOriginal(instr); }
-
-EVALUATE(LGHR) { return DecodeInstructionOriginal(instr); }
-
EVALUATE(SGR) { return DecodeInstructionOriginal(instr); }
EVALUATE(ALGR) { return DecodeInstructionOriginal(instr); }
@@ -7055,8 +7085,6 @@ EVALUATE(CGR) { return DecodeInstructionOriginal(instr); }
EVALUATE(CLGR) { return DecodeInstructionOriginal(instr); }
-EVALUATE(LHR) { return DecodeInstructionOriginal(instr); }
-
EVALUATE(KMF) { return DecodeInstructionOriginal(instr); }
EVALUATE(KMO) { return DecodeInstructionOriginal(instr); }
« 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