pq_crypto 0.6.5 → 0.6.7

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 (157) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +233 -0
  3. data/README.md +16 -3
  4. data/SECURITY.md +46 -0
  5. data/ext/pqcrypto/extconf.rb +8 -1
  6. data/ext/pqcrypto/pq_externalmu.c +35 -0
  7. data/ext/pqcrypto/pqcrypto_native_api.h +91 -75
  8. data/ext/pqcrypto/pqcrypto_ruby_secure.c +97 -9
  9. data/ext/pqcrypto/pqcrypto_secure.c +95 -33
  10. data/ext/pqcrypto/pqcrypto_secure.h +66 -48
  11. data/ext/pqcrypto/pqcrypto_version.h +1 -1
  12. data/ext/pqcrypto/vendor/.vendored +7 -7
  13. data/ext/pqcrypto/vendor/mldsa-native/BUILDING.md +5 -2
  14. data/ext/pqcrypto/vendor/mldsa-native/LICENSE +21 -2
  15. data/ext/pqcrypto/vendor/mldsa-native/README.md +20 -7
  16. data/ext/pqcrypto/vendor/mldsa-native/RELEASE.md +160 -0
  17. data/ext/pqcrypto/vendor/mldsa-native/SECURITY.md +1 -1
  18. data/ext/pqcrypto/vendor/mldsa-native/mldsa/README.md +2 -2
  19. data/ext/pqcrypto/vendor/mldsa-native/mldsa/mldsa_native.c +85 -59
  20. data/ext/pqcrypto/vendor/mldsa-native/mldsa/mldsa_native.h +292 -348
  21. data/ext/pqcrypto/vendor/mldsa-native/mldsa/mldsa_native_asm.S +122 -76
  22. data/ext/pqcrypto/vendor/mldsa-native/mldsa/mldsa_native_config.h +184 -86
  23. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/cbmc.h +49 -4
  24. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/common.h +49 -81
  25. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/context.h +152 -0
  26. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/ct.h +25 -12
  27. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/debug.c +2 -0
  28. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/debug.h +2 -0
  29. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/fips202x4.c +2 -2
  30. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/keccakf1600.c +9 -11
  31. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/auto.h +19 -11
  32. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x1_scalar_aarch64_asm.S +6 -4
  33. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x1_v84a_aarch64_asm.S +7 -4
  34. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x2_v84a_aarch64_asm.S +7 -4
  35. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x4_v8a_scalar_hybrid_aarch64_asm.S +12 -9
  36. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x4_v8a_v84a_scalar_hybrid_aarch64_asm.S +12 -9
  37. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x1_scalar.h +1 -1
  38. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x1_v84a.h +3 -2
  39. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x2_v84a.h +3 -2
  40. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x4_v8a_scalar.h +6 -1
  41. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x4_v8a_v84a_scalar.h +3 -2
  42. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/api.h +11 -11
  43. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/mve.h +9 -22
  44. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccak_f1600_x4_mve.S +8 -5
  45. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccak_f1600_x4_mve.c +1 -0
  46. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/{state_extract_bytes_x4_mve.S → keccak_f1600_x4_state_extract_bytes_mve.S} +14 -14
  47. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/{state_xor_bytes_x4_mve.S → keccak_f1600_x4_state_xor_bytes_mve.S} +12 -12
  48. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/auto.h +5 -4
  49. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/keccak_f1600_x4_avx2.h +2 -2
  50. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/src/fips202_native_x86_64.h +1 -0
  51. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/src/keccak_f1600_x4_avx2_asm.S +36 -2
  52. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/meta.h +62 -4
  53. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/arith_native_aarch64.h +87 -54
  54. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{intt_aarch64_asm.S → mldsa_intt_aarch64_asm.S} +39 -6
  55. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{ntt_aarch64_asm.S → mldsa_ntt_aarch64_asm.S} +39 -6
  56. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{pointwise_montgomery_aarch64_asm.S → mldsa_pointwise_montgomery_aarch64_asm.S} +25 -3
  57. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{poly_caddq_aarch64_asm.S → mldsa_poly_caddq_aarch64_asm.S} +19 -3
  58. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{poly_chknorm_aarch64_asm.S → mldsa_poly_chknorm_aarch64_asm.S} +24 -3
  59. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{poly_decompose_32_aarch64_asm.S → mldsa_poly_decompose_32_aarch64_asm.S} +25 -3
  60. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{poly_decompose_88_aarch64_asm.S → mldsa_poly_decompose_88_aarch64_asm.S} +25 -3
  61. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{poly_use_hint_32_aarch64_asm.S → mldsa_poly_use_hint_32_aarch64_asm.S} +25 -3
  62. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{poly_use_hint_88_aarch64_asm.S → mldsa_poly_use_hint_88_aarch64_asm.S} +25 -3
  63. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{mld_polyvecl_pointwise_acc_montgomery_l4_aarch64_asm.S → mldsa_polyvecl_pointwise_acc_montgomery_l4_aarch64_asm.S} +31 -3
  64. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{mld_polyvecl_pointwise_acc_montgomery_l5_aarch64_asm.S → mldsa_polyvecl_pointwise_acc_montgomery_l5_aarch64_asm.S} +31 -3
  65. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{mld_polyvecl_pointwise_acc_montgomery_l7_aarch64_asm.S → mldsa_polyvecl_pointwise_acc_montgomery_l7_aarch64_asm.S} +31 -3
  66. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{polyz_unpack_17_aarch64_asm.S → mldsa_polyz_unpack_17_aarch64_asm.S} +31 -3
  67. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{polyz_unpack_19_aarch64_asm.S → mldsa_polyz_unpack_19_aarch64_asm.S} +31 -3
  68. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{rej_uniform_aarch64_asm.S → mldsa_rej_uniform_aarch64_asm.S} +48 -15
  69. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{rej_uniform_eta2_aarch64_asm.S → mldsa_rej_uniform_eta2_aarch64_asm.S} +42 -9
  70. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{rej_uniform_eta4_aarch64_asm.S → mldsa_rej_uniform_eta4_aarch64_asm.S} +42 -9
  71. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/api.h +11 -3
  72. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/meta.h +3 -2
  73. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/meta.h +28 -28
  74. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/arith_native_x86_64.h +171 -49
  75. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/{intt_avx2_asm.S → mldsa_intt_avx2_asm.S} +23 -1
  76. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/{ntt_avx2_asm.S → mldsa_ntt_avx2_asm.S} +23 -1
  77. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/{nttunpack_avx2_asm.S → mldsa_nttunpack_avx2_asm.S} +17 -1
  78. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/{pointwise_acc_l4_avx2_asm.S → mldsa_pointwise_acc_l4_avx2_asm.S} +37 -3
  79. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/{pointwise_acc_l5_avx2_asm.S → mldsa_pointwise_acc_l5_avx2_asm.S} +37 -3
  80. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/{pointwise_acc_l7_avx2_asm.S → mldsa_pointwise_acc_l7_avx2_asm.S} +37 -3
  81. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/{pointwise_avx2_asm.S → mldsa_pointwise_avx2_asm.S} +31 -3
  82. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/{poly_caddq_avx2_asm.S → mldsa_poly_caddq_avx2_asm.S} +18 -9
  83. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_chknorm_avx2_asm.S +176 -0
  84. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_decompose_32_avx2_asm.S +490 -0
  85. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_decompose_88_avx2_asm.S +489 -0
  86. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_use_hint_32_avx2_asm.S +123 -0
  87. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_use_hint_88_avx2_asm.S +125 -0
  88. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_polyz_unpack_17_avx2_asm.S +355 -0
  89. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_polyz_unpack_19_avx2_asm.S +355 -0
  90. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_rej_uniform_avx2_asm.S +132 -0
  91. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_rej_uniform_eta2_avx2_asm.S +205 -0
  92. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_rej_uniform_eta4_avx2_asm.S +176 -0
  93. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/packing.c +27 -36
  94. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/packing.h +42 -8
  95. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/params.h +93 -17
  96. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/poly.c +74 -15
  97. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/poly.h +97 -11
  98. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/poly_kl.c +7 -38
  99. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/poly_kl.h +49 -7
  100. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/polyvec.c +16 -17
  101. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/polyvec.h +26 -9
  102. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/polyvec_lazy.c +3 -0
  103. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/polyvec_lazy.h +18 -19
  104. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/reduce.h +15 -3
  105. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/rounding.h +28 -6
  106. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/sign.c +311 -246
  107. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/sign.h +245 -240
  108. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/sys.h +64 -5
  109. data/ext/pqcrypto/vendor/mlkem-native/BUILDING.md +5 -2
  110. data/ext/pqcrypto/vendor/mlkem-native/LICENSE +21 -3
  111. data/ext/pqcrypto/vendor/mlkem-native/README.md +2 -2
  112. data/ext/pqcrypto/vendor/mlkem-native/RELEASE.md +113 -0
  113. data/ext/pqcrypto/vendor/mlkem-native/mlkem/README.md +2 -2
  114. data/ext/pqcrypto/vendor/mlkem-native/mlkem/mlkem_native.c +17 -27
  115. data/ext/pqcrypto/vendor/mlkem-native/mlkem/mlkem_native.h +68 -151
  116. data/ext/pqcrypto/vendor/mlkem-native/mlkem/mlkem_native_asm.S +17 -27
  117. data/ext/pqcrypto/vendor/mlkem-native/mlkem/mlkem_native_config.h +46 -44
  118. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/cbmc.h +25 -0
  119. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/common.h +37 -6
  120. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/context.h +9 -0
  121. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/fips202.h +2 -2
  122. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/keccakf1600.c +8 -8
  123. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/x1_scalar.h +1 -1
  124. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/x1_v84a.h +3 -3
  125. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/x2_v84a.h +3 -3
  126. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/x4_v8a_scalar.h +2 -2
  127. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/x4_v8a_v84a_scalar.h +3 -3
  128. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/api.h +11 -11
  129. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/armv81m/mve.h +3 -3
  130. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/x86_64/keccak_f1600_x4_avx2.h +2 -2
  131. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/indcpa.h +14 -11
  132. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/kem.c +28 -11
  133. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/kem.h +39 -14
  134. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/meta.h +10 -10
  135. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/meta.h +20 -20
  136. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/sys.h +5 -5
  137. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/verify.h +11 -10
  138. data/lib/pq_crypto/internal.rb +10 -0
  139. data/lib/pq_crypto/kem.rb +47 -5
  140. data/lib/pq_crypto/key.rb +14 -8
  141. data/lib/pq_crypto/pkcs8.rb +13 -5
  142. data/lib/pq_crypto/signature.rb +34 -9
  143. data/lib/pq_crypto/spki.rb +4 -2
  144. data/lib/pq_crypto/version.rb +1 -1
  145. data/lib/pq_crypto.rb +9 -0
  146. data/script/vendor_libs.rb +6 -6
  147. metadata +40 -38
  148. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/poly_chknorm_avx2.c +0 -52
  149. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/poly_decompose_32_avx2.c +0 -157
  150. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/poly_decompose_88_avx2.c +0 -157
  151. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/poly_use_hint_32_avx2.c +0 -103
  152. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/poly_use_hint_88_avx2.c +0 -105
  153. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/polyz_unpack_17_avx2.c +0 -94
  154. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/polyz_unpack_19_avx2.c +0 -96
  155. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/rej_uniform_avx2.c +0 -126
  156. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/rej_uniform_eta2_avx2.c +0 -157
  157. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/rej_uniform_eta4_avx2.c +0 -141
