1*4882a593Smuzhiyun/* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun#include <linux/linkage.h> 3*4882a593Smuzhiyun#include <asm/visasm.h> 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun#include "opcodes.h" 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun .align 32 8*4882a593SmuzhiyunENTRY(des_sparc64_key_expand) 9*4882a593Smuzhiyun /* %o0=input_key, %o1=output_key */ 10*4882a593Smuzhiyun VISEntryHalf 11*4882a593Smuzhiyun ld [%o0 + 0x00], %f0 12*4882a593Smuzhiyun ld [%o0 + 0x04], %f1 13*4882a593Smuzhiyun DES_KEXPAND(0, 0, 0) 14*4882a593Smuzhiyun DES_KEXPAND(0, 1, 2) 15*4882a593Smuzhiyun DES_KEXPAND(2, 3, 6) 16*4882a593Smuzhiyun DES_KEXPAND(2, 2, 4) 17*4882a593Smuzhiyun DES_KEXPAND(6, 3, 10) 18*4882a593Smuzhiyun DES_KEXPAND(6, 2, 8) 19*4882a593Smuzhiyun DES_KEXPAND(10, 3, 14) 20*4882a593Smuzhiyun DES_KEXPAND(10, 2, 12) 21*4882a593Smuzhiyun DES_KEXPAND(14, 1, 16) 22*4882a593Smuzhiyun DES_KEXPAND(16, 3, 20) 23*4882a593Smuzhiyun DES_KEXPAND(16, 2, 18) 24*4882a593Smuzhiyun DES_KEXPAND(20, 3, 24) 25*4882a593Smuzhiyun DES_KEXPAND(20, 2, 22) 26*4882a593Smuzhiyun DES_KEXPAND(24, 3, 28) 27*4882a593Smuzhiyun DES_KEXPAND(24, 2, 26) 28*4882a593Smuzhiyun DES_KEXPAND(28, 1, 30) 29*4882a593Smuzhiyun std %f0, [%o1 + 0x00] 30*4882a593Smuzhiyun std %f2, [%o1 + 0x08] 31*4882a593Smuzhiyun std %f4, [%o1 + 0x10] 32*4882a593Smuzhiyun std %f6, [%o1 + 0x18] 33*4882a593Smuzhiyun std %f8, [%o1 + 0x20] 34*4882a593Smuzhiyun std %f10, [%o1 + 0x28] 35*4882a593Smuzhiyun std %f12, [%o1 + 0x30] 36*4882a593Smuzhiyun std %f14, [%o1 + 0x38] 37*4882a593Smuzhiyun std %f16, [%o1 + 0x40] 38*4882a593Smuzhiyun std %f18, [%o1 + 0x48] 39*4882a593Smuzhiyun std %f20, [%o1 + 0x50] 40*4882a593Smuzhiyun std %f22, [%o1 + 0x58] 41*4882a593Smuzhiyun std %f24, [%o1 + 0x60] 42*4882a593Smuzhiyun std %f26, [%o1 + 0x68] 43*4882a593Smuzhiyun std %f28, [%o1 + 0x70] 44*4882a593Smuzhiyun std %f30, [%o1 + 0x78] 45*4882a593Smuzhiyun retl 46*4882a593Smuzhiyun VISExitHalf 47*4882a593SmuzhiyunENDPROC(des_sparc64_key_expand) 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun .align 32 50*4882a593SmuzhiyunENTRY(des_sparc64_crypt) 51*4882a593Smuzhiyun /* %o0=key, %o1=input, %o2=output */ 52*4882a593Smuzhiyun VISEntry 53*4882a593Smuzhiyun ldd [%o1 + 0x00], %f32 54*4882a593Smuzhiyun ldd [%o0 + 0x00], %f0 55*4882a593Smuzhiyun ldd [%o0 + 0x08], %f2 56*4882a593Smuzhiyun ldd [%o0 + 0x10], %f4 57*4882a593Smuzhiyun ldd [%o0 + 0x18], %f6 58*4882a593Smuzhiyun ldd [%o0 + 0x20], %f8 59*4882a593Smuzhiyun ldd [%o0 + 0x28], %f10 60*4882a593Smuzhiyun ldd [%o0 + 0x30], %f12 61*4882a593Smuzhiyun ldd [%o0 + 0x38], %f14 62*4882a593Smuzhiyun ldd [%o0 + 0x40], %f16 63*4882a593Smuzhiyun ldd [%o0 + 0x48], %f18 64*4882a593Smuzhiyun ldd [%o0 + 0x50], %f20 65*4882a593Smuzhiyun ldd [%o0 + 0x58], %f22 66*4882a593Smuzhiyun ldd [%o0 + 0x60], %f24 67*4882a593Smuzhiyun ldd [%o0 + 0x68], %f26 68*4882a593Smuzhiyun ldd [%o0 + 0x70], %f28 69*4882a593Smuzhiyun ldd [%o0 + 0x78], %f30 70*4882a593Smuzhiyun DES_IP(32, 32) 71*4882a593Smuzhiyun DES_ROUND(0, 2, 32, 32) 72*4882a593Smuzhiyun DES_ROUND(4, 6, 32, 32) 73*4882a593Smuzhiyun DES_ROUND(8, 10, 32, 32) 74*4882a593Smuzhiyun DES_ROUND(12, 14, 32, 32) 75*4882a593Smuzhiyun DES_ROUND(16, 18, 32, 32) 76*4882a593Smuzhiyun DES_ROUND(20, 22, 32, 32) 77*4882a593Smuzhiyun DES_ROUND(24, 26, 32, 32) 78*4882a593Smuzhiyun DES_ROUND(28, 30, 32, 32) 79*4882a593Smuzhiyun DES_IIP(32, 32) 80*4882a593Smuzhiyun std %f32, [%o2 + 0x00] 81*4882a593Smuzhiyun retl 82*4882a593Smuzhiyun VISExit 83*4882a593SmuzhiyunENDPROC(des_sparc64_crypt) 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun .align 32 86*4882a593SmuzhiyunENTRY(des_sparc64_load_keys) 87*4882a593Smuzhiyun /* %o0=key */ 88*4882a593Smuzhiyun VISEntry 89*4882a593Smuzhiyun ldd [%o0 + 0x00], %f0 90*4882a593Smuzhiyun ldd [%o0 + 0x08], %f2 91*4882a593Smuzhiyun ldd [%o0 + 0x10], %f4 92*4882a593Smuzhiyun ldd [%o0 + 0x18], %f6 93*4882a593Smuzhiyun ldd [%o0 + 0x20], %f8 94*4882a593Smuzhiyun ldd [%o0 + 0x28], %f10 95*4882a593Smuzhiyun ldd [%o0 + 0x30], %f12 96*4882a593Smuzhiyun ldd [%o0 + 0x38], %f14 97*4882a593Smuzhiyun ldd [%o0 + 0x40], %f16 98*4882a593Smuzhiyun ldd [%o0 + 0x48], %f18 99*4882a593Smuzhiyun ldd [%o0 + 0x50], %f20 100*4882a593Smuzhiyun ldd [%o0 + 0x58], %f22 101*4882a593Smuzhiyun ldd [%o0 + 0x60], %f24 102*4882a593Smuzhiyun ldd [%o0 + 0x68], %f26 103*4882a593Smuzhiyun ldd [%o0 + 0x70], %f28 104*4882a593Smuzhiyun retl 105*4882a593Smuzhiyun ldd [%o0 + 0x78], %f30 106*4882a593SmuzhiyunENDPROC(des_sparc64_load_keys) 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun .align 32 109*4882a593SmuzhiyunENTRY(des_sparc64_ecb_crypt) 110*4882a593Smuzhiyun /* %o0=input, %o1=output, %o2=len */ 111*4882a593Smuzhiyun1: ldd [%o0 + 0x00], %f32 112*4882a593Smuzhiyun add %o0, 0x08, %o0 113*4882a593Smuzhiyun DES_IP(32, 32) 114*4882a593Smuzhiyun DES_ROUND(0, 2, 32, 32) 115*4882a593Smuzhiyun DES_ROUND(4, 6, 32, 32) 116*4882a593Smuzhiyun DES_ROUND(8, 10, 32, 32) 117*4882a593Smuzhiyun DES_ROUND(12, 14, 32, 32) 118*4882a593Smuzhiyun DES_ROUND(16, 18, 32, 32) 119*4882a593Smuzhiyun DES_ROUND(20, 22, 32, 32) 120*4882a593Smuzhiyun DES_ROUND(24, 26, 32, 32) 121*4882a593Smuzhiyun DES_ROUND(28, 30, 32, 32) 122*4882a593Smuzhiyun DES_IIP(32, 32) 123*4882a593Smuzhiyun std %f32, [%o1 + 0x00] 124*4882a593Smuzhiyun subcc %o2, 0x08, %o2 125*4882a593Smuzhiyun bne,pt %icc, 1b 126*4882a593Smuzhiyun add %o1, 0x08, %o1 127*4882a593Smuzhiyun retl 128*4882a593Smuzhiyun nop 129*4882a593SmuzhiyunENDPROC(des_sparc64_ecb_crypt) 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun .align 32 132*4882a593SmuzhiyunENTRY(des_sparc64_cbc_encrypt) 133*4882a593Smuzhiyun /* %o0=input, %o1=output, %o2=len, %o3=IV */ 134*4882a593Smuzhiyun ldd [%o3 + 0x00], %f32 135*4882a593Smuzhiyun1: ldd [%o0 + 0x00], %f34 136*4882a593Smuzhiyun fxor %f32, %f34, %f32 137*4882a593Smuzhiyun DES_IP(32, 32) 138*4882a593Smuzhiyun DES_ROUND(0, 2, 32, 32) 139*4882a593Smuzhiyun DES_ROUND(4, 6, 32, 32) 140*4882a593Smuzhiyun DES_ROUND(8, 10, 32, 32) 141*4882a593Smuzhiyun DES_ROUND(12, 14, 32, 32) 142*4882a593Smuzhiyun DES_ROUND(16, 18, 32, 32) 143*4882a593Smuzhiyun DES_ROUND(20, 22, 32, 32) 144*4882a593Smuzhiyun DES_ROUND(24, 26, 32, 32) 145*4882a593Smuzhiyun DES_ROUND(28, 30, 32, 32) 146*4882a593Smuzhiyun DES_IIP(32, 32) 147*4882a593Smuzhiyun std %f32, [%o1 + 0x00] 148*4882a593Smuzhiyun add %o0, 0x08, %o0 149*4882a593Smuzhiyun subcc %o2, 0x08, %o2 150*4882a593Smuzhiyun bne,pt %icc, 1b 151*4882a593Smuzhiyun add %o1, 0x08, %o1 152*4882a593Smuzhiyun retl 153*4882a593Smuzhiyun std %f32, [%o3 + 0x00] 154*4882a593SmuzhiyunENDPROC(des_sparc64_cbc_encrypt) 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun .align 32 157*4882a593SmuzhiyunENTRY(des_sparc64_cbc_decrypt) 158*4882a593Smuzhiyun /* %o0=input, %o1=output, %o2=len, %o3=IV */ 159*4882a593Smuzhiyun ldd [%o3 + 0x00], %f34 160*4882a593Smuzhiyun1: ldd [%o0 + 0x00], %f36 161*4882a593Smuzhiyun DES_IP(36, 32) 162*4882a593Smuzhiyun DES_ROUND(0, 2, 32, 32) 163*4882a593Smuzhiyun DES_ROUND(4, 6, 32, 32) 164*4882a593Smuzhiyun DES_ROUND(8, 10, 32, 32) 165*4882a593Smuzhiyun DES_ROUND(12, 14, 32, 32) 166*4882a593Smuzhiyun DES_ROUND(16, 18, 32, 32) 167*4882a593Smuzhiyun DES_ROUND(20, 22, 32, 32) 168*4882a593Smuzhiyun DES_ROUND(24, 26, 32, 32) 169*4882a593Smuzhiyun DES_ROUND(28, 30, 32, 32) 170*4882a593Smuzhiyun DES_IIP(32, 32) 171*4882a593Smuzhiyun fxor %f32, %f34, %f32 172*4882a593Smuzhiyun fsrc2 %f36, %f34 173*4882a593Smuzhiyun std %f32, [%o1 + 0x00] 174*4882a593Smuzhiyun add %o0, 0x08, %o0 175*4882a593Smuzhiyun subcc %o2, 0x08, %o2 176*4882a593Smuzhiyun bne,pt %icc, 1b 177*4882a593Smuzhiyun add %o1, 0x08, %o1 178*4882a593Smuzhiyun retl 179*4882a593Smuzhiyun std %f36, [%o3 + 0x00] 180*4882a593SmuzhiyunENDPROC(des_sparc64_cbc_decrypt) 181*4882a593Smuzhiyun 182*4882a593Smuzhiyun .align 32 183*4882a593SmuzhiyunENTRY(des3_ede_sparc64_crypt) 184*4882a593Smuzhiyun /* %o0=key, %o1=input, %o2=output */ 185*4882a593Smuzhiyun VISEntry 186*4882a593Smuzhiyun ldd [%o1 + 0x00], %f32 187*4882a593Smuzhiyun ldd [%o0 + 0x00], %f0 188*4882a593Smuzhiyun ldd [%o0 + 0x08], %f2 189*4882a593Smuzhiyun ldd [%o0 + 0x10], %f4 190*4882a593Smuzhiyun ldd [%o0 + 0x18], %f6 191*4882a593Smuzhiyun ldd [%o0 + 0x20], %f8 192*4882a593Smuzhiyun ldd [%o0 + 0x28], %f10 193*4882a593Smuzhiyun ldd [%o0 + 0x30], %f12 194*4882a593Smuzhiyun ldd [%o0 + 0x38], %f14 195*4882a593Smuzhiyun ldd [%o0 + 0x40], %f16 196*4882a593Smuzhiyun ldd [%o0 + 0x48], %f18 197*4882a593Smuzhiyun ldd [%o0 + 0x50], %f20 198*4882a593Smuzhiyun ldd [%o0 + 0x58], %f22 199*4882a593Smuzhiyun ldd [%o0 + 0x60], %f24 200*4882a593Smuzhiyun ldd [%o0 + 0x68], %f26 201*4882a593Smuzhiyun ldd [%o0 + 0x70], %f28 202*4882a593Smuzhiyun ldd [%o0 + 0x78], %f30 203*4882a593Smuzhiyun DES_IP(32, 32) 204*4882a593Smuzhiyun DES_ROUND(0, 2, 32, 32) 205*4882a593Smuzhiyun ldd [%o0 + 0x80], %f0 206*4882a593Smuzhiyun ldd [%o0 + 0x88], %f2 207*4882a593Smuzhiyun DES_ROUND(4, 6, 32, 32) 208*4882a593Smuzhiyun ldd [%o0 + 0x90], %f4 209*4882a593Smuzhiyun ldd [%o0 + 0x98], %f6 210*4882a593Smuzhiyun DES_ROUND(8, 10, 32, 32) 211*4882a593Smuzhiyun ldd [%o0 + 0xa0], %f8 212*4882a593Smuzhiyun ldd [%o0 + 0xa8], %f10 213*4882a593Smuzhiyun DES_ROUND(12, 14, 32, 32) 214*4882a593Smuzhiyun ldd [%o0 + 0xb0], %f12 215*4882a593Smuzhiyun ldd [%o0 + 0xb8], %f14 216*4882a593Smuzhiyun DES_ROUND(16, 18, 32, 32) 217*4882a593Smuzhiyun ldd [%o0 + 0xc0], %f16 218*4882a593Smuzhiyun ldd [%o0 + 0xc8], %f18 219*4882a593Smuzhiyun DES_ROUND(20, 22, 32, 32) 220*4882a593Smuzhiyun ldd [%o0 + 0xd0], %f20 221*4882a593Smuzhiyun ldd [%o0 + 0xd8], %f22 222*4882a593Smuzhiyun DES_ROUND(24, 26, 32, 32) 223*4882a593Smuzhiyun ldd [%o0 + 0xe0], %f24 224*4882a593Smuzhiyun ldd [%o0 + 0xe8], %f26 225*4882a593Smuzhiyun DES_ROUND(28, 30, 32, 32) 226*4882a593Smuzhiyun ldd [%o0 + 0xf0], %f28 227*4882a593Smuzhiyun ldd [%o0 + 0xf8], %f30 228*4882a593Smuzhiyun DES_IIP(32, 32) 229*4882a593Smuzhiyun DES_IP(32, 32) 230*4882a593Smuzhiyun DES_ROUND(0, 2, 32, 32) 231*4882a593Smuzhiyun ldd [%o0 + 0x100], %f0 232*4882a593Smuzhiyun ldd [%o0 + 0x108], %f2 233*4882a593Smuzhiyun DES_ROUND(4, 6, 32, 32) 234*4882a593Smuzhiyun ldd [%o0 + 0x110], %f4 235*4882a593Smuzhiyun ldd [%o0 + 0x118], %f6 236*4882a593Smuzhiyun DES_ROUND(8, 10, 32, 32) 237*4882a593Smuzhiyun ldd [%o0 + 0x120], %f8 238*4882a593Smuzhiyun ldd [%o0 + 0x128], %f10 239*4882a593Smuzhiyun DES_ROUND(12, 14, 32, 32) 240*4882a593Smuzhiyun ldd [%o0 + 0x130], %f12 241*4882a593Smuzhiyun ldd [%o0 + 0x138], %f14 242*4882a593Smuzhiyun DES_ROUND(16, 18, 32, 32) 243*4882a593Smuzhiyun ldd [%o0 + 0x140], %f16 244*4882a593Smuzhiyun ldd [%o0 + 0x148], %f18 245*4882a593Smuzhiyun DES_ROUND(20, 22, 32, 32) 246*4882a593Smuzhiyun ldd [%o0 + 0x150], %f20 247*4882a593Smuzhiyun ldd [%o0 + 0x158], %f22 248*4882a593Smuzhiyun DES_ROUND(24, 26, 32, 32) 249*4882a593Smuzhiyun ldd [%o0 + 0x160], %f24 250*4882a593Smuzhiyun ldd [%o0 + 0x168], %f26 251*4882a593Smuzhiyun DES_ROUND(28, 30, 32, 32) 252*4882a593Smuzhiyun ldd [%o0 + 0x170], %f28 253*4882a593Smuzhiyun ldd [%o0 + 0x178], %f30 254*4882a593Smuzhiyun DES_IIP(32, 32) 255*4882a593Smuzhiyun DES_IP(32, 32) 256*4882a593Smuzhiyun DES_ROUND(0, 2, 32, 32) 257*4882a593Smuzhiyun DES_ROUND(4, 6, 32, 32) 258*4882a593Smuzhiyun DES_ROUND(8, 10, 32, 32) 259*4882a593Smuzhiyun DES_ROUND(12, 14, 32, 32) 260*4882a593Smuzhiyun DES_ROUND(16, 18, 32, 32) 261*4882a593Smuzhiyun DES_ROUND(20, 22, 32, 32) 262*4882a593Smuzhiyun DES_ROUND(24, 26, 32, 32) 263*4882a593Smuzhiyun DES_ROUND(28, 30, 32, 32) 264*4882a593Smuzhiyun DES_IIP(32, 32) 265*4882a593Smuzhiyun 266*4882a593Smuzhiyun std %f32, [%o2 + 0x00] 267*4882a593Smuzhiyun retl 268*4882a593Smuzhiyun VISExit 269*4882a593SmuzhiyunENDPROC(des3_ede_sparc64_crypt) 270*4882a593Smuzhiyun 271*4882a593Smuzhiyun .align 32 272*4882a593SmuzhiyunENTRY(des3_ede_sparc64_load_keys) 273*4882a593Smuzhiyun /* %o0=key */ 274*4882a593Smuzhiyun VISEntry 275*4882a593Smuzhiyun ldd [%o0 + 0x00], %f0 276*4882a593Smuzhiyun ldd [%o0 + 0x08], %f2 277*4882a593Smuzhiyun ldd [%o0 + 0x10], %f4 278*4882a593Smuzhiyun ldd [%o0 + 0x18], %f6 279*4882a593Smuzhiyun ldd [%o0 + 0x20], %f8 280*4882a593Smuzhiyun ldd [%o0 + 0x28], %f10 281*4882a593Smuzhiyun ldd [%o0 + 0x30], %f12 282*4882a593Smuzhiyun ldd [%o0 + 0x38], %f14 283*4882a593Smuzhiyun ldd [%o0 + 0x40], %f16 284*4882a593Smuzhiyun ldd [%o0 + 0x48], %f18 285*4882a593Smuzhiyun ldd [%o0 + 0x50], %f20 286*4882a593Smuzhiyun ldd [%o0 + 0x58], %f22 287*4882a593Smuzhiyun ldd [%o0 + 0x60], %f24 288*4882a593Smuzhiyun ldd [%o0 + 0x68], %f26 289*4882a593Smuzhiyun ldd [%o0 + 0x70], %f28 290*4882a593Smuzhiyun ldd [%o0 + 0x78], %f30 291*4882a593Smuzhiyun ldd [%o0 + 0x80], %f32 292*4882a593Smuzhiyun ldd [%o0 + 0x88], %f34 293*4882a593Smuzhiyun ldd [%o0 + 0x90], %f36 294*4882a593Smuzhiyun ldd [%o0 + 0x98], %f38 295*4882a593Smuzhiyun ldd [%o0 + 0xa0], %f40 296*4882a593Smuzhiyun ldd [%o0 + 0xa8], %f42 297*4882a593Smuzhiyun ldd [%o0 + 0xb0], %f44 298*4882a593Smuzhiyun ldd [%o0 + 0xb8], %f46 299*4882a593Smuzhiyun ldd [%o0 + 0xc0], %f48 300*4882a593Smuzhiyun ldd [%o0 + 0xc8], %f50 301*4882a593Smuzhiyun ldd [%o0 + 0xd0], %f52 302*4882a593Smuzhiyun ldd [%o0 + 0xd8], %f54 303*4882a593Smuzhiyun ldd [%o0 + 0xe0], %f56 304*4882a593Smuzhiyun retl 305*4882a593Smuzhiyun ldd [%o0 + 0xe8], %f58 306*4882a593SmuzhiyunENDPROC(des3_ede_sparc64_load_keys) 307*4882a593Smuzhiyun 308*4882a593Smuzhiyun#define DES3_LOOP_BODY(X) \ 309*4882a593Smuzhiyun DES_IP(X, X) \ 310*4882a593Smuzhiyun DES_ROUND(0, 2, X, X) \ 311*4882a593Smuzhiyun DES_ROUND(4, 6, X, X) \ 312*4882a593Smuzhiyun DES_ROUND(8, 10, X, X) \ 313*4882a593Smuzhiyun DES_ROUND(12, 14, X, X) \ 314*4882a593Smuzhiyun DES_ROUND(16, 18, X, X) \ 315*4882a593Smuzhiyun ldd [%o0 + 0xf0], %f16; \ 316*4882a593Smuzhiyun ldd [%o0 + 0xf8], %f18; \ 317*4882a593Smuzhiyun DES_ROUND(20, 22, X, X) \ 318*4882a593Smuzhiyun ldd [%o0 + 0x100], %f20; \ 319*4882a593Smuzhiyun ldd [%o0 + 0x108], %f22; \ 320*4882a593Smuzhiyun DES_ROUND(24, 26, X, X) \ 321*4882a593Smuzhiyun ldd [%o0 + 0x110], %f24; \ 322*4882a593Smuzhiyun ldd [%o0 + 0x118], %f26; \ 323*4882a593Smuzhiyun DES_ROUND(28, 30, X, X) \ 324*4882a593Smuzhiyun ldd [%o0 + 0x120], %f28; \ 325*4882a593Smuzhiyun ldd [%o0 + 0x128], %f30; \ 326*4882a593Smuzhiyun DES_IIP(X, X) \ 327*4882a593Smuzhiyun DES_IP(X, X) \ 328*4882a593Smuzhiyun DES_ROUND(32, 34, X, X) \ 329*4882a593Smuzhiyun ldd [%o0 + 0x130], %f0; \ 330*4882a593Smuzhiyun ldd [%o0 + 0x138], %f2; \ 331*4882a593Smuzhiyun DES_ROUND(36, 38, X, X) \ 332*4882a593Smuzhiyun ldd [%o0 + 0x140], %f4; \ 333*4882a593Smuzhiyun ldd [%o0 + 0x148], %f6; \ 334*4882a593Smuzhiyun DES_ROUND(40, 42, X, X) \ 335*4882a593Smuzhiyun ldd [%o0 + 0x150], %f8; \ 336*4882a593Smuzhiyun ldd [%o0 + 0x158], %f10; \ 337*4882a593Smuzhiyun DES_ROUND(44, 46, X, X) \ 338*4882a593Smuzhiyun ldd [%o0 + 0x160], %f12; \ 339*4882a593Smuzhiyun ldd [%o0 + 0x168], %f14; \ 340*4882a593Smuzhiyun DES_ROUND(48, 50, X, X) \ 341*4882a593Smuzhiyun DES_ROUND(52, 54, X, X) \ 342*4882a593Smuzhiyun DES_ROUND(56, 58, X, X) \ 343*4882a593Smuzhiyun DES_ROUND(16, 18, X, X) \ 344*4882a593Smuzhiyun ldd [%o0 + 0x170], %f16; \ 345*4882a593Smuzhiyun ldd [%o0 + 0x178], %f18; \ 346*4882a593Smuzhiyun DES_IIP(X, X) \ 347*4882a593Smuzhiyun DES_IP(X, X) \ 348*4882a593Smuzhiyun DES_ROUND(20, 22, X, X) \ 349*4882a593Smuzhiyun ldd [%o0 + 0x50], %f20; \ 350*4882a593Smuzhiyun ldd [%o0 + 0x58], %f22; \ 351*4882a593Smuzhiyun DES_ROUND(24, 26, X, X) \ 352*4882a593Smuzhiyun ldd [%o0 + 0x60], %f24; \ 353*4882a593Smuzhiyun ldd [%o0 + 0x68], %f26; \ 354*4882a593Smuzhiyun DES_ROUND(28, 30, X, X) \ 355*4882a593Smuzhiyun ldd [%o0 + 0x70], %f28; \ 356*4882a593Smuzhiyun ldd [%o0 + 0x78], %f30; \ 357*4882a593Smuzhiyun DES_ROUND(0, 2, X, X) \ 358*4882a593Smuzhiyun ldd [%o0 + 0x00], %f0; \ 359*4882a593Smuzhiyun ldd [%o0 + 0x08], %f2; \ 360*4882a593Smuzhiyun DES_ROUND(4, 6, X, X) \ 361*4882a593Smuzhiyun ldd [%o0 + 0x10], %f4; \ 362*4882a593Smuzhiyun ldd [%o0 + 0x18], %f6; \ 363*4882a593Smuzhiyun DES_ROUND(8, 10, X, X) \ 364*4882a593Smuzhiyun ldd [%o0 + 0x20], %f8; \ 365*4882a593Smuzhiyun ldd [%o0 + 0x28], %f10; \ 366*4882a593Smuzhiyun DES_ROUND(12, 14, X, X) \ 367*4882a593Smuzhiyun ldd [%o0 + 0x30], %f12; \ 368*4882a593Smuzhiyun ldd [%o0 + 0x38], %f14; \ 369*4882a593Smuzhiyun DES_ROUND(16, 18, X, X) \ 370*4882a593Smuzhiyun ldd [%o0 + 0x40], %f16; \ 371*4882a593Smuzhiyun ldd [%o0 + 0x48], %f18; \ 372*4882a593Smuzhiyun DES_IIP(X, X) 373*4882a593Smuzhiyun 374*4882a593Smuzhiyun .align 32 375*4882a593SmuzhiyunENTRY(des3_ede_sparc64_ecb_crypt) 376*4882a593Smuzhiyun /* %o0=key, %o1=input, %o2=output, %o3=len */ 377*4882a593Smuzhiyun1: ldd [%o1 + 0x00], %f60 378*4882a593Smuzhiyun DES3_LOOP_BODY(60) 379*4882a593Smuzhiyun std %f60, [%o2 + 0x00] 380*4882a593Smuzhiyun add %o1, 0x08, %o1 381*4882a593Smuzhiyun subcc %o3, 0x08, %o3 382*4882a593Smuzhiyun bne,pt %icc, 1b 383*4882a593Smuzhiyun add %o2, 0x08, %o2 384*4882a593Smuzhiyun retl 385*4882a593Smuzhiyun nop 386*4882a593SmuzhiyunENDPROC(des3_ede_sparc64_ecb_crypt) 387*4882a593Smuzhiyun 388*4882a593Smuzhiyun .align 32 389*4882a593SmuzhiyunENTRY(des3_ede_sparc64_cbc_encrypt) 390*4882a593Smuzhiyun /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ 391*4882a593Smuzhiyun ldd [%o4 + 0x00], %f60 392*4882a593Smuzhiyun1: ldd [%o1 + 0x00], %f62 393*4882a593Smuzhiyun fxor %f60, %f62, %f60 394*4882a593Smuzhiyun DES3_LOOP_BODY(60) 395*4882a593Smuzhiyun std %f60, [%o2 + 0x00] 396*4882a593Smuzhiyun add %o1, 0x08, %o1 397*4882a593Smuzhiyun subcc %o3, 0x08, %o3 398*4882a593Smuzhiyun bne,pt %icc, 1b 399*4882a593Smuzhiyun add %o2, 0x08, %o2 400*4882a593Smuzhiyun retl 401*4882a593Smuzhiyun std %f60, [%o4 + 0x00] 402*4882a593SmuzhiyunENDPROC(des3_ede_sparc64_cbc_encrypt) 403*4882a593Smuzhiyun 404*4882a593Smuzhiyun .align 32 405*4882a593SmuzhiyunENTRY(des3_ede_sparc64_cbc_decrypt) 406*4882a593Smuzhiyun /* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */ 407*4882a593Smuzhiyun ldd [%o4 + 0x00], %f62 408*4882a593Smuzhiyun1: ldx [%o1 + 0x00], %g1 409*4882a593Smuzhiyun MOVXTOD_G1_F60 410*4882a593Smuzhiyun DES3_LOOP_BODY(60) 411*4882a593Smuzhiyun fxor %f62, %f60, %f60 412*4882a593Smuzhiyun MOVXTOD_G1_F62 413*4882a593Smuzhiyun std %f60, [%o2 + 0x00] 414*4882a593Smuzhiyun add %o1, 0x08, %o1 415*4882a593Smuzhiyun subcc %o3, 0x08, %o3 416*4882a593Smuzhiyun bne,pt %icc, 1b 417*4882a593Smuzhiyun add %o2, 0x08, %o2 418*4882a593Smuzhiyun retl 419*4882a593Smuzhiyun stx %g1, [%o4 + 0x00] 420*4882a593SmuzhiyunENDPROC(des3_ede_sparc64_cbc_decrypt) 421