OLD | NEW |
1 #if defined(__arm__) | 1 #if defined(__arm__) |
| 2 @ Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. |
| 3 @ |
| 4 @ Licensed under the OpenSSL license (the "License"). You may not use |
| 5 @ this file except in compliance with the License. You can obtain a copy |
| 6 @ in the file LICENSE in the source distribution or at |
| 7 @ https://www.openssl.org/source/license.html |
| 8 |
2 | 9 |
3 @ ==================================================================== | 10 @ ==================================================================== |
4 @ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL | 11 @ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL |
5 @ project. The module is, however, dual licensed under OpenSSL and | 12 @ project. The module is, however, dual licensed under OpenSSL and |
6 @ CRYPTOGAMS licenses depending on where you obtain it. For further | 13 @ CRYPTOGAMS licenses depending on where you obtain it. For further |
7 @ details see http://www.openssl.org/~appro/cryptogams/. | 14 @ details see http://www.openssl.org/~appro/cryptogams/. |
8 @ | 15 @ |
9 @ Permission to use under GPL terms is granted. | 16 @ Permission to use under GPL terms is granted. |
10 @ ==================================================================== | 17 @ ==================================================================== |
11 | 18 |
(...skipping 26 matching lines...) Expand all Loading... |
38 @ Add ARMv8 code path performing at 2.0 cpb on Apple A7. | 45 @ Add ARMv8 code path performing at 2.0 cpb on Apple A7. |
39 | 46 |
40 #ifndef __KERNEL__ | 47 #ifndef __KERNEL__ |
41 # include <openssl/arm_arch.h> | 48 # include <openssl/arm_arch.h> |
42 #else | 49 #else |
43 # define __ARM_ARCH__ __LINUX_ARM_ARCH__ | 50 # define __ARM_ARCH__ __LINUX_ARM_ARCH__ |
44 # define __ARM_MAX_ARCH__ 7 | 51 # define __ARM_MAX_ARCH__ 7 |
45 #endif | 52 #endif |
46 | 53 |
47 .text | 54 .text |
48 #if __ARM_ARCH__<7 | 55 #if defined(__thumb2__) |
| 56 .syntax»unified |
| 57 .thumb |
| 58 #else |
49 .code 32 | 59 .code 32 |
50 #else | |
51 .syntax unified | |
52 # if defined(__thumb2__) && !defined(__APPLE__) | |
53 # define adrl adr | |
54 .thumb | |
55 # else | |
56 .code 32 | |
57 # endif | |
58 #endif | 60 #endif |
59 | 61 |
60 .type K256,%object | 62 .type K256,%object |
61 .align 5 | 63 .align 5 |
62 K256: | 64 K256: |
63 .word 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 | 65 .word 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 |
64 .word 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 | 66 .word 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 |
65 .word 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 | 67 .word 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 |
66 .word 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 | 68 .word 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 |
67 .word 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc | 69 .word 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc |
(...skipping 14 matching lines...) Expand all Loading... |
82 .LOPENSSL_armcap: | 84 .LOPENSSL_armcap: |
83 .word OPENSSL_armcap_P-.Lsha256_block_data_order | 85 .word OPENSSL_armcap_P-.Lsha256_block_data_order |
84 #endif | 86 #endif |
85 .align 5 | 87 .align 5 |
86 | 88 |
87 .globl sha256_block_data_order | 89 .globl sha256_block_data_order |
88 .hidden sha256_block_data_order | 90 .hidden sha256_block_data_order |
89 .type sha256_block_data_order,%function | 91 .type sha256_block_data_order,%function |
90 sha256_block_data_order: | 92 sha256_block_data_order: |
91 .Lsha256_block_data_order: | 93 .Lsha256_block_data_order: |
92 #if __ARM_ARCH__<7 | 94 #if __ARM_ARCH__<7 && !defined(__thumb2__) |
93 sub r3,pc,#8 @ sha256_block_data_order | 95 sub r3,pc,#8 @ sha256_block_data_order |
94 #else | 96 #else |
95 » adr» r3,sha256_block_data_order | 97 » adr» r3,.Lsha256_block_data_order |
96 #endif | 98 #endif |
97 #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) | 99 #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) |
98 ldr r12,.LOPENSSL_armcap | 100 ldr r12,.LOPENSSL_armcap |
99 ldr r12,[r3,r12] @ OPENSSL_armcap_P | 101 ldr r12,[r3,r12] @ OPENSSL_armcap_P |
100 #ifdef __APPLE__ | 102 #ifdef __APPLE__ |
101 ldr r12,[r12] | 103 ldr r12,[r12] |
102 #endif | 104 #endif |
103 tst r12,#ARMV8_SHA256 | 105 tst r12,#ARMV8_SHA256 |
104 bne .LARMv8 | 106 bne .LARMv8 |
105 tst r12,#ARMV7_NEON | 107 tst r12,#ARMV7_NEON |
(...skipping 1765 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1871 .word 0xe12fff1e @ interoperable with Thumb ISA:-) | 1873 .word 0xe12fff1e @ interoperable with Thumb ISA:-) |
1872 #endif | 1874 #endif |
1873 .size sha256_block_data_order,.-sha256_block_data_order | 1875 .size sha256_block_data_order,.-sha256_block_data_order |
1874 #if __ARM_MAX_ARCH__>=7 | 1876 #if __ARM_MAX_ARCH__>=7 |
1875 .arch armv7-a | 1877 .arch armv7-a |
1876 .fpu neon | 1878 .fpu neon |
1877 | 1879 |
1878 .globl sha256_block_data_order_neon | 1880 .globl sha256_block_data_order_neon |
1879 .hidden sha256_block_data_order_neon | 1881 .hidden sha256_block_data_order_neon |
1880 .type sha256_block_data_order_neon,%function | 1882 .type sha256_block_data_order_neon,%function |
1881 .align» 4 | 1883 .align» 5 |
| 1884 .skip» 16 |
1882 sha256_block_data_order_neon: | 1885 sha256_block_data_order_neon: |
1883 .LNEON: | 1886 .LNEON: |
1884 stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr} | 1887 stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr} |
1885 | 1888 |
1886 sub r11,sp,#16*4+16 | 1889 sub r11,sp,#16*4+16 |
1887 » adrl» r14,K256 | 1890 » adr» r14,K256 |
1888 bic r11,r11,#15 @ align for 128-bit stores | 1891 bic r11,r11,#15 @ align for 128-bit stores |
1889 mov r12,sp | 1892 mov r12,sp |
1890 mov sp,r11 @ alloca | 1893 mov sp,r11 @ alloca |
1891 add r2,r1,r2,lsl#6 @ len to point at the end of inp | 1894 add r2,r1,r2,lsl#6 @ len to point at the end of inp |
1892 | 1895 |
1893 vld1.8 {q0},[r1]! | 1896 vld1.8 {q0},[r1]! |
1894 vld1.8 {q1},[r1]! | 1897 vld1.8 {q1},[r1]! |
1895 vld1.8 {q2},[r1]! | 1898 vld1.8 {q2},[r1]! |
1896 vld1.8 {q3},[r1]! | 1899 vld1.8 {q3},[r1]! |
1897 vld1.32 {q8},[r14,:128]! | 1900 vld1.32 {q8},[r14,:128]! |
(...skipping 755 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2653 ldreq sp,[sp,#76] @ restore original sp | 2656 ldreq sp,[sp,#76] @ restore original sp |
2654 itt ne | 2657 itt ne |
2655 eorne r3,r5,r6 | 2658 eorne r3,r5,r6 |
2656 bne .L_00_48 | 2659 bne .L_00_48 |
2657 | 2660 |
2658 ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc} | 2661 ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc} |
2659 .size sha256_block_data_order_neon,.-sha256_block_data_order_neon | 2662 .size sha256_block_data_order_neon,.-sha256_block_data_order_neon |
2660 #endif | 2663 #endif |
2661 #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) | 2664 #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) |
2662 | 2665 |
2663 # if defined(__thumb2__) && !defined(__APPLE__) | 2666 # if defined(__thumb2__) |
2664 # define INST(a,b,c,d) .byte c,d|0xc,a,b | 2667 # define INST(a,b,c,d) .byte c,d|0xc,a,b |
2665 # else | 2668 # else |
2666 # define INST(a,b,c,d) .byte a,b,c,d | 2669 # define INST(a,b,c,d) .byte a,b,c,d |
2667 # endif | 2670 # endif |
2668 | 2671 |
2669 .type sha256_block_data_order_armv8,%function | 2672 .type sha256_block_data_order_armv8,%function |
2670 .align 5 | 2673 .align 5 |
2671 sha256_block_data_order_armv8: | 2674 sha256_block_data_order_armv8: |
2672 .LARMv8: | 2675 .LARMv8: |
2673 vld1.32 {q0,q1},[r0] | 2676 vld1.32 {q0,q1},[r0] |
2674 # ifdef __APPLE__ | |
2675 sub r3,r3,#256+32 | 2677 sub r3,r3,#256+32 |
2676 # elif defined(__thumb2__) | |
2677 adr r3,.LARMv8 | |
2678 sub r3,r3,#.LARMv8-K256 | |
2679 # else | |
2680 adrl r3,K256 | |
2681 # endif | |
2682 add r2,r1,r2,lsl#6 @ len to point at the end of inp | 2678 add r2,r1,r2,lsl#6 @ len to point at the end of inp |
| 2679 b .Loop_v8 |
2683 | 2680 |
| 2681 .align 4 |
2684 .Loop_v8: | 2682 .Loop_v8: |
2685 vld1.8 {q8,q9},[r1]! | 2683 vld1.8 {q8,q9},[r1]! |
2686 vld1.8 {q10,q11},[r1]! | 2684 vld1.8 {q10,q11},[r1]! |
2687 vld1.32 {q12},[r3]! | 2685 vld1.32 {q12},[r3]! |
2688 vrev32.8 q8,q8 | 2686 vrev32.8 q8,q8 |
2689 vrev32.8 q9,q9 | 2687 vrev32.8 q9,q9 |
2690 vrev32.8 q10,q10 | 2688 vrev32.8 q10,q10 |
2691 vrev32.8 q11,q11 | 2689 vrev32.8 q11,q11 |
2692 vmov q14,q0 @ offload | 2690 vmov q14,q0 @ offload |
2693 vmov q15,q1 | 2691 vmov q15,q1 |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2811 .size sha256_block_data_order_armv8,.-sha256_block_data_order_armv8 | 2809 .size sha256_block_data_order_armv8,.-sha256_block_data_order_armv8 |
2812 #endif | 2810 #endif |
2813 .byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114
,109,32,102,111,114,32,65,82,77,118,52,47,78,69,79,78,47,65,82,77,118,56,44,32,6
7,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,1
10,115,115,108,46,111,114,103,62,0 | 2811 .byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114
,109,32,102,111,114,32,65,82,77,118,52,47,78,69,79,78,47,65,82,77,118,56,44,32,6
7,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,1
10,115,115,108,46,111,114,103,62,0 |
2814 .align 2 | 2812 .align 2 |
2815 .align 2 | 2813 .align 2 |
2816 #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) | 2814 #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) |
2817 .comm OPENSSL_armcap_P,4,4 | 2815 .comm OPENSSL_armcap_P,4,4 |
2818 .hidden OPENSSL_armcap_P | 2816 .hidden OPENSSL_armcap_P |
2819 #endif | 2817 #endif |
2820 #endif | 2818 #endif |
OLD | NEW |