.sect .text ! Converts a 32-bit unsigned integer into a 64-bit double. ! ! Stack: ( uint -- double ) .define .cuf8 .cuf8: ! Conversion uses the pivot value ! 1 << 52 = 0x4330 0000 0000 0000 ! ! From unsigned integer u, we compute ! ((1 << 52) + u) - (1 << 52) lis r3, 0x4330 stwu r3, -4(sp) ! make space for the double lfd f0, 0(sp) ! f0 = (1 << 52) + u li r3, 0x0000 stw r3, 4(sp) lfd f1, 0(sp) ! f1 = (1 << 52) fsub f0, f0, f1 ! finish conversion stfd f0, 0(sp) ! save value again... blr ! ...and return