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 |