This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
sign/zero extension of function arguments on x86-64
- From: Rafael Espindola <espindola at google dot com>
- To: GCC Mailing List <gcc at gcc dot gnu dot org>
- Date: Fri, 13 Mar 2009 19:29:27 +0000
- Subject: sign/zero extension of function arguments on x86-64
This is similar to the discussion that happened some time ago about
extending return values. The decisions for that was that the callee
could just leave the higher bits undefined and the caller would
extent the result if it needed to.
We have a similar issue with function arguments. We compile
void g(short);
void f(short a) {
g(a);
}
into
f:
.LFB2:
movswl %di,%edi
jmp g
we should really be able to remove the movswl. If the caller
is required to do sign extension, who called f has
extended the argument already. If the callee is required,
then g will do it and there is no need for f to do it.
What is more interesting is the case
void g(int);
void f(short a) {
g(a);
}
Can f assume that its caller did a sign extension or
it is its responsibility to extend A?
Cheers,
--
Rafael Avila de Espindola
Google | Gordon House | Barrow Street | Dublin 4 | Ireland
Registered in Dublin, Ireland | Registration Number: 368047