Samuel Devulder
Posts 248 03 Nov 2017 12:00
| Okay, we've trapped the culprit. Well done sir ! :D Let's do some unix tool wizardry:$ grep -e "\s\sf" d_scan68k.s | grep -v "^[*]" | \ sort | uniq | sed -e "s/ / /;s/^\s+/ /" and the bad boy must be one of: fadd fp0,fp2 ;fp2 = w + AMP2*2 fadd fp1,fp0 fadd fp1,fp3 ;fp3 = h + AMP2*2 fadd fp3,fp0 ;sdivz += sdivz16stepu fadd fp3,fp0 ;sdivz += sdivz8stepu fadd fp3,fp4 fadd fp4,fp1 ;tdivz += tdivz16stepu fadd fp4,fp1 ;tdivz += tdivz8stepu fadd fp5,fp2 ;zi += zi16stepu fadd fp5,fp2 ;zi += zi8stepu fadd fp5,fp4 ;fp4 = d_ziorigin + fp3 + fp4 fadd fp6,fp0 ;sdivz += fp6 fadd fp6,fp1 fadd fp6,fp1 ;tdivz += fp6 fadd fp7,fp2 fadd fp7,fp2 ;zi += fp7 fadd.s (a1)+,fp0 ;sdivz = d_sdivzorigin + fp0 + fp1 fadd.s (a1)+,fp1 ;tdivz = d_tdivzorigin + fp1 + fp6 fadd.s (a1)+,fp2 ;zi = d_ziorigin + fp2 + fp7 fadd.s (a6)+,fp0 ;sdivz = d_sdivzorigin + fp0 + fp1 fadd.s (a6)+,fp1 ;tdivz = d_tdivzorigin + fp1 + fp6 fadd.s (a6)+,fp2 ;zi = d_ziorigin + fp2 + fp7 fbne @D_DrawSpans16 fcmp.s #0,fp0 fdiv fp2,fp0 ;fp0=wratio*w/(w+AMP2*2) fdiv fp2,fp6 ;z = (float)0x10000 / zi fdiv fp2,fp7 ;z = (float)0x10000 / zi; fdiv fp3,fp1 ;fp1=hratio*h/(h+AMP2*2) fmove fp2,fp3 fmove fp6,fp3 fmove fp6,fp7 fmove fp7,fp1 ;fp1 = d_zistepu fmove fp7,fp4 fmove fp7,fp6 fmove.d _cl+CL_TIME,fp0 ;get cl.time fmove.l d0,fp2 ;fp2 = (float)u fmove.l d0,fp3 ;fp3 = (float)v fmove.l d1,fp2 ;du = (float)pspan->u fmove.l d2,fp7 ;dv = (float)pspan->v fmove.l d2,fp7 ;spancountminus1 = (float)(r_turb_spancount-1) fmove.l d2,fp7 ;spancountminus1 = (float)(spancount-1) fmove.l fp0,d0 ;(int)(cl.time*SPEED) fmove.l fp0,d4 ;(int)(cl.time*SPEED) fmove.l fp1,d4 ;izistep = d4 fmove.l fp2,d1 ;d1 = (int)fp2 fmove.l fp3,d1 ;d1 = (int)fp3 fmove.l fp4,d3 ;convert to integer fmove.l fp6,d4 ;convert to integer fmove.l fp6,d7 ;convert to integer fmove.l fp7,d5 ;convert to integer fmove.l fp7,d6 ;convert to integer fmove.l REFDEF_VRECT+VRECT_HEIGHT(a4),fp1 fmove.l REFDEF_VRECT+VRECT_WIDTH(a4),fp0 fmove.s #16,fp7 fmove.s #32768*65536,fp0 fmove.s #65536,fp6 fmove.s #65536,fp7 fmove.s #8,fp7 fmove.s #AMP2*2,fp2 fmove.s (a1)+,fp0 fmove.s (a1)+,fp1 fmove.s (a1)+,fp6 fmove.s (a6)+,fp0 fmove.s (a6)+,fp1 fmove.s (a6)+,fp6 fmove.s .szstpu(sp),fp3 fmove.s .tzstpu(sp),fp4 fmove.s .zistpu(sp),fp5 fmove.s _d_subdiv16+CVAR_VALUE,fp0 fmove.s _d_ziorigin,fp5 fmove.s _d_zistepu,fp7 fmove.s _d_zistepv,fp6 fmovem.x (sp)+,fp2/fp3 fmovem.x (sp)+,fp2-fp7 fmovem.x (sp)+,fp3-fp7 fmovem.x fp2/fp3,-(sp) fmovem.x fp2-fp7,-(sp) fmovem.x fp3-fp7,-(sp) fmul fp0,fp0 ;w*w fmul fp0,fp1 ;multiply by $8000*$10000 fmul fp0,fp2 ;(float)u * wratio*w/(w+AMP2*2) fmul fp0,fp4 ;izi = zi * $8000 * $10000 fmul fp0,fp6 ;fp2 = sdivz * z fmul fp0,fp6 ;fp6 = sdivz * z fmul fp0,fp7 ;fp7 = sdivz * z fmul fp1,fp1 ;h*h fmul fp1,fp3 ;(float)v*hratio*h/(h+AMP2*2) fmul fp1,fp6 ;fp6 = tdivz * z fmul fp1,fp7 ;fp7 = tdivz * z fmul fp2,fp0 ;fp0 = du * d_sdivzstepu fmul fp2,fp1 ;fp1 = du * d_tdivzstepu fmul fp7,fp1 ;fp1 = dv * d_sdivzstepv fmul fp7,fp3 ;sdivz16stepu = d_sdivzstepu * 16 fmul fp7,fp3 ;sdivz8stepu = d_sdivzstepu * 8 fmul fp7,fp4 ;tdivz16stepu = d_tdivzstepu * 16 fmul fp7,fp4 ;tdivz8stepu = d_tdivzstepu * 8 fmul fp7,fp5 ;zi16stepu = d_zistepu * 16 fmul fp7,fp5 ;zi8stepu = d_zistepu * 8 fmul fp7,fp6 ;fp6 = dv * d_tdivzstepv fmul.l d0,fp4 ;fp4 = du * d_zistepu fmul.l d1,fp3 ;fp3 = dv * d_zistepv fmul.l d6,fp2 ;* (float)scr_vrect.width fmul.l d7,fp3 ;* (float)scr_vrect.height fmul.s #SPEED,fp0 ;fp0 = cl.time*SPEED fmul.s (a1)+,fp2 ;fp2 = du * d_zistepu fmul.s (a1)+,fp7 ;fp7 = dv * d_zistepv fmul.s (a6)+,fp2 ;fp2 = du * d_zistepu fmul.s (a6)+,fp7 ;fp7 = dv * d_zistepv fmul.s .szstpu(sp),fp6 ;fp6 = d_sdivzstepu * spancountminus1 fmul.s .tzstpu(sp),fp6 ;fp6 = d_tdivzstepu * spancountminus1 fmul.s .zistpu(sp),fp7 ;fp7 = d_zistepu * spancountminus1
Well.. nothing really fancy in there! It's only a long list of already of long-tested instructions. I think now that Jari should come into play. @Jari: do you want the plain asm source for examination, or do you already have an idea about what is not working with these ?
|