[PATCH] D112420: [clang][ARM] PACBTI-M assembly support
This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG5cff77c23f43: [clang][ARM] PACBTI-M assembly support (authored by stuij, committed by Zeno zeno@Zenos-MacBook-Pro.local). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D112420/new/ https://reviews.llvm.org/D112420 Files: clang/test/Driver/armv8.1m.main.c llvm/include/llvm/Support/ARMTargetParser.def llvm/include/llvm/Support/ARMTargetParser.h llvm/lib/Target/ARM/ARM.td llvm/lib/Target/ARM/ARMInstrThumb2.td llvm/lib/Target/ARM/ARMPredicates.td llvm/lib/Target/ARM/ARMRegisterInfo.td llvm/lib/Target/ARM/ARMSubtarget.h llvm/lib/Target/ARM/ARMSystemRegister.td llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp llvm/test/CodeGen/Thumb/high-reg-clobber.mir llvm/test/MC/ARM/armv8.1m-pacbti-error.s llvm/test/MC/ARM/armv8.1m-pacbti.s llvm/test/MC/ARM/implicit-it-generation-v8.s llvm/test/MC/Disassembler/ARM/armv8.1m-pacbti.txt Index: llvm/test/MC/Disassembler/ARM/armv8.1m-pacbti.txt === --- /dev/null +++ llvm/test/MC/Disassembler/ARM/armv8.1m-pacbti.txt @@ -0,0 +1,137 @@ +# RUN: llvm-mc -triple thumbv8.1m.main-arm-none-eabi -mattr=+pacbti -disassemble %s 2> /dev/null | FileCheck %s + +0x51,0xfb,0x02,0x0f +0x5e,0xfb,0x0d,0xcf +0xaf,0xf3,0x2d,0x80 +0x51,0xfb,0x12,0x0f +0xaf,0xf3,0x0f,0x80 +0x61,0xfb,0x02,0xf0 +0x6e,0xfb,0x0d,0xfc +0xaf,0xf3,0x1d,0x80 +0xaf,0xf3,0x0d,0x80 +0x80,0xf3,0x20,0x88 +0x80,0xf3,0x21,0x88 +0x80,0xf3,0x22,0x88 +0x80,0xf3,0x23,0x88 +0x80,0xf3,0x24,0x88 +0x80,0xf3,0x25,0x88 +0x80,0xf3,0x26,0x88 +0x80,0xf3,0x27,0x88 +0x80,0xf3,0xa0,0x88 +0x80,0xf3,0xa1,0x88 +0x80,0xf3,0xa2,0x88 +0x80,0xf3,0xa3,0x88 +0x80,0xf3,0xa4,0x88 +0x80,0xf3,0xa5,0x88 +0x80,0xf3,0xa6,0x88 +0x80,0xf3,0xa7,0x88 +0xef,0xf3,0x20,0x80 +0xef,0xf3,0x21,0x80 +0xef,0xf3,0x22,0x80 +0xef,0xf3,0x23,0x80 +0xef,0xf3,0x24,0x80 +0xef,0xf3,0x25,0x80 +0xef,0xf3,0x26,0x80 +0xef,0xf3,0x27,0x80 +0xef,0xf3,0xa0,0x80 +0xef,0xf3,0xa1,0x80 +0xef,0xf3,0xa2,0x80 +0xef,0xf3,0xa3,0x80 +0xef,0xf3,0xa4,0x80 +0xef,0xf3,0xa5,0x80 +0xef,0xf3,0xa6,0x80 +0xef,0xf3,0xa7,0x80 + +# Test softfail encodings +0xa7,0xf3,0x1d,0x80 +0xab,0xf3,0x1d,0x80 +0xad,0xf3,0x1d,0x80 +0xae,0xf3,0x1d,0x80 +0xaf,0xf3,0x1d,0x88 +0xaf,0xf3,0x1d,0xa0 +0xaf,0xf3,0x2d,0x80 +0xab,0xf3,0x2d,0x80 +0xad,0xf3,0x2d,0x80 +0xae,0xf3,0x2d,0x80 +0xaf,0xf3,0x2d,0x88 +0xaf,0xf3,0x2d,0xa0 +0xa7,0xf3,0x0f,0x80 +0xab,0xf3,0x0f,0x80 +0xad,0xf3,0x0f,0x80 +0xae,0xf3,0x0f,0x80 +0xaf,0xf3,0x0f,0x88 +0xaf,0xf3,0x0f,0xa0 +0xa7,0xf3,0x0d,0x80 +0xab,0xf3,0x0d,0x80 +0xad,0xf3,0x0d,0x80 +0xae,0xf3,0x0d,0x80 +0xaf,0xf3,0x0d,0x88 +0xaf,0xf3,0x0d,0xa0 + +# CHECK: autg r0, r1, r2 +# CHECK: autg r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: bxautr0, r1, r2 +# CHECK: bti +# CHECK: pacg r0, r1, r2 +# CHECK: pacg r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: pacbti r12, lr, sp +# CHECK: msr pac_key_p_0, r0 +# CHECK: msr pac_key_p_1, r0 +# CHECK: msr pac_key_p_2, r0 +# CHECK: msr pac_key_p_3, r0 +# CHECK: msr pac_key_u_0, r0 +# CHECK: msr pac_key_u_1, r0 +# CHECK: msr pac_key_u_2, r0 +# CHECK: msr pac_key_u_3, r0 +# CHECK: msr pac_key_p_0_ns, r0 +# CHECK: msr pac_key_p_1_ns, r0 +# CHECK: msr pac_key_p_2_ns, r0 +# CHECK: msr pac_key_p_3_ns, r0 +# CHECK: msr pac_key_u_0_ns, r0 +# CHECK: msr pac_key_u_1_ns, r0 +# CHECK: msr pac_key_u_2_ns, r0 +# CHECK: msr pac_key_u_3_ns, r0 +# CHECK: mrs r0, pac_key_p_0 +# CHECK: mrs r0, pac_key_p_1 +# CHECK: mrs r0, pac_key_p_2 +# CHECK: mrs r0, pac_key_p_3 +# CHECK: mrs r0, pac_key_u_0 +# CHECK: mrs r0, pac_key_u_1 +# CHECK: mrs r0, pac_key_u_2 +# CHECK: mrs r0, pac_key_u_3 +# CHECK: mrs r0, pac_key_p_0_ns +# CHECK: mrs r0, pac_key_p_1_ns +# CHECK: mrs r0, pac_key_p_2_ns +# CHECK: mrs r0, pac_key_p_3_ns +# CHECK: mrs r0, pac_key_u_0_ns +# CHECK: mrs r0, pac_key_u_1_ns +# CHECK: mrs r0, pac_key_u_2_ns +# CHECK: mrs r0, pac_key_u_3_ns + +# Softfail encodings +# CHECK: pac r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: bti +# CHECK: bti +# CHECK: bti +# CHECK: bti +# CHECK: bti +# CHECK: bti +# CHECK: pacbti r12, lr, sp +# CHECK: pacbti r12, lr, sp +# CHECK: pacbti r12, lr, sp +# CHECK: pacbti r12, lr, sp +# CHECK: pacbti r12, lr, sp +# CHECK: pacbti r12, lr, sp Index: llvm/test/MC/ARM/implicit-it-generation-v8.s === --- /dev/null +++ llvm/test/MC/ARM/implicit-it-generation-v8.s @@ -0,0 +1,9 @@ +@ RUN: llvm-mc -triple
[PATCH] D112420: [clang][ARM] PACBTI-M assembly support
stuij updated this revision to Diff 390314. stuij marked 2 inline comments as done. stuij added a comment. addressed review comment and clang-format suggestions Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D112420/new/ https://reviews.llvm.org/D112420 Files: clang/test/Driver/armv8.1m.main.c llvm/include/llvm/Support/ARMTargetParser.def llvm/include/llvm/Support/ARMTargetParser.h llvm/lib/Target/ARM/ARM.td llvm/lib/Target/ARM/ARMInstrThumb2.td llvm/lib/Target/ARM/ARMPredicates.td llvm/lib/Target/ARM/ARMRegisterInfo.td llvm/lib/Target/ARM/ARMSubtarget.h llvm/lib/Target/ARM/ARMSystemRegister.td llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp llvm/test/CodeGen/Thumb/high-reg-clobber.mir llvm/test/MC/ARM/armv8.1m-pacbti-error.s llvm/test/MC/ARM/armv8.1m-pacbti.s llvm/test/MC/ARM/implicit-it-generation-v8.s llvm/test/MC/Disassembler/ARM/armv8.1m-pacbti.txt Index: llvm/test/MC/Disassembler/ARM/armv8.1m-pacbti.txt === --- /dev/null +++ llvm/test/MC/Disassembler/ARM/armv8.1m-pacbti.txt @@ -0,0 +1,137 @@ +# RUN: llvm-mc -triple thumbv8.1m.main-arm-none-eabi -mattr=+pacbti -disassemble %s 2> /dev/null | FileCheck %s + +0x51,0xfb,0x02,0x0f +0x5e,0xfb,0x0d,0xcf +0xaf,0xf3,0x2d,0x80 +0x51,0xfb,0x12,0x0f +0xaf,0xf3,0x0f,0x80 +0x61,0xfb,0x02,0xf0 +0x6e,0xfb,0x0d,0xfc +0xaf,0xf3,0x1d,0x80 +0xaf,0xf3,0x0d,0x80 +0x80,0xf3,0x20,0x88 +0x80,0xf3,0x21,0x88 +0x80,0xf3,0x22,0x88 +0x80,0xf3,0x23,0x88 +0x80,0xf3,0x24,0x88 +0x80,0xf3,0x25,0x88 +0x80,0xf3,0x26,0x88 +0x80,0xf3,0x27,0x88 +0x80,0xf3,0xa0,0x88 +0x80,0xf3,0xa1,0x88 +0x80,0xf3,0xa2,0x88 +0x80,0xf3,0xa3,0x88 +0x80,0xf3,0xa4,0x88 +0x80,0xf3,0xa5,0x88 +0x80,0xf3,0xa6,0x88 +0x80,0xf3,0xa7,0x88 +0xef,0xf3,0x20,0x80 +0xef,0xf3,0x21,0x80 +0xef,0xf3,0x22,0x80 +0xef,0xf3,0x23,0x80 +0xef,0xf3,0x24,0x80 +0xef,0xf3,0x25,0x80 +0xef,0xf3,0x26,0x80 +0xef,0xf3,0x27,0x80 +0xef,0xf3,0xa0,0x80 +0xef,0xf3,0xa1,0x80 +0xef,0xf3,0xa2,0x80 +0xef,0xf3,0xa3,0x80 +0xef,0xf3,0xa4,0x80 +0xef,0xf3,0xa5,0x80 +0xef,0xf3,0xa6,0x80 +0xef,0xf3,0xa7,0x80 + +# Test softfail encodings +0xa7,0xf3,0x1d,0x80 +0xab,0xf3,0x1d,0x80 +0xad,0xf3,0x1d,0x80 +0xae,0xf3,0x1d,0x80 +0xaf,0xf3,0x1d,0x88 +0xaf,0xf3,0x1d,0xa0 +0xaf,0xf3,0x2d,0x80 +0xab,0xf3,0x2d,0x80 +0xad,0xf3,0x2d,0x80 +0xae,0xf3,0x2d,0x80 +0xaf,0xf3,0x2d,0x88 +0xaf,0xf3,0x2d,0xa0 +0xa7,0xf3,0x0f,0x80 +0xab,0xf3,0x0f,0x80 +0xad,0xf3,0x0f,0x80 +0xae,0xf3,0x0f,0x80 +0xaf,0xf3,0x0f,0x88 +0xaf,0xf3,0x0f,0xa0 +0xa7,0xf3,0x0d,0x80 +0xab,0xf3,0x0d,0x80 +0xad,0xf3,0x0d,0x80 +0xae,0xf3,0x0d,0x80 +0xaf,0xf3,0x0d,0x88 +0xaf,0xf3,0x0d,0xa0 + +# CHECK: autg r0, r1, r2 +# CHECK: autg r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: bxautr0, r1, r2 +# CHECK: bti +# CHECK: pacg r0, r1, r2 +# CHECK: pacg r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: pacbti r12, lr, sp +# CHECK: msr pac_key_p_0, r0 +# CHECK: msr pac_key_p_1, r0 +# CHECK: msr pac_key_p_2, r0 +# CHECK: msr pac_key_p_3, r0 +# CHECK: msr pac_key_u_0, r0 +# CHECK: msr pac_key_u_1, r0 +# CHECK: msr pac_key_u_2, r0 +# CHECK: msr pac_key_u_3, r0 +# CHECK: msr pac_key_p_0_ns, r0 +# CHECK: msr pac_key_p_1_ns, r0 +# CHECK: msr pac_key_p_2_ns, r0 +# CHECK: msr pac_key_p_3_ns, r0 +# CHECK: msr pac_key_u_0_ns, r0 +# CHECK: msr pac_key_u_1_ns, r0 +# CHECK: msr pac_key_u_2_ns, r0 +# CHECK: msr pac_key_u_3_ns, r0 +# CHECK: mrs r0, pac_key_p_0 +# CHECK: mrs r0, pac_key_p_1 +# CHECK: mrs r0, pac_key_p_2 +# CHECK: mrs r0, pac_key_p_3 +# CHECK: mrs r0, pac_key_u_0 +# CHECK: mrs r0, pac_key_u_1 +# CHECK: mrs r0, pac_key_u_2 +# CHECK: mrs r0, pac_key_u_3 +# CHECK: mrs r0, pac_key_p_0_ns +# CHECK: mrs r0, pac_key_p_1_ns +# CHECK: mrs r0, pac_key_p_2_ns +# CHECK: mrs r0, pac_key_p_3_ns +# CHECK: mrs r0, pac_key_u_0_ns +# CHECK: mrs r0, pac_key_u_1_ns +# CHECK: mrs r0, pac_key_u_2_ns +# CHECK: mrs r0, pac_key_u_3_ns + +# Softfail encodings +# CHECK: pac r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: bti +# CHECK: bti +# CHECK: bti +# CHECK: bti +# CHECK: bti +# CHECK: bti +# CHECK: pacbti r12, lr, sp +# CHECK: pacbti r12, lr, sp +# CHECK: pacbti r12, lr, sp +# CHECK: pacbti r12, lr, sp +# CHECK: pacbti r12, lr, sp +# CHECK: pacbti r12, lr, sp Index: llvm/test/MC/ARM/implicit-it-generation-v8.s === --- /dev/null +++ llvm/test/MC/ARM/implicit-it-generation-v8.s @@ -0,0 +1,9 @@ +@ RUN: llvm-mc -triple thumbv8.1m.main-arm-none-eabi -arm-implicit-it=always -mattr=+pacbti < %s -show-encoding | FileCheck %s + +autgeq r0,
[PATCH] D112420: [clang][ARM] PACBTI-M assembly support
labrinea accepted this revision. labrinea added a comment. This revision is now accepted and ready to land. Looks like you've addressed Oliver's comments. I don't have any new suggestions from my end. Just make sure you've removed the test xfail before merging. Comment at: clang/test/Driver/darwin-ld-lto.c:2 // REQUIRES: system-darwin - +// XFAIL: * // Check that ld gets "-lto_library". Seems accidental. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D112420/new/ https://reviews.llvm.org/D112420 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D112420: [clang][ARM] PACBTI-M assembly support
stuij marked 6 inline comments as done. stuij added a comment. A slight amendment to the description of the just uploaded patch amendment: PACG has also been made conditional. Comment at: llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp:6441 + Mnemonic == "csetm" || + Mnemonic == "autg" || Mnemonic == "aut" || + Mnemonic == "bxaut" || Mnemonic == "pacg" || Mnemonic == "pac" || ostannard wrote: > PACG, AUTG and BXAUT can be conditional, so shouldn't be in this list. Thanks. Besides removing these from this list and the one below, I've added a predicate operator to actually make them conditional. The description of the patch amend didn't mention PACG, but it too has been made conditional. Comment at: llvm/test/MC/ARM/armv8.1m-pacbti-error.s:3 + +// CHECK: error: invalid instruction +pac r0, r1, r2 ostannard wrote: > We should also test the cases where PACG/AUTG/BXAUT cannot use PC/SP. Thanks. Adding extra testcases uncovered a number of cases where the changes didn't match the spec. This should now be resolved. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D112420/new/ https://reviews.llvm.org/D112420 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D112420: [clang][ARM] PACBTI-M assembly support
stuij updated this revision to Diff 384721. stuij added a comment. Herald added subscribers: ormris, steven_wu. addressed review comments: - Added predicate operand to bxaut, autg. They will now also behave correctly in IT blocks. - Adjusted operator constraints for a number of instructions so these confirm to the specs. - Expanded tests to test above changes and permutation of allowed operators for instructions. - Addressed minor review comments. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D112420/new/ https://reviews.llvm.org/D112420 Files: clang/test/Driver/armv8.1m.main.c clang/test/Driver/darwin-ld-lto.c llvm/include/llvm/Support/ARMTargetParser.def llvm/include/llvm/Support/ARMTargetParser.h llvm/lib/Target/ARM/ARM.td llvm/lib/Target/ARM/ARMInstrThumb2.td llvm/lib/Target/ARM/ARMPredicates.td llvm/lib/Target/ARM/ARMRegisterInfo.td llvm/lib/Target/ARM/ARMSubtarget.h llvm/lib/Target/ARM/ARMSystemRegister.td llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp llvm/test/CodeGen/Thumb/high-reg-clobber.mir llvm/test/MC/ARM/armv8.1m-pacbti-error.s llvm/test/MC/ARM/armv8.1m-pacbti.s llvm/test/MC/ARM/implicit-it-generation-v8.s llvm/test/MC/Disassembler/ARM/armv8.1m-pacbti.txt Index: llvm/test/MC/Disassembler/ARM/armv8.1m-pacbti.txt === --- /dev/null +++ llvm/test/MC/Disassembler/ARM/armv8.1m-pacbti.txt @@ -0,0 +1,137 @@ +# RUN: llvm-mc -triple thumbv8.1m.main-arm-none-eabi -mattr=+pacbti -disassemble %s 2> /dev/null | FileCheck %s + +0x51,0xfb,0x02,0x0f +0x5e,0xfb,0x0d,0xcf +0xaf,0xf3,0x2d,0x80 +0x51,0xfb,0x12,0x0f +0xaf,0xf3,0x0f,0x80 +0x61,0xfb,0x02,0xf0 +0x6e,0xfb,0x0d,0xfc +0xaf,0xf3,0x1d,0x80 +0xaf,0xf3,0x0d,0x80 +0x80,0xf3,0x20,0x88 +0x80,0xf3,0x21,0x88 +0x80,0xf3,0x22,0x88 +0x80,0xf3,0x23,0x88 +0x80,0xf3,0x24,0x88 +0x80,0xf3,0x25,0x88 +0x80,0xf3,0x26,0x88 +0x80,0xf3,0x27,0x88 +0x80,0xf3,0xa0,0x88 +0x80,0xf3,0xa1,0x88 +0x80,0xf3,0xa2,0x88 +0x80,0xf3,0xa3,0x88 +0x80,0xf3,0xa4,0x88 +0x80,0xf3,0xa5,0x88 +0x80,0xf3,0xa6,0x88 +0x80,0xf3,0xa7,0x88 +0xef,0xf3,0x20,0x80 +0xef,0xf3,0x21,0x80 +0xef,0xf3,0x22,0x80 +0xef,0xf3,0x23,0x80 +0xef,0xf3,0x24,0x80 +0xef,0xf3,0x25,0x80 +0xef,0xf3,0x26,0x80 +0xef,0xf3,0x27,0x80 +0xef,0xf3,0xa0,0x80 +0xef,0xf3,0xa1,0x80 +0xef,0xf3,0xa2,0x80 +0xef,0xf3,0xa3,0x80 +0xef,0xf3,0xa4,0x80 +0xef,0xf3,0xa5,0x80 +0xef,0xf3,0xa6,0x80 +0xef,0xf3,0xa7,0x80 + +# Test softfail encodings +0xa7,0xf3,0x1d,0x80 +0xab,0xf3,0x1d,0x80 +0xad,0xf3,0x1d,0x80 +0xae,0xf3,0x1d,0x80 +0xaf,0xf3,0x1d,0x88 +0xaf,0xf3,0x1d,0xa0 +0xaf,0xf3,0x2d,0x80 +0xab,0xf3,0x2d,0x80 +0xad,0xf3,0x2d,0x80 +0xae,0xf3,0x2d,0x80 +0xaf,0xf3,0x2d,0x88 +0xaf,0xf3,0x2d,0xa0 +0xa7,0xf3,0x0f,0x80 +0xab,0xf3,0x0f,0x80 +0xad,0xf3,0x0f,0x80 +0xae,0xf3,0x0f,0x80 +0xaf,0xf3,0x0f,0x88 +0xaf,0xf3,0x0f,0xa0 +0xa7,0xf3,0x0d,0x80 +0xab,0xf3,0x0d,0x80 +0xad,0xf3,0x0d,0x80 +0xae,0xf3,0x0d,0x80 +0xaf,0xf3,0x0d,0x88 +0xaf,0xf3,0x0d,0xa0 + +# CHECK: autg r0, r1, r2 +# CHECK: autg r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: bxautr0, r1, r2 +# CHECK: bti +# CHECK: pacg r0, r1, r2 +# CHECK: pacg r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: pacbti r12, lr, sp +# CHECK: msr pac_key_p_0, r0 +# CHECK: msr pac_key_p_1, r0 +# CHECK: msr pac_key_p_2, r0 +# CHECK: msr pac_key_p_3, r0 +# CHECK: msr pac_key_u_0, r0 +# CHECK: msr pac_key_u_1, r0 +# CHECK: msr pac_key_u_2, r0 +# CHECK: msr pac_key_u_3, r0 +# CHECK: msr pac_key_p_0_ns, r0 +# CHECK: msr pac_key_p_1_ns, r0 +# CHECK: msr pac_key_p_2_ns, r0 +# CHECK: msr pac_key_p_3_ns, r0 +# CHECK: msr pac_key_u_0_ns, r0 +# CHECK: msr pac_key_u_1_ns, r0 +# CHECK: msr pac_key_u_2_ns, r0 +# CHECK: msr pac_key_u_3_ns, r0 +# CHECK: mrs r0, pac_key_p_0 +# CHECK: mrs r0, pac_key_p_1 +# CHECK: mrs r0, pac_key_p_2 +# CHECK: mrs r0, pac_key_p_3 +# CHECK: mrs r0, pac_key_u_0 +# CHECK: mrs r0, pac_key_u_1 +# CHECK: mrs r0, pac_key_u_2 +# CHECK: mrs r0, pac_key_u_3 +# CHECK: mrs r0, pac_key_p_0_ns +# CHECK: mrs r0, pac_key_p_1_ns +# CHECK: mrs r0, pac_key_p_2_ns +# CHECK: mrs r0, pac_key_p_3_ns +# CHECK: mrs r0, pac_key_u_0_ns +# CHECK: mrs r0, pac_key_u_1_ns +# CHECK: mrs r0, pac_key_u_2_ns +# CHECK: mrs r0, pac_key_u_3_ns + +# Softfail encodings +# CHECK: pac r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: bti +# CHECK: bti +# CHECK: bti +# CHECK: bti +# CHECK: bti +# CHECK: bti +# CHECK: pacbti r12, lr, sp +# CHECK: pacbti r12, lr, sp +# CHECK: pacbti r12, lr, sp +# CHECK: pacbti r12, lr, sp +# CHECK: pacbti r12, lr, sp +# CHECK: pacbti r12, lr, sp Index:
[PATCH] D112420: [clang][ARM] PACBTI-M assembly support
vhscampos added inline comments. Comment at: llvm/lib/Target/ARM/ARMInstrThumb2.td:4083 def : t2InstAlias<"csdb$p", (t2HINT 20, pred:$p), 1>; +def : t2InstAlias<"pacbti$p r12,lr,sp", (t2HINT 13, pred:$p), 1>; +def : t2InstAlias<"bti$p", (t2HINT 15, pred:$p), 1>; ostannard wrote: > Why are these needed in addition to the PACBTIHintSpaceInst instructions > below? Since these instructions are in the HINT space, without specifying inst aliases, they were printed in the HINT form when using llvm-mc instead of in their PACBTI form. Therefore I added these t2InstAlias instances. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D112420/new/ https://reviews.llvm.org/D112420 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D112420: [clang][ARM] PACBTI-M assembly support
ostannard added inline comments. Comment at: llvm/lib/Target/ARM/ARMInstrThumb2.td:4083 def : t2InstAlias<"csdb$p", (t2HINT 20, pred:$p), 1>; +def : t2InstAlias<"pacbti$p r12,lr,sp", (t2HINT 13, pred:$p), 1>; +def : t2InstAlias<"bti$p", (t2HINT 15, pred:$p), 1>; Why are these needed in addition to the PACBTIHintSpaceInst instructions below? Comment at: llvm/lib/Target/ARM/ARMInstrThumb2.td:5674 + +def t2AUTG : PACBTIAut<"autg", 0>; +def t2BXAUT : PACBTIAut<"bxaut", 1>; I think all of the `AUT` instructions need `hasSideEffects` set, since they can raise exceptions. Comment at: llvm/lib/Target/ARM/ARMInstrThumb2.td:5675 +def t2AUTG : PACBTIAut<"autg", 0>; +def t2BXAUT : PACBTIAut<"bxaut", 1>; +} This needs `isBranch` set, and a test added to test/MC/ARM/implicit-it-generation.s. Comment at: llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp:6441 + Mnemonic == "csetm" || + Mnemonic == "autg" || Mnemonic == "aut" || + Mnemonic == "bxaut" || Mnemonic == "pacg" || Mnemonic == "pac" || PACG, AUTG and BXAUT can be conditional, so shouldn't be in this list. Comment at: llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp:6590 + Mnemonic.startswith("vpt") || Mnemonic.startswith("vpst") || + Mnemonic == "pacg" || Mnemonic == "pac" || Mnemonic == "pacbti" || + Mnemonic == "autg" || Mnemonic == "aut" || Mnemonic == "bxaut" || Again, some of these are predicable. Comment at: llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp:12283 // FIXME: Unsupported extensions. - {ARM::AEK_OS, {}, {}}, +{ARM::AEK_OS, {}, {}}, {ARM::AEK_IWMMXT, {}, {}}, Unintentional formatting change. Comment at: llvm/test/MC/ARM/armv8.1m-pacbti-error.s:3 + +// CHECK: error: invalid instruction +pac r0, r1, r2 We should also test the cases where PACG/AUTG/BXAUT cannot use PC/SP. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D112420/new/ https://reviews.llvm.org/D112420 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D112420: [clang][ARM] PACBTI-M assembly support
stuij created this revision. Herald added subscribers: hiraditya, kristof.beyls. stuij requested review of this revision. Herald added projects: clang, LLVM. Herald added subscribers: llvm-commits, cfe-commits. Introduce assembly support for Armv8.1-M PACBTI extension. This is an optional extension in v8.1-M. There are 10 new system registers and 5 new instructions, all predicated on the feature. The attribute for llvm-mc is called "pacbti". For armclang, an architecture extension also called "pacbti" was created. This patch is part of a series that adds support for the PACBTI-M extension of the Armv8.1-M architecture, as detailed here: https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/armv8-1-m-pointer-authentication-and-branch-target-identification-extension The PACBTI-M specification can be found in the Armv8-M Architecture Reference Manual: https://developer.arm.com/documentation/ddi0553/latest The following people contributed to this patch: - Victor Campos - Ties Stuij Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D112420 Files: clang/test/Driver/armv8.1m.main.c llvm/include/llvm/Support/ARMTargetParser.def llvm/include/llvm/Support/ARMTargetParser.h llvm/lib/Target/ARM/ARM.td llvm/lib/Target/ARM/ARMInstrThumb2.td llvm/lib/Target/ARM/ARMPredicates.td llvm/lib/Target/ARM/ARMSubtarget.h llvm/lib/Target/ARM/ARMSystemRegister.td llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp llvm/test/MC/ARM/armv8.1m-pacbti-error.s llvm/test/MC/ARM/armv8.1m-pacbti.s llvm/test/MC/Disassembler/ARM/armv8.1m-pacbti.txt Index: llvm/test/MC/Disassembler/ARM/armv8.1m-pacbti.txt === --- /dev/null +++ llvm/test/MC/Disassembler/ARM/armv8.1m-pacbti.txt @@ -0,0 +1,137 @@ +# RUN: llvm-mc -triple thumbv8.1m.main-arm-none-eabi -mattr=+pacbti -disassemble %s 2> /dev/null | FileCheck %s + +0x51,0xfb,0x02,0x0f +0x5e,0xfb,0x0d,0xcf +0xaf,0xf3,0x2d,0x80 +0x51,0xfb,0x12,0x0f +0xaf,0xf3,0x0f,0x80 +0x61,0xfb,0x02,0xf0 +0x6e,0xfb,0x0d,0xfc +0xaf,0xf3,0x1d,0x80 +0xaf,0xf3,0x0d,0x80 +0x80,0xf3,0x20,0x88 +0x80,0xf3,0x21,0x88 +0x80,0xf3,0x22,0x88 +0x80,0xf3,0x23,0x88 +0x80,0xf3,0x24,0x88 +0x80,0xf3,0x25,0x88 +0x80,0xf3,0x26,0x88 +0x80,0xf3,0x27,0x88 +0x80,0xf3,0xa0,0x88 +0x80,0xf3,0xa1,0x88 +0x80,0xf3,0xa2,0x88 +0x80,0xf3,0xa3,0x88 +0x80,0xf3,0xa4,0x88 +0x80,0xf3,0xa5,0x88 +0x80,0xf3,0xa6,0x88 +0x80,0xf3,0xa7,0x88 +0xef,0xf3,0x20,0x80 +0xef,0xf3,0x21,0x80 +0xef,0xf3,0x22,0x80 +0xef,0xf3,0x23,0x80 +0xef,0xf3,0x24,0x80 +0xef,0xf3,0x25,0x80 +0xef,0xf3,0x26,0x80 +0xef,0xf3,0x27,0x80 +0xef,0xf3,0xa0,0x80 +0xef,0xf3,0xa1,0x80 +0xef,0xf3,0xa2,0x80 +0xef,0xf3,0xa3,0x80 +0xef,0xf3,0xa4,0x80 +0xef,0xf3,0xa5,0x80 +0xef,0xf3,0xa6,0x80 +0xef,0xf3,0xa7,0x80 + +# Test softfail encodings +0xa7,0xf3,0x1d,0x80 +0xab,0xf3,0x1d,0x80 +0xad,0xf3,0x1d,0x80 +0xae,0xf3,0x1d,0x80 +0xaf,0xf3,0x1d,0x88 +0xaf,0xf3,0x1d,0xa0 +0xaf,0xf3,0x2d,0x80 +0xab,0xf3,0x2d,0x80 +0xad,0xf3,0x2d,0x80 +0xae,0xf3,0x2d,0x80 +0xaf,0xf3,0x2d,0x88 +0xaf,0xf3,0x2d,0xa0 +0xa7,0xf3,0x0f,0x80 +0xab,0xf3,0x0f,0x80 +0xad,0xf3,0x0f,0x80 +0xae,0xf3,0x0f,0x80 +0xaf,0xf3,0x0f,0x88 +0xaf,0xf3,0x0f,0xa0 +0xa7,0xf3,0x0d,0x80 +0xab,0xf3,0x0d,0x80 +0xad,0xf3,0x0d,0x80 +0xae,0xf3,0x0d,0x80 +0xaf,0xf3,0x0d,0x88 +0xaf,0xf3,0x0d,0xa0 + +# CHECK: autg r0, r1, r2 +# CHECK: autg r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: bxautr0, r1, r2 +# CHECK: bti +# CHECK: pacg r0, r1, r2 +# CHECK: pacg r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: pacbti r12, lr, sp +# CHECK: msr pac_key_p_0, r0 +# CHECK: msr pac_key_p_1, r0 +# CHECK: msr pac_key_p_2, r0 +# CHECK: msr pac_key_p_3, r0 +# CHECK: msr pac_key_u_0, r0 +# CHECK: msr pac_key_u_1, r0 +# CHECK: msr pac_key_u_2, r0 +# CHECK: msr pac_key_u_3, r0 +# CHECK: msr pac_key_p_0_ns, r0 +# CHECK: msr pac_key_p_1_ns, r0 +# CHECK: msr pac_key_p_2_ns, r0 +# CHECK: msr pac_key_p_3_ns, r0 +# CHECK: msr pac_key_u_0_ns, r0 +# CHECK: msr pac_key_u_1_ns, r0 +# CHECK: msr pac_key_u_2_ns, r0 +# CHECK: msr pac_key_u_3_ns, r0 +# CHECK: mrs r0, pac_key_p_0 +# CHECK: mrs r0, pac_key_p_1 +# CHECK: mrs r0, pac_key_p_2 +# CHECK: mrs r0, pac_key_p_3 +# CHECK: mrs r0, pac_key_u_0 +# CHECK: mrs r0, pac_key_u_1 +# CHECK: mrs r0, pac_key_u_2 +# CHECK: mrs r0, pac_key_u_3 +# CHECK: mrs r0, pac_key_p_0_ns +# CHECK: mrs r0, pac_key_p_1_ns +# CHECK: mrs r0, pac_key_p_2_ns +# CHECK: mrs r0, pac_key_p_3_ns +# CHECK: mrs r0, pac_key_u_0_ns +# CHECK: mrs r0, pac_key_u_1_ns +# CHECK: mrs r0, pac_key_u_2_ns +# CHECK: mrs r0, pac_key_u_3_ns + +# Softfail encodings +# CHECK: pac r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: pac r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: aut r12, lr, sp +# CHECK: aut r12, lr, sp +#