123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- //
- // r_aliasa.s
- // x86 assembly-language Alias model transform and project code.
- //
- #include "qasm.h"
- #include "d_ifacea.h"
- #if id386
- .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 // id386
|