On 22/05/2024 12:14, Torbjorn SVENSSON wrote: > Hello Richard, > > Thanks for the reply. > > From my point of view, at least the -fshort-enums part should be on all > branches. Just to be clean, maybe it's easier to backport the entire patch?
Yes, that's a fair point. I was only thinking about the broadening of the test to the other argument registers when I said that. So, just to be clear, OK all. R. > > Unless you have an objection, I would like to go ahead and just backport it > to all branches. > > Kind regards, > Torbjörn > > On 2024-05-22 12:55, Richard Earnshaw (lists) wrote: >> On 06/05/2024 12:50, Torbjorn SVENSSON wrote: >>> Hi, >>> >>> Forgot to mention when I sent the patch that I would like to commit it to >>> the following branches: >>> >>> - releases/gcc-11 >>> - releases/gcc-12 >>> - releases/gcc-13 >>> - releases/gcc-14 >>> - trunk >>> >> >> Well you can [commit it to the release branches], but I'm not sure it's >> essential. It seems pretty unlikely to me that this would regress on a >> release branch without having first regressed on trunk. >> >> R. >> >>> Kind regards, >>> Torbjörn >>> >>> On 2024-05-02 12:50, Torbjörn SVENSSON wrote: >>>> Add regression test to the existing zero/sign extend tests for CMSE to >>>> verify that r0, r1, r2 and r3 are properly extended, not just r0. >>>> >>>> boolCharShortEnumSecureFunc test is done using -O0 to ensure the >>>> instructions are in a predictable order. >>>> >>>> gcc/testsuite/ChangeLog: >>>> >>>> * gcc.target/arm/cmse/extend-param.c: Add regression test. Add >>>> -fshort-enums. >>>> * gcc.target/arm/cmse/extend-return.c: Add -fshort-enums option. >>>> >>>> Signed-off-by: Torbjörn SVENSSON <torbjorn.svens...@foss.st.com> >>>> --- >>>> .../gcc.target/arm/cmse/extend-param.c | 21 +++++++++++++++---- >>>> .../gcc.target/arm/cmse/extend-return.c | 4 ++-- >>>> 2 files changed, 19 insertions(+), 6 deletions(-) >>>> >>>> diff --git a/gcc/testsuite/gcc.target/arm/cmse/extend-param.c >>>> b/gcc/testsuite/gcc.target/arm/cmse/extend-param.c >>>> index 01fac786238..d01ef87e0be 100644 >>>> --- a/gcc/testsuite/gcc.target/arm/cmse/extend-param.c >>>> +++ b/gcc/testsuite/gcc.target/arm/cmse/extend-param.c >>>> @@ -1,5 +1,5 @@ >>>> /* { dg-do compile } */ >>>> -/* { dg-options "-mcmse" } */ >>>> +/* { dg-options "-mcmse -fshort-enums" } */ >>>> /* { dg-final { check-function-bodies "**" "" "" } } */ >>>> #include <arm_cmse.h> >>>> @@ -78,7 +78,6 @@ __attribute__((cmse_nonsecure_entry)) char >>>> enumSecureFunc (enum offset index) { >>>> if (index >= ARRAY_SIZE) >>>> return 0; >>>> return array[index]; >>>> - >>>> } >>>> /* >>>> @@ -88,9 +87,23 @@ __attribute__((cmse_nonsecure_entry)) char >>>> enumSecureFunc (enum offset index) { >>>> ** ... >>>> */ >>>> __attribute__((cmse_nonsecure_entry)) char boolSecureFunc (bool index) { >>>> - >>>> if (index >= ARRAY_SIZE) >>>> return 0; >>>> return array[index]; >>>> +} >>>> -} >>>> \ No newline at end of file >>>> +/* >>>> +**__acle_se_boolCharShortEnumSecureFunc: >>>> +** ... >>>> +** uxtb r0, r0 >>>> +** uxtb r1, r1 >>>> +** uxth r2, r2 >>>> +** uxtb r3, r3 >>>> +** ... >>>> +*/ >>>> +__attribute__((cmse_nonsecure_entry,optimize(0))) char >>>> boolCharShortEnumSecureFunc (bool a, unsigned char b, unsigned short c, >>>> enum offset d) { >>>> + size_t index = a + b + c + d; >>>> + if (index >= ARRAY_SIZE) >>>> + return 0; >>>> + return array[index]; >>>> +} >>>> diff --git a/gcc/testsuite/gcc.target/arm/cmse/extend-return.c >>>> b/gcc/testsuite/gcc.target/arm/cmse/extend-return.c >>>> index cf731ed33df..081de0d699f 100644 >>>> --- a/gcc/testsuite/gcc.target/arm/cmse/extend-return.c >>>> +++ b/gcc/testsuite/gcc.target/arm/cmse/extend-return.c >>>> @@ -1,5 +1,5 @@ >>>> /* { dg-do compile } */ >>>> -/* { dg-options "-mcmse" } */ >>>> +/* { dg-options "-mcmse -fshort-enums" } */ >>>> /* { dg-final { check-function-bodies "**" "" "" } } */ >>>> #include <arm_cmse.h> >>>> @@ -89,4 +89,4 @@ unsigned char __attribute__((noipa)) enumNonsecure0 >>>> (ns_enum_foo_t * ns_foo_p) >>>> unsigned char boolNonsecure0 (ns_bool_foo_t * ns_foo_p) >>>> { >>>> return ns_foo_p (); >>>> -} >>>> \ No newline at end of file >>>> +} >>