I'm implementing my own floating point multiplication algorithm using an Arduino Due, which uses the ARM microcontroller. I have 90% of it working. My only problem now is multiplying two significands together.
My instruction is simple:
"umull r5, r6, r4, r4 \n\t"
r4 contains my significand. I have verified this by looking at it alone. r5 & r6 were set to #0 right before this, so I know there is nothing funny happening there. And yes, I set bit #24 of my significand to 1 to account for the hidden 1 in floating point numbers.
My number is 13.56 in base 10. My floating point representation is then:
0 10000010 10110001100001111000011
My significand is then: 110110001100001111000011
Multiplying the two using MS calculator in binary mode gives me the following:
10110111 10001010 11101110 11000010 10100110 10001001
Whereas my umull result gives me this:
r6 = 00000000 00000000 11011111 11011111
r5 = 10100100 11111110 10001001 10001001
Obviously quite different. When I square the number using C and print out the binary, it's this:
0 10000110 01101111010010110100101
So if you remove the leading 1 from the calculator result, it lines up... sort of. I get that this depends on the conversion from a decimal to a floating point, but what I don't get is why my umull result is different than what MS calculator came up with.