Forum: Compiler & IDEs inline assembler copy


von Markus (Gast)


Lesenswert?

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

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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.

von Markus (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.