From e06cabb8aa1e2e90555b71bd6634db17c882bc25 Mon Sep 17 00:00:00 2001 From: hendricks266 Date: Wed, 15 Jun 2016 07:08:48 +0000 Subject: [PATCH] Remove x86 asm pragmas for readpixel and drawpixel and replace them with their C versions. This fixes a crash in the editor's 2D mode, reported by Paul B. git-svn-id: https://svn.eduke32.com/eduke32@5781 1a8010ca-5511-0410-912e-c29ae57300e0 --- .../eduke32/build/include/pragmas_x86_gcc.h | 13 +++---------- .../eduke32/build/include/pragmas_x86_msvc.h | 18 ++---------------- 2 files changed, 5 insertions(+), 26 deletions(-) diff --git a/polymer/eduke32/build/include/pragmas_x86_gcc.h b/polymer/eduke32/build/include/pragmas_x86_gcc.h index 64cc9f435..37541be74 100644 --- a/polymer/eduke32/build/include/pragmas_x86_gcc.h +++ b/polymer/eduke32/build/include/pragmas_x86_gcc.h @@ -451,16 +451,9 @@ void copybufreverse(const void *S, void *D, int32_t c); : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ __d; }) -#define readpixel(D) \ - ({ void *__D=(D); int32_t __a; \ - __asm__ __volatile__ ("movb (%%edi), %%al" \ - : "=a" (__a): "D" (__D) : "cc"); \ - __a; }) -#define drawpixel(D,a) \ - ({ void *__D=(D); int32_t __a=(a); \ - __asm__ __volatile__ ("movb %%al, (%%edi)" \ - : : "D" (__D), "a" (__a) : "memory", "cc"); \ - 0; }) +FORCE_INLINE char readpixel(void *s) { return *(char *)s; } +FORCE_INLINE void drawpixel(void *s, char a) { *(char *)s = a; } + #define clearbuf(D,c,a) \ ({ void *__D=(D); int32_t __c=(c), __a=(a); \ __asm__ __volatile__ ("rep; stosl" \ diff --git a/polymer/eduke32/build/include/pragmas_x86_msvc.h b/polymer/eduke32/build/include/pragmas_x86_msvc.h index 14328fbc7..6207da205 100644 --- a/polymer/eduke32/build/include/pragmas_x86_msvc.h +++ b/polymer/eduke32/build/include/pragmas_x86_msvc.h @@ -82,22 +82,8 @@ static __inline int32_t dmulscale32(int32_t a, int32_t d, int32_t S, int32_t D) } } -static __inline char readpixel(void *d) -{ - _asm { - mov edx, d - mov al, byte ptr[edx] - } -} - -static __inline void drawpixel(void *d, char a) -{ - _asm { - mov edx, d - mov al, a - mov byte ptr[edx], al - } -} +static __inline char readpixel(void *s) { return *(char *)s; } +static __inline void drawpixel(void *s, char a) { *(char *)s = a; } static __inline void clearbuf(void *d, int32_t c, int32_t a) {