Lines Matching defs:reg

46    bool assign(int32_t& reg, DataFile f, unsigned int size, unsigned int maxReg);
47 void release(DataFile f, int32_t reg, unsigned int size);
48 void occupy(DataFile f, int32_t reg, unsigned int size);
50 void occupyMask(DataFile f, int32_t reg, uint8_t mask);
51 bool isOccupied(DataFile f, int32_t reg, unsigned int size) const;
53 bool testOccupy(DataFile f, int32_t reg, unsigned int size);
69 return v->reg.data.id * MIN2(v->reg.size, 4);
73 return units(v->reg.file, idToBytes(v));
77 if (v->reg.size < 4)
78 return units(v->reg.file, bytes);
151 RegisterSet::assign(int32_t& reg, DataFile f, unsigned int size, unsigned int maxReg)
153 reg = bits[f].findFreeRange(size, maxReg);
154 if (reg < 0)
156 fill[f] = MAX2(fill[f], (int32_t)(reg + size - 1));
161 RegisterSet::isOccupied(DataFile f, int32_t reg, unsigned int size) const
163 return bits[f].testRange(reg, size);
169 occupy(v->reg.file, idToUnits(v), v->reg.size >> unit[v->reg.file]);
173 RegisterSet::occupyMask(DataFile f, int32_t reg, uint8_t mask)
175 bits[f].setMask(reg & ~31, static_cast<uint32_t>(mask) << (reg % 32));
179 RegisterSet::occupy(DataFile f, int32_t reg, unsigned int size)
181 bits[f].setRange(reg, size);
183 INFO_DBG(0, REG_ALLOC, "reg occupy: %u[%i] %u\n", f, reg, size);
185 fill[f] = MAX2(fill[f], (int32_t)(reg + size - 1));
191 return testOccupy(v->reg.file,
192 idToUnits(v), v->reg.size >> unit[v->reg.file]);
196 RegisterSet::testOccupy(DataFile f, int32_t reg, unsigned int size)
198 if (isOccupied(f, reg, size))
200 occupy(f, reg, size);
205 RegisterSet::release(DataFile f, int32_t reg, unsigned int size)
207 bits[f].clrRange(reg, size);
209 INFO_DBG(0, REG_ALLOC, "reg release: %u[%i] %u\n", f, reg, size);
351 inline uint8_t size() const { return sym->reg.size; }
506 mov = new_Instruction(func, OP_MOV, typeOfSize(tmp->reg.size));
538 tmp->reg.data.id = cal->target.fn->ins[t].rep()->reg.data.id;
541 new_Instruction(func, OP_MOV, typeOfSize(tmp->reg.size));
552 tmp->reg.data.id = cal->target.fn->outs[d].rep()->reg.data.id;
555 new_Instruction(func, OP_MOV, typeOfSize(tmp->reg.size));
570 tmp->reg.data.id = (*it)->reg.data.id;
710 if (i->getDef(d)->reg.data.id >= 0) // add hazard for fixed regs
727 if (it->get()->reg.data.id >= 0) // add hazard for fixed regs
770 return ((1 << colors) - 1) << (reg & 7);
785 int32_t reg;
869 colors(0), f(FILE_NULL), reg(0), weight(0), next(this), prev(this)
881 nodes[i].f,nodes[i].reg,nodes[i].colors,
897 // replaced with a zero reg). Every other situation can be resolved by
900 insn->getSrc(1)->reg.data.u64;
925 if (lval->reg.data.id >= 0)
928 colors = regs.units(lval->reg.file, lval->reg.size);
929 f = lval->reg.file;
930 reg = -1;
931 if (lval->reg.data.id >= 0)
932 reg = regs.idToUnits(lval);
939 if (regs.restrictedGPR16Range && f == FILE_GPR && (lval->reg.size == 2 || isShortRegVal(lval)))
981 if (!force && val->reg.data.id >= 0) {
988 if (src->reg.file != dst->reg.file) {
993 if (!force && dst->reg.size != src->reg.size)
996 if ((rep->reg.data.id >= 0) && (rep->reg.data.id != val->reg.data.id)) {
998 if (val->reg.data.id >= 0)
1001 if (val->reg.data.id >= 0)
1006 Value *reg = reinterpret_cast<Value *>(it.get())->asLValue();
1007 assert(reg);
1008 if (reg->interfers(rep) && reg->livei.overlaps(nVal->livei))
1022 rep->id, rep->reg.data.id, val->id);
1279 if (insn->getDef(d)->reg.file <= LAST_REGISTER_FILE &&
1312 if (nodes[i].reg >= 0) {
1313 // update max reg
1314 regs.occupy(n->f, n->reg, n->colors);
1330 if (val->reg.size > 4)
1355 int l = (b->getValue()->reg.size > 4) ? 1 : 0;
1421 if (intf->reg < 0)
1426 const uint8_t intfMask = ((1 << intf->colors) - 1) << (intf->reg & 7);
1455 vB->compMask, intf->reg & ~7, mask);
1457 regs.occupyMask(node->f, intf->reg & ~7, mask);
1463 vA->id, vB->id, intf->reg, intf->colors);
1464 regs.occupy(node->f, intf->reg, intf->colors);
1491 if ((*it)->reg >= 0 &&
1492 regs.testOccupy(node->f, (*it)->reg, node->colors)) {
1493 node->reg = (*it)->reg;
1498 if (node->reg >= 0)
1503 bool ret = regs.assign(node->reg, node->f, node->colors, node->maxReg);
1505 INFO_DBG(prog->dbgFlags, REG_ALLOC, "assigned reg %i\n", node->reg);
1509 lval->id, lval->reg.size);
1511 if (lval->reg.file == FILE_GPR)
1512 slot = spill.assignSlot(node->livei, lval->reg.size);
1520 if (nodes[i].reg >= 0 && nodes[i].colors > 0)
1521 lval->reg.data.id =
1522 regs.unitsToId(nodes[i].f, nodes[i].reg, lval->reg.size);
1629 lval->reg.data.id = lval->join->reg.data.id;
1696 slot.sym->reg.size = size;
1709 slot->reg.data.offset += (ffs(lval->compMask) - 1) * lval->reg.size;
1710 slot->reg.size = lval->reg.size;
1718 const DataType ty = typeOfSize(lval->reg.size);
1723 if (slot->reg.file == FILE_MEMORY_LOCAL) {
1732 for (int d = 0; d < lval->reg.size / 4; ++d)
1735 for (int d = lval->reg.size / 4 - 1; d >= 0; --d) {
1737 tmp->reg.size = 4;
1738 tmp->reg.data.offset += 4 * d;
1750 if (lval->reg.file == FILE_FLAGS)
1759 const DataType ty = typeOfSize(lval->reg.size);
1765 if (slot->reg.file == FILE_MEMORY_LOCAL) {
1771 for (int d = 0; d < lval->reg.size / 4; ++d) {
1774 tmp->reg.size = 4;
1775 tmp->reg.data.offset += 4 * d;
1793 if (lval->reg.file == FILE_FLAGS)
1855 tmp = (slot->reg.file == FILE_MEMORY_LOCAL) ? NULL : slot;
1869 if (slot->reg.file == FILE_MEMORY_LOCAL)
1984 unsigned int reg = regs.idToBytes(split->getSrc(0));
1987 v->reg.data.id = regs.bytesToId(v, reg);
1989 reg += v->reg.size;
1998 unsigned int reg = regs.idToBytes(merge->getDef(0));
2001 v->reg.data.id = regs.bytesToId(v, reg);
2010 phi->getSrc(phis)->reg.data.id = v->reg.data.id;
2013 reg += v->reg.size;
2146 size += insn->getDef(s)->reg.size;
2151 lval->reg.size = size;
2180 size += insn->getSrc(s)->reg.size;
2184 lval->reg.size = size;
2576 size -= i->getSrc(s)->reg.size;
2637 lval->reg.size = size;
2677 lval->reg.size = size;