diff options
author | Andy Polyakov <appro@openssl.org> | 2012-10-20 11:13:21 +0200 |
---|---|---|
committer | Andy Polyakov <appro@openssl.org> | 2012-10-20 11:13:21 +0200 |
commit | 947d78275bbd53c43f4edf7523910e1e73fb08f5 (patch) | |
tree | 304a6ba34514815a2d148b663fae462e4685a55f /crypto/sparcv9cap.c | |
parent | fix ASN1_STRING_TABLE_add so it can override existing string table values (diff) | |
download | openssl-947d78275bbd53c43f4edf7523910e1e73fb08f5.tar.xz openssl-947d78275bbd53c43f4edf7523910e1e73fb08f5.zip |
Add VIS3 Montgomery multiplication.
Diffstat (limited to 'crypto/sparcv9cap.c')
-rw-r--r-- | crypto/sparcv9cap.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/crypto/sparcv9cap.c b/crypto/sparcv9cap.c index 149eb5232d..b6bdb8704b 100644 --- a/crypto/sparcv9cap.c +++ b/crypto/sparcv9cap.c @@ -15,15 +15,20 @@ unsigned int OPENSSL_sparcv9cap_P[2]={SPARCV9_TICK_PRIVILEGED,0}; int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np,const BN_ULONG *n0, int num) { + int bn_mul_mont_vis3(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np,const BN_ULONG *n0, int num); int bn_mul_mont_fpu(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np,const BN_ULONG *n0, int num); int bn_mul_mont_int(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np,const BN_ULONG *n0, int num); - if (num>=8 && !(num&1) && - (OPENSSL_sparcv9cap_P[0]&(SPARCV9_PREFER_FPU|SPARCV9_VIS1)) == - (SPARCV9_PREFER_FPU|SPARCV9_VIS1)) - return bn_mul_mont_fpu(rp,ap,bp,np,n0,num); - else - return bn_mul_mont_int(rp,ap,bp,np,n0,num); + if (!(num&1) && num>=6) + { + if ((OPENSSL_sparcv9cap_P[0]&SPARCV9_VIS3)) + return bn_mul_mont_vis3(rp,ap,bp,np,n0,num); + else if (num>=8 && + (OPENSSL_sparcv9cap_P[0]&(SPARCV9_PREFER_FPU|SPARCV9_VIS1)) == + (SPARCV9_PREFER_FPU|SPARCV9_VIS1)) + return bn_mul_mont_fpu(rp,ap,bp,np,n0,num); + } + return bn_mul_mont_int(rp,ap,bp,np,n0,num); } unsigned long _sparcv9_rdtick(void); @@ -35,7 +40,7 @@ unsigned long _sparcv9_rdcfr(void); void _sparcv9_vis3_probe(void); unsigned long _sparcv9_random(void); size_t _sparcv9_vis1_instrument_bus(unsigned int *,size_t); -size_t _sparcv8_vis1_instrument_bus2(unsigned int *,size_t,size_t); +size_t _sparcv9_vis1_instrument_bus2(unsigned int *,size_t,size_t); unsigned long OPENSSL_rdtsc(void) { @@ -51,7 +56,7 @@ unsigned long OPENSSL_rdtsc(void) size_t OPENSSL_instrument_bus(unsigned int *out,size_t cnt) { - if (OPENSSL_sparcv9cap_P[0]&(SPARCV9_TICK_PRIVILEGED|SPARCV9_BLK) == + if ((OPENSSL_sparcv9cap_P[0]&(SPARCV9_TICK_PRIVILEGED|SPARCV9_BLK)) == SPARCV9_BLK) return _sparcv9_vis1_instrument_bus(out,cnt); else @@ -60,7 +65,7 @@ size_t OPENSSL_instrument_bus(unsigned int *out,size_t cnt) size_t OPENSSL_instrument_bus2(unsigned int *out,size_t cnt,size_t max) { - if (OPENSSL_sparcv9cap_P[0]&(SPARCV9_TICK_PRIVILEGED|SPARCV9_BLK) == + if ((OPENSSL_sparcv9cap_P[0]&(SPARCV9_TICK_PRIVILEGED|SPARCV9_BLK)) == SPARCV9_BLK) return _sparcv9_vis1_instrument_bus2(out,cnt,max); else |