summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/panfrost/bifrost/valhall/test/test-lower-isel.cpp8
-rw-r--r--src/panfrost/bifrost/valhall/va_lower_isel.c8
2 files changed, 16 insertions, 0 deletions
diff --git a/src/panfrost/bifrost/valhall/test/test-lower-isel.cpp b/src/panfrost/bifrost/valhall/test/test-lower-isel.cpp
index f9c3b7874f3..97ff6391750 100644
--- a/src/panfrost/bifrost/valhall/test/test-lower-isel.cpp
+++ b/src/panfrost/bifrost/valhall/test/test-lower-isel.cpp
@@ -125,6 +125,14 @@ TEST_F(LowerIsel, MuxInt8) {
NEGCASE(bi_mux_v4i8(b, x, y, z, BI_MUX_FP_ZERO));
}
+TEST_F(LowerIsel, FaddRscale) {
+ CASE(bi_fadd_rscale_f32_to(b, reg, x, y, z, BI_SPECIAL_NONE),
+ bi_fma_rscale_f32_to(b, reg, x, bi_imm_f32(1.0), y, z, BI_SPECIAL_NONE));
+
+ CASE(bi_fadd_rscale_f32_to(b, reg, x, y, z, BI_SPECIAL_N),
+ bi_fma_rscale_f32_to(b, reg, x, bi_imm_f32(1.0), y, z, BI_SPECIAL_N));
+}
+
TEST_F(LowerIsel, Smoke) {
NEGCASE(bi_fadd_f32_to(b, reg, reg, reg));
NEGCASE(bi_csel_s32_to(b, reg, reg, reg, reg, reg, BI_CMPF_LT));
diff --git a/src/panfrost/bifrost/valhall/va_lower_isel.c b/src/panfrost/bifrost/valhall/va_lower_isel.c
index ad54a9352ba..a43ddc582ba 100644
--- a/src/panfrost/bifrost/valhall/va_lower_isel.c
+++ b/src/panfrost/bifrost/valhall/va_lower_isel.c
@@ -111,6 +111,14 @@ va_lower_isel(bi_instr *I)
break;
+ /* FADD_RSCALE.f32(x, y, z) -> FMA_RSCALE.f32(x, 1.0, y, z) */
+ case BI_OPCODE_FADD_RSCALE_F32:
+ I->op = BI_OPCODE_FMA_RSCALE_F32;
+ I->src[3] = I->src[2];
+ I->src[2] = I->src[1];
+ I->src[1] = bi_imm_f32(1.0);
+ break;
+
default:
break;
}