diff mbox

[SH,committed] Add tst insn test cases

Message ID 1419965538.2473.14.camel@yam-132-YW-E178-FTW
State New
Headers show

Commit Message

Oleg Endo Dec. 30, 2014, 6:52 p.m. UTC
Hi,

This adds some more SH tst insn test cases.  Most of them are currently
failing and thus are marked as xfail.  I'm working on some patches for
those cases.
Tested with
make -k check-gcc RUNTESTFLAGS="sh.exp=pr49263* --target_board=sh-sim
\{-m2/-ml,-m2/-mb,-m2a/-mb,-m4/-ml,-m4/-mb,-m4a/-ml,-m4a/-mb}"
Committed as r219111.

Cheers,
Oleg

gcc/testsuite/ChangeLog:
	PR target/49263
	* gcc.target/sh/pr49263-1.c: New.
	* gcc.target/sh/pr49263-2.c: New.
diff mbox

Patch

Index: gcc/testsuite/gcc.target/sh/pr49263-1.c
===================================================================
--- gcc/testsuite/gcc.target/sh/pr49263-1.c	(revision 0)
+++ gcc/testsuite/gcc.target/sh/pr49263-1.c	(revision 0)
@@ -0,0 +1,62 @@ 
+/* Verify that TST #imm, R0 instruction is generated when QImode or HImode
+   values are tested against a negative constant.  */
+/* { dg-do compile }  */
+/* { dg-options "-O2" }  */
+/* { dg-final { scan-assembler-not "and" } }  */
+/* { dg-final { scan-assembler-not "bclr" { xfail *-*-* } } }  */
+/* { dg-final { scan-assembler-times "extu" 1 { xfail *-*-* } } }  */
+/* { dg-final { scan-assembler-times "exts" 1 { xfail *-*-* } } }  */
+
+#define make_func(__valtype__, __valget__, __tstval__, __suff__)\
+  int test_imm_##__tstval__##__suff__ (__valtype__ val) \
+    {\
+      return ((__valget__) & (- 0x##__tstval__  << 0)) ? -20 : -40;\
+    }
+
+#define make_func_0_F(__valtype__, __valget__, __y__, __suff__)\
+  make_func (__valtype__, __valget__, __y__##0, __suff__)\
+  make_func (__valtype__, __valget__, __y__##1, __suff__)\
+  make_func (__valtype__, __valget__, __y__##2, __suff__)\
+  make_func (__valtype__, __valget__, __y__##3, __suff__)\
+  make_func (__valtype__, __valget__, __y__##4, __suff__)\
+  make_func (__valtype__, __valget__, __y__##5, __suff__)\
+  make_func (__valtype__, __valget__, __y__##6, __suff__)\
+  make_func (__valtype__, __valget__, __y__##7, __suff__)\
+  make_func (__valtype__, __valget__, __y__##8, __suff__)\
+  make_func (__valtype__, __valget__, __y__##9, __suff__)\
+  make_func (__valtype__, __valget__, __y__##A, __suff__)\
+  make_func (__valtype__, __valget__, __y__##B, __suff__)\
+  make_func (__valtype__, __valget__, __y__##C, __suff__)\
+  make_func (__valtype__, __valget__, __y__##D, __suff__)\
+  make_func (__valtype__, __valget__, __y__##E, __suff__)\
+  make_func (__valtype__, __valget__, __y__##F, __suff__)\
+
+#define make_funcs_0_FF(__valtype__, __valget__, __suff__)\
+  make_func_0_F (__valtype__, __valget__, 0, __suff__)\
+  make_func_0_F (__valtype__, __valget__, 1, __suff__)\
+  make_func_0_F (__valtype__, __valget__, 2, __suff__)\
+  make_func_0_F (__valtype__, __valget__, 3, __suff__)\
+  make_func_0_F (__valtype__, __valget__, 4, __suff__)\
+  make_func_0_F (__valtype__, __valget__, 5, __suff__)\
+  make_func_0_F (__valtype__, __valget__, 6, __suff__)\
+  make_func_0_F (__valtype__, __valget__, 7, __suff__)\
+  make_func_0_F (__valtype__, __valget__, 8, __suff__)\
+  make_func_0_F (__valtype__, __valget__, 9, __suff__)\
+  make_func_0_F (__valtype__, __valget__, A, __suff__)\
+  make_func_0_F (__valtype__, __valget__, B, __suff__)\
+  make_func_0_F (__valtype__, __valget__, C, __suff__)\
+  make_func_0_F (__valtype__, __valget__, D, __suff__)\
+  make_func_0_F (__valtype__, __valget__, E, __suff__)\
+  make_func_0_F (__valtype__, __valget__, F, __suff__)\
+
+make_funcs_0_FF (signed char*, *val, int8_mem)
+make_funcs_0_FF (signed char, val, int8_reg)
+
+make_funcs_0_FF (unsigned char*, *val, uint8_mem)
+make_funcs_0_FF (unsigned char, val, uint8_reg)
+
+make_funcs_0_FF (short*, *val, int16_mem)
+make_funcs_0_FF (short, val, int16_reg)
+
+make_funcs_0_FF (unsigned short*, *val, uint16_mem)
+make_funcs_0_FF (unsigned short, val, uint16_reg)
Index: gcc/testsuite/gcc.target/sh/pr49263-2.c
===================================================================
--- gcc/testsuite/gcc.target/sh/pr49263-2.c	(revision 0)
+++ gcc/testsuite/gcc.target/sh/pr49263-2.c	(revision 0)
@@ -0,0 +1,54 @@ 
+/* Verify that TST #imm, R0 instruction is generated when QImode or HImode
+   values are tested against a negative constant.  */
+/* { dg-do compile }  */
+/* { dg-options "-O2" }  */
+/* { dg-final { scan-assembler-not "and" } }  */
+/* { dg-final { scan-assembler-not "exts" { xfail *-*-* } } }  */
+
+/* { dg-final { scan-assembler-times "tst\t#127,r0" 2 } }  */
+/* { dg-final { scan-assembler-times "tst\t#255,r0" 1 { xfail *-*-* } } }  */
+/* { dg-final { scan-assembler-times "65407" 1 { xfail *-*-* } } }  */
+/* { dg-final { scan-assembler-times "-129" 2 { xfail *-*-* } } }  */
+/* { dg-final { scan-assembler-times "extu" 1 { xfail *-*-* } } }  */
+
+int
+test_00 (unsigned char x)
+{
+  /* 1x tst #127  */
+  return x & -129 ? -20 : -40;
+}
+
+int
+test_01 (signed char x)
+{
+  /* 1x tst #255  */
+  return x & -129 ? -20 : -40;
+}
+
+int
+test_02 (unsigned short x)
+{
+  /* 1x tst 65407  */
+  return x & -129 ? -20 : -40;
+}
+
+int
+test_03 (unsigned short* x)
+{
+  /* 1x tst -129  */
+  return x[0] & -129 ? -20 : -40;
+}
+
+int
+test_04 (unsigned short x)
+{
+  /* 1x extu.w, 1x tst -129  */
+  return x & -129 ? x : -1;
+}
+
+int
+test_05 (unsigned char* x)
+{
+  /* 1x tst #127  */
+  return x[0] & -129 ? -20 : -40;
+}