mldsa_gh 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +88 -0
  4. data/ext/mldsa_gh_native/extconf.rb +14 -0
  5. data/ext/mldsa_gh_native/mldsa_gh_native.c +222 -0
  6. data/ext/mldsa_gh_native/mldsa_gh_native_all.c +24 -0
  7. data/ext/mldsa_gh_native/mldsa_gh_native_all.h +26 -0
  8. data/ext/mldsa_gh_native/vendor/mldsa-native/BUILDING.md +108 -0
  9. data/ext/mldsa_gh_native/vendor/mldsa-native/LICENSE +305 -0
  10. data/ext/mldsa_gh_native/vendor/mldsa-native/README.md +247 -0
  11. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/README.md +23 -0
  12. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/mldsa_native.c +803 -0
  13. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/mldsa_native.h +956 -0
  14. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/mldsa_native_asm.S +830 -0
  15. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/mldsa_native_config.h +855 -0
  16. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/cbmc.h +233 -0
  17. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/common.h +301 -0
  18. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/context.h +152 -0
  19. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/ct.c +21 -0
  20. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/ct.h +373 -0
  21. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/debug.c +75 -0
  22. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/debug.h +125 -0
  23. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/fips202.c +270 -0
  24. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/fips202.h +224 -0
  25. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/fips202x4.c +187 -0
  26. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/fips202x4.h +125 -0
  27. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/keccakf1600.c +510 -0
  28. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/keccakf1600.h +110 -0
  29. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/auto.h +85 -0
  30. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/fips202_native_aarch64.h +69 -0
  31. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x1_scalar_aarch64_asm.S +378 -0
  32. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x1_v84a_aarch64_asm.S +207 -0
  33. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x2_v84a_aarch64_asm.S +262 -0
  34. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x4_v8a_scalar_hybrid_aarch64_asm.S +1080 -0
  35. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x4_v8a_v84a_scalar_hybrid_aarch64_asm.S +990 -0
  36. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccakf1600_round_constants.c +47 -0
  37. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x1_scalar.h +27 -0
  38. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x1_v84a.h +36 -0
  39. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x2_v84a.h +40 -0
  40. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x4_v8a_scalar.h +32 -0
  41. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x4_v8a_v84a_scalar.h +37 -0
  42. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/api.h +129 -0
  43. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/README.md +10 -0
  44. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/mve.h +67 -0
  45. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/fips202_native_armv81m.h +37 -0
  46. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccak_f1600_x4_mve.S +717 -0
  47. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccak_f1600_x4_mve.c +42 -0
  48. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccak_f1600_x4_state_extract_bytes_mve.S +334 -0
  49. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccak_f1600_x4_state_xor_bytes_mve.S +355 -0
  50. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccakf1600_round_constants.c +53 -0
  51. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/auto.h +35 -0
  52. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/keccak_f1600_x4_avx2.h +34 -0
  53. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/src/fips202_native_x86_64.h +45 -0
  54. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/src/keccak_f1600_x4_avx2_asm.S +488 -0
  55. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/src/keccakf1600_constants.c +52 -0
  56. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/meta.h +314 -0
  57. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/aarch64_zetas.c +248 -0
  58. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/arith_native_aarch64.h +367 -0
  59. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_intt_aarch64_asm.S +786 -0
  60. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_ntt_aarch64_asm.S +686 -0
  61. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_pointwise_montgomery_aarch64_asm.S +106 -0
  62. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_poly_caddq_aarch64_asm.S +69 -0
  63. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_poly_chknorm_aarch64_asm.S +76 -0
  64. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_poly_decompose_32_aarch64_asm.S +108 -0
  65. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_poly_decompose_88_aarch64_asm.S +108 -0
  66. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_poly_use_hint_32_aarch64_asm.S +125 -0
  67. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_poly_use_hint_88_aarch64_asm.S +133 -0
  68. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_polyvecl_pointwise_acc_montgomery_l4_aarch64_asm.S +157 -0
  69. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_polyvecl_pointwise_acc_montgomery_l5_aarch64_asm.S +173 -0
  70. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_polyvecl_pointwise_acc_montgomery_l7_aarch64_asm.S +205 -0
  71. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_polyz_unpack_17_aarch64_asm.S +103 -0
  72. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_polyz_unpack_19_aarch64_asm.S +100 -0
  73. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_rej_uniform_aarch64_asm.S +222 -0
  74. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_rej_uniform_eta2_aarch64_asm.S +170 -0
  75. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/mldsa_rej_uniform_eta4_aarch64_asm.S +163 -0
  76. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/polyz_unpack_table.c +52 -0
  77. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/rej_uniform_eta_table.c +547 -0
  78. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/aarch64/src/rej_uniform_table.c +63 -0
  79. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/api.h +617 -0
  80. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/meta.h +24 -0
  81. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/meta.h +323 -0
  82. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/arith_native_x86_64.h +330 -0
  83. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/consts.c +157 -0
  84. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/consts.h +27 -0
  85. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_intt_avx2_asm.S +2333 -0
  86. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_ntt_avx2_asm.S +2405 -0
  87. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_nttunpack_avx2_asm.S +254 -0
  88. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_pointwise_acc_l4_avx2_asm.S +173 -0
  89. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_pointwise_acc_l5_avx2_asm.S +189 -0
  90. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_pointwise_acc_l7_avx2_asm.S +221 -0
  91. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_pointwise_avx2_asm.S +158 -0
  92. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_caddq_avx2_asm.S +199 -0
  93. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_chknorm_avx2_asm.S +176 -0
  94. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_decompose_32_avx2_asm.S +490 -0
  95. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_decompose_88_avx2_asm.S +489 -0
  96. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_use_hint_32_avx2_asm.S +123 -0
  97. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_use_hint_88_avx2_asm.S +125 -0
  98. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_polyz_unpack_17_avx2_asm.S +355 -0
  99. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_polyz_unpack_19_avx2_asm.S +355 -0
  100. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_rej_uniform_avx2_asm.S +132 -0
  101. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_rej_uniform_eta2_avx2_asm.S +205 -0
  102. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_rej_uniform_eta4_avx2_asm.S +176 -0
  103. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/native/x86_64/src/rej_uniform_table.c +161 -0
  104. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/packing.c +213 -0
  105. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/packing.h +277 -0
  106. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/params.h +153 -0
  107. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/poly.c +1066 -0
  108. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/poly.h +464 -0
  109. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/poly_kl.c +910 -0
  110. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/poly_kl.h +367 -0
  111. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/polyvec.c +509 -0
  112. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/polyvec.h +435 -0
  113. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/polyvec_lazy.c +311 -0
  114. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/polyvec_lazy.h +652 -0
  115. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/randombytes.h +26 -0
  116. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/reduce.h +144 -0
  117. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/rounding.h +265 -0
  118. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/sign.c +1720 -0
  119. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/sign.h +850 -0
  120. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/symmetric.h +68 -0
  121. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/sys.h +327 -0
  122. data/ext/mldsa_gh_native/vendor/mldsa-native/mldsa/src/zetas.inc +55 -0
  123. data/lib/mldsa/parameter_set.rb +82 -0
  124. data/lib/mldsa/signing_key.rb +147 -0
  125. data/lib/mldsa/verify_key.rb +72 -0
  126. data/lib/mldsa/version.rb +7 -0
  127. data/lib/mldsa_gh.rb +93 -0
  128. metadata +225 -0
@@ -0,0 +1,488 @@
1
+ /*
2
+ * Copyright (c) The mlkem-native project authors
3
+ * Copyright (c) The mldsa-native project authors
4
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
5
+ */
6
+ /*yaml
7
+ Name: keccak_f1600_x4_avx2_asm
8
+ Description: x86_64 AVX2 Keccak-f[1600] permutation for four sequential states
9
+ Signature: void mld_keccak_f1600_x4_avx2_asm(uint64_t states[100], const uint64_t rc[24], const uint64_t rho8[4], const uint64_t rho56[4])
10
+ ABI:
11
+ Architecture: x86_64
12
+ CallingConvention: SysV
13
+ Features: [AVX2]
14
+ rdi:
15
+ type: buffer
16
+ size_bytes: 800
17
+ permissions: read/write
18
+ c_parameter: uint64_t states[100]
19
+ description: Four sequential Keccak states (4 x 25 x uint64_t)
20
+ rsi:
21
+ type: buffer
22
+ size_bytes: 192
23
+ permissions: read-only
24
+ c_parameter: const uint64_t rc[24]
25
+ description: Round constants (24 x uint64_t)
26
+ rdx:
27
+ type: buffer
28
+ size_bytes: 32
29
+ permissions: read-only
30
+ c_parameter: const uint64_t rho8[4]
31
+ description: Rotation constant rho8 (4 x uint64_t)
32
+ rcx:
33
+ type: buffer
34
+ size_bytes: 32
35
+ permissions: read-only
36
+ c_parameter: const uint64_t rho56[4]
37
+ description: Rotation constant rho56 (4 x uint64_t)
38
+ */
39
+
40
+ #include "../../../../common.h"
41
+
42
+ #if defined(MLD_FIPS202_X86_64_NEED_X4_AVX2) && \
43
+ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED)
44
+
45
+ /*
46
+ * WARNING: This file is auto-derived from the mldsa-native source file
47
+ * dev/fips202/x86_64/src/keccak_f1600_x4_avx2_asm.S using scripts/simpasm. Do not modify it directly.
48
+ */
49
+
50
+ .text
51
+ .balign 4
52
+ .global MLD_ASM_NAMESPACE(keccak_f1600_x4_avx2_asm)
53
+ MLD_ASM_FN_SYMBOL(keccak_f1600_x4_avx2_asm)
54
+
55
+ .cfi_startproc
56
+ movq %rsp, %r11
57
+ .cfi_def_cfa_register %r11
58
+ andq $-0x20, %rsp
59
+ subq $0x300, %rsp # imm = 0x300
60
+ vmovdqu (%rdi), %ymm0
61
+ vmovdqu 0xc8(%rdi), %ymm3
62
+ vmovdqu 0x190(%rdi), %ymm1
63
+ vmovdqu 0x258(%rdi), %ymm4
64
+ vpunpcklqdq %ymm3, %ymm0, %ymm2 # ymm2 = ymm0[0],ymm3[0],ymm0[2],ymm3[2]
65
+ vpunpckhqdq %ymm3, %ymm0, %ymm0 # ymm0 = ymm0[1],ymm3[1],ymm0[3],ymm3[3]
66
+ vpunpcklqdq %ymm4, %ymm1, %ymm3 # ymm3 = ymm1[0],ymm4[0],ymm1[2],ymm4[2]
67
+ vperm2i128 $0x20, %ymm3, %ymm2, %ymm7 # ymm7 = ymm2[0,1],ymm3[0,1]
68
+ vpunpckhqdq %ymm4, %ymm1, %ymm1 # ymm1 = ymm1[1],ymm4[1],ymm1[3],ymm4[3]
69
+ vperm2i128 $0x31, %ymm3, %ymm2, %ymm3 # ymm3 = ymm2[2,3],ymm3[2,3]
70
+ vmovdqu 0x278(%rdi), %ymm4
71
+ vmovdqu %ymm3, 0x40(%rsp)
72
+ vperm2i128 $0x31, %ymm1, %ymm0, %ymm3 # ymm3 = ymm0[2,3],ymm1[2,3]
73
+ vmovdqu %ymm7, (%rsp)
74
+ vperm2i128 $0x20, %ymm1, %ymm0, %ymm7 # ymm7 = ymm0[0,1],ymm1[0,1]
75
+ vmovdqu 0x20(%rdi), %ymm0
76
+ vmovdqu 0x1b0(%rdi), %ymm1
77
+ vmovdqu %ymm3, 0x60(%rsp)
78
+ vmovdqu 0xe8(%rdi), %ymm3
79
+ vmovdqu %ymm7, 0x20(%rsp)
80
+ vpunpcklqdq %ymm3, %ymm0, %ymm2 # ymm2 = ymm0[0],ymm3[0],ymm0[2],ymm3[2]
81
+ vpunpckhqdq %ymm3, %ymm0, %ymm0 # ymm0 = ymm0[1],ymm3[1],ymm0[3],ymm3[3]
82
+ vpunpcklqdq %ymm4, %ymm1, %ymm3 # ymm3 = ymm1[0],ymm4[0],ymm1[2],ymm4[2]
83
+ vperm2i128 $0x20, %ymm3, %ymm2, %ymm7 # ymm7 = ymm2[0,1],ymm3[0,1]
84
+ vpunpckhqdq %ymm4, %ymm1, %ymm1 # ymm1 = ymm1[1],ymm4[1],ymm1[3],ymm4[3]
85
+ vperm2i128 $0x31, %ymm3, %ymm2, %ymm3 # ymm3 = ymm2[2,3],ymm3[2,3]
86
+ vmovdqu 0x298(%rdi), %ymm4
87
+ vperm2i128 $0x31, %ymm1, %ymm0, %ymm14 # ymm14 = ymm0[2,3],ymm1[2,3]
88
+ vmovdqu %ymm7, 0x80(%rsp)
89
+ vperm2i128 $0x20, %ymm1, %ymm0, %ymm7 # ymm7 = ymm0[0,1],ymm1[0,1]
90
+ vmovdqu 0x40(%rdi), %ymm0
91
+ vmovdqu 0x1d0(%rdi), %ymm1
92
+ vmovdqu %ymm3, 0xc0(%rsp)
93
+ vmovdqu 0x108(%rdi), %ymm3
94
+ vmovdqu %ymm14, %ymm10
95
+ vmovdqu %ymm7, 0xa0(%rsp)
96
+ vpunpcklqdq %ymm3, %ymm0, %ymm2 # ymm2 = ymm0[0],ymm3[0],ymm0[2],ymm3[2]
97
+ vpunpckhqdq %ymm3, %ymm0, %ymm0 # ymm0 = ymm0[1],ymm3[1],ymm0[3],ymm3[3]
98
+ vpunpcklqdq %ymm4, %ymm1, %ymm3 # ymm3 = ymm1[0],ymm4[0],ymm1[2],ymm4[2]
99
+ vpunpckhqdq %ymm4, %ymm1, %ymm1 # ymm1 = ymm1[1],ymm4[1],ymm1[3],ymm4[3]
100
+ vperm2i128 $0x20, %ymm3, %ymm2, %ymm11 # ymm11 = ymm2[0,1],ymm3[0,1]
101
+ vperm2i128 $0x31, %ymm3, %ymm2, %ymm3 # ymm3 = ymm2[2,3],ymm3[2,3]
102
+ vperm2i128 $0x20, %ymm1, %ymm0, %ymm7 # ymm7 = ymm0[0,1],ymm1[0,1]
103
+ vmovdqu %ymm3, 0x100(%rsp)
104
+ vperm2i128 $0x31, %ymm1, %ymm0, %ymm8 # ymm8 = ymm0[2,3],ymm1[2,3]
105
+ vmovdqu 0x128(%rdi), %ymm3
106
+ vmovdqu 0x60(%rdi), %ymm0
107
+ vmovdqu 0x1f0(%rdi), %ymm1
108
+ vmovdqu %ymm7, 0xe0(%rsp)
109
+ vmovdqu %ymm11, %ymm14
110
+ vmovdqu 0x2b8(%rdi), %ymm4
111
+ vmovdqu 0x2f8(%rdi), %ymm5
112
+ vpunpcklqdq %ymm3, %ymm0, %ymm2 # ymm2 = ymm0[0],ymm3[0],ymm0[2],ymm3[2]
113
+ vpunpckhqdq %ymm3, %ymm0, %ymm0 # ymm0 = ymm0[1],ymm3[1],ymm0[3],ymm3[3]
114
+ vpunpcklqdq %ymm4, %ymm1, %ymm3 # ymm3 = ymm1[0],ymm4[0],ymm1[2],ymm4[2]
115
+ vpunpckhqdq %ymm4, %ymm1, %ymm1 # ymm1 = ymm1[1],ymm4[1],ymm1[3],ymm4[3]
116
+ vmovdqu 0x2d8(%rdi), %ymm4
117
+ vperm2i128 $0x20, %ymm3, %ymm2, %ymm15 # ymm15 = ymm2[0,1],ymm3[0,1]
118
+ vperm2i128 $0x31, %ymm3, %ymm2, %ymm3 # ymm3 = ymm2[2,3],ymm3[2,3]
119
+ vperm2i128 $0x20, %ymm1, %ymm0, %ymm7 # ymm7 = ymm0[0,1],ymm1[0,1]
120
+ vperm2i128 $0x31, %ymm1, %ymm0, %ymm9 # ymm9 = ymm0[2,3],ymm1[2,3]
121
+ vmovdqu %ymm3, 0x140(%rsp)
122
+ vmovdqu 0x80(%rdi), %ymm0
123
+ vmovdqu 0x148(%rdi), %ymm3
124
+ vmovdqu 0x210(%rdi), %ymm1
125
+ vmovdqu %ymm7, 0x120(%rsp)
126
+ vpunpcklqdq %ymm3, %ymm0, %ymm2 # ymm2 = ymm0[0],ymm3[0],ymm0[2],ymm3[2]
127
+ vpunpckhqdq %ymm3, %ymm0, %ymm0 # ymm0 = ymm0[1],ymm3[1],ymm0[3],ymm3[3]
128
+ vpunpcklqdq %ymm4, %ymm1, %ymm3 # ymm3 = ymm1[0],ymm4[0],ymm1[2],ymm4[2]
129
+ vpunpckhqdq %ymm4, %ymm1, %ymm1 # ymm1 = ymm1[1],ymm4[1],ymm1[3],ymm4[3]
130
+ vperm2i128 $0x20, %ymm3, %ymm2, %ymm7 # ymm7 = ymm2[0,1],ymm3[0,1]
131
+ vperm2i128 $0x31, %ymm3, %ymm2, %ymm13 # ymm13 = ymm2[2,3],ymm3[2,3]
132
+ vperm2i128 $0x31, %ymm1, %ymm0, %ymm3 # ymm3 = ymm0[2,3],ymm1[2,3]
133
+ vmovdqu %ymm7, 0x160(%rsp)
134
+ vperm2i128 $0x20, %ymm1, %ymm0, %ymm7 # ymm7 = ymm0[0,1],ymm1[0,1]
135
+ vmovdqu 0xa0(%rdi), %ymm0
136
+ vmovdqu 0x230(%rdi), %ymm1
137
+ vmovdqu %ymm3, 0x1a0(%rsp)
138
+ vmovdqu 0x168(%rdi), %ymm3
139
+ vpunpcklqdq %ymm5, %ymm1, %ymm4 # ymm4 = ymm1[0],ymm5[0],ymm1[2],ymm5[2]
140
+ vpunpckhqdq %ymm5, %ymm1, %ymm1 # ymm1 = ymm1[1],ymm5[1],ymm1[3],ymm5[3]
141
+ vmovdqu %ymm7, 0x180(%rsp)
142
+ vpunpcklqdq %ymm3, %ymm0, %ymm2 # ymm2 = ymm0[0],ymm3[0],ymm0[2],ymm3[2]
143
+ vpunpckhqdq %ymm3, %ymm0, %ymm0 # ymm0 = ymm0[1],ymm3[1],ymm0[3],ymm3[3]
144
+ vperm2i128 $0x20, %ymm4, %ymm2, %ymm12 # ymm12 = ymm2[0,1],ymm4[0,1]
145
+ vperm2i128 $0x20, %ymm1, %ymm0, %ymm3 # ymm3 = ymm0[0,1],ymm1[0,1]
146
+ vperm2i128 $0x31, %ymm4, %ymm2, %ymm7 # ymm7 = ymm2[2,3],ymm4[2,3]
147
+ vperm2i128 $0x31, %ymm1, %ymm0, %ymm4 # ymm4 = ymm0[2,3],ymm1[2,3]
148
+ vmovq 0x250(%rdi), %xmm0
149
+ vmovq 0xc0(%rdi), %xmm1
150
+ vmovdqu %ymm12, 0x1c0(%rsp)
151
+ vmovdqu %ymm4, 0x1e0(%rsp)
152
+ vpinsrq $0x1, 0x318(%rdi), %xmm0, %xmm0
153
+ vpinsrq $0x1, 0x188(%rdi), %xmm1, %xmm1
154
+ vinserti128 $0x1, %xmm0, %ymm1, %ymm2
155
+ movq $0x0, %r10
156
+
157
+ LLmld_keccak_f1600_x4_avx2_asm:
158
+ vmovdqu 0xa0(%rsp), %ymm4
159
+ vpxor 0x1c0(%rsp), %ymm9, %ymm0
160
+ vmovdqu %ymm9, 0x200(%rsp)
161
+ vmovdqu %ymm10, %ymm9
162
+ vmovdqu 0xc0(%rsp), %ymm11
163
+ vmovdqu 0x160(%rsp), %ymm12
164
+ vmovdqu %ymm3, 0x240(%rsp)
165
+ vpxor 0x100(%rsp), %ymm4, %ymm1
166
+ vmovdqu 0x40(%rsp), %ymm10
167
+ vmovdqu %ymm4, 0x220(%rsp)
168
+ vpxor %ymm3, %ymm12, %ymm12
169
+ vmovdqu 0x20(%rsp), %ymm6
170
+ vmovdqu 0x140(%rsp), %ymm4
171
+ vmovdqu %ymm14, 0x2a0(%rsp)
172
+ vpxor %ymm1, %ymm0, %ymm0
173
+ vpxor %ymm8, %ymm11, %ymm1
174
+ vpxor 0x180(%rsp), %ymm7, %ymm11
175
+ vmovdqu %ymm10, 0x280(%rsp)
176
+ vpxor %ymm1, %ymm12, %ymm12
177
+ vpxor %ymm15, %ymm9, %ymm1
178
+ vmovdqu 0xe0(%rsp), %ymm3
179
+ vmovdqu %ymm8, 0x260(%rsp)
180
+ vpxor %ymm1, %ymm11, %ymm11
181
+ vpxor 0x120(%rsp), %ymm14, %ymm1
182
+ vpxor %ymm6, %ymm12, %ymm12
183
+ vmovdqu 0x60(%rsp), %ymm8
184
+ vpxor %ymm10, %ymm11, %ymm11
185
+ vpxor 0x1e0(%rsp), %ymm13, %ymm10
186
+ vpxor %ymm4, %ymm3, %ymm3
187
+ vmovdqu %ymm4, 0x2c0(%rsp)
188
+ vpsrlq $0x3f, %ymm12, %ymm4
189
+ vpsrlq $0x3f, %ymm11, %ymm5
190
+ vpxor (%rsp), %ymm0, %ymm0
191
+ vpxor %ymm1, %ymm10, %ymm10
192
+ vmovdqu 0x80(%rsp), %ymm1
193
+ vpxor %ymm8, %ymm10, %ymm10
194
+ vmovdqu %ymm1, %ymm14
195
+ vpxor 0x1a0(%rsp), %ymm2, %ymm1
196
+ vmovdqu %ymm14, 0x2e0(%rsp)
197
+ vpxor %ymm3, %ymm1, %ymm1
198
+ vpsllq $0x1, %ymm12, %ymm3
199
+ vpor %ymm4, %ymm3, %ymm3
200
+ vpsllq $0x1, %ymm11, %ymm4
201
+ vpxor %ymm14, %ymm1, %ymm1
202
+ vpor %ymm5, %ymm4, %ymm4
203
+ vpsrlq $0x3f, %ymm10, %ymm14
204
+ vpxor %ymm1, %ymm3, %ymm3
205
+ vpsllq $0x1, %ymm10, %ymm5
206
+ vpxor %ymm0, %ymm4, %ymm4
207
+ vpor %ymm14, %ymm5, %ymm5
208
+ vpxor %ymm6, %ymm4, %ymm6
209
+ vpxor %ymm12, %ymm5, %ymm5
210
+ vpsrlq $0x3f, %ymm1, %ymm12
211
+ vpsllq $0x1, %ymm1, %ymm1
212
+ vpxor %ymm7, %ymm5, %ymm7
213
+ vpxor %ymm9, %ymm5, %ymm9
214
+ vpor %ymm12, %ymm1, %ymm1
215
+ vpxor (%rsp), %ymm3, %ymm12
216
+ vpxor %ymm11, %ymm1, %ymm1
217
+ vpsrlq $0x3f, %ymm0, %ymm11
218
+ vpsllq $0x1, %ymm0, %ymm0
219
+ vpxor %ymm13, %ymm1, %ymm13
220
+ vpxor %ymm8, %ymm1, %ymm8
221
+ vpor %ymm11, %ymm0, %ymm0
222
+ vpxor %ymm10, %ymm0, %ymm0
223
+ vpxor 0xc0(%rsp), %ymm4, %ymm10
224
+ vpxor %ymm2, %ymm0, %ymm2
225
+ vpsrlq $0x14, %ymm10, %ymm11
226
+ vpsllq $0x2c, %ymm10, %ymm10
227
+ vpor %ymm11, %ymm10, %ymm10
228
+ vpxor %ymm15, %ymm5, %ymm11
229
+ vpbroadcastq (%rsi), %ymm15
230
+ vpsrlq $0x15, %ymm11, %ymm14
231
+ vpsllq $0x2b, %ymm11, %ymm11
232
+ vpor %ymm14, %ymm11, %ymm11
233
+ vpandn %ymm11, %ymm10, %ymm14
234
+ vpxor %ymm15, %ymm14, %ymm14
235
+ vpxor %ymm12, %ymm14, %ymm15
236
+ vpsrlq $0x2b, %ymm13, %ymm14
237
+ vpsllq $0x15, %ymm13, %ymm13
238
+ vmovdqu %ymm15, (%rsp)
239
+ vpor %ymm14, %ymm13, %ymm13
240
+ vpandn %ymm13, %ymm11, %ymm14
241
+ vpxor %ymm10, %ymm14, %ymm15
242
+ vpsrlq $0x32, %ymm2, %ymm14
243
+ vpsllq $0xe, %ymm2, %ymm2
244
+ vmovdqu %ymm15, 0x20(%rsp)
245
+ vpor %ymm14, %ymm2, %ymm2
246
+ vpandn %ymm2, %ymm13, %ymm14
247
+ vpxor %ymm11, %ymm14, %ymm11
248
+ vmovdqu %ymm11, 0x40(%rsp)
249
+ vpandn %ymm12, %ymm2, %ymm11
250
+ vpandn %ymm10, %ymm12, %ymm12
251
+ vpxor %ymm13, %ymm11, %ymm11
252
+ vmovdqu %ymm11, 0x60(%rsp)
253
+ vpxor %ymm2, %ymm12, %ymm11
254
+ vpsrlq $0x24, %ymm8, %ymm2
255
+ vpsllq $0x1c, %ymm8, %ymm8
256
+ vmovdqu %ymm11, 0x80(%rsp)
257
+ vpor %ymm2, %ymm8, %ymm8
258
+ vpxor 0xe0(%rsp), %ymm0, %ymm2
259
+ vpsrlq $0x2c, %ymm2, %ymm10
260
+ vpsllq $0x14, %ymm2, %ymm2
261
+ vpor %ymm10, %ymm2, %ymm2
262
+ vpxor 0x100(%rsp), %ymm3, %ymm10
263
+ vpsrlq $0x3d, %ymm10, %ymm11
264
+ vpsllq $0x3, %ymm10, %ymm10
265
+ vpor %ymm11, %ymm10, %ymm10
266
+ vpandn %ymm10, %ymm2, %ymm11
267
+ vpxor %ymm8, %ymm11, %ymm11
268
+ vmovdqu %ymm11, 0xa0(%rsp)
269
+ vpxor 0x160(%rsp), %ymm4, %ymm11
270
+ vpsrlq $0x13, %ymm11, %ymm12
271
+ vpsllq $0x2d, %ymm11, %ymm11
272
+ vpor %ymm12, %ymm11, %ymm11
273
+ vpandn %ymm11, %ymm10, %ymm12
274
+ vpxor %ymm2, %ymm12, %ymm12
275
+ vmovdqu %ymm12, 0xc0(%rsp)
276
+ vpsrlq $0x3, %ymm7, %ymm12
277
+ vpsllq $0x3d, %ymm7, %ymm7
278
+ vpor %ymm12, %ymm7, %ymm7
279
+ vpandn %ymm7, %ymm11, %ymm12
280
+ vpxor %ymm10, %ymm12, %ymm10
281
+ vpandn %ymm8, %ymm7, %ymm12
282
+ vpandn %ymm2, %ymm8, %ymm8
283
+ vpsrlq $0x3f, %ymm6, %ymm2
284
+ vpsllq $0x1, %ymm6, %ymm6
285
+ vpxor %ymm11, %ymm12, %ymm14
286
+ vpor %ymm2, %ymm6, %ymm6
287
+ vpsrlq $0x3a, %ymm9, %ymm2
288
+ vpxor %ymm7, %ymm8, %ymm12
289
+ vpsllq $0x6, %ymm9, %ymm9
290
+ vmovdqu %ymm12, 0xe0(%rsp)
291
+ vpxor 0x1a0(%rsp), %ymm0, %ymm7
292
+ vpor %ymm2, %ymm9, %ymm9
293
+ vpxor 0x120(%rsp), %ymm1, %ymm2
294
+ vpshufb (%rdx), %ymm7, %ymm7
295
+ vpsrlq $0x27, %ymm2, %ymm11
296
+ vpsllq $0x19, %ymm2, %ymm2
297
+ vpor %ymm2, %ymm11, %ymm11
298
+ vpandn %ymm11, %ymm9, %ymm2
299
+ vpandn %ymm7, %ymm11, %ymm8
300
+ vpxor %ymm6, %ymm2, %ymm12
301
+ vpxor 0x1c0(%rsp), %ymm3, %ymm2
302
+ vpxor %ymm9, %ymm8, %ymm8
303
+ vmovdqu %ymm12, 0x100(%rsp)
304
+ vpsrlq $0x2e, %ymm2, %ymm12
305
+ vpsllq $0x12, %ymm2, %ymm2
306
+ vpor %ymm2, %ymm12, %ymm2
307
+ vpandn %ymm2, %ymm7, %ymm12
308
+ vpxor %ymm11, %ymm12, %ymm15
309
+ vpandn %ymm6, %ymm2, %ymm11
310
+ vpandn %ymm9, %ymm6, %ymm6
311
+ vpxor %ymm7, %ymm11, %ymm12
312
+ vmovdqu %ymm12, 0x120(%rsp)
313
+ vpxor %ymm2, %ymm6, %ymm12
314
+ vpxor 0x2e0(%rsp), %ymm0, %ymm6
315
+ vpxor 0x2c0(%rsp), %ymm0, %ymm0
316
+ vmovdqu %ymm12, 0x140(%rsp)
317
+ vpsrlq $0x25, %ymm6, %ymm2
318
+ vpsllq $0x1b, %ymm6, %ymm6
319
+ vpor %ymm6, %ymm2, %ymm2
320
+ vpxor 0x220(%rsp), %ymm3, %ymm6
321
+ vpxor 0x200(%rsp), %ymm3, %ymm3
322
+ vpsrlq $0x1c, %ymm6, %ymm7
323
+ vpsllq $0x24, %ymm6, %ymm6
324
+ vpor %ymm6, %ymm7, %ymm7
325
+ vpxor 0x260(%rsp), %ymm4, %ymm6
326
+ vpxor 0x240(%rsp), %ymm4, %ymm4
327
+ vpsrlq $0x36, %ymm6, %ymm12
328
+ vpsllq $0xa, %ymm6, %ymm6
329
+ vpor %ymm6, %ymm12, %ymm12
330
+ vpxor 0x180(%rsp), %ymm5, %ymm6
331
+ vpxor 0x280(%rsp), %ymm5, %ymm5
332
+ vpandn %ymm12, %ymm7, %ymm9
333
+ vpsrlq $0x31, %ymm6, %ymm11
334
+ vpsllq $0xf, %ymm6, %ymm6
335
+ vpxor %ymm2, %ymm9, %ymm9
336
+ vpor %ymm6, %ymm11, %ymm11
337
+ vpandn %ymm11, %ymm12, %ymm6
338
+ vpxor %ymm7, %ymm6, %ymm6
339
+ vmovdqu %ymm6, 0x160(%rsp)
340
+ vpxor 0x1e0(%rsp), %ymm1, %ymm6
341
+ vpxor 0x2a0(%rsp), %ymm1, %ymm1
342
+ vpshufb (%rcx), %ymm6, %ymm6
343
+ vpandn %ymm6, %ymm11, %ymm13
344
+ vpxor %ymm12, %ymm13, %ymm13
345
+ vmovdqu %ymm13, 0x180(%rsp)
346
+ vpandn %ymm2, %ymm6, %ymm13
347
+ vpandn %ymm7, %ymm2, %ymm2
348
+ vpxor %ymm6, %ymm2, %ymm2
349
+ vpsrlq $0x3e, %ymm4, %ymm6
350
+ vpxor %ymm11, %ymm13, %ymm13
351
+ vmovdqu %ymm2, 0x1a0(%rsp)
352
+ vpsrlq $0x2, %ymm5, %ymm2
353
+ vpsllq $0x3e, %ymm5, %ymm5
354
+ vpor %ymm5, %ymm2, %ymm2
355
+ vpsrlq $0x9, %ymm1, %ymm5
356
+ vpsllq $0x37, %ymm1, %ymm1
357
+ vpsllq $0x2, %ymm4, %ymm4
358
+ vpor %ymm1, %ymm5, %ymm1
359
+ vpsrlq $0x19, %ymm0, %ymm5
360
+ vpor %ymm4, %ymm6, %ymm4
361
+ vpsllq $0x27, %ymm0, %ymm0
362
+ vpor %ymm0, %ymm5, %ymm5
363
+ vpandn %ymm5, %ymm1, %ymm0
364
+ vpxor %ymm2, %ymm0, %ymm0
365
+ vmovdqu %ymm0, 0x1c0(%rsp)
366
+ vpsrlq $0x17, %ymm3, %ymm0
367
+ vpsllq $0x29, %ymm3, %ymm3
368
+ vpor %ymm3, %ymm0, %ymm0
369
+ vpandn %ymm4, %ymm0, %ymm7
370
+ vpandn %ymm0, %ymm5, %ymm3
371
+ vpxor %ymm5, %ymm7, %ymm7
372
+ vpandn %ymm2, %ymm4, %ymm5
373
+ vpandn %ymm1, %ymm2, %ymm2
374
+ vpxor %ymm0, %ymm5, %ymm5
375
+ vpxor %ymm1, %ymm3, %ymm3
376
+ vpxor %ymm4, %ymm2, %ymm2
377
+ vmovdqu %ymm5, 0x1e0(%rsp)
378
+ addq $0x8, %rsi
379
+ addq $0x1, %r10
380
+ cmpq $0x18, %r10
381
+ jne LLmld_keccak_f1600_x4_avx2_asm
382
+ vmovdqu (%rsp), %ymm4
383
+ vmovdqu 0x40(%rsp), %ymm5
384
+ vmovdqu 0x20(%rsp), %ymm0
385
+ vmovdqu 0x60(%rsp), %ymm1
386
+ vmovdqu 0x1c0(%rsp), %ymm12
387
+ vmovdqu %ymm2, 0x1c0(%rsp)
388
+ vpunpcklqdq %ymm0, %ymm4, %ymm2 # ymm2 = ymm4[0],ymm0[0],ymm4[2],ymm0[2]
389
+ vpunpckhqdq %ymm0, %ymm4, %ymm0 # ymm0 = ymm4[1],ymm0[1],ymm4[3],ymm0[3]
390
+ vpunpcklqdq %ymm1, %ymm5, %ymm4 # ymm4 = ymm5[0],ymm1[0],ymm5[2],ymm1[2]
391
+ vpunpckhqdq %ymm1, %ymm5, %ymm1 # ymm1 = ymm5[1],ymm1[1],ymm5[3],ymm1[3]
392
+ vperm2i128 $0x20, %ymm4, %ymm2, %ymm6 # ymm6 = ymm2[0,1],ymm4[0,1]
393
+ vperm2i128 $0x31, %ymm4, %ymm2, %ymm2 # ymm2 = ymm2[2,3],ymm4[2,3]
394
+ vmovdqu 0x80(%rsp), %ymm4
395
+ vperm2i128 $0x20, %ymm1, %ymm0, %ymm5 # ymm5 = ymm0[0,1],ymm1[0,1]
396
+ vperm2i128 $0x31, %ymm1, %ymm0, %ymm0 # ymm0 = ymm0[2,3],ymm1[2,3]
397
+ vmovdqu %ymm6, (%rdi)
398
+ vmovdqu %ymm5, 0xc8(%rdi)
399
+ vmovdqu %ymm2, 0x190(%rdi)
400
+ vmovdqu %ymm0, 0x258(%rdi)
401
+ vmovdqu 0xa0(%rsp), %ymm0
402
+ vpunpcklqdq %ymm0, %ymm4, %ymm2 # ymm2 = ymm4[0],ymm0[0],ymm4[2],ymm0[2]
403
+ vpunpckhqdq %ymm0, %ymm4, %ymm1 # ymm1 = ymm4[1],ymm0[1],ymm4[3],ymm0[3]
404
+ vmovdqu 0xc0(%rsp), %ymm0
405
+ vpunpcklqdq %ymm10, %ymm0, %ymm4 # ymm4 = ymm0[0],ymm10[0],ymm0[2],ymm10[2]
406
+ vpunpckhqdq %ymm10, %ymm0, %ymm0 # ymm0 = ymm0[1],ymm10[1],ymm0[3],ymm10[3]
407
+ vperm2i128 $0x20, %ymm4, %ymm2, %ymm6 # ymm6 = ymm2[0,1],ymm4[0,1]
408
+ vperm2i128 $0x20, %ymm0, %ymm1, %ymm5 # ymm5 = ymm1[0,1],ymm0[0,1]
409
+ vperm2i128 $0x31, %ymm4, %ymm2, %ymm2 # ymm2 = ymm2[2,3],ymm4[2,3]
410
+ vmovdqu 0xe0(%rsp), %ymm4
411
+ vperm2i128 $0x31, %ymm0, %ymm1, %ymm1 # ymm1 = ymm1[2,3],ymm0[2,3]
412
+ vmovdqu 0x100(%rsp), %ymm0
413
+ vmovdqu %ymm2, 0x1b0(%rdi)
414
+ vmovdqu %ymm1, 0x278(%rdi)
415
+ vpunpcklqdq %ymm4, %ymm14, %ymm2 # ymm2 = ymm14[0],ymm4[0],ymm14[2],ymm4[2]
416
+ vpunpckhqdq %ymm4, %ymm14, %ymm1 # ymm1 = ymm14[1],ymm4[1],ymm14[3],ymm4[3]
417
+ vpunpcklqdq %ymm8, %ymm0, %ymm4 # ymm4 = ymm0[0],ymm8[0],ymm0[2],ymm8[2]
418
+ vpunpckhqdq %ymm8, %ymm0, %ymm0 # ymm0 = ymm0[1],ymm8[1],ymm0[3],ymm8[3]
419
+ vmovdqu %ymm6, 0x20(%rdi)
420
+ vmovdqu %ymm5, 0xe8(%rdi)
421
+ vperm2i128 $0x20, %ymm4, %ymm2, %ymm6 # ymm6 = ymm2[0,1],ymm4[0,1]
422
+ vperm2i128 $0x20, %ymm0, %ymm1, %ymm5 # ymm5 = ymm1[0,1],ymm0[0,1]
423
+ vperm2i128 $0x31, %ymm4, %ymm2, %ymm2 # ymm2 = ymm2[2,3],ymm4[2,3]
424
+ vperm2i128 $0x31, %ymm0, %ymm1, %ymm1 # ymm1 = ymm1[2,3],ymm0[2,3]
425
+ vmovdqu 0x120(%rsp), %ymm4
426
+ vmovdqu 0x140(%rsp), %ymm0
427
+ vmovdqu %ymm2, 0x1d0(%rdi)
428
+ vmovdqu %ymm1, 0x298(%rdi)
429
+ vpunpcklqdq %ymm4, %ymm15, %ymm2 # ymm2 = ymm15[0],ymm4[0],ymm15[2],ymm4[2]
430
+ vpunpckhqdq %ymm4, %ymm15, %ymm1 # ymm1 = ymm15[1],ymm4[1],ymm15[3],ymm4[3]
431
+ vpunpcklqdq %ymm9, %ymm0, %ymm4 # ymm4 = ymm0[0],ymm9[0],ymm0[2],ymm9[2]
432
+ vmovdqu %ymm5, 0x108(%rdi)
433
+ vpunpckhqdq %ymm9, %ymm0, %ymm0 # ymm0 = ymm0[1],ymm9[1],ymm0[3],ymm9[3]
434
+ vmovdqu %ymm6, 0x40(%rdi)
435
+ vperm2i128 $0x20, %ymm4, %ymm2, %ymm6 # ymm6 = ymm2[0,1],ymm4[0,1]
436
+ vperm2i128 $0x31, %ymm4, %ymm2, %ymm2 # ymm2 = ymm2[2,3],ymm4[2,3]
437
+ vperm2i128 $0x20, %ymm0, %ymm1, %ymm5 # ymm5 = ymm1[0,1],ymm0[0,1]
438
+ vmovdqu 0x160(%rsp), %ymm4
439
+ vperm2i128 $0x31, %ymm0, %ymm1, %ymm1 # ymm1 = ymm1[2,3],ymm0[2,3]
440
+ vmovdqu 0x180(%rsp), %ymm0
441
+ vmovdqu %ymm5, 0x128(%rdi)
442
+ vmovdqu 0x1a0(%rsp), %ymm5
443
+ vmovdqu %ymm2, 0x1f0(%rdi)
444
+ vpunpcklqdq %ymm0, %ymm4, %ymm2 # ymm2 = ymm4[0],ymm0[0],ymm4[2],ymm0[2]
445
+ vpunpckhqdq %ymm0, %ymm4, %ymm0 # ymm0 = ymm4[1],ymm0[1],ymm4[3],ymm0[3]
446
+ vpunpcklqdq %ymm5, %ymm13, %ymm4 # ymm4 = ymm13[0],ymm5[0],ymm13[2],ymm5[2]
447
+ vmovdqu %ymm6, 0x60(%rdi)
448
+ vperm2i128 $0x20, %ymm4, %ymm2, %ymm6 # ymm6 = ymm2[0,1],ymm4[0,1]
449
+ vmovdqu %ymm1, 0x2b8(%rdi)
450
+ vperm2i128 $0x31, %ymm4, %ymm2, %ymm2 # ymm2 = ymm2[2,3],ymm4[2,3]
451
+ vpunpckhqdq %ymm5, %ymm13, %ymm1 # ymm1 = ymm13[1],ymm5[1],ymm13[3],ymm5[3]
452
+ vmovdqu %ymm6, 0x80(%rdi)
453
+ vmovdqu 0x1e0(%rsp), %ymm4
454
+ vperm2i128 $0x20, %ymm1, %ymm0, %ymm5 # ymm5 = ymm0[0,1],ymm1[0,1]
455
+ vperm2i128 $0x31, %ymm1, %ymm0, %ymm0 # ymm0 = ymm0[2,3],ymm1[2,3]
456
+ vmovdqu %ymm2, 0x210(%rdi)
457
+ vpunpcklqdq %ymm3, %ymm12, %ymm2 # ymm2 = ymm12[0],ymm3[0],ymm12[2],ymm3[2]
458
+ vmovdqu %ymm0, 0x2d8(%rdi)
459
+ vpunpckhqdq %ymm3, %ymm12, %ymm0 # ymm0 = ymm12[1],ymm3[1],ymm12[3],ymm3[3]
460
+ vpunpcklqdq %ymm4, %ymm7, %ymm3 # ymm3 = ymm7[0],ymm4[0],ymm7[2],ymm4[2]
461
+ vpunpckhqdq %ymm4, %ymm7, %ymm1 # ymm1 = ymm7[1],ymm4[1],ymm7[3],ymm4[3]
462
+ vmovdqu %ymm5, 0x148(%rdi)
463
+ vperm2i128 $0x20, %ymm3, %ymm2, %ymm5 # ymm5 = ymm2[0,1],ymm3[0,1]
464
+ vperm2i128 $0x31, %ymm3, %ymm2, %ymm2 # ymm2 = ymm2[2,3],ymm3[2,3]
465
+ vmovdqu 0x1c0(%rsp), %ymm3
466
+ vperm2i128 $0x20, %ymm1, %ymm0, %ymm4 # ymm4 = ymm0[0,1],ymm1[0,1]
467
+ vperm2i128 $0x31, %ymm1, %ymm0, %ymm0 # ymm0 = ymm0[2,3],ymm1[2,3]
468
+ vmovdqu %ymm5, 0xa0(%rdi)
469
+ vextracti128 $0x1, %ymm3, %xmm15
470
+ vmovdqu %ymm4, 0x168(%rdi)
471
+ vmovdqu %ymm2, 0x230(%rdi)
472
+ vmovdqu %ymm0, 0x2f8(%rdi)
473
+ vmovq %xmm3, 0xc0(%rdi)
474
+ vmovhpd %xmm3, 0x188(%rdi)
475
+ vmovq %xmm15, 0x250(%rdi)
476
+ vmovhpd %xmm15, 0x318(%rdi)
477
+ movq %r11, %rsp
478
+ .cfi_def_cfa_register %rsp
479
+ retq
480
+ .cfi_endproc
481
+
482
+ MLD_ASM_FN_SIZE(keccak_f1600_x4_avx2_asm)
483
+
484
+ #endif /* MLD_FIPS202_X86_64_NEED_X4_AVX2 && !MLD_CONFIG_MULTILEVEL_NO_SHARED */
485
+
486
+ #if defined(__ELF__)
487
+ .section .note.GNU-stack,"",%progbits
488
+ #endif
@@ -0,0 +1,52 @@
1
+ /*
2
+ * Copyright (c) The mldsa-native project authors
3
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
4
+ */
5
+
6
+ /*
7
+ * WARNING: This file is auto-generated from scripts/autogen
8
+ * in the mldsa-native repository.
9
+ * Do not modify it directly.
10
+ */
11
+
12
+ #include "../../../../common.h"
13
+ #if defined(MLD_FIPS202_X86_64_NEED_X4_AVX2) && \
14
+ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED)
15
+
16
+ #include <stdint.h>
17
+
18
+ #include "fips202_native_x86_64.h"
19
+
20
+ MLD_ALIGN MLD_INTERNAL_DATA_DEFINITION const uint64_t
21
+ mld_keccakf1600_round_constants[24] = {
22
+ 0x0000000000000001, 0x0000000000008082, 0x800000000000808a,
23
+ 0x8000000080008000, 0x000000000000808b, 0x0000000080000001,
24
+ 0x8000000080008081, 0x8000000000008009, 0x000000000000008a,
25
+ 0x0000000000000088, 0x0000000080008009, 0x000000008000000a,
26
+ 0x000000008000808b, 0x800000000000008b, 0x8000000000008089,
27
+ 0x8000000000008003, 0x8000000000008002, 0x8000000000000080,
28
+ 0x000000000000800a, 0x800000008000000a, 0x8000000080008081,
29
+ 0x8000000000008080, 0x0000000080000001, 0x8000000080008008,
30
+ };
31
+
32
+ MLD_ALIGN MLD_INTERNAL_DATA_DEFINITION const uint64_t mld_keccak_rho8[4] = {
33
+ 0x0605040302010007,
34
+ 0x0e0d0c0b0a09080f,
35
+ 0x1615141312111017,
36
+ 0x1e1d1c1b1a19181f,
37
+ };
38
+
39
+ MLD_ALIGN MLD_INTERNAL_DATA_DEFINITION const uint64_t mld_keccak_rho56[4] = {
40
+ 0x0007060504030201,
41
+ 0x080f0e0d0c0b0a09,
42
+ 0x1017161514131211,
43
+ 0x181f1e1d1c1b1a19,
44
+ };
45
+
46
+ #else /* MLD_FIPS202_X86_64_NEED_X4_AVX2 && !MLD_CONFIG_MULTILEVEL_NO_SHARED \
47
+ */
48
+
49
+ MLD_EMPTY_CU(fips202_x86_64_constants)
50
+
51
+ #endif /* !(MLD_FIPS202_X86_64_NEED_X4_AVX2 && \
52
+ !MLD_CONFIG_MULTILEVEL_NO_SHARED) */