News:

MASM32 SDK Description, downloads and other helpful links
MASM32.com New Forum Link
masmforum WebSite

MASM movlps problem?

Started by Ficko, June 02, 2009, 05:38:51 PM

Previous topic - Next topic

sinsi


Intel(R) Core(TM)2 Quad CPU    Q6600  @ 2.40GHz (SSE4)
216     cycles for movdqa               (src + dest aligned 16)
1241    cycles for movlps/movhps        srcalign=7, destalign=9
1408    cycles for movdqu               srcalign=7, destalign=9
1485    cycles for rep movsd            srcalign=7, destalign=9
1458    cycles for fild/fistp           srcalign=7, destalign=9

212     cycles for movdqa               (src + dest aligned 16)
1242    cycles for movlps/movhps        srcalign=7, destalign=9
1403    cycles for movdqu               srcalign=7, destalign=9
1479    cycles for rep movsd            srcalign=7, destalign=9
1456    cycles for fild/fistp           srcalign=7, destalign=9

213     cycles for movdqa               (src + dest aligned 16)
1239    cycles for movlps/movhps        srcalign=7, destalign=9
1402    cycles for movdqu               srcalign=7, destalign=9
1479    cycles for rep movsd            srcalign=7, destalign=9
1462    cycles for fild/fistp           srcalign=7, destalign=9

big numbers indeed...


213     cycles for movdqa               (src + dest aligned 16)
312     cycles for movlps/movhps        srcalign=8, destalign=8
614     cycles for movdqu               srcalign=8, destalign=8
280     cycles for rep movsd            srcalign=8, destalign=8
417     cycles for fild/fistp           srcalign=8, destalign=8

213     cycles for movdqa               (src + dest aligned 16)
313     cycles for movlps/movhps        srcalign=8, destalign=8
614     cycles for movdqu               srcalign=8, destalign=8
280     cycles for rep movsd            srcalign=8, destalign=8
417     cycles for fild/fistp           srcalign=8, destalign=8

213     cycles for movdqa               (src + dest aligned 16)
313     cycles for movlps/movhps        srcalign=8, destalign=8
618     cycles for movdqu               srcalign=8, destalign=8
282     cycles for rep movsd            srcalign=8, destalign=8
417     cycles for fild/fistp           srcalign=8, destalign=8

better  :bg
Light travels faster than sound, that's why some people seem bright until you hear them.

jj2007

And even better... we have a new champion for MemCopy and addresses that are not aligned 16:

mov esi, offset src
mov edi, offset dest
mov ecx, 100
.Repeat
movdqu xmm0, [esi] ; read src
lea esi, [esi+16]
movlps qword ptr [edi], xmm0 ; write dest
movhps qword ptr [edi+8], xmm0
dec ecx
lea edi, [edi+16]
.Until Zero?


The trick is reading with movdqu and writing with movlps/movhps...

Intel(R) Pentium(R) 4 CPU 3.40GHz (SSE3)
488     cycles for movdqa               (src + dest aligned 16)
671     cycles for movdqu+movlps        srcalign=8, destalign=8
714     cycles for movlps/movhps        srcalign=8, destalign=8
1240    cycles for movlps+movdqu        srcalign=8, destalign=8
1256    cycles for movdqu               srcalign=8, destalign=8
818     cycles for rep movsd            srcalign=8, destalign=8
1060    cycles for fild/fistp           srcalign=8, destalign=8

484     cycles for movdqa               (src + dest aligned 16)
3107    cycles for movdqu+movlps        srcalign=7, destalign=9
3118    cycles for movlps/movhps        srcalign=7, destalign=9
3163    cycles for movlps+movdqu        srcalign=7, destalign=9
3151    cycles for movdqu               srcalign=7, destalign=9
3186    cycles for rep movsd            srcalign=7, destalign=9
3203    cycles for fild/fistp           srcalign=7, destalign=9


For addresses not aligned to 8 bytes, it is only marginally slower than the others, though.
:bg

[attachment deleted by admin]

UtillMasm

 :U
Genuine Intel(R) CPU           T2400  @ 1.83GHz (SSE3)
316     cycles for movdqa               (src + dest aligned 16)
411     cycles for movdqu+movlps        srcalign=8, destalign=8
408     cycles for movlps/movhps        srcalign=8, destalign=8
714     cycles for movlps+movdqu        srcalign=8, destalign=8
723     cycles for movdqu               srcalign=8, destalign=8
462     cycles for rep movsd            srcalign=8, destalign=8
1219    cycles for fild/fistp           srcalign=8, destalign=8

361     cycles for movdqa               (src + dest aligned 16)
422     cycles for movdqu+movlps        srcalign=8, destalign=8
428     cycles for movlps/movhps        srcalign=8, destalign=8
712     cycles for movlps+movdqu        srcalign=8, destalign=8
719     cycles for movdqu               srcalign=8, destalign=8
469     cycles for rep movsd            srcalign=8, destalign=8
1222    cycles for fild/fistp           srcalign=8, destalign=8

309     cycles for movdqa               (src + dest aligned 16)
427     cycles for movdqu+movlps        srcalign=8, destalign=8
424     cycles for movlps/movhps        srcalign=8, destalign=8
737     cycles for movlps+movdqu        srcalign=8, destalign=8
726     cycles for movdqu               srcalign=8, destalign=8
481     cycles for rep movsd            srcalign=8, destalign=8
1273    cycles for fild/fistp           srcalign=8, destalign=8

310     cycles for movdqa               (src + dest aligned 16)
420     cycles for movdqu+movlps        srcalign=8, destalign=8
417     cycles for movlps/movhps        srcalign=8, destalign=8
720     cycles for movlps+movdqu        srcalign=8, destalign=8
713     cycles for movdqu               srcalign=8, destalign=8
459     cycles for rep movsd            srcalign=8, destalign=8
1256    cycles for fild/fistp           srcalign=8, destalign=8


--- ok ---