#include "asm.h" // unsigned int64 mulu64(unsigned a, unsigned b); .text .global mulu64 mulu64: movel d2, -(sp) movel d3, -(sp) movel d4, -(sp) movel 16(sp), d1 movel 20(sp), d0 movel d1, d2 muluw d0, d1 // bl * al Low bits movel d2, d4 swap d4 movel d0, d3 muluw d4, d3 // au * bl swap d0 muluw d0, d2 // bu * al swap d3 muluw d4, d0 // au * bu high bits swap d2 movel d3, d4 clrw d4 eorl d4, d3 addl d4, d1 // Add (au*bl) to low bits addxl d3, d0 // and to high bits movew d2, d3 eorl d3, d2 addl d2, d1 // Add (al*bu) to low bits addxl d3, d0 // and to high bits movel (sp)+, d4 movel (sp)+, d3 movel (sp)+, d2 rts