ASM Command ARM7

Gast #697824
Lesenswert?
• ▲
▼
zu Dominic.R
Im Prinzip JA, aber nur dann wenn die Pipeline normal gefüllt ist, bei 
Sprüngen, Verzweigungen,... wird die Pipeline verworfen und muss neu 
gefüllt werden. Der PC kann in dem Fall also etwas anderes, viellceiht 
auch noch altes anzeigen, je nach Status der Pipelinefüllung zum 
Zeitpunkt des anhaltens.
#697835
Lesenswert?
• ▲
▼
Der Inhalt von PC wie er als R15 sichtbar ist, ist bei ARMs abhängig vom 
jeweiligen Befehl und Quelloperanden (links/rechts/dyn.shift) sauber 
definiert, meist als +8, in Einzelfällen auch als +12. Und ist auch 
unabhängig von der konkreten Auslegung der Pipeline. Das geht auch nicht 
anders, da man permanent damit arbeitet.

Ursprünglich war das tatsächlich eine direkte Konsequenz der Pipeline 
und die hat sich von ARM1 von ARM7 auch nicht substantiell verändert. 
Danach allerdings musste ARM je nach Länge und Abstufung der Pipeline 
eigens Korrektureinheiten einbauen, um diese ursprünglich sinnvolle weil 
vereinfachende Arbeitsweise von R15 nachzubilden.

Woraus sich mal wieder zeigt, dass es auf lange Sicht meist 
unvorteilhaft ist, zuviel einer konkreten Implementierung für den 
Anwender sichtbar zu machen. Denn wenn die Architektur länger lebt als 
diese Implementierung, dann schiesst man sich damit ins eigene Knie. 
Auch MIPS hatte mit den delay slots etwas eingebaut, was anfangs 
nützlich war, sich aber später als nachteilig erwies, da eine 
superskalare Implementierung damit nur Ärger hat.
#697858
Lesenswert?
• ▲
▼
Ralph wrote:
> zu Dominic.R
> Im Prinzip JA, aber nur dann wenn die Pipeline normal gefüllt ist, bei
> Sprüngen, Verzweigungen,... wird die Pipeline verworfen und muss neu
> gefüllt werden. Der PC kann in dem Fall also etwas anderes, viellceiht
> auch noch altes anzeigen, je nach Status der Pipelinefüllung zum
> Zeitpunkt des anhaltens.

Noe.

Andreas hat ja schon drauf hingewiesen, dass es natürlich auch hier 
wieder Ausnahmen gibt (STR und STM mit PC als Source), aber generell ist 
der PC in ARMv4/5 als Adresse + 0x8 definiert:

When an instruction reads R15 without breaking any of the restrictions 
on
its use, the value read is the address of the instruction plus 8 bytes.

Selbst für die Ausnahmen ist der Wert, der bei einem direkten Store von 
R15 geschrieben wird, Implementation defined, d.h. für eine bestimmte 
Implementierung (ARM7TDMI, ARM9TDMI, ...) ist der Wert festgelegt, und 
dann auch immer identisch:

Value stored by direct
STR, STRT, STM of PC
Address of Inst + 12

Gruß, Dominic

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