try now.
It is only the function code i made. Not a working app. The returned value is stored in the 1st double in xmm0
; #########################################################################
;
; The framing affects are drawn on the client area by a single procedure,
; "Frame3D". In the WmdProc message handling Proc, the WM_PAINT message
; calls another Proc called "Paint_Proc" which contains the procedure calls
; to "Frame3D".
;
; #########################################################################
.686p
.model flat,stdcall
.mmx
.xmm
OPTION CASEMAP:NONE
; #########################################################################
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\gdi32.lib
; #########################################################################
;=============
; Local macros
;=============
szText MACRO Name, Text:VARARG
LOCAL lbl
jmp lbl
Name db Text,0
lbl:
ENDM
m2m MACRO M1, M2
push M2
pop M1
ENDM
return MACRO arg
mov eax, arg
ret
ENDM
;=================
; Local prototypes
;=================
; Sse2_exp_precise PROTO :DWORD,:DWORD
.data?
XMMWORD2 struc
data dq 2 dup (?)
XMMWORD2 ends
.data
szDisplayName db "3D Frames",0
CommandLine dd 0
hWnd dd 0
hInstance dd 0
SSE_Cv4 dq 92.3324826168936567, 92.3324826168936567
; Int64ToDoubleMagic
SSE_Shifter4 dq 6.755399441055744e+15, 6.755399441055744e+15,
8.67361737988403547e-19, 8.67361737988403547e-19
SSE_ExpVar1 dq 1.08304246962234174e-2, 1.08304246962234174e-2
SSE_ExpVar2 dq 2.5728046223276691e-14, 2.5728046223276691e-14
SSE_ExpVar3 dq 8.33216827061673306e-3, 1.66666666698150945e-1
SSE_ExpVar4 dq 4.16667208687284685e-2, 4.99999999999566291e-1
ExpTable dq 0, 0, 2.04582073601169570e-16, 2.42294657314453310e-310
dq 4.99974487227263260e-17, 4.87227730461210550e-310, 7.35784687124741820e-18, 7.34827949904982370e-310
dq 8.18931763819551360e-17, 9.85124358964738520e-310, 1.66658814423267470e-18, 1.23814631722046340e-309
dq 1.34046152845389320e-16, 1.49392350395699130e-309, 1.44126483728110840e-16, 1.75248592164539530e-309
dq 1.75676685628521850e-16, 2.01386389946222700e-309, 4.77695942525622330e-17, 2.27808809684712520e-309
dq 9.34171060990504440e-17, 2.54518950709912420e-309, 4.58567032666235110e-17, 2.81519946101217220e-309
dq 7.82657325863607620e-17, 3.08814963055018380e-309, 2.82378442595106130e-17, 3.36407203256215700e-309
dq 3.29047266460084160e-17, 3.64299903253770950e-309, 4.72136812117012750e-17, 3.92496334840353820e-309
dq 3.34846233362515240e-17, 4.20999805436120270e-309, 5.52755004850524930e-17, 4.49813658476670150e-309
dq 1.19250041407656740e-16, 4.78941273805230130e-309, 1.65291010027318310e-16, 5.08386068069106740e-309
dq 3.75085420130312720e-17, 5.38151495120456640e-309, 1.71528210782905300e-16, 5.68241046421419000e-309
dq 2.10230496752157180e-18, 5.98658251453665700e-309, 1.33575100888345410e-17, 6.29406678132401250e-309
dq 1.95725852931120360e-17, 6.60489933224881300e-309, 1.14594728088946900e-16, 6.91911662773481080e-309
dq 1.45979432294737540e-16, 7.23675552523374920e-309, 6.66380458923219520e-17, 7.55785328354870360e-309
dq 5.68648095791174000e-17, 7.88244756720450720e-309, 7.00787504690699450e-17, 8.21057645086578490e-309
dq 1.11524233151705370e-16, 8.54227842380307460e-309, 8.99959272503798580e-17, 8.87759239440759380e-309
dq 8.86511592917582850e-17, 9.21655769475515650e-309, 1.46901932708742340e-16, 9.55921408521980240e-309
dq 1.32721817677819360e-16, 9.90560175913766330e-309, 1.13655151388858840e-16, 1.02557613475215990e-308
dq 1.26761474172717220e-16, 1.06097339238271920e-308, 9.50689710108795960e-18, 1.09675610087706390e-308
dq 7.97786311075428990e-17, 1.13292845751990740e-308, 7.32795774215157790e-17, 1.16949470530139930e-308
dq 5.15483011707867830e-17, 1.20645913341482120e-308, 2.42539857666898060e-17, 1.24382607775970770e-308
dq 1.34460827434261430e-16, 1.28159992145044320e-308, 7.60136434780041980e-17, 1.31978509533039990e-308
dq 1.53414100536037230e-17, 1.35838607849166940e-308, 9.51550643423588250e-17, 1.39740739880045840e-308
dq 7.33935310510226070e-17, 1.43685363342820510e-308, 3.54094826264618290e-17, 1.47672940938847590e-308
dq 4.87516052622706170e-17, 1.51703940407971140e-308, 1.25886762958400070e-16, 1.55778834583388210e-308
dq 1.18426926175418470e-16, 1.59898101447111830e-308, 1.82140544036225900e-17, 1.64062224186037870e-308
dq 1.68548729062897310e-17, 1.68271691248622430e-308, 3.62161593533689420e-17, 1.72526996402176670e-308
dq 1.01562190116415010e-17, 1.76828638790785260e-308, 6.74378629321924300e-17, 1.81177122993855490e-308
dq 1.79012690760451310e-17, 1.85572959085304300e-308, 5.26537076855627410e-17, 1.90016662693389250e-308
dq 8.58071433248992810e-17, 1.94508755061191610e-308, 1.79639326598330220e-17, 1.99049763107757670e-308
dq 6.04870235399373270e-17, 2.03640219489905820e-308, 5.33680587851415070e-17, 2.08280662664707050e-308
dq 4.57849152770600950e-17, 2.12971636952645360e-308, 2.04142788975783030e-17, 2.17713692601466200e-308
SSE_Exp_MMask0 dd 0FFFFFFC0h, 0, 0FFFFFFC0h, 0
SSE_Exp_Bias0 dq 0FFC0h, 0FFC0h
SSE_OneVal0 dq 1.0
SSE_Exp_EMask0 dq 0FFF00000h, 0FFF00000h
SSe_Exp_RetVal dq 0
SSE_TmpVar2 dq 0
.code
start:
push 1
push 5
call Sse2_exp_precise
invoke ExitProcess, 0
; #########################################################################
Sse2_exp_precise proc
ControlWord = dword ptr -4
Number = dword ptr 8
Flag = dword ptr 0Ch
push ebp
mov ebp, esp
sub esp, 4
push edx
push ecx
mov [ebp+ControlWord], 0
mov eax, [ebp+Flag]
test eax, 1
jz short loc_4CE8D0
cvtsi2sd xmm0, [ebp+Number]
jmp short loc_4CE905
; ---------------------------------------------------------------------------
loc_4CE8D0: ; CODE XREF: Sse2_exp_precise+17?j
test eax, 2
jz short loc_4CE8DE
cvtss2sd xmm0, [ebp+Number]
jmp short loc_4CE905
; ---------------------------------------------------------------------------
loc_4CE8DE: ; CODE XREF: Sse2_exp_precise+25?j
test eax, 4
jz short loc_4CE8EE
mov eax, [ebp+Number]
movsd xmm0, qword ptr [eax]
jmp short loc_4CE905
; ---------------------------------------------------------------------------
loc_4CE8EE: ; CODE XREF: Sse2_exp_precise+33?j
test eax, 8
jz short loc_4CE8FE
mov eax, [ebp+Number]
movq xmm0, qword ptr [eax]
jmp short loc_4CE905
; ---------------------------------------------------------------------------
loc_4CE8FE: ; CODE XREF: Sse2_exp_precise+43?j
xor eax, eax
jmp loc_4CEAE7
; ---------------------------------------------------------------------------
loc_4CE905: ; CODE XREF: Sse2_exp_precise+1E?j
; Sse2_exp_precise+2C?j ...
unpcklpd xmm0, xmm0
pextrw eax, xmm0, 3
and eax, 7FFFh
mov edx, 408Fh
sub edx, eax
sub eax, 3C90h
or edx, eax
cmp edx, 80000000h
jnb loc_4CEAC4
movupd xmm1, SSE_Cv4
movupd xmm6, SSE_Shifter4
movupd xmm2, SSE_ExpVar1
movupd xmm3, SSE_ExpVar2
mulpd xmm1, xmm0
addpd xmm1, xmm6
movupd xmm7, xmm1
subpd xmm1, xmm6
mulpd xmm2, xmm1
mulpd xmm3, xmm1
movupd xmm5, SSE_ExpVar4
subpd xmm0, xmm2
movd eax, xmm7
mov ecx, eax
and ecx, 3Fh
shl ecx, 4
sar eax, 6
mov edx, eax
subpd xmm0, xmm3
movupd xmm2, ExpTable[ecx]
movupd xmm4, SSE_ExpVar3
mulpd xmm4, xmm0
movupd xmm1, xmm0
mulpd xmm0, xmm0
addpd xmm5, xmm4
mulsd xmm0, xmm0
addsd xmm1, xmm2
unpckhpd xmm2, xmm2
movdqu xmm6, xmmword ptr SSE_Exp_MMask0
pand xmm7, xmm6
movdqu xmm6, xmmword ptr SSE_Exp_Bias0
paddq xmm7, xmm6
psllq xmm7, 2Eh
mulpd xmm0, xmm5
addsd xmm1, xmm0
orpd xmm2, xmm7
unpckhpd xmm0, xmm0
addsd xmm0, xmm1
add edx, 37Eh
cmp edx, 77Ch
ja loc_4CEA07
mulsd xmm0, xmm2
addsd xmm0, xmm2
mov eax, 1
jmp loc_4CEABF
; ---------------------------------------------------------------------------
loc_4CEA07: ; CODE XREF: Sse2_exp_precise+13F?j
fstcw word ptr [ebp+ControlWord]
mov dx, word ptr [ebp+ControlWord]
or dx, 300h
mov word ptr SSe_Exp_RetVal, dx
fldcw word ptr SSe_Exp_RetVal
mov edx, eax
sar eax, 1
sub edx, eax
movdqu xmm6, xmmword ptr SSE_Exp_EMask0
pandn xmm6, xmm2
add eax, 3FFh
movd xmm3, eax
psllq xmm3, 34h
orpd xmm6, xmm3
add edx, 3FFh
movd xmm4, edx
psllq xmm4, 34h
movlpd SSe_Exp_RetVal, xmm0
fld SSe_Exp_RetVal
movlpd SSE_TmpVar2, xmm0
fld SSE_TmpVar2
fmul st(1), st
faddp st(1), st
movlpd SSe_Exp_RetVal, xmm4
fld SSe_Exp_RetVal
fmulp st(1), st
fstp SSe_Exp_RetVal
movlps xmm0, SSe_Exp_RetVal
fldcw word ptr [ebp+ControlWord]
pextrw ecx, xmm0, 3
and ecx, 7FF0h
cmp ecx, 7FF0h
jb short loc_4CEAAE
mov eax, 0FFFFFFFEh
jmp short loc_4CEABF
; ---------------------------------------------------------------------------
loc_4CEAAE: ; CODE XREF: Sse2_exp_precise+1F5?j
cmp ecx, 0
jnz short loc_4CEABA
mov eax, 0FFFFFFFFh
jmp short loc_4CEABF
; ---------------------------------------------------------------------------
loc_4CEABA: ; CODE XREF: Sse2_exp_precise+201?j
mov eax, 1
loc_4CEABF: ; CODE XREF: Sse2_exp_precise+152?j
; Sse2_exp_precise+1FC?j ...
jmp loc_4CEAE7
; ---------------------------------------------------------------------------
loc_4CEAC4: ; CODE XREF: Sse2_exp_precise+77?j
mov eax, [ebp+Number]
and eax, 7FFFFFFFh
cmp eax, 40900000h
jnb short loc_4CEAE2
addsd xmm0, SSE_OneVal0
mov eax, 1
jmp short loc_4CEAE7
; ---------------------------------------------------------------------------
loc_4CEAE2: ; CODE XREF: Sse2_exp_precise+221?j
mov eax, 0FFFFFFFFh
loc_4CEAE7: ; CODE XREF: Sse2_exp_precise+50?j
; Sse2_exp_precise:loc_4CEABF?j ...
pop ecx
pop edx
mov esp, ebp
pop ebp
retn 8
Sse2_exp_precise endp
; #########################################################################
end start