ISA et assembleur
En compilant « a * b » (multiplication de deux int) en C pour un CPU RV32I sans extension M, que se passe-t-il généralement ?
- ACela devient un appel à une fonction de bibliothèque qui effectue la multiplication par décalages et additions répétés
- BLa multiplication étant indisponible, une erreur de compilation survient
- CL'instruction mul de l'extension M est émise telle quelle et ajoutée automatiquement à l'exécution
Afficher la réponse et l'explication
Réponse : A. Cela devient un appel à une fonction de bibliothèque qui effectue la multiplication par décalages et additions répétés
Pour un CPU sans multiplieur, le compilateur remplace la multiplication par un appel à une fonction de bibliothèque auxiliaire comme __mulsi3. Cette fonction calcule le produit comme une multiplication posée : elle examine un à un les bits de l'un des nombres et, pour chaque 1, ajoute l'autre nombre décalé. Le calcul est correct, mais des dizaines de fois plus lent qu'un multiplieur matériel. Omettre une extension de l'ISA réduit les circuits au prix d'un traitement plus lent.