On May 20, 2:58 am, Jason Moxham <[email protected]> wrote:
> On Thursday 20 May 2010 02:11:11 Bill Hart wrote:
>
> > There's a new Opteron on the block. family 16 model 8. It's an Opteron
> >  8439 SE. We don't have it in cpuid.c yet.
>
> Looks like another K102  , doesn't look like any differences for us , although
> we dont know until we test it.
> By the way the difference between what we call the K102 and the K10 , is the
> "same" as the difference between early K8 and late K8's , a slight difference 
> in
> L1-data cache and store forwarding , which does effect some functions eg
> copy,addadd,lshiftcom , some more than others
>
> > Also we currently have a symbol in the library, mpn_sqr_n and a
> > #define in mpir.h to rename it mpn_sqr in line with gmp. But that
> > isn't sufficient. It breaks gcc on machines where gcc has been built
> > with dynamic libs. On the face of it this shouldn't affect anyone, but
> > in fact it will affect lots of people. The only solution I see is to
> > rename the library symbol.
>
> we can just export both names , so we are compatible with the new gmp AND the
> old
>
>
>
> > Also, GMP defines mpn_copyi and mpn_copyd. On generic x86_64 machines,
> > we don't seem to have any assembly for this. There's no fallback
> > generic C symbol in the lib.
>
> we can the fallback C code that a fat build uses , with the new K102 cpuid
> above there is no current generic x86_64 cpu :)

GMP has copyi.c and copyd.c in its mpn\generic directory to provide
these symbols so I have added code from our x86_64 subdirectory to our
mpn\generic subdirectory.

As far as I can see, this is not x86_64 specific and should hence work
on other architectures. But I would appreciate it if others could
check on this.

I have added this to the generic C Windows builds but I have NOT added
it to any of the other builds so someone needs to do this.

I have NOT done anything about mpn_sqr and mpn_sqr_n as I want to be
sure about what is needed.

Does the following work?

1. The lines in mpir.h:

  #define mpn_sqr_n __MPN(sqr_n)
  #define mpn_sqr   __MPN(sqr_n)
  __GMP_DECLSPEC void mpn_sqr_n __GMP_PROTO ((mp_ptr, mp_srcptr,
mp_size_t));

are changed to:

#define mpn_sqr_n __MPN(sqr_n)
__GMP_DECLSPEC void mpn_sqr_n __GMP_PROTO ((mp_ptr, mp_srcptr,
mp_size_t));
#define mpn_sqr   __MPN(sqr)
__GMP_DECLSPEC void mpn_sqr __GMP_PROTO ((mp_ptr, mp_srcptr,
mp_size_t));

2. In mpn\mul_n.c, after the subroutine:

void
mpn_sqr_n (mp_ptr p, mp_srcptr a, mp_size_t n)

add:

void mpn_sqr = mpn_sqr_n;

Does this work or am I screwed up?

I'll do this if we agree here that this is the right solution (and
works!).

     Brian

REMINDER: add mpn\generic\copyi.c and mpn\generic\copyd.c to the Linux
builds

-- 
You received this message because you are subscribed to the Google Groups 
"mpir-devel" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/mpir-devel?hl=en.

Reply via email to