On Sun, Jun 22, 2025 at 9:54 PM Max Filippov <jcmvb...@gmail.com> wrote: > > On Sun, Jun 22, 2025 at 5:49 AM Takayuki 'January June' Suwa > <jjsuwa_sys3...@yahoo.co.jp> wrote: > > > > On 2025/06/22 6:41, Max Filippov wrote: > > > On Sat, Jun 21, 2025 at 2:12 PM Takayuki 'January June' Suwa > > > <jjsuwa_sys3...@yahoo.co.jp> wrote: > > >> > > >> That hook has since been deprecated > > >> (commit a670ebde3995481225ec62b29686ec07a21e5c10) and has led to > > >> incorrect > > >> results on Xtensa: > > >> > > >> /* example */ > > >> #define <stdint.h> > > >> uint32_t __attribute__((noinline)) test0(uint32_t a, uint16_t b) { > > >> return a + b; > > >> } > > >> uint32_t __attribute__((noinline)) test1(uint32_t a, uint32_t b) { > > >> return test0(a, b); > > >> } > > >> > > >> ;; before (-mabi=call0) > > >> test0: > > >> add.n a2, a3, a2 > > >> ret.n > > >> test1: > > >> sext a3, a3, 15 ;; NG, do not sign-extend > > >> j.l test0, a9 > > >> > > >> ;; after (-mabi=call0) > > >> test0: > > >> extui a3, a3, 0, 16 ;; OK > > >> add.n a2, a3, a2 > > >> ret.n > > >> test1: > > >> j.l test0, a9 > > >> > > >> With this patch, the result is consistent with other targets such as > > >> AArch64. > > >> > > >> gcc/ChangeLog: > > >> > > >> * config/xtensa/xtensa.cc > > >> (TARGET_PROMOTE_PROTOTYPES, TARGET_PROMOTE_FUNCTION_MODE): > > >> Remove. > > >> --- > > >> gcc/config/xtensa/xtensa.cc | 5 ----- > > >> 1 file changed, 5 deletions(-) > > > > > > This results in a bunch of ICEs with the following backtrace: > > > > > How about leaving TARGET_PROMOTE_FUNCTION_MODE and just removing > > TARGET_PROMOTE_PROTOTYPES?
commit a670ebde3995481225ec62b29686ec07a21e5c10 Author: H.J. Lu <hjl.to...@gmail.com> Date: Thu Nov 21 07:54:35 2024 +0800 Drop targetm.promote_prototypes from C, C++ and Ada frontends dropped targetm.calls.promote_prototypes in FEs. But commit 78db4753c9646a372512e6a951fced12f74de0bc Author: H.J. Lu <hjl.to...@gmail.com> Date: Thu Nov 21 08:11:06 2024 +0800 Honor TARGET_PROMOTE_PROTOTYPES during RTL expand used targetm.calls.promote_prototypes. TARGET_PROMOTE_PROTOTYPES shouldn't be removed. > The sign extension of signed char function arguments is missing with > this change, > breaking the ABI, e.g > > void s8(signed char c); > void cs8(signed char *c) > { > s8(*c); > } > > is translated to > > cs8: > entry sp, 32 > l8ui a10, a2, 0 > call8 s8 > retw.n > > -- > Thanks. > -- Max -- H.J.