aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkihiko Odaki <akihiko.odaki@daynix.com>2024-07-05 09:40:23 +0100
committerAlex Bennée <alex.bennee@linaro.org>2024-07-05 12:34:29 +0100
commit1e7c9ba4a24d97dfeb59de2c0ac158c749945abc (patch)
treeb56cc8a5f5566667266ce72bbecc4db2d0df6ff1
parent40126a16bddb85fb2f6300be5a919789ccf4d66f (diff)
tests/tcg/arm: Manually register allocate half-precision numbers
Clang does not allow specifying an integer as the value of a single precision register. Explicitly move value from a general register. Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> [rth: Use one single inline asm block.] Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com> Message-Id: <20240630190050.160642-12-richard.henderson@linaro.org> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20240705084047.857176-17-alex.bennee@linaro.org>
-rw-r--r--tests/tcg/arm/fcvt.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/tests/tcg/arm/fcvt.c b/tests/tcg/arm/fcvt.c
index 157790e679..d8c61cd29f 100644
--- a/tests/tcg/arm/fcvt.c
+++ b/tests/tcg/arm/fcvt.c
@@ -355,7 +355,12 @@ static void convert_half_to_single(void)
print_half_number(i, input);
#if defined(__arm__)
- asm("vcvtb.f32.f16 %0, %1" : "=w" (output) : "x" ((uint32_t)input));
+ /*
+ * Clang refuses to allocate an integer to a fp register.
+ * Perform the move from a general register by hand.
+ */
+ asm("vmov %0, %1\n\t"
+ "vcvtb.f32.f16 %0, %0" : "=w" (output) : "r" (input));
#else
asm("fcvt %s0, %h1" : "=w" (output) : "w" (input));
#endif