unsigned char -> unsigned int conversion
chris at umcp-cs.UUCP
chris at umcp-cs.UUCP
Mon Jun 18 14:14:03 AEST 1984
While testing the assertion that ``unsigned char'' types propagate
the ``unsigned''ness into expressions, I discovered something very
interesting in the 4.1BSD (PCC) C compiler. The compiler emits
``.long''s in the assembly output! Here's a sample:
unsigned char foo = 1;
main() {
if ((-1 | foo) > 0)
printf("hi there\n");
}
PCC output (slightly edited):
.data
.globl _foo
_foo:
.long 0x1
.data 1
L19:
.ascii "hi there\12\0"
.text
.align 1
.globl _main
_main:
.word L13
movzbl _foo,r0
bisl2 $-1,r0
jeql L17
pushl $L19
calls $1,_printf
L17:
ret
.set L13,0x0
.data
Further experimentation shows that all ``static'' variables, and all
initialized variables, are generated with a minimum size of 4 bytes.
This apparently includes arrays as well (but ``char c[8]'' doesn't
generate 32 bytes).
I guess PCC is trying to keep things longword-aligned.
As to the original point, we can see from the ``jeql'' (as opposed to
``jgtr'') that PCC *does* propagate the unsigned attribute.
--
In-Real-Life: Chris Torek, Univ of MD Comp Sci (301) 454-7690
UUCP: {seismo,allegra,brl-bmd}!umcp-cs!chris
CSNet: chris at umcp-cs ARPA: chris at maryland
More information about the Comp.lang.c
mailing list