Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; rdi = char *filename, rsi = struc buffer_struc *mem
- ; rax = void *memory, rbx = u32 width, rcx = u32 height
- load_entire_farbfeld_to_memory:
- ; Just allocate enough, so that it won't be an issue
- mov eax, [rsi + buffer_struct.used]
- mov r10d, eax ; r10 is now the previous used
- mov rbp, [rsi + buffer_struct.base]
- mov rbx, 0xF
- add rax, 0xF
- neg rbx
- and rax, rbx ; align rax to 16 bit
- add rbp, rax
- add eax, MB(5)
- mov [rsi + buffer_struct.used], eax
- call load_entire_file_to_memory
- ; rbx is set as size now
- mov r9, rax
- mov r8, [r9 + 8] ; r8 is height + width
- mov r11, r8
- shr r11, 32 ; r11 is height
- shl r8, 32
- shr r8, 32 ; r8 is width
- bswap r8d
- bswap r11d
- sub rbx, 16 ; rbx is now size of data
- mov rax, 2
- mul rbx
- mov rbx, rax ; We are moving from 2 byte data size, to 4
- add r9, 16 ; r9 now points to beginning of data
- mov rax, 0x0E0C0A0806040200
- movq mm0, rax
- movq2dq xmm1, mm0
- movlhps xmm1, xmm1
- mov rax, 0xFFFFFFFFFFFFFFFF
- movq mm0, rax
- movq2dq xmm2, mm0
- movsd xmm1, xmm2 ; xmm1 is now our first mask
- mov rax, 0xFFFFFFFFFFFFFFFF
- movq mm0, rax
- movq2dq xmm2, mm0
- movlhps xmm2, xmm2
- mov rax, 0x0E0C0A0806040200
- movq mm0, rax
- movq2dq xmm3, mm0
- movsd xmm2, xmm3 ; xmm2 is now our second mask
- xor rdx, rdx
- xor rcx, rcx
- xor rax, rax
- neg ax
- movq xmm0, rax ; xmm0 is now divisor
- cvtdq2ps xmm0, xmm0
- load_entire_farbfeld_to_memory_loop_begin:
- movaps xmm4, [r9 + rdx]
- add rdx, 16
- movq xmm5, xmm4
- pshufb xmm4, xmm1
- pshufb xmm5, xmm1
- cvtdq2ps xmm4, xmm4
- cvtdq2ps xmm5, xmm5
- divps xmm4, xmm0
- divps xmm5, xmm0
- movdqa [rbp + rcx], xmm4
- add rcx, 16
- movdqa [rbp + rcx], xmm5
- add rcx, 16
- cmp rcx, rbx
- jl load_entire_farbfeld_to_memory_loop_begin
- mov rbx, r8
- mov rcx, r11
- ; Calculate the actual used memory
- mov rax, rbx
- mul rcx
- shl rax, 3 ; RGBA * 4
- add r10, rax
- mov [rsi + buffer_struct.used], r10d
- mov rax, rbp
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement