Aktív témák

  • P.H.

    senior tag

    SSE1 line algoritmus azonos stílusú vonalak láncolt listájára + 1st gen. Nerburst és K10 port elemzés:
    (»port latency (uops) subunit« formában)

    K10-en kb. 10%-kal gyorsabb, mint az x87-es megvalósítás, Prescott-on a sebességnövekedés több, mint kétszeres az x87-hez képest.
    K10-en 1.6 IPC mérhető (kb. 30000 vonalas tesztadaton 10,5M órajel), Netburst-re visszaszámolva (ugyanazon a tesztadaton 26M órajel) 0.65 IPC.

    mov ecx,[esi+_DATA1] // p2 2 (1) load p012 3 (1) AGU
    pushad // -vector- -vector-
    xorps xmm0,xmm0 // p1 2 (1) mmxalu p34 2 (1) FA/M
    lea edi,[esi+DATA2] // p0/1 d (1) alu p012 3 (1) AGU
    pcmpeqw xmm7,xmm7 // p1 2 (1) mmxalu p34 2 (1) FA/M
    cvtpi2ps xmm3,[edi-...+_TOPLEFT] // p1+2 10 (4) mmx+load 7 (2)
    xorps xmm1,xmm1 // p1 2 (1) mmxalu p34 2 (1) FA/M
    mov esi,[esi+...DEST] // p2 2 (1) load p012 3 (1) AGU
    pslld xmm7,1Fh // p1 2 (1) mmxshf p34 3 (1) FA/M
    cvtpi2ps xmm2,[edi-...+_RIGHTBOTTOM] // p1+2 10 (4) mmx+load 7 (2)
    xorps xmm5,xmm5 // p1 2 (1) mmxalu p34 2 (1) FA/M
    shufps xmm3,xmm2,01000000b // p1 4 (1) mmxshf p34 3 (1) FA/M
    sub edi,ecx // p0/1 d (1) alu p012 1 (1) ALU
    xorps xmm6,xmm6 // p1 2 (1) mmxalu p34 2 (1) FA/M
    shufps xmm3,xmm3,11011000b // p1 4 (1) mmxshf p34 3 (1) FA/M
    @nxline:
    test ebx,ebx // p0/1 d (1) alu p012 1 (1) ALU
    jz @return // p0 2 (1) alu p012 1 (1) ALU
    mov eax,[ebx+TRECORD.REF] // p2 2 (1) load p012 3 (1) AGU
    pcmpeqw xmm2,xmm2 // p1 2 (1) mmxalu p34 2 (1) FA/M
    mov ecx,[ebx+TRECORD.SELF] // p2 2 (1) load p012 3 (1) AGU
    mov ebp,[eax+THEADER.YCOOR] // p2 2 (1) load p012 3 (1) AGU
    pcmpeqw xmm4,xmm4 // p1 2 (1) mmxalu p34 2 (1) FA/M
    mov edx,[ecx+THEADER.YCOOR] // p2 2 (1) load p012 3 (1) AGU
    psrld xmm2,01h // p1 2 (1) mmxshf p34 3 (1) FA/M
    mov eax,[eax+THEADER.XCOOR] // p2 2 (1) load p012 3 (1) AGU
    mov ecx,[ecx+THEADER.XCOOR] // p2 2 (1) load p012 3 (1) AGU
    sub ebp,edx // p0/1 d (1) alu p012 1 (1) ALU
    movaps xmm6,xmm2 // p0 6 (1) mov p345 3 (1) FANY
    sub eax,ecx // p0/1 d (1) alu p012 1 (1) ALU
    pslld xmm4,25 // p1 2 (1) mmxshf p34 3 (1) FA/M
    cvtsi2ss xmm1,ebp // p1 10 (3) fpmmx 14 (3)
    mov ebx,[ebx+TRECORD.NX] // p2 2 (1) load p012 3 (1) AGU
    cvtsi2ss xmm0,eax // p1 10 (3) fpmmx 14 (3)
    andps xmm6,xmm1 // p1 2 (1) mmxalu p34 2 (1) FA/M
    andps xmm2,xmm0 // p1 2 (1) mmxalu p34 2 (1) FA/M
    psrld xmm4,02h // p1 2 (1) mmxshf p34 3 (1) FA/M
    comiss xmm6,xmm2 // p1 6 (2) fpadd p3 (1) FADD
    mov [esp+_EBX],ebx // p0+3 2 (3) alu+store p012 3 (1) AGU
    cmovbe ebp,eax // 6 (3) p012 1 (1) ALU
    cvtsi2ss xmm6,edx // p1 10 (3) fpmmx 14 (3)
    setbe al // p1 5 (3) alu p012 1 (1) ALU
    jae @inlineMOVEX // p0 2 (1) alu p012 1 (1) ALU
    movaps xmm2,xmm0 // p0 6 (1) mov p345 3 (1) FANY
    movaps xmm0,xmm1 // p0 6 (1) mov p345 3 (1) FANY
    movaps xmm1,xmm2 // p0 6 (1) mov p345 3 (1) FANY
    @inlineMOVEX:
    test ebp,ebp // p0/1 d (1) alu p012 1 (1) ALU
    cvtsi2ss xmm5,ecx // p1 10 (3) fpmmx 14 (3)
    jz @nxline // p0 2 (1) alu p012 1 (1) ALU
    divss xmm0,xmm1 // p1 23 (1) fpdiv p4 16 (1) FMUL
    mov ebx,[esp+_ECX] // p2 2 (1) load p012 3 (1) AGU
    shufps xmm4,xmm0,00000000b // p1 4 (1) mmxshf p34 3 (1) FA/M
    jns @inlineSETDIR // p0 2 (1) alu p012 1 (1) ALU
    neg ebp // p0 d (1) alu p012 1 (1) ALU
    xorps xmm4,xmm7 // p1 2 (1) mmxalu p34 2 (1) FA/M
    @inlineSETDIR:
    test al,al // p0/1 d (1) alu p012 1 (1) ALU
    mov al,[edi+ebx-_ADDER+_DRAWCOLOR] // p2 2 (1) load p012 3 (1) AGU
    shufps xmm5,xmm6,00000000h // p1 4 (1) mmxshf p34 3 (1) FA/M
    jnz @setpixel // p0 2 (1) alu p012 1 (1) ALU
    shufps xmm4,xmm4,00001010b // p1 4 (1) mmxshf p34 3 (1) FA/M
    @setpixel:
    movaps xmm2,xmm3 // p0 6 (1) mov p345 3 (1) FANY
    imul edx,[edi+ebx-_ADDER+_DX] // p1+2 15 (4) fpmul+load p0 6 (1) ALU0+AGU
    cmpltps xmm2,xmm5 // p1 4 (1) fpadd p3 (1) FADD
    add edx,ecx // p0/1 d (1) alu p012 1 (1) ALU
    addps xmm5,xmm4 // p1 4 (1) fpadd p3 4 (1) FADD
    movmskps ecx,xmm2 // p1 6 (2) fp p34 3 (1) FA/M
    movhlps xmm0,xmm5 // p1 4 (1) mmxshf
    cmp cl,05h // p0/1 d (1) alu p012 1 (1) ALU
    cvtss2si ecx,xmm5 // p1 8 (2) fp p3+5 8 (2) FADD+FMISC
    jnz @continueLINE // p0 2 (1) alu p012 1 (1) ALU
    @round:
    add edx,[edi+ebx] // p1+2 d (2) alu+load p012 4 (2) ALU+AGU
    add ebx,04h // p0/1 d (1) alu p012 1 (1) ALU
    mov [esi+edx],al // p0+3 2 (3) store p012 3 (1) AGU
    js @round // p0 2 (1) alu p012 1 (1) ALU
    mov ebx,[esp+_ECX] // p2 2 (1) load p012 3 (1) AGU
    @continueLINE:
    sub ebp,01h // p01 d (1) alu p012 1 (1) ALU
    cvtss2si edx,xmm0 // p1 8 (2) fp p3+5 8 (2) FADD+FMISC
    jge @setpixel // p0 2 (1) alu p012 1 (1) ALU
    mov ebx,[esp+_EBX] // p2 2 (1) load p012 3 (1) AGU
    jmp @nxline // p1 0 (1) alu p012 1 (2) ALU
    @return:
    popad // -vector- -vector-

    [ Szerkesztve ]

    Arguing on the Internet is like running in the Special Olympics. Even if you win, you are still ... ˙˙˙ Real Eyes Realize Real Lies ˙˙˙

Aktív témák