С LEA, просо приходится сразу 128 бит писать и выравнивать массив на границу четверного слова. С PINSRD прощеб лишнего не прочитаешь.
Как будет быстрее с LEA или PINSRD ? Работают оба варианта.
function Scale(A, B: TVertex; Factor: single): TVertex;
const
D: single = 100.0;
FillXMM: UInt128 = ($0302010003020100, $0302010003020100);
asm
.NOFRAME
movss xmm2, Factor
divss xmm2, D
movdqu xmm3, FillXMM
pshufb xmm2, xmm3
lea rax, [A]
lea r10, [B]
movdqu xmm0, [rax]
movdqu xmm1, [r10]
subps xmm1, xmm0
mulps xmm1, xmm2
addps xmm1, xmm0
extractps Result.X, xmm1, 0
extractps Result.Y, xmm1, 1
extractps Result.Z, xmm1, 2
end;