global Reader
section .text
Reader:
	push r8
	push r9
	push r10
	add rsi, rdi    ; rsi now points to end.
.L1:
	mov r10, rdi
.L2:
	mov ax, word[ dword r10]
	add r10, 1
	cmp r10, rsi
	jb  .L2
	dec rdx
	jnz .L1

    cpuid
    rdtsc
	mov r8, rax
	mov r9, rdx
	mov ax, word[dword rdi+96] ; read
	rdtsc
	mov [rdi+40], r8 ; high
	mov [rdi+104], r9 ; low
	mov r8, rax
	mov r9, rdx
	mov [rdi+44], r8 ; high
	mov [rdi+108], r9 ; low

	cpuid
	rdtsc
	mov r8, rax
	mov r9, rdx
	mov ax, word[dword rdi+8] ; read
	rdtsc
	mov [rdi+48], r8 ; high
	mov [rdi+112], r9 ; low
	mov r8, rax
	mov r9, rdx
	mov [rdi+52], r8
	mov [rdi+116], r9

	cpuid
	rdtsc
	mov r8, rax
	mov r9, rdx
	mov ax, word[dword rdi+768] ; read
	rdtsc
	mov [rdi+56], r8 ; high
	mov [rdi+120], r9 ; low
	mov r8, rax
	mov r9, rdx
	mov [rdi+60], r8
	mov [rdi+124], r9

	cpuid
	rdtsc
	mov r8, rax
	mov r9, rdx
	mov ax, word[dword rdi+512] ; read
	rdtsc
	mov [rdi+64], r8 ; high
	mov [rdi+128], r9 ; low
	mov r8, rax
	mov r9, rdx
	mov [rdi+68], r8
	mov [rdi+132], r9

	cpuid
	rdtsc
	mov r8, rax
	mov r9, rdx
	mov ax, word[dword rdi+384] ; read
	rdtsc
	mov [rdi+72], r8 ; high
	mov [rdi+136], r9 ; low
	mov r8, rax
	mov r9, rdx
	mov [rdi+76], r8
	mov [rdi+140], r9

	cpuid
	rdtsc
	mov r8, rax
	mov r9, rdx
	mov ax, word[dword rdi+1016] ; read
	rdtsc
	mov [rdi+80], r8 ; high
	mov [rdi+144], r9 ; low
	mov r8, rax
	mov r9, rdx
	mov [rdi+84], r8
	mov [rdi+148], r9

	cpuid
	rdtsc
	mov r8, rax
	mov r9, rdx
	mov ax, word[dword rdi+128] ; read
	rdtsc
	mov [rdi+88], r8 ; high
	mov [rdi+152], r9 ; low
	mov r8, rax
	mov r9, rdx
	mov [rdi+92], r8
	mov [rdi+156], r9

	cpuid
	rdtsc
	mov r8, rax
	mov r9, rdx
	mov ax, word[dword rdi+435] ; read
	rdtsc
	mov [rdi+96], r8 ; high
	mov [rdi+160], r9 ; low
	mov r8, rax
	mov r9, rdx
	mov [rdi+100], r8
	mov [rdi+164], r9

	pop r8
	pop r9
	pop r10
	ret
