On 2/25/26 4:39 PM, H.J. Lu wrote:
TARGET_PROMOTE_PROTOTYPES is an optimization, not an ABI requirement.
TARGET_PROMOTE_FUNCTION_MODE should be used for ABI requirement. Like
xtensa, mcore ABI requires sign extension of signed 8/16-bit integer
arguments to 32 bits and zero extension of unsigned integer 8/16-bit
arguments to 32 bits:
1. Rename xtensa_promote_function_mode to
default_promote_function_mode_sign_extend to sign-extend signed 8/16-bit
integer arguments to 32 bits and zero-extend of unsigned 8/16-bit
integer arguments to 32 bits.
2. Replace xtensa_promote_function_mode with
default_promote_function_mode_sign_extend.
3. Remove TARGET_PROMOTE_PROTOTYPES for mcore and define
TARGET_PROMOTE_FUNCTION_MODE with
default_promote_function_mode_sign_extend to properly extend 8/16-bit
arguments to 32 bits.
Targets with the same ABI requirement should define
TARGET_PROMOTE_FUNCTION_MODE with
default_promote_function_mode_sign_extend.
I'm interested in this patch for the BPF backend, where we need to
change the ABI to caller-side args/return value promotion. I was
initially leaning towards default_promote_function_mode_default_mode()
but then this might be a better fit as BPF CPUv4 has a similar special
sign extending mov which extends only 8/16-bit signed values to 32-bits
only and zeroes out the upper 32-bit of 64-bit word.
The canonical move for sign extension of 8/16/32-bits to 64-bits exists
as well.
In that light does it make sense to use this in bpf.
Also from the the documentation of new default function, it is not clear
what happens to upper 32-bits or if this is intended only or 32-bit
backends: I quote the comment there
+/* Sign-extend signed 8/16-bit integer arguments to 32 bits and
+ zero-extend unsigned 8/16-bit integer arguments to 32 bits. */
Thx,
-Vineet
gcc/
PR target/119979
PR target/120888
* targhooks.cc (default_promote_function_mode_sign_extend): New.
* targhooks.h (default_promote_function_mode_sign_extend):
Likewise.
* config/mcore/mcore.cc (TARGET_PROMOTE_FUNCTION_MODE): Use
default_promote_function_mode_sign_extend.
(TARGET_PROMOTE_PROTOTYPES): Removed.
* config/xtensa/xtensa.cc (xtensa_promote_function_mode): Removed.
(TARGET_PROMOTE_FUNCTION_MODE): Use
default_promote_function_mode_sign_extend.
gcc/testsuite/
PR target/119979
PR target/120888
* gcc.target/xtensa/pr120888-1.c: Removed to ...
* gcc.dg/zero-extend.c: This. Enable for mcore and xtensa.
* gcc.target/xtensa/pr120888-2.c: Removed to ...
* gcc.dg/sign-extend.c: This. Enable for mcore and xtensa.