XMM register

02/15/2015 23:22 .SlaP#1
Hallo Elitepvpers, ich hätte eine Frage.
Wie MOV ich per C++ so ein wert: [Only registered and activated users can see links. Click Here To Register...] in das XMM(7) register.

Danke im Vorraus :)

Mfg .SlaP
02/16/2015 17:13 Jeoni#2
Mit C++ gar nicht (zumindest nicht vom Sprachstandard her).
Das kannst du maximal per (inline) Assembler machen.
Die Sprache C/C++ selbst ist vom Standard her von der Architektur / Plattform unabhängig. Von der Registerebene soll die Sprache ja abstrahieren. Und die XMM-Register sind x86 / x86_64 spezifische Register.
Wenn's also unbedingt ein spezielles Register sein muss, kommste um (inline) Assembler nicht drumrum. Maximal noch über irgendwelche unter Umständen compilerspezifischen Intrinsics, aber das nehme ich eigentlich nicht an, weil auch die (zumindest von dem, was ich kenne) von den Registern abstrahieren.
Mit freundlichen Grüßen
Jeoni
02/16/2015 21:57 +Yazzn#3
Solltest du Visual Studio nutzen kannst du einfach die [Only registered and activated users can see links. Click Here To Register...] verwenden.
02/18/2015 00:03 .SlaP#4
Quote:
Originally Posted by Peter File View Post
Solltest du Visual Studio nutzen kannst du einfach die [Only registered and activated users can see links. Click Here To Register...] verwenden.
Code:
	__m128 cords = {50000.0f,-30000.0f,10000.0f,0.97f};
     unsigned long adr = (unsigned long)&cords;

	DWORD setMouseState = *(DWORD*)0x07CE01C;
	DWORD setMouseStateCall = 0x044F000;
	__asm{
		movss  xmm7, adr
			mov ecx, setMouseState
			push 1
			push 0
			call setMouseStateCall
	}
So geht es leidet nicht.
02/18/2015 08:36 Jeoni#5
Schonmal geschaut, was movss macht? Das übernimmt nur den ersten float-Wert der angegebenen Adresse in das Register. Was du brauchst ist movdqa bzw. movdqu, wenn du nicht garantieren kannst, dass die cords-Variable aligned ist. Abgesehen davon, machst du das mit der Zwischenvariable adr falsch. Dadurch lädst du zur Zeit nicht einmal den ersten float, sondern nur adr, interpretiert als float, nach xmm7.
Statt
Code:
movss xmm7, adr
sollte
Code:
movdqu xmm7, cords
dastehen, dann sollte es klappen, denke ich.

Mit freundlichen Grüßen
Jeoni
02/20/2015 05:17 .SlaP#6
Quote:
Originally Posted by Jeoni View Post
Schonmal geschaut, was movss macht? Das übernimmt nur den ersten float-Wert der angegebenen Adresse in das Register. Was du brauchst ist movdqa bzw. movdqu, wenn du nicht garantieren kannst, dass die cords-Variable aligned ist. Abgesehen davon, machst du das mit der Zwischenvariable adr falsch. Dadurch lädst du zur Zeit nicht einmal den ersten float, sondern nur adr, interpretiert als float, nach xmm7.
Statt
Code:
movss xmm7, adr
sollte
Code:
movdqu xmm7, cords
dastehen, dann sollte es klappen, denke ich.

Mit freundlichen Grüßen
Jeoni

Mhh ging leider auch nicht...

Die werte werden nicht überschrieben
03/20/2015 23:48 .SlaP#7
help pls
03/21/2015 11:12 Dr. Coxxy#8
Code:
__declspec(align(16)) struct Vector4
{
	float a;
	float b;
	float c;
	float d;
	Vector4(float a, float b, float c, float d) : a(a), b(b), c(c), d(d) { };
};

	Vector4 MyVector(1.0f, 2.0f, 3.0f, 4.0f);
	__asm movaps xmm7, MyVector;
hf