Home | History | Annotate | Line # | Download | only in riscv64
      1 #include <machine/asm.h>
      2 .text
      3 .text
      4 .p2align 3
      5 .globl ossl_hwsm3_block_data_order_zvksh
      6 .type ossl_hwsm3_block_data_order_zvksh,@function
      7 ossl_hwsm3_block_data_order_zvksh:
      8     .word 3440668759
      9 
     10     # Load initial state of hash context (c->A-H).
     11     .word 33906695
     12     .word 1241817175
     13 
     14 L_sm3_loop:
     15     # Copy the previous state to v2.
     16     # It will be XOR'ed with the current state at the end of the round.
     17     .word 1577058647
     18 
     19     # Load the 64B block in 2x32B chunks.
     20     .word 33940231 # v6 := {w7, ..., w0}
     21     addi a1, a1, 32
     22 
     23     .word 33940487 # v8 := {w15, ..., w8}
     24     addi a1, a1, 32
     25 
     26     addi a2, a2, -1
     27 
     28     # As vsm3c consumes only w0, w1, w4, w5 we need to slide the input
     29     # 2 elements down so we process elements w2, w3, w6, w7
     30     # This will be repeated for each odd round.
     31     .word 1046557271 # v4 := {X, X, w7, ..., w2}
     32 
     33     .word 2925535351
     34     .word 2923470967
     35 
     36     # Prepare a vector with {w11, ..., w4}
     37     .word 1044460119 # v4 := {X, X, X, X, w7, ..., w4}
     38     .word 981611095   # v4 := {w11, w10, w9, w8, w7, w6, w5, w4}
     39 
     40     .word 2923503735
     41     .word 1044460119 # v4 := {X, X, w11, w10, w9, w8, w7, w6}
     42     .word 2923536503
     43 
     44     .word 2927763575
     45     .word 1048654423 # v4 := {X, X, w15, w14, w13, w12, w11, w10}
     46     .word 2923602039
     47 
     48     .word 2189632375   # v6 := {w23, w22, w21, w20, w19, w18, w17, w16}
     49 
     50     # Prepare a register with {w19, w18, w17, w16, w15, w14, w13, w12}
     51     .word 1044460119 # v4 := {X, X, X, X, w15, w14, w13, w12}
     52     .word 979513943   # v4 := {w19, w18, w17, w16, w15, w14, w13, w12}
     53 
     54     .word 2923634807
     55     .word 1044460119 # v4 := {X, X, w19, w18, w17, w16, w15, w14}
     56     .word 2923667575
     57 
     58     .word 2925797495
     59     .word 1046557271 # v4 := {X, X, w23, w22, w21, w20, w19, w18}
     60     .word 2923733111
     61 
     62     .word 2187601015   # v8 := {w31, w30, w29, w28, w27, w26, w25, w24}
     63 
     64     # Prepare a register with {w27, w26, w25, w24, w23, w22, w21, w20}
     65     .word 1044460119 # v4 := {X, X, X, X, w23, w22, w21, w20}
     66     .word 981611095   # v4 := {w27, w26, w25, w24, w23, w22, w21, w20}
     67 
     68     .word 2923765879
     69     .word 1044460119 # v4 := {X, X, w27, w26, w25, w24, w23, w22}
     70     .word 2923798647
     71 
     72     .word 2928025719
     73     .word 1048654423 # v4 := {x, X, w31, w30, w29, w28, w27, w26}
     74     .word 2923864183
     75 
     76     .word 2189632375   # v6 := {w32, w33, w34, w35, w36, w37, w38, w39}
     77 
     78     # Prepare a register with {w35, w34, w33, w32, w31, w30, w29, w28}
     79     .word 1044460119 # v4 := {X, X, X, X, w31, w30, w29, w28}
     80     .word 979513943   # v4 := {w35, w34, w33, w32, w31, w30, w29, w28}
     81 
     82     .word 2923896951
     83     .word 1044460119 # v4 := {X, X, w35, w34, w33, w32, w31, w30}
     84     .word 2923929719
     85 
     86     .word 2926059639
     87     .word 1046557271 # v4 := {X, X, w39, w38, w37, w36, w35, w34}
     88     .word 2923995255
     89 
     90     .word 2187601015   # v8 := {w47, w46, w45, w44, w43, w42, w41, w40}
     91 
     92     # Prepare a register with {w43, w42, w41, w40, w39, w38, w37, w36}
     93     .word 1044460119 # v4 := {X, X, X, X, w39, w38, w37, w36}
     94     .word 981611095   # v4 := {w43, w42, w41, w40, w39, w38, w37, w36}
     95 
     96     .word 2924028023
     97     .word 1044460119 # v4 := {X, X, w43, w42, w41, w40, w39, w38}
     98     .word 2924060791
     99 
    100     .word 2928287863
    101     .word 1048654423 # v4 := {X, X, w47, w46, w45, w44, w43, w42}
    102     .word 2924126327
    103 
    104     .word 2189632375   # v6 := {w55, w54, w53, w52, w51, w50, w49, w48}
    105 
    106     # Prepare a register with {w51, w50, w49, w48, w47, w46, w45, w44}
    107     .word 1044460119 # v4 := {X, X, X, X, w47, w46, w45, w44}
    108     .word 979513943   # v4 := {w51, w50, w49, w48, w47, w46, w45, w44}
    109 
    110     .word 2924159095
    111     .word 1044460119 # v4 := {X, X, w51, w50, w49, w48, w47, w46}
    112     .word 2924191863
    113 
    114     .word 2926321783
    115     .word 1046557271 # v4 := {X, X, w55, w54, w53, w52, w51, w50}
    116     .word 2924257399
    117 
    118     .word 2187601015   # v8 := {w63, w62, w61, w60, w59, w58, w57, w56}
    119 
    120     # Prepare a register with {w59, w58, w57, w56, w55, w54, w53, w52}
    121     .word 1044460119 # v4 := {X, X, X, X, w55, w54, w53, w52}
    122     .word 981611095   # v4 := {w59, w58, w57, w56, w55, w54, w53, w52}
    123 
    124     .word 2924290167
    125     .word 1044460119 # v4 := {X, X, w59, w58, w57, w56, w55, w54}
    126     .word 2924322935
    127 
    128     .word 2928550007
    129     .word 1048654423 # v4 := {X, X, w63, w62, w61, w60, w59, w58}
    130     .word 2924388471
    131 
    132     .word 2189632375   # v6 := {w71, w70, w69, w68, w67, w66, w65, w64}
    133 
    134     # Prepare a register with {w67, w66, w65, w64, w63, w62, w61, w60}
    135     .word 1044460119 # v4 := {X, X, X, X, w63, w62, w61, w60}
    136     .word 979513943   # v4 := {w67, w66, w65, w64, w63, w62, w61, w60}
    137 
    138     .word 2924421239
    139     .word 1044460119 # v4 := {X, X, w67, w66, w65, w64, w63, w62}
    140     .word 2924454007
    141 
    142     # XOR in the previous state.
    143     .word 771817559
    144 
    145     bnez a2, L_sm3_loop     # Check if there are any more block to process
    146 L_sm3_end:
    147     .word 1241817175
    148     .word 33906727
    149     ret
    150 
    151 .size ossl_hwsm3_block_data_order_zvksh,.-ossl_hwsm3_block_data_order_zvksh
    152