Hi Andy! Nice trick, but gcc likes to reorder loads and causes SIGFPE when converting to integer (assuming exceptions are enabled). Such as here:
lib.c:67: int len = 0, start = (int)naNumValue(args[1]).num; if(argc < 2) return naNil(); nlen = argc > 2 ? naNumValue(args[2]) : naNil(); if(!naIsNil(nlen)) len = (int)nlen.num; gcc creates code that performs: len = (int)nlen.num; if(naIsNil(nlen)) nlen = 0; 0x986256 <f_subvec+70>: xor %r13d,%r13d 0x986259 <f_subvec+73>: callq 0x986b50 <naIsNil> 0x98625e <f_subvec+78>: mov %rbx,(%rsp) 0x986262 <f_subvec+82>: movlpd 0x8(%rsp),%xmm2 0x986268 <f_subvec+88>: test %eax,%eax 0x98626a <f_subvec+90>: movlpd (%rsp),%xmm0 0x98626f <f_subvec+95>: mov %r14,%rdi 0x986272 <f_subvec+98>: cvttsd2si %xmm2,%ebp 0x986276 <f_subvec+102>: cvttsd2si %xmm0,%edx 0x98627a <f_subvec+106>: cmove %edx,%r13d This may qualify as a gcc bug. I am using version 4.1.2, I guess I need to try a newer version. -- Csaba/Jester ------------------------------------------------------------------------------ _______________________________________________ Flightgear-devel mailing list Flightgear-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/flightgear-devel