1 /* SPDX-License-Identifier: GPL-2.0 */
3 * SHA-1 implementation for PowerPC.
5 * Copyright (C) 2005 Paul Mackerras <paulus@samba.org>
8 #include <asm/ppc_asm.h>
9 #include <asm/asm-offsets.h>
10 #include <asm/asm-compat.h>
13 #define LWZ(rt, d, ra) \
16 #define LWZ(rt, d, ra) \
22 * We roll the registers for T, A, B, C, D, E around on each
23 * iteration; T on iteration t is A on iteration t+1, and so on.
24 * We use registers 7 - 12 for this.
26 #define RT(t) ((((t)+5)%6)+7)
27 #define RA(t) ((((t)+4)%6)+7)
28 #define RB(t) ((((t)+3)%6)+7)
29 #define RC(t) ((((t)+2)%6)+7)
30 #define RD(t) ((((t)+1)%6)+7)
31 #define RE(t) ((((t)+0)%6)+7)
33 /* We use registers 16 - 31 for the W values */
34 #define W(t) (((t)%16)+16)
39 #define STEPD0_LOAD(t) \
40 andc r0,RD(t),RB(t); \
42 rotlwi RT(t),RA(t),5; \
47 LWZ(W((t)+4),((t)+4)*4,r4); \
48 rotlwi RB(t),RB(t),30; \
51 #define STEPD0_UPDATE(t) \
53 andc r0,RD(t),RB(t); \
54 rotlwi RT(t),RA(t),5; \
55 rotlwi RB(t),RB(t),30; \
58 xor r5,W((t)+4-3),W((t)+4-8); \
60 xor W((t)+4),W((t)+4-16),W((t)+4-14); \
62 xor W((t)+4),W((t)+4),r5; \
64 rotlwi W((t)+4),W((t)+4),1
68 rotlwi RT(t),RA(t),5; \
69 rotlwi RB(t),RB(t),30; \
76 #define STEPD1_UPDATE(t) \
78 rotlwi RT(t),RA(t),5; \
79 rotlwi RB(t),RB(t),30; \
82 xor r5,W((t)+4-3),W((t)+4-8); \
84 xor W((t)+4),W((t)+4-16),W((t)+4-14); \
86 xor W((t)+4),W((t)+4),r5; \
88 rotlwi W((t)+4),W((t)+4),1
90 #define STEPD2_UPDATE(t) \
93 rotlwi RT(t),RA(t),5; \
95 rotlwi RB(t),RB(t),30; \
97 xor r5,W((t)+4-3),W((t)+4-8); \
99 xor W((t)+4),W((t)+4-16),W((t)+4-14); \
101 add RT(t),RT(t),r6; \
103 xor W((t)+4),W((t)+4),r5; \
104 add RT(t),RT(t),r0; \
105 rotlwi W((t)+4),W((t)+4),1
107 #define STEP0LD4(t) \
109 STEPD0_LOAD((t)+1); \
110 STEPD0_LOAD((t)+2); \
113 #define STEPUP4(t, fn) \
114 STEP##fn##_UPDATE(t); \
115 STEP##fn##_UPDATE((t)+1); \
116 STEP##fn##_UPDATE((t)+2); \
117 STEP##fn##_UPDATE((t)+3)
119 #define STEPUP20(t, fn) \
121 STEPUP4((t)+4, fn); \
122 STEPUP4((t)+8, fn); \
123 STEPUP4((t)+12, fn); \
126 _GLOBAL(powerpc_sha_transform)
127 PPC_STLU r1,-INT_FRAME_SIZE(r1)
132 lwz RA(0),0(r3) /* A */
133 lwz RB(0),4(r3) /* B */
134 lwz RC(0),8(r3) /* C */
135 lwz RD(0),12(r3) /* D */
136 lwz RE(0),16(r3) /* E */
143 lis r15,0x5a82 /* K0-19 */
151 lis r15,0x6ed9 /* K20-39 */
155 lis r15,0x8f1b /* K40-59 */
159 lis r15,0xca62 /* K60-79 */
189 addi r1,r1,INT_FRAME_SIZE