Hallo Leute, frage: Ich will per inline-assembler eine Funktion realisieren, die aus einem hardware-register Daten ausliest und die fortlaufend in einen void Pointer schreibt. Es handelt sich hier um ein spezielles Assembler, hier kurz die Beschreibung der Befehle die ich nutzen will: Pro Speicheradresse gehen aber nur 9 Bit in den Memory l18 Rd, disp(Rs) //load 18 bit from memory s18 disp(Rs2), Rs1 //store 18 bit to memory in = ist mein void-Pointer in dem die Daten landen sollen master->data_out = hardwareregister aus dem gelesen werden soll asm ( l18 R1, 0(%a0) \n s18 0(%a1), R1 \n" l18 R1, 0(%a0) \n s18 2(%a1), R1 \n" : : "e"(&master->data_out),"e"(&in) ); Ist das so richtig? Habe mit inline assembler noch nie etwas gemacht, und bevor ich mich mit gcc Fehlern rumschlage wollte ich mal fragen ob das so grundsätzlich passt?! Danke
Wenn in ist void* ist, dann ist &in ein void**, d.h. die Adresse von in. Was auf jeden Fall fehlt ist ein memory-clobber. Ausserden wird R1 verändert. Ich kenne weder den Assembler noch das ABI, was also sagt das ABI über R1? Vielleicht schreibst du erst mal das C-Äquvalen auf so dass man dir helfen kann.
Also es geht hier um Assembler im SpartanMC. Das Instructionset kann man hier nachschauen http://www.mr.inf.tu-dresden.de/forschung/spartanmc/docs/manual/instructionset.pdf Ich möchte in assembler einen load-store-load-store oder auch copy-tower realisieren, der ab einer bestimmten Stelle anfängt, um möglichst schnell Daten aus Hardwareregistern in einem void* zu speichern. In C würde man das mit einer while-Schleife lösen, da aber nach jedem load-store Befehl erstmal ein vergleicher und ein Jump befehl kommt, ist das etwas zu langsam, das ist der Hintergrund.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.