1 1.1 christos #include <machine/asm.h> 2 1.1 christos .text 3 1.1 christos .p2align 3 4 1.1 christos .globl gcm_init_rv64i_zbc 5 1.1 christos .type gcm_init_rv64i_zbc,@function 6 1.1 christos gcm_init_rv64i_zbc: 7 1.1 christos ld a2,0(a1) 8 1.1 christos ld a3,8(a1) 9 1.1 christos la t2, Lbrev8_const 10 1.1 christos 11 1.1 christos ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA 12 1.1 christos slli t1, a2, 1 13 1.1 christos and t1, t1, t0 14 1.1 christos and a2, a2, t0 15 1.1 christos srli a2, a2, 1 16 1.1 christos or a2, t1, a2 17 1.1 christos 18 1.1 christos ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC 19 1.1 christos slli t1, a2, 2 20 1.1 christos and t1, t1, t0 21 1.1 christos and a2, a2, t0 22 1.1 christos srli a2, a2, 2 23 1.1 christos or a2, t1, a2 24 1.1 christos 25 1.1 christos ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0 26 1.1 christos slli t1, a2, 4 27 1.1 christos and t1, t1, t0 28 1.1 christos and a2, a2, t0 29 1.1 christos srli a2, a2, 4 30 1.1 christos or a2, t1, a2 31 1.1 christos 32 1.1 christos la t2, Lbrev8_const 33 1.1 christos 34 1.1 christos ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA 35 1.1 christos slli t1, a3, 1 36 1.1 christos and t1, t1, t0 37 1.1 christos and a3, a3, t0 38 1.1 christos srli a3, a3, 1 39 1.1 christos or a3, t1, a3 40 1.1 christos 41 1.1 christos ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC 42 1.1 christos slli t1, a3, 2 43 1.1 christos and t1, t1, t0 44 1.1 christos and a3, a3, t0 45 1.1 christos srli a3, a3, 2 46 1.1 christos or a3, t1, a3 47 1.1 christos 48 1.1 christos ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0 49 1.1 christos slli t1, a3, 4 50 1.1 christos and t1, t1, t0 51 1.1 christos and a3, a3, t0 52 1.1 christos srli a3, a3, 4 53 1.1 christos or a3, t1, a3 54 1.1 christos 55 1.1 christos sb a2, 7(a0) 56 1.1 christos srli t0, a2, 8 57 1.1 christos sb t0, 6(a0) 58 1.1 christos srli t0, a2, 16 59 1.1 christos sb t0, 5(a0) 60 1.1 christos srli t0, a2, 24 61 1.1 christos sb t0, 4(a0) 62 1.1 christos srli t0, a2, 32 63 1.1 christos sb t0, 3(a0) 64 1.1 christos srli t0, a2, 40 65 1.1 christos sb t0, 2(a0) 66 1.1 christos srli t0, a2, 48 67 1.1 christos sb t0, 1(a0) 68 1.1 christos srli t0, a2, 56 69 1.1 christos sb t0, 0(a0) 70 1.1 christos 71 1.1 christos sb a3, 15(a0) 72 1.1 christos srli t0, a3, 8 73 1.1 christos sb t0, 14(a0) 74 1.1 christos srli t0, a3, 16 75 1.1 christos sb t0, 13(a0) 76 1.1 christos srli t0, a3, 24 77 1.1 christos sb t0, 12(a0) 78 1.1 christos srli t0, a3, 32 79 1.1 christos sb t0, 11(a0) 80 1.1 christos srli t0, a3, 40 81 1.1 christos sb t0, 10(a0) 82 1.1 christos srli t0, a3, 48 83 1.1 christos sb t0, 9(a0) 84 1.1 christos srli t0, a3, 56 85 1.1 christos sb t0, 8(a0) 86 1.1 christos 87 1.1 christos ret 88 1.1 christos .size gcm_init_rv64i_zbc,.-gcm_init_rv64i_zbc 89 1.1 christos .p2align 3 90 1.1 christos .globl gcm_init_rv64i_zbc__zbb 91 1.1 christos .type gcm_init_rv64i_zbc__zbb,@function 92 1.1 christos gcm_init_rv64i_zbc__zbb: 93 1.1 christos ld a2,0(a1) 94 1.1 christos ld a3,8(a1) 95 1.1 christos la t2, Lbrev8_const 96 1.1 christos 97 1.1 christos ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA 98 1.1 christos slli t1, a2, 1 99 1.1 christos and t1, t1, t0 100 1.1 christos and a2, a2, t0 101 1.1 christos srli a2, a2, 1 102 1.1 christos or a2, t1, a2 103 1.1 christos 104 1.1 christos ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC 105 1.1 christos slli t1, a2, 2 106 1.1 christos and t1, t1, t0 107 1.1 christos and a2, a2, t0 108 1.1 christos srli a2, a2, 2 109 1.1 christos or a2, t1, a2 110 1.1 christos 111 1.1 christos ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0 112 1.1 christos slli t1, a2, 4 113 1.1 christos and t1, t1, t0 114 1.1 christos and a2, a2, t0 115 1.1 christos srli a2, a2, 4 116 1.1 christos or a2, t1, a2 117 1.1 christos 118 1.1 christos la t2, Lbrev8_const 119 1.1 christos 120 1.1 christos ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA 121 1.1 christos slli t1, a3, 1 122 1.1 christos and t1, t1, t0 123 1.1 christos and a3, a3, t0 124 1.1 christos srli a3, a3, 1 125 1.1 christos or a3, t1, a3 126 1.1 christos 127 1.1 christos ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC 128 1.1 christos slli t1, a3, 2 129 1.1 christos and t1, t1, t0 130 1.1 christos and a3, a3, t0 131 1.1 christos srli a3, a3, 2 132 1.1 christos or a3, t1, a3 133 1.1 christos 134 1.1 christos ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0 135 1.1 christos slli t1, a3, 4 136 1.1 christos and t1, t1, t0 137 1.1 christos and a3, a3, t0 138 1.1 christos srli a3, a3, 4 139 1.1 christos or a3, t1, a3 140 1.1 christos 141 1.1 christos .word 1803965971 142 1.1 christos .word 1803998867 143 1.1 christos sd a2,0(a0) 144 1.1 christos sd a3,8(a0) 145 1.1 christos ret 146 1.1 christos .size gcm_init_rv64i_zbc__zbb,.-gcm_init_rv64i_zbc__zbb 147 1.1 christos .p2align 3 148 1.1 christos .globl gcm_init_rv64i_zbc__zbkb 149 1.1 christos .type gcm_init_rv64i_zbc__zbkb,@function 150 1.1 christos gcm_init_rv64i_zbc__zbkb: 151 1.1 christos ld t0,0(a1) 152 1.1 christos ld t1,8(a1) 153 1.1 christos .word 1752355475 154 1.1 christos .word 1752388371 155 1.1 christos .word 1803735699 156 1.1 christos .word 1803768595 157 1.1 christos sd t0,0(a0) 158 1.1 christos sd t1,8(a0) 159 1.1 christos ret 160 1.1 christos .size gcm_init_rv64i_zbc__zbkb,.-gcm_init_rv64i_zbc__zbkb 161 1.1 christos .p2align 3 162 1.1 christos .globl gcm_gmult_rv64i_zbc 163 1.1 christos .type gcm_gmult_rv64i_zbc,@function 164 1.1 christos gcm_gmult_rv64i_zbc: 165 1.1 christos # Load Xi and bit-reverse it 166 1.1 christos ld a4, 0(a0) 167 1.1 christos ld a5, 8(a0) 168 1.1 christos la t2, Lbrev8_const 169 1.1 christos 170 1.1 christos ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA 171 1.1 christos slli t1, a4, 1 172 1.1 christos and t1, t1, t0 173 1.1 christos and a4, a4, t0 174 1.1 christos srli a4, a4, 1 175 1.1 christos or a4, t1, a4 176 1.1 christos 177 1.1 christos ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC 178 1.1 christos slli t1, a4, 2 179 1.1 christos and t1, t1, t0 180 1.1 christos and a4, a4, t0 181 1.1 christos srli a4, a4, 2 182 1.1 christos or a4, t1, a4 183 1.1 christos 184 1.1 christos ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0 185 1.1 christos slli t1, a4, 4 186 1.1 christos and t1, t1, t0 187 1.1 christos and a4, a4, t0 188 1.1 christos srli a4, a4, 4 189 1.1 christos or a4, t1, a4 190 1.1 christos 191 1.1 christos la t2, Lbrev8_const 192 1.1 christos 193 1.1 christos ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA 194 1.1 christos slli t1, a5, 1 195 1.1 christos and t1, t1, t0 196 1.1 christos and a5, a5, t0 197 1.1 christos srli a5, a5, 1 198 1.1 christos or a5, t1, a5 199 1.1 christos 200 1.1 christos ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC 201 1.1 christos slli t1, a5, 2 202 1.1 christos and t1, t1, t0 203 1.1 christos and a5, a5, t0 204 1.1 christos srli a5, a5, 2 205 1.1 christos or a5, t1, a5 206 1.1 christos 207 1.1 christos ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0 208 1.1 christos slli t1, a5, 4 209 1.1 christos and t1, t1, t0 210 1.1 christos and a5, a5, t0 211 1.1 christos srli a5, a5, 4 212 1.1 christos or a5, t1, a5 213 1.1 christos 214 1.1 christos 215 1.1 christos # Load the key (already bit-reversed) 216 1.1 christos ld a6, 0(a1) 217 1.1 christos ld a7, 8(a1) 218 1.1 christos 219 1.1 christos # Load the reduction constant 220 1.1 christos la t6, Lpolymod 221 1.1 christos lbu t6, 0(t6) 222 1.1 christos 223 1.1 christos # Multiplication (without Karatsuba) 224 1.1 christos .word 186105395 225 1.1 christos .word 186094515 226 1.1 christos .word 186072883 227 1.1 christos .word 186061619 228 1.1 christos xor t2, t2, t5 229 1.1 christos .word 185057075 230 1.1 christos .word 185048755 231 1.1 christos xor t2, t2, t5 232 1.1 christos xor t1, t1, t4 233 1.1 christos .word 185024307 234 1.1 christos .word 185012915 235 1.1 christos xor t1, t1, t5 236 1.1 christos 237 1.1 christos # Reduction with clmul 238 1.1 christos .word 201211699 239 1.1 christos .word 201203379 240 1.1 christos xor t2, t2, t5 241 1.1 christos xor t1, t1, t4 242 1.1 christos .word 200523571 243 1.1 christos .word 200515251 244 1.1 christos xor a5, t1, t5 245 1.1 christos xor a4, t0, t4 246 1.1 christos 247 1.1 christos # Bit-reverse Xi back and store it 248 1.1 christos la t2, Lbrev8_const 249 1.1 christos 250 1.1 christos ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA 251 1.1 christos slli t1, a4, 1 252 1.1 christos and t1, t1, t0 253 1.1 christos and a4, a4, t0 254 1.1 christos srli a4, a4, 1 255 1.1 christos or a4, t1, a4 256 1.1 christos 257 1.1 christos ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC 258 1.1 christos slli t1, a4, 2 259 1.1 christos and t1, t1, t0 260 1.1 christos and a4, a4, t0 261 1.1 christos srli a4, a4, 2 262 1.1 christos or a4, t1, a4 263 1.1 christos 264 1.1 christos ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0 265 1.1 christos slli t1, a4, 4 266 1.1 christos and t1, t1, t0 267 1.1 christos and a4, a4, t0 268 1.1 christos srli a4, a4, 4 269 1.1 christos or a4, t1, a4 270 1.1 christos 271 1.1 christos la t2, Lbrev8_const 272 1.1 christos 273 1.1 christos ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA 274 1.1 christos slli t1, a5, 1 275 1.1 christos and t1, t1, t0 276 1.1 christos and a5, a5, t0 277 1.1 christos srli a5, a5, 1 278 1.1 christos or a5, t1, a5 279 1.1 christos 280 1.1 christos ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC 281 1.1 christos slli t1, a5, 2 282 1.1 christos and t1, t1, t0 283 1.1 christos and a5, a5, t0 284 1.1 christos srli a5, a5, 2 285 1.1 christos or a5, t1, a5 286 1.1 christos 287 1.1 christos ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0 288 1.1 christos slli t1, a5, 4 289 1.1 christos and t1, t1, t0 290 1.1 christos and a5, a5, t0 291 1.1 christos srli a5, a5, 4 292 1.1 christos or a5, t1, a5 293 1.1 christos 294 1.1 christos sd a4, 0(a0) 295 1.1 christos sd a5, 8(a0) 296 1.1 christos ret 297 1.1 christos .size gcm_gmult_rv64i_zbc,.-gcm_gmult_rv64i_zbc 298 1.1 christos .p2align 3 299 1.1 christos .globl gcm_gmult_rv64i_zbc__zbkb 300 1.1 christos .type gcm_gmult_rv64i_zbc__zbkb,@function 301 1.1 christos gcm_gmult_rv64i_zbc__zbkb: 302 1.1 christos # Load Xi and bit-reverse it 303 1.1 christos ld a4, 0(a0) 304 1.1 christos ld a5, 8(a0) 305 1.1 christos .word 1752651539 306 1.1 christos .word 1752684435 307 1.1 christos 308 1.1 christos # Load the key (already bit-reversed) 309 1.1 christos ld a6, 0(a1) 310 1.1 christos ld a7, 8(a1) 311 1.1 christos 312 1.1 christos # Load the reduction constant 313 1.1 christos la t6, Lpolymod 314 1.1 christos lbu t6, 0(t6) 315 1.1 christos 316 1.1 christos # Multiplication (without Karatsuba) 317 1.1 christos .word 186105395 318 1.1 christos .word 186094515 319 1.1 christos .word 186072883 320 1.1 christos .word 186061619 321 1.1 christos xor t2, t2, t5 322 1.1 christos .word 185057075 323 1.1 christos .word 185048755 324 1.1 christos xor t2, t2, t5 325 1.1 christos xor t1, t1, t4 326 1.1 christos .word 185024307 327 1.1 christos .word 185012915 328 1.1 christos xor t1, t1, t5 329 1.1 christos 330 1.1 christos # Reduction with clmul 331 1.1 christos .word 201211699 332 1.1 christos .word 201203379 333 1.1 christos xor t2, t2, t5 334 1.1 christos xor t1, t1, t4 335 1.1 christos .word 200523571 336 1.1 christos .word 200515251 337 1.1 christos xor a5, t1, t5 338 1.1 christos xor a4, t0, t4 339 1.1 christos 340 1.1 christos # Bit-reverse Xi back and store it 341 1.1 christos .word 1752651539 342 1.1 christos .word 1752684435 343 1.1 christos sd a4, 0(a0) 344 1.1 christos sd a5, 8(a0) 345 1.1 christos ret 346 1.1 christos .size gcm_gmult_rv64i_zbc__zbkb,.-gcm_gmult_rv64i_zbc__zbkb 347 1.1 christos .p2align 3 348 1.1 christos .globl gcm_ghash_rv64i_zbc 349 1.1 christos .type gcm_ghash_rv64i_zbc,@function 350 1.1 christos gcm_ghash_rv64i_zbc: 351 1.1 christos # Load Xi and bit-reverse it 352 1.1 christos ld a4, 0(a0) 353 1.1 christos ld a5, 8(a0) 354 1.1 christos la t2, Lbrev8_const 355 1.1 christos 356 1.1 christos ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA 357 1.1 christos slli t1, a4, 1 358 1.1 christos and t1, t1, t0 359 1.1 christos and a4, a4, t0 360 1.1 christos srli a4, a4, 1 361 1.1 christos or a4, t1, a4 362 1.1 christos 363 1.1 christos ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC 364 1.1 christos slli t1, a4, 2 365 1.1 christos and t1, t1, t0 366 1.1 christos and a4, a4, t0 367 1.1 christos srli a4, a4, 2 368 1.1 christos or a4, t1, a4 369 1.1 christos 370 1.1 christos ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0 371 1.1 christos slli t1, a4, 4 372 1.1 christos and t1, t1, t0 373 1.1 christos and a4, a4, t0 374 1.1 christos srli a4, a4, 4 375 1.1 christos or a4, t1, a4 376 1.1 christos 377 1.1 christos la t2, Lbrev8_const 378 1.1 christos 379 1.1 christos ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA 380 1.1 christos slli t1, a5, 1 381 1.1 christos and t1, t1, t0 382 1.1 christos and a5, a5, t0 383 1.1 christos srli a5, a5, 1 384 1.1 christos or a5, t1, a5 385 1.1 christos 386 1.1 christos ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC 387 1.1 christos slli t1, a5, 2 388 1.1 christos and t1, t1, t0 389 1.1 christos and a5, a5, t0 390 1.1 christos srli a5, a5, 2 391 1.1 christos or a5, t1, a5 392 1.1 christos 393 1.1 christos ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0 394 1.1 christos slli t1, a5, 4 395 1.1 christos and t1, t1, t0 396 1.1 christos and a5, a5, t0 397 1.1 christos srli a5, a5, 4 398 1.1 christos or a5, t1, a5 399 1.1 christos 400 1.1 christos 401 1.1 christos # Load the key (already bit-reversed) 402 1.1 christos ld a6, 0(a1) 403 1.1 christos ld a7, 8(a1) 404 1.1 christos 405 1.1 christos # Load the reduction constant 406 1.1 christos la t6, Lpolymod 407 1.1 christos lbu t6, 0(t6) 408 1.1 christos 409 1.1 christos Lstep: 410 1.1 christos # Load the input data, bit-reverse them, and XOR them with Xi 411 1.1 christos ld t4, 0(a2) 412 1.1 christos ld t5, 8(a2) 413 1.1 christos add a2, a2, 16 414 1.1 christos add a3, a3, -16 415 1.1 christos la t2, Lbrev8_const 416 1.1 christos 417 1.1 christos ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA 418 1.1 christos slli t1, t4, 1 419 1.1 christos and t1, t1, t0 420 1.1 christos and t4, t4, t0 421 1.1 christos srli t4, t4, 1 422 1.1 christos or t4, t1, t4 423 1.1 christos 424 1.1 christos ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC 425 1.1 christos slli t1, t4, 2 426 1.1 christos and t1, t1, t0 427 1.1 christos and t4, t4, t0 428 1.1 christos srli t4, t4, 2 429 1.1 christos or t4, t1, t4 430 1.1 christos 431 1.1 christos ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0 432 1.1 christos slli t1, t4, 4 433 1.1 christos and t1, t1, t0 434 1.1 christos and t4, t4, t0 435 1.1 christos srli t4, t4, 4 436 1.1 christos or t4, t1, t4 437 1.1 christos 438 1.1 christos la t2, Lbrev8_const 439 1.1 christos 440 1.1 christos ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA 441 1.1 christos slli t1, t5, 1 442 1.1 christos and t1, t1, t0 443 1.1 christos and t5, t5, t0 444 1.1 christos srli t5, t5, 1 445 1.1 christos or t5, t1, t5 446 1.1 christos 447 1.1 christos ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC 448 1.1 christos slli t1, t5, 2 449 1.1 christos and t1, t1, t0 450 1.1 christos and t5, t5, t0 451 1.1 christos srli t5, t5, 2 452 1.1 christos or t5, t1, t5 453 1.1 christos 454 1.1 christos ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0 455 1.1 christos slli t1, t5, 4 456 1.1 christos and t1, t1, t0 457 1.1 christos and t5, t5, t0 458 1.1 christos srli t5, t5, 4 459 1.1 christos or t5, t1, t5 460 1.1 christos 461 1.1 christos xor a4, a4, t4 462 1.1 christos xor a5, a5, t5 463 1.1 christos 464 1.1 christos # Multiplication (without Karatsuba) 465 1.1 christos .word 186105395 466 1.1 christos .word 186094515 467 1.1 christos .word 186072883 468 1.1 christos .word 186061619 469 1.1 christos xor t2, t2, t5 470 1.1 christos .word 185057075 471 1.1 christos .word 185048755 472 1.1 christos xor t2, t2, t5 473 1.1 christos xor t1, t1, t4 474 1.1 christos .word 185024307 475 1.1 christos .word 185012915 476 1.1 christos xor t1, t1, t5 477 1.1 christos 478 1.1 christos # Reduction with clmul 479 1.1 christos .word 201211699 480 1.1 christos .word 201203379 481 1.1 christos xor t2, t2, t5 482 1.1 christos xor t1, t1, t4 483 1.1 christos .word 200523571 484 1.1 christos .word 200515251 485 1.1 christos xor a5, t1, t5 486 1.1 christos xor a4, t0, t4 487 1.1 christos 488 1.1 christos # Iterate over all blocks 489 1.1 christos bnez a3, Lstep 490 1.1 christos 491 1.1 christos # Bit-reverse final Xi back and store it 492 1.1 christos la t2, Lbrev8_const 493 1.1 christos 494 1.1 christos ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA 495 1.1 christos slli t1, a4, 1 496 1.1 christos and t1, t1, t0 497 1.1 christos and a4, a4, t0 498 1.1 christos srli a4, a4, 1 499 1.1 christos or a4, t1, a4 500 1.1 christos 501 1.1 christos ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC 502 1.1 christos slli t1, a4, 2 503 1.1 christos and t1, t1, t0 504 1.1 christos and a4, a4, t0 505 1.1 christos srli a4, a4, 2 506 1.1 christos or a4, t1, a4 507 1.1 christos 508 1.1 christos ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0 509 1.1 christos slli t1, a4, 4 510 1.1 christos and t1, t1, t0 511 1.1 christos and a4, a4, t0 512 1.1 christos srli a4, a4, 4 513 1.1 christos or a4, t1, a4 514 1.1 christos 515 1.1 christos la t2, Lbrev8_const 516 1.1 christos 517 1.1 christos ld t0, 0(t2) # 0xAAAAAAAAAAAAAAAA 518 1.1 christos slli t1, a5, 1 519 1.1 christos and t1, t1, t0 520 1.1 christos and a5, a5, t0 521 1.1 christos srli a5, a5, 1 522 1.1 christos or a5, t1, a5 523 1.1 christos 524 1.1 christos ld t0, 8(t2) # 0xCCCCCCCCCCCCCCCC 525 1.1 christos slli t1, a5, 2 526 1.1 christos and t1, t1, t0 527 1.1 christos and a5, a5, t0 528 1.1 christos srli a5, a5, 2 529 1.1 christos or a5, t1, a5 530 1.1 christos 531 1.1 christos ld t0, 16(t2) # 0xF0F0F0F0F0F0F0F0 532 1.1 christos slli t1, a5, 4 533 1.1 christos and t1, t1, t0 534 1.1 christos and a5, a5, t0 535 1.1 christos srli a5, a5, 4 536 1.1 christos or a5, t1, a5 537 1.1 christos 538 1.1 christos sd a4, 0(a0) 539 1.1 christos sd a5, 8(a0) 540 1.1 christos ret 541 1.1 christos .size gcm_ghash_rv64i_zbc,.-gcm_ghash_rv64i_zbc 542 1.1 christos .p2align 3 543 1.1 christos .globl gcm_ghash_rv64i_zbc__zbkb 544 1.1 christos .type gcm_ghash_rv64i_zbc__zbkb,@function 545 1.1 christos gcm_ghash_rv64i_zbc__zbkb: 546 1.1 christos # Load Xi and bit-reverse it 547 1.1 christos ld a4, 0(a0) 548 1.1 christos ld a5, 8(a0) 549 1.1 christos .word 1752651539 550 1.1 christos .word 1752684435 551 1.1 christos 552 1.1 christos # Load the key (already bit-reversed) 553 1.1 christos ld a6, 0(a1) 554 1.1 christos ld a7, 8(a1) 555 1.1 christos 556 1.1 christos # Load the reduction constant 557 1.1 christos la t6, Lpolymod 558 1.1 christos lbu t6, 0(t6) 559 1.1 christos 560 1.1 christos Lstep_zkbk: 561 1.1 christos # Load the input data, bit-reverse them, and XOR them with Xi 562 1.1 christos ld t4, 0(a2) 563 1.1 christos ld t5, 8(a2) 564 1.1 christos add a2, a2, 16 565 1.1 christos add a3, a3, -16 566 1.1 christos .word 1753144979 567 1.1 christos .word 1753177875 568 1.1 christos xor a4, a4, t4 569 1.1 christos xor a5, a5, t5 570 1.1 christos 571 1.1 christos # Multiplication (without Karatsuba) 572 1.1 christos .word 186105395 573 1.1 christos .word 186094515 574 1.1 christos .word 186072883 575 1.1 christos .word 186061619 576 1.1 christos xor t2, t2, t5 577 1.1 christos .word 185057075 578 1.1 christos .word 185048755 579 1.1 christos xor t2, t2, t5 580 1.1 christos xor t1, t1, t4 581 1.1 christos .word 185024307 582 1.1 christos .word 185012915 583 1.1 christos xor t1, t1, t5 584 1.1 christos 585 1.1 christos # Reduction with clmul 586 1.1 christos .word 201211699 587 1.1 christos .word 201203379 588 1.1 christos xor t2, t2, t5 589 1.1 christos xor t1, t1, t4 590 1.1 christos .word 200523571 591 1.1 christos .word 200515251 592 1.1 christos xor a5, t1, t5 593 1.1 christos xor a4, t0, t4 594 1.1 christos 595 1.1 christos # Iterate over all blocks 596 1.1 christos bnez a3, Lstep_zkbk 597 1.1 christos 598 1.1 christos # Bit-reverse final Xi back and store it 599 1.1 christos .word 1752651539 600 1.1 christos .word 1752684435 601 1.1 christos sd a4, 0(a0) 602 1.1 christos sd a5, 8(a0) 603 1.1 christos ret 604 1.1 christos .size gcm_ghash_rv64i_zbc__zbkb,.-gcm_ghash_rv64i_zbc__zbkb 605 1.1 christos .p2align 3 606 1.1 christos Lbrev8_const: 607 1.1 christos .dword 0xAAAAAAAAAAAAAAAA 608 1.1 christos .dword 0xCCCCCCCCCCCCCCCC 609 1.1 christos .dword 0xF0F0F0F0F0F0F0F0 610 1.1 christos .size Lbrev8_const,.-Lbrev8_const 611 1.1 christos 612 1.1 christos Lpolymod: 613 1.1 christos .byte 0x87 614 1.1 christos .size Lpolymod,.-Lpolymod 615