Re: [PATCH][ARM] Implement CRC32 intrinsics for AArch32 in ARMv8-A

2013-12-20 Thread Kyrill Tkachov

On 19/12/13 17:58, Kyrill Tkachov wrote:

On 18/12/13 15:32, Ramana Radhakrishnan wrote:

On Tue, Dec 3, 2013 at 1:46 PM, Kyrill Tkachov kyrylo.tkac...@arm.com wrote:

Ping?
http://gcc.gnu.org/ml/gcc-patches/2013-11/msg02351.html

Thanks,
Kyrill

Ok if no objections in 24 hours.

Thanks Ramana, I've committed it as r206128 together with this obvious change
that sets the conds attribute on the md pattern.


I just noticed that I committed the first version of the patch posted at:
http://gcc.gnu.org/ml/gcc-patches/2013-11/msg02250.html

instead of the second version posted at:
http://gcc.gnu.org/ml/gcc-patches/2013-11/msg02351.html

that was approved. The difference is only that the second one has underscores 
under the variable names in arm_acle.h.


I've committed the attached patch to add them as obvious with r206149. Tested 
arm-none-eabi on a model.


Sorry for the noise,
Kyrill

2013-12-20  Kyrylo Tkachov  kyrylo.tkac...@arm.com

* config/arm/arm_acle.h: Add underscores before variables.



Kyrill



Ramana


On 26/11/13 09:44, Kyrill Tkachov wrote:

Ping?

Thanks,
Kyrill

On 19/11/13 17:04, Kyrill Tkachov wrote:

On 19/11/13 16:26, Joseph S. Myers wrote:

In any target header installed for user use, such as arm_acle.h, you
need
to be namespace-clean.  In this case, that means you need to use
implementation-namespace identifiers such as __a, __b and __d in case
the
user has defined macros with names such as a, b and d (unless the ACLE
says that identifiers a, b and d are in the implementation's namespace
when this header is included, which would be a very odd thing for it to
do).


Hi Joseph,

Thanks for the catch. ACLE doesn't expect a,b,d to be in the
implementation
namespace. I've added underscores before them.

Made sure tests pass.

Revised patch attached.
How's this?

Kyrill

gcc/
2013-11-19  Kyrylo Tkachov  kyrylo.tkac...@arm.com

 * Makefile.in (TEXI_GCC_FILES): Add arm-acle-intrinsics.texi.
 * config.gcc (extra_headers): Add arm_acle.h.
 * config/arm/arm.c (FL_CRC32): Define.
 (arm_have_crc): Likewise.
 (arm_option_override): Set arm_have_crc.
 (arm_builtins): Add CRC32 builtins.
 (bdesc_2arg): Likewise.
 (arm_init_crc32_builtins): New function.
 (arm_init_builtins): Initialise CRC32 builtins.
 (arm_file_start): Handle architecture extensions.
 * config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Define
__ARM_FEATURE_CRC32.
 Define __ARM_32BIT_STATE.
 (TARGET_CRC32): Define.
 * config/arm/arm-arches.def: Add armv8-a+crc.
 * config/arm/arm-tables.opt: Regenerate.
 * config/arm/arm.md (type): Add crc.
 (crc_variant): New insn.
 * config/arm/arm_acle.h: New file.
 * config/arm/iterators.md (CRC): New int iterator.
 (crc_variant, crc_mode): New int attributes.
 * confg/arm/unspecs.md (UNSPEC_CRC32B, UNSPEC_CRC32H,
UNSPEC_CRC32W,
 UNSPEC_CRC32CB, UNSPEC_CRC32CH, UNSPEC_CRC32CW): New unspecs.
 * doc/invoke.texi: Document -march=armv8-a+crc option.
 * doc/extend.texi: Document ACLE intrinsics.
 * doc/arm-acle-intrinsics.texi: New.


gcc/testsuite
2013-11-19  Kyrylo Tkachov  kyrylo.tkac...@arm.com

 * lib/target-supports.exp (add_options_for_arm_crc): New
