diff options
author | Oleg Endo <olegendo@gcc.gnu.org> | 2012-10-10 00:50:37 +0000 |
---|---|---|
committer | Oleg Endo <olegendo@gcc.gnu.org> | 2012-10-10 00:50:37 +0000 |
commit | 2c62c8ec64ac0b3b7a21db4f45d8a8ae6372aa46 (patch) | |
tree | 7d2340b797cebf8938d4257223789c4d1ee07a60 /gcc | |
parent | 73b043cda17b433d1107705637cdc455ee5d94a1 (diff) | |
download | gcc-2c62c8ec64ac0b3b7a21db4f45d8a8ae6372aa46.zip gcc-2c62c8ec64ac0b3b7a21db4f45d8a8ae6372aa46.tar.gz gcc-2c62c8ec64ac0b3b7a21db4f45d8a8ae6372aa46.tar.bz2 |
re PR target/52480 (SH Target: SH4A movua.l does not work for big endian)
PR target/52480
* config/sh/sh.md (extv, extzv): Check that operands[3] is zero,
regardless of the endianness.
PR target/52480
* gcc.target/sh/sh4a-bitmovua.c: Compact skip-if list.
Add runtime tests.
From-SVN: r192283
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/sh/sh.md | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/sh/sh4a-bitmovua.c | 30 |
4 files changed, 41 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bb1345e..00a61de 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-10-10 Oleg Endo <olegendo@gcc.gnu.org> + + PR target/52480 + * config/sh/sh.md (extv, extzv): Check that operands[3] is zero, + regardless of the endianness. + 2012-10-09 Lawrence Crowl <crowl@google.com> * Makefile.in (fold-const.o): Add depencence on hash-table.h. diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md index 0a1cd09..a0b1e88 100644 --- a/gcc/config/sh/sh.md +++ b/gcc/config/sh/sh.md @@ -12706,7 +12706,7 @@ label: } if (TARGET_SH4A_ARCH && INTVAL (operands[2]) == 32 - && INTVAL (operands[3]) == -24 * (BITS_BIG_ENDIAN != BYTES_BIG_ENDIAN) + && INTVAL (operands[3]) == 0 && MEM_P (operands[1]) && MEM_ALIGN (operands[1]) < 32) { rtx src = adjust_address (operands[1], BLKmode, 0); @@ -12738,7 +12738,7 @@ label: } if (TARGET_SH4A_ARCH && INTVAL (operands[2]) == 32 - && INTVAL (operands[3]) == -24 * (BITS_BIG_ENDIAN != BYTES_BIG_ENDIAN) + && INTVAL (operands[3]) == 0 && MEM_P (operands[1]) && MEM_ALIGN (operands[1]) < 32) { rtx src = adjust_address (operands[1], BLKmode, 0); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8b024bb..a9d2fbd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2012-10-10 Oleg Endo <olegendo@gcc.gnu.org> + + PR target/52480 + * gcc.target/sh/sh4a-bitmovua.c: Compact skip-if list. + Add runtime tests. + 2012-10-10 Paolo Carlini <paolo.carlini@oracle.com> PR c++/53307 diff --git a/gcc/testsuite/gcc.target/sh/sh4a-bitmovua.c b/gcc/testsuite/gcc.target/sh/sh4a-bitmovua.c index 1c9ae6e..7912fbc 100644 --- a/gcc/testsuite/gcc.target/sh/sh4a-bitmovua.c +++ b/gcc/testsuite/gcc.target/sh/sh4a-bitmovua.c @@ -1,7 +1,7 @@ /* Verify that we generate movua to load unaligned 32-bit values on SH4A. */ -/* { dg-do compile { target "sh*-*-*" } } */ -/* { dg-options "-O" } */ -/* { dg-skip-if "" { "sh*-*-*" } { "*" } { "-m4a" "-m4a-single" "-m4a-single-only" "-m4a-nofpu" } } */ +/* { dg-do run { target "sh*-*-*" } } */ +/* { dg-options "-O1 -save-temps -fno-inline" } */ +/* { dg-skip-if "" { "sh*-*-*" } { "*" } { "-m4a*" } } */ /* { dg-final { scan-assembler-times "movua.l" 6 } } */ /* Aligned. */ @@ -64,4 +64,28 @@ unsigned long long g4() { return y4.d; } +#include <assert.h> +int +main (void) +{ + x1.d = 0x12345678; + assert (f1 () == 0x12345678); + + x2.d = 0x12345678; + assert (f2 () == 0x12345678); + + x3.d = 0x12345678; + assert (f3 () == 0x12345678); + + y_1.d = 0x12345678; + assert (g1 () == 0x12345678); + + y2.d = 0x12345678; + assert (g2 () == 0x12345678); + + y3.d = 0x12345678; + assert (g3 () == 0x12345678); + + return 0; +} |