[PATCH] [AArch64] Add workaround for Cortex-A53 erratum (835769)

Bradley Smith bradley.smith at arm.com
Fri Oct 10 02:05:10 PDT 2014


Some early revisions of the Cortex-A53 have an erratum (835769) whereby it is
possible for a 64-bit multiply-accumulate instruction in AArch64 state to
generate an incorrect result.  The details are quite complex and hard to
determine statically, since branches in the code may exist in some
circumstances, but all cases end with a memory (load, store, or prefetch)
instruction followed immediately by the multiply-accumulate operation.

The safest work-around for this issue is to make the compiler avoid emitting
multiply-accumulate instructions immediately after memory instructions and the
simplest way to do this is to insert a NOP.

This patch implements such work-around. The work-around is only enabled
when specifying the clang command line option -mfix-cortex-a53-835769 or the
llvm backend option -aarch64-fix-cortex-a53-835769.

The work-around code generation is not enabled by default.

http://reviews.llvm.org/D5721

Files:
  lib/Target/AArch64/AArch64.h
  lib/Target/AArch64/AArch64FixCortexA53_835769.cpp
  lib/Target/AArch64/AArch64TargetMachine.cpp
  lib/Target/AArch64/CMakeLists.txt
  test/CodeGen/AArch64/aarch64-fix-cortex-a53-835769.ll
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D5721.14706.patch
Type: text/x-patch
Size: 25705 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141010/74a1da52/attachment.bin>


More information about the llvm-commits mailing list