This procedure receives a parameter of the void* type . Of course, the assembler does not care about the type of parameter a certain procedure expects. To be more precise, the assembler, as a compiler, is not aware of the procedure parameters as a concept, not to mention that it has no concept of procedure at all. Let's take a look at the implementation of the f_set_data_pointer procedure:
f_set_data_pointer:
if (ACTIVE_TARGET = TARGET_W32_OBJ) |\
(ACTIVE_TARGET = TARGET_W32_DLL) |\
(ACTIVE_TARGET = TARGET_L32_O)
push eax
lea eax, [esp + 8]
push dword [eax]
pop dword [data_pointer]
pop eax
ret
else if (ACTIVE_TARGET = TARGET_W64_OBJ) |\
(ACTIVE_TARGET = TARGET_W64_DLL)
push rax
lea rax, [data_pointer]
mov [rax], rcx
pop rax
ret
else if (ACTIVE_TARGET = TARGET_L64_O)
push rax
lea rax, [data_pointer]
mov [rax], rdi
pop rax
ret
end if
Nothing complicated in this code either. The parameter passed to this procedure is simply being written to the data_pointer location.