On 06/25/2018 03:23 PM, Programmingkid wrote: > >> On Jun 25, 2018, at 5:08 PM, Richard Henderson >> <richard.hender...@linaro.org> wrote: >> >> On Mon, Jun 25, 2018, 08:23 G 3 <programmingk...@gmail.com> wrote: >>> >>> Try >>> >>> uint64_t expected_answer = 0xffff0000deadbeef; >>> ... >>> c.i = expected_answer; >>> asm volatile("fdiv %0, %1, %2" : "+f"(c.d) : "f"(1.0), "f"(0.0)); >>> >>> to avoid depending on uninitialized data. (This expected value is >>> an SNaN with a deadbeef marker Just to be Sure.) >>> >>> >>> r~ >> >> >> Ok I made this program and tried it on my iMac G5 (PowerPC 970). >> >> #include <stdio.h> >> #include <stdint.h> >> #include <inttypes.h> >> >> // Used to convert unsigned integer <--> double >> union Converter >> { >> double d; >> uint64_t i; >> }; >> typedef union Converter Converter; >> >> int main (int argc, const char * argv[]) { >> Converter answer; >> answer.i = 0xffff0000deadbeef; >> //asm volatile("mtfsb1 27"); /* Set ZE bit */ >> asm volatile("fdiv %0, %1, %2" : "=f"(answer.d) : "f"(1.0), >> "f"(0.0)); >> >> Need +f for inout operand. >> This didn't test what you expected. > > What do you mean by inout operand?
An operand that is both input and output. > If you could send me some sample code I will test it out. I did, you just didn't read it properly. Here it is again: asm volatile("fdiv %0, %1, %2" : "+f"(answer.d) : "f"(1.0), "f"(0.0)); ^^^^ r~