qbe

Internal scc patchset buffer for QBE
Log | Files | Refs | README | LICENSE

_chacha20.ssa (5555B)


      1 export function $chacha20_rounds_qbe(l %out, l %in) {
      2 @start
      3 	%t0 =w loadw %in
      4 	%in =l add %in, 4
      5 	%t1 =w loadw %in
      6 	%in =l add %in, 4
      7 	%t2 =w loadw %in
      8 	%in =l add %in, 4
      9 	%t3 =w loadw %in
     10 	%in =l add %in, 4
     11 	%t4 =w loadw %in
     12 	%in =l add %in, 4
     13 	%t5 =w loadw %in
     14 	%in =l add %in, 4
     15 	%t6 =w loadw %in
     16 	%in =l add %in, 4
     17 	%t7 =w loadw %in
     18 	%in =l add %in, 4
     19 	%t8 =w loadw %in
     20 	%in =l add %in, 4
     21 	%t9 =w loadw %in
     22 	%in =l add %in, 4
     23 	%t10 =w loadw %in
     24 	%in =l add %in, 4
     25 	%t11 =w loadw %in
     26 	%in =l add %in, 4
     27 	%t12 =w loadw %in
     28 	%in =l add %in, 4
     29 	%t13 =w loadw %in
     30 	%in =l add %in, 4
     31 	%t14 =w loadw %in
     32 	%in =l add %in, 4
     33 	%t15 =w loadw %in
     34 	%in =l add %in, 4
     35 	%counter =w copy 10
     36 @loop
     37 	%t0 =w add %t0, %t4
     38 	%t12 =w xor %t12, %t0
     39 	%rotl32_a =w shl %t12, 16
     40 	%rotl32_b =w shr %t12, 16
     41 	%t12 =w xor %rotl32_a, %rotl32_b
     42 	%t8 =w add %t8, %t12
     43 	%t4 =w xor %t4, %t8
     44 	%rotl32_a =w shl %t4, 12
     45 	%rotl32_b =w shr %t4, 20
     46 	%t4 =w xor %rotl32_a, %rotl32_b
     47 	%t0 =w add %t0, %t4
     48 	%t12 =w xor %t12, %t0
     49 	%rotl32_a =w shl %t12, 8
     50 	%rotl32_b =w shr %t12, 24
     51 	%t12 =w xor %rotl32_a, %rotl32_b
     52 	%t8 =w add %t8, %t12
     53 	%t4 =w xor %t4, %t8
     54 	%rotl32_a =w shl %t4, 7
     55 	%rotl32_b =w shr %t4, 25
     56 	%t4 =w xor %rotl32_a, %rotl32_b
     57 	%t1 =w add %t1, %t5
     58 	%t13 =w xor %t13, %t1
     59 	%rotl32_a =w shl %t13, 16
     60 	%rotl32_b =w shr %t13, 16
     61 	%t13 =w xor %rotl32_a, %rotl32_b
     62 	%t9 =w add %t9, %t13
     63 	%t5 =w xor %t5, %t9
     64 	%rotl32_a =w shl %t5, 12
     65 	%rotl32_b =w shr %t5, 20
     66 	%t5 =w xor %rotl32_a, %rotl32_b
     67 	%t1 =w add %t1, %t5
     68 	%t13 =w xor %t13, %t1
     69 	%rotl32_a =w shl %t13, 8
     70 	%rotl32_b =w shr %t13, 24
     71 	%t13 =w xor %rotl32_a, %rotl32_b
     72 	%t9 =w add %t9, %t13
     73 	%t5 =w xor %t5, %t9
     74 	%rotl32_a =w shl %t5, 7
     75 	%rotl32_b =w shr %t5, 25
     76 	%t5 =w xor %rotl32_a, %rotl32_b
     77 	%t2 =w add %t2, %t6
     78 	%t14 =w xor %t14, %t2
     79 	%rotl32_a =w shl %t14, 16
     80 	%rotl32_b =w shr %t14, 16
     81 	%t14 =w xor %rotl32_a, %rotl32_b
     82 	%t10 =w add %t10, %t14
     83 	%t6 =w xor %t6, %t10
     84 	%rotl32_a =w shl %t6, 12
     85 	%rotl32_b =w shr %t6, 20
     86 	%t6 =w xor %rotl32_a, %rotl32_b
     87 	%t2 =w add %t2, %t6
     88 	%t14 =w xor %t14, %t2
     89 	%rotl32_a =w shl %t14, 8
     90 	%rotl32_b =w shr %t14, 24
     91 	%t14 =w xor %rotl32_a, %rotl32_b
     92 	%t10 =w add %t10, %t14
     93 	%t6 =w xor %t6, %t10
     94 	%rotl32_a =w shl %t6, 7
     95 	%rotl32_b =w shr %t6, 25
     96 	%t6 =w xor %rotl32_a, %rotl32_b
     97 	%t3 =w add %t3, %t7
     98 	%t15 =w xor %t15, %t3
     99 	%rotl32_a =w shl %t15, 16
    100 	%rotl32_b =w shr %t15, 16
    101 	%t15 =w xor %rotl32_a, %rotl32_b
    102 	%t11 =w add %t11, %t15
    103 	%t7 =w xor %t7, %t11
    104 	%rotl32_a =w shl %t7, 12
    105 	%rotl32_b =w shr %t7, 20
    106 	%t7 =w xor %rotl32_a, %rotl32_b
    107 	%t3 =w add %t3, %t7
    108 	%t15 =w xor %t15, %t3
    109 	%rotl32_a =w shl %t15, 8
    110 	%rotl32_b =w shr %t15, 24
    111 	%t15 =w xor %rotl32_a, %rotl32_b
    112 	%t11 =w add %t11, %t15
    113 	%t7 =w xor %t7, %t11
    114 	%rotl32_a =w shl %t7, 7
    115 	%rotl32_b =w shr %t7, 25
    116 	%t7 =w xor %rotl32_a, %rotl32_b
    117 	%t0 =w add %t0, %t5
    118 	%t15 =w xor %t15, %t0
    119 	%rotl32_a =w shl %t15, 16
    120 	%rotl32_b =w shr %t15, 16
    121 	%t15 =w xor %rotl32_a, %rotl32_b
    122 	%t10 =w add %t10, %t15
    123 	%t5 =w xor %t5, %t10
    124 	%rotl32_a =w shl %t5, 12
    125 	%rotl32_b =w shr %t5, 20
    126 	%t5 =w xor %rotl32_a, %rotl32_b
    127 	%t0 =w add %t0, %t5
    128 	%t15 =w xor %t15, %t0
    129 	%rotl32_a =w shl %t15, 8
    130 	%rotl32_b =w shr %t15, 24
    131 	%t15 =w xor %rotl32_a, %rotl32_b
    132 	%t10 =w add %t10, %t15
    133 	%t5 =w xor %t5, %t10
    134 	%rotl32_a =w shl %t5, 7
    135 	%rotl32_b =w shr %t5, 25
    136 	%t5 =w xor %rotl32_a, %rotl32_b
    137 	%t1 =w add %t1, %t6
    138 	%t12 =w xor %t12, %t1
    139 	%rotl32_a =w shl %t12, 16
    140 	%rotl32_b =w shr %t12, 16
    141 	%t12 =w xor %rotl32_a, %rotl32_b
    142 	%t11 =w add %t11, %t12
    143 	%t6 =w xor %t6, %t11
    144 	%rotl32_a =w shl %t6, 12
    145 	%rotl32_b =w shr %t6, 20
    146 	%t6 =w xor %rotl32_a, %rotl32_b
    147 	%t1 =w add %t1, %t6
    148 	%t12 =w xor %t12, %t1
    149 	%rotl32_a =w shl %t12, 8
    150 	%rotl32_b =w shr %t12, 24
    151 	%t12 =w xor %rotl32_a, %rotl32_b
    152 	%t11 =w add %t11, %t12
    153 	%t6 =w xor %t6, %t11
    154 	%rotl32_a =w shl %t6, 7
    155 	%rotl32_b =w shr %t6, 25
    156 	%t6 =w xor %rotl32_a, %rotl32_b
    157 	%t2 =w add %t2, %t7
    158 	%t13 =w xor %t13, %t2
    159 	%rotl32_a =w shl %t13, 16
    160 	%rotl32_b =w shr %t13, 16
    161 	%t13 =w xor %rotl32_a, %rotl32_b
    162 	%t8 =w add %t8, %t13
    163 	%t7 =w xor %t7, %t8
    164 	%rotl32_a =w shl %t7, 12
    165 	%rotl32_b =w shr %t7, 20
    166 	%t7 =w xor %rotl32_a, %rotl32_b
    167 	%t2 =w add %t2, %t7
    168 	%t13 =w xor %t13, %t2
    169 	%rotl32_a =w shl %t13, 8
    170 	%rotl32_b =w shr %t13, 24
    171 	%t13 =w xor %rotl32_a, %rotl32_b
    172 	%t8 =w add %t8, %t13
    173 	%t7 =w xor %t7, %t8
    174 	%rotl32_a =w shl %t7, 7
    175 	%rotl32_b =w shr %t7, 25
    176 	%t7 =w xor %rotl32_a, %rotl32_b
    177 	%t3 =w add %t3, %t4
    178 	%t14 =w xor %t14, %t3
    179 	%rotl32_a =w shl %t14, 16
    180 	%rotl32_b =w shr %t14, 16
    181 	%t14 =w xor %rotl32_a, %rotl32_b
    182 	%t9 =w add %t9, %t14
    183 	%t4 =w xor %t4, %t9
    184 	%rotl32_a =w shl %t4, 12
    185 	%rotl32_b =w shr %t4, 20
    186 	%t4 =w xor %rotl32_a, %rotl32_b
    187 	%t3 =w add %t3, %t4
    188 	%t14 =w xor %t14, %t3
    189 	%rotl32_a =w shl %t14, 8
    190 	%rotl32_b =w shr %t14, 24
    191 	%t14 =w xor %rotl32_a, %rotl32_b
    192 	%t9 =w add %t9, %t14
    193 	%t4 =w xor %t4, %t9
    194 	%rotl32_a =w shl %t4, 7
    195 	%rotl32_b =w shr %t4, 25
    196 	%t4 =w xor %rotl32_a, %rotl32_b
    197 	%counter =w sub %counter, 10
    198 	jnz %counter, @loop, @done
    199 @done
    200 	storew %t0, %out
    201 	%out =l add %out, 4
    202 	storew %t1, %out
    203 	%out =l add %out, 4
    204 	storew %t2, %out
    205 	%out =l add %out, 4
    206 	storew %t3, %out
    207 	%out =l add %out, 4
    208 	storew %t4, %out
    209 	%out =l add %out, 4
    210 	storew %t5, %out
    211 	%out =l add %out, 4
    212 	storew %t6, %out
    213 	%out =l add %out, 4
    214 	storew %t7, %out
    215 	%out =l add %out, 4
    216 	storew %t8, %out
    217 	%out =l add %out, 4
    218 	storew %t9, %out
    219 	%out =l add %out, 4
    220 	storew %t10, %out
    221 	%out =l add %out, 4
    222 	storew %t11, %out
    223 	%out =l add %out, 4
    224 	storew %t12, %out
    225 	%out =l add %out, 4
    226 	storew %t13, %out
    227 	%out =l add %out, 4
    228 	storew %t14, %out
    229 	%out =l add %out, 4
    230 	storew %t15, %out
    231 	%out =l add %out, 4
    232 	ret
    233 }