procedure.
 (check_effective_target_arm_crc_ok_nocache): Likewise.
 (check_effective_target_arm_crc_ok): Likewise.
 * gcc.target/arm/acle/: New directory.
 * gcc.target/arm/acle/acle.exp: New.
 * gcc.target/arm/acle/crc32b.c: New test.
 * gcc.target/arm/acle/crc32h.c: Likewise.
 * gcc.target/arm/acle/crc32w.c: Likewise.
 * gcc.target/arm/acle/crc32d.c: Likewise.
 * gcc.target/arm/acle/crc32cb.c: Likewise.
 * gcc.target/arm/acle/crc32ch.c: Likewise.
 * gcc.target/arm/acle/crc32cw.c: Likewise.
 * gcc.target/arm/acle/crc32cd.c: Likewise.


Index: gcc/config/arm/arm_acle.h
===
--- gcc/config/arm/arm_acle.h	(revision 206132)
+++ gcc/config/arm/arm_acle.h	(working copy)
@@ -34,60 +34,60 @@
 
 #ifdef __ARM_FEATURE_CRC32
 __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
-__crc32b (uint32_t a, uint8_t b)
+__crc32b (uint32_t __a, uint8_t __b)
 {
-  return __builtin_arm_crc32b (a, b);
+  return __builtin_arm_crc32b (__a, __b);
 }
 
 __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
-__crc32h (uint32_t a, uint16_t b)
+__crc32h (uint32_t __a, uint16_t __b)
 {
-  return __builtin_arm_crc32h (a, b);
+  return __builtin_arm_crc32h (__a, __b);
 }
 
 __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
-__crc32w (uint32_t a, uint32_t b)
+__crc32w (uint32_t __a, uint32_t __b)
 {
-  return __builtin_arm_crc32w (a, b);
+  return __builtin_arm_crc32w (__a, __b);
 }
 
 #ifdef __ARM_32BIT_STATE
 __extension__ static __inline uint32_t 

Re: [PATCH][ARM] Implement CRC32 intrinsics for AArch32 in ARMv8-A

2013-12-19 Thread Kyrill Tkachov

On 18/12/13 15:32, Ramana Radhakrishnan wrote:

On Tue, Dec 3, 2013 at 1:46 PM, Kyrill Tkachov kyrylo.tkac...@arm.com wrote:

Ping?
http://gcc.gnu.org/ml/gcc-patches/2013-11/msg02351.html

Thanks,
Kyrill

Ok if no objections in 24 hours.


Thanks Ramana, I've committed it as r206128 together with this obvious change 
that sets the conds attribute on the md pattern.


Kyrill




Ramana



On 26/11/13 09:44, Kyrill Tkachov wrote:

Ping?

Thanks,
Kyrill

On 19/11/13 17:04, Kyrill Tkachov wrote:

On 19/11/13 16:26, Joseph S. Myers wrote:

In any target header installed for user use, such as arm_acle.h, you
need
to be namespace-clean.  In this case, that means you need to use
implementation-namespace identifiers such as __a, __b and __d in case
the
user has defined macros with names such as a, b and d (unless the ACLE
says that identifiers a, b and d are in the implementation's namespace
when this header is included, which would be a very odd thing for it to
do).


Hi Joseph,

Thanks for the catch. ACLE doesn't expect a,b,d to be in the
implementation
namespace. I've added underscores before them.

Made sure tests pass.

Revised patch attached.
How's this?

Kyrill

gcc/
2013-11-19  Kyrylo Tkachov  kyrylo.tkac...@arm.com

