bruno@future.gipsi.fr (Bruno Verlyck) (07/13/89)
Compiler: GCC 1.35
System: SunOS Release 4.0_Export, or Sun Release 3.5EXPORT
Machine: Sun 3/mc68020
Verbose:
gcc -v -S bug.i
gcc version 1.35
/usr/local/lib/gcc-cc1 bug.i -quiet -version -o bug.s
GNU C version 1.35 (68k, MIT syntax) compiled by GNU C version 1.35.
There is no asm generated for the flagged line in the following
source. Note that if the (useless) `({ })' around the asm construct
is removed, the bug disappears. (BTW, I don't know *why* it was
written like this.)
Source:
typedef struct {
unsigned char address_base;
unsigned char address_mask;
unsigned int enable : 1;
unsigned int unused0 : 4;
unsigned int cache_inhibit : 1;
unsigned int read_write : 1;
unsigned int read_write_mask : 1;
unsigned int unused1 : 1;
unsigned int func_code_base : 3;
unsigned int unused2 : 1;
unsigned int func_code_mask : 3;
} Transparency_Reg;
void
main ()
{
Transparency_Reg ttr;
ttr.address_mask = 0;
ttr.address_base = 0x10000000 >> 24 ;
ttr.enable = 1;
ttr.cache_inhibit = 0;
ttr.read_write = 0;
ttr.read_write_mask = 1;
ttr.func_code_base = 0;
ttr.func_code_mask = 7; <---------------- this line is `ignored'
({ asm ("pmove %0,tt0" : : "m" (*(&ttr))); }) ;
}
Generated code:
#NO_APP
gcc_compiled.:
.text
.even
.globl _main
_main:
link a6,#-4
clrb a6@(-3) # ttr.address_mask = 0;
moveb #16,a6@(-4) # ttr.address_base = 0x10000000 >> 24 ;
movel a6@(-4),d0
orw #32768,d0
movel d0,a6@(-4) # ttr.enable = 1;
andw #64511,d0
movel d0,a6@(-4) # ttr.cache_inhibit = 0;
andw #65023,d0
movel d0,a6@(-4) # ttr.read_write = 0;
orw #256,d0
movel d0,a6@(-4) # ttr.read_write_mask = 1;
bfclr a6@(-4){#25:#3} # ttr.func_code_base = 0;
# ttr.func_code_mask = 7; ???
#APP
pmove a6@(-4),tt0 # ({ asm ("pmove %0,tt0" : : "m" (*(&ttr))); }) ;
#NO_APP
unlk a6
rts