here's a Windows-32 example to illustrate, in the compiler selection list choose x86 msvc v19.0 (WINE) with compiler options /arch:SSE2 /O2
then paste this C code in the left pane
Code: Select all
#include <math.h>
void div_dbl (double *result, double *x, double *y)
{
*result = (*x) / (*y);
}
Code: Select all
_result$ = 8 ; size = 4
_x$ = 12 ; size = 4
_y$ = 16 ; size = 4
void div_dbl(double *,double *,double *) PROC ; div_dbl, COMDAT
mov eax, DWORD PTR _x$[esp-4]
movsd xmm0, QWORD PTR [eax]
mov eax, DWORD PTR _y$[esp-4]
divsd xmm0, QWORD PTR [eax]
mov eax, DWORD PTR _result$[esp-4]
movsd QWORD PTR [eax], xmm0
ret 0
void div_dbl(double *,double *,double *) ENDP ; div_dbl
Code: Select all
const _result = 8 ' size = 4
const _x = 12 ' size = 4
const _y = 16 ' size = 4
sub divl_dbl Naked Cdecl(byref result as double, byref x as double, byref y as double)
asm
mov eax, DWORD PTR _x[esp-4]
movsd xmm0, QWORD PTR [eax]
mov eax, DWORD PTR _y[esp-4]
divsd xmm0, QWORD PTR [eax]
mov eax, DWORD PTR _result[esp-4]
movsd QWORD PTR [eax], xmm0
ret 0
end asm
end sub
dim as double res, x=7, y=9
divl_dbl(res, x, y)
Print res
result from x64 msvc v19.0 (WINE)
Code: Select all
result$ = 8
x$ = 16
y$ = 24
void div_dbl(double * __ptr64,double * __ptr64,double * __ptr64) PROC ; div_dbl, COMDAT
movsd xmm0, QWORD PTR [rdx]
divsd xmm0, QWORD PTR [r8]
movsd QWORD PTR [rcx], xmm0
ret 0
void div_dbl(double * __ptr64,double * __ptr64,double * __ptr64) ENDP
Code: Select all
sub divl_dbl Naked Cdecl(byref result as double, byref x as double, byref y as double)
asm
movsd xmm0, QWORD PTR [rdx]
divsd xmm0, QWORD PTR [r8]
movsd QWORD PTR [rcx], xmm0
ret 0
end asm
end sub
dim as double res, x=7, y=9
for x=1 to 8
divl_dbl(res, x, y)
Print res
next