assert((MAX2(from_size, to_size) / MIN2(from_size, to_size)) <= 2);
 
         /* f32 to f16 is special */
-        if (from_size == 32 && to_size == 16 && from_base == nir_type_float && to_base == from_base) {
-                /* TODO: second vectorized source? */
+        if (from_size == 32 && to_size == 16 && from_base == to_base) {
+                /* TODO uint/int */
+                assert(from_base == nir_type_float);
+
                 struct bifrost_fma_2src pfma = {
                         .src0 = bi_get_src(ins, regs, 0),
-                        .src1 = BIFROST_SRC_STAGE, /* 0 */
+                        .src1 = bi_get_src(ins, regs, 1),
                         .op = BIFROST_FMA_FLOAT32_TO_16
                 };
 
                 struct bifrost_add_2src padd = {
                         .src0 = bi_get_src(ins, regs, 0),
-                        .src1 = BIFROST_SRC_STAGE, /* 0 */
+                        .src1 = bi_get_src(ins, regs, 1),
                         .op = BIFROST_ADD_FLOAT32_TO_16
                 };