* Makefile.in (TEXI_GCC_FILES): Add arm-acle-intrinsics.texi.
* config.gcc (extra_headers): Add arm_acle.h.
* config/arm/arm.c (FL_CRC32): Define.
(arm_have_crc): Likewise.
(arm_option_override): Set arm_have_crc.
(arm_builtins): Add CRC32 builtins.
(bdesc_2arg): Likewise.
(arm_init_crc32_builtins): New function.
(arm_init_builtins): Initialise CRC32 builtins.
(arm_file_start): Handle architecture extensions.
* config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Define
__ARM_FEATURE_CRC32.
Define __ARM_32BIT_STATE.
(TARGET_CRC32): Define.
* config/arm/arm-arches.def: Add armv8-a+crc.
* config/arm/arm-tables.opt: Regenerate.
* config/arm/arm.md (type): Add crc.
(crc_variant): New insn.
* config/arm/arm_acle.h: New file.
* config/arm/iterators.md (CRC): New int iterator.
(crc_variant, crc_mode): New int attributes.
* confg/arm/unspecs.md (UNSPEC_CRC32B, UNSPEC_CRC32H,
UNSPEC_CRC32W,
UNSPEC_CRC32CB, UNSPEC_CRC32CH, UNSPEC_CRC32CW): New unspecs.
* doc/invoke.texi: Document -march=armv8-a+crc option.
* doc/extend.texi: Document ACLE intrinsics.
* doc/arm-acle-intrinsics.texi: New.


gcc/testsuite
2013-11-19  Kyrylo Tkachov  kyrylo.tkac...@arm.com

* lib/target-supports.exp (add_options_for_arm_crc): New
procedure.
(check_effective_target_arm_crc_ok_nocache): Likewise.
(check_effective_target_arm_crc_ok): Likewise.
* gcc.target/arm/acle/: New directory.
* gcc.target/arm/acle/acle.exp: New.
* gcc.target/arm/acle/crc32b.c: New test.
* gcc.target/arm/acle/crc32h.c: Likewise.
* gcc.target/arm/acle/crc32w.c: Likewise.
* gcc.target/arm/acle/crc32d.c: Likewise.
* gcc.target/arm/acle/crc32cb.c: Likewise.
* gcc.target/arm/acle/crc32ch.c: Likewise.
* gcc.target/arm/acle/crc32cw.c: Likewise.
* gcc.target/arm/acle/crc32cd.c: Likewise.



diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index 397df01..e8b8125 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -12880,7 +12880,8 @@
  CRC))]
   TARGET_CRC32
   crc_variant\\t%0, %1, %2
-  [(set_attr type crc)]
+  [(set_attr type crc)
+   (set_attr conds unconditional)]
 )
 
 ;; Load the load/store double peephole optimizations.

Re: [PATCH][ARM] Implement CRC32 intrinsics for AArch32 in ARMv8-A

2013-12-18 Thread Ramana Radhakrishnan
On Tue, Dec 3, 2013 at 1:46 PM, Kyrill Tkachov kyrylo.tkac...@arm.com wrote:
 Ping?
 http://gcc.gnu.org/ml/gcc-patches/2013-11/msg02351.html

 Thanks,
 Kyrill

Ok if no objections in 24 hours.

Ramana



 On 26/11/13 09:44, Kyrill Tkachov wrote:

 Ping?

 Thanks,
 Kyrill

 On 19/11/13 17:04, Kyrill Tkachov wrote:

 On 19/11/13 16:26, Joseph S. Myers wrote:

 In any target header installed for user use, such as arm_acle.h, you
 need
 to be namespace-clean.  In this case, that means you need to use
 implementation-namespace identifiers such as __a, __b and __d in case
 the
 user has defined macros with names such as a, b and d (unless the ACLE
 says that identifiers a, b and d are in the implementation's namespace
 when this header is included, which would be a very odd thing for it to
 do).

 Hi Joseph,

 Thanks for the catch. ACLE doesn't expect a,b,d to be in the
 implementation
 namespace. I've added underscores before them.

 Made sure tests pass.

 Revised patch attached.
 How's this?

 Kyrill

 gcc/
 2013-11-19  Kyrylo Tkachov  kyrylo.tkac...@arm.com

* Makefile.in (TEXI_GCC_FILES): Add arm-acle-intrinsics.texi.
* config.gcc (extra_headers): Add arm_acle.h.
* config/arm/arm.c (FL_CRC32): Define.
(arm_have_crc): Likewise.
(arm_option_override): Set arm_have_crc.
(arm_builtins): Add CRC32 builtins.
(bdesc_2arg): Likewise.
(arm_init_crc32_builtins): New function.
(arm_init_builtins): Initialise CRC32 builtins.
(arm_file_start): Handle architecture extensions.
* config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Define
 __ARM_FEATURE_CRC32.
