🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

2 total messages Started by Maciek Sun, 13 Aug 2017 16:19
typ __m256 i rejestry procesora
#309382
Author: Maciek
Date: Sun, 13 Aug 2017 16:19
33 lines
2503 bytes
Hej!
Mam pytanie. W disasemblerze widzę, że typ __m256 operuje na rejestrach ymm, w związku z czym mam pytanie - które to jest rozszerzenie procesora ? xmmX to rejestry sse natomiast nie wiem które rozszerzenie operuje na rejestrach ymm, krótki przykład:

#include <iostream>
#include <future>

int main()
{
	int a[4] = { 1, 2, 3, 4 }, b[4] = { 4, 3, 2, 1 }, result[4] = { 0, 0, 0, 0 };
	__m256 *aa, *bb, *cc;
	aa = (__m256*)a;
	bb = (__m256*)b;
	cc = (__m256*)result;
	*cc = _mm256_add_ps(*aa, *bb);
	std::cout << "RESULT: " << result[0] << ", " << result[1] << ", " << result[2] << ", " << result[3] << std::endl;
	return 0;
}

W oknie disasemblera mam:

003F24B0  mov         eax,dword ptr [bb]  
003F24B3  mov         ecx,dword ptr [aa]  
003F24B6  vmovups     ymm0,ymmword ptr [ecx]  
003F24BA  vaddps      ymm0,ymm0,ymmword ptr [eax]  
003F24BE  vmovups     ymmword ptr [ebp-160h],ymm0  
003F24C6  mov         edx,dword ptr [cc]  
003F24C9  vmovups     ymm0,ymmword ptr [ebp-160h]  
003F24D1  vmovups     ymmword ptr [edx],ymm0


Pozdrawiam, i dzięki za odpowiedź ewentualnie wskazówki.

PS. Czy to rozszerzenie jest na różnych architekturach ??
Re: typ __m256 i rejestry procesora
#309383
Author: Maciek
Date: Sun, 13 Aug 2017 16:42
37 lines
2944 bytes
W dniu niedziela, 13 sierpnia 2017 18:19:10 UTC+2 użytkownik Maciek napisał:
> Hej!
> Mam pytanie. W disasemblerze widzę, że typ __m256 operuje na rejestrach ymm, w związku z czym mam pytanie - które to jest rozszerzenie procesora ? xmmX to rejestry sse natomiast nie wiem które rozszerzenie operuje na rejestrach ymm, krótki przykład:
> 
> #include <iostream>
> #include <future>
> 
> int main()
> {
> 	int a[4] = { 1, 2, 3, 4 }, b[4] = { 4, 3, 2, 1 }, result[4] = { 0, 0, 0, 0 };
> 	__m256 *aa, *bb, *cc;
> 	aa = (__m256*)a;
> 	bb = (__m256*)b;
> 	cc = (__m256*)result;
> 	*cc = _mm256_add_ps(*aa, *bb);
> 	std::cout << "RESULT: " << result[0] << ", " << result[1] << ", " << result[2] << ", " << result[3] << std::endl;
> 	return 0;
> }
> 
> W oknie disasemblera mam:
> 
> 003F24B0  mov         eax,dword ptr [bb]  
> 003F24B3  mov         ecx,dword ptr [aa]  
> 003F24B6  vmovups     ymm0,ymmword ptr [ecx]  
> 003F24BA  vaddps      ymm0,ymm0,ymmword ptr [eax]  
> 003F24BE  vmovups     ymmword ptr [ebp-160h],ymm0  
> 003F24C6  mov         edx,dword ptr [cc]  
> 003F24C9  vmovups     ymm0,ymmword ptr [ebp-160h]  
> 003F24D1  vmovups     ymmword ptr [edx],ymm0
> 
> 
> Pozdrawiam, i dzięki za odpowiedź ewentualnie wskazówki.
> 
> PS. Czy to rozszerzenie jest na różnych architekturach ??

OK. Już wiem:
https://pl.wikipedia.org/wiki/Advanced_Vector_Extensions
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads