The %cfr (Compatability Features Register) is the mechanism by which crypto opcode presence is probed on SPARC-T4 and later processors.
%cfr is simply a mnenomic for %asr26 Trying to access %asr26 on all previous cpus will result in an illegal instruction trap. Signed-off-by: David S. Miller <[email protected]> --- crypto/sparccpuid.S | 9 +++++++++ crypto/sparcv9cap.c | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/crypto/sparccpuid.S b/crypto/sparccpuid.S index ccdd31e..164abd0 100644 --- a/crypto/sparccpuid.S +++ b/crypto/sparccpuid.S @@ -318,6 +318,15 @@ _sparcv9_fmadd_probe: .type _sparcv9_fmadd_probe,#function .size _sparcv9_fmadd_probe,.-_sparcv9_fmadd_probe +.global _sparcv9_cfr_probe +.align 8 +_sparcv9_cfr_probe: + .word 0x91468000 !rd %asr26, %o0 + retl + nop +.type _sparcv9_cfr_probe,#function +.size _sparcv9_cfr_probe,.-_sparcv9_cfr_probe + .global OPENSSL_cleanse .align 32 OPENSSL_cleanse: diff --git a/crypto/sparcv9cap.c b/crypto/sparcv9cap.c index b961cbe..240b9cd 100644 --- a/crypto/sparcv9cap.c +++ b/crypto/sparcv9cap.c @@ -12,6 +12,7 @@ #define SPARCV9_VIS2 (1<<3) /* reserved */ #define SPARCV9_FMADD (1<<4) /* reserved for SPARC64 V */ #define SPARCV9_BLK (1<<5) /* VIS1 block copy */ +#define SPARCV9_CFR (1<<6) static int OPENSSL_sparcv9cap_P=SPARCV9_TICK_PRIVILEGED; @@ -33,6 +34,7 @@ void _sparcv9_vis1_probe(void); unsigned long _sparcv9_vis1_instrument(void); void _sparcv9_vis2_probe(void); void _sparcv9_fmadd_probe(void); +void _sparcv9_cfr_probe(void); size_t _sparcv9_vis1_instrument_bus(unsigned int *,size_t); size_t _sparcv8_vis1_instrument_bus2(unsigned int *,size_t,size_t); @@ -249,6 +251,12 @@ void OPENSSL_cpuid_setup(void) OPENSSL_sparcv9cap_P |= SPARCV9_FMADD; } + if (sigsetjmp(common_jmp,1) == 0) + { + _sparcv9_cfr_probe(); + OPENSSL_sparcv9cap_P |= SPARCV9_CFR; + } + sigaction(SIGBUS,&bus_oact,NULL); sigaction(SIGILL,&ill_oact,NULL); -- 1.7.10.4 ______________________________________________________________________ OpenSSL Project http://www.openssl.org Development Mailing List [email protected] Automated List Manager [email protected]
