mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 17:30:12 +01:00
freedreno/ir3: fix immed type in create_addr0()
We can also remove a bunch of manual src/dst flag munging, since the instruction builders handle this automatically now. Signed-off-by: Rob Clark <robdclark@chromium.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5048>
This commit is contained in:
parent
3474ba53b5
commit
7b86b5ed7d
1 changed files with 6 additions and 24 deletions
|
|
@ -423,11 +423,7 @@ create_addr0(struct ir3_block *block, struct ir3_instruction *src, int align)
|
|||
{
|
||||
struct ir3_instruction *instr, *immed;
|
||||
|
||||
/* TODO in at least some cases, the backend could probably be
|
||||
* made clever enough to propagate IR3_REG_HALF..
|
||||
*/
|
||||
instr = ir3_COV(block, src, TYPE_U32, TYPE_S16);
|
||||
instr->regs[0]->flags |= IR3_REG_HALF;
|
||||
|
||||
switch(align){
|
||||
case 1:
|
||||
|
|
@ -435,41 +431,29 @@ create_addr0(struct ir3_block *block, struct ir3_instruction *src, int align)
|
|||
break;
|
||||
case 2:
|
||||
/* src *= 2 => src <<= 1: */
|
||||
immed = create_immed(block, 1);
|
||||
immed->regs[0]->flags |= IR3_REG_HALF;
|
||||
|
||||
immed = create_immed_typed(block, 1, TYPE_S16);
|
||||
instr = ir3_SHL_B(block, instr, 0, immed, 0);
|
||||
instr->regs[0]->flags |= IR3_REG_HALF;
|
||||
instr->regs[1]->flags |= IR3_REG_HALF;
|
||||
break;
|
||||
case 3:
|
||||
/* src *= 3: */
|
||||
immed = create_immed(block, 3);
|
||||
immed->regs[0]->flags |= IR3_REG_HALF;
|
||||
|
||||
immed = create_immed_typed(block, 3, TYPE_S16);
|
||||
instr = ir3_MULL_U(block, instr, 0, immed, 0);
|
||||
instr->regs[0]->flags |= IR3_REG_HALF;
|
||||
instr->regs[1]->flags |= IR3_REG_HALF;
|
||||
break;
|
||||
case 4:
|
||||
/* src *= 4 => src <<= 2: */
|
||||
immed = create_immed(block, 2);
|
||||
immed->regs[0]->flags |= IR3_REG_HALF;
|
||||
|
||||
immed = create_immed_typed(block, 2, TYPE_S16);
|
||||
instr = ir3_SHL_B(block, instr, 0, immed, 0);
|
||||
instr->regs[0]->flags |= IR3_REG_HALF;
|
||||
instr->regs[1]->flags |= IR3_REG_HALF;
|
||||
break;
|
||||
default:
|
||||
unreachable("bad align");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
instr->regs[0]->flags |= IR3_REG_HALF;
|
||||
|
||||
instr = ir3_MOV(block, instr, TYPE_S16);
|
||||
instr->regs[0]->num = regid(REG_A0, 0);
|
||||
instr->regs[0]->flags &= ~IR3_REG_SSA;
|
||||
instr->regs[0]->flags |= IR3_REG_HALF;
|
||||
instr->regs[1]->flags |= IR3_REG_HALF;
|
||||
|
||||
return instr;
|
||||
}
|
||||
|
|
@ -478,12 +462,10 @@ static struct ir3_instruction *
|
|||
create_addr1(struct ir3_block *block, unsigned const_val)
|
||||
{
|
||||
|
||||
struct ir3_instruction *immed = create_immed(block, const_val);
|
||||
struct ir3_instruction *immed = create_immed_typed(block, const_val, TYPE_S16);
|
||||
struct ir3_instruction *instr = ir3_MOV(block, immed, TYPE_S16);
|
||||
instr->regs[0]->num = regid(REG_A0, 1);
|
||||
instr->regs[0]->flags &= ~IR3_REG_SSA;
|
||||
instr->regs[0]->flags |= IR3_REG_HALF;
|
||||
instr->regs[1]->flags |= IR3_REG_HALF;
|
||||
return instr;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue