The dlmzb. instruction requires an 8-byte aligned operand. The testcases try to enforce that by passing an arg as "long long *", but current GCC still assumes an alignment of 1 (correctly I think -- the pointer is only used as pointer to char).
This patch changes the testcases to explicitly have an 8-byte aligned datum. Okay for mainline? Segher 2014-12-24 Segher Boessenkool <seg...@kernel.crashing.org> gcc/testsuite/ * gcc.target/powerpc/405-dlmzb-strlen-1.c: Explicitly align arg. * gcc.target/powerpc/440-dlmzb-strlen-1.c: Ditto. --- gcc/testsuite/gcc.target/powerpc/405-dlmzb-strlen-1.c | 6 ++++-- gcc/testsuite/gcc.target/powerpc/440-dlmzb-strlen-1.c | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/gcc/testsuite/gcc.target/powerpc/405-dlmzb-strlen-1.c b/gcc/testsuite/gcc.target/powerpc/405-dlmzb-strlen-1.c index b06a74f..52675ba 100644 --- a/gcc/testsuite/gcc.target/powerpc/405-dlmzb-strlen-1.c +++ b/gcc/testsuite/gcc.target/powerpc/405-dlmzb-strlen-1.c @@ -12,8 +12,10 @@ typedef __SIZE_TYPE__ size_t; size_t strlen(const char *); +char s[100] __attribute__ ((aligned (8))); + size_t -strlen8(const long long *s) +strlen8(void) { - return strlen((const char *)s); + return strlen(s); } diff --git a/gcc/testsuite/gcc.target/powerpc/440-dlmzb-strlen-1.c b/gcc/testsuite/gcc.target/powerpc/440-dlmzb-strlen-1.c index d255bd7..0373466 100644 --- a/gcc/testsuite/gcc.target/powerpc/440-dlmzb-strlen-1.c +++ b/gcc/testsuite/gcc.target/powerpc/440-dlmzb-strlen-1.c @@ -12,8 +12,10 @@ typedef __SIZE_TYPE__ size_t; size_t strlen(const char *); +char s[100] __attribute__ ((aligned (8))); + size_t -strlen8(const long long *s) +strlen8(void) { - return strlen((const char *)s); + return strlen(s); } -- 1.8.1.4