|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
FH Super JLI'ler
Alter: 36 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 07.05.2005, 20:50 Titel: [Inline-ASM] Variablen aus Klasse in Register |
|
|
CPP: | class CTest
{
public:
static inline void Func()
{
__asm mov eax,Var
//[...]
}
static unsigned int Var;
}; |
Ich will die Variable Var in den Register eax kriegen... Das geht aber nicht. Der meckert, dass sei ein unzulässiges Symbol.
Wenn ich das nicht hinkriege, muss ich 2 lokale Variablen definieren, und einen timeGetTime-Aufruf mehr machen... Is also wichtig!
Die Funktion wird mehrmals pro Frame aufgerufen... Also is es wirklich wichtig!
Gruß
FH _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 07.05.2005, 21:12 Titel: |
|
|
Bei Klassen geht das nicht, da kommst Du nicht mit durch den StackCheck. Möglichkeit ist die Adresse auf einen Pointer:
CPP: | class CTest
{
public:
inline void Func()
{
static unsigned int *temp =&Var;
__asm mov eax,temp
//[...]
}
static unsigned int Var;
}; | Wie ich es in meiner Mathlib z.B. gemacht habe: CPP: | inline basic_vector<float> basic_vector<float>::crossProduct (const basic_vector<float> &other) const
{
// Static bringt speed
static basic_vector<float> result;
static float* p_result = (float*)&result;
// Kreuzprodukt ziehen
__asm { mov ecx, this };
__asm { movups xmm0, [ecx] };
__asm { mov edx, other };
__asm { movaps xmm2, xmm0 };
__asm { shufps xmm0, xmm0, 0xC9 }; // 11001001
__asm { movups xmm1, [edx] };
__asm { shufps xmm1, xmm1, 0xD2 }; // Shuffle zu: 11010010
//
__asm { mulps xmm0, xmm1 };
__asm { shufps xmm2, xmm2, 0xD2 }; // 11010010
__asm { mov eax, p_result };
__asm { shufps xmm1, xmm1, 0xD2 }; // Shuffle zu: 11010010 (11001001)
//
__asm { mulps xmm2, xmm1 };
//
__asm { subps xmm0, xmm2 };
__asm { movups [ eax ], xmm0 };
// W auf 1 setzen
result.w = 1.0f;
return (result);
} |
static vor die Variable und gut ist es wird beim 1. Funktionsaufruf initialisiert und die Speicherverknüpfung bleibt bis zum Ende des Programms aufrecht. _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
|
FH Super JLI'ler
Alter: 36 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 08.05.2005, 11:28 Titel: |
|
|
Gute Idee!!! Danke!
Gruß
FH _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free |
|
Nach oben |
|
|
FH Super JLI'ler
Alter: 36 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 09.05.2005, 10:47 Titel: |
|
|
Nochmal ne Frage:
CPP: | static unsigned int* temp=&Var;
__asm mov eax,temp |
Wenn ich Var anreden will, dann kann ich doch nicht den Zeiger darauf verwenden, oder? Dann bewege ich doch die Adresse statt dem Inahlt am Ziel der Adresse in den eax, oder? Oder bin ich gerade total durcheinander?
Gruß
FH _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|