/* $Id$ * * x86 assembly-language Alias model transform and project code. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "qasm.h" #include "d_ifacea.h" // #ifdef USE_ASM .data Ltemp0: .long 0 Ltemp1: .long 0 .text #define pfv0 8+4 #define pfv1 8+8 #define out 8+12 .globl C(R_Alias_clip_bottom) C(R_Alias_clip_bottom): pushl %esi pushl %edi movl pfv0(%esp),%esi movl pfv1(%esp),%edi movl C(r_refdef)+rd_aliasvrectbottom,%eax LDoForwardOrBackward: movl fv_v+4(%esi),%edx movl fv_v+4(%edi),%ecx cmpl %ecx,%edx jl LDoForward movl fv_v+4(%esi),%ecx movl fv_v+4(%edi),%edx movl pfv0(%esp),%edi movl pfv1(%esp),%esi LDoForward: subl %edx,%ecx subl %edx,%eax movl %ecx,Ltemp1 movl %eax,Ltemp0 fildl Ltemp1 fildl Ltemp0 movl out(%esp),%edx movl $2,%eax fdivp %st(0),%st(1) // scale LDo3Forward: fildl fv_v+0(%esi) // fv0v0 | scale fildl fv_v+0(%edi) // fv1v0 | fv0v0 | scale fildl fv_v+4(%esi) // fv0v1 | fv1v0 | fv0v0 | scale fildl fv_v+4(%edi) // fv1v1 | fv0v1 | fv1v0 | fv0v0 | scale fildl fv_v+8(%esi) // fv0v2 | fv1v1 | fv0v1 | fv1v0 | fv0v0 | scale fildl fv_v+8(%edi) // fv1v2 | fv0v2 | fv1v1 | fv0v1 | fv1v0 | fv0v0 | // scale fxch %st(5) // fv0v0 | fv0v2 | fv1v1 | fv0v1 | fv1v0 | fv1v2 | // scale fsubr %st(0),%st(4) // fv0v0 | fv0v2 | fv1v1 | fv0v1 | fv1v0-fv0v0 | // fv1v2 | scale fxch %st(3) // fv0v1 | fv0v2 | fv1v1 | fv0v0 | fv1v0-fv0v0 | // fv1v2 | scale fsubr %st(0),%st(2) // fv0v1 | fv0v2 | fv1v1-fv0v1 | fv0v0 | // fv1v0-fv0v0 | fv1v2 | scale fxch %st(1) // fv0v2 | fv0v1 | fv1v1-fv0v1 | fv0v0 | // fv1v0-fv0v0 | fv1v2 | scale fsubr %st(0),%st(5) // fv0v2 | fv0v1 | fv1v1-fv0v1 | fv0v0 | // fv1v0-fv0v0 | fv1v2-fv0v2 | scale fxch %st(6) // scale | fv0v1 | fv1v1-fv0v1 | fv0v0 | // fv1v0-fv0v0 | fv1v2-fv0v2 | fv0v2 fmul %st(0),%st(4) // scale | fv0v1 | fv1v1-fv0v1 | fv0v0 | // (fv1v0-fv0v0)*scale | fv1v2-fv0v2 | fv0v2 addl $12,%edi fmul %st(0),%st(2) // scale | fv0v1 | (fv1v1-fv0v1)*scale | fv0v0 | // (fv1v0-fv0v0)*scale | fv1v2-fv0v2 | fv0v2 addl $12,%esi addl $12,%edx fmul %st(0),%st(5) // scale | fv0v1 | (fv1v1-fv0v1)*scale | fv0v0 | // (fv1v0-fv0v0)*scale | (fv1v2-fv0v2)*scale | // fv0v2 fxch %st(3) // fv0v0 | fv0v1 | (fv1v1-fv0v1)*scale | scale | // (fv1v0-fv0v0)*scale | (fv1v2-fv0v2)*scale | // fv0v2 faddp %st(0),%st(4) // fv0v1 | (fv1v1-fv0v1)*scale | scale | // fv0v0+(fv1v0-fv0v0)*scale | // (fv1v2-fv0v2)*scale | fv0v2 faddp %st(0),%st(1) // fv0v1+(fv1v1-fv0v1)*scale | scale | // fv0v0+(fv1v0-fv0v0)*scale | // (fv1v2-fv0v2)*scale | fv0v2 fxch %st(4) // fv0v2 | scale | fv0v0+(fv1v0-fv0v0)*scale | // (fv1v2-fv0v2)*scale | fv0v1+(fv1v1-fv0v1)*scale faddp %st(0),%st(3) // scale | fv0v0+(fv1v0-fv0v0)*scale | // fv0v2+(fv1v2-fv0v2)*scale | // fv0v1+(fv1v1-fv0v1)*scale fxch %st(1) // fv0v0+(fv1v0-fv0v0)*scale | scale | // fv0v2+(fv1v2-fv0v2)*scale | // fv0v1+(fv1v1-fv0v1)*scale fadds float_point5 fxch %st(3) // fv0v1+(fv1v1-fv0v1)*scale | scale | // fv0v2+(fv1v2-fv0v2)*scale | // fv0v0+(fv1v0-fv0v0)*scale fadds float_point5 fxch %st(2) // fv0v2+(fv1v2-fv0v2)*scale | scale | // fv0v1+(fv1v1-fv0v1)*scale | // fv0v0+(fv1v0-fv0v0)*scale fadds float_point5 fxch %st(3) // fv0v0+(fv1v0-fv0v0)*scale | scale | // fv0v1+(fv1v1-fv0v1)*scale | // fv0v2+(fv1v2-fv0v2)*scale fistpl fv_v+0-12(%edx) // scale | fv0v1+(fv1v1-fv0v1)*scale | // fv0v2+(fv1v2-fv0v2)*scale fxch %st(1) // fv0v1+(fv1v1-fv0v1)*scale | scale | // fv0v2+(fv1v2-fv0v2)*scale | scale fistpl fv_v+4-12(%edx) // scale | fv0v2+(fv1v2-fv0v2)*scale fxch %st(1) // fv0v2+(fv1v2-fv0v2)*sc | scale fistpl fv_v+8-12(%edx) // scale decl %eax jnz LDo3Forward fstp %st(0) popl %edi popl %esi ret .globl C(R_Alias_clip_top) C(R_Alias_clip_top): pushl %esi pushl %edi movl pfv0(%esp),%esi movl pfv1(%esp),%edi movl C(r_refdef)+rd_aliasvrect+4,%eax jmp LDoForwardOrBackward .globl C(R_Alias_clip_right) C(R_Alias_clip_right): pushl %esi pushl %edi movl pfv0(%esp),%esi movl pfv1(%esp),%edi movl C(r_refdef)+rd_aliasvrectright,%eax LRightLeftEntry: movl fv_v+4(%esi),%edx movl fv_v+4(%edi),%ecx cmpl %ecx,%edx movl fv_v+0(%esi),%edx movl fv_v+0(%edi),%ecx jl LDoForward2 movl fv_v+0(%esi),%ecx movl fv_v+0(%edi),%edx movl pfv0(%esp),%edi movl pfv1(%esp),%esi LDoForward2: jmp LDoForward .globl C(R_Alias_clip_left) C(R_Alias_clip_left): pushl %esi pushl %edi movl pfv0(%esp),%esi movl pfv1(%esp),%edi movl C(r_refdef)+rd_aliasvrect+0,%eax jmp LRightLeftEntry // #endif /* USE_ASM */