Home | History | Annotate | Line # | Download | only in riscv64
      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