Define __ARM_32BIT_STATE.
(TARGET_CRC32): Define.
* config/arm/arm-arches.def: Add armv8-a+crc.
* config/arm/arm-tables.opt: Regenerate.
* config/arm/arm.md (type): Add crc.
(crc_variant): New insn.
* config/arm/arm_acle.h: New file.
* config/arm/iterators.md (CRC): New int iterator.
(crc_variant, crc_mode): New int attributes.
* confg/arm/unspecs.md (UNSPEC_CRC32B, UNSPEC_CRC32H,
 UNSPEC_CRC32W,
UNSPEC_CRC32CB, UNSPEC_CRC32CH, UNSPEC_CRC32CW): New unspecs.
* doc/invoke.texi: Document -march=armv8-a+crc option.
* doc/extend.texi: Document ACLE intrinsics.
* doc/arm-acle-intrinsics.texi: New.


 gcc/testsuite
 2013-11-19  Kyrylo Tkachov  kyrylo.tkac...@arm.com

* lib/target-supports.exp (add_options_for_arm_crc): New
 procedure.
(check_effective_target_arm_crc_ok_nocache): Likewise.
(check_effective_target_arm_crc_ok): Likewise.
* gcc.target/arm/acle/: New directory.
* gcc.target/arm/acle/acle.exp: New.
* gcc.target/arm/acle/crc32b.c: New test.
* gcc.target/arm/acle/crc32h.c: Likewise.
* gcc.target/arm/acle/crc32w.c: Likewise.
* gcc.target/arm/acle/crc32d.c: Likewise.
* gcc.target/arm/acle/crc32cb.c: Likewise.
* gcc.target/arm/acle/crc32ch.c: Likewise.
* gcc.target/arm/acle/crc32cw.c: Likewise.
* gcc.target/arm/acle/crc32cd.c: Likewise.





Re: [PATCH][ARM] Implement CRC32 intrinsics for AArch32 in ARMv8-A

2013-12-03 Thread Kyrill Tkachov

Ping?
http://gcc.gnu.org/ml/gcc-patches/2013-11/msg02351.html

Thanks,
Kyrill

On 26/11/13 09:44, Kyrill Tkachov wrote:

Ping?

Thanks,
Kyrill

On 19/11/13 17:04, Kyrill Tkachov wrote:

On 19/11/13 16:26, Joseph S. Myers wrote:

In any target header installed for user use, such as arm_acle.h, you need
to be namespace-clean.  In this case, that means you need to use
implementation-namespace identifiers such as __a, __b and __d in case the
user has defined macros with names such as a, b and d (unless the ACLE
says that identifiers a, b and d are in the implementation's namespace
when this header is included, which would be a very odd thing for it to
do).


Hi Joseph,

Thanks for the catch. ACLE doesn't expect a,b,d to be in the implementation
namespace. I've added underscores before them.

Made sure tests pass.

Revised patch attached.
How's this?

Kyrill

gcc/
2013-11-19  Kyrylo Tkachov  kyrylo.tkac...@arm.com

   * Makefile.in (TEXI_GCC_FILES): Add arm-acle-intrinsics.texi.
   * config.gcc (extra_headers): Add arm_acle.h.
   * config/arm/arm.c (FL_CRC32): Define.
   (arm_have_crc): Likewise.
   (arm_option_override): Set arm_have_crc.
   (arm_builtins): Add CRC32 builtins.
   (bdesc_2arg): Likewise.
   (arm_init_crc32_builtins): New function.
   (arm_init_builtins): Initialise CRC32 builtins.
   (arm_file_start): Handle architecture extensions.
   * config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Define __ARM_FEATURE_CRC32.
   Define __ARM_32BIT_STATE.
   (TARGET_CRC32): Define.
   * config/arm/arm-arches.def: Add armv8-a+crc.
   * config/arm/arm-tables.opt: Regenerate.
   * config/arm/arm.md (type): Add crc.
   (crc_variant): New insn.
   * config/arm/arm_acle.h: New file.
   * config/arm/iterators.md (CRC): New int iterator.
   (crc_variant, crc_mode): New int attributes.
   * confg/arm/unspecs.md (UNSPEC_CRC32B, UNSPEC_CRC32H, UNSPEC_CRC32W,
   UNSPEC_CRC32CB, UNSPEC_CRC32CH, UNSPEC_CRC32CW): New unspecs.
   * doc/invoke.texi: Document -march=armv8-a+crc option.
   * doc/extend.texi: Document ACLE intrinsics.
   * doc/arm-acle-intrinsics.texi: New.


