inline assembler copy

Gast #3928574
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
Gast #3928745
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren