@cpp-linter/clang-tidy-win32-x64 21.1.0 → 23.1.3

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 (326) hide show
  1. package/README.md +2 -2
  2. package/bin/clang-tidy.exe +2 -2
  3. package/lib/clang/23/include/__clang_cuda_complex_builtins.h +236 -0
  4. package/lib/clang/{21 → 23}/include/__clang_cuda_device_functions.h +1 -1
  5. package/lib/clang/{21 → 23}/include/__clang_cuda_intrinsics.h +207 -226
  6. package/lib/clang/{21 → 23}/include/__clang_cuda_math_forward_declares.h +5 -0
  7. package/lib/clang/{21 → 23}/include/__clang_cuda_runtime_wrapper.h +27 -5
  8. package/lib/clang/23/include/__clang_gpu_builtin_vars.h +71 -0
  9. package/lib/clang/23/include/__clang_gpu_device_functions.h +411 -0
  10. package/lib/clang/23/include/__clang_gpu_intrinsics.h +242 -0
  11. package/lib/clang/{21 → 23}/include/__clang_hip_libdevice_declares.h +14 -121
  12. package/lib/clang/{21 → 23}/include/__clang_hip_math.h +5 -5
  13. package/lib/clang/{21 → 23}/include/__clang_hip_runtime_wrapper.h +9 -1
  14. package/lib/clang/{21 → 23}/include/__clang_spirv_builtins.h +12 -12
  15. package/lib/clang/23/include/__clang_spirv_libdevice_declares.h +170 -0
  16. package/lib/clang/23/include/__clang_spirv_math.h +719 -0
  17. package/lib/clang/{21/include/float.h → 23/include/__float_float.h} +13 -24
  18. package/lib/clang/23/include/__float_header_macro.h +12 -0
  19. package/lib/clang/23/include/__float_infinity_nan.h +20 -0
  20. package/lib/clang/{21 → 23}/include/altivec.h +79 -9
  21. package/lib/clang/{21 → 23}/include/amdgpuintrin.h +2 -29
  22. package/lib/clang/23/include/amdhsa_abi.h +83 -0
  23. package/lib/clang/23/include/amo.h +220 -0
  24. package/lib/clang/{21 → 23}/include/amxavx512intrin.h +215 -1
  25. package/lib/clang/{21 → 23}/include/amxintrin.h +0 -2
  26. package/lib/clang/{21 → 23}/include/andes_vector.h +5 -0
  27. package/lib/clang/23/include/arm64_neon.h +21 -0
  28. package/lib/clang/{21 → 23}/include/arm64intr.h +10 -0
  29. package/lib/clang/{21 → 23}/include/arm_acle.h +38 -27
  30. package/lib/clang/{21 → 23}/include/arm_neon.h +4140 -3836
  31. package/lib/clang/{21 → 23}/include/arm_sme.h +20 -8
  32. package/lib/clang/{21 → 23}/include/arm_sve.h +4582 -3782
  33. package/lib/clang/{21 → 23}/include/avx10_2_512bf16intrin.h +19 -12
  34. package/lib/clang/{21 → 23}/include/avx10_2_512convertintrin.h +1 -1
  35. package/lib/clang/{21 → 23}/include/avx10_2_512niintrin.h +25 -25
  36. package/lib/clang/{21 → 23}/include/avx10_2_512satcvtdsintrin.h +1 -1
  37. package/lib/clang/{21 → 23}/include/avx10_2bf16intrin.h +54 -45
  38. package/lib/clang/{21 → 23}/include/avx10_2convertintrin.h +2 -2
  39. package/lib/clang/{21 → 23}/include/avx10_2copyintrin.h +1 -1
  40. package/lib/clang/{21 → 23}/include/avx10_2niintrin.h +2 -2
  41. package/lib/clang/{21 → 23}/include/avx10_2satcvtdsintrin.h +2 -2
  42. package/lib/clang/{21 → 23}/include/avx2intrin.h +279 -382
  43. package/lib/clang/{21 → 23}/include/avx512bf16intrin.h +25 -16
  44. package/lib/clang/{21 → 23}/include/avx512bitalgintrin.h +19 -30
  45. package/lib/clang/23/include/avx512bmmintrin.h +174 -0
  46. package/lib/clang/23/include/avx512bmmvlintrin.h +245 -0
  47. package/lib/clang/{21 → 23}/include/avx512bwintrin.h +405 -534
  48. package/lib/clang/23/include/avx512cdintrin.h +112 -0
  49. package/lib/clang/{21 → 23}/include/avx512dqintrin.h +132 -161
  50. package/lib/clang/{21 → 23}/include/avx512fintrin.h +1049 -1485
  51. package/lib/clang/{21 → 23}/include/avx512fp16intrin.h +124 -128
  52. package/lib/clang/23/include/avx512ifmaintrin.h +68 -0
  53. package/lib/clang/23/include/avx512ifmavlintrin.h +138 -0
  54. package/lib/clang/{21 → 23}/include/avx512vbmi2intrin.h +55 -48
  55. package/lib/clang/{21 → 23}/include/avx512vbmiintrin.h +19 -27
  56. package/lib/clang/{21 → 23}/include/avx512vbmivlintrin.h +35 -49
  57. package/lib/clang/{21 → 23}/include/avx512vlbf16intrin.h +32 -22
  58. package/lib/clang/{21 → 23}/include/avx512vlbitalgintrin.h +37 -53
  59. package/lib/clang/{21 → 23}/include/avx512vlbwintrin.h +494 -609
  60. package/lib/clang/23/include/avx512vlcdintrin.h +202 -0
  61. package/lib/clang/{21 → 23}/include/avx512vldqintrin.h +110 -127
  62. package/lib/clang/{21 → 23}/include/avx512vlfp16intrin.h +130 -111
  63. package/lib/clang/{21 → 23}/include/avx512vlintrin.h +1025 -1395
  64. package/lib/clang/{21 → 23}/include/avx512vlvbmi2intrin.h +102 -95
  65. package/lib/clang/{21 → 23}/include/avx512vlvnniintrin.h +50 -52
  66. package/lib/clang/{21 → 23}/include/avx512vlvp2intersectintrin.h +2 -2
  67. package/lib/clang/{21 → 23}/include/avx512vnniintrin.h +42 -45
  68. package/lib/clang/{21 → 23}/include/avx512vp2intersectintrin.h +2 -3
  69. package/lib/clang/{21 → 23}/include/avx512vpopcntdqintrin.h +8 -10
  70. package/lib/clang/{21 → 23}/include/avx512vpopcntdqvlintrin.h +17 -15
  71. package/lib/clang/{21 → 23}/include/avxifmaintrin.h +16 -0
  72. package/lib/clang/{21 → 23}/include/avxintrin.h +165 -241
  73. package/lib/clang/{21 → 23}/include/avxvnniint16intrin.h +118 -99
  74. package/lib/clang/{21 → 23}/include/avxvnniint8intrin.h +56 -32
  75. package/lib/clang/{21 → 23}/include/avxvnniintrin.h +39 -26
  76. package/lib/clang/{21 → 23}/include/cpuid.h +101 -4
  77. package/lib/clang/{21 → 23}/include/crc32intrin.h +10 -8
  78. package/lib/clang/23/include/cuda_wrappers/__utility/declval.h +28 -0
  79. package/lib/clang/{21 → 23}/include/emmintrin.h +176 -176
  80. package/lib/clang/23/include/endian.h +91 -0
  81. package/lib/clang/{21 → 23}/include/f16cintrin.h +23 -9
  82. package/lib/clang/23/include/float.h +48 -0
  83. package/lib/clang/23/include/fma4intrin.h +220 -0
  84. package/lib/clang/{21 → 23}/include/fmaintrin.h +96 -66
  85. package/lib/clang/{21 → 23}/include/gfniintrin.h +21 -16
  86. package/lib/clang/{21 → 23}/include/gpuintrin.h +129 -109
  87. package/lib/clang/{21 → 23}/include/hexagon_types.h +23 -20
  88. package/lib/clang/23/include/hlsl/hlsl_alias_intrinsics.h +222 -0
  89. package/lib/clang/{21/include/hlsl/hlsl_alias_intrinsics.h → 23/include/hlsl/hlsl_alias_intrinsics_gen.inc} +2090 -1032
  90. package/lib/clang/23/include/hlsl/hlsl_basic_types.h +370 -0
  91. package/lib/clang/{21 → 23}/include/hlsl/hlsl_compat_overloads.h +150 -18
  92. package/lib/clang/{21 → 23}/include/hlsl/hlsl_detail.h +6 -4
  93. package/lib/clang/23/include/hlsl/hlsl_inline_intrinsics_gen.inc +546 -0
  94. package/lib/clang/{21 → 23}/include/hlsl/hlsl_intrinsic_helpers.h +71 -45
  95. package/lib/clang/23/include/hlsl/hlsl_intrinsics.h +331 -0
  96. package/lib/clang/{21 → 23}/include/hvx_hexagon_protos.h +724 -913
  97. package/lib/clang/{21 → 23}/include/immintrin.h +4 -14
  98. package/lib/clang/{21 → 23}/include/intrin.h +24 -10
  99. package/lib/clang/{21 → 23}/include/larchintrin.h +2 -0
  100. package/lib/clang/{21 → 23}/include/lasxintrin.h +113 -0
  101. package/lib/clang/{21 → 23}/include/llvm_libc_wrappers/assert.h +3 -5
  102. package/lib/clang/23/include/llvm_libc_wrappers/ctype.h +29 -0
  103. package/lib/clang/{21 → 23}/include/llvm_libc_wrappers/inttypes.h +3 -5
  104. package/lib/clang/23/include/llvm_libc_wrappers/stdio.h +52 -0
  105. package/lib/clang/23/include/llvm_libc_wrappers/stdlib.h +32 -0
  106. package/lib/clang/23/include/llvm_libc_wrappers/string.h +29 -0
  107. package/lib/clang/{21 → 23}/include/llvm_libc_wrappers/time.h +4 -10
  108. package/lib/clang/{21 → 23}/include/mmintrin.h +188 -257
  109. package/lib/clang/{21 → 23}/include/module.modulemap +39 -5
  110. package/lib/clang/{21 → 23}/include/movrs_avx10_2_512intrin.h +2 -2
  111. package/lib/clang/{21 → 23}/include/movrs_avx10_2intrin.h +4 -4
  112. package/lib/clang/{21 → 23}/include/nvptxintrin.h +15 -26
  113. package/lib/clang/{21 → 23}/include/opencl-c-base.h +7 -93
  114. package/lib/clang/{21 → 23}/include/opencl-c.h +225 -118
  115. package/lib/clang/{21 → 23}/include/openmp_wrappers/__clang_openmp_device_functions.h +14 -0
  116. package/lib/clang/{21 → 23}/include/openmp_wrappers/complex +7 -1
  117. package/lib/clang/{21 → 23}/include/openmp_wrappers/complex.h +6 -0
  118. package/lib/clang/{21 → 23}/include/openmp_wrappers/math.h +10 -0
  119. package/lib/clang/{21 → 23}/include/pmmintrin.h +12 -24
  120. package/lib/clang/{21 → 23}/include/ptrauth.h +104 -12
  121. package/lib/clang/{21 → 23}/include/riscv_bitmanip.h +7 -0
  122. package/lib/clang/{21 → 23}/include/riscv_corev_alu.h +2 -0
  123. package/lib/clang/{21 → 23}/include/riscv_crypto.h +8 -0
  124. package/lib/clang/23/include/riscv_mips.h +36 -0
  125. package/lib/clang/23/include/riscv_nds.h +92 -0
  126. package/lib/clang/{21 → 23}/include/riscv_ntlh.h +2 -0
  127. package/lib/clang/23/include/riscv_packed_simd.h +644 -0
  128. package/lib/clang/{21 → 23}/include/riscv_vector.h +43 -0
  129. package/lib/clang/{21 → 23}/include/sifive_vector.h +76 -2
  130. package/lib/clang/{21 → 23}/include/sm4evexintrin.h +2 -2
  131. package/lib/clang/{21 → 23}/include/smmintrin.h +77 -59
  132. package/lib/clang/23/include/spirvintrin.h +167 -0
  133. package/lib/clang/23/include/stddefer.h +19 -0
  134. package/lib/clang/{21 → 23}/include/stdint.h +5 -14
  135. package/lib/clang/{21 → 23}/include/tmmintrin.h +116 -147
  136. package/lib/clang/{21 → 23}/include/vaesintrin.h +1 -2
  137. package/lib/clang/{21 → 23}/include/vecintrin.h +1 -1
  138. package/lib/clang/{21 → 23}/include/wasm_simd128.h +17 -0
  139. package/lib/clang/{21 → 23}/include/xmmintrin.h +50 -75
  140. package/lib/clang/{21 → 23}/include/xopintrin.h +20 -10
  141. package/lib/clang/23/include/zos_wrappers/grp.h +19 -0
  142. package/lib/clang/23/include/zos_wrappers/locale.h +19 -0
  143. package/lib/clang/23/include/zos_wrappers/math.h +31 -0
  144. package/lib/clang/23/include/zos_wrappers/poll.h +19 -0
  145. package/lib/clang/23/include/zos_wrappers/stdlib.h +20 -0
  146. package/lib/clang/23/include/zos_wrappers/string.h +19 -0
  147. package/lib/clang/23/include/zos_wrappers/time.h +19 -0
  148. package/lib/clang/23/include/zos_wrappers/variant.h +19 -0
  149. package/package.json +6 -6
  150. package/lib/clang/21/include/__clang_cuda_complex_builtins.h +0 -285
  151. package/lib/clang/21/include/amxbf16transposeintrin.h +0 -94
  152. package/lib/clang/21/include/amxcomplextransposeintrin.h +0 -303
  153. package/lib/clang/21/include/amxfp16transposeintrin.h +0 -94
  154. package/lib/clang/21/include/amxmovrstransposeintrin.h +0 -200
  155. package/lib/clang/21/include/amxtf32intrin.h +0 -108
  156. package/lib/clang/21/include/amxtf32transposeintrin.h +0 -105
  157. package/lib/clang/21/include/amxtransposeintrin.h +0 -248
  158. package/lib/clang/21/include/avx512cdintrin.h +0 -125
  159. package/lib/clang/21/include/avx512ifmaintrin.h +0 -70
  160. package/lib/clang/21/include/avx512ifmavlintrin.h +0 -111
  161. package/lib/clang/21/include/avx512vlcdintrin.h +0 -230
  162. package/lib/clang/21/include/fma4intrin.h +0 -218
  163. package/lib/clang/21/include/hlsl/hlsl_basic_types.h +0 -120
  164. package/lib/clang/21/include/hlsl/hlsl_intrinsics.h +0 -526
  165. package/lib/clang/21/include/llvm_libc_wrappers/ctype.h +0 -140
  166. package/lib/clang/21/include/llvm_libc_wrappers/stdio.h +0 -80
  167. package/lib/clang/21/include/llvm_libc_wrappers/stdlib.h +0 -53
  168. package/lib/clang/21/include/llvm_libc_wrappers/string.h +0 -96
  169. /package/lib/clang/{21 → 23}/include/__clang_cuda_builtin_vars.h +0 -0
  170. /package/lib/clang/{21 → 23}/include/__clang_cuda_cmath.h +0 -0
  171. /package/lib/clang/{21 → 23}/include/__clang_cuda_libdevice_declares.h +0 -0
  172. /package/lib/clang/{21 → 23}/include/__clang_cuda_math.h +0 -0
  173. /package/lib/clang/{21 → 23}/include/__clang_cuda_texture_intrinsics.h +0 -0
  174. /package/lib/clang/{21 → 23}/include/__clang_hip_cmath.h +0 -0
  175. /package/lib/clang/{21 → 23}/include/__clang_hip_stdlib.h +0 -0
  176. /package/lib/clang/{21 → 23}/include/__stdarg___gnuc_va_list.h +0 -0
  177. /package/lib/clang/{21 → 23}/include/__stdarg___va_copy.h +0 -0
  178. /package/lib/clang/{21 → 23}/include/__stdarg_header_macro.h +0 -0
  179. /package/lib/clang/{21 → 23}/include/__stdarg_va_arg.h +0 -0
  180. /package/lib/clang/{21 → 23}/include/__stdarg_va_copy.h +0 -0
  181. /package/lib/clang/{21 → 23}/include/__stdarg_va_list.h +0 -0
  182. /package/lib/clang/{21 → 23}/include/__stddef_header_macro.h +0 -0
  183. /package/lib/clang/{21 → 23}/include/__stddef_max_align_t.h +0 -0
  184. /package/lib/clang/{21 → 23}/include/__stddef_null.h +0 -0
  185. /package/lib/clang/{21 → 23}/include/__stddef_nullptr_t.h +0 -0
  186. /package/lib/clang/{21 → 23}/include/__stddef_offsetof.h +0 -0
  187. /package/lib/clang/{21 → 23}/include/__stddef_ptrdiff_t.h +0 -0
  188. /package/lib/clang/{21 → 23}/include/__stddef_rsize_t.h +0 -0
  189. /package/lib/clang/{21 → 23}/include/__stddef_size_t.h +0 -0
  190. /package/lib/clang/{21 → 23}/include/__stddef_unreachable.h +0 -0
  191. /package/lib/clang/{21 → 23}/include/__stddef_wchar_t.h +0 -0
  192. /package/lib/clang/{21 → 23}/include/__stddef_wint_t.h +0 -0
  193. /package/lib/clang/{21 → 23}/include/__wmmintrin_aes.h +0 -0
  194. /package/lib/clang/{21 → 23}/include/__wmmintrin_pclmul.h +0 -0
  195. /package/lib/clang/{21 → 23}/include/adcintrin.h +0 -0
  196. /package/lib/clang/{21 → 23}/include/adxintrin.h +0 -0
  197. /package/lib/clang/{21 → 23}/include/ammintrin.h +0 -0
  198. /package/lib/clang/{21 → 23}/include/amxcomplexintrin.h +0 -0
  199. /package/lib/clang/{21 → 23}/include/amxfp16intrin.h +0 -0
  200. /package/lib/clang/{21 → 23}/include/amxfp8intrin.h +0 -0
  201. /package/lib/clang/{21 → 23}/include/amxmovrsintrin.h +0 -0
  202. /package/lib/clang/{21 → 23}/include/arm_bf16.h +0 -0
  203. /package/lib/clang/{21 → 23}/include/arm_cde.h +0 -0
  204. /package/lib/clang/{21 → 23}/include/arm_cmse.h +0 -0
  205. /package/lib/clang/{21 → 23}/include/arm_fp16.h +0 -0
  206. /package/lib/clang/{21 → 23}/include/arm_mve.h +0 -0
  207. /package/lib/clang/{21 → 23}/include/arm_neon_sve_bridge.h +0 -0
  208. /package/lib/clang/{21 → 23}/include/arm_vector_types.h +0 -0
  209. /package/lib/clang/{21 → 23}/include/armintr.h +0 -0
  210. /package/lib/clang/{21 → 23}/include/avx10_2_512minmaxintrin.h +0 -0
  211. /package/lib/clang/{21 → 23}/include/avx10_2_512satcvtintrin.h +0 -0
  212. /package/lib/clang/{21 → 23}/include/avx10_2minmaxintrin.h +0 -0
  213. /package/lib/clang/{21 → 23}/include/avx10_2satcvtintrin.h +0 -0
  214. /package/lib/clang/{21 → 23}/include/avxneconvertintrin.h +0 -0
  215. /package/lib/clang/{21 → 23}/include/bmi2intrin.h +0 -0
  216. /package/lib/clang/{21 → 23}/include/bmiintrin.h +0 -0
  217. /package/lib/clang/{21 → 23}/include/builtins.h +0 -0
  218. /package/lib/clang/{21 → 23}/include/cet.h +0 -0
  219. /package/lib/clang/{21 → 23}/include/cetintrin.h +0 -0
  220. /package/lib/clang/{21 → 23}/include/cldemoteintrin.h +0 -0
  221. /package/lib/clang/{21 → 23}/include/clflushoptintrin.h +0 -0
  222. /package/lib/clang/{21 → 23}/include/clwbintrin.h +0 -0
  223. /package/lib/clang/{21 → 23}/include/clzerointrin.h +0 -0
  224. /package/lib/clang/{21 → 23}/include/cmpccxaddintrin.h +0 -0
  225. /package/lib/clang/{21 → 23}/include/cuda_wrappers/algorithm +0 -0
  226. /package/lib/clang/{21 → 23}/include/cuda_wrappers/bits/basic_string.h +0 -0
  227. /package/lib/clang/{21 → 23}/include/cuda_wrappers/bits/basic_string.tcc +0 -0
  228. /package/lib/clang/{21 → 23}/include/cuda_wrappers/bits/c++config.h +0 -0
  229. /package/lib/clang/{21 → 23}/include/cuda_wrappers/bits/shared_ptr_base.h +0 -0
  230. /package/lib/clang/{21 → 23}/include/cuda_wrappers/cmath +0 -0
  231. /package/lib/clang/{21 → 23}/include/cuda_wrappers/complex +0 -0
  232. /package/lib/clang/{21 → 23}/include/cuda_wrappers/new +0 -0
  233. /package/lib/clang/{21 → 23}/include/enqcmdintrin.h +0 -0
  234. /package/lib/clang/{21 → 23}/include/fxsrintrin.h +0 -0
  235. /package/lib/clang/{21 → 23}/include/hexagon_circ_brev_intrinsics.h +0 -0
  236. /package/lib/clang/{21 → 23}/include/hexagon_protos.h +0 -0
  237. /package/lib/clang/{21 → 23}/include/hlsl/hlsl_spirv.h +0 -0
  238. /package/lib/clang/{21 → 23}/include/hlsl.h +0 -0
  239. /package/lib/clang/{21 → 23}/include/hresetintrin.h +0 -0
  240. /package/lib/clang/{21 → 23}/include/htmintrin.h +0 -0
  241. /package/lib/clang/{21 → 23}/include/htmxlintrin.h +0 -0
  242. /package/lib/clang/{21 → 23}/include/ia32intrin.h +0 -0
  243. /package/lib/clang/{21 → 23}/include/intrin0.h +0 -0
  244. /package/lib/clang/{21 → 23}/include/inttypes.h +0 -0
  245. /package/lib/clang/{21 → 23}/include/invpcidintrin.h +0 -0
  246. /package/lib/clang/{21 → 23}/include/iso646.h +0 -0
  247. /package/lib/clang/{21 → 23}/include/keylockerintrin.h +0 -0
  248. /package/lib/clang/{21 → 23}/include/limits.h +0 -0
  249. /package/lib/clang/{21 → 23}/include/llvm_offload_wrappers/__llvm_offload.h +0 -0
  250. /package/lib/clang/{21 → 23}/include/llvm_offload_wrappers/__llvm_offload_device.h +0 -0
  251. /package/lib/clang/{21 → 23}/include/llvm_offload_wrappers/__llvm_offload_host.h +0 -0
  252. /package/lib/clang/{21 → 23}/include/lsxintrin.h +0 -0
  253. /package/lib/clang/{21 → 23}/include/lwpintrin.h +0 -0
  254. /package/lib/clang/{21 → 23}/include/lzcntintrin.h +0 -0
  255. /package/lib/clang/{21 → 23}/include/mm3dnow.h +0 -0
  256. /package/lib/clang/{21 → 23}/include/mm_malloc.h +0 -0
  257. /package/lib/clang/{21 → 23}/include/movdirintrin.h +0 -0
  258. /package/lib/clang/{21 → 23}/include/movrsintrin.h +0 -0
  259. /package/lib/clang/{21 → 23}/include/msa.h +0 -0
  260. /package/lib/clang/{21 → 23}/include/mwaitxintrin.h +0 -0
  261. /package/lib/clang/{21 → 23}/include/nmmintrin.h +0 -0
  262. /package/lib/clang/{21 → 23}/include/openmp_wrappers/cmath +0 -0
  263. /package/lib/clang/{21 → 23}/include/openmp_wrappers/complex_cmath.h +0 -0
  264. /package/lib/clang/{21 → 23}/include/openmp_wrappers/new +0 -0
  265. /package/lib/clang/{21 → 23}/include/pconfigintrin.h +0 -0
  266. /package/lib/clang/{21 → 23}/include/pkuintrin.h +0 -0
  267. /package/lib/clang/{21 → 23}/include/popcntintrin.h +0 -0
  268. /package/lib/clang/{21 → 23}/include/ppc_wrappers/bmi2intrin.h +0 -0
  269. /package/lib/clang/{21 → 23}/include/ppc_wrappers/bmiintrin.h +0 -0
  270. /package/lib/clang/{21 → 23}/include/ppc_wrappers/emmintrin.h +0 -0
  271. /package/lib/clang/{21 → 23}/include/ppc_wrappers/immintrin.h +0 -0
  272. /package/lib/clang/{21 → 23}/include/ppc_wrappers/mm_malloc.h +0 -0
  273. /package/lib/clang/{21 → 23}/include/ppc_wrappers/mmintrin.h +0 -0
  274. /package/lib/clang/{21 → 23}/include/ppc_wrappers/nmmintrin.h +0 -0
  275. /package/lib/clang/{21 → 23}/include/ppc_wrappers/pmmintrin.h +0 -0
  276. /package/lib/clang/{21 → 23}/include/ppc_wrappers/smmintrin.h +0 -0
  277. /package/lib/clang/{21 → 23}/include/ppc_wrappers/tmmintrin.h +0 -0
  278. /package/lib/clang/{21 → 23}/include/ppc_wrappers/x86gprintrin.h +0 -0
  279. /package/lib/clang/{21 → 23}/include/ppc_wrappers/x86intrin.h +0 -0
  280. /package/lib/clang/{21 → 23}/include/ppc_wrappers/xmmintrin.h +0 -0
  281. /package/lib/clang/{21 → 23}/include/prfchiintrin.h +0 -0
  282. /package/lib/clang/{21 → 23}/include/prfchwintrin.h +0 -0
  283. /package/lib/clang/{21 → 23}/include/ptwriteintrin.h +0 -0
  284. /package/lib/clang/{21 → 23}/include/raointintrin.h +0 -0
  285. /package/lib/clang/{21 → 23}/include/rdpruintrin.h +0 -0
  286. /package/lib/clang/{21 → 23}/include/rdseedintrin.h +0 -0
  287. /package/lib/clang/{21 → 23}/include/rtmintrin.h +0 -0
  288. /package/lib/clang/{21 → 23}/include/s390intrin.h +0 -0
  289. /package/lib/clang/{21 → 23}/include/serializeintrin.h +0 -0
  290. /package/lib/clang/{21 → 23}/include/sgxintrin.h +0 -0
  291. /package/lib/clang/{21 → 23}/include/sha512intrin.h +0 -0
  292. /package/lib/clang/{21 → 23}/include/shaintrin.h +0 -0
  293. /package/lib/clang/{21 → 23}/include/sm3intrin.h +0 -0
  294. /package/lib/clang/{21 → 23}/include/sm4intrin.h +0 -0
  295. /package/lib/clang/{21 → 23}/include/stdalign.h +0 -0
  296. /package/lib/clang/{21 → 23}/include/stdarg.h +0 -0
  297. /package/lib/clang/{21 → 23}/include/stdatomic.h +0 -0
  298. /package/lib/clang/{21 → 23}/include/stdbool.h +0 -0
  299. /package/lib/clang/{21 → 23}/include/stdckdint.h +0 -0
  300. /package/lib/clang/{21 → 23}/include/stdcountof.h +0 -0
  301. /package/lib/clang/{21 → 23}/include/stddef.h +0 -0
  302. /package/lib/clang/{21 → 23}/include/stdnoreturn.h +0 -0
  303. /package/lib/clang/{21 → 23}/include/tbmintrin.h +0 -0
  304. /package/lib/clang/{21 → 23}/include/tgmath.h +0 -0
  305. /package/lib/clang/{21 → 23}/include/tsxldtrkintrin.h +0 -0
  306. /package/lib/clang/{21 → 23}/include/uintrintrin.h +0 -0
  307. /package/lib/clang/{21 → 23}/include/unwind.h +0 -0
  308. /package/lib/clang/{21 → 23}/include/usermsrintrin.h +0 -0
  309. /package/lib/clang/{21 → 23}/include/vadefs.h +0 -0
  310. /package/lib/clang/{21 → 23}/include/varargs.h +0 -0
  311. /package/lib/clang/{21 → 23}/include/velintrin.h +0 -0
  312. /package/lib/clang/{21 → 23}/include/velintrin_approx.h +0 -0
  313. /package/lib/clang/{21 → 23}/include/velintrin_gen.h +0 -0
  314. /package/lib/clang/{21 → 23}/include/vpclmulqdqintrin.h +0 -0
  315. /package/lib/clang/{21 → 23}/include/waitpkgintrin.h +0 -0
  316. /package/lib/clang/{21 → 23}/include/wbnoinvdintrin.h +0 -0
  317. /package/lib/clang/{21 → 23}/include/wmmintrin.h +0 -0
  318. /package/lib/clang/{21 → 23}/include/x86gprintrin.h +0 -0
  319. /package/lib/clang/{21 → 23}/include/x86intrin.h +0 -0
  320. /package/lib/clang/{21 → 23}/include/xsavecintrin.h +0 -0
  321. /package/lib/clang/{21 → 23}/include/xsaveintrin.h +0 -0
  322. /package/lib/clang/{21 → 23}/include/xsaveoptintrin.h +0 -0
  323. /package/lib/clang/{21 → 23}/include/xsavesintrin.h +0 -0
  324. /package/lib/clang/{21 → 23}/include/xtestintrin.h +0 -0
  325. /package/lib/clang/{21 → 23}/include/yvals_core.h +0 -0
  326. /package/lib/clang/{21 → 23}/include/zos_wrappers/builtins.h +0 -0
