qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH for-6.2 39/53] target/arm: Implement MVE VFMA and VFMS


From: Richard Henderson
Subject: Re: [PATCH for-6.2 39/53] target/arm: Implement MVE VFMA and VFMS
Date: Fri, 30 Jul 2021 09:41:37 -1000
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0

On 7/29/21 1:14 AM, Peter Maydell wrote:
+            r = FN(n[H##ESIZE(e)], m[H##ESIZE(e)], d[H##ESIZE(e)],      \
+                   0, fpst);                                            \
+            mergemask(&d[H##ESIZE(e)], r, mask);                        \
+        }                                                               \
+        mve_advance_vpt(env);                                           \
+    }
+
+#define DO_VFMS16(N, M, D, F, S) float16_muladd(float16_chs(N), M, D, F, S)
+#define DO_VFMS32(N, M, D, F, S) float32_muladd(float32_chs(N), M, D, F, S)
+
+DO_VFMA(vfmah, 2, uint16_t, float16_muladd)
+DO_VFMA(vfmas, 4, uint32_t, float32_muladd)
+DO_VFMA(vfmsh, 2, uint16_t, DO_VFMS16)
+DO_VFMA(vfmss, 4, uint32_t, DO_VFMS32)

Here's where I think passing float16/float32 as the type will pay off, with

  r = n[H##SIZE(e)];
  if (CHS) {
    r = TYPE##_chs(r);
  }
  r = TYPE##_muladd(r, m[...], d[...], 0, fpst);


r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]