On Fri, Mar 26, 2010 at 11:43:15AM +0000, Alexander Leidinger wrote:
> Author: netchild
> Date: Fri Mar 26 11:43:15 2010
> New Revision: 205683
> URL: http://svn.freebsd.org/changeset/base/205683
> 
> Log:
>   Fix some bogus values in linprocfs.
>   
>   Submitted by:       Petr Salinger <petr.salin...@seznam.cz>
>   Verified on:        GNU/kFreeBSD debian 8.0-1-686 (by submitter)
>   PR:         144584
> 
> Modified:
>   head/sys/compat/linprocfs/linprocfs.c
> 
> Modified: head/sys/compat/linprocfs/linprocfs.c
> ==============================================================================
> --- head/sys/compat/linprocfs/linprocfs.c     Fri Mar 26 11:33:12 2010        
> (r205682)
> +++ head/sys/compat/linprocfs/linprocfs.c     Fri Mar 26 11:43:15 2010        
> (r205683)
> @@ -110,13 +110,36 @@ __FBSDID("$FreeBSD$");
>  /*
>   * Various conversion macros
>   */
> +
> +/* The LINUX_USER_HZ is assumed 100 for now */
> +
> +#if defined(__i386__) && defined(__GNUCLIKE_ASM)
> +/* we need intermediate result as 64 bit, otherwise it overflows too early */
> +#define DO64_MULDIV(v,m,d)       \
> +({                              \
> +   unsigned long rv0;           \
> +   unsigned long rv1;           \
> +   __asm__ __volatile__(        \
> +                "mull %1\n\t"   \
> +                "divl %2\n\t"   \
> +                :"=a" (rv0), "=d" (rv1) \
> +                :"r" (d), "0" (v), "1" (m) \
> +                :"cc" ); \
> +  rv0; \
> +})

Why it is impossible to express the calculation in C ?

Attachment: pgpcz6U3oj3UV.pgp
Description: PGP signature

Reply via email to