Forum: Mikrocontroller und Digitale Elektronik Frage zu ARM Instruction


von heinz (Gast)


Lesenswert?

Guten Morgen

In einem anderen Thread (den ich nicht zumüllen will) hab ich ein 
Verständniss Problem

    88a8:  e3510000   cmp  r1, #0
    88ac:  13a01000   movne  r1, #0
    88b0:  03a01001   moveq  r1, #1
    88b4:  15821000   strne  r1, [r2]
    88b8:  05821000   streq  r1, [r2]
    88bc:  159f203c   ldrne  r2, [pc, #60]
    88c0:  059f203c   ldreq  r2, [pc, #60]
    88c4:  13a01801   mov  r1, #65536  ; 0x10000


wenn ich
    88b4:  15821000   strne  r1, [r2]
    88b8:  05821000   streq  r1, [r2]

durch
    str r1, [r2]
ersetz

war/bin ich der Meinung dass ich Takt spare

antwort von Dr. Sommer
>Das würde 2 Instruktionen, aber keinen Takt sparen

wird da nicht immer einer der stores als nop audgeführt?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

heinz schrieb:
> In einem anderen Thread (den ich nicht zumüllen will) hab ich ein
> Verständniss Problem
Ein Link auf den Beitrag "Re: Ich suche einen "etwas anderen" C-Compiler" 
wäre trotzdem nicht verkehrt...

heinz schrieb:
> wenn ich
>     88b4:  15821000   strne  r1, [r2]
>     88b8:  05821000   streq  r1, [r2]
> durch
>     str r1, [r2]
> ersetz
> war/bin ich der Meinung dass ich Takt spare
Da verbleiben die Fragen: wie lange dauert das Abweisen des 
Speicherzugriffs und wie lange das Ausführen? Und wie lange dauert ein 
Speicherzugriff an sich?

von heinz (Gast)


Lesenswert?

Mit dem Link hast Du recht ...

Ich hab ja grundsätzlich einen Speicherzugriff - ob bei den cond. stores 
(einer der beiden trifft immer) oder dem uncond. store

mich verwirrt nur die Aussage von Dr. Sommer

ARM Instruction manual sagt
Non-executed instructions soak up 1 cycle.
– Still have to complete cycle so as to allow fetching and decoding of
following instructions.

str  r1, [r2]      == x Takte

bei der Sequenz
strne  r1, [r2]
streq  r1, [r2]   == x+1 Takte

Stimmt das so?

von Lothar (Gast)


Lesenswert?

Es kommt auf die ARM-Architektur und die Pipeline-Länge an, aber 
grundsätzlich sollten gleich bedingte Anweisungen hintereinander kommen, 
ist die Optimierung abgeschaltet?

movne  r1, #0
strne  r1, [r2]
ldrne  r2, [pc, #60]
moveq  r1, #1
streq  r1, [r2]
ldreq  r2, [pc, #60]

von heinz (Gast)


Lesenswert?

ich gkaube wir reden aneinander vorbei

    88a8:  e3510000   cmp  r1, #0
    88b4:  15821000   strne  r1, [r2]
    88b8:  05821000   streq  r1, [r2]

das erzeugt der Compiler (GCC 4.7.4 -O3)

was ja gleich
str  r1, [r2]
ist

eine Aussage war, das der einfache store nicht schneller ist als 2 cond. 
stores

was ich bezweifle. Lieg ich falsch?

von Sascha (Gast)


Lesenswert?

Hallo,
also der Befehl, wenn er nicht ausgeführt wird in der Condition braucht 
die gleiche Zeit als der Befehl als wenn er Ausgeführt wird. Jetzt kommt 
eher noch die Frage welcher Core? Das hängt dann von der Pipeline ab. 
Aber ein flush in der Pipeline gibts dadurch auch nicht. Ich würde mal 
sagen, das ist Unsinn. Jeder Befehl im ARM-Mode (ARM7 oder ARM9) ist mit 
32 Bit Codiert und nimmt somit 4 Bytes in deinem Flash weg und Flash ist 
teuer. Der ARM ist ein Store and Load Architektur Prozessor und ist auf 
schnellen Speicherzugriff optimiert da dürfte das auch bei einem Befehl 
kein Problem darstellen. Und wenn es schneller gehen soll, must du den 
Thumb-Mode ausprobieren. Da ist jeder Befehl mit nur 16 Bit Codiert, 
somit muss die CPU nur bei jedem 2.Befehl nachladen.

Gruß Sascha

von (prx) A. K. (prx)


Lesenswert?

Sascha schrieb:
> also der Befehl, wenn er nicht ausgeführt wird in der Condition braucht
> die gleiche Zeit als der Befehl als wenn er Ausgeführt wird.

Mindestens da nicht:
ARM7TDMI: Immer 1 Takt, egal welcher Befehl.
ARM9E-S:  Immer 1 Takt, egal welcher Befehl.
Wartezyklen für I-Fetch gehen natürlich extra.

Bei Cores mit tiefer Pipeline wirds natürlich interessanter. Aber auch 
da kann man diese Aussage wohl nicht so stehen lassen.

: Bearbeitet durch User
von Dr. Sommer (Gast)


Lesenswert?

heinz schrieb:
> ARM Instruction manual sagt
> Non-executed instructions soak up 1 cycle.
Oh, übersehen.

Lothar schrieb:
> ist die Optimierung abgeschaltet
Liegt wohl am volatile, das hält ihn vom optimieren ab...

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.