Patchwork [SH] PR 53568 - some bswap32 test cases

login
register
mail settings
Submitter Oleg Endo
Date July 2, 2012, 8:01 p.m.
Message ID <1341259271.2287.4.camel@yam-132-YW-E178-FTW>
Download mbox | patch
Permalink /patch/168634/
State New
Headers show

Comments

Oleg Endo - July 2, 2012, 8:01 p.m.
Hello,

The attached patch adds a few bswap32 test cases for SH.
Tested against rev 189175 with 
make -k check RUNTESTFLAGS="sh.exp=pr53568-1.c --target_board=sh-sim
\{-m2/-ml,-m2/-mb,-m2a/-mb,-m2a-single/-mb,-m4/-ml,-m4/-mb,
-m4-single/-ml,-m4-single/-mb,-m4a-single/-ml,-m4a-single/-mb}"

to make sure that the test case passes.

Cheers,
Oleg

testsuite/ChangeLog:

	PR target/53568
	* gcc.target/sh/pr53568-1.c: New.
Kaz Kojima - July 2, 2012, 10:51 p.m.
Oleg Endo <oleg.endo@t-online.de> wrote:
> The attached patch adds a few bswap32 test cases for SH.
> Tested against rev 189175 with 
> make -k check RUNTESTFLAGS="sh.exp=pr53568-1.c --target_board=sh-sim
> \{-m2/-ml,-m2/-mb,-m2a/-mb,-m2a-single/-mb,-m4/-ml,-m4/-mb,
> -m4-single/-ml,-m4-single/-mb,-m4a-single/-ml,-m4a-single/-mb}"
> 
> to make sure that the test case passes.

OK.

Regards,
	kaz

Patch

Index: gcc/testsuite/gcc.target/sh/pr53568-1.c
===================================================================
--- gcc/testsuite/gcc.target/sh/pr53568-1.c	(revision 0)
+++ gcc/testsuite/gcc.target/sh/pr53568-1.c	(revision 0)
@@ -0,0 +1,82 @@ 
+/* Check that the bswap32 pattern is generated as swap.b and swap.w
+   instructions.  */
+/* { dg-do compile { target "sh*-*-*" } } */
+/* { dg-options "-O2" } */
+/* { dg-skip-if "" { "sh*-*-*" } { "-m5*"} { "" } }  */
+/* { dg-final { scan-assembler-times "swap.w" 7 } } */
+/* { dg-final { scan-assembler-times "swap.b" 16 } } */
+/* { dg-final { scan-assembler-times "extu.w" 2 } } */
+/* { dg-final { scan-assembler-times "mov" 1 } } */
+/* { dg-final { scan-assembler-not "{shll8|shlr8|shld|shad}" } } */
+
+int
+test_func_00 (int a)
+{
+  /* 1x swap.w
+     2x swap.b  */
+  return __builtin_bswap32 (a);
+}
+
+unsigned int
+test_func_01 (unsigned int a)
+{
+  /* 1x swap.w
+     2x swap.b  */
+  return __builtin_bswap32 (a);
+}
+
+int
+test_func_02 (int a)
+{
+  /* 1x swap.w
+     2x swap.b  */
+  return (((a >> 0) & 0xFF) << 24)
+	 | (((a >> 8) & 0xFF) << 16)
+	 | (((a >> 16) & 0xFF) << 8)
+	 | (((a >> 24) & 0xFF) << 0);
+}
+
+unsigned int
+test_func_03 (unsigned int a)
+{
+  /* 1x swap.w
+     2x swap.b  */
+  return (((a >> 0) & 0xFF) << 24)
+	 | (((a >> 8) & 0xFF) << 16)
+	 | (((a >> 16) & 0xFF) << 8)
+	 | (((a >> 24) & 0xFF) << 0);
+}
+
+int
+test_func_04 (int a)
+{
+  /* 1x swap.b
+     1x extu.w  */
+  return __builtin_bswap32 (a) >> 16;
+}
+
+unsigned short
+test_func_05 (unsigned short a)
+{
+  /* 1x swap.b
+     1x extu.w  */
+  return __builtin_bswap32 (a) >> 16;
+}
+
+long long
+test_func_06 (long long a)
+{
+  /* 2x swap.w
+     4x swap.b  */
+  return __builtin_bswap64 (a);
+}
+
+long long
+test_func_07 (long long a)
+{
+  /* 1x swap.w
+     2x swap.b
+     1x mov #0,Rn  */
+  return __builtin_bswap64 (a) >> 32;
+}
+