diff options
author | Matt Turner <mattst88@gmail.com> | 2008-02-23 05:42:32 +0000 |
---|---|---|
committer | Matt Turner <mattst88@gmail.com> | 2008-02-23 05:42:32 +0000 |
commit | e510996901c57f36f226d0eec3c929fb8b69b8e0 (patch) | |
tree | 7fa347e74b00812c7fabf03476d4583c192ceea3 /glpong3d.c | |
parent | 78002dcadcad1317a22277684e7f5675f568038c (diff) |
Use inline-asm only with gcc. Add fallback for other compilers
git-svn-id: svn://mattst88.com/svn/glpong3d/trunk@19 4dd1920e-271a-0410-bca0-81b404a81564
Diffstat (limited to 'glpong3d.c')
-rw-r--r-- | glpong3d.c | 19 |
1 files changed, 12 insertions, 7 deletions
@@ -451,18 +451,23 @@ void GLPong_CleanUp() { } -__inline__ unsigned int NextPow2(unsigned int value) { +static __inline__ unsigned int +NextPow2(unsigned int value) { +#if (defined __i386__ || defined __amd64__ || defined __x86_64__) \ + && (defined __GNUC__) unsigned int x; -#ifdef __i386__ - __asm("dec %1\n\t" - "movl $2,%0\n\t" - "bsr %1,%1\n\t" - "shl %b1,%0\n\t" + __asm( + "dec %1 \n\t" /* so that if the number is a power of + * two we don't change it + */ + "movl $2,%0 \n\t" + "bsr %1,%1 \n\t" + "shl %b1,%0 \n\t" : "=r" (x) : "c" (value) ); #else - x = 1; + unsigned int x = 0; while (x < value) { x *= 2; } |