p7zip/Utils/CPUTest/MemLat/Walk32.asm

663 lines
8.0 KiB
NASM
Raw Permalink Normal View History

2017-10-11 12:35:36 +02:00
.386
.model flat
OPTION PROLOGUE:NONE
OPTION EPILOGUE:NONE
.data
_TEXT$00 SEGMENT PARA PUBLIC 'CODE'
PUSHREG macro
push EBP
push EBX
push ESI
push EDI
endm
POPREG macro
pop EDI
pop ESI
pop EBX
pop EBP
endm
offs equ 4 * 4
a0$ = (offs + 4)
a1$ = (a0$ + 4)
a2$ = (a1$ + 4)
a3$ = (a2$ + 4)
a4$ = (a3$ + 4)
a5$ = (a4$ + 4)
align 16
@WalkSum@8 PROC
PUSHREG
xor EAX, EAX
xor EBX, EBX
xor ESI, ESI
xor EDI, EDI
shr EDX, 4
align 16
@@:
ttt = 0
rept 4
add EAX, DWORD PTR [ECX + ttt + 0]
add EBX, DWORD PTR [ECX + ttt + 4]
add ESI, DWORD PTR [ECX + ttt + 8]
add EDI, DWORD PTR [ECX + ttt + 12]
ttt = ttt + 16
endm
add ECX, 64
dec EDX
jne @B
add EAX, EBX
add EAX, ESI
add EAX, EDI
POPREG
ret 0
@WalkSum@8 ENDP
align 16
@WalkWrite@8 PROC
PUSHREG
xor EAX, EAX
shr EDX, 4
align 16
@@:
ttt = 0
rept 16
mov DWORD PTR [ECX + ttt], EAX
ttt = ttt + 4
endm
add ECX, 64
dec EDX
jne @B
POPREG
ret 0
@WalkWrite@8 ENDP
align 16
@WalkSum2@12 PROC
PUSHREG
mov ESI, DWORD PTR a0$[ESP]
shl ESI, 2
mov EDI, ESI
shl EDI, 1
xor EAX, EAX
xor EBX, EBX
shl EDX, 2
add EDX, ECX
align 16
@@:
add EAX, DWORD PTR [ECX]
add EBX, DWORD PTR [ECX + ESI]
add ECX, EDI
cmp ECX, EDX
jb @B
add EAX, EBX
POPREG
ret 4
@WalkSum2@12 ENDP
align 16
@WalkWrite2@12 PROC
PUSHREG
mov ESI, DWORD PTR a0$[ESP]
shl ESI, 2
mov EDI, ESI
mov EBX, ESI
add EBX, ESI
add EBX, ESI
shl EDI, 2
xor EAX, EAX
shl EDX, 2
add EDX, ECX
align 16
@@:
rept 2
mov DWORD PTR [ECX], EAX
mov DWORD PTR [ECX + ESI], EAX
mov DWORD PTR [ECX + ESI * 2], EAX
mov DWORD PTR [ECX + EBX], EAX
add ECX, EDI
endm
cmp ECX, EDX
jb @B
POPREG
ret 4
@WalkWrite2@12 ENDP
align 16
@Walk1Add@12 PROC
PUSHREG
mov EAX, DWORD PTR a0$[ESP]
shr EDX, 3
align 16
@@:
rept 8
add EAX, DWORD PTR [ECX + EAX*4]
endm
dec EDX
jne @B
POPREG
ret 4
@Walk1Add@12 ENDP
align 16
@Walk1Nop@12 PROC
PUSHREG
mov EAX, DWORD PTR a0$[ESP]
xor EBX, EBX
align 16
@@:
rept 40
add EAX, EBX
endm
mov EAX, DWORD PTR [ECX + EAX*4]
dec EDX
jne @B
POPREG
ret 4
@Walk1Nop@12 ENDP
align 16
@Walk1@12 PROC
PUSHREG
mov EAX, DWORD PTR a0$[ESP]
shr EDX, 3
align 16
@@:
rept 8
mov EAX, DWORD PTR [ECX + EAX*4]
endm
dec EDX
jne @B
POPREG
ret 4
@Walk1@12 ENDP
PPP macro x, y
mov x, DWORD PTR [ECX + y * 4]
endm
QQQ macro x, y
mov DWORD PTR [ECX + y * 4], x
endm
align 16
@Walk1w@12 PROC
PUSHREG
mov EAX, DWORD PTR a0$[ESP]
shr EDX, 3
align 16
@@:
rept 4
PPP ESI, EAX
QQQ ESI, EAX
PPP EAX, ESI
QQQ EAX, ESI
endm
dec EDX
jne @B
POPREG
ret 4
@Walk1w@12 ENDP
align 16
@Walk2@16 PROC
PUSHREG
mov EAX, DWORD PTR a0$[ESP]
mov EBX, DWORD PTR a1$[ESP]
shr EDX, 2
align 16
@@:
rept 4
mov EAX, DWORD PTR [ECX + EAX*4]
mov EBX, DWORD PTR [ECX + EBX*4]
endm
dec EDX
jne @B
add EAX, EBX
POPREG
ret 8
@Walk2@16 ENDP
align 16
@Walk2w@16 PROC
PUSHREG
mov EAX, DWORD PTR a0$[ESP]
mov EBX, DWORD PTR a1$[ESP]
shr EDX, 2
align 16
@@:
rept 2
PPP ESI, EAX
PPP EDI, EBX
QQQ ESI, EAX
QQQ EDI, EBX
PPP EAX, ESI
PPP EBX, EDI
QQQ EAX, ESI
QQQ EBX, EDI
endm
dec EDX
jne @B
add EAX, EBX
POPREG
ret 8
@Walk2w@16 ENDP
align 16
@Walk3@20 PROC
PUSHREG
mov EAX, DWORD PTR a0$[ESP]
mov EBX, DWORD PTR a1$[ESP]
mov ESI, DWORD PTR a2$[ESP]
shr EDX, 1
align 16
@@:
rept 2
mov EAX, DWORD PTR [ECX + EAX*4]
mov EBX, DWORD PTR [ECX + EBX*4]
mov ESI, DWORD PTR [ECX + ESI*4]
endm
dec EDX
jne @B
add EAX, EBX
add EAX, ESI
POPREG
ret 12
@Walk3@20 ENDP
align 16
@Walk4@24 PROC
PUSHREG
mov EAX, DWORD PTR a0$[ESP]
mov EBX, DWORD PTR a1$[ESP]
mov ESI, DWORD PTR a2$[ESP]
mov EDI, DWORD PTR a3$[ESP]
shr EDX, 1
align 16
@@:
rept 2
mov EAX, DWORD PTR [ECX + EAX*4]
mov EBX, DWORD PTR [ECX + EBX*4]
mov ESI, DWORD PTR [ECX + ESI*4]
mov EDI, DWORD PTR [ECX + EDI*4]
endm
dec EDX
jne @B
add EAX, EBX
add EAX, ESI
add EAX, EDI
POPREG
ret 16
@Walk4@24 ENDP
align 16
@Walk5@28 PROC
PUSHREG
mov EAX, DWORD PTR a0$[ESP]
mov EBX, DWORD PTR a1$[ESP]
mov ESI, DWORD PTR a2$[ESP]
mov EDI, DWORD PTR a3$[ESP]
mov EBP, DWORD PTR a4$[ESP]
shr EDX, 1
align 16
@@:
rept 2
mov EAX, DWORD PTR [ECX + EAX*4]
mov EBX, DWORD PTR [ECX + EBX*4]
mov ESI, DWORD PTR [ECX + ESI*4]
mov EDI, DWORD PTR [ECX + EDI*4]
mov EBP, DWORD PTR [ECX + EBP*4]
endm
dec EDX
jne @B
add EAX, EBX
add EAX, ESI
add EAX, EDI
add EAX, EBP
POPREG
ret 20
@Walk5@28 ENDP
align 16
@Walk1d@8 PROC
PUSHREG
xor EAX, EAX
shr ECX, 3
align 16
@@:
rept 8
mov EDX, DWORD PTR [EDX]
endm
dec ECX
jne @B
mov EAX, EDX
POPREG
ret 0
@Walk1d@8 ENDP
MMM macro x, y
mov x, DWORD PTR [y]
endm
NNN macro x, y
mov DWORD PTR [y], x
endm
align 16
@Walk1wd@8 PROC
PUSHREG
xor EAX, EAX
shr ECX, 3
align 16
@@:
rept 4
MMM ESI, EDX
NNN ESI, EDX
MMM EDX, ESI
NNN EDX, ESI
endm
dec ECX
jne @B
mov EAX, EDX
POPREG
ret 0
@Walk1wd@8 ENDP
align 16
@Walk2d@12 PROC
PUSHREG
mov EBX, DWORD PTR a0$[ESP]
shr ECX, 2
align 16
@@:
rept 4
mov EDX, DWORD PTR [EDX]
mov EBX, DWORD PTR [EBX]
endm
dec ECX
jne @B
mov EAX, EDX
add EAX, EBX
POPREG
ret 4
@Walk2d@12 ENDP
align 16
@Walk2wd@12 PROC
PUSHREG
mov EBX, DWORD PTR a0$[ESP]
shr ECX, 2
align 16
@@:
rept 2
MMM ESI, EDX
MMM EDI, EBX
NNN ESI, EDX
NNN EDI, EBX
MMM EDX, ESI
MMM EBX, EDI
NNN EDX, ESI
NNN EBX, EDI
endm
dec ECX
jne @B
mov EAX, EDX
add EAX, EBX
POPREG
ret 4
@Walk2wd@12 ENDP
align 16
@Walk3d@16 PROC
PUSHREG
mov EBX, DWORD PTR a0$[ESP]
mov ESI, DWORD PTR a1$[ESP]
shr ECX, 1
align 16
@@:
rept 2
mov EDX, DWORD PTR [EDX]
mov EBX, DWORD PTR [EBX]
mov ESI, DWORD PTR [ESI]
endm
dec ECX
jne @B
mov EAX, EDX
add EAX, EBX
add EAX, ESI
POPREG
ret 8
@Walk3d@16 ENDP
align 16
@Walk3wd@16 PROC
PUSHREG
mov EBX, DWORD PTR a0$[ESP]
mov EAX, DWORD PTR a1$[ESP]
shr ECX, 1
align 16
@@:
rept 1
MMM ESI, EDX
MMM EDI, EBX
MMM EBP, EAX
NNN ESI, EDX
NNN EDI, EBX
NNN EBP, EAX
MMM EDX, ESI
MMM EBX, EDI
MMM EAX, EBP
NNN EDX, ESI
NNN EBX, EDI
NNN EAX, EBP
endm
dec ECX
jne @B
add EAX, EDX
add EAX, EBX
POPREG
ret 8
@Walk3wd@16 ENDP
align 16
@Walk4d@20 PROC
PUSHREG
mov EBX, DWORD PTR a0$[ESP]
mov ESI, DWORD PTR a1$[ESP]
mov EDI, DWORD PTR a2$[ESP]
shr ECX, 1
align 16
@@:
rept 2
mov EDX, DWORD PTR [EDX]
mov EBX, DWORD PTR [EBX]
mov ESI, DWORD PTR [ESI]
mov EDI, DWORD PTR [EDI]
endm
dec ECX
jne @B
mov EAX, EDX
add EAX, EBX
add EAX, ESI
add EAX, EDI
POPREG
ret 12
@Walk4d@20 ENDP
align 16
@Walk5d@24 PROC
PUSHREG
mov EBX, DWORD PTR a0$[ESP]
mov ESI, DWORD PTR a1$[ESP]
mov EDI, DWORD PTR a2$[ESP]
mov EBP, DWORD PTR a3$[ESP]
shr ECX, 1
align 16
@@:
rept 2
mov EDX, DWORD PTR [EDX]
mov EBX, DWORD PTR [EBX]
mov ESI, DWORD PTR [ESI]
mov EDI, DWORD PTR [EDI]
mov EBP, DWORD PTR [EBP]
endm
dec ECX
jne @B
mov EAX, EDX
add EAX, EBX
add EAX, ESI
add EAX, EDI
add EAX, EBP
POPREG
ret 16
@Walk5d@24 ENDP
align 16
@Walk6d@28 PROC
PUSHREG
mov EBX, DWORD PTR a0$[ESP]
mov ESI, DWORD PTR a1$[ESP]
mov EDI, DWORD PTR a2$[ESP]
mov EBP, DWORD PTR a3$[ESP]
mov EAX, DWORD PTR a4$[ESP]
shr ECX, 1
align 16
@@:
rept 2
mov EDX, DWORD PTR [EDX]
mov EBX, DWORD PTR [EBX]
mov ESI, DWORD PTR [ESI]
mov EDI, DWORD PTR [EDI]
mov EBP, DWORD PTR [EBP]
mov EAX, DWORD PTR [EAX]
endm
dec ECX
jne @B
add EAX, EDX
add EAX, EBX
add EAX, ESI
add EAX, EDI
add EAX, EBP
POPREG
ret 20
@Walk6d@28 ENDP
_TEXT$00 ENDS
end