In C sähe das ja so aus:Zitat von ogni42
saturate16 saturiert also nicht nur, sondern löscht zusätzlich r1. Dadurch entfällt das clr r1 im inline asm (wird kürzer) und daher der Kommentar r1=0 an saturate 16.Code:foo_t fmul (foo_t a, foo_t b) { r1_r0 = a*b; v = (|a*b| > 1); // oder so saturate16 (); return r27_r26; } // Inputs: r1_r0 und Overflow (v-Flag) void saturate16 (void) { r27_r26 = sat16 (r0_r1, v); r1 = 0; }
BTW: Wieso kann die Multiplikation überhaupt überlaufen?
Wie ist da überhaupt die Darstellung der Fraction? Im Komplement oder als sign(a) : abs (a) ? Vermutlich ersteres, sonst wäre Strichrechnung ja recht aufwändig...
Lesezeichen