Nutzung der oberen 18 Bit des Ergebisses beim MUL Befehl im SFR_MUL Register beim GCC
mul36(faktor1, faktor2);
#include <mul36.h> long prod = 0; // Produkt 36 Bit int fa1 = 0; // Faktor 1 18 Bit int fa2 = 0; // Faktor 2 18 Bit prod = mul36(fa1, fa2);
Die Funktion wird im GCC als C-Programm mit Inline-Assembler realisiert:
__asm__("\n.include \"const.s\""); /* * Multiplikation mit 36 Bit Produkt aus 18 Bit * 18 Bit bereitstellen. */ long mul36(int fa1, int fa2){ long prod; unsigned int prodl; prodl = fa1; __asm__("MUL %0, %1":"+r"(prodl):"r"(fa2)); __asm__("MOVS2I %0, SFR_MUL":"=r"(prod)); prod = prod << 18; // SFR Inhalt nach HIGH schieben prod = prod | prodl; // LOW Einblenden return prod; // 36 Bit Produkt }