Instructieset en assembly
Wat gebeurt er in het algemeen als „a * b” (vermenigvuldiging van ints) in C wordt gecompileerd voor een RV32I-CPU zonder M-extensie?
- AHet wordt een aanroep van een bibliotheekfunctie die de vermenigvuldiging uitvoert door herhaald te schuiven en op te tellen
- BVermenigvuldigen kan niet worden gebruikt, dus er treedt een compileerfout op
- CDe mul-instructie van de M-extensie wordt ongewijzigd uitgevoerd en tijdens uitvoering automatisch toegevoegd
Antwoord en toelichting tonen
Antwoord: A. Het wordt een aanroep van een bibliotheekfunctie die de vermenigvuldiging uitvoert door herhaald te schuiven en op te tellen
Voor een CPU zonder vermenigvuldiger vervangt de compiler de vermenigvuldiging door een aanroep van een hulpbibliotheekfunctie zoals __mulsi3. Deze functie berekent het product op dezelfde manier als schriftelijk vermenigvuldigen: de bits van het ene getal worden een voor een onderzocht en als een bit 1 is, wordt het geschoven andere getal opgeteld. Het rekent correct, maar is tientallen malen trager dan een hardwarevermenigvuldiger. Als ISA-extensies worden weggelaten, wordt het circuit kleiner maar de verwerking trager.