aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleg Endo <olegendo@gcc.gnu.org>2014-12-22 18:53:44 +0000
committerOleg Endo <olegendo@gcc.gnu.org>2014-12-22 18:53:44 +0000
commit17839acd9d9e2973fefd399bfaaa4c82d0b81687 (patch)
tree93599c3b9532adf069eea8f15b54c352782a48fc
parent0a6f14996acf4acf2788be390d84624959f6134d (diff)
downloadgcc-17839acd9d9e2973fefd399bfaaa4c82d0b81687.zip
gcc-17839acd9d9e2973fefd399bfaaa4c82d0b81687.tar.gz
gcc-17839acd9d9e2973fefd399bfaaa4c82d0b81687.tar.bz2
re PR target/58314 (SH4 error: 'asm' operand requires impossible reload)
gcc/testsuite/ PR target/58314 * gcc.target/sh/torture/pr58314-2.c: New. * gcc.target/sh/torture/pr58314.c: Don't set -Os option. From-SVN: r219030
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gcc.target/sh/torture/pr58314-2.c160
-rw-r--r--gcc/testsuite/gcc.target/sh/torture/pr58314.c8
3 files changed, 171 insertions, 4 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e756a17..5259375 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2014-12-22 Oleg Endo <olegendo@gcc.gnu.org>
+
+ PR target/58314
+ * gcc.target/sh/torture/pr58314-2.c: New.
+ * gcc.target/sh/torture/pr58314.c: Don't set -Os option.
+
2014-12-22 Janus Weil <janus@gcc.gnu.org>
PR fortran/63363
@@ -6551,7 +6557,6 @@
* gcc.dg/attr-isr.c: Move SH specific test to ...
* gcc.target/sh/attr-isr.c: ... here.
->>>>>>> .r217525
2014-10-17 Marek Polacek <polacek@redhat.com>
PR c/63567
diff --git a/gcc/testsuite/gcc.target/sh/torture/pr58314-2.c b/gcc/testsuite/gcc.target/sh/torture/pr58314-2.c
new file mode 100644
index 0000000..a617c6e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/sh/torture/pr58314-2.c
@@ -0,0 +1,160 @@
+/* { dg-do compile } */
+
+struct unipair
+{
+ unsigned short unicode;
+ unsigned short fontpos;
+};
+
+struct __large_struct
+{
+ unsigned long buf[100];
+};
+
+struct vc_data
+{
+ unsigned long *vc_uni_pagedir_loc;
+};
+
+struct uni_pagedir
+{
+ unsigned short **uni_pgdir[32];
+};
+
+void con_get_unimap (struct vc_data *vc, unsigned short ct, unsigned short *uct,
+ struct unipair *list)
+{
+ int i, j, k, ect;
+ unsigned short **p1, *p2;
+ struct uni_pagedir *p;
+
+ ect = 0;
+
+ if (*vc->vc_uni_pagedir_loc)
+ {
+ p = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc;
+ for (i = 0; i < 32; i++)
+ if ((p1 = p->uni_pgdir[i]))
+ for (j = 0; j < 32; j++)
+ if ((p2 = *(p1++)))
+ for (k = 0; k < 64; k++)
+ {
+ if (*p2 < 512 && ect++ < ct)
+ {
+ {
+ long __pu_err;
+ __typeof__(*((&list->unicode))) *__pu_addr = ((&list->unicode));
+ __typeof__(*((&list->unicode))) __pu_val =
+ ((unsigned short)((i<<11)+(j<<6)+k));
+ __pu_err = 0;
+ switch ((sizeof(*(&list->unicode))))
+ {
+ case 1:
+ __asm__ __volatile__ (
+ "1:\n\t"
+ "mov." "b" " %1, %2\n\t"
+ "2:\n"
+ ".section .fixup,\"ax\"\n"
+ "3:\n\t"
+ "mov.l 4f, %0\n\t"
+ "jmp @%0\n\t"
+ " mov %3, %0\n\t"
+ ".balign 4\n"
+ "4: .long 2b\n\t"
+ ".previous\n"
+ ".section __ex_table,\"a\"\n\t"
+ ".long 1b, 3b\n\t"
+ ".previous"
+ : "=&r" (__pu_err)
+ : "r" (__pu_val), "m" ((*(struct __large_struct *)(__pu_addr))),
+ "i" (-14), "0" (__pu_err) : "memory" );
+
+ break;
+
+ case 2:
+ __asm__ __volatile__ (
+ "1:\n\t"
+ "mov." "w" " %1, %2\n\t"
+ "2:\n"
+ ".section .fixup,\"ax\"\n"
+ "3:\n\t"
+ "mov.l 4f, %0\n\t"
+ "jmp @%0\n\t"
+ " mov %3, %0\n\t"
+ ".balign 4\n"
+ "4: .long 2b\n\t"
+ ".previous\n"
+ ".section __ex_table,\"a\"\n\t"
+ ".long 1b, 3b\n\t"
+ ".previous"
+ : "=&r" (__pu_err)
+ : "r" (__pu_val), "m" ((*(struct __large_struct *)(__pu_addr))),
+ "i" (-14), "0" (__pu_err) : "memory" );
+ break;
+
+ default:
+ break;
+ }
+ }
+
+
+ {
+ long __pu_err;
+ __typeof__(*((&list->fontpos))) *__pu_addr = ((&list->fontpos));
+ __typeof__(*((&list->fontpos))) __pu_val = ((unsigned short) *p2);
+ __pu_err = 0;
+ switch ((sizeof(*(&list->fontpos))))
+ {
+ case 1:
+ __asm__ __volatile__ (
+ "1:\n\t"
+ "mov." "b" " %1, %2\n\t"
+ "2:\n"
+ ".section .fixup,\"ax\"\n"
+ "3:\n\t"
+ "mov.l 4f, %0\n\t"
+ "jmp @%0\n\t"
+ " mov %3, %0\n\t"
+ ".balign 4\n"
+ "4: .long 2b\n\t"
+ ".previous\n"
+ ".section __ex_table,\"a\"\n\t"
+ ".long 1b, 3b\n\t"
+ ".previous"
+ : "=&r" (__pu_err)
+ : "r" (__pu_val), "m" ((*(struct __large_struct *)(__pu_addr))),
+ "i" (-14), "0" (__pu_err) : "memory" );
+ break;
+
+ case 2:
+ __asm__ __volatile__ (
+ "1:\n\t"
+ "mov." "w" " %1, %2\n\t"
+ "2:\n"
+ ".section .fixup,\"ax\"\n"
+ "3:\n\t"
+ "mov.l 4f, %0\n\t"
+ "jmp @%0\n\t"
+ " mov %3, %0\n\t"
+ ".balign 4\n"
+ "4: .long 2b\n\t"
+ ".previous\n"
+ ".section __ex_table,\"a\"\n\t"
+ ".long 1b, 3b\n\t"
+ ".previous"
+ : "=&r" (__pu_err)
+ : "r" (__pu_val), "m" ((*(struct __large_struct *)(__pu_addr))),
+ "i" (-14), "0" (__pu_err) : "memory" );
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ list++;
+ }
+ p2++;
+ }
+ }
+}
diff --git a/gcc/testsuite/gcc.target/sh/torture/pr58314.c b/gcc/testsuite/gcc.target/sh/torture/pr58314.c
index 5f76b6a..8850546 100644
--- a/gcc/testsuite/gcc.target/sh/torture/pr58314.c
+++ b/gcc/testsuite/gcc.target/sh/torture/pr58314.c
@@ -1,13 +1,15 @@
+/* { dg-additional-options "-std=gnu99" } */
/* { dg-do compile } */
-/* { dg-options "-Os" } */
typedef unsigned short __u16;
typedef unsigned int __u32;
-
typedef signed short s16;
-static inline __attribute__((always_inline)) __attribute__((__const__)) __u16 __arch_swab16(__u16 x)
+static inline
+__attribute__((always_inline))
+__attribute__((__const__))
+__u16 __arch_swab16(__u16 x)
{
__asm__(
"swap.b %1, %0"