On Wed, Aug 17, 2022 at 12:32 PM Takayuki 'January June' Suwa <jjsuwa_sys3...@yahoo.co.jp> wrote: > > This patch enforces the use of "addmi" machine instruction instead of > addition/subtraction with two source registers for adjusting the stack > pointer, if the adjustment fits into a signed 16-bit and is also a multiple > of 256. > > /* example */ > void test(void) { > char buffer[4096]; > __asm__(""::"m"(buffer)); > } > > ;; before > test: > movi.n a9, 1 > slli a9, a9, 12 > sub sp, sp, a9 > movi.n a9, 1 > slli a9, a9, 12 > add.n sp, sp, a9 > addi sp, sp, 0 > ret.n > > ;; after > test: > addmi sp, sp, -0x1000 > addmi sp, sp, 0x1000 > ret.n > > gcc/ChangeLog: > > * config/xtensa/xtensa.cc (xtensa_expand_prologue): > Use an "addmi" machine instruction for updating the stack pointer > rather than addition/subtraction via hard register A9, if the amount > of change satisfies the literal value conditions of that instruction > when the CALL0 ABI is used. > (xtensa_expand_epilogue): Ditto. > And also inhibit the stack pointer addition of constant zero. > --- > gcc/config/xtensa/xtensa.cc | 79 +++++++++++++++++++++++++------------ > 1 file changed, 54 insertions(+), 25 deletions(-)
Regtested for target=xtensa-linux-uclibc, no new regressions. Committed to master. -- Thanks. -- Max