delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1997/07/16/15:48:58

From: Jeff Weeks <pweeks AT execulink DOT com>
Newsgroups: comp.os.msdos.djgpp
Subject: tips on optomizing my (inline asm) horizontal line function
Date: Wed, 16 Jul 1997 10:36:15 -0400
Organization: Code X Software
Lines: 62
Message-ID: <33CCDC5F.49A58E52@execulink.com>
NNTP-Posting-Host: ppp25.mars.execulink.com
Mime-Version: 1.0
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

I've written a fairly simple horizontal line function, and it works fast
compared to the others I've tried, but it uses up a lot of registers,
and there's probably a better way to do some things.  I was wondering if
anybody had any tips to pass along to reduce register use, or anything
to increase speed even more.  Every little bit counts.

Here's what it currently looks like.  Since I don't know how to do
comments in inline assembly I'll briefly describe it here.  First it
checks for an odd address, if so it movs a bytes, then it checks for a
word aligned address, if so it movs a word.  The rest is all dword
aligned dword writes, for maximum speed.  I currently don't have any
code to draw the remaining (up to 3) pixels of the end of the line (the
pixels that won't fit in a dword), so if anybody has fast code to do
that, it would also be appreciated.

Here it is:

void aligned_dwords(int x1, int x2, int y, char c) {
  if(x1 == x2) return;

  if(x1 > x2) {
    x1 ^= x2;
    x2 ^= x1;
    x1 ^= x2;
  }

  __asm__ __volatile__("
    movb %1, %%al;
    movb %%al, %%ah;
    shl $16, %%eax;
    movb %1, %%al;
    movb %%al, %%ah;

    test $1, %%edi;
    jz 0f;
    stosb;
    dec %%cx;
  0:
    movl %%edi, %%ebx;
    andl $2, %%ebx;
    jz 1f;
    stosw;
  1:
    shr $2, %%cx;
    rep; stosl"
    :
    : "D" (0xA0000+__djgpp_conventional_base+y*320+x1), "g" (c), "c"
((long)(x2-x1))
    : "ax", "bx", "cx", "di", "memory"
  );
}

Thank you very much,
Jeff Weeks

--------------------------------------------
            - Code X Software -
       Programming to a Higher Power
  
  email: mailto:pweeks AT execulink DOT com
  web:	 http://www.execulink.com/~pweeks/
--------------------------------------------

- Raw text -


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