[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug-gnubg] gnubg sse problems on non-sse cpu's
From: |
Christian Anthon |
Subject: |
[Bug-gnubg] gnubg sse problems on non-sse cpu's |
Date: |
Wed, 5 Apr 2006 23:06:52 +0200 |
User-agent: |
Mutt/1.5.10i |
Hi all,
I wrote to the mingw-users list about the sse problem on athlons. It
seems that basically the sse code has to be entirely separated from the
rest. Only this way can one compile with -msse on those file that need
it and not the rest. It seems that -msse tells gcc that it may use sse
extensions and it does so even in places where it is not explicitely
told so by the gnubg code.
In essence gnubg dies with sigill (illegal instruction) on both linux
and windows, when the cpu doesn't have sse support. The problem is in
a integer->float typecast.
On linux gnubg(without board3d) ran through gdb gives:
Program received signal SIGILL, Illegal instruction.
[Switching to Thread -1222429008 (LWP 26181)]
0x080e4213 in SetColourX (arColour=0x87652a4, sz=0xbf902cae "#FF3333")
at renderprefs.c:130
130 arColour[ 0 ] = anColour[ 0 ] / 255.0f;
(gdb) disas
Dump of assembler code for function SetColourX:
0x080e41d0 <SetColourX+0>: push %ebp
0x080e41d1 <SetColourX+1>: mov %esp,%ebp
0x080e41d3 <SetColourX+3>: push %esi
0x080e41d4 <SetColourX+4>: mov %eax,%esi
0x080e41d6 <SetColourX+6>: mov $0x3b,%eax
0x080e41db <SetColourX+11>: push %ebx
0x080e41dc <SetColourX+12>: sub $0x30,%esp
0x080e41df <SetColourX+15>: mov %edx,%ebx
0x080e41e1 <SetColourX+17>: mov %eax,0x4(%esp)
0x080e41e5 <SetColourX+21>: mov %edx,(%esp)
0x080e41e8 <SetColourX+24>: call 0x806e714 <address@hidden>
0x080e41ed <SetColourX+29>: test %eax,%eax
0x080e41ef <SetColourX+31>: je 0x80e41f4 <SetColourX+36>
0x080e41f1 <SetColourX+33>: movb $0x0,(%eax)
0x080e41f4 <SetColourX+36>: lea 0xffffffe8(%ebp),%edx
0x080e41f7 <SetColourX+39>: mov %ebx,%eax
0x080e41f9 <SetColourX+41>: call 0x80e4080 <SetColour>
0x080e41fe <SetColourX+46>: test %eax,%eax
0x080e4200 <SetColourX+48>: mov $0xffffffff,%edx
0x080e4205 <SetColourX+53>: jne 0x80e424d <SetColourX+125>
0x080e4207 <SetColourX+55>: movzbl 0xffffffe8(%ebp),%eax
0x080e420b <SetColourX+59>: xor %edx,%edx
0x080e420d <SetColourX+61>: flds 0x823744c
0x080e4213 <SetColourX+67>: cvtsi2ss %eax,%xmm0
0x080e4217 <SetColourX+71>: movzbl 0xffffffe9(%ebp),%eax
0x080e421b <SetColourX+75>: movss %xmm0,0xffffffe4(%ebp)
0x080e4220 <SetColourX+80>: cvtsi2ss %eax,%xmm0
0x080e4224 <SetColourX+84>: flds 0xffffffe4(%ebp)
0x080e4227 <SetColourX+87>: movzbl 0xffffffea(%ebp),%eax
0x080e422b <SetColourX+91>: fdiv %st(1),%st
0x080e422d <SetColourX+93>: movss %xmm0,0xffffffe4(%ebp)
0x080e4232 <SetColourX+98>: cvtsi2ss %eax,%xmm0
0x080e4236 <SetColourX+102>: fstpl (%esi)
0x080e4238 <SetColourX+104>: flds 0xffffffe4(%ebp)
0x080e423b <SetColourX+107>: movss %xmm0,0xffffffe4(%ebp)
0x080e4240 <SetColourX+112>: fdiv %st(1),%st
0x080e4242 <SetColourX+114>: fstpl 0x8(%esi)
0x080e4245 <SetColourX+117>: flds 0xffffffe4(%ebp)
0x080e4248 <SetColourX+120>: fdivp %st,%st(1)
0x080e424a <SetColourX+122>: fstpl 0x10(%esi)
0x080e424d <SetColourX+125>: add $0x30,%esp
0x080e4250 <SetColourX+128>: mov %edx,%eax
0x080e4252 <SetColourX+130>: pop %ebx
0x080e4253 <SetColourX+131>: pop %esi
0x080e4254 <SetColourX+132>: pop %ebp
0x080e4255 <SetColourX+133>: ret
---Type <return> to continue, or q <return> to quit---
End of assembler dump.
(gdb) quit
Christian.
--
"I can't promise that I'll try. But, I'll try to try." -- Bart
- [Bug-gnubg] gnubg sse problems on non-sse cpu's,
Christian Anthon <=