As parameters (8, 16, 32 bits)
8, 16, 32 bits integers are always passed, on the stack, as full width 32 bits values1.
No extension, signed or zeroed, is needed.
The callee will just use the lower part of
the full width values.
//C prototype of the callee
void __attribute__((cdecl)) foo(char ...