C
ret 16 dient dazu, den stack aufzuräumen, an sich ist __m128 ja eine 16byte struktur; offenbar hat sich aber in den neueren vc++ versionen die behandlung von xmm intrinsics geändert, da der parameter nun in xmm0 übergeben wird, darf man dann natürlich nicht mehr am stack herumbasteln.
anders gesagt: der code, so wie er ist, ist unlogisch - entweder wird alles über den stack abgewickelt (direkt oder per referenz), also auch der rückgabewert, oder beides geht über xmm register - ich habe das gefühl, diese funktion wurde nie getestet, jedenfalls nicht mit dem compiler, den du benutzt.