PR target/126685

gcc/ChangeLog:

* config/i386/i386.md (bswaphisi2_lowpart): Use %w operand
modifier to emit HImode register name for ROLW alternative.

gcc/testsuite/ChangeLog:

* gcc.target/i386/pr126685.c: New test.

Bootstrapped and regression tested on x86_64-pc-linux-gnu {,-m32}.

Uros.
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 0bfe52c08fa..3b0f8b2cccd 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -23720,7 +23720,7 @@ (define_insn "bswaphisi2_lowpart"
   ""
   "@
     xchg{b}\t{%h0, %b0|%b0, %h0}
-    rol{w}\t{$8, %0|%0, 8}"
+    rol{w}\t{$8, %w0|%w0, 8}"
   [(set_attr "type" "imov,rotate1")
    (set_attr "pent_pair" "np,*")
    (set_attr "athlon_decode" "vector,*")
diff --git a/gcc/testsuite/gcc.target/i386/pr126685.c 
b/gcc/testsuite/gcc.target/i386/pr126685.c
new file mode 100644
index 00000000000..2aa23b2cced
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr126685.c
@@ -0,0 +1,9 @@
+/* PR target/126685 */
+/* { dg-do assemble { target ia32 } } */
+/* { dg-options "-march=i386" } */
+
+unsigned long long
+foo (unsigned long long x)
+{
+  return __builtin_bswap64 (x);
+}

Reply via email to