Befehlssatz und Assembler
Was geschieht im Allgemeinen, wenn „a * b“ (Multiplikation zweier int) in C für eine RV32I-CPU ohne M-Erweiterung kompiliert wird?
- AEs wird ein Aufruf einer Bibliotheksfunktion, die die Multiplikation durch wiederholtes Schieben und Addieren ausführt
- BMultiplikation ist nicht verwendbar, es kommt zu einem Kompilierfehler
- CDer mul-Befehl der M-Erweiterung wird unverändert ausgegeben und zur Laufzeit automatisch ergänzt
Antwort und Erläuterung anzeigen
Antwort: A. Es wird ein Aufruf einer Bibliotheksfunktion, die die Multiplikation durch wiederholtes Schieben und Addieren ausführt
Für CPUs ohne Multiplizierer ersetzt der Compiler die Multiplikation durch den Aufruf einer Hilfsbibliotheksfunktion wie __mulsi3. Diese Funktion bestimmt das Produkt wie bei der schriftlichen Multiplikation, indem sie die Bits der einen Zahl einzeln prüft und bei 1 die verschobene andere Zahl addiert. Das Ergebnis ist korrekt, aber um ein Vielfaches von zehn langsamer als ein Hardware-Multiplizierer. Wird eine ISA-Erweiterung weggelassen, wird die Schaltung kleiner, die Verarbeitung aber langsamer.