Changeset 521 for GraphicTest/Packages/bgrabitmap/bgramatrix3d.pas
- Timestamp:
- Apr 17, 2019, 12:58:41 AM (5 years ago)
- Location:
- GraphicTest
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
GraphicTest
- Property svn:ignore
-
old new 8 8 GraphicTest.lps 9 9 GraphicTest.dbg 10 heaptrclog.trc
-
- Property svn:ignore
-
GraphicTest/Packages/bgrabitmap/bgramatrix3d.pas
r494 r521 434 434 435 435 operator*(constref A: TMatrix3D; var M: TPoint3D_128): TPoint3D_128; 436 {$IFDEF BGRASSE_AVAILABLE}var oldMt: single; {$ENDIF}436 {$IFDEF BGRASSE_AVAILABLE}var oldMt: single; resultAddr: pointer;{$ENDIF} 437 437 begin 438 438 {$IFDEF BGRASSE_AVAILABLE} … … 441 441 oldMt := M.t; 442 442 M.t := SingleConst1; 443 resultAddr := @result; 444 {$IFDEF cpux86_64} 443 445 if UseSSE3 then 444 446 asm 445 mov eax, A446 movups xmm5, [ eax]447 movups xmm6, [ eax+16]448 movups xmm7, [ eax+32]449 450 mov eax, M451 movups xmm0, [ eax]452 453 mov eax, result447 mov rax, A 448 movups xmm5, [rax] 449 movups xmm6, [rax+16] 450 movups xmm7, [rax+32] 451 452 mov rax, M 453 movups xmm0, [rax] 454 455 mov rax, resultAddr 454 456 455 457 movaps xmm4,xmm0 … … 457 459 haddps xmm4,xmm4 458 460 haddps xmm4,xmm4 459 movss [ eax], xmm4461 movss [rax], xmm4 460 462 461 463 movaps xmm4,xmm0 … … 463 465 haddps xmm4,xmm4 464 466 haddps xmm4,xmm4 465 movss [ eax+4], xmm4467 movss [rax+4], xmm4 466 468 467 469 mulps xmm0,xmm7 468 470 haddps xmm0,xmm0 469 471 haddps xmm0,xmm0 470 movss [ eax+8], xmm0472 movss [rax+8], xmm0 471 473 end else 472 474 asm 473 mov eax, A474 movups xmm5, [ eax]475 movups xmm6, [ eax+16]476 movups xmm7, [ eax+32]477 478 mov eax, M479 movups xmm0, [ eax]480 481 mov eax, result475 mov rax, A 476 movups xmm5, [rax] 477 movups xmm6, [rax+16] 478 movups xmm7, [rax+32] 479 480 mov rax, M 481 movups xmm0, [rax] 482 483 mov rax, resultAddr 482 484 483 485 movaps xmm4,xmm0 … … 492 494 addps xmm4, xmm3 493 495 494 movss [ eax], xmm4496 movss [rax], xmm4 495 497 496 498 movaps xmm4,xmm0 … … 505 507 addps xmm4, xmm3 506 508 507 movss [ eax+4], xmm4509 movss [rax+4], xmm4 508 510 509 511 mulps xmm0,xmm7 … … 517 519 addps xmm0, xmm3 518 520 521 movss [rax+8], xmm0 522 end; 523 {$ELSE} 524 if UseSSE3 then 525 asm 526 mov eax, A 527 movups xmm5, [eax] 528 movups xmm6, [eax+16] 529 movups xmm7, [eax+32] 530 531 mov eax, M 532 movups xmm0, [eax] 533 534 mov eax, resultAddr 535 536 movaps xmm4,xmm0 537 mulps xmm4,xmm5 538 haddps xmm4,xmm4 539 haddps xmm4,xmm4 540 movss [eax], xmm4 541 542 movaps xmm4,xmm0 543 mulps xmm4,xmm6 544 haddps xmm4,xmm4 545 haddps xmm4,xmm4 546 movss [eax+4], xmm4 547 548 mulps xmm0,xmm7 549 haddps xmm0,xmm0 550 haddps xmm0,xmm0 551 movss [eax+8], xmm0 552 end else 553 asm 554 mov eax, A 555 movups xmm5, [eax] 556 movups xmm6, [eax+16] 557 movups xmm7, [eax+32] 558 559 mov eax, M 560 movups xmm0, [eax] 561 562 mov eax, resultAddr 563 564 movaps xmm4,xmm0 565 mulps xmm4,xmm5 566 //mix1 567 movaps xmm3, xmm4 568 shufps xmm3, xmm3, $4e 569 addps xmm4, xmm3 570 //mix2 571 movaps xmm3, xmm4 572 shufps xmm3, xmm3, $11 573 addps xmm4, xmm3 574 575 movss [eax], xmm4 576 577 movaps xmm4,xmm0 578 mulps xmm4,xmm6 579 //mix1 580 movaps xmm3, xmm4 581 shufps xmm3, xmm3, $4e 582 addps xmm4, xmm3 583 //mix2 584 movaps xmm3, xmm4 585 shufps xmm3, xmm3, $11 586 addps xmm4, xmm3 587 588 movss [eax+4], xmm4 589 590 mulps xmm0,xmm7 591 //mix1 592 movaps xmm3, xmm0 593 shufps xmm3, xmm3, $4e 594 addps xmm0, xmm3 595 //mix2 596 movaps xmm3, xmm0 597 shufps xmm3, xmm3, $11 598 addps xmm0, xmm3 599 519 600 movss [eax+8], xmm0 520 601 end; 602 {$ENDIF} 521 603 M.t := oldMt; 522 604 result.t := 0;
Note:
See TracChangeset
for help on using the changeset viewer.