Subversion Repositories Kolibri OS

Rev

Rev 5418 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5418 Rev 6017
Line 205... Line 205...
205
		faddp
205
		faddp
206
		fld dword[ebx+8]  ;st0 = m[_][2]
206
		fld dword[ebx+8]  ;st0 = m[_][2]
207
		fmul st0,st3      ;st0 *= c.Z
207
		fmul st0,st3      ;st0 *= c.Z
208
		faddp
208
		faddp
209
		fld dword[ebx+12] ;st0 += m[_][3]
209
		fld dword[ebx+12] ;st0 += m[_][3]
210
		fmul st0,st2      ;st0 *= c.Z
210
		fmul st0,st2      ;st0 *= c.W
211
		faddp
211
		faddp
212
		fstp dword[edx]   ;a.X = b.m[_][0]*c.X +b.m[_][1]*c.Y +b.m[_][2]*c.Z +b.m[_][3]*c.W
212
		fstp dword[edx]   ;a.X = b.m[_][0]*c.X +b.m[_][1]*c.Y +b.m[_][2]*c.Z +b.m[_][3]*c.W
213
		add ebx,16 ;ñëåäóùàÿ ñòðîêà ìàòðèöû
213
		add ebx,16 ;ñëåäóùàÿ ñòðîêà ìàòðèöû
214
		add edx,4  ;ñëåäóùàÿ êîîðäèíàòà âåêòîðà
214
		add edx,4  ;ñëåäóùàÿ êîîðäèíàòà âåêòîðà
215
	loop .cycle_1
215
	loop .cycle_1
Line 341... Line 341...
341
			imul eax,ebx
341
			imul eax,ebx
342
			add eax,ecx
342
			add eax,ecx
343
			shl eax,2
343
			shl eax,2
344
			add eax,[m]
344
			add eax,[m]
345
			fld dword[eax]
345
			fld dword[eax]
-
 
346
			fld st0
-
 
347
			fabs
-
 
348
			fld dword[max]
-
 
349
			fabs
346
			fcom dword[max] ;if (fabs(m[i*n+j])>fabs(max))
350
			fcompp ;if (fabs(m[i*n+j])>fabs(max))
347
			fstsw ax
351
			fstsw ax
348
			sahf
352
			sahf
349
			jbe @f
353
			jae @f
350
				mov edx,edi ;k=i
354
				mov edx,edi ;k=i
351
				fst dword[max]
355
				fst dword[max]
352
			@@:
356
			@@:
353
			ffree st0
357
			ffree st0 ;m[i*n+j]
354
			fincstp
358
			fincstp
355
		inc edi
359
		inc edi
356
		jmp .cycle_1
360
		jmp .cycle_1
357
		.cycle_1_end:
361
		.cycle_1_end:
Line 598... Line 602...
598
align 4
602
align 4
599
proc gl_V3_Norm uses ebx, a:dword
603
proc gl_V3_Norm uses ebx, a:dword
600
	mov ebx,[a]
604
	mov ebx,[a]
601
	fld dword[ebx]
605
	fld dword[ebx]
602
	fmul st0,st0
606
	fmul st0,st0
603
	fld dword[ebx+4]
607
	fld dword[ebx+offs_Y]
604
	fmul st0,st0
608
	fmul st0,st0
605
	faddp
609
	faddp
606
	fld dword[ebx+8]
610
	fld dword[ebx+offs_Z]
607
	fmul st0,st0
611
	fmul st0,st0
608
	faddp
612
	faddp
609
	fsqrt ;st0 = sqrt(a.X^2 +a.Y^2 +a.Z^2)
613
	fsqrt ;st0 = sqrt(a.X^2 +a.Y^2 +a.Z^2)
610
	ftst
614
	ftst
611
	fstsw ax
615
	fstsw ax
612
	sahf
616
	sahf
613
	je .r1 ;if (sqrt(...)==0) return 1
617
	je .r1 ;if (sqrt(...)==0) return 1
614
		fld dword[ebx] ;offs_X = 0
618
		fld dword[ebx] ;offs_X = 0
615
		fdiv st0,st1
619
		fdiv st0,st1
616
		fstp dword[ebx] ;a.X/=sqrt(...)
620
		fstp dword[ebx] ;a.X/=sqrt(...)
617
		fld dword[ebx+4]
621
		fld dword[ebx+offs_Y]
618
		fdiv st0,st1
622
		fdiv st0,st1
619
		fstp dword[ebx+4] ;a.Y/=sqrt(...)
623
		fstp dword[ebx+offs_Y] ;a.Y/=sqrt(...)
620
		fld dword[ebx+8]
624
		fld dword[ebx+offs_Z]
621
		fdiv st0,st1
625
		fdiv st0,st1
622
		fstp dword[ebx+8] ;a.Z/=sqrt(...)
626
		fstp dword[ebx+offs_Z] ;a.Z/=sqrt(...)
623
		xor eax,eax
627
		xor eax,eax
624
		jmp @f
628
		jmp @f
625
	.r1:
629
	.r1:
626
		xor eax,eax
630
		xor eax,eax
627
		inc eax
631
		inc eax