re PR target/82641 (Unable to enable crc32 for a certain function with target attribute on ARM (aarch32))

2018-01-09  Tamar Christina  <tamar.christina@arm.com>                                                                          

        PR target/82641
        * gcc.target/arm/pragma_fpu_attribute.c: Rewrite to use
        no NEON and require softfp or hard float-abi.
        * gcc.target/arm/pragma_fpu_attribute_2.c: Likewise.

From-SVN: r256375
This commit is contained in:
Tamar Christina 2018-01-09 11:04:50 +00:00 committed by Tamar Christina
parent 1f1229d542
commit f676330e22
3 changed files with 29 additions and 18 deletions

View File

@ -1,3 +1,10 @@
2018-01-09 Tamar Christina <tamar.christina@arm.com>
PR target/82641
* gcc.target/arm/pragma_fpu_attribute.c: Rewrite to use
no NEON and require softfp or hard float-abi.
* gcc.target/arm/pragma_fpu_attribute_2.c: Likewise.
2018-01-09 Richard Biener <rguenther@suse.de>
PR tree-optimization/83572

View File

@ -1,18 +1,20 @@
/* Test for target attribute assembly extension generations. */
/* { dg-do compile } */
/* { dg-require-effective-target arm_arch_v8a_ok } */
/* { dg-additional-options "-std=gnu99 -mfpu=vfpv3-d16" } */
/* { dg-require-effective-target arm_fp_ok } */
/* { dg-add-options arm_fp } */
#include <stdint.h>
#include <arm_neon.h>
extern uint32_t bar();
extern uint32_t bar ();
__attribute__((target("fpu=crypto-neon-fp-armv8"))) poly64x1_t vsricw(poly64x1_t crc, uint32_t val)
#pragma GCC target("fpu=vfpv3-d16")
extern float fmaf (float, float, float);
float
__attribute__((target("fpu=vfpv4"))) vfma32 (float x, float y, float z)
{
poly64x1_t res;
asm("vsri %0, %1, %2" : "=r"(res) : "r"(crc), "r"(val));
return res;
return fmaf (x, y, z);
}
uint32_t restored ()
@ -20,5 +22,5 @@ uint32_t restored ()
return bar();
}
/* { dg-final { scan-assembler-times {\.fpu\s+crypto-neon-fp-armv8} 1 } } */
/* { dg-final { scan-assembler-times {\.fpu\s+vfpv4} 1 } } */
/* { dg-final { scan-assembler-times {\.fpu\s+vfpv3-d16} 1 } } */

View File

@ -1,20 +1,22 @@
/* Test for #pragma assembly extension generations. */
/* { dg-do compile } */
/* { dg-require-effective-target arm_arch_v8a_ok } */
/* { dg-additional-options "-std=gnu99 -mfpu=vfpv3-d16" } */
/* { dg-require-effective-target arm_fp_ok } */
/* { dg-add-options arm_fp } */
#include <stdint.h>
#include <arm_neon.h>
#pragma GCC target("fpu=vfpv3-d16")
extern uint32_t bar();
#pragma GCC push_options
#pragma GCC target("fpu=crypto-neon-fp-armv8")
poly64x1_t vsricw(poly64x1_t crc, uint32_t val)
#pragma GCC target("fpu=vfpv4")
extern float fmaf (float, float, float);
float
vfma32 (float x, float y, float z)
{
poly64x1_t res;
asm("vsri %0, %1, %2" : "=r"(res) : "r"(crc), "r"(val));
return res;
return fmaf (x, y, z);
}
#pragma GCC pop_options
@ -23,5 +25,5 @@ uint32_t restored ()
return bar();
}
/* { dg-final { scan-assembler-times {\.fpu\s+crypto-neon-fp-armv8} 1 } } */
/* { dg-final { scan-assembler-times {\.fpu\s+vfpv4} 1 } } */
/* { dg-final { scan-assembler-times {\.fpu\s+vfpv3-d16} 1 } } */