1*b087dfabSPatrick Steuer/* SPDX-License-Identifier: GPL-2.0 */ 2*b087dfabSPatrick Steuer/* 3*b087dfabSPatrick Steuer * Original implementation written by Andy Polyakov, @dot-asm. 4*b087dfabSPatrick Steuer * This is an adaptation of the original code for kernel use. 5*b087dfabSPatrick Steuer * 6*b087dfabSPatrick Steuer * Copyright (C) 2006-2019 CRYPTOGAMS by <appro@openssl.org>. All Rights Reserved. 7*b087dfabSPatrick Steuer */ 8*b087dfabSPatrick Steuer 9*b087dfabSPatrick Steuer#include <linux/linkage.h> 10*b087dfabSPatrick Steuer#include <asm/nospec-insn.h> 11*b087dfabSPatrick Steuer#include <asm/vx-insn.h> 12*b087dfabSPatrick Steuer 13*b087dfabSPatrick Steuer#define SP %r15 14*b087dfabSPatrick Steuer#define FRAME (16 * 8 + 4 * 8) 15*b087dfabSPatrick Steuer 16*b087dfabSPatrick Steuer.data 17*b087dfabSPatrick Steuer.align 32 18*b087dfabSPatrick Steuer 19*b087dfabSPatrick Steuer.Lsigma: 20*b087dfabSPatrick Steuer.long 0x61707865,0x3320646e,0x79622d32,0x6b206574 # endian-neutral 21*b087dfabSPatrick Steuer.long 1,0,0,0 22*b087dfabSPatrick Steuer.long 2,0,0,0 23*b087dfabSPatrick Steuer.long 3,0,0,0 24*b087dfabSPatrick Steuer.long 0x03020100,0x07060504,0x0b0a0908,0x0f0e0d0c # byte swap 25*b087dfabSPatrick Steuer 26*b087dfabSPatrick Steuer.long 0,1,2,3 27*b087dfabSPatrick Steuer.long 0x61707865,0x61707865,0x61707865,0x61707865 # smashed sigma 28*b087dfabSPatrick Steuer.long 0x3320646e,0x3320646e,0x3320646e,0x3320646e 29*b087dfabSPatrick Steuer.long 0x79622d32,0x79622d32,0x79622d32,0x79622d32 30*b087dfabSPatrick Steuer.long 0x6b206574,0x6b206574,0x6b206574,0x6b206574 31*b087dfabSPatrick Steuer 32*b087dfabSPatrick Steuer.previous 33*b087dfabSPatrick Steuer 34*b087dfabSPatrick Steuer GEN_BR_THUNK %r14 35*b087dfabSPatrick Steuer 36*b087dfabSPatrick Steuer.text 37*b087dfabSPatrick Steuer 38*b087dfabSPatrick Steuer############################################################################# 39*b087dfabSPatrick Steuer# void chacha20_vx_4x(u8 *out, counst u8 *inp, size_t len, 40*b087dfabSPatrick Steuer# counst u32 *key, const u32 *counter) 41*b087dfabSPatrick Steuer 42*b087dfabSPatrick Steuer#define OUT %r2 43*b087dfabSPatrick Steuer#define INP %r3 44*b087dfabSPatrick Steuer#define LEN %r4 45*b087dfabSPatrick Steuer#define KEY %r5 46*b087dfabSPatrick Steuer#define COUNTER %r6 47*b087dfabSPatrick Steuer 48*b087dfabSPatrick Steuer#define BEPERM %v31 49*b087dfabSPatrick Steuer#define CTR %v26 50*b087dfabSPatrick Steuer 51*b087dfabSPatrick Steuer#define K0 %v16 52*b087dfabSPatrick Steuer#define K1 %v17 53*b087dfabSPatrick Steuer#define K2 %v18 54*b087dfabSPatrick Steuer#define K3 %v19 55*b087dfabSPatrick Steuer 56*b087dfabSPatrick Steuer#define XA0 %v0 57*b087dfabSPatrick Steuer#define XA1 %v1 58*b087dfabSPatrick Steuer#define XA2 %v2 59*b087dfabSPatrick Steuer#define XA3 %v3 60*b087dfabSPatrick Steuer 61*b087dfabSPatrick Steuer#define XB0 %v4 62*b087dfabSPatrick Steuer#define XB1 %v5 63*b087dfabSPatrick Steuer#define XB2 %v6 64*b087dfabSPatrick Steuer#define XB3 %v7 65*b087dfabSPatrick Steuer 66*b087dfabSPatrick Steuer#define XC0 %v8 67*b087dfabSPatrick Steuer#define XC1 %v9 68*b087dfabSPatrick Steuer#define XC2 %v10 69*b087dfabSPatrick Steuer#define XC3 %v11 70*b087dfabSPatrick Steuer 71*b087dfabSPatrick Steuer#define XD0 %v12 72*b087dfabSPatrick Steuer#define XD1 %v13 73*b087dfabSPatrick Steuer#define XD2 %v14 74*b087dfabSPatrick Steuer#define XD3 %v15 75*b087dfabSPatrick Steuer 76*b087dfabSPatrick Steuer#define XT0 %v27 77*b087dfabSPatrick Steuer#define XT1 %v28 78*b087dfabSPatrick Steuer#define XT2 %v29 79*b087dfabSPatrick Steuer#define XT3 %v30 80*b087dfabSPatrick Steuer 81*b087dfabSPatrick SteuerENTRY(chacha20_vx_4x) 82*b087dfabSPatrick Steuer stmg %r6,%r7,6*8(SP) 83*b087dfabSPatrick Steuer 84*b087dfabSPatrick Steuer larl %r7,.Lsigma 85*b087dfabSPatrick Steuer lhi %r0,10 86*b087dfabSPatrick Steuer lhi %r1,0 87*b087dfabSPatrick Steuer 88*b087dfabSPatrick Steuer VL K0,0,,%r7 # load sigma 89*b087dfabSPatrick Steuer VL K1,0,,KEY # load key 90*b087dfabSPatrick Steuer VL K2,16,,KEY 91*b087dfabSPatrick Steuer VL K3,0,,COUNTER # load counter 92*b087dfabSPatrick Steuer 93*b087dfabSPatrick Steuer VL BEPERM,0x40,,%r7 94*b087dfabSPatrick Steuer VL CTR,0x50,,%r7 95*b087dfabSPatrick Steuer 96*b087dfabSPatrick Steuer VLM XA0,XA3,0x60,%r7,4 # load [smashed] sigma 97*b087dfabSPatrick Steuer 98*b087dfabSPatrick Steuer VREPF XB0,K1,0 # smash the key 99*b087dfabSPatrick Steuer VREPF XB1,K1,1 100*b087dfabSPatrick Steuer VREPF XB2,K1,2 101*b087dfabSPatrick Steuer VREPF XB3,K1,3 102*b087dfabSPatrick Steuer 103*b087dfabSPatrick Steuer VREPF XD0,K3,0 104*b087dfabSPatrick Steuer VREPF XD1,K3,1 105*b087dfabSPatrick Steuer VREPF XD2,K3,2 106*b087dfabSPatrick Steuer VREPF XD3,K3,3 107*b087dfabSPatrick Steuer VAF XD0,XD0,CTR 108*b087dfabSPatrick Steuer 109*b087dfabSPatrick Steuer VREPF XC0,K2,0 110*b087dfabSPatrick Steuer VREPF XC1,K2,1 111*b087dfabSPatrick Steuer VREPF XC2,K2,2 112*b087dfabSPatrick Steuer VREPF XC3,K2,3 113*b087dfabSPatrick Steuer 114*b087dfabSPatrick Steuer.Loop_4x: 115*b087dfabSPatrick Steuer VAF XA0,XA0,XB0 116*b087dfabSPatrick Steuer VX XD0,XD0,XA0 117*b087dfabSPatrick Steuer VERLLF XD0,XD0,16 118*b087dfabSPatrick Steuer 119*b087dfabSPatrick Steuer VAF XA1,XA1,XB1 120*b087dfabSPatrick Steuer VX XD1,XD1,XA1 121*b087dfabSPatrick Steuer VERLLF XD1,XD1,16 122*b087dfabSPatrick Steuer 123*b087dfabSPatrick Steuer VAF XA2,XA2,XB2 124*b087dfabSPatrick Steuer VX XD2,XD2,XA2 125*b087dfabSPatrick Steuer VERLLF XD2,XD2,16 126*b087dfabSPatrick Steuer 127*b087dfabSPatrick Steuer VAF XA3,XA3,XB3 128*b087dfabSPatrick Steuer VX XD3,XD3,XA3 129*b087dfabSPatrick Steuer VERLLF XD3,XD3,16 130*b087dfabSPatrick Steuer 131*b087dfabSPatrick Steuer VAF XC0,XC0,XD0 132*b087dfabSPatrick Steuer VX XB0,XB0,XC0 133*b087dfabSPatrick Steuer VERLLF XB0,XB0,12 134*b087dfabSPatrick Steuer 135*b087dfabSPatrick Steuer VAF XC1,XC1,XD1 136*b087dfabSPatrick Steuer VX XB1,XB1,XC1 137*b087dfabSPatrick Steuer VERLLF XB1,XB1,12 138*b087dfabSPatrick Steuer 139*b087dfabSPatrick Steuer VAF XC2,XC2,XD2 140*b087dfabSPatrick Steuer VX XB2,XB2,XC2 141*b087dfabSPatrick Steuer VERLLF XB2,XB2,12 142*b087dfabSPatrick Steuer 143*b087dfabSPatrick Steuer VAF XC3,XC3,XD3 144*b087dfabSPatrick Steuer VX XB3,XB3,XC3 145*b087dfabSPatrick Steuer VERLLF XB3,XB3,12 146*b087dfabSPatrick Steuer 147*b087dfabSPatrick Steuer VAF XA0,XA0,XB0 148*b087dfabSPatrick Steuer VX XD0,XD0,XA0 149*b087dfabSPatrick Steuer VERLLF XD0,XD0,8 150*b087dfabSPatrick Steuer 151*b087dfabSPatrick Steuer VAF XA1,XA1,XB1 152*b087dfabSPatrick Steuer VX XD1,XD1,XA1 153*b087dfabSPatrick Steuer VERLLF XD1,XD1,8 154*b087dfabSPatrick Steuer 155*b087dfabSPatrick Steuer VAF XA2,XA2,XB2 156*b087dfabSPatrick Steuer VX XD2,XD2,XA2 157*b087dfabSPatrick Steuer VERLLF XD2,XD2,8 158*b087dfabSPatrick Steuer 159*b087dfabSPatrick Steuer VAF XA3,XA3,XB3 160*b087dfabSPatrick Steuer VX XD3,XD3,XA3 161*b087dfabSPatrick Steuer VERLLF XD3,XD3,8 162*b087dfabSPatrick Steuer 163*b087dfabSPatrick Steuer VAF XC0,XC0,XD0 164*b087dfabSPatrick Steuer VX XB0,XB0,XC0 165*b087dfabSPatrick Steuer VERLLF XB0,XB0,7 166*b087dfabSPatrick Steuer 167*b087dfabSPatrick Steuer VAF XC1,XC1,XD1 168*b087dfabSPatrick Steuer VX XB1,XB1,XC1 169*b087dfabSPatrick Steuer VERLLF XB1,XB1,7 170*b087dfabSPatrick Steuer 171*b087dfabSPatrick Steuer VAF XC2,XC2,XD2 172*b087dfabSPatrick Steuer VX XB2,XB2,XC2 173*b087dfabSPatrick Steuer VERLLF XB2,XB2,7 174*b087dfabSPatrick Steuer 175*b087dfabSPatrick Steuer VAF XC3,XC3,XD3 176*b087dfabSPatrick Steuer VX XB3,XB3,XC3 177*b087dfabSPatrick Steuer VERLLF XB3,XB3,7 178*b087dfabSPatrick Steuer 179*b087dfabSPatrick Steuer VAF XA0,XA0,XB1 180*b087dfabSPatrick Steuer VX XD3,XD3,XA0 181*b087dfabSPatrick Steuer VERLLF XD3,XD3,16 182*b087dfabSPatrick Steuer 183*b087dfabSPatrick Steuer VAF XA1,XA1,XB2 184*b087dfabSPatrick Steuer VX XD0,XD0,XA1 185*b087dfabSPatrick Steuer VERLLF XD0,XD0,16 186*b087dfabSPatrick Steuer 187*b087dfabSPatrick Steuer VAF XA2,XA2,XB3 188*b087dfabSPatrick Steuer VX XD1,XD1,XA2 189*b087dfabSPatrick Steuer VERLLF XD1,XD1,16 190*b087dfabSPatrick Steuer 191*b087dfabSPatrick Steuer VAF XA3,XA3,XB0 192*b087dfabSPatrick Steuer VX XD2,XD2,XA3 193*b087dfabSPatrick Steuer VERLLF XD2,XD2,16 194*b087dfabSPatrick Steuer 195*b087dfabSPatrick Steuer VAF XC2,XC2,XD3 196*b087dfabSPatrick Steuer VX XB1,XB1,XC2 197*b087dfabSPatrick Steuer VERLLF XB1,XB1,12 198*b087dfabSPatrick Steuer 199*b087dfabSPatrick Steuer VAF XC3,XC3,XD0 200*b087dfabSPatrick Steuer VX XB2,XB2,XC3 201*b087dfabSPatrick Steuer VERLLF XB2,XB2,12 202*b087dfabSPatrick Steuer 203*b087dfabSPatrick Steuer VAF XC0,XC0,XD1 204*b087dfabSPatrick Steuer VX XB3,XB3,XC0 205*b087dfabSPatrick Steuer VERLLF XB3,XB3,12 206*b087dfabSPatrick Steuer 207*b087dfabSPatrick Steuer VAF XC1,XC1,XD2 208*b087dfabSPatrick Steuer VX XB0,XB0,XC1 209*b087dfabSPatrick Steuer VERLLF XB0,XB0,12 210*b087dfabSPatrick Steuer 211*b087dfabSPatrick Steuer VAF XA0,XA0,XB1 212*b087dfabSPatrick Steuer VX XD3,XD3,XA0 213*b087dfabSPatrick Steuer VERLLF XD3,XD3,8 214*b087dfabSPatrick Steuer 215*b087dfabSPatrick Steuer VAF XA1,XA1,XB2 216*b087dfabSPatrick Steuer VX XD0,XD0,XA1 217*b087dfabSPatrick Steuer VERLLF XD0,XD0,8 218*b087dfabSPatrick Steuer 219*b087dfabSPatrick Steuer VAF XA2,XA2,XB3 220*b087dfabSPatrick Steuer VX XD1,XD1,XA2 221*b087dfabSPatrick Steuer VERLLF XD1,XD1,8 222*b087dfabSPatrick Steuer 223*b087dfabSPatrick Steuer VAF XA3,XA3,XB0 224*b087dfabSPatrick Steuer VX XD2,XD2,XA3 225*b087dfabSPatrick Steuer VERLLF XD2,XD2,8 226*b087dfabSPatrick Steuer 227*b087dfabSPatrick Steuer VAF XC2,XC2,XD3 228*b087dfabSPatrick Steuer VX XB1,XB1,XC2 229*b087dfabSPatrick Steuer VERLLF XB1,XB1,7 230*b087dfabSPatrick Steuer 231*b087dfabSPatrick Steuer VAF XC3,XC3,XD0 232*b087dfabSPatrick Steuer VX XB2,XB2,XC3 233*b087dfabSPatrick Steuer VERLLF XB2,XB2,7 234*b087dfabSPatrick Steuer 235*b087dfabSPatrick Steuer VAF XC0,XC0,XD1 236*b087dfabSPatrick Steuer VX XB3,XB3,XC0 237*b087dfabSPatrick Steuer VERLLF XB3,XB3,7 238*b087dfabSPatrick Steuer 239*b087dfabSPatrick Steuer VAF XC1,XC1,XD2 240*b087dfabSPatrick Steuer VX XB0,XB0,XC1 241*b087dfabSPatrick Steuer VERLLF XB0,XB0,7 242*b087dfabSPatrick Steuer brct %r0,.Loop_4x 243*b087dfabSPatrick Steuer 244*b087dfabSPatrick Steuer VAF XD0,XD0,CTR 245*b087dfabSPatrick Steuer 246*b087dfabSPatrick Steuer VMRHF XT0,XA0,XA1 # transpose data 247*b087dfabSPatrick Steuer VMRHF XT1,XA2,XA3 248*b087dfabSPatrick Steuer VMRLF XT2,XA0,XA1 249*b087dfabSPatrick Steuer VMRLF XT3,XA2,XA3 250*b087dfabSPatrick Steuer VPDI XA0,XT0,XT1,0b0000 251*b087dfabSPatrick Steuer VPDI XA1,XT0,XT1,0b0101 252*b087dfabSPatrick Steuer VPDI XA2,XT2,XT3,0b0000 253*b087dfabSPatrick Steuer VPDI XA3,XT2,XT3,0b0101 254*b087dfabSPatrick Steuer 255*b087dfabSPatrick Steuer VMRHF XT0,XB0,XB1 256*b087dfabSPatrick Steuer VMRHF XT1,XB2,XB3 257*b087dfabSPatrick Steuer VMRLF XT2,XB0,XB1 258*b087dfabSPatrick Steuer VMRLF XT3,XB2,XB3 259*b087dfabSPatrick Steuer VPDI XB0,XT0,XT1,0b0000 260*b087dfabSPatrick Steuer VPDI XB1,XT0,XT1,0b0101 261*b087dfabSPatrick Steuer VPDI XB2,XT2,XT3,0b0000 262*b087dfabSPatrick Steuer VPDI XB3,XT2,XT3,0b0101 263*b087dfabSPatrick Steuer 264*b087dfabSPatrick Steuer VMRHF XT0,XC0,XC1 265*b087dfabSPatrick Steuer VMRHF XT1,XC2,XC3 266*b087dfabSPatrick Steuer VMRLF XT2,XC0,XC1 267*b087dfabSPatrick Steuer VMRLF XT3,XC2,XC3 268*b087dfabSPatrick Steuer VPDI XC0,XT0,XT1,0b0000 269*b087dfabSPatrick Steuer VPDI XC1,XT0,XT1,0b0101 270*b087dfabSPatrick Steuer VPDI XC2,XT2,XT3,0b0000 271*b087dfabSPatrick Steuer VPDI XC3,XT2,XT3,0b0101 272*b087dfabSPatrick Steuer 273*b087dfabSPatrick Steuer VMRHF XT0,XD0,XD1 274*b087dfabSPatrick Steuer VMRHF XT1,XD2,XD3 275*b087dfabSPatrick Steuer VMRLF XT2,XD0,XD1 276*b087dfabSPatrick Steuer VMRLF XT3,XD2,XD3 277*b087dfabSPatrick Steuer VPDI XD0,XT0,XT1,0b0000 278*b087dfabSPatrick Steuer VPDI XD1,XT0,XT1,0b0101 279*b087dfabSPatrick Steuer VPDI XD2,XT2,XT3,0b0000 280*b087dfabSPatrick Steuer VPDI XD3,XT2,XT3,0b0101 281*b087dfabSPatrick Steuer 282*b087dfabSPatrick Steuer VAF XA0,XA0,K0 283*b087dfabSPatrick Steuer VAF XB0,XB0,K1 284*b087dfabSPatrick Steuer VAF XC0,XC0,K2 285*b087dfabSPatrick Steuer VAF XD0,XD0,K3 286*b087dfabSPatrick Steuer 287*b087dfabSPatrick Steuer VPERM XA0,XA0,XA0,BEPERM 288*b087dfabSPatrick Steuer VPERM XB0,XB0,XB0,BEPERM 289*b087dfabSPatrick Steuer VPERM XC0,XC0,XC0,BEPERM 290*b087dfabSPatrick Steuer VPERM XD0,XD0,XD0,BEPERM 291*b087dfabSPatrick Steuer 292*b087dfabSPatrick Steuer VLM XT0,XT3,0,INP,0 293*b087dfabSPatrick Steuer 294*b087dfabSPatrick Steuer VX XT0,XT0,XA0 295*b087dfabSPatrick Steuer VX XT1,XT1,XB0 296*b087dfabSPatrick Steuer VX XT2,XT2,XC0 297*b087dfabSPatrick Steuer VX XT3,XT3,XD0 298*b087dfabSPatrick Steuer 299*b087dfabSPatrick Steuer VSTM XT0,XT3,0,OUT,0 300*b087dfabSPatrick Steuer 301*b087dfabSPatrick Steuer la INP,0x40(INP) 302*b087dfabSPatrick Steuer la OUT,0x40(OUT) 303*b087dfabSPatrick Steuer aghi LEN,-0x40 304*b087dfabSPatrick Steuer 305*b087dfabSPatrick Steuer VAF XA0,XA1,K0 306*b087dfabSPatrick Steuer VAF XB0,XB1,K1 307*b087dfabSPatrick Steuer VAF XC0,XC1,K2 308*b087dfabSPatrick Steuer VAF XD0,XD1,K3 309*b087dfabSPatrick Steuer 310*b087dfabSPatrick Steuer VPERM XA0,XA0,XA0,BEPERM 311*b087dfabSPatrick Steuer VPERM XB0,XB0,XB0,BEPERM 312*b087dfabSPatrick Steuer VPERM XC0,XC0,XC0,BEPERM 313*b087dfabSPatrick Steuer VPERM XD0,XD0,XD0,BEPERM 314*b087dfabSPatrick Steuer 315*b087dfabSPatrick Steuer clgfi LEN,0x40 316*b087dfabSPatrick Steuer jl .Ltail_4x 317*b087dfabSPatrick Steuer 318*b087dfabSPatrick Steuer VLM XT0,XT3,0,INP,0 319*b087dfabSPatrick Steuer 320*b087dfabSPatrick Steuer VX XT0,XT0,XA0 321*b087dfabSPatrick Steuer VX XT1,XT1,XB0 322*b087dfabSPatrick Steuer VX XT2,XT2,XC0 323*b087dfabSPatrick Steuer VX XT3,XT3,XD0 324*b087dfabSPatrick Steuer 325*b087dfabSPatrick Steuer VSTM XT0,XT3,0,OUT,0 326*b087dfabSPatrick Steuer 327*b087dfabSPatrick Steuer la INP,0x40(INP) 328*b087dfabSPatrick Steuer la OUT,0x40(OUT) 329*b087dfabSPatrick Steuer aghi LEN,-0x40 330*b087dfabSPatrick Steuer je .Ldone_4x 331*b087dfabSPatrick Steuer 332*b087dfabSPatrick Steuer VAF XA0,XA2,K0 333*b087dfabSPatrick Steuer VAF XB0,XB2,K1 334*b087dfabSPatrick Steuer VAF XC0,XC2,K2 335*b087dfabSPatrick Steuer VAF XD0,XD2,K3 336*b087dfabSPatrick Steuer 337*b087dfabSPatrick Steuer VPERM XA0,XA0,XA0,BEPERM 338*b087dfabSPatrick Steuer VPERM XB0,XB0,XB0,BEPERM 339*b087dfabSPatrick Steuer VPERM XC0,XC0,XC0,BEPERM 340*b087dfabSPatrick Steuer VPERM XD0,XD0,XD0,BEPERM 341*b087dfabSPatrick Steuer 342*b087dfabSPatrick Steuer clgfi LEN,0x40 343*b087dfabSPatrick Steuer jl .Ltail_4x 344*b087dfabSPatrick Steuer 345*b087dfabSPatrick Steuer VLM XT0,XT3,0,INP,0 346*b087dfabSPatrick Steuer 347*b087dfabSPatrick Steuer VX XT0,XT0,XA0 348*b087dfabSPatrick Steuer VX XT1,XT1,XB0 349*b087dfabSPatrick Steuer VX XT2,XT2,XC0 350*b087dfabSPatrick Steuer VX XT3,XT3,XD0 351*b087dfabSPatrick Steuer 352*b087dfabSPatrick Steuer VSTM XT0,XT3,0,OUT,0 353*b087dfabSPatrick Steuer 354*b087dfabSPatrick Steuer la INP,0x40(INP) 355*b087dfabSPatrick Steuer la OUT,0x40(OUT) 356*b087dfabSPatrick Steuer aghi LEN,-0x40 357*b087dfabSPatrick Steuer je .Ldone_4x 358*b087dfabSPatrick Steuer 359*b087dfabSPatrick Steuer VAF XA0,XA3,K0 360*b087dfabSPatrick Steuer VAF XB0,XB3,K1 361*b087dfabSPatrick Steuer VAF XC0,XC3,K2 362*b087dfabSPatrick Steuer VAF XD0,XD3,K3 363*b087dfabSPatrick Steuer 364*b087dfabSPatrick Steuer VPERM XA0,XA0,XA0,BEPERM 365*b087dfabSPatrick Steuer VPERM XB0,XB0,XB0,BEPERM 366*b087dfabSPatrick Steuer VPERM XC0,XC0,XC0,BEPERM 367*b087dfabSPatrick Steuer VPERM XD0,XD0,XD0,BEPERM 368*b087dfabSPatrick Steuer 369*b087dfabSPatrick Steuer clgfi LEN,0x40 370*b087dfabSPatrick Steuer jl .Ltail_4x 371*b087dfabSPatrick Steuer 372*b087dfabSPatrick Steuer VLM XT0,XT3,0,INP,0 373*b087dfabSPatrick Steuer 374*b087dfabSPatrick Steuer VX XT0,XT0,XA0 375*b087dfabSPatrick Steuer VX XT1,XT1,XB0 376*b087dfabSPatrick Steuer VX XT2,XT2,XC0 377*b087dfabSPatrick Steuer VX XT3,XT3,XD0 378*b087dfabSPatrick Steuer 379*b087dfabSPatrick Steuer VSTM XT0,XT3,0,OUT,0 380*b087dfabSPatrick Steuer 381*b087dfabSPatrick Steuer.Ldone_4x: 382*b087dfabSPatrick Steuer lmg %r6,%r7,6*8(SP) 383*b087dfabSPatrick Steuer BR_EX %r14 384*b087dfabSPatrick Steuer 385*b087dfabSPatrick Steuer.Ltail_4x: 386*b087dfabSPatrick Steuer VLR XT0,XC0 387*b087dfabSPatrick Steuer VLR XT1,XD0 388*b087dfabSPatrick Steuer 389*b087dfabSPatrick Steuer VST XA0,8*8+0x00,,SP 390*b087dfabSPatrick Steuer VST XB0,8*8+0x10,,SP 391*b087dfabSPatrick Steuer VST XT0,8*8+0x20,,SP 392*b087dfabSPatrick Steuer VST XT1,8*8+0x30,,SP 393*b087dfabSPatrick Steuer 394*b087dfabSPatrick Steuer lghi %r1,0 395*b087dfabSPatrick Steuer 396*b087dfabSPatrick Steuer.Loop_tail_4x: 397*b087dfabSPatrick Steuer llgc %r5,0(%r1,INP) 398*b087dfabSPatrick Steuer llgc %r6,8*8(%r1,SP) 399*b087dfabSPatrick Steuer xr %r6,%r5 400*b087dfabSPatrick Steuer stc %r6,0(%r1,OUT) 401*b087dfabSPatrick Steuer la %r1,1(%r1) 402*b087dfabSPatrick Steuer brct LEN,.Loop_tail_4x 403*b087dfabSPatrick Steuer 404*b087dfabSPatrick Steuer lmg %r6,%r7,6*8(SP) 405*b087dfabSPatrick Steuer BR_EX %r14 406*b087dfabSPatrick SteuerENDPROC(chacha20_vx_4x) 407*b087dfabSPatrick Steuer 408*b087dfabSPatrick Steuer#undef OUT 409*b087dfabSPatrick Steuer#undef INP 410*b087dfabSPatrick Steuer#undef LEN 411*b087dfabSPatrick Steuer#undef KEY 412*b087dfabSPatrick Steuer#undef COUNTER 413*b087dfabSPatrick Steuer 414*b087dfabSPatrick Steuer#undef BEPERM 415*b087dfabSPatrick Steuer 416*b087dfabSPatrick Steuer#undef K0 417*b087dfabSPatrick Steuer#undef K1 418*b087dfabSPatrick Steuer#undef K2 419*b087dfabSPatrick Steuer#undef K3 420*b087dfabSPatrick Steuer 421*b087dfabSPatrick Steuer 422*b087dfabSPatrick Steuer############################################################################# 423*b087dfabSPatrick Steuer# void chacha20_vx(u8 *out, counst u8 *inp, size_t len, 424*b087dfabSPatrick Steuer# counst u32 *key, const u32 *counter) 425*b087dfabSPatrick Steuer 426*b087dfabSPatrick Steuer#define OUT %r2 427*b087dfabSPatrick Steuer#define INP %r3 428*b087dfabSPatrick Steuer#define LEN %r4 429*b087dfabSPatrick Steuer#define KEY %r5 430*b087dfabSPatrick Steuer#define COUNTER %r6 431*b087dfabSPatrick Steuer 432*b087dfabSPatrick Steuer#define BEPERM %v31 433*b087dfabSPatrick Steuer 434*b087dfabSPatrick Steuer#define K0 %v27 435*b087dfabSPatrick Steuer#define K1 %v24 436*b087dfabSPatrick Steuer#define K2 %v25 437*b087dfabSPatrick Steuer#define K3 %v26 438*b087dfabSPatrick Steuer 439*b087dfabSPatrick Steuer#define A0 %v0 440*b087dfabSPatrick Steuer#define B0 %v1 441*b087dfabSPatrick Steuer#define C0 %v2 442*b087dfabSPatrick Steuer#define D0 %v3 443*b087dfabSPatrick Steuer 444*b087dfabSPatrick Steuer#define A1 %v4 445*b087dfabSPatrick Steuer#define B1 %v5 446*b087dfabSPatrick Steuer#define C1 %v6 447*b087dfabSPatrick Steuer#define D1 %v7 448*b087dfabSPatrick Steuer 449*b087dfabSPatrick Steuer#define A2 %v8 450*b087dfabSPatrick Steuer#define B2 %v9 451*b087dfabSPatrick Steuer#define C2 %v10 452*b087dfabSPatrick Steuer#define D2 %v11 453*b087dfabSPatrick Steuer 454*b087dfabSPatrick Steuer#define A3 %v12 455*b087dfabSPatrick Steuer#define B3 %v13 456*b087dfabSPatrick Steuer#define C3 %v14 457*b087dfabSPatrick Steuer#define D3 %v15 458*b087dfabSPatrick Steuer 459*b087dfabSPatrick Steuer#define A4 %v16 460*b087dfabSPatrick Steuer#define B4 %v17 461*b087dfabSPatrick Steuer#define C4 %v18 462*b087dfabSPatrick Steuer#define D4 %v19 463*b087dfabSPatrick Steuer 464*b087dfabSPatrick Steuer#define A5 %v20 465*b087dfabSPatrick Steuer#define B5 %v21 466*b087dfabSPatrick Steuer#define C5 %v22 467*b087dfabSPatrick Steuer#define D5 %v23 468*b087dfabSPatrick Steuer 469*b087dfabSPatrick Steuer#define T0 %v27 470*b087dfabSPatrick Steuer#define T1 %v28 471*b087dfabSPatrick Steuer#define T2 %v29 472*b087dfabSPatrick Steuer#define T3 %v30 473*b087dfabSPatrick Steuer 474*b087dfabSPatrick SteuerENTRY(chacha20_vx) 475*b087dfabSPatrick Steuer clgfi LEN,256 476*b087dfabSPatrick Steuer jle chacha20_vx_4x 477*b087dfabSPatrick Steuer stmg %r6,%r7,6*8(SP) 478*b087dfabSPatrick Steuer 479*b087dfabSPatrick Steuer lghi %r1,-FRAME 480*b087dfabSPatrick Steuer lgr %r0,SP 481*b087dfabSPatrick Steuer la SP,0(%r1,SP) 482*b087dfabSPatrick Steuer stg %r0,0(SP) # back-chain 483*b087dfabSPatrick Steuer 484*b087dfabSPatrick Steuer larl %r7,.Lsigma 485*b087dfabSPatrick Steuer lhi %r0,10 486*b087dfabSPatrick Steuer 487*b087dfabSPatrick Steuer VLM K1,K2,0,KEY,0 # load key 488*b087dfabSPatrick Steuer VL K3,0,,COUNTER # load counter 489*b087dfabSPatrick Steuer 490*b087dfabSPatrick Steuer VLM K0,BEPERM,0,%r7,4 # load sigma, increments, ... 491*b087dfabSPatrick Steuer 492*b087dfabSPatrick Steuer.Loop_outer_vx: 493*b087dfabSPatrick Steuer VLR A0,K0 494*b087dfabSPatrick Steuer VLR B0,K1 495*b087dfabSPatrick Steuer VLR A1,K0 496*b087dfabSPatrick Steuer VLR B1,K1 497*b087dfabSPatrick Steuer VLR A2,K0 498*b087dfabSPatrick Steuer VLR B2,K1 499*b087dfabSPatrick Steuer VLR A3,K0 500*b087dfabSPatrick Steuer VLR B3,K1 501*b087dfabSPatrick Steuer VLR A4,K0 502*b087dfabSPatrick Steuer VLR B4,K1 503*b087dfabSPatrick Steuer VLR A5,K0 504*b087dfabSPatrick Steuer VLR B5,K1 505*b087dfabSPatrick Steuer 506*b087dfabSPatrick Steuer VLR D0,K3 507*b087dfabSPatrick Steuer VAF D1,K3,T1 # K[3]+1 508*b087dfabSPatrick Steuer VAF D2,K3,T2 # K[3]+2 509*b087dfabSPatrick Steuer VAF D3,K3,T3 # K[3]+3 510*b087dfabSPatrick Steuer VAF D4,D2,T2 # K[3]+4 511*b087dfabSPatrick Steuer VAF D5,D2,T3 # K[3]+5 512*b087dfabSPatrick Steuer 513*b087dfabSPatrick Steuer VLR C0,K2 514*b087dfabSPatrick Steuer VLR C1,K2 515*b087dfabSPatrick Steuer VLR C2,K2 516*b087dfabSPatrick Steuer VLR C3,K2 517*b087dfabSPatrick Steuer VLR C4,K2 518*b087dfabSPatrick Steuer VLR C5,K2 519*b087dfabSPatrick Steuer 520*b087dfabSPatrick Steuer VLR T1,D1 521*b087dfabSPatrick Steuer VLR T2,D2 522*b087dfabSPatrick Steuer VLR T3,D3 523*b087dfabSPatrick Steuer 524*b087dfabSPatrick Steuer.Loop_vx: 525*b087dfabSPatrick Steuer VAF A0,A0,B0 526*b087dfabSPatrick Steuer VAF A1,A1,B1 527*b087dfabSPatrick Steuer VAF A2,A2,B2 528*b087dfabSPatrick Steuer VAF A3,A3,B3 529*b087dfabSPatrick Steuer VAF A4,A4,B4 530*b087dfabSPatrick Steuer VAF A5,A5,B5 531*b087dfabSPatrick Steuer VX D0,D0,A0 532*b087dfabSPatrick Steuer VX D1,D1,A1 533*b087dfabSPatrick Steuer VX D2,D2,A2 534*b087dfabSPatrick Steuer VX D3,D3,A3 535*b087dfabSPatrick Steuer VX D4,D4,A4 536*b087dfabSPatrick Steuer VX D5,D5,A5 537*b087dfabSPatrick Steuer VERLLF D0,D0,16 538*b087dfabSPatrick Steuer VERLLF D1,D1,16 539*b087dfabSPatrick Steuer VERLLF D2,D2,16 540*b087dfabSPatrick Steuer VERLLF D3,D3,16 541*b087dfabSPatrick Steuer VERLLF D4,D4,16 542*b087dfabSPatrick Steuer VERLLF D5,D5,16 543*b087dfabSPatrick Steuer 544*b087dfabSPatrick Steuer VAF C0,C0,D0 545*b087dfabSPatrick Steuer VAF C1,C1,D1 546*b087dfabSPatrick Steuer VAF C2,C2,D2 547*b087dfabSPatrick Steuer VAF C3,C3,D3 548*b087dfabSPatrick Steuer VAF C4,C4,D4 549*b087dfabSPatrick Steuer VAF C5,C5,D5 550*b087dfabSPatrick Steuer VX B0,B0,C0 551*b087dfabSPatrick Steuer VX B1,B1,C1 552*b087dfabSPatrick Steuer VX B2,B2,C2 553*b087dfabSPatrick Steuer VX B3,B3,C3 554*b087dfabSPatrick Steuer VX B4,B4,C4 555*b087dfabSPatrick Steuer VX B5,B5,C5 556*b087dfabSPatrick Steuer VERLLF B0,B0,12 557*b087dfabSPatrick Steuer VERLLF B1,B1,12 558*b087dfabSPatrick Steuer VERLLF B2,B2,12 559*b087dfabSPatrick Steuer VERLLF B3,B3,12 560*b087dfabSPatrick Steuer VERLLF B4,B4,12 561*b087dfabSPatrick Steuer VERLLF B5,B5,12 562*b087dfabSPatrick Steuer 563*b087dfabSPatrick Steuer VAF A0,A0,B0 564*b087dfabSPatrick Steuer VAF A1,A1,B1 565*b087dfabSPatrick Steuer VAF A2,A2,B2 566*b087dfabSPatrick Steuer VAF A3,A3,B3 567*b087dfabSPatrick Steuer VAF A4,A4,B4 568*b087dfabSPatrick Steuer VAF A5,A5,B5 569*b087dfabSPatrick Steuer VX D0,D0,A0 570*b087dfabSPatrick Steuer VX D1,D1,A1 571*b087dfabSPatrick Steuer VX D2,D2,A2 572*b087dfabSPatrick Steuer VX D3,D3,A3 573*b087dfabSPatrick Steuer VX D4,D4,A4 574*b087dfabSPatrick Steuer VX D5,D5,A5 575*b087dfabSPatrick Steuer VERLLF D0,D0,8 576*b087dfabSPatrick Steuer VERLLF D1,D1,8 577*b087dfabSPatrick Steuer VERLLF D2,D2,8 578*b087dfabSPatrick Steuer VERLLF D3,D3,8 579*b087dfabSPatrick Steuer VERLLF D4,D4,8 580*b087dfabSPatrick Steuer VERLLF D5,D5,8 581*b087dfabSPatrick Steuer 582*b087dfabSPatrick Steuer VAF C0,C0,D0 583*b087dfabSPatrick Steuer VAF C1,C1,D1 584*b087dfabSPatrick Steuer VAF C2,C2,D2 585*b087dfabSPatrick Steuer VAF C3,C3,D3 586*b087dfabSPatrick Steuer VAF C4,C4,D4 587*b087dfabSPatrick Steuer VAF C5,C5,D5 588*b087dfabSPatrick Steuer VX B0,B0,C0 589*b087dfabSPatrick Steuer VX B1,B1,C1 590*b087dfabSPatrick Steuer VX B2,B2,C2 591*b087dfabSPatrick Steuer VX B3,B3,C3 592*b087dfabSPatrick Steuer VX B4,B4,C4 593*b087dfabSPatrick Steuer VX B5,B5,C5 594*b087dfabSPatrick Steuer VERLLF B0,B0,7 595*b087dfabSPatrick Steuer VERLLF B1,B1,7 596*b087dfabSPatrick Steuer VERLLF B2,B2,7 597*b087dfabSPatrick Steuer VERLLF B3,B3,7 598*b087dfabSPatrick Steuer VERLLF B4,B4,7 599*b087dfabSPatrick Steuer VERLLF B5,B5,7 600*b087dfabSPatrick Steuer 601*b087dfabSPatrick Steuer VSLDB C0,C0,C0,8 602*b087dfabSPatrick Steuer VSLDB C1,C1,C1,8 603*b087dfabSPatrick Steuer VSLDB C2,C2,C2,8 604*b087dfabSPatrick Steuer VSLDB C3,C3,C3,8 605*b087dfabSPatrick Steuer VSLDB C4,C4,C4,8 606*b087dfabSPatrick Steuer VSLDB C5,C5,C5,8 607*b087dfabSPatrick Steuer VSLDB B0,B0,B0,4 608*b087dfabSPatrick Steuer VSLDB B1,B1,B1,4 609*b087dfabSPatrick Steuer VSLDB B2,B2,B2,4 610*b087dfabSPatrick Steuer VSLDB B3,B3,B3,4 611*b087dfabSPatrick Steuer VSLDB B4,B4,B4,4 612*b087dfabSPatrick Steuer VSLDB B5,B5,B5,4 613*b087dfabSPatrick Steuer VSLDB D0,D0,D0,12 614*b087dfabSPatrick Steuer VSLDB D1,D1,D1,12 615*b087dfabSPatrick Steuer VSLDB D2,D2,D2,12 616*b087dfabSPatrick Steuer VSLDB D3,D3,D3,12 617*b087dfabSPatrick Steuer VSLDB D4,D4,D4,12 618*b087dfabSPatrick Steuer VSLDB D5,D5,D5,12 619*b087dfabSPatrick Steuer 620*b087dfabSPatrick Steuer VAF A0,A0,B0 621*b087dfabSPatrick Steuer VAF A1,A1,B1 622*b087dfabSPatrick Steuer VAF A2,A2,B2 623*b087dfabSPatrick Steuer VAF A3,A3,B3 624*b087dfabSPatrick Steuer VAF A4,A4,B4 625*b087dfabSPatrick Steuer VAF A5,A5,B5 626*b087dfabSPatrick Steuer VX D0,D0,A0 627*b087dfabSPatrick Steuer VX D1,D1,A1 628*b087dfabSPatrick Steuer VX D2,D2,A2 629*b087dfabSPatrick Steuer VX D3,D3,A3 630*b087dfabSPatrick Steuer VX D4,D4,A4 631*b087dfabSPatrick Steuer VX D5,D5,A5 632*b087dfabSPatrick Steuer VERLLF D0,D0,16 633*b087dfabSPatrick Steuer VERLLF D1,D1,16 634*b087dfabSPatrick Steuer VERLLF D2,D2,16 635*b087dfabSPatrick Steuer VERLLF D3,D3,16 636*b087dfabSPatrick Steuer VERLLF D4,D4,16 637*b087dfabSPatrick Steuer VERLLF D5,D5,16 638*b087dfabSPatrick Steuer 639*b087dfabSPatrick Steuer VAF C0,C0,D0 640*b087dfabSPatrick Steuer VAF C1,C1,D1 641*b087dfabSPatrick Steuer VAF C2,C2,D2 642*b087dfabSPatrick Steuer VAF C3,C3,D3 643*b087dfabSPatrick Steuer VAF C4,C4,D4 644*b087dfabSPatrick Steuer VAF C5,C5,D5 645*b087dfabSPatrick Steuer VX B0,B0,C0 646*b087dfabSPatrick Steuer VX B1,B1,C1 647*b087dfabSPatrick Steuer VX B2,B2,C2 648*b087dfabSPatrick Steuer VX B3,B3,C3 649*b087dfabSPatrick Steuer VX B4,B4,C4 650*b087dfabSPatrick Steuer VX B5,B5,C5 651*b087dfabSPatrick Steuer VERLLF B0,B0,12 652*b087dfabSPatrick Steuer VERLLF B1,B1,12 653*b087dfabSPatrick Steuer VERLLF B2,B2,12 654*b087dfabSPatrick Steuer VERLLF B3,B3,12 655*b087dfabSPatrick Steuer VERLLF B4,B4,12 656*b087dfabSPatrick Steuer VERLLF B5,B5,12 657*b087dfabSPatrick Steuer 658*b087dfabSPatrick Steuer VAF A0,A0,B0 659*b087dfabSPatrick Steuer VAF A1,A1,B1 660*b087dfabSPatrick Steuer VAF A2,A2,B2 661*b087dfabSPatrick Steuer VAF A3,A3,B3 662*b087dfabSPatrick Steuer VAF A4,A4,B4 663*b087dfabSPatrick Steuer VAF A5,A5,B5 664*b087dfabSPatrick Steuer VX D0,D0,A0 665*b087dfabSPatrick Steuer VX D1,D1,A1 666*b087dfabSPatrick Steuer VX D2,D2,A2 667*b087dfabSPatrick Steuer VX D3,D3,A3 668*b087dfabSPatrick Steuer VX D4,D4,A4 669*b087dfabSPatrick Steuer VX D5,D5,A5 670*b087dfabSPatrick Steuer VERLLF D0,D0,8 671*b087dfabSPatrick Steuer VERLLF D1,D1,8 672*b087dfabSPatrick Steuer VERLLF D2,D2,8 673*b087dfabSPatrick Steuer VERLLF D3,D3,8 674*b087dfabSPatrick Steuer VERLLF D4,D4,8 675*b087dfabSPatrick Steuer VERLLF D5,D5,8 676*b087dfabSPatrick Steuer 677*b087dfabSPatrick Steuer VAF C0,C0,D0 678*b087dfabSPatrick Steuer VAF C1,C1,D1 679*b087dfabSPatrick Steuer VAF C2,C2,D2 680*b087dfabSPatrick Steuer VAF C3,C3,D3 681*b087dfabSPatrick Steuer VAF C4,C4,D4 682*b087dfabSPatrick Steuer VAF C5,C5,D5 683*b087dfabSPatrick Steuer VX B0,B0,C0 684*b087dfabSPatrick Steuer VX B1,B1,C1 685*b087dfabSPatrick Steuer VX B2,B2,C2 686*b087dfabSPatrick Steuer VX B3,B3,C3 687*b087dfabSPatrick Steuer VX B4,B4,C4 688*b087dfabSPatrick Steuer VX B5,B5,C5 689*b087dfabSPatrick Steuer VERLLF B0,B0,7 690*b087dfabSPatrick Steuer VERLLF B1,B1,7 691*b087dfabSPatrick Steuer VERLLF B2,B2,7 692*b087dfabSPatrick Steuer VERLLF B3,B3,7 693*b087dfabSPatrick Steuer VERLLF B4,B4,7 694*b087dfabSPatrick Steuer VERLLF B5,B5,7 695*b087dfabSPatrick Steuer 696*b087dfabSPatrick Steuer VSLDB C0,C0,C0,8 697*b087dfabSPatrick Steuer VSLDB C1,C1,C1,8 698*b087dfabSPatrick Steuer VSLDB C2,C2,C2,8 699*b087dfabSPatrick Steuer VSLDB C3,C3,C3,8 700*b087dfabSPatrick Steuer VSLDB C4,C4,C4,8 701*b087dfabSPatrick Steuer VSLDB C5,C5,C5,8 702*b087dfabSPatrick Steuer VSLDB B0,B0,B0,12 703*b087dfabSPatrick Steuer VSLDB B1,B1,B1,12 704*b087dfabSPatrick Steuer VSLDB B2,B2,B2,12 705*b087dfabSPatrick Steuer VSLDB B3,B3,B3,12 706*b087dfabSPatrick Steuer VSLDB B4,B4,B4,12 707*b087dfabSPatrick Steuer VSLDB B5,B5,B5,12 708*b087dfabSPatrick Steuer VSLDB D0,D0,D0,4 709*b087dfabSPatrick Steuer VSLDB D1,D1,D1,4 710*b087dfabSPatrick Steuer VSLDB D2,D2,D2,4 711*b087dfabSPatrick Steuer VSLDB D3,D3,D3,4 712*b087dfabSPatrick Steuer VSLDB D4,D4,D4,4 713*b087dfabSPatrick Steuer VSLDB D5,D5,D5,4 714*b087dfabSPatrick Steuer brct %r0,.Loop_vx 715*b087dfabSPatrick Steuer 716*b087dfabSPatrick Steuer VAF A0,A0,K0 717*b087dfabSPatrick Steuer VAF B0,B0,K1 718*b087dfabSPatrick Steuer VAF C0,C0,K2 719*b087dfabSPatrick Steuer VAF D0,D0,K3 720*b087dfabSPatrick Steuer VAF A1,A1,K0 721*b087dfabSPatrick Steuer VAF D1,D1,T1 # +K[3]+1 722*b087dfabSPatrick Steuer 723*b087dfabSPatrick Steuer VPERM A0,A0,A0,BEPERM 724*b087dfabSPatrick Steuer VPERM B0,B0,B0,BEPERM 725*b087dfabSPatrick Steuer VPERM C0,C0,C0,BEPERM 726*b087dfabSPatrick Steuer VPERM D0,D0,D0,BEPERM 727*b087dfabSPatrick Steuer 728*b087dfabSPatrick Steuer clgfi LEN,0x40 729*b087dfabSPatrick Steuer jl .Ltail_vx 730*b087dfabSPatrick Steuer 731*b087dfabSPatrick Steuer VAF D2,D2,T2 # +K[3]+2 732*b087dfabSPatrick Steuer VAF D3,D3,T3 # +K[3]+3 733*b087dfabSPatrick Steuer VLM T0,T3,0,INP,0 734*b087dfabSPatrick Steuer 735*b087dfabSPatrick Steuer VX A0,A0,T0 736*b087dfabSPatrick Steuer VX B0,B0,T1 737*b087dfabSPatrick Steuer VX C0,C0,T2 738*b087dfabSPatrick Steuer VX D0,D0,T3 739*b087dfabSPatrick Steuer 740*b087dfabSPatrick Steuer VLM K0,T3,0,%r7,4 # re-load sigma and increments 741*b087dfabSPatrick Steuer 742*b087dfabSPatrick Steuer VSTM A0,D0,0,OUT,0 743*b087dfabSPatrick Steuer 744*b087dfabSPatrick Steuer la INP,0x40(INP) 745*b087dfabSPatrick Steuer la OUT,0x40(OUT) 746*b087dfabSPatrick Steuer aghi LEN,-0x40 747*b087dfabSPatrick Steuer je .Ldone_vx 748*b087dfabSPatrick Steuer 749*b087dfabSPatrick Steuer VAF B1,B1,K1 750*b087dfabSPatrick Steuer VAF C1,C1,K2 751*b087dfabSPatrick Steuer 752*b087dfabSPatrick Steuer VPERM A0,A1,A1,BEPERM 753*b087dfabSPatrick Steuer VPERM B0,B1,B1,BEPERM 754*b087dfabSPatrick Steuer VPERM C0,C1,C1,BEPERM 755*b087dfabSPatrick Steuer VPERM D0,D1,D1,BEPERM 756*b087dfabSPatrick Steuer 757*b087dfabSPatrick Steuer clgfi LEN,0x40 758*b087dfabSPatrick Steuer jl .Ltail_vx 759*b087dfabSPatrick Steuer 760*b087dfabSPatrick Steuer VLM A1,D1,0,INP,0 761*b087dfabSPatrick Steuer 762*b087dfabSPatrick Steuer VX A0,A0,A1 763*b087dfabSPatrick Steuer VX B0,B0,B1 764*b087dfabSPatrick Steuer VX C0,C0,C1 765*b087dfabSPatrick Steuer VX D0,D0,D1 766*b087dfabSPatrick Steuer 767*b087dfabSPatrick Steuer VSTM A0,D0,0,OUT,0 768*b087dfabSPatrick Steuer 769*b087dfabSPatrick Steuer la INP,0x40(INP) 770*b087dfabSPatrick Steuer la OUT,0x40(OUT) 771*b087dfabSPatrick Steuer aghi LEN,-0x40 772*b087dfabSPatrick Steuer je .Ldone_vx 773*b087dfabSPatrick Steuer 774*b087dfabSPatrick Steuer VAF A2,A2,K0 775*b087dfabSPatrick Steuer VAF B2,B2,K1 776*b087dfabSPatrick Steuer VAF C2,C2,K2 777*b087dfabSPatrick Steuer 778*b087dfabSPatrick Steuer VPERM A0,A2,A2,BEPERM 779*b087dfabSPatrick Steuer VPERM B0,B2,B2,BEPERM 780*b087dfabSPatrick Steuer VPERM C0,C2,C2,BEPERM 781*b087dfabSPatrick Steuer VPERM D0,D2,D2,BEPERM 782*b087dfabSPatrick Steuer 783*b087dfabSPatrick Steuer clgfi LEN,0x40 784*b087dfabSPatrick Steuer jl .Ltail_vx 785*b087dfabSPatrick Steuer 786*b087dfabSPatrick Steuer VLM A1,D1,0,INP,0 787*b087dfabSPatrick Steuer 788*b087dfabSPatrick Steuer VX A0,A0,A1 789*b087dfabSPatrick Steuer VX B0,B0,B1 790*b087dfabSPatrick Steuer VX C0,C0,C1 791*b087dfabSPatrick Steuer VX D0,D0,D1 792*b087dfabSPatrick Steuer 793*b087dfabSPatrick Steuer VSTM A0,D0,0,OUT,0 794*b087dfabSPatrick Steuer 795*b087dfabSPatrick Steuer la INP,0x40(INP) 796*b087dfabSPatrick Steuer la OUT,0x40(OUT) 797*b087dfabSPatrick Steuer aghi LEN,-0x40 798*b087dfabSPatrick Steuer je .Ldone_vx 799*b087dfabSPatrick Steuer 800*b087dfabSPatrick Steuer VAF A3,A3,K0 801*b087dfabSPatrick Steuer VAF B3,B3,K1 802*b087dfabSPatrick Steuer VAF C3,C3,K2 803*b087dfabSPatrick Steuer VAF D2,K3,T3 # K[3]+3 804*b087dfabSPatrick Steuer 805*b087dfabSPatrick Steuer VPERM A0,A3,A3,BEPERM 806*b087dfabSPatrick Steuer VPERM B0,B3,B3,BEPERM 807*b087dfabSPatrick Steuer VPERM C0,C3,C3,BEPERM 808*b087dfabSPatrick Steuer VPERM D0,D3,D3,BEPERM 809*b087dfabSPatrick Steuer 810*b087dfabSPatrick Steuer clgfi LEN,0x40 811*b087dfabSPatrick Steuer jl .Ltail_vx 812*b087dfabSPatrick Steuer 813*b087dfabSPatrick Steuer VAF D3,D2,T1 # K[3]+4 814*b087dfabSPatrick Steuer VLM A1,D1,0,INP,0 815*b087dfabSPatrick Steuer 816*b087dfabSPatrick Steuer VX A0,A0,A1 817*b087dfabSPatrick Steuer VX B0,B0,B1 818*b087dfabSPatrick Steuer VX C0,C0,C1 819*b087dfabSPatrick Steuer VX D0,D0,D1 820*b087dfabSPatrick Steuer 821*b087dfabSPatrick Steuer VSTM A0,D0,0,OUT,0 822*b087dfabSPatrick Steuer 823*b087dfabSPatrick Steuer la INP,0x40(INP) 824*b087dfabSPatrick Steuer la OUT,0x40(OUT) 825*b087dfabSPatrick Steuer aghi LEN,-0x40 826*b087dfabSPatrick Steuer je .Ldone_vx 827*b087dfabSPatrick Steuer 828*b087dfabSPatrick Steuer VAF A4,A4,K0 829*b087dfabSPatrick Steuer VAF B4,B4,K1 830*b087dfabSPatrick Steuer VAF C4,C4,K2 831*b087dfabSPatrick Steuer VAF D4,D4,D3 # +K[3]+4 832*b087dfabSPatrick Steuer VAF D3,D3,T1 # K[3]+5 833*b087dfabSPatrick Steuer VAF K3,D2,T3 # K[3]+=6 834*b087dfabSPatrick Steuer 835*b087dfabSPatrick Steuer VPERM A0,A4,A4,BEPERM 836*b087dfabSPatrick Steuer VPERM B0,B4,B4,BEPERM 837*b087dfabSPatrick Steuer VPERM C0,C4,C4,BEPERM 838*b087dfabSPatrick Steuer VPERM D0,D4,D4,BEPERM 839*b087dfabSPatrick Steuer 840*b087dfabSPatrick Steuer clgfi LEN,0x40 841*b087dfabSPatrick Steuer jl .Ltail_vx 842*b087dfabSPatrick Steuer 843*b087dfabSPatrick Steuer VLM A1,D1,0,INP,0 844*b087dfabSPatrick Steuer 845*b087dfabSPatrick Steuer VX A0,A0,A1 846*b087dfabSPatrick Steuer VX B0,B0,B1 847*b087dfabSPatrick Steuer VX C0,C0,C1 848*b087dfabSPatrick Steuer VX D0,D0,D1 849*b087dfabSPatrick Steuer 850*b087dfabSPatrick Steuer VSTM A0,D0,0,OUT,0 851*b087dfabSPatrick Steuer 852*b087dfabSPatrick Steuer la INP,0x40(INP) 853*b087dfabSPatrick Steuer la OUT,0x40(OUT) 854*b087dfabSPatrick Steuer aghi LEN,-0x40 855*b087dfabSPatrick Steuer je .Ldone_vx 856*b087dfabSPatrick Steuer 857*b087dfabSPatrick Steuer VAF A5,A5,K0 858*b087dfabSPatrick Steuer VAF B5,B5,K1 859*b087dfabSPatrick Steuer VAF C5,C5,K2 860*b087dfabSPatrick Steuer VAF D5,D5,D3 # +K[3]+5 861*b087dfabSPatrick Steuer 862*b087dfabSPatrick Steuer VPERM A0,A5,A5,BEPERM 863*b087dfabSPatrick Steuer VPERM B0,B5,B5,BEPERM 864*b087dfabSPatrick Steuer VPERM C0,C5,C5,BEPERM 865*b087dfabSPatrick Steuer VPERM D0,D5,D5,BEPERM 866*b087dfabSPatrick Steuer 867*b087dfabSPatrick Steuer clgfi LEN,0x40 868*b087dfabSPatrick Steuer jl .Ltail_vx 869*b087dfabSPatrick Steuer 870*b087dfabSPatrick Steuer VLM A1,D1,0,INP,0 871*b087dfabSPatrick Steuer 872*b087dfabSPatrick Steuer VX A0,A0,A1 873*b087dfabSPatrick Steuer VX B0,B0,B1 874*b087dfabSPatrick Steuer VX C0,C0,C1 875*b087dfabSPatrick Steuer VX D0,D0,D1 876*b087dfabSPatrick Steuer 877*b087dfabSPatrick Steuer VSTM A0,D0,0,OUT,0 878*b087dfabSPatrick Steuer 879*b087dfabSPatrick Steuer la INP,0x40(INP) 880*b087dfabSPatrick Steuer la OUT,0x40(OUT) 881*b087dfabSPatrick Steuer lhi %r0,10 882*b087dfabSPatrick Steuer aghi LEN,-0x40 883*b087dfabSPatrick Steuer jne .Loop_outer_vx 884*b087dfabSPatrick Steuer 885*b087dfabSPatrick Steuer.Ldone_vx: 886*b087dfabSPatrick Steuer lmg %r6,%r7,FRAME+6*8(SP) 887*b087dfabSPatrick Steuer la SP,FRAME(SP) 888*b087dfabSPatrick Steuer BR_EX %r14 889*b087dfabSPatrick Steuer 890*b087dfabSPatrick Steuer.Ltail_vx: 891*b087dfabSPatrick Steuer VSTM A0,D0,8*8,SP,3 892*b087dfabSPatrick Steuer lghi %r1,0 893*b087dfabSPatrick Steuer 894*b087dfabSPatrick Steuer.Loop_tail_vx: 895*b087dfabSPatrick Steuer llgc %r5,0(%r1,INP) 896*b087dfabSPatrick Steuer llgc %r6,8*8(%r1,SP) 897*b087dfabSPatrick Steuer xr %r6,%r5 898*b087dfabSPatrick Steuer stc %r6,0(%r1,OUT) 899*b087dfabSPatrick Steuer la %r1,1(%r1) 900*b087dfabSPatrick Steuer brct LEN,.Loop_tail_vx 901*b087dfabSPatrick Steuer 902*b087dfabSPatrick Steuer lmg %r6,%r7,FRAME+6*8(SP) 903*b087dfabSPatrick Steuer la SP,FRAME(SP) 904*b087dfabSPatrick Steuer BR_EX %r14 905*b087dfabSPatrick SteuerENDPROC(chacha20_vx) 906*b087dfabSPatrick Steuer 907*b087dfabSPatrick Steuer.previous 908