This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

MAC 32x32 multiply

I believe that code generated for a 32x32 bit multiply (not directly supported by MAC hardware) is incorrect.
I have tried 4.27 and 5.05 compiler versions on XC167 with #pragma MAC, getting same (wrong) results.


16: long mac (long a, long b)
17: {
18: long c;
19: c = a * b;
00C00032 F048 MOV R4,R8
00C00034 F059 MOV R5,R9
00C00036 F06A MOV R6,R10
00C00038 F07B MOV R7,R11
00C0003A CA00AA00 CALLA+ CC_UC,?C_COLMUL(0xC000AA)
00C0003E F064 MOV R6,R4
00C00040 F075 MOV R7,R5
20: return (c);
21: }

?C_COLMUL:
00C000AA A3560000 CoMULu R5,R6
00C000AE A3471000 CoMACu R4,R7
00C000B2 A3008240 CoSHL #0x00
00C000B6 A3008240 CoSHL #0x00
00C000BA A3461000 CoMACu R4,R6
00C000BE C3550800 CoSTORE R5,MAH
00C000C2 C3442000 CoSTORE R4,MAL
00C000C6 CB00 RET

0