@@ -589,122 +589,123 @@ __smusdx(int16x2_t __a, int16x2_t __b) {
589589#endif
590590
591591/* 9.7 CRC32 intrinsics */
592- #if defined(__ARM_FEATURE_CRC32 ) && __ARM_FEATURE_CRC32
593- static __inline__ uint32_t __attribute__((__always_inline__ , __nodebug__ ))
592+ #if (defined(__ARM_FEATURE_CRC32 ) && __ARM_FEATURE_CRC32 ) || \
593+ (defined(__ARM_64BIT_STATE ) && __ARM_64BIT_STATE )
594+ static __inline__ uint32_t __attribute__((__always_inline__ , __nodebug__ , target ("crc" )))
594595__crc32b (uint32_t __a , uint8_t __b ) {
595596 return __builtin_arm_crc32b (__a , __b );
596597}
597598
598- static __inline__ uint32_t __attribute__((__always_inline__ , __nodebug__ ))
599+ static __inline__ uint32_t __attribute__((__always_inline__ , __nodebug__ , target ( "crc" ) ))
599600__crc32h (uint32_t __a , uint16_t __b ) {
600601 return __builtin_arm_crc32h (__a , __b );
601602}
602603
603- static __inline__ uint32_t __attribute__((__always_inline__ , __nodebug__ ))
604+ static __inline__ uint32_t __attribute__((__always_inline__ , __nodebug__ , target ( "crc" ) ))
604605__crc32w (uint32_t __a , uint32_t __b ) {
605606 return __builtin_arm_crc32w (__a , __b );
606607}
607608
608- static __inline__ uint32_t __attribute__((__always_inline__ , __nodebug__ ))
609+ static __inline__ uint32_t __attribute__((__always_inline__ , __nodebug__ , target ( "crc" ) ))
609610__crc32d (uint32_t __a , uint64_t __b ) {
610611 return __builtin_arm_crc32d (__a , __b );
611612}
612613
613- static __inline__ uint32_t __attribute__((__always_inline__ , __nodebug__ ))
614+ static __inline__ uint32_t __attribute__((__always_inline__ , __nodebug__ , target ( "crc" ) ))
614615__crc32cb (uint32_t __a , uint8_t __b ) {
615616 return __builtin_arm_crc32cb (__a , __b );
616617}
617618
618- static __inline__ uint32_t __attribute__((__always_inline__ , __nodebug__ ))
619+ static __inline__ uint32_t __attribute__((__always_inline__ , __nodebug__ , target ( "crc" ) ))
619620__crc32ch (uint32_t __a , uint16_t __b ) {
620621 return __builtin_arm_crc32ch (__a , __b );
621622}
622623
623- static __inline__ uint32_t __attribute__((__always_inline__ , __nodebug__ ))
624+ static __inline__ uint32_t __attribute__((__always_inline__ , __nodebug__ , target ( "crc" ) ))
624625__crc32cw (uint32_t __a , uint32_t __b ) {
625626 return __builtin_arm_crc32cw (__a , __b );
626627}
627628
628- static __inline__ uint32_t __attribute__((__always_inline__ , __nodebug__ ))
629+ static __inline__ uint32_t __attribute__((__always_inline__ , __nodebug__ , target ( "crc" ) ))
629630__crc32cd (uint32_t __a , uint64_t __b ) {
630631 return __builtin_arm_crc32cd (__a , __b );
631632}
632633#endif
633634
634635/* Armv8.3-A Javascript conversion intrinsic */
635- #if defined(__ARM_64BIT_STATE ) && __ARM_64BIT_STATE && defined( __ARM_FEATURE_JCVT )
636- static __inline__ int32_t __attribute__((__always_inline__ , __nodebug__ ))
636+ #if defined(__ARM_64BIT_STATE ) && __ARM_64BIT_STATE
637+ static __inline__ int32_t __attribute__((__always_inline__ , __nodebug__ , target ( "v8.3a" ) ))
637638__jcvt (double __a ) {
638639 return __builtin_arm_jcvt (__a );
639640}
640641#endif
641642
642643/* Armv8.5-A FP rounding intrinsics */
643- #if defined(__ARM_64BIT_STATE ) && __ARM_64BIT_STATE && defined( __ARM_FEATURE_FRINT )
644- static __inline__ float __attribute__((__always_inline__ , __nodebug__ ))
644+ #if defined(__ARM_64BIT_STATE ) && __ARM_64BIT_STATE
645+ static __inline__ float __attribute__((__always_inline__ , __nodebug__ , target ( "v8.5a" ) ))
645646__rint32zf (float __a ) {
646647 return __builtin_arm_rint32zf (__a );
647648}
648649
649- static __inline__ double __attribute__((__always_inline__ , __nodebug__ ))
650+ static __inline__ double __attribute__((__always_inline__ , __nodebug__ , target ( "v8.5a" ) ))
650651__rint32z (double __a ) {
651652 return __builtin_arm_rint32z (__a );
652653}
653654
654- static __inline__ float __attribute__((__always_inline__ , __nodebug__ ))
655+ static __inline__ float __attribute__((__always_inline__ , __nodebug__ , target ( "v8.5a" ) ))
655656__rint64zf (float __a ) {
656657 return __builtin_arm_rint64zf (__a );
657658}
658659
659- static __inline__ double __attribute__((__always_inline__ , __nodebug__ ))
660+ static __inline__ double __attribute__((__always_inline__ , __nodebug__ , target ( "v8.5a" ) ))
660661__rint64z (double __a ) {
661662 return __builtin_arm_rint64z (__a );
662663}
663664
664- static __inline__ float __attribute__((__always_inline__ , __nodebug__ ))
665+ static __inline__ float __attribute__((__always_inline__ , __nodebug__ , target ( "v8.5a" ) ))
665666__rint32xf (float __a ) {
666667 return __builtin_arm_rint32xf (__a );
667668}
668669
669- static __inline__ double __attribute__((__always_inline__ , __nodebug__ ))
670+ static __inline__ double __attribute__((__always_inline__ , __nodebug__ , target ( "v8.5a" ) ))
670671__rint32x (double __a ) {
671672 return __builtin_arm_rint32x (__a );
672673}
673674
674- static __inline__ float __attribute__((__always_inline__ , __nodebug__ ))
675+ static __inline__ float __attribute__((__always_inline__ , __nodebug__ , target ( "v8.5a" ) ))
675676__rint64xf (float __a ) {
676677 return __builtin_arm_rint64xf (__a );
677678}
678679
679- static __inline__ double __attribute__((__always_inline__ , __nodebug__ ))
680+ static __inline__ double __attribute__((__always_inline__ , __nodebug__ , target ( "v8.5a" ) ))
680681__rint64x (double __a ) {
681682 return __builtin_arm_rint64x (__a );
682683}
683684#endif
684685
685686/* Armv8.7-A load/store 64-byte intrinsics */
686- #if defined(__ARM_64BIT_STATE ) && __ARM_64BIT_STATE && defined( __ARM_FEATURE_LS64 )
687+ #if defined(__ARM_64BIT_STATE ) && __ARM_64BIT_STATE
687688typedef struct {
688689 uint64_t val [8 ];
689690} data512_t ;
690691
691- static __inline__ data512_t __attribute__((__always_inline__ , __nodebug__ ))
692+ static __inline__ data512_t __attribute__((__always_inline__ , __nodebug__ , target ( "ls64" ) ))
692693__arm_ld64b (const void * __addr ) {
693- data512_t __value ;
694- __builtin_arm_ld64b (__addr , __value .val );
695- return __value ;
694+ data512_t __value ;
695+ __builtin_arm_ld64b (__addr , __value .val );
696+ return __value ;
696697}
697- static __inline__ void __attribute__((__always_inline__ , __nodebug__ ))
698+ static __inline__ void __attribute__((__always_inline__ , __nodebug__ , target ( "ls64" ) ))
698699__arm_st64b (void * __addr , data512_t __value ) {
699- __builtin_arm_st64b (__addr , __value .val );
700+ __builtin_arm_st64b (__addr , __value .val );
700701}
701- static __inline__ uint64_t __attribute__((__always_inline__ , __nodebug__ ))
702+ static __inline__ uint64_t __attribute__((__always_inline__ , __nodebug__ , target ( "ls64" ) ))
702703__arm_st64bv (void * __addr , data512_t __value ) {
703- return __builtin_arm_st64bv (__addr , __value .val );
704+ return __builtin_arm_st64bv (__addr , __value .val );
704705}
705- static __inline__ uint64_t __attribute__((__always_inline__ , __nodebug__ ))
706+ static __inline__ uint64_t __attribute__((__always_inline__ , __nodebug__ , target ( "ls64" ) ))
706707__arm_st64bv0 (void * __addr , data512_t __value ) {
707- return __builtin_arm_st64bv0 (__addr , __value .val );
708+ return __builtin_arm_st64bv0 (__addr , __value .val );
708709}
709710#endif
710711
@@ -759,12 +760,12 @@ __arm_st64bv0(void *__addr, data512_t __value) {
759760#endif /* __ARM_FEATURE_TME */
760761
761762/* Armv8.5-A Random number generation intrinsics */
762- #if defined(__ARM_64BIT_STATE ) && __ARM_64BIT_STATE && defined( __ARM_FEATURE_RNG )
763- static __inline__ int __attribute__((__always_inline__ , __nodebug__ ))
763+ #if defined(__ARM_64BIT_STATE ) && __ARM_64BIT_STATE
764+ static __inline__ int __attribute__((__always_inline__ , __nodebug__ , target ( "rand" ) ))
764765__rndr (uint64_t * __p ) {
765766 return __builtin_arm_rndr (__p );
766767}
767- static __inline__ int __attribute__((__always_inline__ , __nodebug__ ))
768+ static __inline__ int __attribute__((__always_inline__ , __nodebug__ , target ( "rand" ) ))
768769__rndrrs (uint64_t * __p ) {
769770 return __builtin_arm_rndrrs (__p );
770771}
0 commit comments