Christian Anthon wrote: > 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 <[EMAIL PROTECTED]> > 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
Yes, this is a SSE instruction. Probably easiest to have a SSE and a non-SSE build for the moment. (conditionally using SSE has the disadvantage of these optimisation not being included on SSE machines). Jon
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Bug-gnubg mailing list [email protected] http://lists.gnu.org/mailman/listinfo/bug-gnubg
