| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <stdarg.h> | 5 #include <stdarg.h> |
| 6 #include <stdlib.h> | 6 #include <stdlib.h> |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 | 8 |
| 9 #if V8_TARGET_ARCH_S390 | 9 #if V8_TARGET_ARCH_S390 |
| 10 | 10 |
| (...skipping 967 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 978 EvalTable[SAL] = &Simulator::Evaluate_SAL; | 978 EvalTable[SAL] = &Simulator::Evaluate_SAL; |
| 979 EvalTable[RSCH] = &Simulator::Evaluate_RSCH; | 979 EvalTable[RSCH] = &Simulator::Evaluate_RSCH; |
| 980 EvalTable[STCRW] = &Simulator::Evaluate_STCRW; | 980 EvalTable[STCRW] = &Simulator::Evaluate_STCRW; |
| 981 EvalTable[STCPS] = &Simulator::Evaluate_STCPS; | 981 EvalTable[STCPS] = &Simulator::Evaluate_STCPS; |
| 982 EvalTable[RCHP] = &Simulator::Evaluate_RCHP; | 982 EvalTable[RCHP] = &Simulator::Evaluate_RCHP; |
| 983 EvalTable[SCHM] = &Simulator::Evaluate_SCHM; | 983 EvalTable[SCHM] = &Simulator::Evaluate_SCHM; |
| 984 EvalTable[CKSM] = &Simulator::Evaluate_CKSM; | 984 EvalTable[CKSM] = &Simulator::Evaluate_CKSM; |
| 985 EvalTable[SAR] = &Simulator::Evaluate_SAR; | 985 EvalTable[SAR] = &Simulator::Evaluate_SAR; |
| 986 EvalTable[EAR] = &Simulator::Evaluate_EAR; | 986 EvalTable[EAR] = &Simulator::Evaluate_EAR; |
| 987 EvalTable[MSR] = &Simulator::Evaluate_MSR; | 987 EvalTable[MSR] = &Simulator::Evaluate_MSR; |
| 988 EvalTable[MSRKC] = &Simulator::Evaluate_MSRKC; |
| 988 EvalTable[MVST] = &Simulator::Evaluate_MVST; | 989 EvalTable[MVST] = &Simulator::Evaluate_MVST; |
| 989 EvalTable[CUSE] = &Simulator::Evaluate_CUSE; | 990 EvalTable[CUSE] = &Simulator::Evaluate_CUSE; |
| 990 EvalTable[SRST] = &Simulator::Evaluate_SRST; | 991 EvalTable[SRST] = &Simulator::Evaluate_SRST; |
| 991 EvalTable[XSCH] = &Simulator::Evaluate_XSCH; | 992 EvalTable[XSCH] = &Simulator::Evaluate_XSCH; |
| 992 EvalTable[STCKE] = &Simulator::Evaluate_STCKE; | 993 EvalTable[STCKE] = &Simulator::Evaluate_STCKE; |
| 993 EvalTable[STCKF] = &Simulator::Evaluate_STCKF; | 994 EvalTable[STCKF] = &Simulator::Evaluate_STCKF; |
| 994 EvalTable[SRNM] = &Simulator::Evaluate_SRNM; | 995 EvalTable[SRNM] = &Simulator::Evaluate_SRNM; |
| 995 EvalTable[STFPC] = &Simulator::Evaluate_STFPC; | 996 EvalTable[STFPC] = &Simulator::Evaluate_STFPC; |
| 996 EvalTable[LFPC] = &Simulator::Evaluate_LFPC; | 997 EvalTable[LFPC] = &Simulator::Evaluate_LFPC; |
| 997 EvalTable[TRE] = &Simulator::Evaluate_TRE; | 998 EvalTable[TRE] = &Simulator::Evaluate_TRE; |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1151 EvalTable[LTGR] = &Simulator::Evaluate_LTGR; | 1152 EvalTable[LTGR] = &Simulator::Evaluate_LTGR; |
| 1152 EvalTable[LCGR] = &Simulator::Evaluate_LCGR; | 1153 EvalTable[LCGR] = &Simulator::Evaluate_LCGR; |
| 1153 EvalTable[LGR] = &Simulator::Evaluate_LGR; | 1154 EvalTable[LGR] = &Simulator::Evaluate_LGR; |
| 1154 EvalTable[LGBR] = &Simulator::Evaluate_LGBR; | 1155 EvalTable[LGBR] = &Simulator::Evaluate_LGBR; |
| 1155 EvalTable[LGHR] = &Simulator::Evaluate_LGHR; | 1156 EvalTable[LGHR] = &Simulator::Evaluate_LGHR; |
| 1156 EvalTable[AGR] = &Simulator::Evaluate_AGR; | 1157 EvalTable[AGR] = &Simulator::Evaluate_AGR; |
| 1157 EvalTable[SGR] = &Simulator::Evaluate_SGR; | 1158 EvalTable[SGR] = &Simulator::Evaluate_SGR; |
| 1158 EvalTable[ALGR] = &Simulator::Evaluate_ALGR; | 1159 EvalTable[ALGR] = &Simulator::Evaluate_ALGR; |
| 1159 EvalTable[SLGR] = &Simulator::Evaluate_SLGR; | 1160 EvalTable[SLGR] = &Simulator::Evaluate_SLGR; |
| 1160 EvalTable[MSGR] = &Simulator::Evaluate_MSGR; | 1161 EvalTable[MSGR] = &Simulator::Evaluate_MSGR; |
| 1162 EvalTable[MSGRKC] = &Simulator::Evaluate_MSGRKC; |
| 1161 EvalTable[DSGR] = &Simulator::Evaluate_DSGR; | 1163 EvalTable[DSGR] = &Simulator::Evaluate_DSGR; |
| 1162 EvalTable[LRVGR] = &Simulator::Evaluate_LRVGR; | 1164 EvalTable[LRVGR] = &Simulator::Evaluate_LRVGR; |
| 1163 EvalTable[LPGFR] = &Simulator::Evaluate_LPGFR; | 1165 EvalTable[LPGFR] = &Simulator::Evaluate_LPGFR; |
| 1164 EvalTable[LNGFR] = &Simulator::Evaluate_LNGFR; | 1166 EvalTable[LNGFR] = &Simulator::Evaluate_LNGFR; |
| 1165 EvalTable[LTGFR] = &Simulator::Evaluate_LTGFR; | 1167 EvalTable[LTGFR] = &Simulator::Evaluate_LTGFR; |
| 1166 EvalTable[LCGFR] = &Simulator::Evaluate_LCGFR; | 1168 EvalTable[LCGFR] = &Simulator::Evaluate_LCGFR; |
| 1167 EvalTable[LGFR] = &Simulator::Evaluate_LGFR; | 1169 EvalTable[LGFR] = &Simulator::Evaluate_LGFR; |
| 1168 EvalTable[LLGFR] = &Simulator::Evaluate_LLGFR; | 1170 EvalTable[LLGFR] = &Simulator::Evaluate_LLGFR; |
| 1169 EvalTable[LLGTR] = &Simulator::Evaluate_LLGTR; | 1171 EvalTable[LLGTR] = &Simulator::Evaluate_LLGTR; |
| 1170 EvalTable[AGFR] = &Simulator::Evaluate_AGFR; | 1172 EvalTable[AGFR] = &Simulator::Evaluate_AGFR; |
| (...skipping 7293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8464 | 8466 |
| 8465 EVALUATE(MSR) { | 8467 EVALUATE(MSR) { |
| 8466 DCHECK_OPCODE(MSR); | 8468 DCHECK_OPCODE(MSR); |
| 8467 DECODE_RRE_INSTRUCTION(r1, r2); | 8469 DECODE_RRE_INSTRUCTION(r1, r2); |
| 8468 int32_t r1_val = get_low_register<int32_t>(r1); | 8470 int32_t r1_val = get_low_register<int32_t>(r1); |
| 8469 int32_t r2_val = get_low_register<int32_t>(r2); | 8471 int32_t r2_val = get_low_register<int32_t>(r2); |
| 8470 set_low_register(r1, r1_val * r2_val); | 8472 set_low_register(r1, r1_val * r2_val); |
| 8471 return length; | 8473 return length; |
| 8472 } | 8474 } |
| 8473 | 8475 |
| 8476 EVALUATE(MSRKC) { |
| 8477 DCHECK_OPCODE(MSRKC); |
| 8478 DECODE_RRF_A_INSTRUCTION(r1, r2, r3); |
| 8479 int32_t r2_val = get_low_register<int32_t>(r2); |
| 8480 int32_t r3_val = get_low_register<int32_t>(r3); |
| 8481 int64_t result64 = |
| 8482 static_cast<int64_t>(r2_val) * static_cast<int64_t>(r3_val); |
| 8483 int32_t result32 = static_cast<int32_t>(result64); |
| 8484 bool isOF = (static_cast<int64_t>(result32) != result64); |
| 8485 SetS390ConditionCode<int32_t>(result32, 0); |
| 8486 SetS390OverflowCode(isOF); |
| 8487 set_low_register(r1, result32); |
| 8488 return length; |
| 8489 } |
| 8490 |
| 8474 EVALUATE(MVST) { | 8491 EVALUATE(MVST) { |
| 8475 UNIMPLEMENTED(); | 8492 UNIMPLEMENTED(); |
| 8476 USE(instr); | 8493 USE(instr); |
| 8477 return 0; | 8494 return 0; |
| 8478 } | 8495 } |
| 8479 | 8496 |
| 8480 EVALUATE(CUSE) { | 8497 EVALUATE(CUSE) { |
| 8481 UNIMPLEMENTED(); | 8498 UNIMPLEMENTED(); |
| 8482 USE(instr); | 8499 USE(instr); |
| 8483 return 0; | 8500 return 0; |
| (...skipping 1505 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9989 | 10006 |
| 9990 EVALUATE(MSGR) { | 10007 EVALUATE(MSGR) { |
| 9991 DCHECK_OPCODE(MSGR); | 10008 DCHECK_OPCODE(MSGR); |
| 9992 DECODE_RRE_INSTRUCTION(r1, r2); | 10009 DECODE_RRE_INSTRUCTION(r1, r2); |
| 9993 int64_t r1_val = get_register(r1); | 10010 int64_t r1_val = get_register(r1); |
| 9994 int64_t r2_val = get_register(r2); | 10011 int64_t r2_val = get_register(r2); |
| 9995 set_register(r1, r1_val * r2_val); | 10012 set_register(r1, r1_val * r2_val); |
| 9996 return length; | 10013 return length; |
| 9997 } | 10014 } |
| 9998 | 10015 |
| 10016 EVALUATE(MSGRKC) { |
| 10017 DCHECK_OPCODE(MSGRKC); |
| 10018 DECODE_RRF_A_INSTRUCTION(r1, r2, r3); |
| 10019 int64_t r2_val = get_register(r2); |
| 10020 int64_t r3_val = get_register(r3); |
| 10021 volatile int64_t result64 = r2_val * r3_val; |
| 10022 bool isOF = ((r2_val == -1 && result64 == (static_cast<int64_t>(1L) << 63)) || |
| 10023 (r2_val != 0 && result64 / r2_val != r3_val)); |
| 10024 SetS390ConditionCode<int64_t>(result64, 0); |
| 10025 SetS390OverflowCode(isOF); |
| 10026 set_register(r1, result64); |
| 10027 return length; |
| 10028 } |
| 10029 |
| 9999 EVALUATE(DSGR) { | 10030 EVALUATE(DSGR) { |
| 10000 DCHECK_OPCODE(DSGR); | 10031 DCHECK_OPCODE(DSGR); |
| 10001 DECODE_RRE_INSTRUCTION(r1, r2); | 10032 DECODE_RRE_INSTRUCTION(r1, r2); |
| 10002 | 10033 |
| 10003 DCHECK(r1 % 2 == 0); | 10034 DCHECK(r1 % 2 == 0); |
| 10004 | 10035 |
| 10005 int64_t dividend = get_register(r1 + 1); | 10036 int64_t dividend = get_register(r1 + 1); |
| 10006 int64_t divisor = get_register(r2); | 10037 int64_t divisor = get_register(r2); |
| 10007 set_register(r1, dividend % divisor); | 10038 set_register(r1, dividend % divisor); |
| 10008 set_register(r1 + 1, dividend / divisor); | 10039 set_register(r1 + 1, dividend / divisor); |
| (...skipping 2806 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12815 return 0; | 12846 return 0; |
| 12816 } | 12847 } |
| 12817 | 12848 |
| 12818 #undef EVALUATE | 12849 #undef EVALUATE |
| 12819 | 12850 |
| 12820 } // namespace internal | 12851 } // namespace internal |
| 12821 } // namespace v8 | 12852 } // namespace v8 |
| 12822 | 12853 |
| 12823 #endif // USE_SIMULATOR | 12854 #endif // USE_SIMULATOR |
| 12824 #endif // V8_TARGET_ARCH_S390 | 12855 #endif // V8_TARGET_ARCH_S390 |
| OLD | NEW |