@@ -0,0 +1,125 @@
1
+ /*
2
+ * Copyright (c) The mldsa-native project authors
3
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
4
+ */
5
+
6
+ /* References
7
+ * ==========
8
+ *
9
+ * - [REF_AVX2]
10
+ * CRYSTALS-Dilithium optimized AVX2 implementation
11
+ * Bai, Ducas, Kiltz, Lepoint, Lyubashevsky, Schwabe, Seiler, Stehlé
12
+ * https://github.com/pq-crystals/dilithium/tree/master/avx2
13
+ */
14
+
15
+ /*
16
+ * This file is derived from the public domain
17
+ * AVX2 Dilithium implementation @[REF_AVX2].
18
+ */
19
+
20
+
21
+ /*yaml
22
+ Name: poly_use_hint_88_avx2_asm
23
+ Description: x86_64 AVX2 hint application (alpha = (Q-1)/88).
24
+ Use the hint polynomial h to correct the high bits of the polynomial a,
25
+ in place. Variant for parameter set ML-DSA-44 (GAMMA2 = (Q-1)/88).
26
+ Signature: void mld_poly_use_hint_88_avx2_asm(int32_t *a, const int32_t *h)
27
+ ABI:
28
+ Architecture: x86_64
29
+ CallingConvention: SysV
30
+ Features: [AVX2]
31
+ rdi:
32
+ type: buffer
33
+ size_bytes: 1024
34
+ permissions: read/write
35
+ c_parameter: int32_t *a
36
+ description: Input/output polynomial (256 x int32_t)
37
+ rsi:
38
+ type: buffer
39
+ size_bytes: 1024
40
+ permissions: read-only
41
+ c_parameter: const int32_t *h
42
+ description: Hint polynomial (256 x int32_t)
43
+ */
44
+
45
+ #include "../../../common.h"
46
+
47
+ #if defined(MLD_ARITH_BACKEND_X86_64_DEFAULT) && \
48
+ !defined(MLD_CONFIG_NO_VERIFY_API) && \
49
+ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \
50
+ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \
51
+ MLD_CONFIG_PARAMETER_SET == 44)
52
+
53
+ /*
54
+ * WARNING: This file is auto-derived from the mldsa-native source file
55
+ * dev/x86_64/src/mldsa_poly_use_hint_88_avx2_asm.S using scripts/simpasm. Do not modify it directly.
56
+ */
57
+
58
+ .text
59
+ .balign 4
60
+ .global MLD_ASM_NAMESPACE(poly_use_hint_88_avx2_asm)
61
+ MLD_ASM_FN_SYMBOL(poly_use_hint_88_avx2_asm)
62
+
63
+ .cfi_startproc
64
+ movl $0x7f, %ecx
65
+ xorl %eax, %eax
66
+ vpxor %xmm5, %xmm5, %xmm5
67
+ movl $0x2c0b, %r8d # imm = 0x2C0B
68
+ vmovd %r8d, %xmm8
69
+ vpbroadcastd %xmm8, %ymm8
70
+ vmovd %ecx, %xmm4
71
+ movl $0x7e6c00, %ecx # imm = 0x7E6C00
72
+ movl $0x80, %r9d
73
+ vmovd %r9d, %xmm7
74
+ vpbroadcastd %xmm7, %ymm7
75
+ movl $0x2b, %r10d
76
+ vmovd %r10d, %xmm6
77
+ vpbroadcastd %xmm6, %ymm6
78
+ vmovd %ecx, %xmm3
79
+ vpbroadcastd %xmm4, %ymm4
80
+ vpbroadcastd %xmm3, %ymm3
81
+
82
+ Lmld_poly_use_hint_88_avx2_asm_loop:
83
+ vmovdqa (%rdi), %ymm0
84
+ vmovdqa (%rsi), %ymm1
85
+ vpaddd %ymm0, %ymm4, %ymm10
86
+ vpsrld $0x7, %ymm10, %ymm10
87
+ vpmulhuw %ymm8, %ymm10, %ymm10
88
+ vpmulhrsw %ymm7, %ymm10, %ymm10
89
+ vpcmpgtd %ymm3, %ymm0, %ymm11
90
+ vpandn %ymm10, %ymm11, %ymm9
91
+ vpslld $0x1, %ymm10, %ymm12
92
+ vpaddd %ymm10, %ymm12, %ymm12
93
+ vpslld $0x5, %ymm12, %ymm10
94
+ vpsubd %ymm12, %ymm10, %ymm10
95
+ vpslld $0xb, %ymm10, %ymm10
96
+ vpsubd %ymm10, %ymm0, %ymm0
97
+ vpaddd %ymm11, %ymm0, %ymm0
98
+ vpcmpgtd %ymm5, %ymm0, %ymm0
99
+ vpandn %ymm1, %ymm0, %ymm0
100
+ vpslld $0x1, %ymm0, %ymm0
101
+ vpsubd %ymm0, %ymm1, %ymm0
102
+ vpaddd %ymm9, %ymm0, %ymm0
103
+ vpblendvb %ymm0, %ymm6, %ymm0, %ymm0
104
+ vpcmpgtd %ymm6, %ymm0, %ymm1
105
+ vpandn %ymm0, %ymm1, %ymm0
106
+ vmovdqa %ymm0, (%rdi)
107
+ addq $0x20, %rdi
108
+ addq $0x20, %rsi
109
+ addq $0x20, %rax
110
+ cmpq $0x400, %rax # imm = 0x400
111
+ jne Lmld_poly_use_hint_88_avx2_asm_loop
112
+ retq
113
+ .cfi_endproc
114
+
115
+ MLD_ASM_FN_SIZE(poly_use_hint_88_avx2_asm)
116
+
117
+
118
+ #endif /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_NO_VERIFY_API && \
119
+ !MLD_CONFIG_MULTILEVEL_NO_SHARED && \
120
+ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44) \
121
+ */
122
+
123
+ #if defined(__ELF__)
124
+ .section .note.GNU-stack,"",%progbits
125
+ #endif
@@ -0,0 +1,355 @@
1
+ /*
2
+ * Copyright (c) The mldsa-native project authors
3
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
4
+ */
5
+
6
+ /* References
7
+ * ==========
8
+ *
9
+ * - [REF_AVX2]
10
+ * CRYSTALS-Dilithium optimized AVX2 implementation
11
+ * Bai, Ducas, Kiltz, Lepoint, Lyubashevsky, Schwabe, Seiler, Stehlé
12
+ * https://github.com/pq-crystals/dilithium/tree/master/avx2
13
+ */
14
+
15
+ /*
16
+ * This file is derived from the public domain
17
+ * AVX2 Dilithium implementation @[REF_AVX2].
18
+ */
19
+
20
+
21
+ /*yaml
22
+ Name: polyz_unpack_17_avx2_asm
23
+ Description: x86_64 AVX2 unpacking of 17-bit packed coefficients.
24
+ Unpack polynomial z with 18-bit packed coefficients (GAMMA1 = 2^17),
25
+ mapping packed [0, 2^18-1] to signed [-(2^17-1), 2^17] via GAMMA1 - x.
26
+ Signature: void mld_polyz_unpack_17_avx2_asm(int32_t *r, const uint8_t *a)
27
+ ABI:
28
+ Architecture: x86_64
29
+ CallingConvention: SysV
30
+ Features: [AVX2]
31
+ rdi:
32
+ type: buffer
33
+ size_bytes: 1024
34
+ permissions: write-only
35
+ c_parameter: int32_t *r
36
+ description: Output polynomial (256 x int32_t)
37
+ rsi:
38
+ type: buffer
39
+ size_bytes: 576
40
+ permissions: read-only
41
+ c_parameter: const uint8_t *a
42
+ description: Packed input bytes
43
+ */
44
+
45
+ #include "../../../common.h"
46
+
47
+ #if defined(MLD_ARITH_BACKEND_X86_64_DEFAULT) && \
48
+ (!defined(MLD_CONFIG_NO_SIGN_API) || \
49
+ !defined(MLD_CONFIG_NO_VERIFY_API)) && \
50
+ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \
51
+ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \
52
+ MLD_CONFIG_PARAMETER_SET == 44)
53
+
54
+
55
+ /*
56
+ * WARNING: This file is auto-derived from the mldsa-native source file
57
+ * dev/x86_64/src/mldsa_polyz_unpack_17_avx2_asm.S using scripts/simpasm. Do not modify it directly.
58
+ */
59
+
60
+ .text
61
+ .balign 4
62
+ .global MLD_ASM_NAMESPACE(polyz_unpack_17_avx2_asm)
63
+ MLD_ASM_FN_SYMBOL(polyz_unpack_17_avx2_asm)
64
+
65
+ .cfi_startproc
66
+ movabsq $-0xfbfcfd00fdff00, %rax # imm = 0xFF040302FF020100
67
+ vmovq %rax, %xmm1
68
+ movabsq $-0xf7f8f900f9fafc, %rax # imm = 0xFF080706FF060504
69
+ vpinsrq $0x1, %rax, %xmm1, %xmm1
70
+ movabsq $-0xe4e5e600e6e7e9, %rax # imm = 0xFF1B1A19FF191817
71
+ vmovq %rax, %xmm5
72
+ movabsq $-0xe0e1e200e2e3e5, %rax # imm = 0xFF1F1E1DFF1D1C1B
73
+ vpinsrq $0x1, %rax, %xmm5, %xmm5
74
+ vinserti128 $0x1, %xmm5, %ymm1, %ymm1
75
+ movabsq $0x200000000, %rax # imm = 0x200000000
76
+ vmovq %rax, %xmm2
77
+ movabsq $0x600000004, %rax # imm = 0x600000004
78
+ vpinsrq $0x1, %rax, %xmm2, %xmm2
79
+ vinserti128 $0x1, %xmm2, %ymm2, %ymm2
80
+ movl $0x3ffff, %eax # imm = 0x3FFFF
81
+ vmovd %eax, %xmm3
82
+ vpbroadcastd %xmm3, %ymm3
83
+ movl $0x20000, %eax # imm = 0x20000
84
+ vmovd %eax, %xmm4
85
+ vpbroadcastd %xmm4, %ymm4
86
+ vmovdqu (%rsi), %xmm0
87
+ vmovdqu 0x2(%rsi), %xmm5
88
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
89
+ vpshufb %ymm1, %ymm0, %ymm0
90
+ vpsrlvd %ymm2, %ymm0, %ymm0
91
+ vpand %ymm3, %ymm0, %ymm0
92
+ vpsubd %ymm0, %ymm4, %ymm0
93
+ vmovdqa %ymm0, (%rdi)
94
+ vmovdqu 0x12(%rsi), %xmm0
95
+ vmovdqu 0x14(%rsi), %xmm5
96
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
97
+ vpshufb %ymm1, %ymm0, %ymm0
98
+ vpsrlvd %ymm2, %ymm0, %ymm0
99
+ vpand %ymm3, %ymm0, %ymm0
100
+ vpsubd %ymm0, %ymm4, %ymm0
101
+ vmovdqa %ymm0, 0x20(%rdi)
102
+ vmovdqu 0x24(%rsi), %xmm0
103
+ vmovdqu 0x26(%rsi), %xmm5
104
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
105
+ vpshufb %ymm1, %ymm0, %ymm0
106
+ vpsrlvd %ymm2, %ymm0, %ymm0
107
+ vpand %ymm3, %ymm0, %ymm0
108
+ vpsubd %ymm0, %ymm4, %ymm0
109
+ vmovdqa %ymm0, 0x40(%rdi)
110
+ vmovdqu 0x36(%rsi), %xmm0
111
+ vmovdqu 0x38(%rsi), %xmm5
112
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
113
+ vpshufb %ymm1, %ymm0, %ymm0
114
+ vpsrlvd %ymm2, %ymm0, %ymm0
115
+ vpand %ymm3, %ymm0, %ymm0
116
+ vpsubd %ymm0, %ymm4, %ymm0
117
+ vmovdqa %ymm0, 0x60(%rdi)
118
+ vmovdqu 0x48(%rsi), %xmm0
119
+ vmovdqu 0x4a(%rsi), %xmm5
120
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
121
+ vpshufb %ymm1, %ymm0, %ymm0
122
+ vpsrlvd %ymm2, %ymm0, %ymm0
123
+ vpand %ymm3, %ymm0, %ymm0
124
+ vpsubd %ymm0, %ymm4, %ymm0
125
+ vmovdqa %ymm0, 0x80(%rdi)
126
+ vmovdqu 0x5a(%rsi), %xmm0
127
+ vmovdqu 0x5c(%rsi), %xmm5
128
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
129
+ vpshufb %ymm1, %ymm0, %ymm0
130
+ vpsrlvd %ymm2, %ymm0, %ymm0
131
+ vpand %ymm3, %ymm0, %ymm0
132
+ vpsubd %ymm0, %ymm4, %ymm0
133
+ vmovdqa %ymm0, 0xa0(%rdi)
134
+ vmovdqu 0x6c(%rsi), %xmm0
135
+ vmovdqu 0x6e(%rsi), %xmm5
136
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
137
+ vpshufb %ymm1, %ymm0, %ymm0
138
+ vpsrlvd %ymm2, %ymm0, %ymm0
139
+ vpand %ymm3, %ymm0, %ymm0
140
+ vpsubd %ymm0, %ymm4, %ymm0
141
+ vmovdqa %ymm0, 0xc0(%rdi)
142
+ vmovdqu 0x7e(%rsi), %xmm0
143
+ vmovdqu 0x80(%rsi), %xmm5
144
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
145
+ vpshufb %ymm1, %ymm0, %ymm0
146
+ vpsrlvd %ymm2, %ymm0, %ymm0
147
+ vpand %ymm3, %ymm0, %ymm0
148
+ vpsubd %ymm0, %ymm4, %ymm0
149
+ vmovdqa %ymm0, 0xe0(%rdi)
150
+ vmovdqu 0x90(%rsi), %xmm0
151
+ vmovdqu 0x92(%rsi), %xmm5
152
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
153
+ vpshufb %ymm1, %ymm0, %ymm0
154
+ vpsrlvd %ymm2, %ymm0, %ymm0
155
+ vpand %ymm3, %ymm0, %ymm0
156
+ vpsubd %ymm0, %ymm4, %ymm0
157
+ vmovdqa %ymm0, 0x100(%rdi)
158
+ vmovdqu 0xa2(%rsi), %xmm0
159
+ vmovdqu 0xa4(%rsi), %xmm5
160
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
161
+ vpshufb %ymm1, %ymm0, %ymm0
162
+ vpsrlvd %ymm2, %ymm0, %ymm0
163
+ vpand %ymm3, %ymm0, %ymm0
164
+ vpsubd %ymm0, %ymm4, %ymm0
165
+ vmovdqa %ymm0, 0x120(%rdi)
166
+ vmovdqu 0xb4(%rsi), %xmm0
167
+ vmovdqu 0xb6(%rsi), %xmm5
168
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
169
+ vpshufb %ymm1, %ymm0, %ymm0
170
+ vpsrlvd %ymm2, %ymm0, %ymm0
171
+ vpand %ymm3, %ymm0, %ymm0
172
+ vpsubd %ymm0, %ymm4, %ymm0
173
+ vmovdqa %ymm0, 0x140(%rdi)
174
+ vmovdqu 0xc6(%rsi), %xmm0
175
+ vmovdqu 0xc8(%rsi), %xmm5
176
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
177
+ vpshufb %ymm1, %ymm0, %ymm0
178
+ vpsrlvd %ymm2, %ymm0, %ymm0
179
+ vpand %ymm3, %ymm0, %ymm0
180
+ vpsubd %ymm0, %ymm4, %ymm0
181
+ vmovdqa %ymm0, 0x160(%rdi)
182
+ vmovdqu 0xd8(%rsi), %xmm0
183
+ vmovdqu 0xda(%rsi), %xmm5
184
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
185
+ vpshufb %ymm1, %ymm0, %ymm0
186
+ vpsrlvd %ymm2, %ymm0, %ymm0
187
+ vpand %ymm3, %ymm0, %ymm0
188
+ vpsubd %ymm0, %ymm4, %ymm0
189
+ vmovdqa %ymm0, 0x180(%rdi)
190
+ vmovdqu 0xea(%rsi), %xmm0
191
+ vmovdqu 0xec(%rsi), %xmm5
192
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
193
+ vpshufb %ymm1, %ymm0, %ymm0
194
+ vpsrlvd %ymm2, %ymm0, %ymm0
195
+ vpand %ymm3, %ymm0, %ymm0
196
+ vpsubd %ymm0, %ymm4, %ymm0
197
+ vmovdqa %ymm0, 0x1a0(%rdi)
198
+ vmovdqu 0xfc(%rsi), %xmm0
199
+ vmovdqu 0xfe(%rsi), %xmm5
200
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
201
+ vpshufb %ymm1, %ymm0, %ymm0
202
+ vpsrlvd %ymm2, %ymm0, %ymm0
203
+ vpand %ymm3, %ymm0, %ymm0
204
+ vpsubd %ymm0, %ymm4, %ymm0
205
+ vmovdqa %ymm0, 0x1c0(%rdi)
206
+ vmovdqu 0x10e(%rsi), %xmm0
207
+ vmovdqu 0x110(%rsi), %xmm5
208
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
209
+ vpshufb %ymm1, %ymm0, %ymm0
210
+ vpsrlvd %ymm2, %ymm0, %ymm0
211
+ vpand %ymm3, %ymm0, %ymm0
212
+ vpsubd %ymm0, %ymm4, %ymm0
213
+ vmovdqa %ymm0, 0x1e0(%rdi)
214
+ vmovdqu 0x120(%rsi), %xmm0
215
+ vmovdqu 0x122(%rsi), %xmm5
216
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
217
+ vpshufb %ymm1, %ymm0, %ymm0
218
+ vpsrlvd %ymm2, %ymm0, %ymm0
219
+ vpand %ymm3, %ymm0, %ymm0
220
+ vpsubd %ymm0, %ymm4, %ymm0
221
+ vmovdqa %ymm0, 0x200(%rdi)
222
+ vmovdqu 0x132(%rsi), %xmm0
223
+ vmovdqu 0x134(%rsi), %xmm5
224
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
225
+ vpshufb %ymm1, %ymm0, %ymm0
226
+ vpsrlvd %ymm2, %ymm0, %ymm0
227
+ vpand %ymm3, %ymm0, %ymm0
228
+ vpsubd %ymm0, %ymm4, %ymm0
229
+ vmovdqa %ymm0, 0x220(%rdi)
230
+ vmovdqu 0x144(%rsi), %xmm0
231
+ vmovdqu 0x146(%rsi), %xmm5
232
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
233
+ vpshufb %ymm1, %ymm0, %ymm0
234
+ vpsrlvd %ymm2, %ymm0, %ymm0
235
+ vpand %ymm3, %ymm0, %ymm0
236
+ vpsubd %ymm0, %ymm4, %ymm0
237
+ vmovdqa %ymm0, 0x240(%rdi)
238
+ vmovdqu 0x156(%rsi), %xmm0
239
+ vmovdqu 0x158(%rsi), %xmm5
240
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
241
+ vpshufb %ymm1, %ymm0, %ymm0
242
+ vpsrlvd %ymm2, %ymm0, %ymm0
243
+ vpand %ymm3, %ymm0, %ymm0
244
+ vpsubd %ymm0, %ymm4, %ymm0
245
+ vmovdqa %ymm0, 0x260(%rdi)
246
+ vmovdqu 0x168(%rsi), %xmm0
247
+ vmovdqu 0x16a(%rsi), %xmm5
248
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
249
+ vpshufb %ymm1, %ymm0, %ymm0
250
+ vpsrlvd %ymm2, %ymm0, %ymm0
251
+ vpand %ymm3, %ymm0, %ymm0
252
+ vpsubd %ymm0, %ymm4, %ymm0
253
+ vmovdqa %ymm0, 0x280(%rdi)
254
+ vmovdqu 0x17a(%rsi), %xmm0
255
+ vmovdqu 0x17c(%rsi), %xmm5
256
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
257
+ vpshufb %ymm1, %ymm0, %ymm0
258
+ vpsrlvd %ymm2, %ymm0, %ymm0
259
+ vpand %ymm3, %ymm0, %ymm0
260
+ vpsubd %ymm0, %ymm4, %ymm0
261
+ vmovdqa %ymm0, 0x2a0(%rdi)
262
+ vmovdqu 0x18c(%rsi), %xmm0
263
+ vmovdqu 0x18e(%rsi), %xmm5
264
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
265
+ vpshufb %ymm1, %ymm0, %ymm0
266
+ vpsrlvd %ymm2, %ymm0, %ymm0
267
+ vpand %ymm3, %ymm0, %ymm0
268
+ vpsubd %ymm0, %ymm4, %ymm0
269
+ vmovdqa %ymm0, 0x2c0(%rdi)
270
+ vmovdqu 0x19e(%rsi), %xmm0
271
+ vmovdqu 0x1a0(%rsi), %xmm5
272
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
273
+ vpshufb %ymm1, %ymm0, %ymm0
274
+ vpsrlvd %ymm2, %ymm0, %ymm0
275
+ vpand %ymm3, %ymm0, %ymm0
276
+ vpsubd %ymm0, %ymm4, %ymm0
277
+ vmovdqa %ymm0, 0x2e0(%rdi)
278
+ vmovdqu 0x1b0(%rsi), %xmm0
279
+ vmovdqu 0x1b2(%rsi), %xmm5
280
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
281
+ vpshufb %ymm1, %ymm0, %ymm0
282
+ vpsrlvd %ymm2, %ymm0, %ymm0
283
+ vpand %ymm3, %ymm0, %ymm0
284
+ vpsubd %ymm0, %ymm4, %ymm0
285
+ vmovdqa %ymm0, 0x300(%rdi)
286
+ vmovdqu 0x1c2(%rsi), %xmm0
287
+ vmovdqu 0x1c4(%rsi), %xmm5
288
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
289
+ vpshufb %ymm1, %ymm0, %ymm0
290
+ vpsrlvd %ymm2, %ymm0, %ymm0
291
+ vpand %ymm3, %ymm0, %ymm0
292
+ vpsubd %ymm0, %ymm4, %ymm0
293
+ vmovdqa %ymm0, 0x320(%rdi)
294
+ vmovdqu 0x1d4(%rsi), %xmm0
295
+ vmovdqu 0x1d6(%rsi), %xmm5
296
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
297
+ vpshufb %ymm1, %ymm0, %ymm0
298
+ vpsrlvd %ymm2, %ymm0, %ymm0
299
+ vpand %ymm3, %ymm0, %ymm0
300
+ vpsubd %ymm0, %ymm4, %ymm0
301
+ vmovdqa %ymm0, 0x340(%rdi)
302
+ vmovdqu 0x1e6(%rsi), %xmm0
303
+ vmovdqu 0x1e8(%rsi), %xmm5
304
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
305
+ vpshufb %ymm1, %ymm0, %ymm0
306
+ vpsrlvd %ymm2, %ymm0, %ymm0
307
+ vpand %ymm3, %ymm0, %ymm0
308
+ vpsubd %ymm0, %ymm4, %ymm0
309
+ vmovdqa %ymm0, 0x360(%rdi)
310
+ vmovdqu 0x1f8(%rsi), %xmm0
311
+ vmovdqu 0x1fa(%rsi), %xmm5
312
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
313
+ vpshufb %ymm1, %ymm0, %ymm0
314
+ vpsrlvd %ymm2, %ymm0, %ymm0
315
+ vpand %ymm3, %ymm0, %ymm0
316
+ vpsubd %ymm0, %ymm4, %ymm0
317
+ vmovdqa %ymm0, 0x380(%rdi)
318
+ vmovdqu 0x20a(%rsi), %xmm0
319
+ vmovdqu 0x20c(%rsi), %xmm5
320
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
321
+ vpshufb %ymm1, %ymm0, %ymm0
322
+ vpsrlvd %ymm2, %ymm0, %ymm0
323
+ vpand %ymm3, %ymm0, %ymm0
324
+ vpsubd %ymm0, %ymm4, %ymm0
325
+ vmovdqa %ymm0, 0x3a0(%rdi)
326
+ vmovdqu 0x21c(%rsi), %xmm0
327
+ vmovdqu 0x21e(%rsi), %xmm5
328
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
329
+ vpshufb %ymm1, %ymm0, %ymm0
330
+ vpsrlvd %ymm2, %ymm0, %ymm0
331
+ vpand %ymm3, %ymm0, %ymm0
332
+ vpsubd %ymm0, %ymm4, %ymm0
333
+ vmovdqa %ymm0, 0x3c0(%rdi)
334
+ vmovdqu 0x22e(%rsi), %xmm0
335
+ vmovdqu 0x230(%rsi), %xmm5
336
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
337
+ vpshufb %ymm1, %ymm0, %ymm0
338
+ vpsrlvd %ymm2, %ymm0, %ymm0
339
+ vpand %ymm3, %ymm0, %ymm0
340
+ vpsubd %ymm0, %ymm4, %ymm0
341
+ vmovdqa %ymm0, 0x3e0(%rdi)
342
+ retq
343
+ .cfi_endproc
344
+
345
+ MLD_ASM_FN_SIZE(polyz_unpack_17_avx2_asm)
346
+
347
+
348
+ #endif /* MLD_ARITH_BACKEND_X86_64_DEFAULT && (!MLD_CONFIG_NO_SIGN_API || \
349
+ !MLD_CONFIG_NO_VERIFY_API) && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \
350
+ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 44) \
351
+ */
352
+
353
+ #if defined(__ELF__)
354
+ .section .note.GNU-stack,"",%progbits
355
+ #endif