Praktikum2 Coderahmen lässt sich nicht compilieren

StudyForFun
Windoof-User
Windoof-User
Beiträge: 24
Registriert: 30. Apr 2011 17:44

Praktikum2 Coderahmen lässt sich nicht compilieren

Beitrag von StudyForFun »

Ich habe das Problem, dass sich der Coderahmen auf den Poolrechnern nicht kompilieren lässt.

Der Grund dafür ist die Funktion ‘void* malloc_aligned(unsigned int size, int align)’.

Hier ist die Fehlermeldung von g++:
alignedmem.cpp:23: error: cast from ‘char*’ to ‘int’ loses precision

mw1039
Computerversteher
Computerversteher
Beiträge: 346
Registriert: 12. Apr 2011 12:18

Re: Praktikum2 Coderahmen lässt sich nicht compilieren

Beitrag von mw1039 »

Den Coderahmen haben wir mehrfach, auch nochmal direkt vor der Ausgabe und auch in der Zwischenzeit seit der Ausgabe getestet. Das muss wahrscheinlich mit was anderem zu tun haben.
Auf welchem Rechner bist du? Auf clientssh1 oder 2?
Kompilierst du mittels der im Projekt vorgegebenen CMakeLists.txt? Falls nicht, kann es sein, dass bei dir das Flag -fpedantic gesetzt ist und dann macht er eine wesentlich strengere Syntaxpruefung.

der_apfel
Erstie
Erstie
Beiträge: 14
Registriert: 9. Apr 2010 22:47

Re: Praktikum2 Coderahmen lässt sich nicht compilieren

Beitrag von der_apfel »

Also wir haben auch Probleme, wenn wir es probieren mit Hilfe der mitgelieferten CMakeLists.txt zu kompiliren, da er die sse Register nicht kennt.
Es fehlt wohl ein -msse Flag?

Thomas Huxhorn
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 172
Registriert: 6. Okt 2011 15:25

Re: Praktikum2 Coderahmen lässt sich nicht compilieren

Beitrag von Thomas Huxhorn »

Fehlermeldungen posten bitte.

der_apfel
Erstie
Erstie
Beiträge: 14
Registriert: 9. Apr 2010 22:47

Re: Praktikum2 Coderahmen lässt sich nicht compilieren

Beitrag von der_apfel »

Ich erspar euch lieber mal alle einzelnen Fehler, alle sind von der Art.

Code: Alles auswählen

user@clientssh1:~/Downloads/src/build$ make
/src/pr2.cpp:167: error: unknown register name ‘xmm0’ in ‘asm’
make[2]: *** [CMakeFiles/Praktikum2.dir/pr2.cpp.o] Error 1
make[1]: *** [CMakeFiles/Praktikum2.dir/all] Error 2
make: *** [all] Error 2
Im Code steht schematisch

Code: Alles auswählen

asm("xorps %%xmm0, %%xmm0;"
		:
		:
		:
		 "xmm0"
			);
Wenn ich bei den normalen Flags -msse hinzunehme kompiliert der Code ohne Probleme.

mw1039
Computerversteher
Computerversteher
Beiträge: 346
Registriert: 12. Apr 2011 12:18

Re: Praktikum2 Coderahmen lässt sich nicht compilieren

Beitrag von mw1039 »

Normalerweise sollte den Compiler das bei Inline-Assembler nicht interessieren. Der Inline-Block wird beim Kompilieren einfach nur in das Kompilat einkopiert.

Der -msse Befehl fuehrt nur dazu, dass der Compiler selbst versucht aus dem C-Code SSE-Code zu generieren. Das hat keinen Einfluss auf den Inline-Block, kann aber dazu fuehren, dass er selbst auch die xmm-Register benutzt und diese dann eigentlich von dir in der clobbered register list angegeben werden muessen. Das ist aber glaube ich nicht so einfach.

der_apfel
Erstie
Erstie
Beiträge: 14
Registriert: 9. Apr 2010 22:47

Re: Praktikum2 Coderahmen lässt sich nicht compilieren

Beitrag von der_apfel »

Ich hab es nun noch mal probiert.
Wenn man die ganzen SSE Register aus der clobbered register list entfernt, dann kompiliert alles ohne Probleme.

philipp_m
Mausschubser
Mausschubser
Beiträge: 99
Registriert: 4. Dez 2010 18:10

Re: Praktikum2 Coderahmen lässt sich nicht compilieren

Beitrag von philipp_m »

der_apfel hat geschrieben:Ich hab es nun noch mal probiert.
Wenn man die ganzen SSE Register aus der clobbered register list entfernt, dann kompiliert alles ohne Probleme.
Damit gab es bei der letzten Hausübung bereits Probleme. Wenn ich das richtig mitbekommen habe, gibt es zwei Möglichkeiten:
Mit -msse:
- Compiler verwendet SSE beim kompilieren, kennt und nutzt damit die SSE-Register -> SSE-Register (xmm0-7) müssen in den clobbered Registern stehen

Ohne -msse:
- Compiler kopiert den SSE-Code im Inline-Teil direkt in den kompilierten Code und nutzt selbst keinen SSE-Code-> SSE-Register (xmm0-7) dürfen nicht in den clobbered Registern stehen da der Compiler diese Register nicht kennt / müssen es auch nicht da er sie nicht selbst nutzt

Antworten

Zurück zu „Archiv“