| 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 725 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 736 base::CallOnce(&once, &Simulator::EvalTableInit); | 736 base::CallOnce(&once, &Simulator::EvalTableInit); |
| 737 } | 737 } |
| 738 | 738 |
| 739 Simulator::EvaluateFuncType Simulator::EvalTable[] = {NULL}; | 739 Simulator::EvaluateFuncType Simulator::EvalTable[] = {NULL}; |
| 740 | 740 |
| 741 void Simulator::EvalTableInit() { | 741 void Simulator::EvalTableInit() { |
| 742 for (int i = 0; i < MAX_NUM_OPCODES; i++) { | 742 for (int i = 0; i < MAX_NUM_OPCODES; i++) { |
| 743 EvalTable[i] = &Simulator::Evaluate_Unknown; | 743 EvalTable[i] = &Simulator::Evaluate_Unknown; |
| 744 } | 744 } |
| 745 | 745 |
| 746 #define CREATE_EVALUATE_TABLE(name, op_name, op_value) \ |
| 747 EvalTable[op_name] = &Simulator::Evaluate_##op_name; |
| 748 VRR_C_OPCODE_LIST(CREATE_EVALUATE_TABLE); |
| 749 #undef CREATE_EVALUATE_TABLE |
| 750 |
| 746 EvalTable[DUMY] = &Simulator::Evaluate_DUMY; | 751 EvalTable[DUMY] = &Simulator::Evaluate_DUMY; |
| 747 EvalTable[BKPT] = &Simulator::Evaluate_BKPT; | 752 EvalTable[BKPT] = &Simulator::Evaluate_BKPT; |
| 748 EvalTable[SPM] = &Simulator::Evaluate_SPM; | 753 EvalTable[SPM] = &Simulator::Evaluate_SPM; |
| 749 EvalTable[BALR] = &Simulator::Evaluate_BALR; | 754 EvalTable[BALR] = &Simulator::Evaluate_BALR; |
| 750 EvalTable[BCTR] = &Simulator::Evaluate_BCTR; | 755 EvalTable[BCTR] = &Simulator::Evaluate_BCTR; |
| 751 EvalTable[BCR] = &Simulator::Evaluate_BCR; | 756 EvalTable[BCR] = &Simulator::Evaluate_BCR; |
| 752 EvalTable[SVC] = &Simulator::Evaluate_SVC; | 757 EvalTable[SVC] = &Simulator::Evaluate_SVC; |
| 753 EvalTable[BSM] = &Simulator::Evaluate_BSM; | 758 EvalTable[BSM] = &Simulator::Evaluate_BSM; |
| 754 EvalTable[BASSM] = &Simulator::Evaluate_BASSM; | 759 EvalTable[BASSM] = &Simulator::Evaluate_BASSM; |
| 755 EvalTable[BASR] = &Simulator::Evaluate_BASR; | 760 EvalTable[BASR] = &Simulator::Evaluate_BASR; |
| (...skipping 5287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6043 int16_t i2 = AS(RIInstruction)->I2Value(); \ | 6048 int16_t i2 = AS(RIInstruction)->I2Value(); \ |
| 6044 int length = 4; | 6049 int length = 4; |
| 6045 | 6050 |
| 6046 #define DECODE_RXE_INSTRUCTION(r1, b2, x2, d2) \ | 6051 #define DECODE_RXE_INSTRUCTION(r1, b2, x2, d2) \ |
| 6047 int r1 = AS(RXEInstruction)->R1Value(); \ | 6052 int r1 = AS(RXEInstruction)->R1Value(); \ |
| 6048 int b2 = AS(RXEInstruction)->B2Value(); \ | 6053 int b2 = AS(RXEInstruction)->B2Value(); \ |
| 6049 int x2 = AS(RXEInstruction)->X2Value(); \ | 6054 int x2 = AS(RXEInstruction)->X2Value(); \ |
| 6050 int d2 = AS(RXEInstruction)->D2Value(); \ | 6055 int d2 = AS(RXEInstruction)->D2Value(); \ |
| 6051 int length = 6; | 6056 int length = 6; |
| 6052 | 6057 |
| 6058 #define DECODE_VRR_C_INSTRUCTION(r1, r2, r3, m6, m5, m4) \ |
| 6059 int r1 = AS(VRR_C_Instruction)->R1Value(); \ |
| 6060 int r2 = AS(VRR_C_Instruction)->R2Value(); \ |
| 6061 int r3 = AS(VRR_C_Instruction)->R3Value(); \ |
| 6062 int m6 = AS(VRR_C_Instruction)->M6Value(); \ |
| 6063 int m5 = AS(VRR_C_Instruction)->M5Value(); \ |
| 6064 int m4 = AS(VRR_C_Instruction)->M4Value(); \ |
| 6065 int length = 6; |
| 6066 |
| 6053 #define GET_ADDRESS(index_reg, base_reg, offset) \ | 6067 #define GET_ADDRESS(index_reg, base_reg, offset) \ |
| 6054 (((index_reg) == 0) ? 0 : get_register(index_reg)) + \ | 6068 (((index_reg) == 0) ? 0 : get_register(index_reg)) + \ |
| 6055 (((base_reg) == 0) ? 0 : get_register(base_reg)) + offset | 6069 (((base_reg) == 0) ? 0 : get_register(base_reg)) + offset |
| 6056 | 6070 |
| 6057 int Simulator::Evaluate_Unknown(Instruction* instr) { | 6071 int Simulator::Evaluate_Unknown(Instruction* instr) { |
| 6058 UNREACHABLE(); | 6072 UNREACHABLE(); |
| 6059 return 0; | 6073 return 0; |
| 6060 } | 6074 } |
| 6061 | 6075 |
| 6076 EVALUATE(VFA) { |
| 6077 DCHECK_OPCODE(VFA); |
| 6078 DECODE_VRR_C_INSTRUCTION(r1, r2, r3, m6, m5, m4); |
| 6079 USE(m6); |
| 6080 USE(m5); |
| 6081 USE(m4); |
| 6082 DCHECK(m5 == 8); |
| 6083 DCHECK(m4 == 3); |
| 6084 double r2_val = get_double_from_d_register(r2); |
| 6085 double r3_val = get_double_from_d_register(r3); |
| 6086 double r1_val = r2_val + r3_val; |
| 6087 set_d_register_from_double(r1, r1_val); |
| 6088 return length; |
| 6089 } |
| 6090 |
| 6091 EVALUATE(VFS) { |
| 6092 DCHECK_OPCODE(VFS); |
| 6093 DECODE_VRR_C_INSTRUCTION(r1, r2, r3, m6, m5, m4); |
| 6094 USE(m6); |
| 6095 USE(m5); |
| 6096 USE(m4); |
| 6097 DCHECK(m5 == 8); |
| 6098 DCHECK(m4 == 3); |
| 6099 double r2_val = get_double_from_d_register(r2); |
| 6100 double r3_val = get_double_from_d_register(r3); |
| 6101 double r1_val = r2_val - r3_val; |
| 6102 set_d_register_from_double(r1, r1_val); |
| 6103 return length; |
| 6104 } |
| 6105 |
| 6106 EVALUATE(VFM) { |
| 6107 DCHECK_OPCODE(VFM); |
| 6108 DECODE_VRR_C_INSTRUCTION(r1, r2, r3, m6, m5, m4); |
| 6109 USE(m6); |
| 6110 USE(m5); |
| 6111 USE(m4); |
| 6112 DCHECK(m5 == 8); |
| 6113 DCHECK(m4 == 3); |
| 6114 double r2_val = get_double_from_d_register(r2); |
| 6115 double r3_val = get_double_from_d_register(r3); |
| 6116 double r1_val = r2_val * r3_val; |
| 6117 set_d_register_from_double(r1, r1_val); |
| 6118 return length; |
| 6119 } |
| 6120 |
| 6121 EVALUATE(VFD) { |
| 6122 DCHECK_OPCODE(VFD); |
| 6123 DECODE_VRR_C_INSTRUCTION(r1, r2, r3, m6, m5, m4); |
| 6124 USE(m6); |
| 6125 USE(m5); |
| 6126 USE(m4); |
| 6127 DCHECK(m5 == 8); |
| 6128 DCHECK(m4 == 3); |
| 6129 double r2_val = get_double_from_d_register(r2); |
| 6130 double r3_val = get_double_from_d_register(r3); |
| 6131 double r1_val = r2_val / r3_val; |
| 6132 set_d_register_from_double(r1, r1_val); |
| 6133 return length; |
| 6134 } |
| 6135 |
| 6062 EVALUATE(DUMY) { | 6136 EVALUATE(DUMY) { |
| 6063 DCHECK_OPCODE(DUMY); | 6137 DCHECK_OPCODE(DUMY); |
| 6138 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2); |
| 6139 USE(r1); |
| 6140 USE(x2); |
| 6141 USE(b2); |
| 6142 USE(d2); |
| 6064 // dummy instruction does nothing. | 6143 // dummy instruction does nothing. |
| 6065 return 6; | 6144 return length; |
| 6066 } | 6145 } |
| 6067 | 6146 |
| 6068 EVALUATE(CLR) { | 6147 EVALUATE(CLR) { |
| 6069 DCHECK_OPCODE(CLR); | 6148 DCHECK_OPCODE(CLR); |
| 6070 DECODE_RR_INSTRUCTION(r1, r2); | 6149 DECODE_RR_INSTRUCTION(r1, r2); |
| 6071 uint32_t r1_val = get_low_register<uint32_t>(r1); | 6150 uint32_t r1_val = get_low_register<uint32_t>(r1); |
| 6072 uint32_t r2_val = get_low_register<uint32_t>(r2); | 6151 uint32_t r2_val = get_low_register<uint32_t>(r2); |
| 6073 SetS390ConditionCode<uint32_t>(r1_val, r2_val); | 6152 SetS390ConditionCode<uint32_t>(r1_val, r2_val); |
| 6074 return length; | 6153 return length; |
| 6075 } | 6154 } |
| (...skipping 6568 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12644 return 0; | 12723 return 0; |
| 12645 } | 12724 } |
| 12646 | 12725 |
| 12647 #undef EVALUATE | 12726 #undef EVALUATE |
| 12648 | 12727 |
| 12649 } // namespace internal | 12728 } // namespace internal |
| 12650 } // namespace v8 | 12729 } // namespace v8 |
| 12651 | 12730 |
| 12652 #endif // USE_SIMULATOR | 12731 #endif // USE_SIMULATOR |
| 12653 #endif // V8_TARGET_ARCH_S390 | 12732 #endif // V8_TARGET_ARCH_S390 |
| OLD | NEW |