PDA

View Full Version : SSE4 Vector4D Distance



UfnCod3r
یک شنبه 04 فروردین 1392, 11:23 صبح
سلام
یکی بگه مشکل این کد چیه
می خوام فاظله بردار سه بعدی با SSE محاسبه کنم .
اول با سی ++ نوشتم ولی مجبورم الان با اسمبلی بنویسم .
اسمبلم هیچ بارم نیست .:ناراحت:
الان این که نوشتم چشه اخه می گه RCX, RDXنمشیشناسه .

__declspec(noinline) float __cdecl Vec3DistSSE4(const Vec3* _a, const Vec3* _b)
{
float f;
__asm
{
MOVUPS XMM0, [RCX]
SUBPS XMM0, [RDX]
DPPS XMM0, XMM0, 0x71
SQRTSS XMM0, XMM0
MOVSS [f], XMM0
}
return f;

//__m128 $m = _mm_sub_ps(*((__m128*)_a), *((__m128*)_b));
//return _mm_cvtss_f32(_mm_sqrt_ss(_mm_dp_ps($m, $m, 0x71)));
}

:متفکر:
:متفکر:

xman_1365_x
یک شنبه 04 فروردین 1392, 13:32 عصر
کامپایلر 64 بیتی مایکروسافت اجازه نوشتن inline نمیده،در 32 بیتی هم ثبات 64 وجود نداره،توابع معادل inline رو در msdn جستجو کنید.
موفق باشی

UfnCod3r
یک شنبه 04 فروردین 1392, 14:47 عصر
اه اره این برا x64 هست حواسم نبود .
الان توی __cdecl و x86 این دو تا پارامتر تابع کجا می رن .EAX,EBX ?

xman_1365_x
دوشنبه 05 فروردین 1392, 02:02 صبح
اه اره این برا x64 هست حواسم نبود .
الان توی __cdecl و x86 این دو تا پارامتر تابع کجا می رن .EAX,EBX ?
منظورتون رو متوجه نشدم،اگر نسبت به تابع اول میگید فقط ادرس یک وکتور 16بایتی رو در این ثبات ها قرار بدید
بعد محاسبات رو انجام بدین