gcc/testsuite
2013-11-19  Kyrylo Tkachov  kyrylo.tkac...@arm.com

   * lib/target-supports.exp (add_options_for_arm_crc): New procedure.
   (check_effective_target_arm_crc_ok_nocache): Likewise.
   (check_effective_target_arm_crc_ok): Likewise.
   * gcc.target/arm/acle/: New directory.
   * gcc.target/arm/acle/acle.exp: New.
   * gcc.target/arm/acle/crc32b.c: New test.
   * gcc.target/arm/acle/crc32h.c: Likewise.
   * gcc.target/arm/acle/crc32w.c: Likewise.
   * gcc.target/arm/acle/crc32d.c: Likewise.
   * gcc.target/arm/acle/crc32cb.c: Likewise.
   * gcc.target/arm/acle/crc32ch.c: Likewise.
   * gcc.target/arm/acle/crc32cw.c: Likewise.
   * gcc.target/arm/acle/crc32cd.c: Likewise.





Re: [PATCH][ARM] Implement CRC32 intrinsics for AArch32 in ARMv8-A

2013-11-26 Thread Kyrill Tkachov

Ping?

Thanks,
Kyrill

On 19/11/13 17:04, Kyrill Tkachov wrote:

On 19/11/13 16:26, Joseph S. Myers wrote:

In any target header installed for user use, such as arm_acle.h, you need
to be namespace-clean.  In this case, that means you need to use
implementation-namespace identifiers such as __a, __b and __d in case the
user has defined macros with names such as a, b and d (unless the ACLE
says that identifiers a, b and d are in the implementation's namespace
when this header is included, which would be a very odd thing for it to
do).


Hi Joseph,

Thanks for the catch. ACLE doesn't expect a,b,d to be in the implementation
namespace. I've added underscores before them.

Made sure tests pass.

Revised patch attached.
How's this?

Kyrill

gcc/
2013-11-19  Kyrylo Tkachov  kyrylo.tkac...@arm.com

  * Makefile.in (TEXI_GCC_FILES): Add arm-acle-intrinsics.texi.
  * config.gcc (extra_headers): Add arm_acle.h.
  * config/arm/arm.c (FL_CRC32): Define.
  (arm_have_crc): Likewise.
  (arm_option_override): Set arm_have_crc.
  (arm_builtins): Add CRC32 builtins.
  (bdesc_2arg): Likewise.
  (arm_init_crc32_builtins): New function.
  (arm_init_builtins): Initialise CRC32 builtins.
  (arm_file_start): Handle architecture extensions.
  * config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Define __ARM_FEATURE_CRC32.
  Define __ARM_32BIT_STATE.
  (TARGET_CRC32): Define.
  * config/arm/arm-arches.def: Add armv8-a+crc.
  * config/arm/arm-tables.opt: Regenerate.
  * config/arm/arm.md (type): Add crc.
  (crc_variant): New insn.
  * config/arm/arm_acle.h: New file.
  * config/arm/iterators.md (CRC): New int iterator.
  (crc_variant, crc_mode): New int attributes.
  * confg/arm/unspecs.md (UNSPEC_CRC32B, UNSPEC_CRC32H, UNSPEC_CRC32W,
  UNSPEC_CRC32CB, UNSPEC_CRC32CH, UNSPEC_CRC32CW): New unspecs.
  * doc/invoke.texi: Document -march=armv8-a+crc option.
  * doc/extend.texi: Document ACLE intrinsics.
  * doc/arm-acle-intrinsics.texi: New.


