This patch adds the following SHA3 Intrinsics:
vsha512hq_u64,
vsha512h2q_u64,
vsha512su0q_u64,
vsha512su1q_u64
veor3q_u8
veor3q_u16
veor3q_u32
veor3q_u64
veor3q_s8
veor3q_s16
veor3q_s32
veor3q_s64
vrax1q_u64
vxarq_u64
vbcaxq_u8
vbcaxq_u16
vbcaxq_u32
vbcaxq_u64
vbcaxq_s8
vbcaxq_s16
vbcaxq_s32
vbcaxq_s64
Note need to include +sha3 and +crypto when building from the front-endDetails
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
This is the second of three patches to address the following:
https://bugs.llvm.org/show_bug.cgi?id=47828
| clang/utils/TableGen/NeonEmitter.cpp | ||
|---|---|---|
| 2118–2122 | Consider alphabetizing the check. move isVXAR check after isVCT_N | |
This looks like a straightforward implementation. The only caveat is that the XAR immediate does not represent a lane, and hence the need for a custom immediate range check. Looks sensible to me.
@labrinea and others at ARM, do have any other comment before this is merged?
One nit for now, I'll take a proper look tomorrow. Thanks for your work on these!
| clang/test/CodeGen/aarch64-neon-sha3.c | ||
|---|---|---|
| 27 | Nit: remove empty lines in this and the following | |
The approach for xar looks fine to me, matches how we handled vcvt_n_* (https://developer.arm.com/architectures/instruction-sets/simd-isas/neon/intrinsics?search=vcvt_n_).
| clang/include/clang/Basic/arm_neon.td | ||
|---|---|---|
| 1139 | Put the second set in c-s-i-l order like the first. | |
| llvm/lib/Target/AArch64/AArch64InstrInfo.td | ||
| 928 | This is unused. | |
| llvm/test/CodeGen/AArch64/neon-sha3.ll | ||
| 106 | I'm not sure you need to declare variants you aren't using but in any case you should test the missing ones e.g. crypto.eor3u.v8i16. | |
| llvm/lib/Target/AArch64/AArch64InstrInfo.td | ||
|---|---|---|
| 928 | a good catch thank you! | |
Thank you for reviewing this @DavidSpickett ! If you get a chance could you commit this for me? I do not have commit access yet.
| clang/test/CodeGen/aarch64-neon-range-checks.c | ||
|---|---|---|
| 31 | I added a "}" here. Please run ninja check-clang and/or check-llvm before you update patches. | |
Put the second set in c-s-i-l order like the first.