aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2025-08-27 20:33:27 +1000
committerRichard Henderson <richard.henderson@linaro.org>2025-09-04 09:49:23 +0200
commit26c41cc4a3d998caa700407a27e18755a6e1895c (patch)
tree1a3732110bdfd83536acfb41f554ab1c56cf86b3
parentb8eb3dd49583729edceb18628e626eac15a15de4 (diff)
downloadqemu-26c41cc4a3d998caa700407a27e18755a6e1895c.zip
qemu-26c41cc4a3d998caa700407a27e18755a6e1895c.tar.gz
qemu-26c41cc4a3d998caa700407a27e18755a6e1895c.tar.bz2
tcg/i386: Expand sari of bits-1 as pcmpgt
Expand arithmetic right shift of bits-1 as a comparison vs 0. Suggested-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
-rw-r--r--tcg/i386/tcg-target.c.inc6
1 files changed, 6 insertions, 0 deletions
diff --git a/tcg/i386/tcg-target.c.inc b/tcg/i386/tcg-target.c.inc
index 088c6c9..4cd5d42 100644
--- a/tcg/i386/tcg-target.c.inc
+++ b/tcg/i386/tcg-target.c.inc
@@ -4357,6 +4357,12 @@ static void expand_vec_sari(TCGType type, unsigned vece,
{
TCGv_vec t1, t2;
+ if (imm >= (8 << vece) - 1) {
+ tcg_gen_cmp_vec(TCG_COND_LT, vece, v0, v1,
+ tcg_constant_vec(type, MO_64, 0));
+ return;
+ }
+
switch (vece) {
case MO_8:
/* Unpack to 16-bit, shift, and repack. */