Kevin Day wrote:
>
> > >
> > > To follow up, this still happens in 3.2 beta 1. What can I do to help track
> > > this down further?
> >
> >
> > To disable that one function and use the default C implementation instead,
> > I think this would work:
> >
> > Modify Mesa/src/X86/x86.c in the gl_init_x86_asm_transforms() function:
> >
> >
> > void gl_init_x86_asm_transforms( void )
> > {
> > #ifdef USE_X86_ASM
> > void *save = gl_transform_tab[0][3][MATRIX_3D_NO_ROT]; /* save C function */
> <snip>
> >
> > gl_transform_tab[0][3][MATRIX_3D_NO_ROT] = save; /* restore C function */
> > ...
> > ...
> >
> > It'll generate a warning, but it should work.
>
> Did that, here's what I get now:
>
> Starting program: /tmp/mesa/junk
>
> Program received signal SIGFPE, Arithmetic exception.
> transform_points3_3d_no_rot_raw (to_vec=0x80b4000, mat=0x80b5000, from_vec=0x80b500c,
> mask=0x18 <Error reading address 0x18: Bad address>, flag=4) at xform_tmp.h:680
> 680 to[i][0] = m0 * ox + m12 ;
> (gdb) bt
> #0 transform_points3_3d_no_rot_raw (to_vec=0x80b4000, mat=0x80b5000,
>from_vec=0x80b500c,
> mask=0x18 <Error reading address 0x18: Bad address>, flag=4) at xform_tmp.h:680
> #1 0x2 in ?? ()
> #2 0x80b2030 in ?? ()
> (gdb) info float
> u: status 0x90a8: exceptions: OVERF LOS; flags: 0000; top 2
> e: status 0x1000: flags: 0000; top 2
> control 0x1260: compute to 53 bits; round NEAREST; mask: LOS;
> last instruction: opcode 0x158; pc 0x1f:0x2814e16e; operand 0x2f:0x80b2068
> regno tag msb lsb value
> %st(5) valid 4005f000000000000000 120
> %st(4) valid 400dffff000000000000 32767.5
> %st(3) valid 4006a000000000000000 160
> %st(2) valid 4005f000000000000000 120
> %st(1) valid 400dffff000000000000 32767.5
> %st(0) => valid 4085b074bb8a94000000 3.00224e+40
> %st(7) empty 400dffff000000000000 32767.5
> %st(6) empty 4005f000000000000000 120
> (gdb) list
> 675 (void) flag;
> 676 ASSERT(mat->type == MATRIX_3D_NO_ROT);
> 677 STRIDE_LOOP {
> 678 CLIP_CHECK {
> 679 const GLfloat ox = from[0], oy = from[1], oz = from[2];
> 680 to[i][0] = m0 * ox + m12 ;
> 681 to[i][1] = m5 * oy + m13 ;
> 682 to[i][2] = m10 * oz + m14 ;
> 683 }
> 684 }
> (gdb) print to[i][0]
> $1 = -0.199290305
> (gdb) print m0
> $2 = 4.18664068e-34
> (gdb) print ox
> No symbol "ox" in current context.
> (gdb) print m12
> $3 = -1.49981213
>
> Is 'ox' a macro, or did it get optimized out?
Probably the later. Try recompiling with -g.
The fact that you get the same error both with the C code and the ASM
code hints that the real problem is elsewhere/earlier.
> Attached is a program that will compile cleanly without any of our junk. It
> renders to a dummy osmesa buffer that doesn't get used. :) I'm playing on my
> home machine which is on FreeBSD 4.0, which has all the FP exceptions
> (except for division-by-zero) masked off by default, so I added the
> fpsetmask line to make sure they're on. Our development target is on 3.2,
> which has them all on.
I'll try to look at your code later. I'm super busy with other things now.
If anyone else can investigate, that would be great.
-Brian
_______________________________________________
Mesa-bug maillist - [EMAIL PROTECTED]
http://lists.mesa3d.org/mailman/listinfo/mesa-bug
_______________________________________________
Mesa-dev maillist - [EMAIL PROTECTED]
http://lists.mesa3d.org/mailman/listinfo/mesa-dev