From e04e068f75e82238a8964a6210cd40711805a458 Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Sat, 31 Mar 2018 14:14:31 -0400 Subject: [PATCH] freedreno/ir3: add helper to create immed of specified size We'll also need to be able to create a half-precision immediate. So re-work create_immed(). Prep work for following patch. Signed-off-by: Rob Clark --- .../drivers/freedreno/ir3/ir3_compiler_nir.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c b/src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c index 337054cd110..1481510a5dd 100644 --- a/src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c +++ b/src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c @@ -505,19 +505,26 @@ put_dst(struct ir3_context *ctx, nir_dest *dst) } static struct ir3_instruction * -create_immed(struct ir3_block *block, uint32_t val) +create_immed_typed(struct ir3_block *block, uint32_t val, type_t type) { struct ir3_instruction *mov; + unsigned flags = (type_size(type) < 32) ? IR3_REG_HALF : 0; mov = ir3_instr_create(block, OPC_MOV); - mov->cat1.src_type = TYPE_U32; - mov->cat1.dst_type = TYPE_U32; - ir3_reg_create(mov, 0, 0); + mov->cat1.src_type = type; + mov->cat1.dst_type = type; + ir3_reg_create(mov, 0, flags); ir3_reg_create(mov, 0, IR3_REG_IMMED)->uim_val = val; return mov; } +static struct ir3_instruction * +create_immed(struct ir3_block *block, uint32_t val) +{ + return create_immed_typed(block, val, TYPE_U32); +} + static struct ir3_instruction * create_addr(struct ir3_block *block, struct ir3_instruction *src, int align) { -- 2.30.2