[ARM] Factor out CMSE register clearing code
commit9b5945c3f653ca8c5e89135c74b77201cea28ab9
authorthopre01 <thopre01@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 22 Nov 2017 15:58:22 +0000 (22 15:58 +0000)
committerthopre01 <thopre01@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 22 Nov 2017 15:58:22 +0000 (22 15:58 +0000)
tree518896eb9721f8ef7c85871655e1ed784b2ae673
parent74a5d13106e67c2ae510c23a07b65303c5e38a1f
[ARM] Factor out CMSE register clearing code

Functions cmse_nonsecure_call_clear_caller_saved and
cmse_nonsecure_entry_clear_before_return both contain very similar code
to clear registers. What's worse, they differ slightly at times so if a
bug is found in one careful thoughts is needed to decide whether the
other function needs fixing too.

This commit addresses the situation by factoring the two pieces of code
into a new function. In doing so the code generated to clear VFP
registers in cmse_nonsecure_call now uses the same sequence as
cmse_nonsecure_entry functions. Tests expectation are thus updated
accordingly.

2017-11-22  Thomas Preud'homme  <thomas.preudhomme@arm.com>

    gcc/
    * config/arm/arm.c (cmse_clear_registers): New function.
    (cmse_nonsecure_call_clear_caller_saved): Replace register clearing
    code by call to cmse_clear_registers.
    (cmse_nonsecure_entry_clear_before_return): Likewise.

    gcc/testsuite/
    * gcc.target/arm/cmse/mainline/hard-sp/cmse-13.c: Adapt expectations
    to vmov instructions now generated.
    * gcc.target/arm/cmse/mainline/hard-sp/cmse-7.c: Likewise.
    * gcc.target/arm/cmse/mainline/hard-sp/cmse-8.c: Likewise.
    * gcc.target/arm/cmse/mainline/hard/cmse-13.c: Likewise.
    * gcc.target/arm/cmse/mainline/hard/cmse-7.c: Likewise.
    * gcc.target/arm/cmse/mainline/hard/cmse-8.c: Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255065 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ChangeLog
gcc/config/arm/arm.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arm/cmse/mainline/hard-sp/cmse-13.c
gcc/testsuite/gcc.target/arm/cmse/mainline/hard-sp/cmse-7.c
gcc/testsuite/gcc.target/arm/cmse/mainline/hard-sp/cmse-8.c
gcc/testsuite/gcc.target/arm/cmse/mainline/hard/cmse-13.c
gcc/testsuite/gcc.target/arm/cmse/mainline/hard/cmse-7.c
gcc/testsuite/gcc.target/arm/cmse/mainline/hard/cmse-8.c