@@ -12,22 +12,15 @@
12
12
  namespace hlsl {
13
13
  namespace __detail {
14
14
 
15
- constexpr vector<uint, 4> d3d_color_to_ubyte4_impl(vector<float, 4> V) {
16
- // Use the same scaling factor used by FXC, and DXC for DXIL
17
- // (i.e., 255.001953)
18
- // https://github.com/microsoft/DirectXShaderCompiler/blob/070d0d5a2beacef9eeb51037a9b04665716fd6f3/lib/HLSL/HLOperationLower.cpp#L666C1-L697C2
19
- // The DXC implementation refers to a comment on the following stackoverflow
20
- // discussion to justify the scaling factor: "Built-in rounding, necessary
21
- // because of truncation. 0.001953 * 256 = 0.5"
22
- // https://stackoverflow.com/questions/52103720/why-does-d3dcolortoubyte4-multiplies-components-by-255-001953f
23
- return V.zyxw * 255.001953f;
15
+ template <typename T>
16
+ constexpr enable_if_t<is_same<float, T>::value || is_same<half, T>::value, T>
17
+ length_impl(T X) {
18
+ return abs(X);
24
19
  }
25
20
 
26
- template <typename T> constexpr T length_impl(T X) { return abs(X); }
27
-
28
21
  template <typename T, int N>
29
22
  constexpr enable_if_t<is_same<float, T>::value || is_same<half, T>::value, T>
30
- length_vec_impl(vector<T, N> X) {
23
+ length_impl(vector<T, N> X) {
31
24
  #if (__has_builtin(__builtin_spirv_length))
32
25
  return __builtin_spirv_length(X);
33
26
  #else
@@ -35,21 +28,6 @@ length_vec_impl(vector<T, N> X) {
35
28
  #endif
36
29
  }
37
30
 
38
- template <typename T>
39
- constexpr vector<T, 4> dst_impl(vector<T, 4> Src0, vector<T, 4> Src1) {
40
- return {1, Src0[1] * Src1[1], Src0[2], Src1[3]};
41
- }
42
-
43
- template <typename T> constexpr T distance_impl(T X, T Y) {
44
- return length_impl(X - Y);
45
- }
46
-
47
- template <typename T, int N>
48
- constexpr enable_if_t<is_same<float, T>::value || is_same<half, T>::value, T>
49
- distance_vec_impl(vector<T, N> X, vector<T, N> Y) {
50
- return length_vec_impl(X - Y);
51
- }
52
-
53
31
  constexpr float dot2add_impl(half2 a, half2 b, float c) {
54
32
  #if (__has_builtin(__builtin_dx_dot2add))
55
33
  return __builtin_dx_dot2add(a, b, c);
@@ -58,12 +36,29 @@ constexpr float dot2add_impl(half2 a, half2 b, float c) {
58
36
  #endif
59
37
  }
60
38
 
61
- template <typename T> constexpr T reflect_impl(T I, T N) {
39
+ template <typename T, int N>
40
+ constexpr enable_if_t<!is_same<double, T>::value, T>
41
+ mul_vec_impl(vector<T, N> x, vector<T, N> y) {
42
+ return dot(x, y);
43
+ }
44
+
45
+ // Double vectors do not have a dot intrinsic, so expand manually.
46
+ template <typename T, int N>
47
+ enable_if_t<is_same<double, T>::value, T> mul_vec_impl(vector<T, N> x,
48
+ vector<T, N> y) {
49
+ T sum = x[0] * y[0];
50
+ [unroll] for (int i = 1; i < N; ++i) sum = mad(x[i], y[i], sum);
51
+ return sum;
52
+ }
53
+
54
+ template <typename T>
55
+ constexpr enable_if_t<is_same<float, T>::value || is_same<half, T>::value, T>
56
+ reflect_impl(T I, T N) {
62
57
  return I - 2 * N * I * N;
63
58
  }
64
59
 
65
60
  template <typename T, int L>
66
- constexpr vector<T, L> reflect_vec_impl(vector<T, L> I, vector<T, L> N) {
61
+ constexpr vector<T, L> reflect_impl(vector<T, L> I, vector<T, L> N) {
67
62
  #if (__has_builtin(__builtin_spirv_reflect))
68
63
  return __builtin_spirv_reflect(I, N);
69
64
  #else
@@ -71,6 +66,16 @@ constexpr vector<T, L> reflect_vec_impl(vector<T, L> I, vector<T, L> N) {
71
66
  #endif
72
67
  }
73
68
 
69
+ template <typename T, typename U> constexpr T refract_impl(T I, T N, U Eta) {
70
+ #if (__has_builtin(__builtin_spirv_refract))
71
+ return __builtin_spirv_refract(I, N, Eta);
72
+ #endif
73
+ T Mul = dot(N, I);
74
+ T K = 1 - Eta * Eta * (1 - Mul * Mul);
75
+ T Result = (Eta * I - (Eta * Mul + sqrt(K)) * N);
76
+ return select<T>(K < 0, static_cast<T>(0), Result);
77
+ }
78
+
74
79
  template <typename T> constexpr T fmod_impl(T X, T Y) {
75
80
  #if !defined(__DIRECTX__)
76
81
  return __builtin_elementwise_fmod(X, Y);
@@ -103,17 +108,6 @@ template <typename T> constexpr T smoothstep_impl(T Min, T Max, T X) {
103
108
  #endif
104
109
  }
105
110
 
106
- template <typename T, int N>
107
- constexpr vector<T, N> smoothstep_vec_impl(vector<T, N> Min, vector<T, N> Max,
108
- vector<T, N> X) {
109
- #if (__has_builtin(__builtin_spirv_smoothstep))
110
- return __builtin_spirv_smoothstep(Min, Max, X);
111
- #else
112
- vector<T, N> S = saturate((X - Min) / (Max - Min));
113
- return (3 - 2 * S) * S * S;
114
- #endif
115
- }
116
-
117
111
  template <typename T> constexpr vector<T, 4> lit_impl(T NDotL, T NDotH, T M) {
118
112
  bool DiffuseCond = NDotL < 0;
119
113
  T Diffuse = select<T>(DiffuseCond, 0, NDotL);
@@ -127,15 +121,47 @@ template <typename T> constexpr vector<T, 4> lit_impl(T NDotL, T NDotH, T M) {
127
121
  }
128
122
 
129
123
  template <typename T> constexpr T faceforward_impl(T N, T I, T Ng) {
130
- #if (__has_builtin(__builtin_spirv_faceforward))
131
- return __builtin_spirv_faceforward(N, I, Ng);
124
+ return select<T>(dot(I, Ng) < 0, N, -N);
125
+ }
126
+
127
+ template <typename K, typename T, int BitWidth>
128
+ constexpr K firstbithigh_impl(T X) {
129
+ K FBH = __builtin_hlsl_elementwise_firstbithigh(X);
130
+ #if defined(__DIRECTX__)
131
+ // The firstbithigh DXIL ops count bits from the wrong side, so we need to
132
+ // invert it for DirectX.
133
+ K Inversion = (BitWidth - 1) - FBH;
134
+ FBH = select(FBH == -1, FBH, Inversion);
135
+ #endif
136
+ return FBH;
137
+ }
138
+
139
+ template <typename T> constexpr T ddx_impl(T input) {
140
+ #if (__has_builtin(__builtin_spirv_ddx))
141
+ return __builtin_spirv_ddx(input);
142
+ #else
143
+ return __builtin_hlsl_elementwise_ddx_coarse(input);
144
+ #endif
145
+ }
146
+
147
+ template <typename T> constexpr T ddy_impl(T input) {
148
+ #if (__has_builtin(__builtin_spirv_ddy))
149
+ return __builtin_spirv_ddy(input);
132
150
  #else
133
- return select(dot(I, Ng) < 0, N, -N);
151
+ return __builtin_hlsl_elementwise_ddy_coarse(input);
134
152
  #endif
135
153
  }
136
154
 
137
- template <typename T> constexpr T ldexp_impl(T X, T Exp) {
138
- return exp2(Exp) * X;
155
+ template <typename T> constexpr T fwidth_impl(T input) {
156
+ #if (__has_builtin(__builtin_spirv_fwidth))
157
+ return __builtin_spirv_fwidth(input);
158
+ #else
159
+ T derivCoarseX = ddx_coarse(input);
160
+ derivCoarseX = abs(derivCoarseX);
161
+ T derivCoarseY = ddy_coarse(input);
162
+ derivCoarseY = abs(derivCoarseY);
163
+ return derivCoarseX + derivCoarseY;
164
+ #endif
139
165
  }
140
166
 
141
167
  } // namespace __detail
@@ -0,0 +1,331 @@
1
+ //===----- hlsl_intrinsics.h - HLSL definitions for intrinsics ----------===//
2
+ //
3
+ // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
+ // See https://llvm.org/LICENSE.txt for license information.
5
+ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
+ //
7
+ //===----------------------------------------------------------------------===//
8
+
9
+ #ifndef _HLSL_HLSL_INTRINSICS_H_
10
+ #define _HLSL_HLSL_INTRINSICS_H_
11
+
12
+ #include "hlsl/hlsl_intrinsic_helpers.h"
13
+
14
+ namespace hlsl {
15
+
16
+ // Generated by clang-tblgen from HLSLIntrinsics.td (detail/inline intrinsics).
17
+ #include "hlsl_inline_intrinsics_gen.inc"
18
+
19
+ //===----------------------------------------------------------------------===//
20
+ // asfloat builtins
21
+ //===----------------------------------------------------------------------===//
22
+
23
+ /// \fn float asfloat(T Val)
24
+ /// \brief Interprets the bit pattern of x as float point number.
25
+ /// \param Val The input value.
26
+
27
+ template <typename T, int R, int C>
28
+ constexpr matrix<float, R, C> asfloat(matrix<T, R, C> V) {
29
+ return __detail::bit_cast<float, T, R, C>(V);
30
+ }
31
+
32
+ template <typename T, int N>
33
+ constexpr vector<float, N> asfloat(vector<T, N> V) {
34
+ return __detail::bit_cast<float, T, N>(V);
35
+ }
36
+
37
+ template <typename T> constexpr float asfloat(T F) {
38
+ return __detail::bit_cast<float, T>(F);
39
+ }
40
+
41
+ //===----------------------------------------------------------------------===//
42
+ // asint builtins
43
+ //===----------------------------------------------------------------------===//
44
+
45
+ /// \fn int asint(T Val)
46
+ /// \brief Interprets the bit pattern of x as an integer.
47
+ /// \param Val The input value.
48
+
49
+ template <typename T, int R, int C>
50
+ constexpr matrix<int, R, C> asint(matrix<T, R, C> V) {
51
+ return __detail::bit_cast<int, T, R, C>(V);
52
+ }
53
+
54
+ template <typename T, int N> constexpr vector<int, N> asint(vector<T, N> V) {
55
+ return __detail::bit_cast<int, T, N>(V);
56
+ }
57
+
58
+ template <typename T> constexpr int asint(T F) {
59
+ return __detail::bit_cast<int, T>(F);
60
+ }
61
+
62
+ //===----------------------------------------------------------------------===//
63
+ // asint16 builtins
64
+ //===----------------------------------------------------------------------===//
65
+
66
+ /// \fn int16_t asint16(T X)
67
+ /// \brief Interprets the bit pattern of \a X as an 16-bit integer.
68
+ /// \param X The input value.
69
+
70
+ #ifdef __HLSL_ENABLE_16_BIT
71
+
72
+ template <typename T, int N>
73
+ _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
74
+ constexpr __detail::enable_if_t<__detail::is_same<int16_t, T>::value ||
75
+ __detail::is_same<uint16_t, T>::value ||
76
+ __detail::is_same<half, T>::value,
77
+ vector<int16_t, N>> asint16(vector<T, N> V) {
78
+ return __detail::bit_cast<int16_t, T, N>(V);
79
+ }
80
+
81
+ template <typename T>
82
+ _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
83
+ constexpr __detail::enable_if_t<__detail::is_same<int16_t, T>::value ||
84
+ __detail::is_same<uint16_t, T>::value ||
85
+ __detail::is_same<half, T>::value,
86
+ int16_t> asint16(T F) {
87
+ return __detail::bit_cast<int16_t, T>(F);
88
+ }
89
+ #endif
90
+
91
+ //===----------------------------------------------------------------------===//
92
+ // asuint builtins
93
+ //===----------------------------------------------------------------------===//
94
+
95
+ /// \fn uint asuint(T Val)
96
+ /// \brief Interprets the bit pattern of x as an unsigned integer.
97
+ /// \param Val The input value.
98
+
99
+ template <typename T, int R, int C>
100
+ constexpr matrix<uint, R, C> asuint(matrix<T, R, C> V) {
101
+ return __detail::bit_cast<uint, T, R, C>(V);
102
+ }
103
+
104
+ template <typename T, int N> constexpr vector<uint, N> asuint(vector<T, N> V) {
105
+ return __detail::bit_cast<uint, T, N>(V);
106
+ }
107
+
108
+ template <typename T> constexpr uint asuint(T F) {
109
+ return __detail::bit_cast<uint, T>(F);
110
+ }
111
+
112
+ //===----------------------------------------------------------------------===//
113
+ // asuint splitdouble builtins
114
+ //===----------------------------------------------------------------------===//
115
+
116
+ /// \fn void asuint(double D, out uint lowbits, out int highbits)
117
+ /// \brief Split and interprets the lowbits and highbits of double D into uints.
118
+ /// \param D The input double.
119
+ /// \param lowbits The output lowbits of D.
120
+ /// \param highbits The output highbits of D.
121
+ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_splitdouble)
122
+ void asuint(double, out uint, out uint);
123
+ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_splitdouble)
124
+ void asuint(double2, out uint2, out uint2);
125
+ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_splitdouble)
126
+ void asuint(double3, out uint3, out uint3);
127
+ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_splitdouble)
128
+ void asuint(double4, out uint4, out uint4);
129
+ template <int R, int C>
130
+ _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_splitdouble)
131
+ void asuint(matrix<double, R, C>, out matrix<uint, R, C>,
132
+ out matrix<uint, R, C>);
133
+ //===----------------------------------------------------------------------===//
134
+ // asuint16 builtins
135
+ //===----------------------------------------------------------------------===//
136
+
137
+ /// \fn uint16_t asuint16(T X)
138
+ /// \brief Interprets the bit pattern of \a X as an 16-bit unsigned integer.
139
+ /// \param X The input value.
140
+
141
+ #ifdef __HLSL_ENABLE_16_BIT
142
+
143
+ template <typename T, int N>
144
+ _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
145
+ constexpr __detail::enable_if_t<__detail::is_same<int16_t, T>::value ||
146
+ __detail::is_same<uint16_t, T>::value ||
147
+ __detail::is_same<half, T>::value,
148
+ vector<uint16_t, N>> asuint16(vector<T, N> V) {
149
+ return __detail::bit_cast<uint16_t, T, N>(V);
150
+ }
151
+
152
+ template <typename T>
153
+ _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
154
+ constexpr __detail::enable_if_t<__detail::is_same<int16_t, T>::value ||
155
+ __detail::is_same<uint16_t, T>::value ||
156
+ __detail::is_same<half, T>::value,
157
+ uint16_t> asuint16(T F) {
158
+ return __detail::bit_cast<uint16_t, T>(F);
159
+ }
160
+ #endif
161
+
162
+ //===----------------------------------------------------------------------===//
163
+ // firstbithigh builtins
164
+ //===----------------------------------------------------------------------===//
165
+
166
+ /// \fn T firstbithigh(T Val)
167
+ /// \brief Returns the location of the first set bit starting from the lowest
168
+ /// order bit and working upward, per component.
169
+ /// \param Val the input value.
170
+
171
+ #ifdef __HLSL_ENABLE_16_BIT
172
+
173
+ template <typename T>
174
+ _HLSL_AVAILABILITY(shadermodel, 6.2)
175
+ const inline __detail::enable_if_t<__detail::is_same<int16_t, T>::value ||
176
+ __detail::is_same<uint16_t, T>::value,
177
+ uint> firstbithigh(T X) {
178
+ return __detail::firstbithigh_impl<uint, T, 16>(X);
179
+ }
180
+
181
+ template <typename T, int N>
182
+ _HLSL_AVAILABILITY(shadermodel, 6.2)
183
+ const
184
+ inline __detail::enable_if_t<__detail::is_same<int16_t, T>::value ||
185
+ __detail::is_same<uint16_t, T>::value,
186
+ vector<uint, N>> firstbithigh(vector<T, N> X) {
187
+ return __detail::firstbithigh_impl<vector<uint, N>, vector<T, N>, 16>(X);
188
+ }
189
+
190
+ #endif
191
+
192
+ template <typename T>
193
+ const inline __detail::enable_if_t<
194
+ __detail::is_same<int, T>::value || __detail::is_same<uint, T>::value, uint>
195
+ firstbithigh(T X) {
196
+ return __detail::firstbithigh_impl<uint, T, 32>(X);
197
+ }
198
+
199
+ template <typename T, int N>
200
+ const inline __detail::enable_if_t<__detail::is_same<int, T>::value ||
201
+ __detail::is_same<uint, T>::value,
202
+ vector<uint, N>>
203
+ firstbithigh(vector<T, N> X) {
204
+ return __detail::firstbithigh_impl<vector<uint, N>, vector<T, N>, 32>(X);
205
+ }
206
+
207
+ template <typename T>
208
+ const inline __detail::enable_if_t<__detail::is_same<int64_t, T>::value ||
209
+ __detail::is_same<uint64_t, T>::value,
210
+ uint>
211
+ firstbithigh(T X) {
212
+ return __detail::firstbithigh_impl<uint, T, 64>(X);
213
+ }
214
+
215
+ template <typename T, int N>
216
+ const inline __detail::enable_if_t<__detail::is_same<int64_t, T>::value ||
217
+ __detail::is_same<uint64_t, T>::value,
218
+ vector<uint, N>>
219
+ firstbithigh(vector<T, N> X) {
220
+ return __detail::firstbithigh_impl<vector<uint, N>, vector<T, N>, 64>(X);
221
+ }
222
+
223
+ //===----------------------------------------------------------------------===//
224
+ // mul builtins
225
+ //===----------------------------------------------------------------------===//
226
+
227
+ /// \fn R mul(X x, Y y)
228
+ /// \brief Multiplies x and y using matrix math.
229
+ /// \param x [in] The first input value. If x is a vector, it is treated as a
230
+ /// row vector.
231
+ /// \param y [in] The second input value. If y is a vector, it is treated as a
232
+ /// column vector.
233
+ ///
234
+ /// The inner dimension x-columns and y-rows must be equal. The result has the
235
+ /// dimension x-rows x y-columns. When both x and y are vectors, the result is
236
+ /// a dot product (scalar). Scalar operands are multiplied element-wise.
237
+ ///
238
+ /// This function supports 9 overloaded forms:
239
+ /// 1. scalar * scalar -> scalar
240
+ /// 2. scalar * vector -> vector
241
+ /// 3. scalar * matrix -> matrix
242
+ /// 4. vector * scalar -> vector
243
+ /// 5. vector * vector -> scalar (dot product)
244
+ /// 6. vector * matrix -> vector
245
+ /// 7. matrix * scalar -> matrix
246
+ /// 8. matrix * vector -> vector
247
+ /// 9. matrix * matrix -> matrix
248
+
249
+ // Cases 1, 2, 3, 4, 5, and 7 of mul are defined below as
250
+ // header-only implementations because they are elementwise operations and dot
251
+ // products easily expressed in HLSL.
252
+
253
+ // Cases 6, 8, and 9 are defined in hlsl_alias_intrinsics.h to alias the mul
254
+ // builtin so that they can be lowered to the llvm.matrix.multiply intrinsic
255
+ // which is not exposed directly to HLSL.
256
+
257
+ // Case 1: scalar * scalar -> scalar
258
+ template <typename T>
259
+ _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
260
+ constexpr __detail::enable_if_t<__detail::is_arithmetic<T>::Value &&
261
+ __detail::is_same<half, T>::value,
262
+ T> mul(T x, T y) {
263
+ return x * y;
264
+ }
265
+
266
+ template <typename T>
267
+ constexpr __detail::enable_if_t<
268
+ __detail::is_arithmetic<T>::Value && !__detail::is_same<half, T>::value, T>
269
+ mul(T x, T y) {
270
+ return x * y;
271
+ }
272
+
273
+ // Case 2: scalar * vector -> vector
274
+ template <int N>
275
+ _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
276
+ constexpr vector<half, N> mul(half x, vector<half, N> y) {
277
+ return x * y;
278
+ }
279
+
280
+ template <typename T, int N> constexpr vector<T, N> mul(T x, vector<T, N> y) {
281
+ return x * y;
282
+ }
283
+
284
+ // Case 3: scalar * matrix -> matrix
285
+ template <int R, int C>
286
+ _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
287
+ constexpr matrix<half, R, C> mul(half x, matrix<half, R, C> y) {
288
+ return x * y;
289
+ }
290
+
291
+ template <typename T, int R, int C>
292
+ constexpr matrix<T, R, C> mul(T x, matrix<T, R, C> y) {
293
+ return x * y;
294
+ }
295
+
296
+ // Case 4: vector * scalar -> vector
297
+ template <int N>
298
+ _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
299
+ constexpr vector<half, N> mul(vector<half, N> x, half y) {
300
+ return x * y;
301
+ }
302
+
303
+ template <typename T, int N> constexpr vector<T, N> mul(vector<T, N> x, T y) {
304
+ return x * y;
305
+ }
306
+
307
+ // Case 5: vector * vector -> scalar (dot product)
308
+ template <int N>
309
+ _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
310
+ half mul(vector<half, N> x, vector<half, N> y) {
311
+ return __detail::mul_vec_impl(x, y);
312
+ }
313
+
314
+ template <typename T, int N> T mul(vector<T, N> x, vector<T, N> y) {
315
+ return __detail::mul_vec_impl(x, y);
316
+ }
317
+
318
+ // Case 7: matrix * scalar -> matrix
319
+ template <int R, int C>
320
+ _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
321
+ constexpr matrix<half, R, C> mul(matrix<half, R, C> x, half y) {
322
+ return x * y;
323
+ }
324
+
325
+ template <typename T, int R, int C>
326
+ constexpr matrix<T, R, C> mul(matrix<T, R, C> x, T y) {
327
+ return x * y;
328
+ }
329
+
330
+ } // namespace hlsl
331
+ #endif //_HLSL_HLSL_INTRINSICS_H_