delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1998/06/28/08:16:00

Newsgroups: comp.os.msdos.djgpp
From: Elliott Oti <oti AT phys DOT uu DOT nl>
Subject: Re: DJGPP, inline and GAS
Sender: usenet AT phys DOT uu DOT nl (News system Tijgertje)
Message-ID: <Pine.OSF.3.95.980627012915.24169A-100000@ruunat.phys.uu.nl>
In-Reply-To: <6n0mqf$37j$1@news.worldonline.nl>
Date: Fri, 26 Jun 1998 23:35:01 GMT
References: <6n0mqf$37j$1 AT news DOT worldonline DOT nl>
Mime-Version: 1.0
Organization: Physics and Astronomy, University of Utrecht, The Netherlands
Lines: 42
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

On Fri, 26 Jun 1998, d-range wrote:

> Hi,
> 
> How can I convert the following WATCOM-style pragma to an inlined asm
> function under DJGPP? I tried for hours but I cannot get it to work ;-(
> 
> #pragma aux FixMul= "imul ebx",
>                                       "shrd eax,edx,16",
>                                        parms [eax] [ebx] modify [edx] value
> [eax];
> 
> I tried:
> 
> inline Fixed FixMul(int x, int y) __asm__ (    "imull %%ebx" \
> 
> "shrdl 16,%%edx,%%eax" \
>                                                                           :
> "=a" : "a" (x), "b" (y): "%edx" );
> 
> but I think I'm doing something terribly wrong. the shrd opcode isn't even
> recognized, and GCC (or GAS) gives a parse error before ':'

Try

inline long FixedMul(long x, long y)
{
  long c;
  asm("imull %%ebx              \n"
      "shrdl $16, %%edx, %%eax  \n"
      "=a"(c)
     :"a"(x),"b"(y)
     :"a","b","d"  );
   return c;
}


  Elliott Oti
  kamer 104, tel (030-253) 2516 (RvG)    
  http://www.fys.ruu.nl/~oti


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019