gcc/testsuite
2013-11-19  Kyrylo Tkachov  kyrylo.tkac...@arm.com

  * lib/target-supports.exp (add_options_for_arm_crc): New procedure.
  (check_effective_target_arm_crc_ok_nocache): Likewise.
  (check_effective_target_arm_crc_ok): Likewise.
  * gcc.target/arm/acle/: New directory.
  * gcc.target/arm/acle/acle.exp: New.
  * gcc.target/arm/acle/crc32b.c: New test.
  * gcc.target/arm/acle/crc32h.c: Likewise.
  * gcc.target/arm/acle/crc32w.c: Likewise.
  * gcc.target/arm/acle/crc32d.c: Likewise.
  * gcc.target/arm/acle/crc32cb.c: Likewise.
  * gcc.target/arm/acle/crc32ch.c: Likewise.
  * gcc.target/arm/acle/crc32cw.c: Likewise.
  * gcc.target/arm/acle/crc32cd.c: Likewise.





Re: [PATCH][ARM] Implement CRC32 intrinsics for AArch32 in ARMv8-A

2013-11-19 Thread Joseph S. Myers
In any target header installed for user use, such as arm_acle.h, you need 
to be namespace-clean.  In this case, that means you need to use 
implementation-namespace identifiers such as __a, __b and __d in case the 
user has defined macros with names such as a, b and d (unless the ACLE 
says that identifiers a, b and d are in the implementation's namespace 
when this header is included, which would be a very odd thing for it to 
do).

-- 
Joseph S. Myers
jos...@codesourcery.com


Re: [PATCH][ARM] Implement CRC32 intrinsics for AArch32 in ARMv8-A

2013-11-19 Thread Kyrill Tkachov

On 19/11/13 16:26, Joseph S. Myers wrote:

In any target header installed for user use, such as arm_acle.h, you need
to be namespace-clean.  In this case, that means you need to use
implementation-namespace identifiers such as __a, __b and __d in case the
user has defined macros with names such as a, b and d (unless the ACLE
says that identifiers a, b and d are in the implementation's namespace
when this header is included, which would be a very odd thing for it to
do).



Hi Joseph,

Thanks for the catch. ACLE doesn't expect a,b,d to be in the implementation 
namespace. I've added underscores before them.


Made sure tests pass.

Revised patch attached.
How's this?

Kyrill

gcc/
2013-11-19  Kyrylo Tkachov  kyrylo.tkac...@arm.com

* Makefile.in (TEXI_GCC_FILES): Add arm-acle-intrinsics.texi.
* config.gcc (extra_headers): Add arm_acle.h.
* config/arm/arm.c (FL_CRC32): Define.
(arm_have_crc): Likewise.
(arm_option_override): Set arm_have_crc.
(arm_builtins): Add CRC32 builtins.
(bdesc_2arg): Likewise.
(arm_init_crc32_builtins): New function.
(arm_init_builtins): Initialise CRC32 builtins.
(arm_file_start): Handle architecture extensions.
* config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Define __ARM_FEATURE_CRC32.
Define __ARM_32BIT_STATE.
(TARGET_CRC32): Define.
* config/arm/arm-arches.def: Add armv8-a+crc.
* config/arm/arm-tables.opt: Regenerate.
* config/arm/arm.md (type): Add crc.
(crc_variant): New insn.
* config/arm/arm_acle.h: New file.
* config/arm/iterators.md (CRC): New int iterator.
(crc_variant, crc_mode): New int attributes.
* confg/arm/unspecs.md (UNSPEC_CRC32B, UNSPEC_CRC32H, UNSPEC_CRC32W,
UNSPEC_CRC32CB, UNSPEC_CRC32CH, UNSPEC_CRC32CW): New unspecs.
* doc/invoke.texi: Document -march=armv8-a+crc option.
* doc/extend.texi: Document ACLE intrinsics.
* doc/arm-acle-intrinsics.texi: New.


gcc/testsuite
2013-11-19  Kyrylo Tkachov  kyrylo.tkac...@arm.com

