From: Martin Harriss <martin@Princeton.EDU>
To: 9fans@cse.psu.edu
Subject: Re: [9fans] gcc x86 assembly help
Date: Fri, 1 Jun 2001 22:53:20 -0400 [thread overview]
Message-ID: <3B185520.BA8CCC3B@princeton.edu> (raw)
In-Reply-To: <20010601225409.1D11D199C0@mail.cse.psu.edu>
Russ Cox wrote:
>
> Ishwar has been trying to compile drawterm on a
> Linux 2.4 kernel. The drawterm code (like the Inferno
> code before it) depends on the fact that there are
> different TSS registers in each process in Linux,
> but this changed in 2.4 so the Linux-specific code
> broke.
>
> He's now trying to use the pthread-specific code
> (which works well under FreeBSD and Irix), but gets
> a weird message from gcc about "impossible register
> constraint in asm" on the x86 test-and-set code.
>
> typedef struct Lock Lock;
> struct Lock {
> int val;
> };
>
> int
> canlock(Lock *l)
> {
> int v;
>
> __asm__( "movl $1, %%eax\n\t"
> "xchgl %%eax,(%%ebx)"
> : "=a" (v)
> : "ebx" (&l->val)
> );
> switch(v) {
> case 0: return 1;
> case 1: return 0;
> default: print("canlock: corrupted 0x%lux\n", v);
> }
> return 0;
> }
>
> Does anyone with more gcc inline assembly experience
> know what's wrong with this (or what changed in gcc
> in the latest Linux distributions to make it start
> rejecting this)?
>
> Thanks.
> Russ
I think the problem may be the "ebx" constraint. I've never seen it
written like that -- I thought that for the [e]bx register the
constraint was simply "b". The current manual seems to confirm that.
Can you try "b" and see if you have any luck?
Martin
Reference: http://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_16.html#SEC175
next prev parent reply other threads:[~2001-06-02 2:53 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-06-01 22:54 Russ Cox
2001-06-02 2:53 ` Martin Harriss [this message]
2001-06-04 8:48 ` Hermann Samso
2001-06-02 2:56 Russ Cox
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3B185520.BA8CCC3B@princeton.edu \
--to=martin@princeton.edu \
--cc=9fans@cse.psu.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).