* Re: [parisc-linux] input constraints in atomic.h too loose ?
[not found] <200702022215.50914.vapier@gentoo.org>
@ 2007-02-10 21:01 ` John David Anglin
0 siblings, 0 replies; 6+ messages in thread
From: John David Anglin @ 2007-02-10 21:01 UTC (permalink / raw)
To: Mike Frysinger; +Cc: parisc-linux
> static void __lll_mutex_lock(int *futex)
> {
> int lws_errno = 14;
> int lws_ret;
> asm (
> "0: \n\t"
> "copy %3, %%r26 \n\t"
> "copy %4, %%r25 \n\t"
> "copy %5, %%r24 \n\t"
> "ble " "0xb0" "(%%sr2, %%r0) \n\t"
> "ldi " "0" ", %%r20 \n\t"
> "cmpib,=,n " "11" ",%%r21,0b \n\t"
> "nop \n\t"
> "stw %%r28, %0 \n\t"
> "sub %%r0, %%r21, %%r21 \n\t"
> "stw %%r21, %1 \n\t"
> : "=m" (lws_ret), "=m"(lws_errno), "=m"(*futex)
> : "r"(futex), "r"(0), "r"(1)
> :"r1", "r26", "r25", "r24", "r23", "r22", "r21", "r20", "r28", "r31", "memory"
> );
> }
Aren't lws_errno and lws_ret supposed to be global? As is, they
are just local variables and do nothing.
Dave
--
J. David Anglin dave.anglin@nrc-cnrc.gc.ca
National Research Council of Canada (613) 990-0752 (FAX: 952-6602)
_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux
^ permalink raw reply [flat|nested] 6+ messages in thread
[parent not found: <119aab440702111029h147c9ad5u602262ede5ea64d6@mail.gmail.com>]
[parent not found: <119aab440702110947u418c907eu19c3044230874df4@mail.gmail.com>]
[parent not found: <119aab440702110918k1aca7744rc8abb50949a22069@mail.gmail.com>]
[parent not found: <200702102101.l1AL11Ai017315@hiauly1.hia.nrc.ca>]
* Re: [parisc-linux] input constraints in atomic.h too loose ?
[not found] <200702102101.l1AL11Ai017315@hiauly1.hia.nrc.ca>
@ 2007-02-11 4:42 ` Mike Frysinger
0 siblings, 0 replies; 6+ messages in thread
From: Mike Frysinger @ 2007-02-11 4:42 UTC (permalink / raw)
To: John David Anglin; +Cc: parisc-linux
[-- Attachment #1.1: Type: text/plain, Size: 1211 bytes --]
On Saturday 10 February 2007, John David Anglin wrote:
> > static void __lll_mutex_lock(int *futex)
> > {
> > int lws_errno = 14;
> > int lws_ret;
> > asm (
> > "0: \n\t"
> > "copy %3, %%r26 \n\t"
> > "copy %4, %%r25 \n\t"
> > "copy %5, %%r24 \n\t"
> > "ble " "0xb0" "(%%sr2, %%r0) \n\t"
> > "ldi " "0" ", %%r20 \n\t"
> > "cmpib,=,n " "11" ",%%r21,0b \n\t"
> > "nop \n\t"
> > "stw %%r28, %0 \n\t"
> > "sub %%r0, %%r21, %%r21 \n\t"
> > "stw %%r21, %1 \n\t"
> >
> > : "=m" (lws_ret), "=m"(lws_errno), "=m"(*futex)
> > : "r"(futex), "r"(0), "r"(1)
> > :"r1", "r26", "r25", "r24", "r23", "r22", "r21", "r20", "r28", "r31",
> > : "memory"
> >
> > );
> > }
>
> Aren't lws_errno and lws_ret supposed to be global? As is, they
> are just local variables and do nothing.
right, as they should be i think ... the sample here is reduced preprocessed
code so you lose the visibility that ___lll_mutex_lock() is really just an
expanded macro from the atomic.h header and you lose a lot of the actual code
(i removed the stuff that wasnt involved with the bad code generation)
lws_ret for sure should not be a local variable as that is the return value
-mike
[-- Attachment #1.2: Type: application/pgp-signature, Size: 827 bytes --]
[-- Attachment #2: Type: text/plain, Size: 169 bytes --]
_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux
^ permalink raw reply [flat|nested] 6+ messages in thread
* [parisc-linux] input constraints in atomic.h too loose ?
@ 2007-02-03 3:15 Mike Frysinger
0 siblings, 0 replies; 6+ messages in thread
From: Mike Frysinger @ 2007-02-03 3:15 UTC (permalink / raw)
To: parisc-linux
[-- Attachment #1.1: Type: text/plain, Size: 903 bytes --]
while building glibc-2.5/cvs with gcc-4.1.1, i hit an error about invalid
operands in the locking code ... looks like the declared constraints for the
inputs in atomic.h are too loose ?
$ hppa2.0-unknown-linux-gnu-gcc -O1 -fPIC vfprintf.i -c
/tmp/ccvCRbqg.s: Assembler messages:
/tmp/ccvCRbqg.s:41: Error: bad expression
/tmp/ccvCRbqg.s:41: Error: bad expression
/tmp/ccvCRbqg.s:41: Error: bad expression
/tmp/ccvCRbqg.s:41: Error: bad expression
/tmp/ccvCRbqg.s:41: Error: bad expression
/tmp/ccvCRbqg.s:41: Error: bad expression
/tmp/ccvCRbqg.s:41: Error: Invalid operands
/tmp/ccvCRbqg.s:43: Error: bad expression
/tmp/ccvCRbqg.s:43: Error: bad expression
/tmp/ccvCRbqg.s:43: Error: bad expression
/tmp/ccvCRbqg.s:43: Error: bad expression
/tmp/ccvCRbqg.s:43: Error: bad expression
/tmp/ccvCRbqg.s:43: Error: bad expression
/tmp/ccvCRbqg.s:43: Error: Invalid operands
-mike
[-- Attachment #1.2: Type: application/pgp-signature, Size: 827 bytes --]
[-- Attachment #2: vfprintf.i --]
[-- Type: text/x-objcsrc, Size: 834 bytes --]
static void __lll_mutex_lock(int *futex)
{
int lws_errno = 14;
int lws_ret;
asm (
"0: \n\t"
"copy %3, %%r26 \n\t"
"copy %4, %%r25 \n\t"
"copy %5, %%r24 \n\t"
"ble " "0xb0" "(%%sr2, %%r0) \n\t"
"ldi " "0" ", %%r20 \n\t"
"cmpib,=,n " "11" ",%%r21,0b \n\t"
"nop \n\t"
"stw %%r28, %0 \n\t"
"sub %%r0, %%r21, %%r21 \n\t"
"stw %%r21, %1 \n\t"
: "=m" (lws_ret), "=m"(lws_errno), "=m"(*futex)
: "r"(futex), "r"(0), "r"(1)
:"r1", "r26", "r25", "r24", "r23", "r22", "r21", "r20", "r28", "r31", "memory"
);
}
typedef struct {
char *_IO_write_end;
int lock;
} _IO_FILE;
__attribute__ ((__nothrow__)) __attribute__ ((noinline))
static int buffered_vfprintf(_IO_FILE *s)
{
char buf[8192];
_IO_FILE *hp;
hp->_IO_write_end = buf;
__lll_mutex_lock(&s->lock);
}
void foo(_IO_FILE *s)
{
buffered_vfprintf(s);
}
[-- Attachment #3: vfprintf.s --]
[-- Type: text/plain, Size: 1348 bytes --]
.LEVEL 1.1
.text
.align 4
.type buffered_vfprintf, @function
buffered_vfprintf:
.PROC
.CALLINFO FRAME=8320,CALLS,SAVE_RP,ENTRY_GR=7
.ENTRY
stw %r2,-20(%r30)
addil L'8320,%r30
ldo R'8320(%r1),%r30
stw %r8,-112(%r30)
stw %r7,-108(%r30)
stw %r6,-104(%r30)
stw %r5,-100(%r30)
stw %r4,-96(%r30)
stw %r19,-32(%r30)
copy %r26,%r8
ldil L'-16384,%r28
ldo 8072(%r28),%r28
addl %r30,%r28,%r6
stw %r6,0(%r28)
ldo 4(%r26),%r5
ldil L'8192,%r7
addl %r6,%r7,%r20
ldi 14,%r28
stw %r28,0(%r20)
ldi 0,%r2
ldi 1,%r29
ldil L'16384,%r4
ldo -8188(%r4),%r4
#APP
0:
copy %r5, %r26
copy %r2, %r25
copy %r29, %r24
ble 0xb0(%sr2, %r0)
ldi 0, %r20
cmpib,=,n 11,%r21,0b
nop
stw %r28, %r6(%r4)
sub %r0, %r21, %r21
stw %r21, %r6(%r7)
#NO_APP
ldw -112(%r30),%r8
ldw -108(%r30),%r7
ldw -104(%r30),%r6
ldw -100(%r30),%r5
ldw -96(%r30),%r4
addil L'-8320,%r30
ldo R'-8320(%r1),%r30
ldw -20(%r30),%r2
bv,n %r0(%r2)
.EXIT
.PROCEND
.size buffered_vfprintf, .-buffered_vfprintf
.align 4
.globl foo
.type foo, @function
foo:
.PROC
.CALLINFO FRAME=64,CALLS,SAVE_RP,ENTRY_GR=3
.ENTRY
stw %r2,-20(%r30)
stwm %r4,64(%r30)
bl buffered_vfprintf,%r2
stw %r19,-32(%r30)
ldw -84(%r30),%r2
bv %r0(%r2)
ldwm -64(%r30),%r4
.EXIT
.PROCEND
.size foo, .-foo
.ident "GCC: (GNU) 4.1.1 (Gentoo 4.1.1-r3)"
[-- Attachment #4: Type: text/plain, Size: 169 bytes --]
_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2007-02-11 18:48 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <200702022215.50914.vapier@gentoo.org>
2007-02-10 21:01 ` [parisc-linux] input constraints in atomic.h too loose ? John David Anglin
[not found] <119aab440702111029h147c9ad5u602262ede5ea64d6@mail.gmail.com>
2007-02-11 18:48 ` John David Anglin
[not found] <119aab440702110947u418c907eu19c3044230874df4@mail.gmail.com>
2007-02-11 17:59 ` John David Anglin
[not found] <119aab440702110918k1aca7744rc8abb50949a22069@mail.gmail.com>
2007-02-11 17:36 ` John David Anglin
[not found] <200702102101.l1AL11Ai017315@hiauly1.hia.nrc.ca>
2007-02-11 4:42 ` Mike Frysinger
2007-02-03 3:15 Mike Frysinger
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.