[Bug c/43162] New: option to set the "promoted" type of parameters of calculus
etienne_lorrain at yahoo dot fr
gcc-bugzilla@gcc.gnu.org
Wed Feb 24 11:30:00 GMT 2010
In C, variables are promoted to unsigned int or int before operations like
adding or multiplying so that we have on ia32 PC:
unsigned char uc1 = 0x10, uc2 = 0x10;
printf ("0x%X\n", uc1*uc2); -> display 0x100
unsigned short us1 = 0x1000, us2 = 0x10;
printf ("0x%X\n", us1*us2); -> display 0x10000
That doesn't work for unsigned long long, by design we have:
unsigned u1 = 0x10000000, u2 = 0x10;
printf ("0x%llX\n", (unsigned long long)(u1*u2)); -> display 0x0
It "would be nice" to be able to set the size to promote operands before
operations to either int/unsigned (as now) or long long/unsigned long long
to have the intended result on lines like:
unsigned long long ull = u1 * u2; // with previous values of u1 and u2...
Nothing else should be changed by this option, default parameter size
of printf() should still be int/unsigned, so that a line like:
unsigned u3 = u1 * u2;
would be optimised to the same assembly instructions whatever the value
of the switch.
--
Summary: option to set the "promoted" type of parameters of
calculus
Product: gcc
Version: 4.5.0
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: etienne_lorrain at yahoo dot fr
GCC build triplet: any
GCC host triplet: any
GCC target triplet: any
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43162
More information about the Gcc-bugs
mailing list