[Bug target/85606] [8 regression] Assembly file generated for ARM Cortex-M0 should not specify `.arch armv6-m` at all or use `.arch armv6s-m`
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85606 --- Comment #3 from Richard Earnshaw --- Author: rearnsha Date: Fri May 11 09:30:49 2018 New Revision: 260158 URL: https://gcc.gnu.org/viewcvs?rev=260158&root=gcc&view=rev Log: [arm] PR target/85606 prefer armv6s-m for armv6-m parts When Arm introduced ARMv6-M there were two variants, ARMv6-M and ARMv6S-M. The two differed only in support for the SVC instruction. Later on SVC was then made a mandatory part of ARMv6-M and the ARMv6S-M name was dropped. GCC and GAS, however still recognize both names and at least some versions of GAS still distinguish between the two. To address this, this patch changes the architecture for the ARMv6-m cortex parts (m0, m0plus, m1 and the variants will small multiply units) to use the ARMv6S-M name in conjunction with the assembler. This avoids problems with them rejecting code that was previously accepted with older versions of GCC where we did not pass an explicit architecture string through to the compiler when using -mcpu on the command line. PR target/85606 * config/arm/arm-cpus.in: Add comment that ARMv6-m and ARMv6S-m are now equivalent. (cortex-m0): Use armv6s-m isa. (cortex-m0plus): Likewise. (cortex-m1): Likewise. (cortex-m0.small-multiply): Likewise. (cortex-m0plus.small-multiply): Likewise. (cortex-m1.small-multiply): Likewise. Modified: branches/gcc-8-branch/gcc/ChangeLog branches/gcc-8-branch/gcc/config/arm/arm-cpus.in
[Bug target/85606] [8 regression] Assembly file generated for ARM Cortex-M0 should not specify `.arch armv6-m` at all or use `.arch armv6s-m`
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85606 --- Comment #2 from Richard Earnshaw --- Author: rearnsha Date: Fri May 11 09:28:10 2018 New Revision: 260157 URL: https://gcc.gnu.org/viewcvs?rev=260157&root=gcc&view=rev Log: [arm] PR target/85606 prefer armv6s-m for armv6-m parts When Arm introduced ARMv6-M there were two variants, ARMv6-M and ARMv6S-M. The two differed only in support for the SVC instruction. Later on SVC was then made a mandatory part of ARMv6-M and the ARMv6S-M name was dropped. GCC and GAS, however still recognize both names and at least some versions of GAS still distinguish between the two. To address this, this patch changes the architecture for the ARMv6-m cortex parts (m0, m0plus, m1 and the variants will small multiply units) to use the ARMv6S-M name in conjunction with the assembler. This avoids problems with them rejecting code that was previously accepted with older versions of GCC where we did not pass an explicit architecture string through to the compiler when using -mcpu on the command line. PR target/85606 * config/arm/arm-cpus.in: Add comment that ARMv6-m and ARMv6S-m are now equivalent. (cortex-m0): Use armv6s-m isa. (cortex-m0plus): Likewise. (cortex-m1): Likewise. (cortex-m0.small-multiply): Likewise. (cortex-m0plus.small-multiply): Likewise. (cortex-m1.small-multiply): Likewise. Modified: trunk/gcc/ChangeLog trunk/gcc/config/arm/arm-cpus.in
[Bug target/85606] [8 regression] Assembly file generated for ARM Cortex-M0 should not specify `.arch armv6-m` at all or use `.arch armv6s-m`
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85606 Richard Earnshaw changed: What|Removed |Added Status|UNCONFIRMED |NEW Last reconfirmed||2018-05-10 Target Milestone|--- |8.2 Summary|Assembly file generated for |[8 regression] Assembly |ARM Cortex-M0 should not|file generated for ARM |specify `.arch armv6-m` at |Cortex-M0 should not |all or use `.arch armv6s-m` |specify `.arch armv6-m` at ||all or use `.arch armv6s-m` Ever confirmed|0 |1 --- Comment #1 from Richard Earnshaw --- This is the convergence of a number of niggly issues. Initially Arm defined both ARMv6-M and ARMv6S-M. The two differed only by support for the SVC instruction in the latter. Later, they dropped the name ARMv6S-M but added support for SVC to ARMv6-M (in effect they made ARMv6-M equivalent to ARMv6S-M). To avoid massive churn on the assembler every time new CPU names are added, we changed GCC-8 to not emit CPU names directly into the assembler files (architecture names are much more stable and smaller in number); this makes it far more likely that you won't have to update GAS each time a new CPU name is added (a Good Thing TM). Cortex-m0, cortex-m0plus and cortex-m1 are all ARMv6-M parts, but they are really, in GCC/gas terminology ARMv6S-M parts. Gas seems to treat these CPUs as ARMv6S-M, but still distinguishes between v6-M and v6S-M, hence the failure reported. So I think the compiler should treat all these parts as ARMv6S-M going forward. That's a fairly simple change to arm-cpus.in. I think GAS needs some changes as well, to make .arch armv6-m be treated in the same way as armv6s-m, but that's a separate issue.