public inbox for gcc-help@gcc.gnu.org
 help / color / mirror / Atom feed
From: mperrin@hcs.harvard.edu (Marshall Perrin)
To: help-gcc@gnu.org
Subject: Assembler in C under Linux
Date: Fri, 31 Dec 1999 22:24:00 -0000	[thread overview]
Message-ID: <slrn84dhpn.ihf.mperrin@hcs.harvard.edu> (raw)
Message-ID: <19991231222400.64FkEZIec7CfcfI-2xCwkoAapD3vwwPR_xy7XClRDNI@z> (raw)

I'm trying to port a driver for a digital signal processor card from
DOS to Linux. The DOS driver, developed by someone not me ;-), is
mostly C but has a fair amount of inline assembler.  For Borland C for 
DOS, this was pretty easy to do. Just
  asm {
      mov dx, DSP_BaseIO
      add dx, reg_offset
 }
etc etc.

Gcc of course chokes on the above. I've attempted to read through the gcc
documentation and figure out how to do this, but no luck. That led me 
towards something like

    asm("mov dx, %0" : : "d" (DSP32C_BaseIo));
    asm("add dx, %0" : : "d" (reg_offset));
    asm("in ax,dx");
    asm("mov %0,ax"  :"=d" (value) : );

And yet I get the error message "/tmp/ccAimSJo.s:818: Error: 
operands given don't match any known 386 instruction" over and over again
with that approach.

Poking through the kernel source leads me to try something like

    asm("mov %%edx, %0" : : "b" (DSP_BaseIo));
    asm("add %%edx, %0" : : "b" (reg_offset));
    asm("in %%eax,%%edx");
    asm("mov %0,%%eax"  :"=b" (value) : );

But that's no luck either - If I comment out the third line, that compiles, 
but if the 3rd line is there I get "/tmp/ccGjg9uV.s:26: Error: bad 
register name ('%%eax')", which makes little sense as I use %%eax just fine
in the other three instructions.

So, what am I doing wrong? Any help here would be greatly appreciated, whether it be 
pointer to a web page, book, or some other source of information. Thanks much!

 - Marshall Perrin
   Harvard/Smithsonian Center for Astrophysics


             reply	other threads:[~1999-12-31 22:24 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1999-12-02 11:37 Marshall Perrin [this message]
1999-12-04 22:51 ` Martin Kahlert
1999-12-31 22:24   ` Martin Kahlert
1999-12-31 22:24 ` Marshall Perrin

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=slrn84dhpn.ihf.mperrin@hcs.harvard.edu \
    --to=mperrin@hcs.harvard.edu \
    --cc=help-gcc@gnu.org \
    /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 read-only IMAP folder(s) and NNTP newsgroup(s).