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

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

Issue 1993063002: S390: Added 56 new instructions to the simulator EVALUATE code. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Removed DCHECKs prohibiting generation of AGF, SGF on 31-bit 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 5930 matching lines...) Expand 10 before | Expand all | Expand 10 after
5941 int r1 = AS(RSInstruction)->R1Value(); \ 5941 int r1 = AS(RSInstruction)->R1Value(); \
5942 int d2 = AS(RSInstruction)->D2Value(); \ 5942 int d2 = AS(RSInstruction)->D2Value(); \
5943 int length = 4; 5943 int length = 4;
5944 5944
5945 #define DECODE_SI_INSTRUCTION_I_UINT8(b1, d1_val, imm_val) \ 5945 #define DECODE_SI_INSTRUCTION_I_UINT8(b1, d1_val, imm_val) \
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_SIL_INSTRUCTION(b1, d1, i2) \
5952 int b1 = AS(SILInstruction)->B1Value(); \
5953 intptr_t d1 = AS(SILInstruction)->D1Value(); \
5954 int16_t i2 = AS(SILInstruction)->I2Value(); \
5955 int length = 6;
5956
5957 #define DECODE_SIY_INSTRUCTION(b1, d1, i2) \
5958 int b1 = AS(SIYInstruction)->B1Value(); \
5959 intptr_t d1 = AS(SIYInstruction)->D1Value(); \
5960 uint8_t i2 = AS(SIYInstruction)->I2Value(); \
5961 int length = 6;
5962
5951 #define DECODE_RRE_INSTRUCTION(r1, r2) \ 5963 #define DECODE_RRE_INSTRUCTION(r1, r2) \
5952 int r1 = AS(RREInstruction)->R1Value(); \ 5964 int r1 = AS(RREInstruction)->R1Value(); \
5953 int r2 = AS(RREInstruction)->R2Value(); \ 5965 int r2 = AS(RREInstruction)->R2Value(); \
5954 int length = 4; 5966 int length = 4;
5955 5967
5956 #define DECODE_RRE_INSTRUCTION_NO_R2(r1) \ 5968 #define DECODE_RRE_INSTRUCTION_NO_R2(r1) \
5957 int r1 = AS(RREInstruction)->R1Value(); \ 5969 int r1 = AS(RREInstruction)->R1Value(); \
5958 int length = 4; 5970 int length = 4;
5959 5971
5960 #define DECODE_RRD_INSTRUCTION(r1, r2, r3) \ 5972 #define DECODE_RRD_INSTRUCTION(r1, r2, r3) \
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
6010 #define DECODE_RI_B_INSTRUCTION(instr, r1, i2) \ 6022 #define DECODE_RI_B_INSTRUCTION(instr, r1, i2) \
6011 int32_t r1 = AS(RILInstruction)->R1Value(); \ 6023 int32_t r1 = AS(RILInstruction)->R1Value(); \
6012 int16_t i2 = AS(RILInstruction)->I2Value(); \ 6024 int16_t i2 = AS(RILInstruction)->I2Value(); \
6013 int length = 4; 6025 int length = 4;
6014 6026
6015 #define DECODE_RI_C_INSTRUCTION(instr, m1, i2) \ 6027 #define DECODE_RI_C_INSTRUCTION(instr, m1, i2) \
6016 Condition m1 = static_cast<Condition>(AS(RIInstruction)->R1Value()); \ 6028 Condition m1 = static_cast<Condition>(AS(RIInstruction)->R1Value()); \
6017 int16_t i2 = AS(RIInstruction)->I2Value(); \ 6029 int16_t i2 = AS(RIInstruction)->I2Value(); \
6018 int length = 4; 6030 int length = 4;
6019 6031
6032 #define DECODE_RXE_INSTRUCTION(r1, b2, x2, d2) \
6033 int r1 = AS(RXEInstruction)->R1Value(); \
6034 int b2 = AS(RXEInstruction)->B2Value(); \
6035 int x2 = AS(RXEInstruction)->X2Value(); \
6036 int d2 = AS(RXEInstruction)->D2Value(); \
6037 int length = 6;
6038
6020 #define GET_ADDRESS(index_reg, base_reg, offset) \ 6039 #define GET_ADDRESS(index_reg, base_reg, offset) \
6021 (((index_reg) == 0) ? 0 : get_register(index_reg)) + \ 6040 (((index_reg) == 0) ? 0 : get_register(index_reg)) + \
6022 (((base_reg) == 0) ? 0 : get_register(base_reg)) + offset 6041 (((base_reg) == 0) ? 0 : get_register(base_reg)) + offset
6023 6042
6024 int Simulator::Evaluate_Unknown(Instruction* instr) { 6043 int Simulator::Evaluate_Unknown(Instruction* instr) {
6025 UNREACHABLE(); 6044 UNREACHABLE();
6026 return 0; 6045 return 0;
6027 } 6046 }
6028 6047
6029 EVALUATE(CLR) { 6048 EVALUATE(CLR) {
(...skipping 3127 matching lines...) Expand 10 before | Expand all | Expand 10 after
9157 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2); 9176 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9158 // Miscellaneous Loads and Stores 9177 // Miscellaneous Loads and Stores
9159 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2); 9178 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9160 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2); 9179 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9161 intptr_t addr = x2_val + b2_val + d2; 9180 intptr_t addr = x2_val + b2_val + d2;
9162 int64_t mem_val = static_cast<int64_t>(ReadH(addr, instr)); 9181 int64_t mem_val = static_cast<int64_t>(ReadH(addr, instr));
9163 set_register(r1, mem_val); 9182 set_register(r1, mem_val);
9164 return length; 9183 return length;
9165 } 9184 }
9166 9185
9167 EVALUATE(LLGF) { return DecodeInstructionOriginal(instr); } 9186 EVALUATE(LLGF) {
9187 DCHECK_OPCODE(LLGF);
9188 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9189 // Miscellaneous Loads and Stores
9190 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9191 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9192 intptr_t addr = x2_val + b2_val + d2;
9193 uint64_t mem_val = static_cast<uint64_t>(ReadWU(addr, instr));
9194 set_register(r1, mem_val);
9195 return length;
9196 }
9168 9197
9169 EVALUATE(LLGT) { return DecodeInstructionOriginal(instr); } 9198 EVALUATE(LLGT) { return DecodeInstructionOriginal(instr); }
9170 9199
9171 EVALUATE(AGF) { return DecodeInstructionOriginal(instr); } 9200 EVALUATE(AGF) {
9201 DCHECK_OPCODE(AGF);
9202 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9203 uint64_t r1_val = get_register(r1);
9204 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9205 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9206 intptr_t d2_val = d2;
9207 uint64_t alu_out = r1_val;
9208 uint32_t mem_val = ReadW(b2_val + d2_val + x2_val, instr);
9209 alu_out += mem_val;
9210 SetS390ConditionCode<int64_t>(alu_out, 0);
9211 set_register(r1, alu_out);
9212 return length;
9213 }
9172 9214
9173 EVALUATE(SGF) { return DecodeInstructionOriginal(instr); } 9215 EVALUATE(SGF) {
9216 DCHECK_OPCODE(SGF);
9217 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9218 uint64_t r1_val = get_register(r1);
9219 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9220 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9221 intptr_t d2_val = d2;
9222 uint64_t alu_out = r1_val;
9223 uint32_t mem_val = ReadW(b2_val + d2_val + x2_val, instr);
9224 alu_out -= mem_val;
9225 SetS390ConditionCode<int64_t>(alu_out, 0);
9226 set_register(r1, alu_out);
9227 return length;
9228 }
9174 9229
9175 EVALUATE(ALGF) { return DecodeInstructionOriginal(instr); } 9230 EVALUATE(ALGF) { return DecodeInstructionOriginal(instr); }
9176 9231
9177 EVALUATE(SLGF) { return DecodeInstructionOriginal(instr); } 9232 EVALUATE(SLGF) { return DecodeInstructionOriginal(instr); }
9178 9233
9179 EVALUATE(MSGF) { return DecodeInstructionOriginal(instr); } 9234 EVALUATE(MSGF) { return DecodeInstructionOriginal(instr); }
9180 9235
9181 EVALUATE(DSGF) { return DecodeInstructionOriginal(instr); } 9236 EVALUATE(DSGF) { return DecodeInstructionOriginal(instr); }
9182 9237
9183 EVALUATE(LRV) { return DecodeInstructionOriginal(instr); } 9238 EVALUATE(LRV) {
9239 DCHECK_OPCODE(LRV);
9240 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9241 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9242 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9243 intptr_t mem_addr = b2_val + x2_val + d2;
9244 int32_t mem_val = ReadW(mem_addr, instr);
9245 set_low_register(r1, ByteReverse(mem_val));
9246 return length;
9247 }
9184 9248
9185 EVALUATE(LRVH) { return DecodeInstructionOriginal(instr); } 9249 EVALUATE(LRVH) {
9250 DCHECK_OPCODE(LRVH);
9251 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9252 int32_t r1_val = get_low_register<int32_t>(r1);
9253 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9254 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9255 intptr_t mem_addr = b2_val + x2_val + d2;
9256 int16_t mem_val = ReadH(mem_addr, instr);
9257 int32_t result = ByteReverse(mem_val) & 0x0000ffff;
9258 result |= r1_val & 0xffff0000;
9259 set_low_register(r1, result);
9260 return length;
9261 }
9186 9262
9187 EVALUATE(CG) { return DecodeInstructionOriginal(instr); } 9263 EVALUATE(CG) {
9264 DCHECK_OPCODE(CG);
9265 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9266 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9267 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9268 int64_t alu_out = get_register(r1);
9269 int64_t mem_val = ReadDW(b2_val + x2_val + d2);
9270 SetS390ConditionCode<int64_t>(alu_out, mem_val);
9271 set_register(r1, alu_out);
9272 return length;
9273 }
9188 9274
9189 EVALUATE(CLG) { return DecodeInstructionOriginal(instr); } 9275 EVALUATE(CLG) {
9276 DCHECK_OPCODE(CLG);
9277 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9278 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9279 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9280 int64_t alu_out = get_register(r1);
9281 int64_t mem_val = ReadDW(b2_val + x2_val + d2);
9282 SetS390ConditionCode<uint64_t>(alu_out, mem_val);
9283 set_register(r1, alu_out);
9284 return length;
9285 }
9190 9286
9191 EVALUATE(NTSTG) { return DecodeInstructionOriginal(instr); } 9287 EVALUATE(NTSTG) { return DecodeInstructionOriginal(instr); }
9192 9288
9193 EVALUATE(CVDY) { return DecodeInstructionOriginal(instr); } 9289 EVALUATE(CVDY) { return DecodeInstructionOriginal(instr); }
9194 9290
9195 EVALUATE(CVDG) { return DecodeInstructionOriginal(instr); } 9291 EVALUATE(CVDG) { return DecodeInstructionOriginal(instr); }
9196 9292
9197 EVALUATE(STRVG) { return DecodeInstructionOriginal(instr); } 9293 EVALUATE(STRVG) { return DecodeInstructionOriginal(instr); }
9198 9294
9199 EVALUATE(CGF) { return DecodeInstructionOriginal(instr); } 9295 EVALUATE(CGF) { return DecodeInstructionOriginal(instr); }
9200 9296
9201 EVALUATE(CLGF) { return DecodeInstructionOriginal(instr); } 9297 EVALUATE(CLGF) { return DecodeInstructionOriginal(instr); }
9202 9298
9203 EVALUATE(LTGF) { return DecodeInstructionOriginal(instr); } 9299 EVALUATE(LTGF) { return DecodeInstructionOriginal(instr); }
9204 9300
9205 EVALUATE(CGH) { return DecodeInstructionOriginal(instr); } 9301 EVALUATE(CGH) { return DecodeInstructionOriginal(instr); }
9206 9302
9207 EVALUATE(PFD) { return DecodeInstructionOriginal(instr); } 9303 EVALUATE(PFD) { return DecodeInstructionOriginal(instr); }
9208 9304
9209 EVALUATE(STRV) { return DecodeInstructionOriginal(instr); } 9305 EVALUATE(STRV) {
9306 DCHECK_OPCODE(STRV);
9307 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9308 int32_t r1_val = get_low_register<int32_t>(r1);
9309 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9310 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9311 intptr_t mem_addr = b2_val + x2_val + d2;
9312 WriteW(mem_addr, ByteReverse(r1_val), instr);
9313 return length;
9314 }
9210 9315
9211 EVALUATE(STRVH) { return DecodeInstructionOriginal(instr); } 9316 EVALUATE(STRVH) {
9317 DCHECK_OPCODE(STRVH);
9318 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9319 int32_t r1_val = get_low_register<int32_t>(r1);
9320 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9321 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9322 intptr_t mem_addr = b2_val + x2_val + d2;
9323 int16_t result = static_cast<int16_t>(r1_val >> 16);
9324 WriteH(mem_addr, ByteReverse(result), instr);
9325 return length;
9326 }
9212 9327
9213 EVALUATE(BCTG) { return DecodeInstructionOriginal(instr); } 9328 EVALUATE(BCTG) { return DecodeInstructionOriginal(instr); }
9214 9329
9215 EVALUATE(MSY) { 9330 EVALUATE(MSY) {
9216 DCHECK_OPCODE(MSY); 9331 DCHECK_OPCODE(MSY);
9217 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2); 9332 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9218 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2); 9333 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9219 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2); 9334 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9220 intptr_t d2_val = d2; 9335 intptr_t d2_val = d2;
9221 int32_t mem_val = ReadW(b2_val + d2_val + x2_val, instr); 9336 int32_t mem_val = ReadW(b2_val + d2_val + x2_val, instr);
9222 int32_t r1_val = get_low_register<int32_t>(r1); 9337 int32_t r1_val = get_low_register<int32_t>(r1);
9223 set_low_register(r1, mem_val * r1_val); 9338 set_low_register(r1, mem_val * r1_val);
9224 return length; 9339 return length;
9225 } 9340 }
9226 9341
9227 EVALUATE(NY) { return DecodeInstructionOriginal(instr); } 9342 EVALUATE(NY) {
9343 DCHECK_OPCODE(NY);
9344 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9345 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9346 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9347 int32_t alu_out = get_low_register<int32_t>(r1);
9348 int32_t mem_val = ReadW(b2_val + x2_val + d2, instr);
9349 alu_out &= mem_val;
9350 SetS390BitWiseConditionCode<uint32_t>(alu_out);
9351 set_low_register(r1, alu_out);
9352 return length;
9353 }
9228 9354
9229 EVALUATE(CLY) { return DecodeInstructionOriginal(instr); } 9355 EVALUATE(CLY) {
9356 DCHECK_OPCODE(CLY);
9357 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9358 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9359 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9360 uint32_t alu_out = get_low_register<uint32_t>(r1);
9361 uint32_t mem_val = ReadWU(b2_val + x2_val + d2, instr);
9362 SetS390ConditionCode<uint32_t>(alu_out, mem_val);
9363 return length;
9364 }
9230 9365
9231 EVALUATE(OY) { return DecodeInstructionOriginal(instr); } 9366 EVALUATE(OY) {
9367 DCHECK_OPCODE(OY);
9368 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9369 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9370 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9371 int32_t alu_out = get_low_register<int32_t>(r1);
9372 int32_t mem_val = ReadW(b2_val + x2_val + d2, instr);
9373 alu_out |= mem_val;
9374 SetS390BitWiseConditionCode<uint32_t>(alu_out);
9375 set_low_register(r1, alu_out);
9376 return length;
9377 }
9232 9378
9233 EVALUATE(XY) { return DecodeInstructionOriginal(instr); } 9379 EVALUATE(XY) {
9380 DCHECK_OPCODE(XY);
9381 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9382 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9383 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9384 int32_t alu_out = get_low_register<int32_t>(r1);
9385 int32_t mem_val = ReadW(b2_val + x2_val + d2, instr);
9386 alu_out ^= mem_val;
9387 SetS390BitWiseConditionCode<uint32_t>(alu_out);
9388 set_low_register(r1, alu_out);
9389 return length;
9390 }
9234 9391
9235 EVALUATE(CY) { return DecodeInstructionOriginal(instr); } 9392 EVALUATE(CY) {
9393 DCHECK_OPCODE(CY);
9394 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9395 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9396 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9397 int32_t alu_out = get_low_register<int32_t>(r1);
9398 int32_t mem_val = ReadW(b2_val + x2_val + d2, instr);
9399 SetS390ConditionCode<int32_t>(alu_out, mem_val);
9400 return length;
9401 }
9236 9402
9237 EVALUATE(AY) { return DecodeInstructionOriginal(instr); } 9403 EVALUATE(AY) {
9404 DCHECK_OPCODE(AY);
9405 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9406 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9407 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9408 int32_t alu_out = get_low_register<int32_t>(r1);
9409 int32_t mem_val = ReadW(b2_val + x2_val + d2, instr);
9410 bool isOF = false;
9411 isOF = CheckOverflowForIntAdd(alu_out, mem_val, int32_t);
9412 alu_out += mem_val;
9413 SetS390ConditionCode<int32_t>(alu_out, 0);
9414 SetS390OverflowCode(isOF);
9415 set_low_register(r1, alu_out);
9416 return length;
9417 }
9238 9418
9239 EVALUATE(SY) { return DecodeInstructionOriginal(instr); } 9419 EVALUATE(SY) {
9420 DCHECK_OPCODE(SY);
9421 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9422 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9423 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9424 int32_t alu_out = get_low_register<int32_t>(r1);
9425 int32_t mem_val = ReadW(b2_val + x2_val + d2, instr);
9426 bool isOF = false;
9427 isOF = CheckOverflowForIntSub(alu_out, mem_val, int32_t);
9428 alu_out -= mem_val;
9429 SetS390ConditionCode<int32_t>(alu_out, 0);
9430 SetS390OverflowCode(isOF);
9431 set_low_register(r1, alu_out);
9432 return length;
9433 }
9240 9434
9241 EVALUATE(MFY) { return DecodeInstructionOriginal(instr); } 9435 EVALUATE(MFY) { return DecodeInstructionOriginal(instr); }
9242 9436
9243 EVALUATE(ALY) { return DecodeInstructionOriginal(instr); } 9437 EVALUATE(ALY) {
9438 DCHECK_OPCODE(ALY);
9439 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9440 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9441 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9442 uint32_t alu_out = get_low_register<uint32_t>(r1);
9443 uint32_t mem_val = ReadWU(b2_val + x2_val + d2, instr);
9444 alu_out += mem_val;
9445 set_low_register(r1, alu_out);
9446 SetS390ConditionCode<uint32_t>(alu_out, 0);
9447 return length;
9448 }
9244 9449
9245 EVALUATE(SLY) { return DecodeInstructionOriginal(instr); } 9450 EVALUATE(SLY) {
9451 DCHECK_OPCODE(SLY);
9452 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9453 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9454 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9455 uint32_t alu_out = get_low_register<uint32_t>(r1);
9456 uint32_t mem_val = ReadWU(b2_val + x2_val + d2, instr);
9457 alu_out -= mem_val;
9458 set_low_register(r1, alu_out);
9459 SetS390ConditionCode<uint32_t>(alu_out, 0);
9460 return length;
9461 }
9246 9462
9247 EVALUATE(STHY) { 9463 EVALUATE(STHY) {
9248 DCHECK_OPCODE(STHY); 9464 DCHECK_OPCODE(STHY);
9249 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2); 9465 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9250 // Miscellaneous Loads and Stores 9466 // Miscellaneous Loads and Stores
9251 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2); 9467 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9252 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2); 9468 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9253 intptr_t addr = x2_val + b2_val + d2; 9469 intptr_t addr = x2_val + b2_val + d2;
9254 uint16_t value = get_low_register<uint32_t>(r1); 9470 uint16_t value = get_low_register<uint32_t>(r1);
9255 WriteH(addr, value, instr); 9471 WriteH(addr, value, instr);
9256 return length; 9472 return length;
9257 } 9473 }
9258 9474
9259 EVALUATE(LAY) { return DecodeInstructionOriginal(instr); } 9475 EVALUATE(LAY) {
9476 DCHECK_OPCODE(LAY);
9477 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9478 // Load Address
9479 int rb = b2;
9480 int rx = x2;
9481 int offset = d2;
9482 int64_t rb_val = (rb == 0) ? 0 : get_register(rb);
9483 int64_t rx_val = (rx == 0) ? 0 : get_register(rx);
9484 set_register(r1, rx_val + rb_val + offset);
9485 return length;
9486 }
9260 9487
9261 EVALUATE(STCY) { 9488 EVALUATE(STCY) {
9262 DCHECK_OPCODE(STCY); 9489 DCHECK_OPCODE(STCY);
9263 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2); 9490 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9264 // Miscellaneous Loads and Stores 9491 // Miscellaneous Loads and Stores
9265 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2); 9492 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9266 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2); 9493 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9267 intptr_t addr = x2_val + b2_val + d2; 9494 intptr_t addr = x2_val + b2_val + d2;
9268 uint8_t value = get_low_register<uint32_t>(r1); 9495 uint8_t value = get_low_register<uint32_t>(r1);
9269 WriteB(addr, value); 9496 WriteB(addr, value);
9270 return length; 9497 return length;
9271 } 9498 }
9272 9499
9273 EVALUATE(ICY) { return DecodeInstructionOriginal(instr); } 9500 EVALUATE(ICY) { return DecodeInstructionOriginal(instr); }
9274 9501
9275 EVALUATE(LAEY) { return DecodeInstructionOriginal(instr); } 9502 EVALUATE(LAEY) { return DecodeInstructionOriginal(instr); }
9276 9503
9277 EVALUATE(LB) { return DecodeInstructionOriginal(instr); } 9504 EVALUATE(LB) {
9505 DCHECK_OPCODE(LB);
9506 // Miscellaneous Loads and Stores
9507 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9508 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9509 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9510 intptr_t addr = x2_val + b2_val + d2;
9511 int32_t mem_val = ReadB(addr);
9512 set_low_register(r1, mem_val);
9513 return length;
9514 }
9278 9515
9279 EVALUATE(LGB) { 9516 EVALUATE(LGB) {
9280 DCHECK_OPCODE(LGB); 9517 DCHECK_OPCODE(LGB);
9281 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2); 9518 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9282 // Miscellaneous Loads and Stores 9519 // Miscellaneous Loads and Stores
9283 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2); 9520 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9284 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2); 9521 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9285 intptr_t addr = x2_val + b2_val + d2; 9522 intptr_t addr = x2_val + b2_val + d2;
9286 int64_t mem_val = ReadB(addr); 9523 int64_t mem_val = ReadB(addr);
9287 set_register(r1, mem_val); 9524 set_register(r1, mem_val);
9288 return length; 9525 return length;
9289 } 9526 }
9290 9527
9291 EVALUATE(LHY) { 9528 EVALUATE(LHY) {
9292 DCHECK_OPCODE(LHY); 9529 DCHECK_OPCODE(LHY);
9293 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2); 9530 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9294 // Miscellaneous Loads and Stores 9531 // Miscellaneous Loads and Stores
9295 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2); 9532 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9296 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2); 9533 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9297 intptr_t addr = x2_val + b2_val + d2; 9534 intptr_t addr = x2_val + b2_val + d2;
9298 int32_t result = static_cast<int32_t>(ReadH(addr, instr)); 9535 int32_t result = static_cast<int32_t>(ReadH(addr, instr));
9299 set_low_register(r1, result); 9536 set_low_register(r1, result);
9300 return length; 9537 return length;
9301 } 9538 }
9302 9539
9303 EVALUATE(CHY) { return DecodeInstructionOriginal(instr); } 9540 EVALUATE(CHY) { return DecodeInstructionOriginal(instr); }
9304 9541
9305 EVALUATE(AHY) { return DecodeInstructionOriginal(instr); } 9542 EVALUATE(AHY) {
9543 DCHECK_OPCODE(AHY);
9544 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9545 int32_t r1_val = get_low_register<int32_t>(r1);
9546 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9547 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9548 intptr_t d2_val = d2;
9549 int32_t mem_val =
9550 static_cast<int32_t>(ReadH(b2_val + d2_val + x2_val, instr));
9551 int32_t alu_out = 0;
9552 bool isOF = false;
9553 alu_out = r1_val + mem_val;
9554 isOF = CheckOverflowForIntAdd(r1_val, mem_val, int32_t);
9555 set_low_register(r1, alu_out);
9556 SetS390ConditionCode<int32_t>(alu_out, 0);
9557 SetS390OverflowCode(isOF);
9558 return length;
9559 }
9306 9560
9307 EVALUATE(SHY) { return DecodeInstructionOriginal(instr); } 9561 EVALUATE(SHY) {
9562 DCHECK_OPCODE(SHY);
9563 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9564 int32_t r1_val = get_low_register<int32_t>(r1);
9565 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9566 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9567 intptr_t d2_val = d2;
9568 int32_t mem_val =
9569 static_cast<int32_t>(ReadH(b2_val + d2_val + x2_val, instr));
9570 int32_t alu_out = 0;
9571 bool isOF = false;
9572 alu_out = r1_val - mem_val;
9573 isOF = CheckOverflowForIntSub(r1_val, mem_val, int64_t);
9574 set_low_register(r1, alu_out);
9575 SetS390ConditionCode<int32_t>(alu_out, 0);
9576 SetS390OverflowCode(isOF);
9577 return length;
9578 }
9308 9579
9309 EVALUATE(MHY) { return DecodeInstructionOriginal(instr); } 9580 EVALUATE(MHY) { return DecodeInstructionOriginal(instr); }
9310 9581
9311 EVALUATE(NG) { return DecodeInstructionOriginal(instr); } 9582 EVALUATE(NG) {
9583 DCHECK_OPCODE(NG);
9584 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9585 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9586 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9587 int64_t alu_out = get_register(r1);
9588 int64_t mem_val = ReadDW(b2_val + x2_val + d2);
9589 alu_out &= mem_val;
9590 SetS390BitWiseConditionCode<uint32_t>(alu_out);
9591 set_register(r1, alu_out);
9592 return length;
9593 }
9312 9594
9313 EVALUATE(OG) { return DecodeInstructionOriginal(instr); } 9595 EVALUATE(OG) {
9596 DCHECK_OPCODE(OG);
9597 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9598 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9599 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9600 int64_t alu_out = get_register(r1);
9601 int64_t mem_val = ReadDW(b2_val + x2_val + d2);
9602 alu_out |= mem_val;
9603 SetS390BitWiseConditionCode<uint32_t>(alu_out);
9604 set_register(r1, alu_out);
9605 return length;
9606 }
9314 9607
9315 EVALUATE(XG) { return DecodeInstructionOriginal(instr); } 9608 EVALUATE(XG) {
9609 DCHECK_OPCODE(XG);
9610 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9611 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9612 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9613 int64_t alu_out = get_register(r1);
9614 int64_t mem_val = ReadDW(b2_val + x2_val + d2);
9615 alu_out ^= mem_val;
9616 SetS390BitWiseConditionCode<uint32_t>(alu_out);
9617 set_register(r1, alu_out);
9618 return length;
9619 }
9316 9620
9317 EVALUATE(LGAT) { return DecodeInstructionOriginal(instr); } 9621 EVALUATE(LGAT) { return DecodeInstructionOriginal(instr); }
9318 9622
9319 EVALUATE(MLG) { return DecodeInstructionOriginal(instr); } 9623 EVALUATE(MLG) { return DecodeInstructionOriginal(instr); }
9320 9624
9321 EVALUATE(DLG) { return DecodeInstructionOriginal(instr); } 9625 EVALUATE(DLG) { return DecodeInstructionOriginal(instr); }
9322 9626
9323 EVALUATE(ALCG) { return DecodeInstructionOriginal(instr); } 9627 EVALUATE(ALCG) { return DecodeInstructionOriginal(instr); }
9324 9628
9325 EVALUATE(SLBG) { return DecodeInstructionOriginal(instr); } 9629 EVALUATE(SLBG) { return DecodeInstructionOriginal(instr); }
9326 9630
9327 EVALUATE(STPQ) { return DecodeInstructionOriginal(instr); } 9631 EVALUATE(STPQ) { return DecodeInstructionOriginal(instr); }
9328 9632
9329 EVALUATE(LPQ) { return DecodeInstructionOriginal(instr); } 9633 EVALUATE(LPQ) { return DecodeInstructionOriginal(instr); }
9330 9634
9331 EVALUATE(LLGH) { return DecodeInstructionOriginal(instr); } 9635 EVALUATE(LLGH) {
9636 DCHECK_OPCODE(LLGH);
9637 // Load Logical Halfword
9638 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9639 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9640 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9641 intptr_t d2_val = d2;
9642 uint16_t mem_val = ReadHU(b2_val + d2_val + x2_val, instr);
9643 set_register(r1, mem_val);
9644 return length;
9645 }
9332 9646
9333 EVALUATE(LLH) { return DecodeInstructionOriginal(instr); } 9647 EVALUATE(LLH) {
9648 DCHECK_OPCODE(LLH);
9649 // Load Logical Halfword
9650 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
9651 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9652 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
9653 intptr_t d2_val = d2;
9654 uint16_t mem_val = ReadHU(b2_val + d2_val + x2_val, instr);
9655 set_low_register(r1, mem_val);
9656 return length;
9657 }
9334 9658
9335 EVALUATE(ML) { return DecodeInstructionOriginal(instr); } 9659 EVALUATE(ML) { return DecodeInstructionOriginal(instr); }
9336 9660
9337 EVALUATE(DL) { return DecodeInstructionOriginal(instr); } 9661 EVALUATE(DL) { return DecodeInstructionOriginal(instr); }
9338 9662
9339 EVALUATE(ALC) { return DecodeInstructionOriginal(instr); } 9663 EVALUATE(ALC) { return DecodeInstructionOriginal(instr); }
9340 9664
9341 EVALUATE(SLB) { return DecodeInstructionOriginal(instr); } 9665 EVALUATE(SLB) { return DecodeInstructionOriginal(instr); }
9342 9666
9343 EVALUATE(LLGTAT) { return DecodeInstructionOriginal(instr); } 9667 EVALUATE(LLGTAT) { return DecodeInstructionOriginal(instr); }
(...skipping 19 matching lines...) Expand all
9363 EVALUATE(LFH) { return DecodeInstructionOriginal(instr); } 9687 EVALUATE(LFH) { return DecodeInstructionOriginal(instr); }
9364 9688
9365 EVALUATE(STFH) { return DecodeInstructionOriginal(instr); } 9689 EVALUATE(STFH) { return DecodeInstructionOriginal(instr); }
9366 9690
9367 EVALUATE(CHF) { return DecodeInstructionOriginal(instr); } 9691 EVALUATE(CHF) { return DecodeInstructionOriginal(instr); }
9368 9692
9369 EVALUATE(MVCDK) { return DecodeInstructionOriginal(instr); } 9693 EVALUATE(MVCDK) { return DecodeInstructionOriginal(instr); }
9370 9694
9371 EVALUATE(MVHHI) { return DecodeInstructionOriginal(instr); } 9695 EVALUATE(MVHHI) { return DecodeInstructionOriginal(instr); }
9372 9696
9373 EVALUATE(MVGHI) { return DecodeInstructionOriginal(instr); } 9697 EVALUATE(MVGHI) {
9698 DCHECK_OPCODE(MVGHI);
9699 // Move Integer (64)
9700 DECODE_SIL_INSTRUCTION(b1, d1, i2);
9701 int64_t b1_val = (b1 == 0) ? 0 : get_register(b1);
9702 intptr_t src_addr = b1_val + d1;
9703 WriteDW(src_addr, i2);
9704 return length;
9705 }
9374 9706
9375 EVALUATE(MVHI) { return DecodeInstructionOriginal(instr); } 9707 EVALUATE(MVHI) {
9708 DCHECK_OPCODE(MVHI);
9709 // Move Integer (32)
9710 DECODE_SIL_INSTRUCTION(b1, d1, i2);
9711 int64_t b1_val = (b1 == 0) ? 0 : get_register(b1);
9712 intptr_t src_addr = b1_val + d1;
9713 WriteW(src_addr, i2, instr);
9714 return length;
9715 }
9376 9716
9377 EVALUATE(CHHSI) { return DecodeInstructionOriginal(instr); } 9717 EVALUATE(CHHSI) { return DecodeInstructionOriginal(instr); }
9378 9718
9379 EVALUATE(CGHSI) { return DecodeInstructionOriginal(instr); } 9719 EVALUATE(CGHSI) { return DecodeInstructionOriginal(instr); }
9380 9720
9381 EVALUATE(CHSI) { return DecodeInstructionOriginal(instr); } 9721 EVALUATE(CHSI) { return DecodeInstructionOriginal(instr); }
9382 9722
9383 EVALUATE(CLFHSI) { return DecodeInstructionOriginal(instr); } 9723 EVALUATE(CLFHSI) { return DecodeInstructionOriginal(instr); }
9384 9724
9385 EVALUATE(TBEGIN) { return DecodeInstructionOriginal(instr); } 9725 EVALUATE(TBEGIN) { return DecodeInstructionOriginal(instr); }
9386 9726
9387 EVALUATE(TBEGINC) { return DecodeInstructionOriginal(instr); } 9727 EVALUATE(TBEGINC) { return DecodeInstructionOriginal(instr); }
9388 9728
9389 EVALUATE(LMG) { return DecodeInstructionOriginal(instr); } 9729 EVALUATE(LMG) {
9730 DCHECK_OPCODE(LMG);
9731 // Store Multiple 64-bits.
9732 DECODE_RSY_A_INSTRUCTION(r1, r3, b2, d2);
9733 int rb = b2;
9734 int offset = d2;
9390 9735
9391 EVALUATE(SRAG) { return DecodeInstructionOriginal(instr); } 9736 // Regs roll around if r3 is less than r1.
9737 // Artifically increase r3 by 16 so we can calculate
9738 // the number of regs stored properly.
9739 if (r3 < r1) r3 += 16;
9392 9740
9393 EVALUATE(SLAG) { return DecodeInstructionOriginal(instr); } 9741 int64_t rb_val = (rb == 0) ? 0 : get_register(rb);
9394 9742
9395 EVALUATE(SRLG) { return DecodeInstructionOriginal(instr); } 9743 // Store each register in ascending order.
9744 for (int i = 0; i <= r3 - r1; i++) {
9745 int64_t value = ReadDW(rb_val + offset + 8 * i);
9746 set_register((r1 + i) % 16, value);
9747 }
9748 return length;
9749 }
9396 9750
9397 EVALUATE(SLLG) { return DecodeInstructionOriginal(instr); } 9751 EVALUATE(SRAG) {
9752 DCHECK_OPCODE(SRAG);
9753 // 64-bit non-clobbering shift-left/right arithmetic
9754 DECODE_RSY_A_INSTRUCTION(r1, r3, b2, d2);
9755 // only takes rightmost 6 bits
9756 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9757 int shiftBits = (b2_val + d2) & 0x3F;
9758 int64_t r3_val = get_register(r3);
9759 intptr_t alu_out = 0;
9760 bool isOF = false;
9761 alu_out = r3_val >> shiftBits;
9762 set_register(r1, alu_out);
9763 SetS390ConditionCode<intptr_t>(alu_out, 0);
9764 SetS390OverflowCode(isOF);
9765 return length;
9766 }
9767
9768 EVALUATE(SLAG) {
9769 DCHECK_OPCODE(SLAG);
9770 // 64-bit non-clobbering shift-left/right arithmetic
9771 DECODE_RSY_A_INSTRUCTION(r1, r3, b2, d2);
9772 // only takes rightmost 6 bits
9773 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9774 int shiftBits = (b2_val + d2) & 0x3F;
9775 int64_t r3_val = get_register(r3);
9776 intptr_t alu_out = 0;
9777 bool isOF = false;
9778 isOF = CheckOverflowForShiftLeft(r3_val, shiftBits);
9779 alu_out = r3_val << shiftBits;
9780 set_register(r1, alu_out);
9781 SetS390ConditionCode<intptr_t>(alu_out, 0);
9782 SetS390OverflowCode(isOF);
9783 return length;
9784 }
9785
9786 EVALUATE(SRLG) {
9787 DCHECK_OPCODE(SRLG);
9788 // For SLLG/SRLG, the 64-bit third operand is shifted the number
9789 // of bits specified by the second-operand address, and the result is
9790 // placed at the first-operand location. Except for when the R1 and R3
9791 // fields designate the same register, the third operand remains
9792 // unchanged in general register R3.
9793 DECODE_RSY_A_INSTRUCTION(r1, r3, b2, d2);
9794 // only takes rightmost 6 bits
9795 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9796 int shiftBits = (b2_val + d2) & 0x3F;
9797 // unsigned
9798 uint64_t r3_val = get_register(r3);
9799 uint64_t alu_out = 0;
9800 alu_out = r3_val >> shiftBits;
9801 set_register(r1, alu_out);
9802 return length;
9803 }
9804
9805 EVALUATE(SLLG) {
9806 DCHECK_OPCODE(SLLG);
9807 // For SLLG/SRLG, the 64-bit third operand is shifted the number
9808 // of bits specified by the second-operand address, and the result is
9809 // placed at the first-operand location. Except for when the R1 and R3
9810 // fields designate the same register, the third operand remains
9811 // unchanged in general register R3.
9812 DECODE_RSY_A_INSTRUCTION(r1, r3, b2, d2);
9813 // only takes rightmost 6 bits
9814 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9815 int shiftBits = (b2_val + d2) & 0x3F;
9816 // unsigned
9817 uint64_t r3_val = get_register(r3);
9818 uint64_t alu_out = 0;
9819 alu_out = r3_val << shiftBits;
9820 set_register(r1, alu_out);
9821 return length;
9822 }
9398 9823
9399 EVALUATE(CSY) { return DecodeInstructionOriginal(instr); } 9824 EVALUATE(CSY) { return DecodeInstructionOriginal(instr); }
9400 9825
9401 EVALUATE(RLLG) { return DecodeInstructionOriginal(instr); } 9826 EVALUATE(RLLG) {
9827 DCHECK_OPCODE(RLLG);
9828 // For SLLG/SRLG, the 64-bit third operand is shifted the number
9829 // of bits specified by the second-operand address, and the result is
9830 // placed at the first-operand location. Except for when the R1 and R3
9831 // fields designate the same register, the third operand remains
9832 // unchanged in general register R3.
9833 DECODE_RSY_A_INSTRUCTION(r1, r3, b2, d2);
9834 // only takes rightmost 6 bits
9835 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
9836 int shiftBits = (b2_val + d2) & 0x3F;
9837 // unsigned
9838 uint64_t r3_val = get_register(r3);
9839 uint64_t alu_out = 0;
9840 uint64_t rotateBits = r3_val >> (64 - shiftBits);
9841 alu_out = (r3_val << shiftBits) | (rotateBits);
9842 set_register(r1, alu_out);
9843 return length;
9844 }
9402 9845
9403 EVALUATE(STMG) { return DecodeInstructionOriginal(instr); } 9846 EVALUATE(STMG) {
9847 DCHECK_OPCODE(STMG);
9848 DECODE_RSY_A_INSTRUCTION(r1, r3, b2, d2);
9849 int rb = b2;
9850 int offset = d2;
9851
9852 // Regs roll around if r3 is less than r1.
9853 // Artifically increase r3 by 16 so we can calculate
9854 // the number of regs stored properly.
9855 if (r3 < r1) r3 += 16;
9856
9857 int64_t rb_val = (rb == 0) ? 0 : get_register(rb);
9858
9859 // Store each register in ascending order.
9860 for (int i = 0; i <= r3 - r1; i++) {
9861 int64_t value = get_register((r1 + i) % 16);
9862 WriteDW(rb_val + offset + 8 * i, value);
9863 }
9864 return length;
9865 }
9404 9866
9405 EVALUATE(STMH) { return DecodeInstructionOriginal(instr); } 9867 EVALUATE(STMH) { return DecodeInstructionOriginal(instr); }
9406 9868
9407 EVALUATE(STCMH) { return DecodeInstructionOriginal(instr); } 9869 EVALUATE(STCMH) { return DecodeInstructionOriginal(instr); }
9408 9870
9409 EVALUATE(STCMY) { return DecodeInstructionOriginal(instr); } 9871 EVALUATE(STCMY) { return DecodeInstructionOriginal(instr); }
9410 9872
9411 EVALUATE(CDSY) { return DecodeInstructionOriginal(instr); } 9873 EVALUATE(CDSY) { return DecodeInstructionOriginal(instr); }
9412 9874
9413 EVALUATE(CDSG) { return DecodeInstructionOriginal(instr); } 9875 EVALUATE(CDSG) { return DecodeInstructionOriginal(instr); }
9414 9876
9415 EVALUATE(BXHG) { return DecodeInstructionOriginal(instr); } 9877 EVALUATE(BXHG) { return DecodeInstructionOriginal(instr); }
9416 9878
9417 EVALUATE(BXLEG) { return DecodeInstructionOriginal(instr); } 9879 EVALUATE(BXLEG) { return DecodeInstructionOriginal(instr); }
9418 9880
9419 EVALUATE(ECAG) { return DecodeInstructionOriginal(instr); } 9881 EVALUATE(ECAG) { return DecodeInstructionOriginal(instr); }
9420 9882
9421 EVALUATE(TMY) { return DecodeInstructionOriginal(instr); } 9883 EVALUATE(TMY) {
9884 DCHECK_OPCODE(TMY);
9885 // Test Under Mask (Mem - Imm) (8)
9886 DECODE_SIY_INSTRUCTION(b1, d1, i2);
9887 int64_t b1_val = (b1 == 0) ? 0 : get_register(b1);
9888 intptr_t d1_val = d1;
9889 intptr_t addr = b1_val + d1_val;
9890 uint8_t mem_val = ReadB(addr);
9891 uint8_t imm_val = i2;
9892 uint8_t selected_bits = mem_val & imm_val;
9893 // CC0: Selected bits are zero
9894 // CC1: Selected bits mixed zeros and ones
9895 // CC3: Selected bits all ones
9896 if (0 == selected_bits) {
9897 condition_reg_ = CC_EQ; // CC0
9898 } else if (selected_bits == imm_val) {
9899 condition_reg_ = 0x1; // CC3
9900 } else {
9901 condition_reg_ = 0x4; // CC1
9902 }
9903 return length;
9904 }
9422 9905
9423 EVALUATE(MVIY) { return DecodeInstructionOriginal(instr); } 9906 EVALUATE(MVIY) { return DecodeInstructionOriginal(instr); }
9424 9907
9425 EVALUATE(NIY) { return DecodeInstructionOriginal(instr); } 9908 EVALUATE(NIY) { return DecodeInstructionOriginal(instr); }
9426 9909
9427 EVALUATE(CLIY) { return DecodeInstructionOriginal(instr); } 9910 EVALUATE(CLIY) {
9911 DCHECK_OPCODE(CLIY);
9912 DECODE_SIY_INSTRUCTION(b1, d1, i2);
9913 // Compare Immediate (Mem - Imm) (8)
9914 int64_t b1_val = (b1 == 0) ? 0 : get_register(b1);
9915 intptr_t d1_val = d1;
9916 intptr_t addr = b1_val + d1_val;
9917 uint8_t mem_val = ReadB(addr);
9918 uint8_t imm_val = i2;
9919 SetS390ConditionCode<uint8_t>(mem_val, imm_val);
9920 return length;
9921 }
9428 9922
9429 EVALUATE(OIY) { return DecodeInstructionOriginal(instr); } 9923 EVALUATE(OIY) { return DecodeInstructionOriginal(instr); }
9430 9924
9431 EVALUATE(XIY) { return DecodeInstructionOriginal(instr); } 9925 EVALUATE(XIY) { return DecodeInstructionOriginal(instr); }
9432 9926
9433 EVALUATE(ASI) { return DecodeInstructionOriginal(instr); } 9927 EVALUATE(ASI) {
9928 DCHECK_OPCODE(ASI);
9929 // TODO(bcleung): Change all fooInstr->I2Value() to template functions.
9930 // The below static cast to 8 bit and then to 32 bit is necessary
9931 // because siyInstr->I2Value() returns a uint8_t, which a direct
9932 // cast to int32_t could incorrectly interpret.
9933 DECODE_SIY_INSTRUCTION(b1, d1, i2_unsigned);
9934 int8_t i2_8bit = static_cast<int8_t>(i2_unsigned);
9935 int32_t i2 = static_cast<int32_t>(i2_8bit);
9936 intptr_t b1_val = (b1 == 0) ? 0 : get_register(b1);
9937
9938 int d1_val = d1;
9939 intptr_t addr = b1_val + d1_val;
9940
9941 int32_t mem_val = ReadW(addr, instr);
9942 bool isOF = CheckOverflowForIntAdd(mem_val, i2, int32_t);
9943 int32_t alu_out = mem_val + i2;
9944 SetS390ConditionCode<int32_t>(alu_out, 0);
9945 SetS390OverflowCode(isOF);
9946 WriteW(addr, alu_out, instr);
9947 return length;
9948 }
9434 9949
9435 EVALUATE(ALSI) { return DecodeInstructionOriginal(instr); } 9950 EVALUATE(ALSI) { return DecodeInstructionOriginal(instr); }
9436 9951
9437 EVALUATE(AGSI) { return DecodeInstructionOriginal(instr); } 9952 EVALUATE(AGSI) {
9953 DCHECK_OPCODE(AGSI);
9954 // TODO(bcleung): Change all fooInstr->I2Value() to template functions.
9955 // The below static cast to 8 bit and then to 32 bit is necessary
9956 // because siyInstr->I2Value() returns a uint8_t, which a direct
9957 // cast to int32_t could incorrectly interpret.
9958 DECODE_SIY_INSTRUCTION(b1, d1, i2_unsigned);
9959 int8_t i2_8bit = static_cast<int8_t>(i2_unsigned);
9960 int64_t i2 = static_cast<int64_t>(i2_8bit);
9961 intptr_t b1_val = (b1 == 0) ? 0 : get_register(b1);
9962
9963 int d1_val = d1;
9964 intptr_t addr = b1_val + d1_val;
9965
9966 int64_t mem_val = ReadDW(addr);
9967 int isOF = CheckOverflowForIntAdd(mem_val, i2, int64_t);
9968 int64_t alu_out = mem_val + i2;
9969 SetS390ConditionCode<uint64_t>(alu_out, 0);
9970 SetS390OverflowCode(isOF);
9971 WriteDW(addr, alu_out);
9972 return length;
9973 }
9438 9974
9439 EVALUATE(ALGSI) { return DecodeInstructionOriginal(instr); } 9975 EVALUATE(ALGSI) { return DecodeInstructionOriginal(instr); }
9440 9976
9441 EVALUATE(ICMH) { return DecodeInstructionOriginal(instr); } 9977 EVALUATE(ICMH) { return DecodeInstructionOriginal(instr); }
9442 9978
9443 EVALUATE(ICMY) { return DecodeInstructionOriginal(instr); } 9979 EVALUATE(ICMY) { return DecodeInstructionOriginal(instr); }
9444 9980
9445 EVALUATE(MVCLU) { return DecodeInstructionOriginal(instr); } 9981 EVALUATE(MVCLU) { return DecodeInstructionOriginal(instr); }
9446 9982
9447 EVALUATE(CLCLU) { return DecodeInstructionOriginal(instr); } 9983 EVALUATE(CLCLU) { return DecodeInstructionOriginal(instr); }
9448 9984
9449 EVALUATE(STMY) { return DecodeInstructionOriginal(instr); } 9985 EVALUATE(STMY) {
9986 DCHECK_OPCODE(STMY);
9987 DECODE_RSY_A_INSTRUCTION(r1, r3, b2, d2);
9988 // Load/Store Multiple (32)
9989 int offset = d2;
9990
9991 // Regs roll around if r3 is less than r1.
9992 // Artifically increase r3 by 16 so we can calculate
9993 // the number of regs stored properly.
9994 if (r3 < r1) r3 += 16;
9995
9996 int32_t b2_val = (b2 == 0) ? 0 : get_low_register<int32_t>(b2);
9997
9998 // Store each register in ascending order.
9999 for (int i = 0; i <= r3 - r1; i++) {
10000 int32_t value = get_low_register<int32_t>((r1 + i) % 16);
10001 WriteW(b2_val + offset + 4 * i, value, instr);
10002 }
10003 return length;
10004 }
9450 10005
9451 EVALUATE(LMH) { return DecodeInstructionOriginal(instr); } 10006 EVALUATE(LMH) { return DecodeInstructionOriginal(instr); }
9452 10007
9453 EVALUATE(LMY) { return DecodeInstructionOriginal(instr); } 10008 EVALUATE(LMY) {
10009 DCHECK_OPCODE(LMY);
10010 DECODE_RSY_A_INSTRUCTION(r1, r3, b2, d2);
10011 // Load/Store Multiple (32)
10012 int offset = d2;
10013
10014 // Regs roll around if r3 is less than r1.
10015 // Artifically increase r3 by 16 so we can calculate
10016 // the number of regs stored properly.
10017 if (r3 < r1) r3 += 16;
10018
10019 int32_t b2_val = (b2 == 0) ? 0 : get_low_register<int32_t>(b2);
10020
10021 // Store each register in ascending order.
10022 for (int i = 0; i <= r3 - r1; i++) {
10023 int32_t value = ReadW(b2_val + offset + 4 * i, instr);
10024 set_low_register((r1 + i) % 16, value);
10025 }
10026 return length;
10027 }
9454 10028
9455 EVALUATE(TP) { return DecodeInstructionOriginal(instr); } 10029 EVALUATE(TP) { return DecodeInstructionOriginal(instr); }
9456 10030
9457 EVALUATE(SRAK) { return DecodeInstructionOriginal(instr); } 10031 EVALUATE(SRAK) {
10032 DCHECK_OPCODE(SRAK);
10033 DECODE_RSY_A_INSTRUCTION(r1, r3, b2, d2);
10034 // 32-bit non-clobbering shift-left/right arithmetic
10035 // only takes rightmost 6 bits
10036 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
10037 int shiftBits = (b2_val + d2) & 0x3F;
10038 int32_t r3_val = get_low_register<int32_t>(r3);
10039 int32_t alu_out = 0;
10040 bool isOF = false;
10041 alu_out = r3_val >> shiftBits;
10042 set_low_register(r1, alu_out);
10043 SetS390ConditionCode<int32_t>(alu_out, 0);
10044 SetS390OverflowCode(isOF);
10045 return length;
10046 }
9458 10047
9459 EVALUATE(SLAK) { return DecodeInstructionOriginal(instr); } 10048 EVALUATE(SLAK) {
10049 DCHECK_OPCODE(SLAK);
10050 DECODE_RSY_A_INSTRUCTION(r1, r3, b2, d2);
10051 // 32-bit non-clobbering shift-left/right arithmetic
10052 // only takes rightmost 6 bits
10053 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
10054 int shiftBits = (b2_val + d2) & 0x3F;
10055 int32_t r3_val = get_low_register<int32_t>(r3);
10056 int32_t alu_out = 0;
10057 bool isOF = false;
10058 isOF = CheckOverflowForShiftLeft(r3_val, shiftBits);
10059 alu_out = r3_val << shiftBits;
10060 set_low_register(r1, alu_out);
10061 SetS390ConditionCode<int32_t>(alu_out, 0);
10062 SetS390OverflowCode(isOF);
10063 return length;
10064 }
9460 10065
9461 EVALUATE(SRLK) { return DecodeInstructionOriginal(instr); } 10066 EVALUATE(SRLK) {
10067 DCHECK_OPCODE(SRLK);
10068 // For SLLK/SRLL, the 32-bit third operand is shifted the number
10069 // of bits specified by the second-operand address, and the result is
10070 // placed at the first-operand location. Except for when the R1 and R3
10071 // fields designate the same register, the third operand remains
10072 // unchanged in general register R3.
10073 DECODE_RSY_A_INSTRUCTION(r1, r3, b2, d2);
10074 // only takes rightmost 6 bits
10075 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
10076 int shiftBits = (b2_val + d2) & 0x3F;
10077 // unsigned
10078 uint32_t r3_val = get_low_register<uint32_t>(r3);
10079 uint32_t alu_out = 0;
10080 alu_out = r3_val >> shiftBits;
10081 set_low_register(r1, alu_out);
10082 return length;
10083 }
9462 10084
9463 EVALUATE(SLLK) { return DecodeInstructionOriginal(instr); } 10085 EVALUATE(SLLK) {
10086 DCHECK_OPCODE(SLLK);
10087 // For SLLK/SRLL, the 32-bit third operand is shifted the number
10088 // of bits specified by the second-operand address, and the result is
10089 // placed at the first-operand location. Except for when the R1 and R3
10090 // fields designate the same register, the third operand remains
10091 // unchanged in general register R3.
10092 DECODE_RSY_A_INSTRUCTION(r1, r3, b2, d2);
10093 // only takes rightmost 6 bits
10094 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
10095 int shiftBits = (b2_val + d2) & 0x3F;
10096 // unsigned
10097 uint32_t r3_val = get_low_register<uint32_t>(r3);
10098 uint32_t alu_out = 0;
10099 alu_out = r3_val << shiftBits;
10100 set_low_register(r1, alu_out);
10101 return length;
10102 }
9464 10103
9465 EVALUATE(LOCG) { return DecodeInstructionOriginal(instr); } 10104 EVALUATE(LOCG) { return DecodeInstructionOriginal(instr); }
9466 10105
9467 EVALUATE(STOCG) { return DecodeInstructionOriginal(instr); } 10106 EVALUATE(STOCG) { return DecodeInstructionOriginal(instr); }
9468 10107
9469 EVALUATE(LANG) { return DecodeInstructionOriginal(instr); } 10108 EVALUATE(LANG) { return DecodeInstructionOriginal(instr); }
9470 10109
9471 EVALUATE(LAOG) { return DecodeInstructionOriginal(instr); } 10110 EVALUATE(LAOG) { return DecodeInstructionOriginal(instr); }
9472 10111
9473 EVALUATE(LAXG) { return DecodeInstructionOriginal(instr); } 10112 EVALUATE(LAXG) { return DecodeInstructionOriginal(instr); }
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
9521 EVALUATE(ALHSIK) { return DecodeInstructionOriginal(instr); } 10160 EVALUATE(ALHSIK) { return DecodeInstructionOriginal(instr); }
9522 10161
9523 EVALUATE(ALGHSIK) { return DecodeInstructionOriginal(instr); } 10162 EVALUATE(ALGHSIK) { return DecodeInstructionOriginal(instr); }
9524 10163
9525 EVALUATE(CGRB) { return DecodeInstructionOriginal(instr); } 10164 EVALUATE(CGRB) { return DecodeInstructionOriginal(instr); }
9526 10165
9527 EVALUATE(CGIB) { return DecodeInstructionOriginal(instr); } 10166 EVALUATE(CGIB) { return DecodeInstructionOriginal(instr); }
9528 10167
9529 EVALUATE(CIB) { return DecodeInstructionOriginal(instr); } 10168 EVALUATE(CIB) { return DecodeInstructionOriginal(instr); }
9530 10169
9531 EVALUATE(LDEB) { return DecodeInstructionOriginal(instr); } 10170 EVALUATE(LDEB) {
10171 DCHECK_OPCODE(LDEB);
10172 // Load Float
10173 DECODE_RXE_INSTRUCTION(r1, b2, x2, d2);
10174 int rb = b2;
10175 int rx = x2;
10176 int offset = d2;
10177 int64_t rb_val = (rb == 0) ? 0 : get_register(rb);
10178 int64_t rx_val = (rx == 0) ? 0 : get_register(rx);
10179 double ret =
10180 static_cast<double>(*reinterpret_cast<float*>(rx_val + rb_val + offset));
10181 set_d_register_from_double(r1, ret);
10182 return length;
10183 }
9532 10184
9533 EVALUATE(LXDB) { return DecodeInstructionOriginal(instr); } 10185 EVALUATE(LXDB) { return DecodeInstructionOriginal(instr); }
9534 10186
9535 EVALUATE(LXEB) { return DecodeInstructionOriginal(instr); } 10187 EVALUATE(LXEB) { return DecodeInstructionOriginal(instr); }
9536 10188
9537 EVALUATE(MXDB) { return DecodeInstructionOriginal(instr); } 10189 EVALUATE(MXDB) { return DecodeInstructionOriginal(instr); }
9538 10190
9539 EVALUATE(KEB) { return DecodeInstructionOriginal(instr); } 10191 EVALUATE(KEB) { return DecodeInstructionOriginal(instr); }
9540 10192
9541 EVALUATE(CEB) { return DecodeInstructionOriginal(instr); } 10193 EVALUATE(CEB) { return DecodeInstructionOriginal(instr); }
(...skipping 11 matching lines...) Expand all
9553 EVALUATE(MSEB) { return DecodeInstructionOriginal(instr); } 10205 EVALUATE(MSEB) { return DecodeInstructionOriginal(instr); }
9554 10206
9555 EVALUATE(TCEB) { return DecodeInstructionOriginal(instr); } 10207 EVALUATE(TCEB) { return DecodeInstructionOriginal(instr); }
9556 10208
9557 EVALUATE(TCDB) { return DecodeInstructionOriginal(instr); } 10209 EVALUATE(TCDB) { return DecodeInstructionOriginal(instr); }
9558 10210
9559 EVALUATE(TCXB) { return DecodeInstructionOriginal(instr); } 10211 EVALUATE(TCXB) { return DecodeInstructionOriginal(instr); }
9560 10212
9561 EVALUATE(SQEB) { return DecodeInstructionOriginal(instr); } 10213 EVALUATE(SQEB) { return DecodeInstructionOriginal(instr); }
9562 10214
9563 EVALUATE(SQDB) { return DecodeInstructionOriginal(instr); } 10215 EVALUATE(SQDB) {
10216 DCHECK_OPCODE(SQDB);
10217 DECODE_RXE_INSTRUCTION(r1, b2, x2, d2);
10218 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
10219 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
10220 intptr_t d2_val = d2;
10221 double r1_val = get_double_from_d_register(r1);
10222 double dbl_val = ReadDouble(b2_val + x2_val + d2_val);
10223 r1_val = std::sqrt(dbl_val);
10224 set_d_register_from_double(r1, r1_val);
10225 return length;
10226 }
9564 10227
9565 EVALUATE(MEEB) { return DecodeInstructionOriginal(instr); } 10228 EVALUATE(MEEB) { return DecodeInstructionOriginal(instr); }
9566 10229
9567 EVALUATE(KDB) { return DecodeInstructionOriginal(instr); } 10230 EVALUATE(KDB) { return DecodeInstructionOriginal(instr); }
9568 10231
9569 EVALUATE(CDB) { return DecodeInstructionOriginal(instr); } 10232 EVALUATE(CDB) {
10233 DCHECK_OPCODE(CDB);
9570 10234
9571 EVALUATE(ADB) { return DecodeInstructionOriginal(instr); } 10235 DECODE_RXE_INSTRUCTION(r1, b2, x2, d2);
10236 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
10237 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
10238 intptr_t d2_val = d2;
10239 double r1_val = get_double_from_d_register(r1);
10240 double dbl_val = ReadDouble(b2_val + x2_val + d2_val);
10241 SetS390ConditionCode<double>(r1_val, dbl_val);
10242 return length;
10243 }
9572 10244
9573 EVALUATE(SDB) { return DecodeInstructionOriginal(instr); } 10245 EVALUATE(ADB) {
10246 DCHECK_OPCODE(ADB);
9574 10247
9575 EVALUATE(MDB) { return DecodeInstructionOriginal(instr); } 10248 DECODE_RXE_INSTRUCTION(r1, b2, x2, d2);
10249 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
10250 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
10251 intptr_t d2_val = d2;
10252 double r1_val = get_double_from_d_register(r1);
10253 double dbl_val = ReadDouble(b2_val + x2_val + d2_val);
10254 r1_val += dbl_val;
10255 set_d_register_from_double(r1, r1_val);
10256 SetS390ConditionCode<double>(r1_val, 0);
10257 return length;
10258 }
9576 10259
9577 EVALUATE(DDB) { return DecodeInstructionOriginal(instr); } 10260 EVALUATE(SDB) {
10261 DCHECK_OPCODE(SDB);
10262 DECODE_RXE_INSTRUCTION(r1, b2, x2, d2);
10263 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
10264 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
10265 intptr_t d2_val = d2;
10266 double r1_val = get_double_from_d_register(r1);
10267 double dbl_val = ReadDouble(b2_val + x2_val + d2_val);
10268 r1_val -= dbl_val;
10269 set_d_register_from_double(r1, r1_val);
10270 SetS390ConditionCode<double>(r1_val, 0);
10271 return length;
10272 }
10273
10274 EVALUATE(MDB) {
10275 DCHECK_OPCODE(MDB);
10276 DECODE_RXE_INSTRUCTION(r1, b2, x2, d2);
10277 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
10278 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
10279 intptr_t d2_val = d2;
10280 double r1_val = get_double_from_d_register(r1);
10281 double dbl_val = ReadDouble(b2_val + x2_val + d2_val);
10282 r1_val *= dbl_val;
10283 set_d_register_from_double(r1, r1_val);
10284 SetS390ConditionCode<double>(r1_val, 0);
10285 return length;
10286 }
10287
10288 EVALUATE(DDB) {
10289 DCHECK_OPCODE(DDB);
10290 DECODE_RXE_INSTRUCTION(r1, b2, x2, d2);
10291 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
10292 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
10293 intptr_t d2_val = d2;
10294 double r1_val = get_double_from_d_register(r1);
10295 double dbl_val = ReadDouble(b2_val + x2_val + d2_val);
10296 r1_val /= dbl_val;
10297 set_d_register_from_double(r1, r1_val);
10298 SetS390ConditionCode<double>(r1_val, 0);
10299 return length;
10300 }
9578 10301
9579 EVALUATE(MADB) { return DecodeInstructionOriginal(instr); } 10302 EVALUATE(MADB) { return DecodeInstructionOriginal(instr); }
9580 10303
9581 EVALUATE(MSDB) { return DecodeInstructionOriginal(instr); } 10304 EVALUATE(MSDB) { return DecodeInstructionOriginal(instr); }
9582 10305
9583 EVALUATE(SLDT) { return DecodeInstructionOriginal(instr); } 10306 EVALUATE(SLDT) { return DecodeInstructionOriginal(instr); }
9584 10307
9585 EVALUATE(SRDT) { return DecodeInstructionOriginal(instr); } 10308 EVALUATE(SRDT) { return DecodeInstructionOriginal(instr); }
9586 10309
9587 EVALUATE(SLXT) { return DecodeInstructionOriginal(instr); } 10310 EVALUATE(SLXT) { return DecodeInstructionOriginal(instr); }
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
9656 10379
9657 EVALUATE(CXZT) { return DecodeInstructionOriginal(instr); } 10380 EVALUATE(CXZT) { return DecodeInstructionOriginal(instr); }
9658 10381
9659 #undef EVALUATE 10382 #undef EVALUATE
9660 10383
9661 } // namespace internal 10384 } // namespace internal
9662 } // namespace v8 10385 } // namespace v8
9663 10386
9664 #endif // USE_SIMULATOR 10387 #endif // USE_SIMULATOR
9665 #endif // V8_TARGET_ARCH_S390 10388 #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