John Baldwin wrote:
> 
> On 07-Jan-02 Stephen Montgomery-Smith wrote:
> > John Baldwin wrote:
> >>
> >> > You know, I have no idea.  It is someone elses code.  These are the
> >> > instructions.  Can anyone tell me?
> >> >
> >> >                 "movl 32(%0),%1\n"
> >> >                 "adcl %1,32(%0)\n"
> >> >
> >> > Also, from this discussion, what I have decided to do is provide it as
> >> > an option for the user to add by editing the Makefile - not to do it
> >> > automatically.
> >>
> >> These instructions are 386 instructions.  What we need to see are the
> >> contraints (the stuff after the actual instructions with colons in them) to
> >> see
> >> if it is somehow using Pentium Pro+ specific registers.  And actually, just
> >> for
> >> the record, a PPro is a 686. :)
> >>
> >
> > OK, this is it in context:
> >
> >         register Word32 *_x = x;
> >         register int _a = 0;
> >
> >         asm("xorl %1,%1\n"  /* clear C */
> >                 "movl 124(%0),%1\n"
> >                 "adcl %1,124(%0)\n"
> >                 : : "r" (_x), "r" (_a)
> >         );
> 
> Looks like rather silly code to double the value at x + 124.  I say silly casue
> it clears carry and then does a addcl.  However, since CF is zero, this is the
> same as doing an addl.  Since it is just doubling the value, a shl would make
> more sense (and only be 1 instruction.)
> 

More likely I am butchering the code by trying to only give you part of
it.  The whole code is designed to take N 32 bit words and do a left
shift on it:


        register Word32 *_x = x;
        register int _a = 0;

        asm("xorl %1,%1\n"  /* clear C */
                "movl (%0),%1\n"
                "adcl %1,(%0)\n"
#if (N >= 2)
                "movl 4(%0),%1\n"
                "adcl %1,4(%0)\n"
#endif
#if (N >= 3)
                "movl 8(%0),%1\n"
                "adcl %1,8(%0)\n"
#endif
#if (N >= 4)
                "movl 12(%0),%1\n"
                "adcl %1,12(%0)\n"
#endif
#if (N >= 5)
                "movl 16(%0),%1\n"
                "adcl %1,16(%0)\n"
#endif
#if (N >= 6)
                "movl 20(%0),%1\n"
                "adcl %1,20(%0)\n"
#endif
#if (N >= 7)
                "movl 24(%0),%1\n"
                "adcl %1,24(%0)\n"
#endif
#if (N >= 8)
                "movl 28(%0),%1\n"
                "adcl %1,28(%0)\n"
#endif
#if (N >= 9)
                "movl 32(%0),%1\n"
                "adcl %1,32(%0)\n"
#endif
#if (N >= 10)
                "movl 36(%0),%1\n"
                "adcl %1,36(%0)\n"
#endif
#if (N >= 11)
                "movl 40(%0),%1\n"
                "adcl %1,40(%0)\n"
#endif
#if (N >= 12)
                "movl 44(%0),%1\n"
                "adcl %1,44(%0)\n"
#endif
#if (N >= 13)
                "movl 48(%0),%1\n"
                "adcl %1,48(%0)\n"
#endif
#if (N >= 14)
                "movl 52(%0),%1\n"
                "adcl %1,52(%0)\n"
#endif
#if (N >= 15)
                "movl 56(%0),%1\n"
                "adcl %1,56(%0)\n"
#endif
#if (N >= 16)
                "movl 60(%0),%1\n"
                "adcl %1,60(%0)\n"
#endif
#if (N >= 17)
                "movl 64(%0),%1\n"
                "adcl %1,64(%0)\n"
#endif
#if (N >= 18)
                "movl 68(%0),%1\n"
                "adcl %1,68(%0)\n"
#endif
#if (N >= 19)
                "movl 72(%0),%1\n"
                "adcl %1,72(%0)\n"
#endif
#if (N >= 20)
                "movl 76(%0),%1\n"
                "adcl %1,76(%0)\n"
#endif
#if (N >= 21)
                "movl 80(%0),%1\n"
                "adcl %1,80(%0)\n"
#endif
#if (N >= 22)
                "movl 84(%0),%1\n"
                "adcl %1,84(%0)\n"
#endif
#if (N >= 23)
                "movl 88(%0),%1\n"
                "adcl %1,88(%0)\n"
#endif
#if (N >= 24)
                "movl 92(%0),%1\n"
                "adcl %1,92(%0)\n"
#endif
#if (N >= 25)
                "movl 96(%0),%1\n"
                "adcl %1,96(%0)\n"
#endif
#if (N >= 26)
                "movl 100(%0),%1\n"
                "adcl %1,100(%0)\n"
#endif
#if (N >= 27)
                "movl 104(%0),%1\n"
                "adcl %1,104(%0)\n"
#endif
#if (N >= 28)
                "movl 108(%0),%1\n"
                "adcl %1,108(%0)\n"
#endif
#if (N >= 29)
                "movl 112(%0),%1\n"
                "adcl %1,112(%0)\n"
#endif
#if (N >= 30)
                "movl 116(%0),%1\n"
                "adcl %1,116(%0)\n"
#endif
#if (N >= 31)
                "movl 120(%0),%1\n"
                "adcl %1,120(%0)\n"
#endif
#if (N >= 32)
                "movl 124(%0),%1\n"
                "adcl %1,124(%0)\n"
#endif
                : : "r" (_x), "r" (_a)
        );

-- 
Stephen Montgomery-Smith
[EMAIL PROTECTED]
http://www.math.missouri.edu/~stephen

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to