| OLD | NEW |
| 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. | 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. |
| 2 // All Rights Reserved. | 2 // All Rights Reserved. |
| 3 // | 3 // |
| 4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
| 5 // modification, are permitted provided that the following conditions | 5 // modification, are permitted provided that the following conditions |
| 6 // are met: | 6 // are met: |
| 7 // | 7 // |
| 8 // - Redistributions of source code must retain the above copyright notice, | 8 // - Redistributions of source code must retain the above copyright notice, |
| 9 // this list of conditions and the following disclaimer. | 9 // this list of conditions and the following disclaimer. |
| 10 // | 10 // |
| (...skipping 808 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 819 DCHECK(is_uint16(op)); | 819 DCHECK(is_uint16(op)); |
| 820 uint64_t code = (static_cast<uint64_t>(op & 0xFF00)) * B32 | | 820 uint64_t code = (static_cast<uint64_t>(op & 0xFF00)) * B32 | |
| 821 (static_cast<uint64_t>(r1.code())) * B36 | | 821 (static_cast<uint64_t>(r1.code())) * B36 | |
| 822 (static_cast<uint64_t>(x2.code())) * B32 | | 822 (static_cast<uint64_t>(x2.code())) * B32 | |
| 823 (static_cast<uint64_t>(b2.code())) * B28 | | 823 (static_cast<uint64_t>(b2.code())) * B28 | |
| 824 (static_cast<uint64_t>(d2 & 0x0FFF)) * B16 | | 824 (static_cast<uint64_t>(d2 & 0x0FFF)) * B16 | |
| 825 (static_cast<uint64_t>(op & 0x00FF)); | 825 (static_cast<uint64_t>(op & 0x00FF)); |
| 826 emit6bytes(code); | 826 emit6bytes(code); |
| 827 } | 827 } |
| 828 | 828 |
| 829 // RXY format: <insn> R1,D2(X2,B2) | |
| 830 // +--------+----+----+----+-------------+--------+--------+ | |
| 831 // | OpCode | R1 | X2 | B2 | DL2 | DH2 | OpCode | | |
| 832 // +--------+----+----+----+-------------+--------+--------+ | |
| 833 // 0 8 12 16 20 32 36 40 47 | |
| 834 #define RXY_FORM_EMIT(name, op) \ | |
| 835 void Assembler::name(Register r1, Register x2, Register b2, Disp d2) { \ | |
| 836 rxy_form(op, r1, x2, b2, d2); \ | |
| 837 } \ | |
| 838 void Assembler::name(Register r1, const MemOperand& opnd) { \ | |
| 839 name(r1, opnd.getIndexRegister(), opnd.getBaseRegister(), \ | |
| 840 opnd.getDisplacement()); \ | |
| 841 } | |
| 842 | |
| 843 void Assembler::rxy_form(Opcode op, Register r1, Register x2, Register b2, | |
| 844 Disp d2) { | |
| 845 DCHECK(is_int20(d2)); | |
| 846 DCHECK(is_uint16(op)); | |
| 847 uint64_t code = (static_cast<uint64_t>(op & 0xFF00)) * B32 | | |
| 848 (static_cast<uint64_t>(r1.code())) * B36 | | |
| 849 (static_cast<uint64_t>(x2.code())) * B32 | | |
| 850 (static_cast<uint64_t>(b2.code())) * B28 | | |
| 851 (static_cast<uint64_t>(d2 & 0x0FFF)) * B16 | | |
| 852 (static_cast<uint64_t>(d2 & 0x0FF000)) >> 4 | | |
| 853 (static_cast<uint64_t>(op & 0x00FF)); | |
| 854 emit6bytes(code); | |
| 855 } | |
| 856 | |
| 857 void Assembler::rxy_form(Opcode op, Register r1, Condition m3, Register b2, | |
| 858 Disp d2) { | |
| 859 DCHECK(is_int20(d2)); | |
| 860 DCHECK(is_uint16(op)); | |
| 861 uint64_t code = (static_cast<uint64_t>(op & 0xFF00)) * B32 | | |
| 862 (static_cast<uint64_t>(r1.code())) * B36 | | |
| 863 (static_cast<uint64_t>(m3 & 0xF)) * B32 | | |
| 864 (static_cast<uint64_t>(b2.code())) * B28 | | |
| 865 (static_cast<uint64_t>(d2 & 0x0FFF)) * B16 | | |
| 866 (static_cast<uint64_t>(d2 & 0x0FF000)) >> 4 | | |
| 867 (static_cast<uint64_t>(op & 0x00FF)); | |
| 868 emit6bytes(code); | |
| 869 } | |
| 870 | |
| 871 void Assembler::rxy_form(Opcode op, DoubleRegister r1, Register x2, Register b2, | |
| 872 Disp d2) { | |
| 873 DCHECK(is_int20(d2)); | |
| 874 DCHECK(is_uint16(op)); | |
| 875 uint64_t code = (static_cast<uint64_t>(op & 0xFF00)) * B32 | | |
| 876 (static_cast<uint64_t>(r1.code())) * B36 | | |
| 877 (static_cast<uint64_t>(x2.code())) * B32 | | |
| 878 (static_cast<uint64_t>(b2.code())) * B28 | | |
| 879 (static_cast<uint64_t>(d2 & 0x0FFF)) * B16 | | |
| 880 (static_cast<uint64_t>(d2 & 0x0FF000)) >> 4 | | |
| 881 (static_cast<uint64_t>(op & 0x00FF)); | |
| 882 emit6bytes(code); | |
| 883 } | |
| 884 | |
| 885 // RRS format: <insn> R1,R2,M3,D4(B4) | 829 // RRS format: <insn> R1,R2,M3,D4(B4) |
| 886 // +--------+----+----+----+-------------+----+---+--------+ | 830 // +--------+----+----+----+-------------+----+---+--------+ |
| 887 // | OpCode | R1 | R2 | B4 | D4 | M3 |///| OpCode | | 831 // | OpCode | R1 | R2 | B4 | D4 | M3 |///| OpCode | |
| 888 // +--------+----+----+----+-------------+----+---+--------+ | 832 // +--------+----+----+----+-------------+----+---+--------+ |
| 889 // 0 8 12 16 20 32 36 40 47 | 833 // 0 8 12 16 20 32 36 40 47 |
| 890 #define RRS_FORM_EMIT(name, op) \ | 834 #define RRS_FORM_EMIT(name, op) \ |
| 891 void Assembler::name(Register r1, Register r2, Register b4, Disp d4, \ | 835 void Assembler::name(Register r1, Register r2, Register b4, Disp d4, \ |
| 892 Condition m3) { \ | 836 Condition m3) { \ |
| 893 rrs_form(op, r1, r2, b4, d4, m3); \ | 837 rrs_form(op, r1, r2, b4, d4, m3); \ |
| 894 } \ | 838 } \ |
| (...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1296 Register r2) { | 1240 Register r2) { |
| 1297 uint32_t code = op << 16 | m3 * B12 | m4 * B8 | r1.code() * B4 | r2.code(); | 1241 uint32_t code = op << 16 | m3 * B12 | m4 * B8 | r1.code() * B4 | r2.code(); |
| 1298 emit4bytes(code); | 1242 emit4bytes(code); |
| 1299 } | 1243 } |
| 1300 | 1244 |
| 1301 // end of S390 Instruction generation | 1245 // end of S390 Instruction generation |
| 1302 | 1246 |
| 1303 // start of S390 instruction | 1247 // start of S390 instruction |
| 1304 RXE_FORM_EMIT(ceb, CEB) | 1248 RXE_FORM_EMIT(ceb, CEB) |
| 1305 SS1_FORM_EMIT(ed, ED) | 1249 SS1_FORM_EMIT(ed, ED) |
| 1306 RXY_FORM_EMIT(ley, LEY) | |
| 1307 RXY_FORM_EMIT(lrv, LRV) | |
| 1308 RXY_FORM_EMIT(lrvg, LRVG) | |
| 1309 RXY_FORM_EMIT(lrvh, LRVH) | |
| 1310 SS1_FORM_EMIT(mvn, MVN) | 1250 SS1_FORM_EMIT(mvn, MVN) |
| 1311 SS1_FORM_EMIT(nc, NC) | 1251 SS1_FORM_EMIT(nc, NC) |
| 1312 SI_FORM_EMIT(ni, NI) | 1252 SI_FORM_EMIT(ni, NI) |
| 1313 RI1_FORM_EMIT(nilh, NILH) | 1253 RI1_FORM_EMIT(nilh, NILH) |
| 1314 RI1_FORM_EMIT(nill, NILL) | 1254 RI1_FORM_EMIT(nill, NILL) |
| 1315 RI1_FORM_EMIT(oill, OILL) | 1255 RI1_FORM_EMIT(oill, OILL) |
| 1316 RXY_FORM_EMIT(pfd, PFD) | |
| 1317 RXY_FORM_EMIT(slgf, SLGF) | |
| 1318 RXY_FORM_EMIT(strvh, STRVH) | |
| 1319 RXY_FORM_EMIT(strv, STRV) | |
| 1320 RXY_FORM_EMIT(strvg, STRVG) | |
| 1321 RI1_FORM_EMIT(tmll, TMLL) | 1256 RI1_FORM_EMIT(tmll, TMLL) |
| 1322 SS1_FORM_EMIT(tr, TR) | 1257 SS1_FORM_EMIT(tr, TR) |
| 1323 S_FORM_EMIT(ts, TS) | 1258 S_FORM_EMIT(ts, TS) |
| 1324 | 1259 |
| 1325 // ------------------------- | 1260 // ------------------------- |
| 1326 // Load Address Instructions | 1261 // Load Address Instructions |
| 1327 // ------------------------- | 1262 // ------------------------- |
| 1328 // Load Address Register-Storage | |
| 1329 void Assembler::lay(Register r1, const MemOperand& opnd) { | |
| 1330 rxy_form(LAY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1331 } | |
| 1332 | |
| 1333 // Load Address Relative Long | 1263 // Load Address Relative Long |
| 1334 void Assembler::larl(Register r1, Label* l) { | 1264 void Assembler::larl(Register r1, Label* l) { |
| 1335 larl(r1, Operand(branch_offset(l))); | 1265 larl(r1, Operand(branch_offset(l))); |
| 1336 } | 1266 } |
| 1337 | 1267 |
| 1338 // ----------------- | 1268 // ----------------- |
| 1339 // Load Instructions | 1269 // Load Instructions |
| 1340 // ----------------- | 1270 // ----------------- |
| 1341 // Load Byte Register-Storage (32<-8) | |
| 1342 void Assembler::lb(Register r, const MemOperand& src) { | |
| 1343 rxy_form(LB, r, src.rx(), src.rb(), src.offset()); | |
| 1344 } | |
| 1345 | |
| 1346 // Load Byte Register-Storage (64<-8) | |
| 1347 void Assembler::lgb(Register r, const MemOperand& src) { | |
| 1348 rxy_form(LGB, r, src.rx(), src.rb(), src.offset()); | |
| 1349 } | |
| 1350 | |
| 1351 // Load Halfword Register-Storage (32<-16) | |
| 1352 void Assembler::lhy(Register r, const MemOperand& src) { | |
| 1353 rxy_form(LHY, r, src.rx(), src.rb(), src.offset()); | |
| 1354 } | |
| 1355 | |
| 1356 // Load Halfword Register-Storage (64<-16) | |
| 1357 void Assembler::lgh(Register r, const MemOperand& src) { | |
| 1358 rxy_form(LGH, r, src.rx(), src.rb(), src.offset()); | |
| 1359 } | |
| 1360 | |
| 1361 // Load Register-Storage (32) | |
| 1362 void Assembler::ly(Register r, const MemOperand& src) { | |
| 1363 rxy_form(LY, r, src.rx(), src.rb(), src.offset()); | |
| 1364 } | |
| 1365 | |
| 1366 // Load Register-Storage (64) | |
| 1367 void Assembler::lg(Register r, const MemOperand& src) { | |
| 1368 rxy_form(LG, r, src.rx(), src.rb(), src.offset()); | |
| 1369 } | |
| 1370 | |
| 1371 // Load Register-Storage (64<-32) | |
| 1372 void Assembler::lgf(Register r, const MemOperand& src) { | |
| 1373 rxy_form(LGF, r, src.rx(), src.rb(), src.offset()); | |
| 1374 } | |
| 1375 | |
| 1376 // Load Halfword Immediate (32) | 1271 // Load Halfword Immediate (32) |
| 1377 void Assembler::lhi(Register r, const Operand& imm) { ri_form(LHI, r, imm); } | 1272 void Assembler::lhi(Register r, const Operand& imm) { ri_form(LHI, r, imm); } |
| 1378 | 1273 |
| 1379 // Load Halfword Immediate (64) | 1274 // Load Halfword Immediate (64) |
| 1380 void Assembler::lghi(Register r, const Operand& imm) { ri_form(LGHI, r, imm); } | 1275 void Assembler::lghi(Register r, const Operand& imm) { ri_form(LGHI, r, imm); } |
| 1381 | 1276 |
| 1382 // -------------------------- | |
| 1383 // Load And Test Instructions | |
| 1384 // -------------------------- | |
| 1385 // Load and Test Register-Storage (32) | |
| 1386 void Assembler::lt_z(Register r1, const MemOperand& opnd) { | |
| 1387 rxy_form(LT, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1388 } | |
| 1389 | |
| 1390 // Load and Test Register-Storage (64) | |
| 1391 void Assembler::ltg(Register r1, const MemOperand& opnd) { | |
| 1392 rxy_form(LTG, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1393 } | |
| 1394 | |
| 1395 // ------------------------- | 1277 // ------------------------- |
| 1396 // Load Logical Instructions | 1278 // Load Logical Instructions |
| 1397 // ------------------------- | 1279 // ------------------------- |
| 1398 // Load Logical Character (32) - loads a byte and zero ext. | |
| 1399 void Assembler::llc(Register r1, const MemOperand& opnd) { | |
| 1400 rxy_form(LLC, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1401 } | |
| 1402 | |
| 1403 // Load Logical Character (64) - loads a byte and zero ext. | |
| 1404 void Assembler::llgc(Register r1, const MemOperand& opnd) { | |
| 1405 rxy_form(LLGC, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1406 } | |
| 1407 | |
| 1408 // Load Logical halfword Register-Storage (64<-32) | |
| 1409 void Assembler::llgf(Register r1, const MemOperand& opnd) { | |
| 1410 rxy_form(LLGF, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1411 } | |
| 1412 | |
| 1413 // Load Logical halfword Register-Storage (32) | |
| 1414 void Assembler::llh(Register r1, const MemOperand& opnd) { | |
| 1415 rxy_form(LLH, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1416 } | |
| 1417 | |
| 1418 // Load Logical halfword Register-Storage (64) | |
| 1419 void Assembler::llgh(Register r1, const MemOperand& opnd) { | |
| 1420 rxy_form(LLGH, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1421 } | |
| 1422 | |
| 1423 // Load On Condition R-R (32) | 1280 // Load On Condition R-R (32) |
| 1424 void Assembler::locr(Condition m3, Register r1, Register r2) { | 1281 void Assembler::locr(Condition m3, Register r1, Register r2) { |
| 1425 rrf2_form(LOCR << 16 | m3 * B12 | r1.code() * B4 | r2.code()); | 1282 rrf2_form(LOCR << 16 | m3 * B12 | r1.code() * B4 | r2.code()); |
| 1426 } | 1283 } |
| 1427 | 1284 |
| 1428 // Load On Condition R-R (64) | 1285 // Load On Condition R-R (64) |
| 1429 void Assembler::locgr(Condition m3, Register r1, Register r2) { | 1286 void Assembler::locgr(Condition m3, Register r1, Register r2) { |
| 1430 rrf2_form(LOCGR << 16 | m3 * B12 | r1.code() * B4 | r2.code()); | 1287 rrf2_form(LOCGR << 16 | m3 * B12 | r1.code() * B4 | r2.code()); |
| 1431 } | 1288 } |
| 1432 | 1289 |
| 1433 // Load On Condition R-M (32) | 1290 // Load On Condition R-M (32) |
| 1434 void Assembler::loc(Condition m3, Register r1, const MemOperand& src) { | 1291 void Assembler::loc(Condition m3, Register r1, const MemOperand& src) { |
| 1435 rxy_form(LOC, r1, m3, src.rb(), src.offset()); | 1292 rsy_form(LOC, r1, m3, src.rb(), src.offset()); |
| 1436 } | 1293 } |
| 1437 | 1294 |
| 1438 // Load On Condition R-M (64) | 1295 // Load On Condition R-M (64) |
| 1439 void Assembler::locg(Condition m3, Register r1, const MemOperand& src) { | 1296 void Assembler::locg(Condition m3, Register r1, const MemOperand& src) { |
| 1440 rxy_form(LOCG, r1, m3, src.rb(), src.offset()); | 1297 rsy_form(LOCG, r1, m3, src.rb(), src.offset()); |
| 1441 } | 1298 } |
| 1442 | 1299 |
| 1443 // ------------------- | 1300 // ------------------- |
| 1444 // Branch Instructions | 1301 // Branch Instructions |
| 1445 // ------------------- | 1302 // ------------------- |
| 1446 // Branch on Count (64) | 1303 // Branch on Count (64) |
| 1447 void Assembler::bctg(Register r, const MemOperand& opnd) { | |
| 1448 rxy_form(BCTG, r, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1449 } | |
| 1450 | |
| 1451 // Branch Relative and Save (32) | 1304 // Branch Relative and Save (32) |
| 1452 void Assembler::bras(Register r, const Operand& opnd) { | 1305 void Assembler::bras(Register r, const Operand& opnd) { |
| 1453 ri_form(BRAS, r, opnd); | 1306 ri_form(BRAS, r, opnd); |
| 1454 } | 1307 } |
| 1455 | 1308 |
| 1456 // Branch relative on Condition (32) | 1309 // Branch relative on Condition (32) |
| 1457 void Assembler::brc(Condition c, const Operand& opnd) { ri_form(BRC, c, opnd); } | 1310 void Assembler::brc(Condition c, const Operand& opnd) { ri_form(BRC, c, opnd); } |
| 1458 | 1311 |
| 1459 // Branch On Count (32) | 1312 // Branch On Count (32) |
| 1460 void Assembler::brct(Register r1, const Operand& imm) { | 1313 void Assembler::brct(Register r1, const Operand& imm) { |
| 1461 // BRCT encodes # of halfwords, so divide by 2. | 1314 // BRCT encodes # of halfwords, so divide by 2. |
| 1462 int16_t numHalfwords = static_cast<int16_t>(imm.immediate()) / 2; | 1315 int16_t numHalfwords = static_cast<int16_t>(imm.immediate()) / 2; |
| 1463 Operand halfwordOp = Operand(numHalfwords); | 1316 Operand halfwordOp = Operand(numHalfwords); |
| 1464 halfwordOp.setBits(16); | 1317 halfwordOp.setBits(16); |
| 1465 ri_form(BRCT, r1, halfwordOp); | 1318 ri_form(BRCT, r1, halfwordOp); |
| 1466 } | 1319 } |
| 1467 | 1320 |
| 1468 // Branch On Count (32) | 1321 // Branch On Count (32) |
| 1469 void Assembler::brctg(Register r1, const Operand& imm) { | 1322 void Assembler::brctg(Register r1, const Operand& imm) { |
| 1470 // BRCTG encodes # of halfwords, so divide by 2. | 1323 // BRCTG encodes # of halfwords, so divide by 2. |
| 1471 int16_t numHalfwords = static_cast<int16_t>(imm.immediate()) / 2; | 1324 int16_t numHalfwords = static_cast<int16_t>(imm.immediate()) / 2; |
| 1472 Operand halfwordOp = Operand(numHalfwords); | 1325 Operand halfwordOp = Operand(numHalfwords); |
| 1473 halfwordOp.setBits(16); | 1326 halfwordOp.setBits(16); |
| 1474 ri_form(BRCTG, r1, halfwordOp); | 1327 ri_form(BRCTG, r1, halfwordOp); |
| 1475 } | 1328 } |
| 1476 | 1329 |
| 1477 // -------------------- | 1330 // -------------------- |
| 1478 // Compare Instructions | 1331 // Compare Instructions |
| 1479 // -------------------- | 1332 // -------------------- |
| 1480 // Compare Register-Storage (32) | |
| 1481 void Assembler::cy(Register r, const MemOperand& opnd) { | |
| 1482 rxy_form(CY, r, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1483 } | |
| 1484 | |
| 1485 // Compare Register-Storage (64) | |
| 1486 void Assembler::cg(Register r, const MemOperand& opnd) { | |
| 1487 rxy_form(CG, r, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1488 } | |
| 1489 | |
| 1490 // Compare Halfword Register-Storage (32) | |
| 1491 void Assembler::chy(Register r, const MemOperand& opnd) { | |
| 1492 rxy_form(CHY, r, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1493 } | |
| 1494 | |
| 1495 // Compare Halfword Immediate (32) | 1333 // Compare Halfword Immediate (32) |
| 1496 void Assembler::chi(Register r, const Operand& opnd) { ri_form(CHI, r, opnd); } | 1334 void Assembler::chi(Register r, const Operand& opnd) { ri_form(CHI, r, opnd); } |
| 1497 | 1335 |
| 1498 // Compare Halfword Immediate (64) | 1336 // Compare Halfword Immediate (64) |
| 1499 void Assembler::cghi(Register r, const Operand& opnd) { | 1337 void Assembler::cghi(Register r, const Operand& opnd) { |
| 1500 ri_form(CGHI, r, opnd); | 1338 ri_form(CGHI, r, opnd); |
| 1501 } | 1339 } |
| 1502 | 1340 |
| 1503 // ---------------------------- | 1341 // ---------------------------- |
| 1504 // Compare Logical Instructions | 1342 // Compare Logical Instructions |
| 1505 // ---------------------------- | 1343 // ---------------------------- |
| 1506 // Compare Logical Register-Storage (32) | |
| 1507 void Assembler::cly(Register r, const MemOperand& opnd) { | |
| 1508 rxy_form(CLY, r, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1509 } | |
| 1510 | |
| 1511 // Compare Logical Register-Storage (64) | |
| 1512 void Assembler::clg(Register r, const MemOperand& opnd) { | |
| 1513 rxy_form(CLG, r, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1514 } | |
| 1515 | |
| 1516 // Compare Immediate (Mem - Imm) (8) | 1344 // Compare Immediate (Mem - Imm) (8) |
| 1517 void Assembler::cli(const MemOperand& opnd, const Operand& imm) { | 1345 void Assembler::cli(const MemOperand& opnd, const Operand& imm) { |
| 1518 si_form(CLI, imm, opnd.rb(), opnd.offset()); | 1346 si_form(CLI, imm, opnd.rb(), opnd.offset()); |
| 1519 } | 1347 } |
| 1520 | 1348 |
| 1521 // Compare Immediate (Mem - Imm) (8) | 1349 // Compare Immediate (Mem - Imm) (8) |
| 1522 void Assembler::cliy(const MemOperand& opnd, const Operand& imm) { | 1350 void Assembler::cliy(const MemOperand& opnd, const Operand& imm) { |
| 1523 siy_form(CLIY, imm, opnd.rb(), opnd.offset()); | 1351 siy_form(CLIY, imm, opnd.rb(), opnd.offset()); |
| 1524 } | 1352 } |
| 1525 | 1353 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1576 // Move charactor - mem to mem operation | 1404 // Move charactor - mem to mem operation |
| 1577 void Assembler::mvc(const MemOperand& opnd1, const MemOperand& opnd2, | 1405 void Assembler::mvc(const MemOperand& opnd1, const MemOperand& opnd2, |
| 1578 uint32_t length) { | 1406 uint32_t length) { |
| 1579 ss_form(MVC, length - 1, opnd1.getBaseRegister(), opnd1.getDisplacement(), | 1407 ss_form(MVC, length - 1, opnd1.getBaseRegister(), opnd1.getDisplacement(), |
| 1580 opnd2.getBaseRegister(), opnd2.getDisplacement()); | 1408 opnd2.getBaseRegister(), opnd2.getDisplacement()); |
| 1581 } | 1409 } |
| 1582 | 1410 |
| 1583 // ----------------------- | 1411 // ----------------------- |
| 1584 // 32-bit Add Instructions | 1412 // 32-bit Add Instructions |
| 1585 // ----------------------- | 1413 // ----------------------- |
| 1586 // Add Register-Storage (32) | |
| 1587 void Assembler::ay(Register r1, const MemOperand& opnd) { | |
| 1588 rxy_form(AY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1589 } | |
| 1590 | |
| 1591 // Add Halfword Register-Storage (32) | |
| 1592 void Assembler::ahy(Register r1, const MemOperand& opnd) { | |
| 1593 rxy_form(AHY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1594 } | |
| 1595 | |
| 1596 // Add Halfword Immediate (32) | 1414 // Add Halfword Immediate (32) |
| 1597 void Assembler::ahi(Register r1, const Operand& i2) { ri_form(AHI, r1, i2); } | 1415 void Assembler::ahi(Register r1, const Operand& i2) { ri_form(AHI, r1, i2); } |
| 1598 | 1416 |
| 1599 // Add Halfword Immediate (32) | 1417 // Add Halfword Immediate (32) |
| 1600 void Assembler::ahik(Register r1, Register r3, const Operand& i2) { | 1418 void Assembler::ahik(Register r1, Register r3, const Operand& i2) { |
| 1601 rie_form(AHIK, r1, r3, i2); | 1419 rie_form(AHIK, r1, r3, i2); |
| 1602 } | 1420 } |
| 1603 | 1421 |
| 1604 // Add Register-Register-Register (32) | 1422 // Add Register-Register-Register (32) |
| 1605 void Assembler::ark(Register r1, Register r2, Register r3) { | 1423 void Assembler::ark(Register r1, Register r2, Register r3) { |
| 1606 rrf1_form(ARK, r1, r2, r3); | 1424 rrf1_form(ARK, r1, r2, r3); |
| 1607 } | 1425 } |
| 1608 | 1426 |
| 1609 // Add Storage-Imm (32) | 1427 // Add Storage-Imm (32) |
| 1610 void Assembler::asi(const MemOperand& opnd, const Operand& imm) { | 1428 void Assembler::asi(const MemOperand& opnd, const Operand& imm) { |
| 1611 DCHECK(is_int8(imm.imm_)); | 1429 DCHECK(is_int8(imm.imm_)); |
| 1612 DCHECK(is_int20(opnd.offset())); | 1430 DCHECK(is_int20(opnd.offset())); |
| 1613 siy_form(ASI, Operand(0xff & imm.imm_), opnd.rb(), 0xfffff & opnd.offset()); | 1431 siy_form(ASI, Operand(0xff & imm.imm_), opnd.rb(), 0xfffff & opnd.offset()); |
| 1614 } | 1432 } |
| 1615 | 1433 |
| 1616 // ----------------------- | 1434 // ----------------------- |
| 1617 // 64-bit Add Instructions | 1435 // 64-bit Add Instructions |
| 1618 // ----------------------- | 1436 // ----------------------- |
| 1619 // Add Register-Storage (64) | |
| 1620 void Assembler::ag(Register r1, const MemOperand& opnd) { | |
| 1621 rxy_form(AG, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1622 } | |
| 1623 | |
| 1624 // Add Register-Storage (64<-32) | |
| 1625 void Assembler::agf(Register r1, const MemOperand& opnd) { | |
| 1626 rxy_form(AGF, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1627 } | |
| 1628 | |
| 1629 // Add Halfword Immediate (64) | 1437 // Add Halfword Immediate (64) |
| 1630 void Assembler::aghi(Register r1, const Operand& i2) { ri_form(AGHI, r1, i2); } | 1438 void Assembler::aghi(Register r1, const Operand& i2) { ri_form(AGHI, r1, i2); } |
| 1631 | 1439 |
| 1632 // Add Halfword Immediate (64) | 1440 // Add Halfword Immediate (64) |
| 1633 void Assembler::aghik(Register r1, Register r3, const Operand& i2) { | 1441 void Assembler::aghik(Register r1, Register r3, const Operand& i2) { |
| 1634 rie_form(AGHIK, r1, r3, i2); | 1442 rie_form(AGHIK, r1, r3, i2); |
| 1635 } | 1443 } |
| 1636 | 1444 |
| 1637 // Add Register-Register-Register (64) | 1445 // Add Register-Register-Register (64) |
| 1638 void Assembler::agrk(Register r1, Register r2, Register r3) { | 1446 void Assembler::agrk(Register r1, Register r2, Register r3) { |
| 1639 rrf1_form(AGRK, r1, r2, r3); | 1447 rrf1_form(AGRK, r1, r2, r3); |
| 1640 } | 1448 } |
| 1641 | 1449 |
| 1642 // Add Storage-Imm (64) | 1450 // Add Storage-Imm (64) |
| 1643 void Assembler::agsi(const MemOperand& opnd, const Operand& imm) { | 1451 void Assembler::agsi(const MemOperand& opnd, const Operand& imm) { |
| 1644 DCHECK(is_int8(imm.imm_)); | 1452 DCHECK(is_int8(imm.imm_)); |
| 1645 DCHECK(is_int20(opnd.offset())); | 1453 DCHECK(is_int20(opnd.offset())); |
| 1646 siy_form(AGSI, Operand(0xff & imm.imm_), opnd.rb(), 0xfffff & opnd.offset()); | 1454 siy_form(AGSI, Operand(0xff & imm.imm_), opnd.rb(), 0xfffff & opnd.offset()); |
| 1647 } | 1455 } |
| 1648 | 1456 |
| 1649 // ------------------------------- | 1457 // ------------------------------- |
| 1650 // 32-bit Add Logical Instructions | 1458 // 32-bit Add Logical Instructions |
| 1651 // ------------------------------- | 1459 // ------------------------------- |
| 1652 // Add Logical Register-Storage (32) | |
| 1653 void Assembler::aly(Register r1, const MemOperand& opnd) { | |
| 1654 rxy_form(ALY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1655 } | |
| 1656 | |
| 1657 // Add Logical Register-Register-Register (32) | 1460 // Add Logical Register-Register-Register (32) |
| 1658 void Assembler::alrk(Register r1, Register r2, Register r3) { | 1461 void Assembler::alrk(Register r1, Register r2, Register r3) { |
| 1659 rrf1_form(ALRK, r1, r2, r3); | 1462 rrf1_form(ALRK, r1, r2, r3); |
| 1660 } | 1463 } |
| 1661 | 1464 |
| 1662 // ------------------------------- | 1465 // ------------------------------- |
| 1663 // 64-bit Add Logical Instructions | 1466 // 64-bit Add Logical Instructions |
| 1664 // ------------------------------- | 1467 // ------------------------------- |
| 1665 // Add Logical Register-Storage (64) | |
| 1666 void Assembler::alg(Register r1, const MemOperand& opnd) { | |
| 1667 rxy_form(ALG, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1668 } | |
| 1669 | |
| 1670 // Add Logical Register-Register-Register (64) | 1468 // Add Logical Register-Register-Register (64) |
| 1671 void Assembler::algrk(Register r1, Register r2, Register r3) { | 1469 void Assembler::algrk(Register r1, Register r2, Register r3) { |
| 1672 rrf1_form(ALGRK, r1, r2, r3); | 1470 rrf1_form(ALGRK, r1, r2, r3); |
| 1673 } | 1471 } |
| 1674 | 1472 |
| 1675 // ---------------------------- | 1473 // ---------------------------- |
| 1676 // 32-bit Subtract Instructions | 1474 // 32-bit Subtract Instructions |
| 1677 // ---------------------------- | 1475 // ---------------------------- |
| 1678 // Subtract Register-Storage (32) | |
| 1679 void Assembler::sy(Register r1, const MemOperand& opnd) { | |
| 1680 rxy_form(SY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1681 } | |
| 1682 | |
| 1683 // Subtract Halfword Register-Storage (32) | |
| 1684 void Assembler::shy(Register r1, const MemOperand& opnd) { | |
| 1685 rxy_form(SHY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1686 } | |
| 1687 | |
| 1688 // Subtract Register-Register-Register (32) | 1476 // Subtract Register-Register-Register (32) |
| 1689 void Assembler::srk(Register r1, Register r2, Register r3) { | 1477 void Assembler::srk(Register r1, Register r2, Register r3) { |
| 1690 rrf1_form(SRK, r1, r2, r3); | 1478 rrf1_form(SRK, r1, r2, r3); |
| 1691 } | 1479 } |
| 1692 | 1480 |
| 1693 // ---------------------------- | 1481 // ---------------------------- |
| 1694 // 64-bit Subtract Instructions | 1482 // 64-bit Subtract Instructions |
| 1695 // ---------------------------- | 1483 // ---------------------------- |
| 1696 // Subtract Register-Storage (64) | |
| 1697 void Assembler::sg(Register r1, const MemOperand& opnd) { | |
| 1698 rxy_form(SG, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1699 } | |
| 1700 | |
| 1701 // Subtract Register-Storage (64<-32) | |
| 1702 void Assembler::sgf(Register r1, const MemOperand& opnd) { | |
| 1703 rxy_form(SGF, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1704 } | |
| 1705 | |
| 1706 // Subtract Register-Register-Register (64) | 1484 // Subtract Register-Register-Register (64) |
| 1707 void Assembler::sgrk(Register r1, Register r2, Register r3) { | 1485 void Assembler::sgrk(Register r1, Register r2, Register r3) { |
| 1708 rrf1_form(SGRK, r1, r2, r3); | 1486 rrf1_form(SGRK, r1, r2, r3); |
| 1709 } | 1487 } |
| 1710 | 1488 |
| 1711 // ------------------------------------ | 1489 // ------------------------------------ |
| 1712 // 32-bit Subtract Logical Instructions | 1490 // 32-bit Subtract Logical Instructions |
| 1713 // ------------------------------------ | 1491 // ------------------------------------ |
| 1714 // Subtract Logical Register-Storage (32) | |
| 1715 void Assembler::sly(Register r1, const MemOperand& opnd) { | |
| 1716 rxy_form(SLY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1717 } | |
| 1718 | |
| 1719 // Subtract Logical Register-Register-Register (32) | 1492 // Subtract Logical Register-Register-Register (32) |
| 1720 void Assembler::slrk(Register r1, Register r2, Register r3) { | 1493 void Assembler::slrk(Register r1, Register r2, Register r3) { |
| 1721 rrf1_form(SLRK, r1, r2, r3); | 1494 rrf1_form(SLRK, r1, r2, r3); |
| 1722 } | 1495 } |
| 1723 | 1496 |
| 1724 // ------------------------------------ | 1497 // ------------------------------------ |
| 1725 // 64-bit Subtract Logical Instructions | 1498 // 64-bit Subtract Logical Instructions |
| 1726 // ------------------------------------ | 1499 // ------------------------------------ |
| 1727 // Subtract Logical Register-Storage (64) | |
| 1728 void Assembler::slg(Register r1, const MemOperand& opnd) { | |
| 1729 rxy_form(SLG, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1730 } | |
| 1731 | |
| 1732 // Subtract Logical Register-Register-Register (64) | 1500 // Subtract Logical Register-Register-Register (64) |
| 1733 void Assembler::slgrk(Register r1, Register r2, Register r3) { | 1501 void Assembler::slgrk(Register r1, Register r2, Register r3) { |
| 1734 rrf1_form(SLGRK, r1, r2, r3); | 1502 rrf1_form(SLGRK, r1, r2, r3); |
| 1735 } | 1503 } |
| 1736 | 1504 |
| 1737 // ---------------------------- | 1505 // ---------------------------- |
| 1738 // 32-bit Multiply Instructions | 1506 // 32-bit Multiply Instructions |
| 1739 // ---------------------------- | 1507 // ---------------------------- |
| 1740 void Assembler::mfy(Register r1, const MemOperand& opnd) { | |
| 1741 DCHECK(r1.code() % 2 == 0); | |
| 1742 rxy_form(MFY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1743 } | |
| 1744 | |
| 1745 // Multiply Logical Register-Storage (64<32) | |
| 1746 void Assembler::ml(Register r1, const MemOperand& opnd) { | |
| 1747 rxy_form(ML, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1748 } | |
| 1749 | |
| 1750 // Multiply Single Register-Storage (32) | |
| 1751 void Assembler::msy(Register r1, const MemOperand& opnd) { | |
| 1752 rxy_form(MSY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1753 } | |
| 1754 | |
| 1755 // Multiply Halfword Register-Storage (32) | |
| 1756 void Assembler::mhy(Register r1, const MemOperand& opnd) { | |
| 1757 rxy_form(MHY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1758 } | |
| 1759 | |
| 1760 // Multiply Halfword Immediate (32) | 1508 // Multiply Halfword Immediate (32) |
| 1761 void Assembler::mhi(Register r1, const Operand& opnd) { | 1509 void Assembler::mhi(Register r1, const Operand& opnd) { |
| 1762 ri_form(MHI, r1, opnd); | 1510 ri_form(MHI, r1, opnd); |
| 1763 } | 1511 } |
| 1764 | 1512 |
| 1765 // ---------------------------- | 1513 // ---------------------------- |
| 1766 // 64-bit Multiply Instructions | 1514 // 64-bit Multiply Instructions |
| 1767 // ---------------------------- | 1515 // ---------------------------- |
| 1768 // Multiply Logical Register-Storage (128<64) | |
| 1769 void Assembler::mlg(Register r1, const MemOperand& opnd) { | |
| 1770 rxy_form(MLG, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1771 } | |
| 1772 | |
| 1773 // Multiply Halfword Immediate (64) | 1516 // Multiply Halfword Immediate (64) |
| 1774 void Assembler::mghi(Register r1, const Operand& opnd) { | 1517 void Assembler::mghi(Register r1, const Operand& opnd) { |
| 1775 ri_form(MGHI, r1, opnd); | 1518 ri_form(MGHI, r1, opnd); |
| 1776 } | 1519 } |
| 1777 | 1520 |
| 1778 // Multiply Single Register-Storage (64) | |
| 1779 void Assembler::msg(Register r1, const MemOperand& opnd) { | |
| 1780 rxy_form(MSG, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1781 } | |
| 1782 | |
| 1783 void Assembler::msgf(Register r1, const MemOperand& opnd) { | |
| 1784 rxy_form(MSGF, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1785 } | |
| 1786 | |
| 1787 // -------------------------- | |
| 1788 // 32-bit Divide Instructions | |
| 1789 // -------------------------- | |
| 1790 // Divide Logical Register-Storage (32<-64) | |
| 1791 void Assembler::dl(Register r1, const MemOperand& opnd) { | |
| 1792 rxy_form(DL, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1793 } | |
| 1794 | |
| 1795 void Assembler::dsg(Register r1, const MemOperand& opnd) { | |
| 1796 rxy_form(DSG, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1797 } | |
| 1798 | |
| 1799 void Assembler::dsgf(Register r1, const MemOperand& opnd) { | |
| 1800 rxy_form(DSGF, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1801 } | |
| 1802 | |
| 1803 // -------------------- | 1521 // -------------------- |
| 1804 // Bitwise Instructions | 1522 // Bitwise Instructions |
| 1805 // -------------------- | 1523 // -------------------- |
| 1806 // AND Register-Storage (32) | |
| 1807 void Assembler::ny(Register r1, const MemOperand& opnd) { | |
| 1808 rxy_form(NY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1809 } | |
| 1810 | |
| 1811 // AND Register-Register-Register (32) | 1524 // AND Register-Register-Register (32) |
| 1812 void Assembler::nrk(Register r1, Register r2, Register r3) { | 1525 void Assembler::nrk(Register r1, Register r2, Register r3) { |
| 1813 rrf1_form(NRK, r1, r2, r3); | 1526 rrf1_form(NRK, r1, r2, r3); |
| 1814 } | 1527 } |
| 1815 | 1528 |
| 1816 // AND Register-Storage (64) | |
| 1817 void Assembler::ng(Register r1, const MemOperand& opnd) { | |
| 1818 rxy_form(NG, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1819 } | |
| 1820 | |
| 1821 // AND Register-Register-Register (64) | 1529 // AND Register-Register-Register (64) |
| 1822 void Assembler::ngrk(Register r1, Register r2, Register r3) { | 1530 void Assembler::ngrk(Register r1, Register r2, Register r3) { |
| 1823 rrf1_form(NGRK, r1, r2, r3); | 1531 rrf1_form(NGRK, r1, r2, r3); |
| 1824 } | 1532 } |
| 1825 | 1533 |
| 1826 // OR Register-Storage (32) | |
| 1827 void Assembler::oy(Register r1, const MemOperand& opnd) { | |
| 1828 rxy_form(OY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1829 } | |
| 1830 | |
| 1831 // OR Register-Register-Register (32) | 1534 // OR Register-Register-Register (32) |
| 1832 void Assembler::ork(Register r1, Register r2, Register r3) { | 1535 void Assembler::ork(Register r1, Register r2, Register r3) { |
| 1833 rrf1_form(ORK, r1, r2, r3); | 1536 rrf1_form(ORK, r1, r2, r3); |
| 1834 } | 1537 } |
| 1835 | 1538 |
| 1836 // OR Register-Storage (64) | |
| 1837 void Assembler::og(Register r1, const MemOperand& opnd) { | |
| 1838 rxy_form(OG, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1839 } | |
| 1840 | |
| 1841 // OR Register-Register-Register (64) | 1539 // OR Register-Register-Register (64) |
| 1842 void Assembler::ogrk(Register r1, Register r2, Register r3) { | 1540 void Assembler::ogrk(Register r1, Register r2, Register r3) { |
| 1843 rrf1_form(OGRK, r1, r2, r3); | 1541 rrf1_form(OGRK, r1, r2, r3); |
| 1844 } | 1542 } |
| 1845 | 1543 |
| 1846 // XOR Register-Storage (32) | |
| 1847 void Assembler::xy(Register r1, const MemOperand& opnd) { | |
| 1848 rxy_form(XY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1849 } | |
| 1850 | |
| 1851 // XOR Register-Register-Register (32) | 1544 // XOR Register-Register-Register (32) |
| 1852 void Assembler::xrk(Register r1, Register r2, Register r3) { | 1545 void Assembler::xrk(Register r1, Register r2, Register r3) { |
| 1853 rrf1_form(XRK, r1, r2, r3); | 1546 rrf1_form(XRK, r1, r2, r3); |
| 1854 } | 1547 } |
| 1855 | 1548 |
| 1856 // XOR Register-Storage (64) | |
| 1857 void Assembler::xg(Register r1, const MemOperand& opnd) { | |
| 1858 rxy_form(XG, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 1859 } | |
| 1860 | |
| 1861 // XOR Register-Register-Register (64) | 1549 // XOR Register-Register-Register (64) |
| 1862 void Assembler::xgrk(Register r1, Register r2, Register r3) { | 1550 void Assembler::xgrk(Register r1, Register r2, Register r3) { |
| 1863 rrf1_form(XGRK, r1, r2, r3); | 1551 rrf1_form(XGRK, r1, r2, r3); |
| 1864 } | 1552 } |
| 1865 | 1553 |
| 1866 // XOR Storage-Storage | 1554 // XOR Storage-Storage |
| 1867 void Assembler::xc(const MemOperand& opnd1, const MemOperand& opnd2, | 1555 void Assembler::xc(const MemOperand& opnd1, const MemOperand& opnd2, |
| 1868 Length length) { | 1556 Length length) { |
| 1869 ss_form(XC, length - 1, opnd1.getBaseRegister(), opnd1.getDisplacement(), | 1557 ss_form(XC, length - 1, opnd1.getBaseRegister(), opnd1.getDisplacement(), |
| 1870 opnd2.getBaseRegister(), opnd2.getDisplacement()); | 1558 opnd2.getBaseRegister(), opnd2.getDisplacement()); |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2080 } | 1768 } |
| 2081 | 1769 |
| 2082 void Assembler::jump(Handle<Code> target, RelocInfo::Mode rmode, | 1770 void Assembler::jump(Handle<Code> target, RelocInfo::Mode rmode, |
| 2083 Condition cond) { | 1771 Condition cond) { |
| 2084 EnsureSpace ensure_space(this); | 1772 EnsureSpace ensure_space(this); |
| 2085 | 1773 |
| 2086 int32_t target_index = emit_code_target(target, rmode); | 1774 int32_t target_index = emit_code_target(target, rmode); |
| 2087 brcl(cond, Operand(target_index)); | 1775 brcl(cond, Operand(target_index)); |
| 2088 } | 1776 } |
| 2089 | 1777 |
| 2090 // Store (32) | |
| 2091 void Assembler::sty(Register src, const MemOperand& dst) { | |
| 2092 rxy_form(STY, src, dst.rx(), dst.rb(), dst.offset()); | |
| 2093 } | |
| 2094 | |
| 2095 // Store Halfword | |
| 2096 void Assembler::sthy(Register src, const MemOperand& dst) { | |
| 2097 rxy_form(STHY, src, dst.rx(), dst.rb(), dst.offset()); | |
| 2098 } | |
| 2099 | |
| 2100 // Store Character | |
| 2101 void Assembler::stcy(Register src, const MemOperand& dst) { | |
| 2102 rxy_form(STCY, src, dst.rx(), dst.rb(), dst.offset()); | |
| 2103 } | |
| 2104 | |
| 2105 // 32-bit Load Multiple - short displacement (12-bits unsigned) | 1778 // 32-bit Load Multiple - short displacement (12-bits unsigned) |
| 2106 void Assembler::lm(Register r1, Register r2, const MemOperand& src) { | 1779 void Assembler::lm(Register r1, Register r2, const MemOperand& src) { |
| 2107 rs_form(LM, r1, r2, src.rb(), src.offset()); | 1780 rs_form(LM, r1, r2, src.rb(), src.offset()); |
| 2108 } | 1781 } |
| 2109 | 1782 |
| 2110 // 32-bit Load Multiple - long displacement (20-bits signed) | 1783 // 32-bit Load Multiple - long displacement (20-bits signed) |
| 2111 void Assembler::lmy(Register r1, Register r2, const MemOperand& src) { | 1784 void Assembler::lmy(Register r1, Register r2, const MemOperand& src) { |
| 2112 rsy_form(LMY, r1, r2, src.rb(), src.offset()); | 1785 rsy_form(LMY, r1, r2, src.rb(), src.offset()); |
| 2113 } | 1786 } |
| 2114 | 1787 |
| 2115 // 64-bit Load Multiple - long displacement (20-bits signed) | 1788 // 64-bit Load Multiple - long displacement (20-bits signed) |
| 2116 void Assembler::lmg(Register r1, Register r2, const MemOperand& src) { | 1789 void Assembler::lmg(Register r1, Register r2, const MemOperand& src) { |
| 2117 rsy_form(LMG, r1, r2, src.rb(), src.offset()); | 1790 rsy_form(LMG, r1, r2, src.rb(), src.offset()); |
| 2118 } | 1791 } |
| 2119 | 1792 |
| 2120 // Move integer (32) | 1793 // Move integer (32) |
| 2121 void Assembler::mvhi(const MemOperand& opnd1, const Operand& i2) { | 1794 void Assembler::mvhi(const MemOperand& opnd1, const Operand& i2) { |
| 2122 sil_form(MVHI, opnd1.getBaseRegister(), opnd1.getDisplacement(), i2); | 1795 sil_form(MVHI, opnd1.getBaseRegister(), opnd1.getDisplacement(), i2); |
| 2123 } | 1796 } |
| 2124 | 1797 |
| 2125 // Move integer (64) | 1798 // Move integer (64) |
| 2126 void Assembler::mvghi(const MemOperand& opnd1, const Operand& i2) { | 1799 void Assembler::mvghi(const MemOperand& opnd1, const Operand& i2) { |
| 2127 sil_form(MVGHI, opnd1.getBaseRegister(), opnd1.getDisplacement(), i2); | 1800 sil_form(MVGHI, opnd1.getBaseRegister(), opnd1.getDisplacement(), i2); |
| 2128 } | 1801 } |
| 2129 | 1802 |
| 2130 // Store Register (64) | |
| 2131 void Assembler::stg(Register src, const MemOperand& dst) { | |
| 2132 DCHECK(!(dst.rb().code() == 15 && dst.offset() < 0)); | |
| 2133 rxy_form(STG, src, dst.rx(), dst.rb(), dst.offset()); | |
| 2134 } | |
| 2135 | |
| 2136 // Insert Character | |
| 2137 void Assembler::icy(Register r1, const MemOperand& opnd) { | |
| 2138 rxy_form(ICY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 2139 } | |
| 2140 | |
| 2141 // Insert Immediate (high high) | 1803 // Insert Immediate (high high) |
| 2142 void Assembler::iihh(Register r1, const Operand& opnd) { | 1804 void Assembler::iihh(Register r1, const Operand& opnd) { |
| 2143 ri_form(IIHH, r1, opnd); | 1805 ri_form(IIHH, r1, opnd); |
| 2144 } | 1806 } |
| 2145 | 1807 |
| 2146 // Insert Immediate (high low) | 1808 // Insert Immediate (high low) |
| 2147 void Assembler::iihl(Register r1, const Operand& opnd) { | 1809 void Assembler::iihl(Register r1, const Operand& opnd) { |
| 2148 ri_form(IIHL, r1, opnd); | 1810 ri_form(IIHL, r1, opnd); |
| 2149 } | 1811 } |
| 2150 | 1812 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2185 rxe_form(SDB, Register::from_code(r1.code()), opnd.rx(), opnd.rb(), | 1847 rxe_form(SDB, Register::from_code(r1.code()), opnd.rx(), opnd.rb(), |
| 2186 opnd.offset()); | 1848 opnd.offset()); |
| 2187 } | 1849 } |
| 2188 | 1850 |
| 2189 // Square Root (LB) | 1851 // Square Root (LB) |
| 2190 void Assembler::sqdb(DoubleRegister r1, const MemOperand& opnd) { | 1852 void Assembler::sqdb(DoubleRegister r1, const MemOperand& opnd) { |
| 2191 rxe_form(SQDB, Register::from_code(r1.code()), opnd.rx(), opnd.rb(), | 1853 rxe_form(SQDB, Register::from_code(r1.code()), opnd.rx(), opnd.rb(), |
| 2192 opnd.offset()); | 1854 opnd.offset()); |
| 2193 } | 1855 } |
| 2194 | 1856 |
| 2195 // Store Double (64) | |
| 2196 void Assembler::stdy(DoubleRegister r1, const MemOperand& opnd) { | |
| 2197 DCHECK(!(opnd.rb().code() == 15 && opnd.offset() < 0)); | |
| 2198 rxy_form(STDY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 2199 } | |
| 2200 | |
| 2201 // Store Float (32) | |
| 2202 void Assembler::stey(DoubleRegister r1, const MemOperand& opnd) { | |
| 2203 DCHECK(!(opnd.rb().code() == 15 && opnd.offset() < 0)); | |
| 2204 rxy_form(STEY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 2205 } | |
| 2206 | |
| 2207 // Load Double (64) | |
| 2208 void Assembler::ldy(DoubleRegister r1, const MemOperand& opnd) { | |
| 2209 DCHECK(is_int20(opnd.offset())); | |
| 2210 rxy_form(LDY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 2211 } | |
| 2212 | |
| 2213 // Load Float (32) | |
| 2214 void Assembler::ley(DoubleRegister r1, const MemOperand& opnd) { | |
| 2215 DCHECK(is_int20(opnd.offset())); | |
| 2216 rxy_form(LEY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | |
| 2217 } | |
| 2218 | |
| 2219 // Convert to Fixed point (64<-S) | 1857 // Convert to Fixed point (64<-S) |
| 2220 void Assembler::cgebr(Condition m, Register r1, DoubleRegister r2) { | 1858 void Assembler::cgebr(Condition m, Register r1, DoubleRegister r2) { |
| 2221 rrfe_form(CGEBR, m, Condition(0), r1, Register::from_code(r2.code())); | 1859 rrfe_form(CGEBR, m, Condition(0), r1, Register::from_code(r2.code())); |
| 2222 } | 1860 } |
| 2223 | 1861 |
| 2224 // Convert to Fixed point (64<-L) | 1862 // Convert to Fixed point (64<-L) |
| 2225 void Assembler::cgdbr(Condition m, Register r1, DoubleRegister r2) { | 1863 void Assembler::cgdbr(Condition m, Register r1, DoubleRegister r2) { |
| 2226 rrfe_form(CGDBR, m, Condition(0), r1, Register::from_code(r2.code())); | 1864 rrfe_form(CGDBR, m, Condition(0), r1, Register::from_code(r2.code())); |
| 2227 } | 1865 } |
| 2228 | 1866 |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2460 SKIP_ICACHE_FLUSH); | 2098 SKIP_ICACHE_FLUSH); |
| 2461 } | 2099 } |
| 2462 | 2100 |
| 2463 reloc_info_writer.Write(&rinfo); | 2101 reloc_info_writer.Write(&rinfo); |
| 2464 } | 2102 } |
| 2465 } | 2103 } |
| 2466 | 2104 |
| 2467 } // namespace internal | 2105 } // namespace internal |
| 2468 } // namespace v8 | 2106 } // namespace v8 |
| 2469 #endif // V8_TARGET_ARCH_S390 | 2107 #endif // V8_TARGET_ARCH_S390 |
| OLD | NEW |