Changeset 8145ac in git


Ignore:
Timestamp:
May 22, 2018, 5:04:36 PM (6 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', '2a584933abf2a2d3082034c7586d38bb6de1a30a')
Children:
12ee77b62cb7d3d9f449254ecb5a95bcd817ff4c
Parents:
e289a43a50430377cea7498d5fd2ec6ce97604e3
Message:
opt: factory/ffops.*

- removed ff_longnorm
- use ff_big_norm only for 32bit
- rely on NTL for NTL_AVOID_BRANCHING
Location:
factory
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • factory/ffops.cc

    re289a4 r8145ac  
    1919void ff_setprime ( const int p )
    2020{
    21     if ( p != ff_prime ) {
     21    if ( p != ff_prime )
     22    {
    2223        ff_prime = p;
    2324        ff_halfprime = ff_prime / 2;
  • factory/ffops.h

    re289a4 r8145ac  
    4040{
    4141    int n = a % ff_prime;
    42 #if defined(i386) || defined(__x86_64__) || defined(NTL_AVOID_BRANCHING)
     42#if defined(NTL_AVOID_BRANCHING)
    4343    n += (n >> 31) & ff_prime;
    4444    return n;
     
    5151inline long ff_norm ( const long a )
    5252{
    53     long n = a % ff_prime;
    54 #if defined(i386) || defined(__x86_64__) || defined(NTL_AVOID_BRANCHING)
     53    long n = a % (long)ff_prime;
     54#if defined(NTL_AVOID_BRANCHING)
    5555    #if SIZEOF_LONG==8
    5656    n += (n >> 63) & ff_prime;
     
    6060    return n;
    6161#else
    62     if (n < 0) n += ff_prime;
     62    if (n < 0) n += (long)ff_prime;
    6363    return n;
    6464#endif
     
    8181}
    8282
    83 inline int ff_longnorm ( const long a )
     83#if SIZEOF_LONG==4
     84inline int ff_bignorm ( const FACTORY_INT64 a )
    8485{
    85     int n = (int)(a % (long)ff_prime);
    86 #if defined(i386) || defined(__x86_64__) || defined(NTL_AVOID_BRANCHING)
     86    int n = (int)(a % (FACTORY_INT64)ff_prime);
     87#if defined(NTL_AVOID_BRANCHING)
    8788    n += (n >> 31) & ff_prime;
    8889    return n;
     
    9293#endif
    9394}
    94 
    95 inline int ff_bignorm ( const FACTORY_INT64 a )
    96 {
    97     int n = (int)(a % (FACTORY_INT64)ff_prime);
    98 #if defined(i386) || defined(__x86_64__) || defined(NTL_AVOID_BRANCHING)
    99     n += (n >> 31) & ff_prime;
    100     return n;
    101 #else
    102     if (n < 0) n += ff_prime;
    103     return n;
    10495#endif
    105 }
    10696
    10797inline int ff_add ( const int a, const int b )
    10898{
    10999    //return ff_norm( a + b );
    110 #if defined(i386) || defined(__x86_64__) || defined(NTL_AVOID_BRANCHING)
     100#if defined(NTL_AVOID_BRANCHING)
    111101    int r=( a + b );
    112102    r -= ff_prime;
     
    123113{
    124114    //return ff_norm( a - b );
    125 #if defined(i386) || defined(__x86_64__) || defined(NTL_AVOID_BRANCHING)
     115#if defined(NTL_AVOID_BRANCHING)
    126116    int r=( a - b );
    127117    r += (r >> 31) & ff_prime;
     
    138128    //return ff_norm( -a );
    139129// EXPERIMENT
    140 #if defined(i386) || defined(__x86_64__) || defined(NTL_AVOID_BRANCHING)
     130#if defined(NTL_AVOID_BRANCHING)
    141131    int r= -a;
    142132    r += (r >> 31) & ff_prime;
     
    149139inline int ff_mul ( const int a, const int b )
    150140{
     141#if SIZEOF_LONG==4
    151142    if ( ff_big )
    152143        return ff_bignorm( (FACTORY_INT64)a * (FACTORY_INT64)b );
    153144    else
    154         return ff_longnorm ( (long)a * (long)b );
     145#endif /* else: FACTORY_INT64 is long, i.e. ff_bignorm is the same as ff_norm(long) */
     146        return ff_norm ( (long)a * (long)b );
    155147}
    156148
Note: See TracChangeset for help on using the changeset viewer.