Home | History | Annotate | Line # | Download | only in aarch64
      1  1.1  christos #include "arm_arch.h"
      2  1.1  christos 
      3  1.1  christos .text
      4  1.1  christos .arch	armv8-a+crypto
      5  1.1  christos 
      6  1.1  christos .align	5
      7  1.1  christos .globl	_armv7_neon_probe
      8  1.1  christos .type	_armv7_neon_probe,%function
      9  1.1  christos _armv7_neon_probe:
     10  1.1  christos 	orr	v15.16b, v15.16b, v15.16b
     11  1.1  christos 	ret
     12  1.1  christos .size	_armv7_neon_probe,.-_armv7_neon_probe
     13  1.1  christos 
     14  1.1  christos .globl	_armv7_tick
     15  1.1  christos .type	_armv7_tick,%function
     16  1.1  christos _armv7_tick:
     17  1.1  christos #ifdef	__APPLE__
     18  1.1  christos 	mrs	x0, CNTPCT_EL0
     19  1.1  christos #else
     20  1.1  christos 	mrs	x0, CNTVCT_EL0
     21  1.1  christos #endif
     22  1.1  christos 	ret
     23  1.1  christos .size	_armv7_tick,.-_armv7_tick
     24  1.1  christos 
     25  1.1  christos .globl	_armv8_aes_probe
     26  1.1  christos .type	_armv8_aes_probe,%function
     27  1.1  christos _armv8_aes_probe:
     28  1.1  christos 	aese	v0.16b, v0.16b
     29  1.1  christos 	ret
     30  1.1  christos .size	_armv8_aes_probe,.-_armv8_aes_probe
     31  1.1  christos 
     32  1.1  christos .globl	_armv8_sha1_probe
     33  1.1  christos .type	_armv8_sha1_probe,%function
     34  1.1  christos _armv8_sha1_probe:
     35  1.1  christos 	sha1h	s0, s0
     36  1.1  christos 	ret
     37  1.1  christos .size	_armv8_sha1_probe,.-_armv8_sha1_probe
     38  1.1  christos 
     39  1.1  christos .globl	_armv8_sha256_probe
     40  1.1  christos .type	_armv8_sha256_probe,%function
     41  1.1  christos _armv8_sha256_probe:
     42  1.1  christos 	sha256su0	v0.4s, v0.4s
     43  1.1  christos 	ret
     44  1.1  christos .size	_armv8_sha256_probe,.-_armv8_sha256_probe
     45  1.2  christos 
     46  1.1  christos .globl	_armv8_pmull_probe
     47  1.1  christos .type	_armv8_pmull_probe,%function
     48  1.1  christos _armv8_pmull_probe:
     49  1.1  christos 	pmull	v0.1q, v0.1d, v0.1d
     50  1.1  christos 	ret
     51  1.1  christos .size	_armv8_pmull_probe,.-_armv8_pmull_probe
     52  1.1  christos 
     53  1.2  christos .globl	_armv8_sha512_probe
     54  1.2  christos .type	_armv8_sha512_probe,%function
     55  1.2  christos _armv8_sha512_probe:
     56  1.2  christos .long	0xcec08000	// sha512su0	v0.2d,v0.2d
     57  1.2  christos 	ret
     58  1.2  christos .size	_armv8_sha512_probe,.-_armv8_sha512_probe
     59  1.2  christos 
     60  1.3  christos .globl	_armv8_cpuid_probe
     61  1.3  christos .type	_armv8_cpuid_probe,%function
     62  1.3  christos _armv8_cpuid_probe:
     63  1.3  christos 	mrs	x0, midr_el1
     64  1.3  christos 	ret
     65  1.3  christos .size	_armv8_cpuid_probe,.-_armv8_cpuid_probe
     66  1.3  christos 
     67  1.1  christos .globl	OPENSSL_cleanse
     68  1.1  christos .type	OPENSSL_cleanse,%function
     69  1.1  christos .align	5
     70  1.1  christos OPENSSL_cleanse:
     71  1.1  christos 	cbz	x1,.Lret	// len==0?
     72  1.1  christos 	cmp	x1,#15
     73  1.1  christos 	b.hi	.Lot		// len>15
     74  1.1  christos 	nop
     75  1.1  christos .Little:
     76  1.1  christos 	strb	wzr,[x0],#1	// store byte-by-byte
     77  1.1  christos 	subs	x1,x1,#1
     78  1.1  christos 	b.ne	.Little
     79  1.1  christos .Lret:	ret
     80  1.1  christos 
     81  1.1  christos .align	4
     82  1.1  christos .Lot:	tst	x0,#7
     83  1.1  christos 	b.eq	.Laligned	// inp is aligned
     84  1.1  christos 	strb	wzr,[x0],#1	// store byte-by-byte
     85  1.1  christos 	sub	x1,x1,#1
     86  1.1  christos 	b	.Lot
     87  1.1  christos 
     88  1.1  christos .align	4
     89  1.1  christos .Laligned:
     90  1.1  christos 	str	xzr,[x0],#8	// store word-by-word
     91  1.1  christos 	sub	x1,x1,#8
     92  1.1  christos 	tst	x1,#-8
     93  1.1  christos 	b.ne	.Laligned	// len>=8
     94  1.1  christos 	cbnz	x1,.Little	// len!=0?
     95  1.1  christos 	ret
     96  1.1  christos .size	OPENSSL_cleanse,.-OPENSSL_cleanse
     97  1.1  christos 
     98  1.1  christos .globl	CRYPTO_memcmp
     99  1.1  christos .type	CRYPTO_memcmp,%function
    100  1.1  christos .align	4
    101  1.1  christos CRYPTO_memcmp:
    102  1.1  christos 	eor	w3,w3,w3
    103  1.1  christos 	cbz	x2,.Lno_data	// len==0?
    104  1.2  christos 	cmp	x2,#16
    105  1.2  christos 	b.ne	.Loop_cmp
    106  1.2  christos 	ldp	x8,x9,[x0]
    107  1.2  christos 	ldp	x10,x11,[x1]
    108  1.2  christos 	eor	x8,x8,x10
    109  1.2  christos 	eor	x9,x9,x11
    110  1.2  christos 	orr	x8,x8,x9
    111  1.2  christos 	mov	x0,#1
    112  1.2  christos 	cmp	x8,#0
    113  1.2  christos 	csel	x0,xzr,x0,eq
    114  1.2  christos 	ret
    115  1.2  christos 
    116  1.2  christos .align	4
    117  1.1  christos .Loop_cmp:
    118  1.1  christos 	ldrb	w4,[x0],#1
    119  1.1  christos 	ldrb	w5,[x1],#1
    120  1.1  christos 	eor	w4,w4,w5
    121  1.1  christos 	orr	w3,w3,w4
    122  1.1  christos 	subs	x2,x2,#1
    123  1.1  christos 	b.ne	.Loop_cmp
    124  1.1  christos 
    125  1.1  christos .Lno_data:
    126  1.1  christos 	neg	w0,w3
    127  1.1  christos 	lsr	w0,w0,#31
    128  1.1  christos 	ret
    129  1.1  christos .size	CRYPTO_memcmp,.-CRYPTO_memcmp
    130