* lib/target-supports.exp (add_options_for_arm_crc): New procedure.
(check_effective_target_arm_crc_ok_nocache): Likewise.
(check_effective_target_arm_crc_ok): Likewise.
* gcc.target/arm/acle/: New directory.
* gcc.target/arm/acle/acle.exp: New.
* gcc.target/arm/acle/crc32b.c: New test.
* gcc.target/arm/acle/crc32h.c: Likewise.
* gcc.target/arm/acle/crc32w.c: Likewise.
* gcc.target/arm/acle/crc32d.c: Likewise.
* gcc.target/arm/acle/crc32cb.c: Likewise.
* gcc.target/arm/acle/crc32ch.c: Likewise.
* gcc.target/arm/acle/crc32cw.c: Likewise.
* gcc.target/arm/acle/crc32cd.c: Likewise.
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 8cc8341..455c80b 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -2793,7 +2793,8 @@ TEXI_GCC_FILES = gcc.texi gcc-common.texi gcc-vers.texi frontends.texi	\
 	 gcov.texi trouble.texi bugreport.texi service.texi		\
 	 contribute.texi compat.texi funding.texi gnu.texi gpl_v3.texi	\
 	 fdl.texi contrib.texi cppenv.texi cppopts.texi avr-mmcu.texi	\
-	 implement-c.texi implement-cxx.texi arm-neon-intrinsics.texi
+	 implement-c.texi implement-cxx.texi arm-neon-intrinsics.texi	\
+	 arm-acle-intrinsics.texi
 
 # we explicitly use $(srcdir)/doc/tm.texi here to avoid confusion with
 # the generated tm.texi; the latter might have a more recent timestamp,
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 2907018..ebbdc59 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -329,8 +329,8 @@ arc*-*-*)
 	;;
 arm*-*-*)
 	cpu_type=arm
-	extra_headers=mmintrin.h arm_neon.h
 	extra_objs=aarch-common.o
+	extra_headers=mmintrin.h arm_neon.h arm_acle.h
 	target_type_format_char='%'
 	c_target_objs=arm-c.o
 	cxx_target_objs=arm-c.o
diff --git a/gcc/config/arm/arm-arches.def b/gcc/config/arm/arm-arches.def
index fcf3401..9b7d20c 100644
--- a/gcc/config/arm/arm-arches.def
+++ b/gcc/config/arm/arm-arches.def
@@ -54,5 +54,6 @@ ARM_ARCH(armv7-r, cortexr4,	7R,  FL_CO_PROC |	  FL_FOR_ARCH7R)
 ARM_ARCH(armv7-m, cortexm3,	7M,  FL_CO_PROC |	  FL_FOR_ARCH7M)
 ARM_ARCH(armv7e-m, cortexm4,  7EM, FL_CO_PROC |	  FL_FOR_ARCH7EM)
 ARM_ARCH(armv8-a, cortexa53,  8A,  FL_CO_PROC | FL_FOR_ARCH8A)
+ARM_ARCH(armv8-a+crc,cortexa53, 8A,FL_CO_PROC | FL_CRC32  | FL_FOR_ARCH8A)
 ARM_ARCH(iwmmxt,  iwmmxt, 5TE, FL_LDSCHED | FL_STRONG | FL_FOR_ARCH5TE | FL_XSCALE | FL_IWMMXT)
 ARM_ARCH(iwmmxt2, iwmmxt2,5TE, FL_LDSCHED | FL_STRONG | FL_FOR_ARCH5TE | FL_XSCALE | FL_IWMMXT | FL_IWMMXT2)
diff --git a/gcc/config/arm/arm-tables.opt b/gcc/config/arm/arm-tables.opt
index b3e7a7c..8851876 100644
--- a/gcc/config/arm/arm-tables.opt
+++ b/gcc/config/arm/arm-tables.opt
@@ -362,10 +362,13 @@ EnumValue
 Enum(arm_arch) String(armv8-a) Value(23)
 
 EnumValue
-Enum(arm_arch) String(iwmmxt) Value(24)
+Enum(arm_arch) String(armv8-a+crc) Value(24)
 
 EnumValue
-Enum(arm_arch) String(iwmmxt2) Value(25)
+Enum(arm_arch) String(iwmmxt) Value(25)
+
+EnumValue
+Enum(arm_arch) String(iwmmxt2) Value(26)
 
 Enum