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

Side by Side Diff: src/s390/simulator-s390.cc

Issue 1992703004: S390: Added 74 new instructions to the simulator EVALUATE code. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 7 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 5935 matching lines...) Expand 10 before | Expand all | Expand 10 after
5946 int b1 = AS(SIInstruction)->B1Value(); \ 5946 int b1 = AS(SIInstruction)->B1Value(); \
5947 intptr_t d1_val = AS(SIInstruction)->D1Value(); \ 5947 intptr_t d1_val = AS(SIInstruction)->D1Value(); \
5948 uint8_t imm_val = AS(SIInstruction)->I2Value(); \ 5948 uint8_t imm_val = AS(SIInstruction)->I2Value(); \
5949 int length = 4; 5949 int length = 4;
5950 5950
5951 #define DECODE_RRE_INSTRUCTION(r1, r2) \ 5951 #define DECODE_RRE_INSTRUCTION(r1, r2) \
5952 int r1 = AS(RREInstruction)->R1Value(); \ 5952 int r1 = AS(RREInstruction)->R1Value(); \
5953 int r2 = AS(RREInstruction)->R2Value(); \ 5953 int r2 = AS(RREInstruction)->R2Value(); \
5954 int length = 4; 5954 int length = 4;
5955 5955
5956 #define DECODE_RRE_INSTRUCTION_NO_R2(r1) \
5957 int r1 = AS(RREInstruction)->R1Value(); \
5958 int length = 4;
5959
5960 #define DECODE_RRD_INSTRUCTION(r1, r2, r3) \
5961 int r1 = AS(RRDInstruction)->R1Value(); \
5962 int r2 = AS(RRDInstruction)->R2Value(); \
5963 int r3 = AS(RRDInstruction)->R3Value(); \
5964 int length = 4;
5965
5966 #define DECODE_RRF_E_INSTRUCTION(r1, r2, m3, m4) \
5967 int r1 = AS(RRFInstruction)->R1Value(); \
5968 int r2 = AS(RRFInstruction)->R2Value(); \
5969 int m3 = AS(RRFInstruction)->M3Value(); \
5970 int m4 = AS(RRFInstruction)->M4Value(); \
5971 int length = 4;
5972
5973 #define DECODE_RRF_A_INSTRUCTION(r1, r2, r3) \
5974 int r1 = AS(RRFInstruction)->R1Value(); \
5975 int r2 = AS(RRFInstruction)->R2Value(); \
5976 int r3 = AS(RRFInstruction)->R3Value(); \
5977 int length = 4;
5978
5956 #define DECODE_RR_INSTRUCTION(r1, r2) \ 5979 #define DECODE_RR_INSTRUCTION(r1, r2) \
5957 int r1 = AS(RRInstruction)->R1Value(); \ 5980 int r1 = AS(RRInstruction)->R1Value(); \
5958 int r2 = AS(RRInstruction)->R2Value(); \ 5981 int r2 = AS(RRInstruction)->R2Value(); \
5959 int length = 2; 5982 int length = 2;
5960 5983
5961 #define DECODE_RIE_D_INSTRUCTION(r1, r2, i2) \ 5984 #define DECODE_RIE_D_INSTRUCTION(r1, r2, i2) \
5962 int r1 = AS(RIEInstruction)->R1Value(); \ 5985 int r1 = AS(RIEInstruction)->R1Value(); \
5963 int r2 = AS(RIEInstruction)->R2Value(); \ 5986 int r2 = AS(RIEInstruction)->R2Value(); \
5964 int32_t i2 = AS(RIEInstruction)->I6Value(); \ 5987 int32_t i2 = AS(RIEInstruction)->I6Value(); \
5965 int length = 6; 5988 int length = 6;
(...skipping 1988 matching lines...) Expand 10 before | Expand all | Expand 10 after
7954 } else if (r2_val == 0) { 7977 } else if (r2_val == 0) {
7955 condition_reg_ = CC_EQ; 7978 condition_reg_ = CC_EQ;
7956 } else if (r2_val < 0) { 7979 } else if (r2_val < 0) {
7957 condition_reg_ = CC_LT; 7980 condition_reg_ = CC_LT;
7958 } else if (r2_val > 0) { 7981 } else if (r2_val > 0) {
7959 condition_reg_ = CC_GT; 7982 condition_reg_ = CC_GT;
7960 } 7983 }
7961 return length; 7984 return length;
7962 } 7985 }
7963 7986
7964 EVALUATE(SQEBR) { return DecodeInstructionOriginal(instr); } 7987 EVALUATE(SQEBR) {
7988 DCHECK_OPCODE(SQEBR);
7989 DECODE_RRE_INSTRUCTION(r1, r2);
7990 float fr1_val = get_float32_from_d_register(r1);
7991 float fr2_val = get_float32_from_d_register(r2);
7992 fr1_val = std::sqrt(fr2_val);
7993 set_d_register_from_float32(r1, fr1_val);
7994 return length;
7995 }
7965 7996
7966 EVALUATE(SQDBR) { return DecodeInstructionOriginal(instr); } 7997 EVALUATE(SQDBR) {
7998 DCHECK_OPCODE(SQDBR);
7999 DECODE_RRE_INSTRUCTION(r1, r2);
8000 double r1_val = get_double_from_d_register(r1);
8001 double r2_val = get_double_from_d_register(r2);
8002 r1_val = std::sqrt(r2_val);
8003 set_d_register_from_double(r1, r1_val);
8004 return length;
8005 }
7967 8006
7968 EVALUATE(SQXBR) { return DecodeInstructionOriginal(instr); } 8007 EVALUATE(SQXBR) { return DecodeInstructionOriginal(instr); }
7969 8008
7970 EVALUATE(MEEBR) { return DecodeInstructionOriginal(instr); } 8009 EVALUATE(MEEBR) {
8010 DCHECK_OPCODE(MEEBR);
8011 DECODE_RRE_INSTRUCTION(r1, r2);
8012 float fr1_val = get_float32_from_d_register(r1);
8013 float fr2_val = get_float32_from_d_register(r2);
8014 fr1_val *= fr2_val;
8015 set_d_register_from_float32(r1, fr1_val);
8016 SetS390ConditionCode<float>(fr1_val, 0);
8017 return length;
8018 }
7971 8019
7972 EVALUATE(KDBR) { return DecodeInstructionOriginal(instr); } 8020 EVALUATE(KDBR) { return DecodeInstructionOriginal(instr); }
7973 8021
7974 EVALUATE(CDBR) { return DecodeInstructionOriginal(instr); } 8022 EVALUATE(CDBR) {
8023 DCHECK_OPCODE(CDBR);
8024 DECODE_RRE_INSTRUCTION(r1, r2);
8025 double r1_val = get_double_from_d_register(r1);
8026 double r2_val = get_double_from_d_register(r2);
8027 if (isNaN(r1_val) || isNaN(r2_val)) {
8028 condition_reg_ = CC_OF;
8029 } else {
8030 SetS390ConditionCode<double>(r1_val, r2_val);
8031 }
8032 return length;
8033 }
7975 8034
7976 EVALUATE(ADBR) { return DecodeInstructionOriginal(instr); } 8035 EVALUATE(ADBR) {
8036 DCHECK_OPCODE(ADBR);
8037 DECODE_RRE_INSTRUCTION(r1, r2);
8038 double r1_val = get_double_from_d_register(r1);
8039 double r2_val = get_double_from_d_register(r2);
8040 r1_val += r2_val;
8041 set_d_register_from_double(r1, r1_val);
8042 SetS390ConditionCode<double>(r1_val, 0);
8043 return length;
8044 }
7977 8045
7978 EVALUATE(SDBR) { return DecodeInstructionOriginal(instr); } 8046 EVALUATE(SDBR) {
8047 DCHECK_OPCODE(SDBR);
8048 DECODE_RRE_INSTRUCTION(r1, r2);
8049 double r1_val = get_double_from_d_register(r1);
8050 double r2_val = get_double_from_d_register(r2);
8051 r1_val -= r2_val;
8052 set_d_register_from_double(r1, r1_val);
8053 SetS390ConditionCode<double>(r1_val, 0);
8054 return length;
8055 }
7979 8056
7980 EVALUATE(MDBR) { return DecodeInstructionOriginal(instr); } 8057 EVALUATE(MDBR) {
8058 DCHECK_OPCODE(MDBR);
8059 DECODE_RRE_INSTRUCTION(r1, r2);
8060 double r1_val = get_double_from_d_register(r1);
8061 double r2_val = get_double_from_d_register(r2);
8062 r1_val *= r2_val;
8063 set_d_register_from_double(r1, r1_val);
8064 SetS390ConditionCode<double>(r1_val, 0);
8065 return length;
8066 }
7981 8067
7982 EVALUATE(DDBR) { return DecodeInstructionOriginal(instr); } 8068 EVALUATE(DDBR) {
8069 DCHECK_OPCODE(DDBR);
8070 DECODE_RRE_INSTRUCTION(r1, r2);
8071 double r1_val = get_double_from_d_register(r1);
8072 double r2_val = get_double_from_d_register(r2);
8073 r1_val /= r2_val;
8074 set_d_register_from_double(r1, r1_val);
8075 SetS390ConditionCode<double>(r1_val, 0);
8076 return length;
8077 }
7983 8078
7984 EVALUATE(MADBR) { return DecodeInstructionOriginal(instr); } 8079 EVALUATE(MADBR) {
8080 DCHECK_OPCODE(MADBR);
8081 DECODE_RRD_INSTRUCTION(r1, r2, r3);
8082 double r1_val = get_double_from_d_register(r1);
8083 double r2_val = get_double_from_d_register(r2);
8084 double r3_val = get_double_from_d_register(r3);
8085 r1_val += r2_val * r3_val;
8086 set_d_register_from_double(r1, r1_val);
8087 SetS390ConditionCode<double>(r1_val, 0);
8088 return length;
8089 }
7985 8090
7986 EVALUATE(MSDBR) { return DecodeInstructionOriginal(instr); } 8091 EVALUATE(MSDBR) { return DecodeInstructionOriginal(instr); }
7987 8092
7988 EVALUATE(LPXBR) { return DecodeInstructionOriginal(instr); } 8093 EVALUATE(LPXBR) { return DecodeInstructionOriginal(instr); }
7989 8094
7990 EVALUATE(LNXBR) { return DecodeInstructionOriginal(instr); } 8095 EVALUATE(LNXBR) { return DecodeInstructionOriginal(instr); }
7991 8096
7992 EVALUATE(LTXBR) { return DecodeInstructionOriginal(instr); } 8097 EVALUATE(LTXBR) { return DecodeInstructionOriginal(instr); }
7993 8098
7994 EVALUATE(LCXBR) { return DecodeInstructionOriginal(instr); } 8099 EVALUATE(LCXBR) { return DecodeInstructionOriginal(instr); }
(...skipping 17 matching lines...) Expand all
8012 EVALUATE(MXBR) { return DecodeInstructionOriginal(instr); } 8117 EVALUATE(MXBR) { return DecodeInstructionOriginal(instr); }
8013 8118
8014 EVALUATE(DXBR) { return DecodeInstructionOriginal(instr); } 8119 EVALUATE(DXBR) { return DecodeInstructionOriginal(instr); }
8015 8120
8016 EVALUATE(TBEDR) { return DecodeInstructionOriginal(instr); } 8121 EVALUATE(TBEDR) { return DecodeInstructionOriginal(instr); }
8017 8122
8018 EVALUATE(TBDR) { return DecodeInstructionOriginal(instr); } 8123 EVALUATE(TBDR) { return DecodeInstructionOriginal(instr); }
8019 8124
8020 EVALUATE(DIEBR) { return DecodeInstructionOriginal(instr); } 8125 EVALUATE(DIEBR) { return DecodeInstructionOriginal(instr); }
8021 8126
8022 EVALUATE(FIEBRA) { return DecodeInstructionOriginal(instr); } 8127 EVALUATE(FIEBRA) {
8128 DCHECK_OPCODE(FIEBRA);
8129 DECODE_RRF_E_INSTRUCTION(r1, r2, m3, m4);
8130 float r2_val = get_float32_from_d_register(r2);
8131 CHECK(m4 == 0);
8132 switch (m3) {
8133 case Assembler::FIDBRA_ROUND_TO_NEAREST_AWAY_FROM_0:
8134 set_d_register_from_float32(r1, round(r2_val));
8135 break;
8136 case Assembler::FIDBRA_ROUND_TOWARD_0:
8137 set_d_register_from_float32(r1, trunc(r2_val));
8138 break;
8139 case Assembler::FIDBRA_ROUND_TOWARD_POS_INF:
8140 set_d_register_from_float32(r1, std::ceil(r2_val));
8141 break;
8142 case Assembler::FIDBRA_ROUND_TOWARD_NEG_INF:
8143 set_d_register_from_float32(r1, std::floor(r2_val));
8144 break;
8145 default:
8146 UNIMPLEMENTED();
8147 break;
8148 }
8149 return length;
8150 }
8023 8151
8024 EVALUATE(THDER) { return DecodeInstructionOriginal(instr); } 8152 EVALUATE(THDER) { return DecodeInstructionOriginal(instr); }
8025 8153
8026 EVALUATE(THDR) { return DecodeInstructionOriginal(instr); } 8154 EVALUATE(THDR) { return DecodeInstructionOriginal(instr); }
8027 8155
8028 EVALUATE(DIDBR) { return DecodeInstructionOriginal(instr); } 8156 EVALUATE(DIDBR) { return DecodeInstructionOriginal(instr); }
8029 8157
8030 EVALUATE(FIDBRA) { return DecodeInstructionOriginal(instr); } 8158 EVALUATE(FIDBRA) {
8159 DCHECK_OPCODE(FIDBRA);
8160 DECODE_RRF_E_INSTRUCTION(r1, r2, m3, m4);
8161 double r2_val = get_double_from_d_register(r2);
8162 CHECK(m4 == 0);
8163 switch (m3) {
8164 case Assembler::FIDBRA_ROUND_TO_NEAREST_AWAY_FROM_0:
8165 set_d_register_from_double(r1, round(r2_val));
8166 break;
8167 case Assembler::FIDBRA_ROUND_TOWARD_0:
8168 set_d_register_from_double(r1, trunc(r2_val));
8169 break;
8170 case Assembler::FIDBRA_ROUND_TOWARD_POS_INF:
8171 set_d_register_from_double(r1, std::ceil(r2_val));
8172 break;
8173 case Assembler::FIDBRA_ROUND_TOWARD_NEG_INF:
8174 set_d_register_from_double(r1, std::floor(r2_val));
8175 break;
8176 default:
8177 UNIMPLEMENTED();
8178 break;
8179 }
8180 return length;
8181 }
8031 8182
8032 EVALUATE(LXR) { return DecodeInstructionOriginal(instr); } 8183 EVALUATE(LXR) { return DecodeInstructionOriginal(instr); }
8033 8184
8034 EVALUATE(LPDFR) { return DecodeInstructionOriginal(instr); } 8185 EVALUATE(LPDFR) { return DecodeInstructionOriginal(instr); }
8035 8186
8036 EVALUATE(LNDFR) { return DecodeInstructionOriginal(instr); } 8187 EVALUATE(LNDFR) { return DecodeInstructionOriginal(instr); }
8037 8188
8038 EVALUATE(LCDFR) { return DecodeInstructionOriginal(instr); } 8189 EVALUATE(LCDFR) { return DecodeInstructionOriginal(instr); }
8039 8190
8040 EVALUATE(LZER) { return DecodeInstructionOriginal(instr); } 8191 EVALUATE(LZER) { return DecodeInstructionOriginal(instr); }
8041 8192
8042 EVALUATE(LZDR) { return DecodeInstructionOriginal(instr); } 8193 EVALUATE(LZDR) {
8194 DCHECK_OPCODE(LZDR);
8195 DECODE_RRE_INSTRUCTION_NO_R2(r1);
8196 set_d_register_from_double(r1, 0.0);
8197 return length;
8198 }
8043 8199
8044 EVALUATE(LZXR) { return DecodeInstructionOriginal(instr); } 8200 EVALUATE(LZXR) { return DecodeInstructionOriginal(instr); }
8045 8201
8046 EVALUATE(SFPC) { return DecodeInstructionOriginal(instr); } 8202 EVALUATE(SFPC) { return DecodeInstructionOriginal(instr); }
8047 8203
8048 EVALUATE(SFASR) { return DecodeInstructionOriginal(instr); } 8204 EVALUATE(SFASR) { return DecodeInstructionOriginal(instr); }
8049 8205
8050 EVALUATE(EFPC) { return DecodeInstructionOriginal(instr); } 8206 EVALUATE(EFPC) { return DecodeInstructionOriginal(instr); }
8051 8207
8052 EVALUATE(CELFBR) { return DecodeInstructionOriginal(instr); } 8208 EVALUATE(CELFBR) {
8209 DCHECK_OPCODE(CELFBR);
8210 DECODE_RRE_INSTRUCTION(r1, r2);
8211 uint32_t r2_val = get_low_register<uint32_t>(r2);
8212 float r1_val = static_cast<float>(r2_val);
8213 set_d_register_from_float32(r1, r1_val);
8214 return length;
8215 }
8053 8216
8054 EVALUATE(CDLFBR) { return DecodeInstructionOriginal(instr); } 8217 EVALUATE(CDLFBR) {
8218 DCHECK_OPCODE(CDLFBR);
8219 DECODE_RRE_INSTRUCTION(r1, r2);
8220 uint32_t r2_val = get_low_register<uint32_t>(r2);
8221 double r1_val = static_cast<double>(r2_val);
8222 set_d_register_from_double(r1, r1_val);
8223 return length;
8224 }
8055 8225
8056 EVALUATE(CXLFBR) { return DecodeInstructionOriginal(instr); } 8226 EVALUATE(CXLFBR) { return DecodeInstructionOriginal(instr); }
8057 8227
8058 EVALUATE(CEFBRA) { return DecodeInstructionOriginal(instr); } 8228 EVALUATE(CEFBRA) { return DecodeInstructionOriginal(instr); }
8059 8229
8060 EVALUATE(CDFBRA) { return DecodeInstructionOriginal(instr); } 8230 EVALUATE(CDFBRA) { return DecodeInstructionOriginal(instr); }
8061 8231
8062 EVALUATE(CXFBRA) { return DecodeInstructionOriginal(instr); } 8232 EVALUATE(CXFBRA) { return DecodeInstructionOriginal(instr); }
8063 8233
8064 EVALUATE(CFEBRA) { return DecodeInstructionOriginal(instr); } 8234 EVALUATE(CFEBRA) { return DecodeInstructionOriginal(instr); }
8065 8235
8066 EVALUATE(CFDBRA) { return DecodeInstructionOriginal(instr); } 8236 EVALUATE(CFDBRA) { return DecodeInstructionOriginal(instr); }
8067 8237
8068 EVALUATE(CFXBRA) { return DecodeInstructionOriginal(instr); } 8238 EVALUATE(CFXBRA) { return DecodeInstructionOriginal(instr); }
8069 8239
8070 EVALUATE(CLFEBR) { return DecodeInstructionOriginal(instr); } 8240 EVALUATE(CLFEBR) {
8241 DCHECK_OPCODE(CLFEBR);
8242 DECODE_RRE_INSTRUCTION(r1, r2);
8243 float r2_val = get_float32_from_d_register(r2);
8244 uint32_t r1_val = static_cast<uint32_t>(r2_val);
8245 set_low_register(r1, r1_val);
8246 SetS390ConvertConditionCode<double>(r2_val, r1_val, UINT32_MAX);
8247 return length;
8248 }
8071 8249
8072 EVALUATE(CLFDBR) { return DecodeInstructionOriginal(instr); } 8250 EVALUATE(CLFDBR) {
8251 DCHECK_OPCODE(CLFDBR);
8252 DECODE_RRE_INSTRUCTION(r1, r2);
8253 double r2_val = get_double_from_d_register(r2);
8254 uint32_t r1_val = static_cast<uint32_t>(r2_val);
8255 set_low_register(r1, r1_val);
8256 SetS390ConvertConditionCode<double>(r2_val, r1_val, UINT32_MAX);
8257 return length;
8258 }
8073 8259
8074 EVALUATE(CLFXBR) { return DecodeInstructionOriginal(instr); } 8260 EVALUATE(CLFXBR) { return DecodeInstructionOriginal(instr); }
8075 8261
8076 EVALUATE(CELGBR) { return DecodeInstructionOriginal(instr); } 8262 EVALUATE(CELGBR) {
8263 DCHECK_OPCODE(CELGBR);
8264 DECODE_RRE_INSTRUCTION(r1, r2);
8265 uint64_t r2_val = get_register(r2);
8266 float r1_val = static_cast<float>(r2_val);
8267 set_d_register_from_float32(r1, r1_val);
8268 return length;
8269 }
8077 8270
8078 EVALUATE(CDLGBR) { return DecodeInstructionOriginal(instr); } 8271 EVALUATE(CDLGBR) {
8272 DCHECK_OPCODE(CDLGBR);
8273 DECODE_RRE_INSTRUCTION(r1, r2);
8274 uint64_t r2_val = get_register(r2);
8275 double r1_val = static_cast<double>(r2_val);
8276 set_d_register_from_double(r1, r1_val);
8277 return length;
8278 }
8079 8279
8080 EVALUATE(CXLGBR) { return DecodeInstructionOriginal(instr); } 8280 EVALUATE(CXLGBR) { return DecodeInstructionOriginal(instr); }
8081 8281
8082 EVALUATE(CEGBRA) { return DecodeInstructionOriginal(instr); } 8282 EVALUATE(CEGBRA) { return DecodeInstructionOriginal(instr); }
8083 8283
8084 EVALUATE(CDGBRA) { return DecodeInstructionOriginal(instr); } 8284 EVALUATE(CDGBRA) { return DecodeInstructionOriginal(instr); }
8085 8285
8086 EVALUATE(CXGBRA) { return DecodeInstructionOriginal(instr); } 8286 EVALUATE(CXGBRA) { return DecodeInstructionOriginal(instr); }
8087 8287
8088 EVALUATE(CGEBRA) { return DecodeInstructionOriginal(instr); } 8288 EVALUATE(CGEBRA) { return DecodeInstructionOriginal(instr); }
8089 8289
8090 EVALUATE(CGDBRA) { return DecodeInstructionOriginal(instr); } 8290 EVALUATE(CGDBRA) { return DecodeInstructionOriginal(instr); }
8091 8291
8092 EVALUATE(CGXBRA) { return DecodeInstructionOriginal(instr); } 8292 EVALUATE(CGXBRA) { return DecodeInstructionOriginal(instr); }
8093 8293
8094 EVALUATE(CLGEBR) { return DecodeInstructionOriginal(instr); } 8294 EVALUATE(CLGEBR) {
8295 DCHECK_OPCODE(CLGEBR);
8296 DECODE_RRE_INSTRUCTION(r1, r2);
8297 float r2_val = get_float32_from_d_register(r2);
8298 uint64_t r1_val = static_cast<uint64_t>(r2_val);
8299 set_register(r1, r1_val);
8300 SetS390ConvertConditionCode<double>(r2_val, r1_val, UINT64_MAX);
8301 return length;
8302 }
8095 8303
8096 EVALUATE(CLGDBR) { return DecodeInstructionOriginal(instr); } 8304 EVALUATE(CLGDBR) {
8305 DCHECK_OPCODE(CLGDBR);
8306 DECODE_RRE_INSTRUCTION(r1, r2);
8307 double r2_val = get_double_from_d_register(r2);
8308 uint64_t r1_val = static_cast<uint64_t>(r2_val);
8309 set_register(r1, r1_val);
8310 SetS390ConvertConditionCode<double>(r2_val, r1_val, UINT64_MAX);
8311 return length;
8312 }
8097 8313
8098 EVALUATE(CFER) { return DecodeInstructionOriginal(instr); } 8314 EVALUATE(CFER) { return DecodeInstructionOriginal(instr); }
8099 8315
8100 EVALUATE(CFDR) { return DecodeInstructionOriginal(instr); } 8316 EVALUATE(CFDR) { return DecodeInstructionOriginal(instr); }
8101 8317
8102 EVALUATE(CFXR) { return DecodeInstructionOriginal(instr); } 8318 EVALUATE(CFXR) { return DecodeInstructionOriginal(instr); }
8103 8319
8104 EVALUATE(LDGR) { return DecodeInstructionOriginal(instr); } 8320 EVALUATE(LDGR) {
8321 DCHECK_OPCODE(LDGR);
8322 // Load FPR from GPR (L <- 64)
8323 DECODE_RRE_INSTRUCTION(r1, r2);
8324 uint64_t int_val = get_register(r2);
8325 // double double_val = bit_cast<double, uint64_t>(int_val);
8326 // set_d_register_from_double(rreInst->R1Value(), double_val);
8327 set_d_register(r1, int_val);
8328 return length;
8329 }
8105 8330
8106 EVALUATE(CGER) { return DecodeInstructionOriginal(instr); } 8331 EVALUATE(CGER) { return DecodeInstructionOriginal(instr); }
8107 8332
8108 EVALUATE(CGDR) { return DecodeInstructionOriginal(instr); } 8333 EVALUATE(CGDR) { return DecodeInstructionOriginal(instr); }
8109 8334
8110 EVALUATE(CGXR) { return DecodeInstructionOriginal(instr); } 8335 EVALUATE(CGXR) { return DecodeInstructionOriginal(instr); }
8111 8336
8112 EVALUATE(LGDR) { return DecodeInstructionOriginal(instr); } 8337 EVALUATE(LGDR) {
8338 DCHECK_OPCODE(LGDR);
8339 DECODE_RRE_INSTRUCTION(r1, r2);
8340 // Load GPR from FPR (64 <- L)
8341 int64_t double_val = get_d_register(r2);
8342 set_register(r1, double_val);
8343 return length;
8344 }
8113 8345
8114 EVALUATE(MDTR) { return DecodeInstructionOriginal(instr); } 8346 EVALUATE(MDTR) { return DecodeInstructionOriginal(instr); }
8115 8347
8116 EVALUATE(MDTRA) { return DecodeInstructionOriginal(instr); } 8348 EVALUATE(MDTRA) { return DecodeInstructionOriginal(instr); }
8117 8349
8118 EVALUATE(DDTRA) { return DecodeInstructionOriginal(instr); } 8350 EVALUATE(DDTRA) { return DecodeInstructionOriginal(instr); }
8119 8351
8120 EVALUATE(ADTRA) { return DecodeInstructionOriginal(instr); } 8352 EVALUATE(ADTRA) { return DecodeInstructionOriginal(instr); }
8121 8353
8122 EVALUATE(SDTRA) { return DecodeInstructionOriginal(instr); } 8354 EVALUATE(SDTRA) { return DecodeInstructionOriginal(instr); }
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
8194 EVALUATE(CEXTR) { return DecodeInstructionOriginal(instr); } 8426 EVALUATE(CEXTR) { return DecodeInstructionOriginal(instr); }
8195 8427
8196 EVALUATE(QAXTR) { return DecodeInstructionOriginal(instr); } 8428 EVALUATE(QAXTR) { return DecodeInstructionOriginal(instr); }
8197 8429
8198 EVALUATE(IEXTR) { return DecodeInstructionOriginal(instr); } 8430 EVALUATE(IEXTR) { return DecodeInstructionOriginal(instr); }
8199 8431
8200 EVALUATE(RRXTR) { return DecodeInstructionOriginal(instr); } 8432 EVALUATE(RRXTR) { return DecodeInstructionOriginal(instr); }
8201 8433
8202 EVALUATE(LPGR) { return DecodeInstructionOriginal(instr); } 8434 EVALUATE(LPGR) { return DecodeInstructionOriginal(instr); }
8203 8435
8204 EVALUATE(LNGR) { return DecodeInstructionOriginal(instr); } 8436 EVALUATE(LNGR) {
8437 DCHECK_OPCODE(LNGR);
8438 // Load Negative (64)
8439 DECODE_RRE_INSTRUCTION(r1, r2);
8440 int64_t r2_val = get_register(r2);
8441 r2_val = (r2_val >= 0) ? -r2_val : r2_val; // If pos, then negate it.
8442 set_register(r1, r2_val);
8443 condition_reg_ = (r2_val == 0) ? CC_EQ : CC_LT; // CC0 - result is zero
8444 // CC1 - result is negative
8445 return length;
8446 }
8205 8447
8206 EVALUATE(LTGR) { return DecodeInstructionOriginal(instr); } 8448 EVALUATE(LTGR) {
8449 DCHECK_OPCODE(LTGR);
8450 // Load Register (64)
8451 DECODE_RRE_INSTRUCTION(r1, r2);
8452 int64_t r2_val = get_register(r2);
8453 SetS390ConditionCode<int64_t>(r2_val, 0);
8454 set_register(r1, get_register(r2));
8455 return length;
8456 }
8207 8457
8208 EVALUATE(LCGR) { return DecodeInstructionOriginal(instr); } 8458 EVALUATE(LCGR) {
8459 DCHECK_OPCODE(LCGR);
8460 DECODE_RRE_INSTRUCTION(r1, r2);
8461 int64_t r2_val = get_register(r2);
8462 r2_val = ~r2_val;
8463 r2_val = r2_val + 1;
8464 set_register(r1, r2_val);
8465 SetS390ConditionCode<int64_t>(r2_val, 0);
8466 // if the input is INT_MIN, loading its compliment would be overflowing
8467 if (r2_val < 0 && (r2_val + 1) > 0) {
8468 SetS390OverflowCode(true);
8469 }
8470 return length;
8471 }
8209 8472
8210 EVALUATE(SGR) { return DecodeInstructionOriginal(instr); } 8473 EVALUATE(SGR) {
8474 DCHECK_OPCODE(SGR);
8475 DECODE_RRE_INSTRUCTION(r1, r2);
8476 int64_t r1_val = get_register(r1);
8477 int64_t r2_val = get_register(r2);
8478 bool isOF = false;
8479 isOF = CheckOverflowForIntSub(r1_val, r2_val, int64_t);
8480 r1_val -= r2_val;
8481 SetS390ConditionCode<int64_t>(r1_val, 0);
8482 SetS390OverflowCode(isOF);
8483 set_register(r1, r1_val);
8484 return length;
8485 }
8211 8486
8212 EVALUATE(ALGR) { return DecodeInstructionOriginal(instr); } 8487 EVALUATE(ALGR) { return DecodeInstructionOriginal(instr); }
8213 8488
8214 EVALUATE(SLGR) { return DecodeInstructionOriginal(instr); } 8489 EVALUATE(SLGR) { return DecodeInstructionOriginal(instr); }
8215 8490
8216 EVALUATE(MSGR) { return DecodeInstructionOriginal(instr); } 8491 EVALUATE(MSGR) {
8492 DCHECK_OPCODE(MSGR);
8493 DECODE_RRE_INSTRUCTION(r1, r2);
8494 int64_t r1_val = get_register(r1);
8495 int64_t r2_val = get_register(r2);
8496 set_register(r1, r1_val * r2_val);
8497 return length;
8498 }
8217 8499
8218 EVALUATE(DSGR) { return DecodeInstructionOriginal(instr); } 8500 EVALUATE(DSGR) {
8501 DCHECK_OPCODE(DSGR);
8502 DECODE_RRE_INSTRUCTION(r1, r2);
8503
8504 DCHECK(r1 % 2 == 0);
8505
8506 int64_t dividend = get_register(r1 + 1);
8507 int64_t divisor = get_register(r2);
8508 set_register(r1, dividend % divisor);
8509 set_register(r1 + 1, dividend / divisor);
8510 return length;
8511 }
8219 8512
8220 EVALUATE(LRVGR) { return DecodeInstructionOriginal(instr); } 8513 EVALUATE(LRVGR) { return DecodeInstructionOriginal(instr); }
8221 8514
8222 EVALUATE(LPGFR) { return DecodeInstructionOriginal(instr); } 8515 EVALUATE(LPGFR) { return DecodeInstructionOriginal(instr); }
8223 8516
8224 EVALUATE(LNGFR) { return DecodeInstructionOriginal(instr); } 8517 EVALUATE(LNGFR) { return DecodeInstructionOriginal(instr); }
8225 8518
8226 EVALUATE(LTGFR) { return DecodeInstructionOriginal(instr); } 8519 EVALUATE(LTGFR) {
8520 DCHECK_OPCODE(LTGFR);
8521 DECODE_RRE_INSTRUCTION(r1, r2);
8522 // Load and Test Register (64 <- 32) (Sign Extends 32-bit val)
8523 // Load Register (64 <- 32) (Sign Extends 32-bit val)
8524 int32_t r2_val = get_low_register<int32_t>(r2);
8525 int64_t result = static_cast<int64_t>(r2_val);
8526 set_register(r1, result);
8527 SetS390ConditionCode<int64_t>(result, 0);
8528 return length;
8529 }
8227 8530
8228 EVALUATE(LCGFR) { return DecodeInstructionOriginal(instr); } 8531 EVALUATE(LCGFR) {
8532 DCHECK_OPCODE(LCGFR);
8533 DECODE_RRE_INSTRUCTION(r1, r2);
8534 // Load and Test Register (64 <- 32) (Sign Extends 32-bit val)
8535 // Load Register (64 <- 32) (Sign Extends 32-bit val)
8536 int32_t r2_val = get_low_register<int32_t>(r2);
8537 int64_t result = static_cast<int64_t>(r2_val);
8538 set_register(r1, result);
8539 return length;
8540 }
8229 8541
8230 EVALUATE(LLGFR) { return DecodeInstructionOriginal(instr); } 8542 EVALUATE(LLGFR) { return DecodeInstructionOriginal(instr); }
8231 8543
8232 EVALUATE(LLGTR) { return DecodeInstructionOriginal(instr); } 8544 EVALUATE(LLGTR) { return DecodeInstructionOriginal(instr); }
8233 8545
8234 EVALUATE(AGFR) { return DecodeInstructionOriginal(instr); } 8546 EVALUATE(AGFR) {
8547 DCHECK_OPCODE(AGFR);
8548 DECODE_RRE_INSTRUCTION(r1, r2);
8549 // Add Register (64 <- 32) (Sign Extends 32-bit val)
8550 int64_t r1_val = get_register(r1);
8551 int64_t r2_val = static_cast<int64_t>(get_low_register<int32_t>(r2));
8552 bool isOF = CheckOverflowForIntAdd(r1_val, r2_val, int64_t);
8553 r1_val += r2_val;
8554 SetS390ConditionCode<int64_t>(r1_val, 0);
8555 SetS390OverflowCode(isOF);
8556 set_register(r1, r1_val);
8557 return length;
8558 }
8235 8559
8236 EVALUATE(SGFR) { return DecodeInstructionOriginal(instr); } 8560 EVALUATE(SGFR) {
8561 DCHECK_OPCODE(SGFR);
8562 DECODE_RRE_INSTRUCTION(r1, r2);
8563 // Sub Reg (64 <- 32)
8564 int64_t r1_val = get_register(r1);
8565 int64_t r2_val = static_cast<int64_t>(get_low_register<int32_t>(r2));
8566 bool isOF = false;
8567 isOF = CheckOverflowForIntSub(r1_val, r2_val, int64_t);
8568 r1_val -= r2_val;
8569 SetS390ConditionCode<int64_t>(r1_val, 0);
8570 SetS390OverflowCode(isOF);
8571 set_register(r1, r1_val);
8572 return length;
8573 }
8237 8574
8238 EVALUATE(ALGFR) { return DecodeInstructionOriginal(instr); } 8575 EVALUATE(ALGFR) { return DecodeInstructionOriginal(instr); }
8239 8576
8240 EVALUATE(SLGFR) { return DecodeInstructionOriginal(instr); } 8577 EVALUATE(SLGFR) { return DecodeInstructionOriginal(instr); }
8241 8578
8242 EVALUATE(MSGFR) { return DecodeInstructionOriginal(instr); } 8579 EVALUATE(MSGFR) { return DecodeInstructionOriginal(instr); }
8243 8580
8244 EVALUATE(DSGFR) { return DecodeInstructionOriginal(instr); } 8581 EVALUATE(DSGFR) { return DecodeInstructionOriginal(instr); }
8245 8582
8246 EVALUATE(KMAC) { return DecodeInstructionOriginal(instr); } 8583 EVALUATE(KMAC) { return DecodeInstructionOriginal(instr); }
8247 8584
8248 EVALUATE(LRVR) { return DecodeInstructionOriginal(instr); } 8585 EVALUATE(LRVR) { return DecodeInstructionOriginal(instr); }
8249 8586
8250 EVALUATE(CGR) { return DecodeInstructionOriginal(instr); } 8587 EVALUATE(CGR) {
8588 DCHECK_OPCODE(CGR);
8589 DECODE_RRE_INSTRUCTION(r1, r2);
8590 // Compare (64)
8591 int64_t r1_val = get_register(r1);
8592 int64_t r2_val = get_register(r2);
8593 SetS390ConditionCode<int64_t>(r1_val, r2_val);
8594 return length;
8595 }
8251 8596
8252 EVALUATE(CLGR) { return DecodeInstructionOriginal(instr); } 8597 EVALUATE(CLGR) {
8598 DCHECK_OPCODE(CLGR);
8599 DECODE_RRE_INSTRUCTION(r1, r2);
8600 // Compare Logical (64)
8601 uint64_t r1_val = static_cast<uint64_t>(get_register(r1));
8602 uint64_t r2_val = static_cast<uint64_t>(get_register(r2));
8603 SetS390ConditionCode<uint64_t>(r1_val, r2_val);
8604 return length;
8605 }
8253 8606
8254 EVALUATE(KMF) { return DecodeInstructionOriginal(instr); } 8607 EVALUATE(KMF) { return DecodeInstructionOriginal(instr); }
8255 8608
8256 EVALUATE(KMO) { return DecodeInstructionOriginal(instr); } 8609 EVALUATE(KMO) { return DecodeInstructionOriginal(instr); }
8257 8610
8258 EVALUATE(PCC) { return DecodeInstructionOriginal(instr); } 8611 EVALUATE(PCC) { return DecodeInstructionOriginal(instr); }
8259 8612
8260 EVALUATE(KMCTR) { return DecodeInstructionOriginal(instr); } 8613 EVALUATE(KMCTR) { return DecodeInstructionOriginal(instr); }
8261 8614
8262 EVALUATE(KM) { return DecodeInstructionOriginal(instr); } 8615 EVALUATE(KM) { return DecodeInstructionOriginal(instr); }
(...skipping 25 matching lines...) Expand all
8288 EVALUATE(CDLFTR) { return DecodeInstructionOriginal(instr); } 8641 EVALUATE(CDLFTR) { return DecodeInstructionOriginal(instr); }
8289 8642
8290 EVALUATE(CXFTR) { return DecodeInstructionOriginal(instr); } 8643 EVALUATE(CXFTR) { return DecodeInstructionOriginal(instr); }
8291 8644
8292 EVALUATE(CXLGTR) { return DecodeInstructionOriginal(instr); } 8645 EVALUATE(CXLGTR) { return DecodeInstructionOriginal(instr); }
8293 8646
8294 EVALUATE(CXLFTR) { return DecodeInstructionOriginal(instr); } 8647 EVALUATE(CXLFTR) { return DecodeInstructionOriginal(instr); }
8295 8648
8296 EVALUATE(CGRT) { return DecodeInstructionOriginal(instr); } 8649 EVALUATE(CGRT) { return DecodeInstructionOriginal(instr); }
8297 8650
8298 EVALUATE(NGR) { return DecodeInstructionOriginal(instr); } 8651 EVALUATE(NGR) {
8652 DCHECK_OPCODE(NGR);
8653 DECODE_RRE_INSTRUCTION(r1, r2);
8654 int64_t r1_val = get_register(r1);
8655 int64_t r2_val = get_register(r2);
8656 r1_val &= r2_val;
8657 SetS390BitWiseConditionCode<uint64_t>(r1_val);
8658 set_register(r1, r1_val);
8659 return length;
8660 }
8299 8661
8300 EVALUATE(OGR) { return DecodeInstructionOriginal(instr); } 8662 EVALUATE(OGR) {
8663 DCHECK_OPCODE(OGR);
8664 DECODE_RRE_INSTRUCTION(r1, r2);
8665 int64_t r1_val = get_register(r1);
8666 int64_t r2_val = get_register(r2);
8667 r1_val |= r2_val;
8668 SetS390BitWiseConditionCode<uint64_t>(r1_val);
8669 set_register(r1, r1_val);
8670 return length;
8671 }
8301 8672
8302 EVALUATE(XGR) { return DecodeInstructionOriginal(instr); } 8673 EVALUATE(XGR) {
8674 DCHECK_OPCODE(XGR);
8675 DECODE_RRE_INSTRUCTION(r1, r2);
8676 int64_t r1_val = get_register(r1);
8677 int64_t r2_val = get_register(r2);
8678 r1_val ^= r2_val;
8679 SetS390BitWiseConditionCode<uint64_t>(r1_val);
8680 set_register(r1, r1_val);
8681 return length;
8682 }
8303 8683
8304 EVALUATE(FLOGR) { return DecodeInstructionOriginal(instr); } 8684 EVALUATE(FLOGR) {
8685 DCHECK_OPCODE(FLOGR);
8686 DECODE_RRE_INSTRUCTION(r1, r2);
8687
8688 DCHECK(r1 % 2 == 0);
8689
8690 int64_t r2_val = get_register(r2);
8691
8692 int i = 0;
8693 for (; i < 64; i++) {
8694 if (r2_val < 0) break;
8695 r2_val <<= 1;
8696 }
8697
8698 r2_val = get_register(r2);
8699
8700 int64_t mask = ~(1 << (63 - i));
8701 set_register(r1, i);
8702 set_register(r1 + 1, r2_val & mask);
8703 return length;
8704 }
8305 8705
8306 EVALUATE(LLGCR) { return DecodeInstructionOriginal(instr); } 8706 EVALUATE(LLGCR) { return DecodeInstructionOriginal(instr); }
8307 8707
8308 EVALUATE(LLGHR) { return DecodeInstructionOriginal(instr); } 8708 EVALUATE(LLGHR) { return DecodeInstructionOriginal(instr); }
8309 8709
8310 EVALUATE(MLGR) { return DecodeInstructionOriginal(instr); } 8710 EVALUATE(MLGR) { return DecodeInstructionOriginal(instr); }
8311 8711
8312 EVALUATE(DLGR) { return DecodeInstructionOriginal(instr); } 8712 EVALUATE(DLGR) {
8713 DCHECK_OPCODE(DLGR);
8714 #ifdef V8_TARGET_ARCH_S390X
8715 DECODE_RRE_INSTRUCTION(r1, r2);
8716 uint64_t r1_val = get_register(r1);
8717 uint64_t r2_val = get_register(r2);
8718 DCHECK(r1 % 2 == 0);
8719 unsigned __int128 dividend = static_cast<unsigned __int128>(r1_val) << 64;
8720 dividend += get_register(r1 + 1);
8721 uint64_t remainder = dividend % r2_val;
8722 uint64_t quotient = dividend / r2_val;
8723 r1_val = remainder;
8724 set_register(r1, remainder);
8725 set_register(r1 + 1, quotient);
8726 return length;
8727 #else
8728 UNREACHABLE();
8729 #endif
8730 }
8313 8731
8314 EVALUATE(ALCGR) { return DecodeInstructionOriginal(instr); } 8732 EVALUATE(ALCGR) { return DecodeInstructionOriginal(instr); }
8315 8733
8316 EVALUATE(SLBGR) { return DecodeInstructionOriginal(instr); } 8734 EVALUATE(SLBGR) { return DecodeInstructionOriginal(instr); }
8317 8735
8318 EVALUATE(EPSW) { return DecodeInstructionOriginal(instr); } 8736 EVALUATE(EPSW) { return DecodeInstructionOriginal(instr); }
8319 8737
8320 EVALUATE(TRTT) { return DecodeInstructionOriginal(instr); } 8738 EVALUATE(TRTT) { return DecodeInstructionOriginal(instr); }
8321 8739
8322 EVALUATE(TRTO) { return DecodeInstructionOriginal(instr); } 8740 EVALUATE(TRTO) { return DecodeInstructionOriginal(instr); }
8323 8741
8324 EVALUATE(TROT) { return DecodeInstructionOriginal(instr); } 8742 EVALUATE(TROT) { return DecodeInstructionOriginal(instr); }
8325 8743
8326 EVALUATE(TROO) { return DecodeInstructionOriginal(instr); } 8744 EVALUATE(TROO) { return DecodeInstructionOriginal(instr); }
8327 8745
8328 EVALUATE(LLCR) { return DecodeInstructionOriginal(instr); } 8746 EVALUATE(LLCR) { return DecodeInstructionOriginal(instr); }
8329 8747
8330 EVALUATE(LLHR) { return DecodeInstructionOriginal(instr); } 8748 EVALUATE(LLHR) { return DecodeInstructionOriginal(instr); }
8331 8749
8332 EVALUATE(MLR) { return DecodeInstructionOriginal(instr); } 8750 EVALUATE(MLR) {
8751 DCHECK_OPCODE(MLR);
8752 DECODE_RRE_INSTRUCTION(r1, r2);
8753 DCHECK(r1 % 2 == 0);
8333 8754
8334 EVALUATE(DLR) { return DecodeInstructionOriginal(instr); } 8755 uint32_t r1_val = get_low_register<uint32_t>(r1 + 1);
8756 uint32_t r2_val = get_low_register<uint32_t>(r2);
8757 uint64_t product =
8758 static_cast<uint64_t>(r1_val) * static_cast<uint64_t>(r2_val);
8759 int32_t high_bits = product >> 32;
8760 int32_t low_bits = product & 0x00000000FFFFFFFF;
8761 set_low_register(r1, high_bits);
8762 set_low_register(r1 + 1, low_bits);
8763 return length;
8764 }
8335 8765
8336 EVALUATE(ALCR) { return DecodeInstructionOriginal(instr); } 8766 EVALUATE(DLR) {
8767 DCHECK_OPCODE(DLR);
8768 DECODE_RRE_INSTRUCTION(r1, r2);
8769 uint32_t r1_val = get_low_register<uint32_t>(r1);
8770 uint32_t r2_val = get_low_register<uint32_t>(r2);
8771 DCHECK(r1 % 2 == 0);
8772 uint64_t dividend = static_cast<uint64_t>(r1_val) << 32;
8773 dividend += get_low_register<uint32_t>(r1 + 1);
8774 uint32_t remainder = dividend % r2_val;
8775 uint32_t quotient = dividend / r2_val;
8776 r1_val = remainder;
8777 set_low_register(r1, remainder);
8778 set_low_register(r1 + 1, quotient);
8779 return length;
8780 }
8337 8781
8338 EVALUATE(SLBR) { return DecodeInstructionOriginal(instr); } 8782 EVALUATE(ALCR) {
8783 DCHECK_OPCODE(ALCR);
8784 DECODE_RRE_INSTRUCTION(r1, r2);
8785 uint32_t r1_val = get_low_register<uint32_t>(r1);
8786 uint32_t r2_val = get_low_register<uint32_t>(r2);
8787 uint32_t alu_out = 0;
8788 bool isOF = false;
8789
8790 alu_out = r1_val + r2_val;
8791 bool isOF_original = CheckOverflowForUIntAdd(r1_val, r2_val);
8792 if (TestConditionCode((Condition)2) || TestConditionCode((Condition)3)) {
8793 alu_out = alu_out + 1;
8794 isOF = isOF_original || CheckOverflowForUIntAdd(alu_out, 1);
8795 } else {
8796 isOF = isOF_original;
8797 }
8798 set_low_register(r1, alu_out);
8799 SetS390ConditionCodeCarry<uint32_t>(alu_out, isOF);
8800 return length;
8801 }
8802
8803 EVALUATE(SLBR) {
8804 DCHECK_OPCODE(SLBR);
8805 DECODE_RRE_INSTRUCTION(r1, r2);
8806 uint32_t r1_val = get_low_register<uint32_t>(r1);
8807 uint32_t r2_val = get_low_register<uint32_t>(r2);
8808 uint32_t alu_out = 0;
8809 bool isOF = false;
8810
8811 alu_out = r1_val - r2_val;
8812 bool isOF_original = CheckOverflowForUIntSub(r1_val, r2_val);
8813 if (TestConditionCode((Condition)2) || TestConditionCode((Condition)3)) {
8814 alu_out = alu_out - 1;
8815 isOF = isOF_original || CheckOverflowForUIntSub(alu_out, 1);
8816 } else {
8817 isOF = isOF_original;
8818 }
8819 set_low_register(r1, alu_out);
8820 SetS390ConditionCodeCarry<uint32_t>(alu_out, isOF);
8821 return length;
8822 }
8339 8823
8340 EVALUATE(CU14) { return DecodeInstructionOriginal(instr); } 8824 EVALUATE(CU14) { return DecodeInstructionOriginal(instr); }
8341 8825
8342 EVALUATE(CU24) { return DecodeInstructionOriginal(instr); } 8826 EVALUATE(CU24) { return DecodeInstructionOriginal(instr); }
8343 8827
8344 EVALUATE(CU41) { return DecodeInstructionOriginal(instr); } 8828 EVALUATE(CU41) { return DecodeInstructionOriginal(instr); }
8345 8829
8346 EVALUATE(CU42) { return DecodeInstructionOriginal(instr); } 8830 EVALUATE(CU42) { return DecodeInstructionOriginal(instr); }
8347 8831
8348 EVALUATE(TRTRE) { return DecodeInstructionOriginal(instr); } 8832 EVALUATE(TRTRE) { return DecodeInstructionOriginal(instr); }
(...skipping 19 matching lines...) Expand all
8368 EVALUATE(ALHHLR) { return DecodeInstructionOriginal(instr); } 8852 EVALUATE(ALHHLR) { return DecodeInstructionOriginal(instr); }
8369 8853
8370 EVALUATE(SLHHLR) { return DecodeInstructionOriginal(instr); } 8854 EVALUATE(SLHHLR) { return DecodeInstructionOriginal(instr); }
8371 8855
8372 EVALUATE(CHLR) { return DecodeInstructionOriginal(instr); } 8856 EVALUATE(CHLR) { return DecodeInstructionOriginal(instr); }
8373 8857
8374 EVALUATE(POPCNT_Z) { return DecodeInstructionOriginal(instr); } 8858 EVALUATE(POPCNT_Z) { return DecodeInstructionOriginal(instr); }
8375 8859
8376 EVALUATE(LOCGR) { return DecodeInstructionOriginal(instr); } 8860 EVALUATE(LOCGR) { return DecodeInstructionOriginal(instr); }
8377 8861
8378 EVALUATE(NGRK) { return DecodeInstructionOriginal(instr); } 8862 EVALUATE(NGRK) {
8379 8863 DCHECK_OPCODE(NGRK);
8380 EVALUATE(OGRK) { return DecodeInstructionOriginal(instr); } 8864 DECODE_RRF_A_INSTRUCTION(r1, r2, r3);
8381 8865 // 64-bit Non-clobbering arithmetics / bitwise ops.
8382 EVALUATE(XGRK) { return DecodeInstructionOriginal(instr); } 8866 int64_t r2_val = get_register(r2);
8383 8867 int64_t r3_val = get_register(r3);
8384 EVALUATE(AGRK) { return DecodeInstructionOriginal(instr); } 8868 uint64_t bitwise_result = 0;
8385 8869 bitwise_result = r2_val & r3_val;
8386 EVALUATE(SGRK) { return DecodeInstructionOriginal(instr); } 8870 SetS390BitWiseConditionCode<uint64_t>(bitwise_result);
8387 8871 set_register(r1, bitwise_result);
8388 EVALUATE(ALGRK) { return DecodeInstructionOriginal(instr); } 8872 return length;
8389 8873 }
8390 EVALUATE(SLGRK) { return DecodeInstructionOriginal(instr); } 8874
8875 EVALUATE(OGRK) {
8876 DCHECK_OPCODE(OGRK);
8877 DECODE_RRF_A_INSTRUCTION(r1, r2, r3);
8878 // 64-bit Non-clobbering arithmetics / bitwise ops.
8879 int64_t r2_val = get_register(r2);
8880 int64_t r3_val = get_register(r3);
8881 uint64_t bitwise_result = 0;
8882 bitwise_result = r2_val | r3_val;
8883 SetS390BitWiseConditionCode<uint64_t>(bitwise_result);
8884 set_register(r1, bitwise_result);
8885 return length;
8886 }
8887
8888 EVALUATE(XGRK) {
8889 DCHECK_OPCODE(XGRK);
8890 DECODE_RRF_A_INSTRUCTION(r1, r2, r3);
8891 // 64-bit Non-clobbering arithmetics / bitwise ops.
8892 int64_t r2_val = get_register(r2);
8893 int64_t r3_val = get_register(r3);
8894 uint64_t bitwise_result = 0;
8895 bitwise_result = r2_val ^ r3_val;
8896 SetS390BitWiseConditionCode<uint64_t>(bitwise_result);
8897 set_register(r1, bitwise_result);
8898 return length;
8899 }
8900
8901 EVALUATE(AGRK) {
8902 DCHECK_OPCODE(AGRK);
8903 DECODE_RRF_A_INSTRUCTION(r1, r2, r3);
8904 // 64-bit Non-clobbering arithmetics / bitwise ops.
8905 int64_t r2_val = get_register(r2);
8906 int64_t r3_val = get_register(r3);
8907 bool isOF = CheckOverflowForIntAdd(r2_val, r3_val, int64_t);
8908 SetS390ConditionCode<int64_t>(r2_val + r3_val, 0);
8909 SetS390OverflowCode(isOF);
8910 set_register(r1, r2_val + r3_val);
8911 return length;
8912 }
8913
8914 EVALUATE(SGRK) {
8915 DCHECK_OPCODE(SGRK);
8916 DECODE_RRF_A_INSTRUCTION(r1, r2, r3);
8917 // 64-bit Non-clobbering arithmetics / bitwise ops.
8918 int64_t r2_val = get_register(r2);
8919 int64_t r3_val = get_register(r3);
8920 bool isOF = CheckOverflowForIntSub(r2_val, r3_val, int64_t);
8921 SetS390ConditionCode<int64_t>(r2_val - r3_val, 0);
8922 SetS390OverflowCode(isOF);
8923 set_register(r1, r2_val - r3_val);
8924 return length;
8925 }
8926
8927 EVALUATE(ALGRK) {
8928 DCHECK_OPCODE(ALGRK);
8929 DECODE_RRF_A_INSTRUCTION(r1, r2, r3);
8930 // 64-bit Non-clobbering unsigned arithmetics
8931 uint64_t r2_val = get_register(r2);
8932 uint64_t r3_val = get_register(r3);
8933 bool isOF = CheckOverflowForUIntAdd(r2_val, r3_val);
8934 SetS390ConditionCode<uint64_t>(r2_val + r3_val, 0);
8935 SetS390OverflowCode(isOF);
8936 set_register(r1, r2_val + r3_val);
8937 return length;
8938 }
8939
8940 EVALUATE(SLGRK) {
8941 DCHECK_OPCODE(SLGRK);
8942 DECODE_RRF_A_INSTRUCTION(r1, r2, r3);
8943 // 64-bit Non-clobbering unsigned arithmetics
8944 uint64_t r2_val = get_register(r2);
8945 uint64_t r3_val = get_register(r3);
8946 bool isOF = CheckOverflowForUIntSub(r2_val, r3_val);
8947 SetS390ConditionCode<uint64_t>(r2_val - r3_val, 0);
8948 SetS390OverflowCode(isOF);
8949 set_register(r1, r2_val - r3_val);
8950 return length;
8951 }
8391 8952
8392 EVALUATE(LOCR) { return DecodeInstructionOriginal(instr); } 8953 EVALUATE(LOCR) { return DecodeInstructionOriginal(instr); }
8393 8954
8394 EVALUATE(NRK) { return DecodeInstructionOriginal(instr); } 8955 EVALUATE(NRK) {
8395 8956 DCHECK_OPCODE(NRK);
8396 EVALUATE(ORK) { return DecodeInstructionOriginal(instr); } 8957 DECODE_RRF_A_INSTRUCTION(r1, r2, r3);
8397 8958 // 32-bit Non-clobbering arithmetics / bitwise ops
8398 EVALUATE(XRK) { return DecodeInstructionOriginal(instr); } 8959 int32_t r2_val = get_low_register<int32_t>(r2);
8399 8960 int32_t r3_val = get_low_register<int32_t>(r3);
8400 EVALUATE(ARK) { return DecodeInstructionOriginal(instr); } 8961 // Assume bitwise operation here
8401 8962 uint32_t bitwise_result = 0;
8402 EVALUATE(SRK) { return DecodeInstructionOriginal(instr); } 8963 bitwise_result = r2_val & r3_val;
8403 8964 SetS390BitWiseConditionCode<uint32_t>(bitwise_result);
8404 EVALUATE(ALRK) { return DecodeInstructionOriginal(instr); } 8965 set_low_register(r1, bitwise_result);
8405 8966 return length;
8406 EVALUATE(SLRK) { return DecodeInstructionOriginal(instr); } 8967 }
8407 8968
8408 EVALUATE(LTG) { return DecodeInstructionOriginal(instr); } 8969 EVALUATE(ORK) {
8970 DCHECK_OPCODE(ORK);
8971 DECODE_RRF_A_INSTRUCTION(r1, r2, r3);
8972 // 32-bit Non-clobbering arithmetics / bitwise ops
8973 int32_t r2_val = get_low_register<int32_t>(r2);
8974 int32_t r3_val = get_low_register<int32_t>(r3);
8975 // Assume bitwise operation here
8976 uint32_t bitwise_result = 0;
8977 bitwise_result = r2_val | r3_val;
8978 SetS390BitWiseConditionCode<uint32_t>(bitwise_result);
8979 set_low_register(r1, bitwise_result);
8980 return length;
8981 }
8982
8983 EVALUATE(XRK) {
8984 DCHECK_OPCODE(XRK);
8985 DECODE_RRF_A_INSTRUCTION(r1, r2, r3);
8986 // 32-bit Non-clobbering arithmetics / bitwise ops
8987 int32_t r2_val = get_low_register<int32_t>(r2);
8988 int32_t r3_val = get_low_register<int32_t>(r3);
8989 // Assume bitwise operation here
8990 uint32_t bitwise_result = 0;
8991 bitwise_result = r2_val ^ r3_val;
8992 SetS390BitWiseConditionCode<uint32_t>(bitwise_result);
8993 set_low_register(r1, bitwise_result);
8994 return length;
8995 }
8996
8997 EVALUATE(ARK) {
8998 DCHECK_OPCODE(ARK);
8999 DECODE_RRF_A_INSTRUCTION(r1, r2, r3);
9000 // 32-bit Non-clobbering arithmetics / bitwise ops
9001 int32_t r2_val = get_low_register<int32_t>(r2);
9002 int32_t r3_val = get_low_register<int32_t>(r3);
9003 bool isOF = CheckOverflowForIntAdd(r2_val, r3_val, int32_t);
9004 SetS390ConditionCode<int32_t>(r2_val + r3_val, 0);
9005 SetS390OverflowCode(isOF);
9006 set_low_register(r1, r2_val + r3_val);
9007 return length;
9008 }
9009
9010 EVALUATE(SRK) {
9011 DCHECK_OPCODE(SRK);
9012 DECODE_RRF_A_INSTRUCTION(r1, r2, r3);
9013 // 32-bit Non-clobbering arithmetics / bitwise ops
9014 int32_t r2_val = get_low_register<int32_t>(r2);
9015 int32_t r3_val = get_low_register<int32_t>(r3);
9016 bool isOF = CheckOverflowForIntSub(r2_val, r3_val, int32_t);
9017 SetS390ConditionCode<int32_t>(r2_val - r3_val, 0);
9018 SetS390OverflowCode(isOF);
9019 set_low_register(r1, r2_val - r3_val);
9020 return length;
9021 }
9022
9023 EVALUATE(ALRK) {
9024 DCHECK_OPCODE(ALRK);
9025 DECODE_RRF_A_INSTRUCTION(r1, r2, r3);
9026 // 32-bit Non-clobbering unsigned arithmetics
9027 uint32_t r2_val = get_low_register<uint32_t>(r2);
9028 uint32_t r3_val = get_low_register<uint32_t>(r3);
9029 bool isOF = CheckOverflowForUIntAdd(r2_val, r3_val);
9030 SetS390ConditionCode<uint32_t>(r2_val + r3_val, 0);
9031 SetS390OverflowCode(isOF);
9032 set_low_register(r1, r2_val + r3_val);
9033 return length;
9034 }
9035
9036 EVALUATE(SLRK) {
9037 DCHECK_OPCODE(SLRK);
9038 DECODE_RRF_A_INSTRUCTION(r1, r2, r3);
9039 // 32-bit Non-clobbering unsigned arithmetics
9040 uint32_t r2_val = get_low_register<uint32_t>(r2);
9041 uint32_t r3_val = get_low_register<uint32_t>(r3);
9042 bool isOF = CheckOverflowForUIntSub(r2_val, r3_val);
9043 SetS390ConditionCode<uint32_t>(r2_val - r3_val, 0);
9044 SetS390OverflowCode(isOF);
9045 set_low_register(r1, r2_val - r3_val);
9046 return length;
9047 }
9048
9049 EVALUATE(LTG) {
9050 DCHECK_OPCODE(LTG);
9051 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9052 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9053 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9054 intptr_t addr = x2_val + b2_val + d2;
9055 int64_t value = ReadDW(addr);
9056 set_register(r1, value);
9057 SetS390ConditionCode<int64_t>(value, 0);
9058 return length;
9059 }
8409 9060
8410 EVALUATE(CVBY) { return DecodeInstructionOriginal(instr); } 9061 EVALUATE(CVBY) { return DecodeInstructionOriginal(instr); }
8411 9062
8412 EVALUATE(AG) { return DecodeInstructionOriginal(instr); } 9063 EVALUATE(AG) {
8413 9064 DCHECK_OPCODE(AG);
8414 EVALUATE(SG) { return DecodeInstructionOriginal(instr); } 9065 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
8415 9066 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
8416 EVALUATE(ALG) { return DecodeInstructionOriginal(instr); } 9067 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
8417 9068 int64_t alu_out = get_register(r1);
8418 EVALUATE(SLG) { return DecodeInstructionOriginal(instr); } 9069 int64_t mem_val = ReadDW(b2_val + x2_val + d2);
8419 9070 alu_out += mem_val;
8420 EVALUATE(MSG) { return DecodeInstructionOriginal(instr); } 9071 SetS390ConditionCode<int32_t>(alu_out, 0);
9072 set_register(r1, alu_out);
9073 return length;
9074 }
9075
9076 EVALUATE(SG) {
9077 DCHECK_OPCODE(SG);
9078 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9079 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9080 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9081 int64_t alu_out = get_register(r1);
9082 int64_t mem_val = ReadDW(b2_val + x2_val + d2);
9083 alu_out -= mem_val;
9084 SetS390ConditionCode<int32_t>(alu_out, 0);
9085 set_register(r1, alu_out);
9086 return length;
9087 }
9088
9089 EVALUATE(ALG) {
9090 DCHECK_OPCODE(ALG);
9091 #ifndef V8_TARGET_ARCH_S390X
9092 DCHECK(false);
9093 #endif
9094 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9095 uint64_t r1_val = get_register(r1);
9096 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9097 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9098 intptr_t d2_val = d2;
9099 uint64_t alu_out = r1_val;
9100 uint64_t mem_val = static_cast<uint64_t>(ReadDW(b2_val + d2_val + x2_val));
9101 alu_out += mem_val;
9102 SetS390ConditionCode<uint64_t>(alu_out, 0);
9103 set_register(r1, alu_out);
9104 return length;
9105 }
9106
9107 EVALUATE(SLG) {
9108 DCHECK_OPCODE(SLG);
9109 #ifndef V8_TARGET_ARCH_S390X
9110 DCHECK(false);
9111 #endif
9112 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9113 uint64_t r1_val = get_register(r1);
9114 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9115 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9116 intptr_t d2_val = d2;
9117 uint64_t alu_out = r1_val;
9118 uint64_t mem_val = static_cast<uint64_t>(ReadDW(b2_val + d2_val + x2_val));
9119 alu_out -= mem_val;
9120 SetS390ConditionCode<uint64_t>(alu_out, 0);
9121 set_register(r1, alu_out);
9122 return length;
9123 }
9124
9125 EVALUATE(MSG) {
9126 DCHECK_OPCODE(MSG);
9127 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9128 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9129 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9130 intptr_t d2_val = d2;
9131 int64_t mem_val = ReadDW(b2_val + d2_val + x2_val);
9132 int64_t r1_val = get_register(r1);
9133 set_register(r1, mem_val * r1_val);
9134 return length;
9135 }
8421 9136
8422 EVALUATE(DSG) { return DecodeInstructionOriginal(instr); } 9137 EVALUATE(DSG) { return DecodeInstructionOriginal(instr); }
8423 9138
8424 EVALUATE(CVBG) { return DecodeInstructionOriginal(instr); } 9139 EVALUATE(CVBG) { return DecodeInstructionOriginal(instr); }
8425 9140
8426 EVALUATE(LRVG) { return DecodeInstructionOriginal(instr); } 9141 EVALUATE(LRVG) { return DecodeInstructionOriginal(instr); }
8427 9142
8428 EVALUATE(LT) { return DecodeInstructionOriginal(instr); } 9143 EVALUATE(LT) {
9144 DCHECK_OPCODE(LT);
9145 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9146 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9147 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9148 intptr_t addr = x2_val + b2_val + d2;
9149 int32_t value = ReadW(addr, instr);
9150 set_low_register(r1, value);
9151 SetS390ConditionCode<int32_t>(value, 0);
9152 return length;
9153 }
8429 9154
8430 EVALUATE(LGH) { return DecodeInstructionOriginal(instr); } 9155 EVALUATE(LGH) {
9156 DCHECK_OPCODE(LGH);
9157 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9158 // Miscellaneous Loads and Stores
9159 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9160 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9161 intptr_t addr = x2_val + b2_val + d2;
9162 int64_t mem_val = static_cast<int64_t>(ReadH(addr, instr));
9163 set_register(r1, mem_val);
9164 return length;
9165 }
8431 9166
8432 EVALUATE(LLGF) { return DecodeInstructionOriginal(instr); } 9167 EVALUATE(LLGF) { return DecodeInstructionOriginal(instr); }
8433 9168
8434 EVALUATE(LLGT) { return DecodeInstructionOriginal(instr); } 9169 EVALUATE(LLGT) { return DecodeInstructionOriginal(instr); }
8435 9170
8436 EVALUATE(AGF) { return DecodeInstructionOriginal(instr); } 9171 EVALUATE(AGF) { return DecodeInstructionOriginal(instr); }
8437 9172
8438 EVALUATE(SGF) { return DecodeInstructionOriginal(instr); } 9173 EVALUATE(SGF) { return DecodeInstructionOriginal(instr); }
8439 9174
8440 EVALUATE(ALGF) { return DecodeInstructionOriginal(instr); } 9175 EVALUATE(ALGF) { return DecodeInstructionOriginal(instr); }
(...skipping 29 matching lines...) Expand all
8470 EVALUATE(CGH) { return DecodeInstructionOriginal(instr); } 9205 EVALUATE(CGH) { return DecodeInstructionOriginal(instr); }
8471 9206
8472 EVALUATE(PFD) { return DecodeInstructionOriginal(instr); } 9207 EVALUATE(PFD) { return DecodeInstructionOriginal(instr); }
8473 9208
8474 EVALUATE(STRV) { return DecodeInstructionOriginal(instr); } 9209 EVALUATE(STRV) { return DecodeInstructionOriginal(instr); }
8475 9210
8476 EVALUATE(STRVH) { return DecodeInstructionOriginal(instr); } 9211 EVALUATE(STRVH) { return DecodeInstructionOriginal(instr); }
8477 9212
8478 EVALUATE(BCTG) { return DecodeInstructionOriginal(instr); } 9213 EVALUATE(BCTG) { return DecodeInstructionOriginal(instr); }
8479 9214
8480 EVALUATE(MSY) { return DecodeInstructionOriginal(instr); } 9215 EVALUATE(MSY) {
9216 DCHECK_OPCODE(MSY);
9217 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9218 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9219 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9220 intptr_t d2_val = d2;
9221 int32_t mem_val = ReadW(b2_val + d2_val + x2_val, instr);
9222 int32_t r1_val = get_low_register<int32_t>(r1);
9223 set_low_register(r1, mem_val * r1_val);
9224 return length;
9225 }
8481 9226
8482 EVALUATE(NY) { return DecodeInstructionOriginal(instr); } 9227 EVALUATE(NY) { return DecodeInstructionOriginal(instr); }
8483 9228
8484 EVALUATE(CLY) { return DecodeInstructionOriginal(instr); } 9229 EVALUATE(CLY) { return DecodeInstructionOriginal(instr); }
8485 9230
8486 EVALUATE(OY) { return DecodeInstructionOriginal(instr); } 9231 EVALUATE(OY) { return DecodeInstructionOriginal(instr); }
8487 9232
8488 EVALUATE(XY) { return DecodeInstructionOriginal(instr); } 9233 EVALUATE(XY) { return DecodeInstructionOriginal(instr); }
8489 9234
8490 EVALUATE(CY) { return DecodeInstructionOriginal(instr); } 9235 EVALUATE(CY) { return DecodeInstructionOriginal(instr); }
8491 9236
8492 EVALUATE(AY) { return DecodeInstructionOriginal(instr); } 9237 EVALUATE(AY) { return DecodeInstructionOriginal(instr); }
8493 9238
8494 EVALUATE(SY) { return DecodeInstructionOriginal(instr); } 9239 EVALUATE(SY) { return DecodeInstructionOriginal(instr); }
8495 9240
8496 EVALUATE(MFY) { return DecodeInstructionOriginal(instr); } 9241 EVALUATE(MFY) { return DecodeInstructionOriginal(instr); }
8497 9242
8498 EVALUATE(ALY) { return DecodeInstructionOriginal(instr); } 9243 EVALUATE(ALY) { return DecodeInstructionOriginal(instr); }
8499 9244
8500 EVALUATE(SLY) { return DecodeInstructionOriginal(instr); } 9245 EVALUATE(SLY) { return DecodeInstructionOriginal(instr); }
8501 9246
8502 EVALUATE(STHY) { return DecodeInstructionOriginal(instr); } 9247 EVALUATE(STHY) {
9248 DCHECK_OPCODE(STHY);
9249 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9250 // Miscellaneous Loads and Stores
9251 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9252 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9253 intptr_t addr = x2_val + b2_val + d2;
9254 uint16_t value = get_low_register<uint32_t>(r1);
9255 WriteH(addr, value, instr);
9256 return length;
9257 }
8503 9258
8504 EVALUATE(LAY) { return DecodeInstructionOriginal(instr); } 9259 EVALUATE(LAY) { return DecodeInstructionOriginal(instr); }
8505 9260
8506 EVALUATE(STCY) { return DecodeInstructionOriginal(instr); } 9261 EVALUATE(STCY) {
9262 DCHECK_OPCODE(STCY);
9263 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9264 // Miscellaneous Loads and Stores
9265 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9266 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9267 intptr_t addr = x2_val + b2_val + d2;
9268 uint8_t value = get_low_register<uint32_t>(r1);
9269 WriteB(addr, value);
9270 return length;
9271 }
8507 9272
8508 EVALUATE(ICY) { return DecodeInstructionOriginal(instr); } 9273 EVALUATE(ICY) { return DecodeInstructionOriginal(instr); }
8509 9274
8510 EVALUATE(LAEY) { return DecodeInstructionOriginal(instr); } 9275 EVALUATE(LAEY) { return DecodeInstructionOriginal(instr); }
8511 9276
8512 EVALUATE(LB) { return DecodeInstructionOriginal(instr); } 9277 EVALUATE(LB) { return DecodeInstructionOriginal(instr); }
8513 9278
8514 EVALUATE(LGB) { return DecodeInstructionOriginal(instr); } 9279 EVALUATE(LGB) {
9280 DCHECK_OPCODE(LGB);
9281 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9282 // Miscellaneous Loads and Stores
9283 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9284 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9285 intptr_t addr = x2_val + b2_val + d2;
9286 int64_t mem_val = ReadB(addr);
9287 set_register(r1, mem_val);
9288 return length;
9289 }
8515 9290
8516 EVALUATE(LHY) { return DecodeInstructionOriginal(instr); } 9291 EVALUATE(LHY) {
9292 DCHECK_OPCODE(LHY);
9293 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9294 // Miscellaneous Loads and Stores
9295 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9296 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9297 intptr_t addr = x2_val + b2_val + d2;
9298 int32_t result = static_cast<int32_t>(ReadH(addr, instr));
9299 set_low_register(r1, result);
9300 return length;
9301 }
8517 9302
8518 EVALUATE(CHY) { return DecodeInstructionOriginal(instr); } 9303 EVALUATE(CHY) { return DecodeInstructionOriginal(instr); }
8519 9304
8520 EVALUATE(AHY) { return DecodeInstructionOriginal(instr); } 9305 EVALUATE(AHY) { return DecodeInstructionOriginal(instr); }
8521 9306
8522 EVALUATE(SHY) { return DecodeInstructionOriginal(instr); } 9307 EVALUATE(SHY) { return DecodeInstructionOriginal(instr); }
8523 9308
8524 EVALUATE(MHY) { return DecodeInstructionOriginal(instr); } 9309 EVALUATE(MHY) { return DecodeInstructionOriginal(instr); }
8525 9310
8526 EVALUATE(NG) { return DecodeInstructionOriginal(instr); } 9311 EVALUATE(NG) { return DecodeInstructionOriginal(instr); }
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
8808 EVALUATE(TDGET) { return DecodeInstructionOriginal(instr); } 9593 EVALUATE(TDGET) { return DecodeInstructionOriginal(instr); }
8809 9594
8810 EVALUATE(TDCDT) { return DecodeInstructionOriginal(instr); } 9595 EVALUATE(TDCDT) { return DecodeInstructionOriginal(instr); }
8811 9596
8812 EVALUATE(TDGDT) { return DecodeInstructionOriginal(instr); } 9597 EVALUATE(TDGDT) { return DecodeInstructionOriginal(instr); }
8813 9598
8814 EVALUATE(TDCXT) { return DecodeInstructionOriginal(instr); } 9599 EVALUATE(TDCXT) { return DecodeInstructionOriginal(instr); }
8815 9600
8816 EVALUATE(TDGXT) { return DecodeInstructionOriginal(instr); } 9601 EVALUATE(TDGXT) { return DecodeInstructionOriginal(instr); }
8817 9602
8818 EVALUATE(LEY) { return DecodeInstructionOriginal(instr); } 9603 EVALUATE(LEY) {
9604 DCHECK_OPCODE(LEY);
9605 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9606 // Miscellaneous Loads and Stores
9607 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9608 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9609 intptr_t addr = x2_val + b2_val + d2;
9610 float float_val = *reinterpret_cast<float*>(addr);
9611 set_d_register_from_float32(r1, float_val);
9612 return length;
9613 }
8819 9614
8820 EVALUATE(LDY) { return DecodeInstructionOriginal(instr); } 9615 EVALUATE(LDY) {
9616 DCHECK_OPCODE(LDY);
9617 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9618 // Miscellaneous Loads and Stores
9619 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9620 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9621 intptr_t addr = x2_val + b2_val + d2;
9622 uint64_t dbl_val = *reinterpret_cast<uint64_t*>(addr);
9623 set_d_register(r1, dbl_val);
9624 return length;
9625 }
8821 9626
8822 EVALUATE(STEY) { return DecodeInstructionOriginal(instr); } 9627 EVALUATE(STEY) {
9628 DCHECK_OPCODE(STEY);
9629 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9630 // Miscellaneous Loads and Stores
9631 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9632 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9633 intptr_t addr = x2_val + b2_val + d2;
9634 int64_t frs_val = get_d_register(r1) >> 32;
9635 WriteW(addr, static_cast<int32_t>(frs_val), instr);
9636 return length;
9637 }
8823 9638
8824 EVALUATE(STDY) { return DecodeInstructionOriginal(instr); } 9639 EVALUATE(STDY) {
9640 DCHECK_OPCODE(STDY);
9641 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9642 // Miscellaneous Loads and Stores
9643 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9644 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9645 intptr_t addr = x2_val + b2_val + d2;
9646 int64_t frs_val = get_d_register(r1);
9647 WriteDW(addr, frs_val);
9648 return length;
9649 }
8825 9650
8826 EVALUATE(CZDT) { return DecodeInstructionOriginal(instr); } 9651 EVALUATE(CZDT) { return DecodeInstructionOriginal(instr); }
8827 9652
8828 EVALUATE(CZXT) { return DecodeInstructionOriginal(instr); } 9653 EVALUATE(CZXT) { return DecodeInstructionOriginal(instr); }
8829 9654
8830 EVALUATE(CDZT) { return DecodeInstructionOriginal(instr); } 9655 EVALUATE(CDZT) { return DecodeInstructionOriginal(instr); }
8831 9656
8832 EVALUATE(CXZT) { return DecodeInstructionOriginal(instr); } 9657 EVALUATE(CXZT) { return DecodeInstructionOriginal(instr); }
8833 9658
8834 #undef EVALUATE 9659 #undef EVALUATE
8835 9660
8836 } // namespace internal 9661 } // namespace internal
8837 } // namespace v8 9662 } // namespace v8
8838 9663
8839 #endif // USE_SIMULATOR 9664 #endif // USE_SIMULATOR
8840 #endif // V8_TARGET_ARCH_S390 9665 #endif // V8_TARGET_ARCH_S390
OLDNEW
« 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