diff options
Diffstat (limited to 'arch/x86/crypto')
-rw-r--r-- | arch/x86/crypto/ghash-clmulni-intel_asm.S | 29 |
1 files changed, 10 insertions, 19 deletions
diff --git a/arch/x86/crypto/ghash-clmulni-intel_asm.S b/arch/x86/crypto/ghash-clmulni-intel_asm.S index 59584982fb75..1528dc4886cf 100644 --- a/arch/x86/crypto/ghash-clmulni-intel_asm.S +++ b/arch/x86/crypto/ghash-clmulni-intel_asm.S | |||
@@ -17,7 +17,7 @@ | |||
17 | */ | 17 | */ |
18 | 18 | ||
19 | #include <linux/linkage.h> | 19 | #include <linux/linkage.h> |
20 | #include <asm/i387.h> | 20 | #include <asm/inst.h> |
21 | 21 | ||
22 | .align 16 | 22 | .align 16 |
23 | .Lbswap_mask: | 23 | .Lbswap_mask: |
@@ -56,12 +56,9 @@ __clmul_gf128mul_ble: | |||
56 | pxor DATA, T2 | 56 | pxor DATA, T2 |
57 | pxor SHASH, T3 | 57 | pxor SHASH, T3 |
58 | 58 | ||
59 | # pclmulqdq $0x00, SHASH, DATA # DATA = a0 * b0 | 59 | PCLMULQDQ 0x00 SHASH DATA # DATA = a0 * b0 |
60 | .byte 0x66, 0x0f, 0x3a, 0x44, 0xc1, 0x00 | 60 | PCLMULQDQ 0x11 SHASH T1 # T1 = a1 * b1 |
61 | # pclmulqdq $0x11, SHASH, T1 # T1 = a1 * b1 | 61 | PCLMULQDQ 0x00 T3 T2 # T2 = (a1 + a0) * (b1 + b0) |
62 | .byte 0x66, 0x0f, 0x3a, 0x44, 0xd1, 0x11 | ||
63 | # pclmulqdq $0x00, T3, T2 # T2 = (a1 + a0) * (b1 + b0) | ||
64 | .byte 0x66, 0x0f, 0x3a, 0x44, 0xdc, 0x00 | ||
65 | pxor DATA, T2 | 62 | pxor DATA, T2 |
66 | pxor T1, T2 # T2 = a0 * b1 + a1 * b0 | 63 | pxor T1, T2 # T2 = a0 * b1 + a1 * b0 |
67 | 64 | ||
@@ -101,11 +98,9 @@ ENTRY(clmul_ghash_mul) | |||
101 | movups (%rdi), DATA | 98 | movups (%rdi), DATA |
102 | movups (%rsi), SHASH | 99 | movups (%rsi), SHASH |
103 | movaps .Lbswap_mask, BSWAP | 100 | movaps .Lbswap_mask, BSWAP |
104 | # pshufb BSWAP, DATA | 101 | PSHUFB_XMM BSWAP DATA |
105 | PSHUFB_XMM5_XMM0 | ||
106 | call __clmul_gf128mul_ble | 102 | call __clmul_gf128mul_ble |
107 | # pshufb BSWAP, DATA | 103 | PSHUFB_XMM BSWAP DATA |
108 | .byte 0x66, 0x0f, 0x38, 0x00, 0xc5 | ||
109 | movups DATA, (%rdi) | 104 | movups DATA, (%rdi) |
110 | ret | 105 | ret |
111 | 106 | ||
@@ -119,21 +114,18 @@ ENTRY(clmul_ghash_update) | |||
119 | movaps .Lbswap_mask, BSWAP | 114 | movaps .Lbswap_mask, BSWAP |
120 | movups (%rdi), DATA | 115 | movups (%rdi), DATA |
121 | movups (%rcx), SHASH | 116 | movups (%rcx), SHASH |
122 | # pshufb BSWAP, DATA | 117 | PSHUFB_XMM BSWAP DATA |
123 | PSHUFB_XMM5_XMM0 | ||
124 | .align 4 | 118 | .align 4 |
125 | .Lupdate_loop: | 119 | .Lupdate_loop: |
126 | movups (%rsi), IN1 | 120 | movups (%rsi), IN1 |
127 | # pshufb BSWAP, IN1 | 121 | PSHUFB_XMM BSWAP IN1 |
128 | PSHUFB_XMM5_XMM6 | ||
129 | pxor IN1, DATA | 122 | pxor IN1, DATA |
130 | call __clmul_gf128mul_ble | 123 | call __clmul_gf128mul_ble |
131 | sub $16, %rdx | 124 | sub $16, %rdx |
132 | add $16, %rsi | 125 | add $16, %rsi |
133 | cmp $16, %rdx | 126 | cmp $16, %rdx |
134 | jge .Lupdate_loop | 127 | jge .Lupdate_loop |
135 | # pshufb BSWAP, DATA | 128 | PSHUFB_XMM BSWAP DATA |
136 | PSHUFB_XMM5_XMM0 | ||
137 | movups DATA, (%rdi) | 129 | movups DATA, (%rdi) |
138 | .Lupdate_just_ret: | 130 | .Lupdate_just_ret: |
139 | ret | 131 | ret |
@@ -146,8 +138,7 @@ ENTRY(clmul_ghash_update) | |||
146 | ENTRY(clmul_ghash_setkey) | 138 | ENTRY(clmul_ghash_setkey) |
147 | movaps .Lbswap_mask, BSWAP | 139 | movaps .Lbswap_mask, BSWAP |
148 | movups (%rsi), %xmm0 | 140 | movups (%rsi), %xmm0 |
149 | # pshufb BSWAP, %xmm0 | 141 | PSHUFB_XMM BSWAP %xmm0 |
150 | PSHUFB_XMM5_XMM0 | ||
151 | movaps %xmm0, %xmm1 | 142 | movaps %xmm0, %xmm1 |
152 | psllq $1, %xmm0 | 143 | psllq $1, %xmm0 |
153 | psrlq $63, %xmm1 | 144 | psrlq $63, %xmm1 |