Index: src/s390/simulator-s390.cc |
diff --git a/src/s390/simulator-s390.cc b/src/s390/simulator-s390.cc |
index fe3d96d00f922863ac81f4c67ff5d0e0ea161181..dcdee92d1f456e0ac697c1b0ccf9827e005b2a8e 100644 |
--- a/src/s390/simulator-s390.cc |
+++ b/src/s390/simulator-s390.cc |
@@ -1848,6 +1848,11 @@ double Simulator::ReadDouble(intptr_t addr) { |
return *ptr; |
} |
+float Simulator::ReadFloat(intptr_t addr) { |
+ float* ptr = reinterpret_cast<float*>(addr); |
+ return *ptr; |
+} |
+ |
// Returns the limit of the stack area to enable checking for stack overflows. |
uintptr_t Simulator::StackLimit(uintptr_t c_limit) const { |
// The simulator uses a separate JS stack. If we have exhausted the C stack, |
@@ -12511,9 +12516,16 @@ EVALUATE(KEB) { |
} |
EVALUATE(CEB) { |
- UNIMPLEMENTED(); |
- USE(instr); |
- return 0; |
+ DCHECK_OPCODE(CEB); |
+ |
+ DECODE_RXE_INSTRUCTION(r1, b2, x2, 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; |
+ float r1_val = get_float32_from_d_register(r1); |
+ float fval = ReadFloat(b2_val + x2_val + d2_val); |
+ SetS390ConditionCode<float>(r1_val, fval); |
+ return length; |
} |
EVALUATE(AEB) { |