Le jeu d'instructions RV32I de base ne sait pas multiplier. La multiplication existe dans l'extension
M, qui n'est pas toujours présente : sur un petit cœur embarqué, il faut faire sans.
Objectif
Chiffrer le coût de la multiplication par additions répétées, et celui du cas particulier des puissances de deux.
Les deux optimisations qui sautent aux yeux
La première consiste à boucler sur le plus petit des deux facteurs : le résultat est le même et le nombre de tours est celui du plus petit. La seconde consiste à reconnaître une puissance de deux et à la remplacer par un décalage, qui coûte une instruction au lieu d'une boucle entière.
Un compilateur fait les deux systématiquement, ce qui explique qu'une multiplication par 16 dans le code source n'apparaisse jamais comme telle dans le désassemblage.