Article View: gnu.gcc.bug
Article #2386volatile unsigned short reference problem
From: satz
Date: Sun, 12 Mar 1989 06:35
Date: Sun, 12 Mar 1989 06:35
75 lines
1958 bytes
1958 bytes
The following program when compiled on SunOS 3.5 (3/280) using gcc 1.34
loads the wrong byte from a volatile location.
typedef struct foo1 {
volatile unsigned short *data;
volatile unsigned short *status;
} footype;
void test (ptr)
footype *ptr;
{
register unsigned int status;
register int flag;
register unsigned char c;
while ((status = *ptr->status) & 1) {
c = *ptr->data;
if (status & 128) {
while (*ptr->status & 1)
c = *ptr->data;
c = 0;
flag = doit(ptr,c,1);
}
}
}
The temporary variable c when declared as a char gets the upper byte of
*ptr->data instead of the lower. The workaround we used was to declare c as
an unsigned short.
gcc version 1.34
/usr/src/gnu/gcc-1.34/cpp -v -DCSC2 -I../h -undef -D__GNUC__ -Dmc68000 -Dsun -Dunix -D__mc68000__ -D__sun__ -D__unix__ -D__OPTIMIZE__ -D__HAVE_68881__ -Dmc68020 foo.c /tmp/cca12938.cpp
GNU CPP version 1.34
/usr/src/gnu/gcc-1.34/cc1 /tmp/cca12938.cpp -quiet -dumpbase foo.c -O -W -version -o foo.s
GNU C version 1.34 (68k, MIT syntax) compiled by GNU C version 1.34.
#NO_APP
gcc_compiled.:
.text
.even
.globl _test
_test:
link a6,#0
moveml #0x2020,sp@-
movel a6@(8),a2
clrl d2
jra L2
L8:
movel a2@,a0
moveb a0@(1),d0 <-- off by one
tstb d2
jge L2
movel a2@(4),a1
jra L5
L7:
movel a2@,a0
moveb a0@(1),d0
L5:
movew a1@,d0
btst #0,d0
jne L7
pea 1:w
clrl sp@-
movel a2,sp@-
jbsr _doit
addw #12,sp
L2:
movel a2@(4),a0
movew a0@,a0
movew a0,d2
btst #0,d2
jne L8
moveml a6@(-8),#0x404
unlk a6
rts
Technical Details
Message-ID:
<8903120607.AA17514@prep.ai.mit.edu>Path:
arc1-ca.pugleaf.net!utzoo!telly!attcan!uunet!tut.cis.ohio-state.edu!CISCO.COM!satzShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!telly!attcan!uunet!tut.cis.ohio-state.edu!CISCO.COM!satz From: satz@CISCO.COM Newsgroups: gnu.gcc.bug Subject: volatile unsigned short reference problem Message-ID: <8903120607.AA17514@prep.ai.mit.edu> Date: 12 Mar 89 06:35:12 GMT Sender: daemon@tut.cis.ohio-state.edu Distribution: gnu Organization: GNUs Not Usenet Lines: 75