Philippe Gerum wrote: > static inline unsigned long long ns_2_cycles(unsigned long long ns) > { > return ns * ns2cyc_scale >> NS2CYC_SCALE_FACTOR;
This multiplication is 64 bits * 32 bits, the intermediate result may need more than 64 bits, so you should compute it the same way as the beginning of ullimd. Something like: static inline unsigned long long ns_2_cycles(unsigned long long ns) { unsigned nsh, nsl, tlh, tll; unsigned long long th, tl; __rthal_u64tou32(ns, nsh, nsl); tl = rthal_ullmul(nsl, ns2cyc_scale); __rthal_u64tou32(tl, tlh, tll); th = rthal_ullmul(nsh, ns2cyc_scale); th += tlh; tll = (unsigned) th << (32 - NS2CYC_SCALE_FACTOR) | tll >> NS2CYC_SCALE_FACTOR; th >>= NS2CYC_SCALE_FACTOR; return __rthal_u64fromu32(th, tll); } -- Gilles Chanteperdrix. _______________________________________________ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core