Lines Matching refs:lir

1085 uint8_t* ArmMir2Lir::EncodeLIRs(uint8_t* write_pos, LIR* lir) {  in EncodeLIRs()  argument
1087 for (; lir != nullptr; lir = NEXT_LIR(lir)) { in EncodeLIRs()
1088 lir->offset = (write_pos - write_buffer); in EncodeLIRs()
1089 if (!lir->flags.is_nop) { in EncodeLIRs()
1090 int opcode = lir->opcode; in EncodeLIRs()
1094 if (lir->offset & 0x2) { in EncodeLIRs()
1100 } else if (LIKELY(!lir->flags.is_nop)) { in EncodeLIRs()
1101 const ArmEncodingMap *encoder = &EncodingMap[lir->opcode]; in EncodeLIRs()
1106 operand = lir->operands[i]; in EncodeLIRs()
1241 LIR* lir; in AssembleLIR() local
1260 lir = first_fixup_; in AssembleLIR()
1262 while (lir != nullptr) { in AssembleLIR()
1270 lir->offset += offset_adjustment; in AssembleLIR()
1272 lir->flags.generation = generation; in AssembleLIR()
1273 switch (static_cast<FixupKind>(lir->flags.fixup)) { in AssembleLIR()
1278 if (lir->operands[1] != rs_r15pc.GetReg()) { in AssembleLIR()
1289 LIR *lir_target = lir->target; in AssembleLIR()
1290 CodeOffset pc = (lir->offset + 4) & ~3; in AssembleLIR()
1292 ((lir_target->flags.generation == lir->flags.generation) ? 0 : offset_adjustment); in AssembleLIR()
1303 if (kIsDebugBuild && (((lir->opcode == kThumbAddPcRel) && (delta > 1020)) || in AssembleLIR()
1304 ((lir->opcode == kThumbLdrPcRel) && (delta > 1020)))) { in AssembleLIR()
1309 if (((lir->opcode == kThumb2LdrPcRel12) && (delta > 4091)) || in AssembleLIR()
1310 ((lir->opcode == kThumb2LdrdPcRel8) && (delta > 1020)) || in AssembleLIR()
1311 ((lir->opcode == kThumb2Vldrs) && (delta > 1020)) || in AssembleLIR()
1312 ((lir->opcode == kThumb2Vldrd) && (delta > 1020))) { in AssembleLIR()
1318 int base_reg = ((lir->opcode == kThumb2LdrdPcRel8) || in AssembleLIR()
1319 (lir->opcode == kThumb2LdrPcRel12)) ? lir->operands[0] : in AssembleLIR()
1323 LIR* new_adr = RawLIR(lir->dalvik_offset, kThumb2Adr, in AssembleLIR()
1324 base_reg, 0, 0, 0, 0, lir->target); in AssembleLIR()
1325 new_adr->offset = lir->offset; in AssembleLIR()
1328 InsertLIRBefore(lir, new_adr); in AssembleLIR()
1329 lir->offset += new_adr->flags.size; in AssembleLIR()
1333 ReplaceFixup(prev_lir, lir, new_adr); in AssembleLIR()
1336 offset_adjustment -= lir->flags.size; in AssembleLIR()
1337 if (lir->opcode == kThumb2LdrPcRel12) { in AssembleLIR()
1338 lir->opcode = kThumb2LdrRRI12; in AssembleLIR()
1339 } else if (lir->opcode == kThumb2LdrdPcRel8) { in AssembleLIR()
1340 lir->opcode = kThumb2LdrdI8; in AssembleLIR()
1342 lir->flags.size = EncodingMap[lir->opcode].size; in AssembleLIR()
1343 offset_adjustment += lir->flags.size; in AssembleLIR()
1345 if (lir->opcode == kThumb2LdrdI8) { in AssembleLIR()
1346 lir->operands[3] = 0; in AssembleLIR()
1347 lir->operands[2] = base_reg; in AssembleLIR()
1349 lir->operands[2] = 0; in AssembleLIR()
1350 lir->operands[1] = base_reg; in AssembleLIR()
1353 lir = new_adr->u.a.pcrel_next; in AssembleLIR()
1357 if ((lir->opcode == kThumb2Vldrs) || in AssembleLIR()
1358 (lir->opcode == kThumb2Vldrd) || in AssembleLIR()
1359 (lir->opcode == kThumb2LdrdPcRel8)) { in AssembleLIR()
1360 lir->operands[2] = delta >> 2; in AssembleLIR()
1362 lir->operands[1] = (lir->opcode == kThumb2LdrPcRel12) ? delta : in AssembleLIR()
1369 LIR *target_lir = lir->target; in AssembleLIR()
1370 CodeOffset pc = lir->offset + 4; in AssembleLIR()
1372 ((target_lir->flags.generation == lir->flags.generation) ? 0 : offset_adjustment); in AssembleLIR()
1380 RawLIR(lir->dalvik_offset, kThumbBCond, 0, in AssembleLIR()
1381 (lir->opcode == kThumb2Cbz) ? kArmCondEq : kArmCondNe, in AssembleLIR()
1382 0, 0, 0, lir->target); in AssembleLIR()
1383 InsertLIRAfter(lir, new_inst); in AssembleLIR()
1387 offset_adjustment -= lir->flags.size; in AssembleLIR()
1388 lir->opcode = kThumbCmpRI8; in AssembleLIR()
1390 lir->operands[1] = 0; in AssembleLIR()
1391 lir->target = 0; in AssembleLIR()
1392 lir->flags.size = EncodingMap[lir->opcode].size; in AssembleLIR()
1394 offset_adjustment += lir->flags.size; in AssembleLIR()
1396 new_inst->offset = lir->offset + lir->flags.size; in AssembleLIR()
1402 ReplaceFixup(prev_lir, lir, new_inst); in AssembleLIR()
1404 lir = new_inst->u.a.pcrel_next; in AssembleLIR()
1408 lir->operands[1] = delta >> 1; in AssembleLIR()
1413 LIR *target_lir = lir->target; in AssembleLIR()
1416 CodeOffset pc = lir->offset + 4; in AssembleLIR()
1418 ((target_lir->flags.generation == lir->flags.generation) ? 0 : offset_adjustment); in AssembleLIR()
1420 if ((lir->opcode == kThumbBCond) && (delta > 254 || delta < -256)) { in AssembleLIR()
1421 offset_adjustment -= lir->flags.size; in AssembleLIR()
1422 lir->opcode = kThumb2BCond; in AssembleLIR()
1423 lir->flags.size = EncodingMap[lir->opcode].size; in AssembleLIR()
1425 offset_adjustment += lir->flags.size; in AssembleLIR()
1428 lir->operands[0] = delta >> 1; in AssembleLIR()
1432 LIR *target_lir = lir->target; in AssembleLIR()
1433 CodeOffset pc = lir->offset + 4; in AssembleLIR()
1435 ((target_lir->flags.generation == lir->flags.generation) ? 0 : offset_adjustment); in AssembleLIR()
1437 lir->operands[0] = delta >> 1; in AssembleLIR()
1438 if (!(cu_->disable_opt & (1 << kSafeOptimizations)) && lir->operands[0] == 0) { in AssembleLIR()
1440 offset_adjustment -= lir->flags.size; in AssembleLIR()
1441 lir->flags.is_nop = true; in AssembleLIR()
1443 lir->flags.fixup = kFixupNone; in AssembleLIR()
1449 LIR *target_lir = lir->target; in AssembleLIR()
1450 CodeOffset pc = lir->offset + 4; in AssembleLIR()
1452 ((target_lir->flags.generation == lir->flags.generation) ? 0 : offset_adjustment); in AssembleLIR()
1456 offset_adjustment -= lir->flags.size; in AssembleLIR()
1457 lir->opcode = kThumb2BUncond; in AssembleLIR()
1458 lir->operands[0] = 0; in AssembleLIR()
1459 lir->flags.size = EncodingMap[lir->opcode].size; in AssembleLIR()
1460 lir->flags.fixup = kFixupT2Branch; in AssembleLIR()
1461 offset_adjustment += lir->flags.size; in AssembleLIR()
1464 lir->operands[0] = delta >> 1; in AssembleLIR()
1465 if (!(cu_->disable_opt & (1 << kSafeOptimizations)) && lir->operands[0] == -1) { in AssembleLIR()
1467 offset_adjustment -= lir->flags.size; in AssembleLIR()
1468 lir->flags.is_nop = true; in AssembleLIR()
1470 lir->flags.fixup = kFixupNone; in AssembleLIR()
1477 DCHECK(NEXT_LIR(lir)->opcode == kThumbBlx2); in AssembleLIR()
1479 CodeOffset cur_pc = (lir->offset + 4) & ~3; in AssembleLIR()
1480 CodeOffset target = lir->operands[1]; in AssembleLIR()
1489 lir->operands[0] = (delta >> 12) & 0x7ff; in AssembleLIR()
1490 NEXT_LIR(lir)->operands[0] = (delta>> 1) & 0x7ff; in AssembleLIR()
1494 DCHECK(NEXT_LIR(lir)->opcode == kThumbBl2); in AssembleLIR()
1496 CodeOffset cur_pc = lir->offset + 4; in AssembleLIR()
1497 CodeOffset target = lir->operands[1]; in AssembleLIR()
1502 lir->operands[0] = (delta >> 12) & 0x7ff; in AssembleLIR()
1503 NEXT_LIR(lir)->operands[0] = (delta>> 1) & 0x7ff; in AssembleLIR()
1507 const EmbeddedData* tab_rec = UnwrapPointer<EmbeddedData>(lir->operands[2]); in AssembleLIR()
1508 LIR* target = lir->target; in AssembleLIR()
1510 : target->offset + ((target->flags.generation == lir->flags.generation) ? 0 : in AssembleLIR()
1512 int32_t disp = target_disp - ((lir->offset + 4) & ~3); in AssembleLIR()
1514 lir->operands[1] = disp; in AssembleLIR()
1519 RawLIR(lir->dalvik_offset, kThumb2MovImm16LST, lir->operands[0], 0, in AssembleLIR()
1520 WrapPointer(lir), WrapPointer(tab_rec), 0, lir->target); in AssembleLIR()
1523 new_mov16L->offset = lir->offset; in AssembleLIR()
1525 InsertLIRBefore(lir, new_mov16L); in AssembleLIR()
1526 lir->offset += new_mov16L->flags.size; in AssembleLIR()
1528 InsertFixupBefore(prev_lir, lir, new_mov16L); in AssembleLIR()
1531 RawLIR(lir->dalvik_offset, kThumb2MovImm16HST, lir->operands[0], 0, in AssembleLIR()
1532 WrapPointer(lir), WrapPointer(tab_rec), 0, lir->target); in AssembleLIR()
1535 new_mov16H->offset = lir->offset; in AssembleLIR()
1537 InsertLIRBefore(lir, new_mov16H); in AssembleLIR()
1538 lir->offset += new_mov16H->flags.size; in AssembleLIR()
1540 InsertFixupBefore(prev_lir, lir, new_mov16H); in AssembleLIR()
1543 offset_adjustment -= lir->flags.size; in AssembleLIR()
1544 if (RegStorage::RegNum(lir->operands[0]) < 8) { in AssembleLIR()
1545 lir->opcode = kThumbAddRRLH; in AssembleLIR()
1547 lir->opcode = kThumbAddRRHH; in AssembleLIR()
1549 lir->operands[1] = rs_rARM_PC.GetReg(); in AssembleLIR()
1550 lir->flags.size = EncodingMap[lir->opcode].size; in AssembleLIR()
1551 offset_adjustment += lir->flags.size; in AssembleLIR()
1553 lir->flags.fixup = kFixupNone; in AssembleLIR()
1560 const LIR* addPCInst = UnwrapPointer<LIR>(lir->operands[2]); in AssembleLIR()
1561 const EmbeddedData* tab_rec = UnwrapPointer<EmbeddedData>(lir->operands[3]); in AssembleLIR()
1563 LIR* target = lir->target; in AssembleLIR()
1565 lir->operands[1] = (target_disp - (addPCInst->offset + 4)) & 0xffff; in AssembleLIR()
1570 const LIR* addPCInst = UnwrapPointer<LIR>(lir->operands[2]); in AssembleLIR()
1571 const EmbeddedData* tab_rec = UnwrapPointer<EmbeddedData>(lir->operands[3]); in AssembleLIR()
1573 LIR* target = lir->target; in AssembleLIR()
1575 lir->operands[1] = in AssembleLIR()
1580 int32_t required_size = lir->offset & 0x2; in AssembleLIR()
1581 if (lir->flags.size != required_size) { in AssembleLIR()
1582 offset_adjustment += required_size - lir->flags.size; in AssembleLIR()
1583 lir->flags.size = required_size; in AssembleLIR()
1589 LOG(FATAL) << "Unexpected case " << lir->flags.fixup; in AssembleLIR()
1591 prev_lir = lir; in AssembleLIR()
1592 lir = lir->u.a.pcrel_next; in AssembleLIR()
1636 size_t ArmMir2Lir::GetInsnSize(LIR* lir) { in GetInsnSize() argument
1637 DCHECK(!IsPseudoLirOp(lir->opcode)); in GetInsnSize()
1638 return EncodingMap[lir->opcode].size; in GetInsnSize()
1646 for (LIR* lir = head_lir; lir != end_lir; lir = NEXT_LIR(lir)) { in LinkFixupInsns() local
1647 if (!lir->flags.is_nop) { in LinkFixupInsns()
1648 if (lir->flags.fixup != kFixupNone) { in LinkFixupInsns()
1649 if (!IsPseudoLirOp(lir->opcode)) { in LinkFixupInsns()
1650 lir->flags.size = EncodingMap[lir->opcode].size; in LinkFixupInsns()
1651 lir->flags.fixup = EncodingMap[lir->opcode].fixup; in LinkFixupInsns()
1652 } else if (UNLIKELY(lir->opcode == kPseudoPseudoAlign4)) { in LinkFixupInsns()
1653 lir->flags.size = (offset & 0x2); in LinkFixupInsns()
1654 lir->flags.fixup = kFixupAlign4; in LinkFixupInsns()
1656 lir->flags.size = 0; in LinkFixupInsns()
1657 lir->flags.fixup = kFixupLabel; in LinkFixupInsns()
1660 lir->flags.use_def_invalid = true; in LinkFixupInsns()
1661 lir->u.a.pcrel_next = nullptr; in LinkFixupInsns()
1663 first_fixup_ = lir; in LinkFixupInsns()
1665 last_fixup->u.a.pcrel_next = lir; in LinkFixupInsns()
1667 last_fixup = lir; in LinkFixupInsns()
1668 lir->offset = offset; in LinkFixupInsns()
1670 offset += lir->flags.size; in LinkFixupInsns()