[PATCH] Add default_promote_function_mode_sign_extend

Vineet Gupta vineet.gupta@linux.dev
Mon Mar 2 20:27:55 GMT 2026


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.
> 
> 



More information about the bpf mailing list