Michael Haertl <michael.haertl(at)gmx.net> wrote:
> > Hinzu kommt auch, daß es Plattformen gibt, wo es gar nicht
> > möglich ist, einzelne Bytes zu lesen, z.B. auf Alpha. Da
> > _kann_ der Prozessor nur ein ganzes Wort aus dem Speicher
> > lesen. Wenn ein Programm nur ein Byte braucht, muß es
> > durch Maskierungs- und/oder Verschiebeoperationen heraus-
> > gefiltert werden.
>
> Wird das bei z.B. FreeBSD-Alpha so gemacht ?
Ja, sofern man dem Compiler nichts anderes sagt (s.u.).
> Ferner wundert es mich schon, dass ein Alpha ein 64bit-
> Register nicht in 8 atomaren Einheiten ansprechen kann.
Kann er. Alphas können mit Bytes hantieren, es gibt einige ganz
interessante Befehle dafür, allerdings müssen sie Bytes nicht einzeln
laden/speichern können.
> Dass auf dem externen Buss nur noch Woerter (und meist nur noch
> in Bursts) transportiert werden ist ja aufgrund der Cache-
> Hierarchien und Zugriffszeiten kaum anders sinnvoll.
Richtig. Deshalb obiger Ansatz, den Prozessor nur größere Wörter
laden/speichern zu lassen und die Byteverarbeitung in die Register
zu verlagern.
Wenn der Prozessor nun doch Bytezugriffe anbieten soll, dann müssen
die irgendwie implementiert werden, was die Komplexität der Speicher-
schnittstelle des Prozessors und des Chipsatzes erhöht. Alphas ab
EV56 haben die BIX-Erweiterung, die auch byte- und (16-Bit)-wortweises
Load/Store in Hardware anbietet. Mit -mcpu=ev56 kann man GCC anweisen
entsprechenden Code zu erzeugen, der dann aber auf alten Prozessoren
nicht mehr läuft. (Man könnte die Befehle in Software emulieren,
aber das ist entsetzlich langsam.)
-- Christian "naddy" Weisgerber naddy(at)mips.inka.de To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org with "unsubscribe de-bsd-questions" in the body of the messageReceived on Fri 22 Mar 2002 - 02:30:43 CET