0
Ich habe eine externe Funktion zu verdoppeln.Convert int in AVX x86
Ich versuchte mit: vcvtsi2sd
und cvtsi2sd
, aber es funktioniert nicht.
Edit:
Hier ist meine .asm Datei
.model flat,c
.code
; Function declatation:
; int calculateAreaUnderCurve_(double startPoint, double endPoint,
; int numberOfTrapezes, double* coefficients, double* result);
calculateAreaUnderCurve_ proc
push ebp
mov ebp,esp
; Load argument values
vmovsd xmm1,real8 ptr [ebp+8] ;xmm1 = startPoint
vmovsd xmm2,real8 ptr [ebp+16] ;xmm2 = endPoint
mov ebx, [ebp+20] ;ebx = numberOfTrapezez int value
mov eax, [ebp+28] ;eax = pointer to coefficients array
mov ecx, [ebp+32] ;ecx = pointer to result
cvtsi2sd xmm3,dword [ebp+20] ;convert to double
movsd real8 ptr [ecx],xmm3 ;save result
pop ebp
ret
calculateAreaUnderCurve_ endp
end
Und meine Funktionsaufruf:
int numberOfTrapezes=100;
//initialize other parameters
calculateAreaUnderCurve_(startPoint,endPoint,numberOfTrapezes, coefficients, &result);
Als Ergebnis i seltsame Zahl bekommen 1.0761e+09
Sie wahrscheinlich von clobbering ebx abstürzen. Verwenden Sie einfach 'vcvtsi2sd' mit einem Speicheroperanden, wenn Sie Code für eine beschissene Aufrufkonvention wie 32bit x86 schreiben, die Argumente auf dem Stack übergibt. –
Welche CPU benutzen Sie? 'vcvtsi2sd' ist AVX-512, nicht AVX. –
@PaulR Ich würde noch einmal auf die Instruktionssatz-Referenz schauen, wenn ich Sie wäre. – EOF