delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2000/05/19/22:13:29

Message-Id: <3.0.6.32.20000519211524.007c7290@pop.crosswinds.net>
X-Sender: shinelight AT pop DOT crosswinds DOT net
X-Mailer: QUALCOMM Windows Eudora Light Version 3.0.6 (32)
Date: Fri, 19 May 2000 21:15:24 -0500
To: djgpp AT delorie DOT com
From: "Thomas J. Hruska" <shinelight AT crosswinds DOT net>
Subject: Inline ASM question...
In-Reply-To: <391a83ec.5977837@news.freeserve.net>
References: <8empao$5k6$1 AT nnrp02 DOT primenet DOT com>
<390ef9f9$0$72098 AT SSP1NO17 DOT highway DOT telekom DOT at>
<8emvhq$7mn$1 AT nnrp03 DOT primenet DOT com>
<3 DOT 0 DOT 6 DOT 32 DOT 20000505015633 DOT 007b2210 AT pop DOT crosswinds DOT net>
<3 DOT 0 DOT 6 DOT 32 DOT 20000510204858 DOT 007b6e40 AT pop DOT crosswinds DOT net>
<3 DOT 0 DOT 6 DOT 32 DOT 20000511021045 DOT 007af4a0 AT pop DOT crosswinds DOT net>
Mime-Version: 1.0
Reply-To: djgpp AT delorie DOT com
Errors-To: nobody AT delorie DOT com
X-Mailing-List: djgpp AT delorie DOT com
X-Unsubscribes-To: listserv AT delorie DOT com

Hello, I am doing that inline ASM thing...again.  The situation is that I
am trying to speed up screen dumps from a buffer to the video buffer using
far pointers.  The idea here is to perform the buffer copy using only one
far pointer reference and a rep.  So, I loaded esi, edi, and ecx with the
appropriate values (I hope).  After clearing the direction flag, I followed
<sys/farptr.h>'s example for moving data (hence, the .byte 0x64).  However,
the problem comes in that rep movsl (or movsd, movs, movll, movb, movsb,
mobsbb, etc.) does not assemble.  The objective is to get the framerate up
from 48 fps to 60 fps (maybe 70 fps) with this code.  NOTE:  The current
selector is _dos_ds when the inline ASM executes (also, assume that y =
0x10000, x = screen_width * screen_height, x2 = 0).

      __asm__ __volatile__ ("
        pushl %%esi
        pushl %%edi
        movl %0, %%esi
        movl %1, %%edi
        movl %2, %%ecx
        cld
        .byte 0x64
        rep movsl
        popl %%edi
        popl %%esi"
        :
        : "g" (&CurrMode.Buffer[x2]), "g" (0xB0000 - y), "g" ((x - x2) %
0x10000));

Thanks for any help in advance!


           Thomas J. Hruska -- shinelight AT crosswinds DOT net
Shining Light Productions -- "Meeting the needs of fellow programmers"
                  http://www.shininglightpro.com/

- Raw text -


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