global Four_Byte_Walk
global Eight_Byte_Walk
global Sixteen_Byte_Walk

	section .text

; Params:       rdi = ptr to memory area
;               rsi = length in bytes
;               rdx = loops
;		rcx
; 

Four_Byte_Walk:
        push r10
        add     rsi, rdi
        sub rsi, 64
.L1:
        mov     r10, rdi
.L2:
        mov byte[20+r10], 1  
        mov byte[28+r10], 1  
        mov byte[0+r10], 1 
        mov byte[16+r10], 1 
        mov byte[24+r10], 1 
        mov byte[8+r10], 1 
        mov byte[4+r10], 1 
        mov byte[48+r10], 1 
        mov byte[36+r10], 1 
        mov byte[56+r10], 1 
        mov byte[44+r10], 1 
        mov byte[32+r10], 1 
        mov byte[60+r10], 1
        mov byte[40+r10], 1
        mov byte[52+r10], 1
;        mov byte[64+r10], 1
;        mov byte[68+r10], 1 
;        mov byte[72+r10], 1 
;        mov byte[76+r10], 1
;        mov byte[80+r10], 1 
;        mov byte[84+r10], 1 
;        mov byte[88+r10], 1 
;        mov byte[92+r10], 1 
;        mov byte[96+r10], 1 
;        mov byte[100+r10], 1 
;        mov byte[104+r10], 1 
;        mov byte[108+r10], 1
;        mov byte[112+r10], 1
;        mov byte[114+r10], 1
;        mov byte[120+r10], 1
;        mov byte[124+r10], 1

        add     r10, 64
        cmp     r10, rsi
        jb      .L2
        
        dec     rdx
        jnz     .L1

        pop r10
        ret


Eight_Byte_Walk:
	push r10
	add     rsi, rdi
	sub rsi, 128
.L1:
	mov     r10, rdi
.L2:
	mov byte[48+r10], 2
        mov byte[16+r10], 2
        mov byte[8+r10], 2
        mov byte[32+r10], 2
        mov byte[56+r10], 2
        mov byte[0+r10], 2
        mov byte[40+r10], 2
        mov byte[80+r10], 2
        mov byte[112+r10], 2
        mov byte[64+r10], 2
        mov byte[120+r10], 2
        mov byte[96+r10], 2
        mov byte[104+r10], 2
        mov byte[72+r10], 2
        mov byte[88+r10], 2
;        mov byte[128+r10], 2
;        mov byte[136+r10], 2
;        mov byte[144+r10], 2
;        mov byte[152+r10], 2
;        mov byte[160+r10], 2
;        mov byte[168+r10], 2
;        mov byte[176+r10], 2
;        mov byte[184+r10], 2
;        mov byte[192+r10], 2
;        mov byte[200+r10], 2
;        mov byte[208+r10], 2
;        mov byte[216+r10], 2
;        mov byte[224+r10], 2
;        mov byte[232+r10], 2
;        mov byte[240+r10], 2
;        mov byte[248+r10], 2

	add     r10, 128
	cmp     r10, rsi
	jb      .L2

	dec     rdx
	jnz     .L1
	
	pop r10
	ret

Sixteen_Byte_Walk:
        push r10
        add     rsi, rdi
        sub rsi, 256
.L1:
        mov     r10, rdi
.L2:
        mov byte[32+r10], 3
        mov byte[96+r10], 3 
        mov byte[0+r10], 3
        mov byte[48+r10], 3
        mov byte[112+r10], 3
        mov byte[80+r10], 3
        mov byte[16+r10], 3
        mov byte[64+r10], 3
        mov byte[240+r10], 3
        mov byte[144+r10], 3
        mov byte[208+r10], 3
        mov byte[176+r10], 3
        mov byte[192+r10], 3
        mov byte[160+r10], 3
        mov byte[224+r10], 3
        mov byte[128+r10], 3 
;        mov byte[256+r10], 3
;        mov byte[272+r10], 3
;        mov byte[288+r10], 3
;        mov byte[304+r10], 3
;        mov byte[320+r10], 3
;        mov byte[336+r10], 3
;        mov byte[352+r10], 3
;        mov byte[368+r10], 3
;        mov byte[384+r10], 3
;        mov byte[400+r10], 3
;        mov byte[416+r10], 3
;        mov byte[432+r10], 3
;        mov byte[448+r10], 3
;        mov byte[464+r10], 3
;        mov byte[480+r10], 3
;        mov byte[496+r10], 3

        add     r10, 256
        cmp     r10, rsi    
        jb      .L2
        
        dec     rdx
        jnz     .L1

        pop r10
        ret

