📄 cachebandwidth.cpp
字号:
//---------------------------------------------------------------------------
//
// CacheBandwidth.cpp: Cache Bandwidth Routines Implementation
//
//---------------------------------------------------------------------------
#include "StdAfx.h"
#include "CacheBandwidth.h"
void __declspec(naked) __cdecl ReadCacheLineFwd16(void* src, DWORD count, DWORD repeat)
{
__asm
{
push ebx
mov edx, [esp+4+12]
$main_loop:
mov eax, [esp+4+4]
mov ecx, [esp+4+8]
ALIGN 16
$read_loop:
mov ebx, [eax]
mov ebx, [eax+16]
mov ebx, [eax+32]
mov ebx, [eax+48]
mov ebx, [eax+64]
mov ebx, [eax+80]
mov ebx, [eax+96]
mov ebx, [eax+112]
mov ebx, [eax+128]
mov ebx, [eax+144]
mov ebx, [eax+160]
mov ebx, [eax+176]
mov ebx, [eax+192]
mov ebx, [eax+208]
mov ebx, [eax+224]
mov ebx, [eax+240]
mov ebx, [eax+256]
mov ebx, [eax+272]
mov ebx, [eax+288]
mov ebx, [eax+304]
mov ebx, [eax+320]
mov ebx, [eax+336]
mov ebx, [eax+352]
mov ebx, [eax+368]
mov ebx, [eax+384]
mov ebx, [eax+400]
mov ebx, [eax+416]
mov ebx, [eax+432]
mov ebx, [eax+448]
mov ebx, [eax+464]
mov ebx, [eax+480]
mov ebx, [eax+496]
mov ebx, [eax+512]
mov ebx, [eax+528]
mov ebx, [eax+544]
mov ebx, [eax+560]
mov ebx, [eax+576]
mov ebx, [eax+592]
mov ebx, [eax+608]
mov ebx, [eax+624]
mov ebx, [eax+640]
mov ebx, [eax+656]
mov ebx, [eax+672]
mov ebx, [eax+688]
mov ebx, [eax+704]
mov ebx, [eax+720]
mov ebx, [eax+736]
mov ebx, [eax+752]
mov ebx, [eax+768]
mov ebx, [eax+784]
mov ebx, [eax+800]
mov ebx, [eax+816]
mov ebx, [eax+832]
mov ebx, [eax+848]
mov ebx, [eax+864]
mov ebx, [eax+880]
mov ebx, [eax+896]
mov ebx, [eax+912]
mov ebx, [eax+928]
mov ebx, [eax+944]
mov ebx, [eax+960]
mov ebx, [eax+976]
mov ebx, [eax+992]
mov ebx, [eax+1008]
add eax, 1024
sub ecx, 1024
jnz $read_loop
sub edx, 1
jnz $main_loop
pop ebx
ret
}
}
void __declspec(naked) __cdecl ReadCacheLineFwd32(void* src, DWORD count, DWORD repeat)
{
__asm
{
push ebx
mov edx, [esp+4+12]
$main_loop:
mov eax, [esp+4+4]
mov ecx, [esp+4+8]
ALIGN 16
$read_loop:
mov ebx, [eax]
mov ebx, [eax+32]
mov ebx, [eax+64]
mov ebx, [eax+96]
mov ebx, [eax+128]
mov ebx, [eax+160]
mov ebx, [eax+192]
mov ebx, [eax+224]
mov ebx, [eax+256]
mov ebx, [eax+288]
mov ebx, [eax+320]
mov ebx, [eax+352]
mov ebx, [eax+384]
mov ebx, [eax+416]
mov ebx, [eax+448]
mov ebx, [eax+480]
mov ebx, [eax+512]
mov ebx, [eax+544]
mov ebx, [eax+576]
mov ebx, [eax+608]
mov ebx, [eax+640]
mov ebx, [eax+672]
mov ebx, [eax+704]
mov ebx, [eax+736]
mov ebx, [eax+768]
mov ebx, [eax+800]
mov ebx, [eax+832]
mov ebx, [eax+864]
mov ebx, [eax+896]
mov ebx, [eax+928]
mov ebx, [eax+960]
mov ebx, [eax+992]
add eax, 1024
sub ecx, 1024
jnz $read_loop
sub edx, 1
jnz $main_loop
pop ebx
ret
}
}
void __declspec(naked) __cdecl ReadCacheLineFwd64(void* src, DWORD count, DWORD repeat)
{
__asm
{
push ebx
mov edx, [esp+4+12]
$main_loop:
mov eax, [esp+4+4]
mov ecx, [esp+4+8]
ALIGN 16
$read_loop:
mov ebx, [eax]
mov ebx, [eax+64]
mov ebx, [eax+128]
mov ebx, [eax+192]
mov ebx, [eax+256]
mov ebx, [eax+320]
mov ebx, [eax+384]
mov ebx, [eax+448]
mov ebx, [eax+512]
mov ebx, [eax+576]
mov ebx, [eax+640]
mov ebx, [eax+704]
mov ebx, [eax+768]
mov ebx, [eax+832]
mov ebx, [eax+896]
mov ebx, [eax+960]
add eax, 1024
sub ecx, 1024
jnz $read_loop
sub edx, 1
jnz $main_loop
pop ebx
ret
}
}
void __declspec(naked) __cdecl ReadCacheLineFwd128(void* src, DWORD count, DWORD repeat)
{
__asm
{
push ebx
mov edx, [esp+4+12]
$main_loop:
mov eax, [esp+4+4]
mov ecx, [esp+4+8]
ALIGN 16
$read_loop:
mov ebx, [eax]
mov ebx, [eax+128]
mov ebx, [eax+256]
mov ebx, [eax+384]
mov ebx, [eax+512]
mov ebx, [eax+640]
mov ebx, [eax+768]
mov ebx, [eax+896]
add eax, 1024
sub ecx, 1024
jnz $read_loop
sub edx, 1
jnz $main_loop
pop ebx
ret
}
}
void __declspec(naked) __cdecl ReadCacheLineFwd256(void* src, DWORD count, DWORD repeat)
{
__asm
{
push ebx
mov edx, [esp+4+12]
$main_loop:
mov eax, [esp+4+4]
mov ecx, [esp+4+8]
ALIGN 16
$read_loop:
mov ebx, [eax]
mov ebx, [eax+256]
mov ebx, [eax+512]
mov ebx, [eax+768]
add eax, 1024
sub ecx, 1024
jnz $read_loop
sub edx, 1
jnz $main_loop
pop ebx
ret
}
}
void __declspec(naked) __cdecl ReadCacheLineFwd512(void* src, DWORD count, DWORD repeat)
{
__asm
{
push ebx
mov edx, [esp+4+12]
$main_loop:
mov eax, [esp+4+4]
mov ecx, [esp+4+8]
ALIGN 16
$read_loop:
mov ebx, [eax]
mov ebx, [eax+512]
add eax, 1024
sub ecx, 1024
jnz $read_loop
sub edx, 1
jnz $main_loop
pop ebx
ret
}
}
void __declspec(naked) __cdecl WriteCacheLineFwd16(void* src, DWORD count, DWORD repeat)
{
__asm
{
push ebx
mov edx, [esp+4+12]
xor ebx, ebx
$main_loop:
mov eax, [esp+4+4]
mov ecx, [esp+4+8]
ALIGN 16
$write_loop:
mov [eax], ebx
mov [eax+16], ebx
mov [eax+32], ebx
mov [eax+48], ebx
mov [eax+64], ebx
mov [eax+80], ebx
mov [eax+96], ebx
mov [eax+112], ebx
mov [eax+128], ebx
mov [eax+144], ebx
mov [eax+160], ebx
mov [eax+176], ebx
mov [eax+192], ebx
mov [eax+208], ebx
mov [eax+224], ebx
mov [eax+240], ebx
mov [eax+256], ebx
mov [eax+272], ebx
mov [eax+288], ebx
mov [eax+304], ebx
mov [eax+320], ebx
mov [eax+336], ebx
mov [eax+352], ebx
mov [eax+368], ebx
mov [eax+384], ebx
mov [eax+400], ebx
mov [eax+416], ebx
mov [eax+432], ebx
mov [eax+448], ebx
mov [eax+464], ebx
mov [eax+480], ebx
mov [eax+496], ebx
mov [eax+512], ebx
mov [eax+528], ebx
mov [eax+544], ebx
mov [eax+560], ebx
mov [eax+576], ebx
mov [eax+592], ebx
mov [eax+608], ebx
mov [eax+624], ebx
mov [eax+640], ebx
mov [eax+656], ebx
mov [eax+672], ebx
mov [eax+688], ebx
mov [eax+704], ebx
mov [eax+720], ebx
mov [eax+736], ebx
mov [eax+752], ebx
mov [eax+768], ebx
mov [eax+784], ebx
mov [eax+800], ebx
mov [eax+816], ebx
mov [eax+832], ebx
mov [eax+848], ebx
mov [eax+864], ebx
mov [eax+880], ebx
mov [eax+896], ebx
mov [eax+912], ebx
mov [eax+928], ebx
mov [eax+944], ebx
mov [eax+960], ebx
mov [eax+976], ebx
mov [eax+992], ebx
mov [eax+1008], ebx
add eax, 1024
sub ecx, 1024
jnz $write_loop
sub edx, 1
jnz $main_loop
pop ebx
ret
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -