simde-constify.h 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925
  1. /* SPDX-License-Identifier: MIT
  2. *
  3. * Permission is hereby granted, free of charge, to any person
  4. * obtaining a copy of this software and associated documentation
  5. * files (the "Software"), to deal in the Software without
  6. * restriction, including without limitation the rights to use, copy,
  7. * modify, merge, publish, distribute, sublicense, and/or sell copies
  8. * of the Software, and to permit persons to whom the Software is
  9. * furnished to do so, subject to the following conditions:
  10. *
  11. * The above copyright notice and this permission notice shall be
  12. * included in all copies or substantial portions of the Software.
  13. *
  14. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  15. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  16. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  17. * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  18. * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  19. * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  20. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  21. * SOFTWARE.
  22. *
  23. * Copyright:
  24. * 2020 Evan Nemerson <[email protected]>
  25. */
  26. /* Constify macros. For internal use only.
  27. *
  28. * These are used to make it possible to call a function which takes
  29. * an Integer Constant Expression (ICE) using a compile time constant.
  30. * Technically it would also be possible to use a value not trivially
  31. * known by the compiler, but there would be a siginficant performance
  32. * hit (a switch switch is used).
  33. *
  34. * The basic idea is pretty simple; we just emit a do while loop which
  35. * contains a switch with a case for every possible value of the
  36. * constant.
  37. *
  38. * As long as the value you pass to the function in constant, pretty
  39. * much any copmiler shouldn't have a problem generating exactly the
  40. * same code as if you had used an ICE.
  41. *
  42. * This is intended to be used in the SIMDe implementations of
  43. * functions the compilers require to be an ICE, but the other benefit
  44. * is that if we also disable the warnings from
  45. * SIMDE_REQUIRE_CONSTANT_RANGE we can actually just allow the tests
  46. * to use non-ICE parameters
  47. */
  48. #if !defined(SIMDE_CONSTIFY_H)
  49. #define SIMDE_CONSTIFY_H
  50. #include "simde-diagnostic.h"
  51. HEDLEY_DIAGNOSTIC_PUSH
  52. SIMDE_DIAGNOSTIC_DISABLE_VARIADIC_MACROS_
  53. SIMDE_DIAGNOSTIC_DISABLE_CPP98_COMPAT_PEDANTIC_
  54. #define SIMDE_CONSTIFY_2_(func_name, result, default_case, imm, ...) \
  55. do { \
  56. switch (imm) { \
  57. case 0: \
  58. result = func_name(__VA_ARGS__, 0); \
  59. break; \
  60. case 1: \
  61. result = func_name(__VA_ARGS__, 1); \
  62. break; \
  63. default: \
  64. result = default_case; \
  65. break; \
  66. } \
  67. } while (0)
  68. #define SIMDE_CONSTIFY_4_(func_name, result, default_case, imm, ...) \
  69. do { \
  70. switch (imm) { \
  71. case 0: \
  72. result = func_name(__VA_ARGS__, 0); \
  73. break; \
  74. case 1: \
  75. result = func_name(__VA_ARGS__, 1); \
  76. break; \
  77. case 2: \
  78. result = func_name(__VA_ARGS__, 2); \
  79. break; \
  80. case 3: \
  81. result = func_name(__VA_ARGS__, 3); \
  82. break; \
  83. default: \
  84. result = default_case; \
  85. break; \
  86. } \
  87. } while (0)
  88. #define SIMDE_CONSTIFY_8_(func_name, result, default_case, imm, ...) \
  89. do { \
  90. switch (imm) { \
  91. case 0: \
  92. result = func_name(__VA_ARGS__, 0); \
  93. break; \
  94. case 1: \
  95. result = func_name(__VA_ARGS__, 1); \
  96. break; \
  97. case 2: \
  98. result = func_name(__VA_ARGS__, 2); \
  99. break; \
  100. case 3: \
  101. result = func_name(__VA_ARGS__, 3); \
  102. break; \
  103. case 4: \
  104. result = func_name(__VA_ARGS__, 4); \
  105. break; \
  106. case 5: \
  107. result = func_name(__VA_ARGS__, 5); \
  108. break; \
  109. case 6: \
  110. result = func_name(__VA_ARGS__, 6); \
  111. break; \
  112. case 7: \
  113. result = func_name(__VA_ARGS__, 7); \
  114. break; \
  115. default: \
  116. result = default_case; \
  117. break; \
  118. } \
  119. } while (0)
  120. #define SIMDE_CONSTIFY_16_(func_name, result, default_case, imm, ...) \
  121. do { \
  122. switch (imm) { \
  123. case 0: \
  124. result = func_name(__VA_ARGS__, 0); \
  125. break; \
  126. case 1: \
  127. result = func_name(__VA_ARGS__, 1); \
  128. break; \
  129. case 2: \
  130. result = func_name(__VA_ARGS__, 2); \
  131. break; \
  132. case 3: \
  133. result = func_name(__VA_ARGS__, 3); \
  134. break; \
  135. case 4: \
  136. result = func_name(__VA_ARGS__, 4); \
  137. break; \
  138. case 5: \
  139. result = func_name(__VA_ARGS__, 5); \
  140. break; \
  141. case 6: \
  142. result = func_name(__VA_ARGS__, 6); \
  143. break; \
  144. case 7: \
  145. result = func_name(__VA_ARGS__, 7); \
  146. break; \
  147. case 8: \
  148. result = func_name(__VA_ARGS__, 8); \
  149. break; \
  150. case 9: \
  151. result = func_name(__VA_ARGS__, 9); \
  152. break; \
  153. case 10: \
  154. result = func_name(__VA_ARGS__, 10); \
  155. break; \
  156. case 11: \
  157. result = func_name(__VA_ARGS__, 11); \
  158. break; \
  159. case 12: \
  160. result = func_name(__VA_ARGS__, 12); \
  161. break; \
  162. case 13: \
  163. result = func_name(__VA_ARGS__, 13); \
  164. break; \
  165. case 14: \
  166. result = func_name(__VA_ARGS__, 14); \
  167. break; \
  168. case 15: \
  169. result = func_name(__VA_ARGS__, 15); \
  170. break; \
  171. default: \
  172. result = default_case; \
  173. break; \
  174. } \
  175. } while (0)
  176. #define SIMDE_CONSTIFY_32_(func_name, result, default_case, imm, ...) \
  177. do { \
  178. switch (imm) { \
  179. case 0: \
  180. result = func_name(__VA_ARGS__, 0); \
  181. break; \
  182. case 1: \
  183. result = func_name(__VA_ARGS__, 1); \
  184. break; \
  185. case 2: \
  186. result = func_name(__VA_ARGS__, 2); \
  187. break; \
  188. case 3: \
  189. result = func_name(__VA_ARGS__, 3); \
  190. break; \
  191. case 4: \
  192. result = func_name(__VA_ARGS__, 4); \
  193. break; \
  194. case 5: \
  195. result = func_name(__VA_ARGS__, 5); \
  196. break; \
  197. case 6: \
  198. result = func_name(__VA_ARGS__, 6); \
  199. break; \
  200. case 7: \
  201. result = func_name(__VA_ARGS__, 7); \
  202. break; \
  203. case 8: \
  204. result = func_name(__VA_ARGS__, 8); \
  205. break; \
  206. case 9: \
  207. result = func_name(__VA_ARGS__, 9); \
  208. break; \
  209. case 10: \
  210. result = func_name(__VA_ARGS__, 10); \
  211. break; \
  212. case 11: \
  213. result = func_name(__VA_ARGS__, 11); \
  214. break; \
  215. case 12: \
  216. result = func_name(__VA_ARGS__, 12); \
  217. break; \
  218. case 13: \
  219. result = func_name(__VA_ARGS__, 13); \
  220. break; \
  221. case 14: \
  222. result = func_name(__VA_ARGS__, 14); \
  223. break; \
  224. case 15: \
  225. result = func_name(__VA_ARGS__, 15); \
  226. break; \
  227. case 16: \
  228. result = func_name(__VA_ARGS__, 16); \
  229. break; \
  230. case 17: \
  231. result = func_name(__VA_ARGS__, 17); \
  232. break; \
  233. case 18: \
  234. result = func_name(__VA_ARGS__, 18); \
  235. break; \
  236. case 19: \
  237. result = func_name(__VA_ARGS__, 19); \
  238. break; \
  239. case 20: \
  240. result = func_name(__VA_ARGS__, 20); \
  241. break; \
  242. case 21: \
  243. result = func_name(__VA_ARGS__, 21); \
  244. break; \
  245. case 22: \
  246. result = func_name(__VA_ARGS__, 22); \
  247. break; \
  248. case 23: \
  249. result = func_name(__VA_ARGS__, 23); \
  250. break; \
  251. case 24: \
  252. result = func_name(__VA_ARGS__, 24); \
  253. break; \
  254. case 25: \
  255. result = func_name(__VA_ARGS__, 25); \
  256. break; \
  257. case 26: \
  258. result = func_name(__VA_ARGS__, 26); \
  259. break; \
  260. case 27: \
  261. result = func_name(__VA_ARGS__, 27); \
  262. break; \
  263. case 28: \
  264. result = func_name(__VA_ARGS__, 28); \
  265. break; \
  266. case 29: \
  267. result = func_name(__VA_ARGS__, 29); \
  268. break; \
  269. case 30: \
  270. result = func_name(__VA_ARGS__, 30); \
  271. break; \
  272. case 31: \
  273. result = func_name(__VA_ARGS__, 31); \
  274. break; \
  275. default: \
  276. result = default_case; \
  277. break; \
  278. } \
  279. } while (0)
  280. #define SIMDE_CONSTIFY_64_(func_name, result, default_case, imm, ...) \
  281. do { \
  282. switch (imm) { \
  283. case 0: \
  284. result = func_name(__VA_ARGS__, 0); \
  285. break; \
  286. case 1: \
  287. result = func_name(__VA_ARGS__, 1); \
  288. break; \
  289. case 2: \
  290. result = func_name(__VA_ARGS__, 2); \
  291. break; \
  292. case 3: \
  293. result = func_name(__VA_ARGS__, 3); \
  294. break; \
  295. case 4: \
  296. result = func_name(__VA_ARGS__, 4); \
  297. break; \
  298. case 5: \
  299. result = func_name(__VA_ARGS__, 5); \
  300. break; \
  301. case 6: \
  302. result = func_name(__VA_ARGS__, 6); \
  303. break; \
  304. case 7: \
  305. result = func_name(__VA_ARGS__, 7); \
  306. break; \
  307. case 8: \
  308. result = func_name(__VA_ARGS__, 8); \
  309. break; \
  310. case 9: \
  311. result = func_name(__VA_ARGS__, 9); \
  312. break; \
  313. case 10: \
  314. result = func_name(__VA_ARGS__, 10); \
  315. break; \
  316. case 11: \
  317. result = func_name(__VA_ARGS__, 11); \
  318. break; \
  319. case 12: \
  320. result = func_name(__VA_ARGS__, 12); \
  321. break; \
  322. case 13: \
  323. result = func_name(__VA_ARGS__, 13); \
  324. break; \
  325. case 14: \
  326. result = func_name(__VA_ARGS__, 14); \
  327. break; \
  328. case 15: \
  329. result = func_name(__VA_ARGS__, 15); \
  330. break; \
  331. case 16: \
  332. result = func_name(__VA_ARGS__, 16); \
  333. break; \
  334. case 17: \
  335. result = func_name(__VA_ARGS__, 17); \
  336. break; \
  337. case 18: \
  338. result = func_name(__VA_ARGS__, 18); \
  339. break; \
  340. case 19: \
  341. result = func_name(__VA_ARGS__, 19); \
  342. break; \
  343. case 20: \
  344. result = func_name(__VA_ARGS__, 20); \
  345. break; \
  346. case 21: \
  347. result = func_name(__VA_ARGS__, 21); \
  348. break; \
  349. case 22: \
  350. result = func_name(__VA_ARGS__, 22); \
  351. break; \
  352. case 23: \
  353. result = func_name(__VA_ARGS__, 23); \
  354. break; \
  355. case 24: \
  356. result = func_name(__VA_ARGS__, 24); \
  357. break; \
  358. case 25: \
  359. result = func_name(__VA_ARGS__, 25); \
  360. break; \
  361. case 26: \
  362. result = func_name(__VA_ARGS__, 26); \
  363. break; \
  364. case 27: \
  365. result = func_name(__VA_ARGS__, 27); \
  366. break; \
  367. case 28: \
  368. result = func_name(__VA_ARGS__, 28); \
  369. break; \
  370. case 29: \
  371. result = func_name(__VA_ARGS__, 29); \
  372. break; \
  373. case 30: \
  374. result = func_name(__VA_ARGS__, 30); \
  375. break; \
  376. case 31: \
  377. result = func_name(__VA_ARGS__, 31); \
  378. break; \
  379. case 32: \
  380. result = func_name(__VA_ARGS__, 32); \
  381. break; \
  382. case 33: \
  383. result = func_name(__VA_ARGS__, 33); \
  384. break; \
  385. case 34: \
  386. result = func_name(__VA_ARGS__, 34); \
  387. break; \
  388. case 35: \
  389. result = func_name(__VA_ARGS__, 35); \
  390. break; \
  391. case 36: \
  392. result = func_name(__VA_ARGS__, 36); \
  393. break; \
  394. case 37: \
  395. result = func_name(__VA_ARGS__, 37); \
  396. break; \
  397. case 38: \
  398. result = func_name(__VA_ARGS__, 38); \
  399. break; \
  400. case 39: \
  401. result = func_name(__VA_ARGS__, 39); \
  402. break; \
  403. case 40: \
  404. result = func_name(__VA_ARGS__, 40); \
  405. break; \
  406. case 41: \
  407. result = func_name(__VA_ARGS__, 41); \
  408. break; \
  409. case 42: \
  410. result = func_name(__VA_ARGS__, 42); \
  411. break; \
  412. case 43: \
  413. result = func_name(__VA_ARGS__, 43); \
  414. break; \
  415. case 44: \
  416. result = func_name(__VA_ARGS__, 44); \
  417. break; \
  418. case 45: \
  419. result = func_name(__VA_ARGS__, 45); \
  420. break; \
  421. case 46: \
  422. result = func_name(__VA_ARGS__, 46); \
  423. break; \
  424. case 47: \
  425. result = func_name(__VA_ARGS__, 47); \
  426. break; \
  427. case 48: \
  428. result = func_name(__VA_ARGS__, 48); \
  429. break; \
  430. case 49: \
  431. result = func_name(__VA_ARGS__, 49); \
  432. break; \
  433. case 50: \
  434. result = func_name(__VA_ARGS__, 50); \
  435. break; \
  436. case 51: \
  437. result = func_name(__VA_ARGS__, 51); \
  438. break; \
  439. case 52: \
  440. result = func_name(__VA_ARGS__, 52); \
  441. break; \
  442. case 53: \
  443. result = func_name(__VA_ARGS__, 53); \
  444. break; \
  445. case 54: \
  446. result = func_name(__VA_ARGS__, 54); \
  447. break; \
  448. case 55: \
  449. result = func_name(__VA_ARGS__, 55); \
  450. break; \
  451. case 56: \
  452. result = func_name(__VA_ARGS__, 56); \
  453. break; \
  454. case 57: \
  455. result = func_name(__VA_ARGS__, 57); \
  456. break; \
  457. case 58: \
  458. result = func_name(__VA_ARGS__, 58); \
  459. break; \
  460. case 59: \
  461. result = func_name(__VA_ARGS__, 59); \
  462. break; \
  463. case 60: \
  464. result = func_name(__VA_ARGS__, 60); \
  465. break; \
  466. case 61: \
  467. result = func_name(__VA_ARGS__, 61); \
  468. break; \
  469. case 62: \
  470. result = func_name(__VA_ARGS__, 62); \
  471. break; \
  472. case 63: \
  473. result = func_name(__VA_ARGS__, 63); \
  474. break; \
  475. default: \
  476. result = default_case; \
  477. break; \
  478. } \
  479. } while (0)
  480. #define SIMDE_CONSTIFY_2_NO_RESULT_(func_name, default_case, imm, ...) \
  481. do { \
  482. switch (imm) { \
  483. case 0: \
  484. func_name(__VA_ARGS__, 0); \
  485. break; \
  486. case 1: \
  487. func_name(__VA_ARGS__, 1); \
  488. break; \
  489. default: \
  490. default_case; \
  491. break; \
  492. } \
  493. } while (0)
  494. #define SIMDE_CONSTIFY_4_NO_RESULT_(func_name, default_case, imm, ...) \
  495. do { \
  496. switch (imm) { \
  497. case 0: \
  498. func_name(__VA_ARGS__, 0); \
  499. break; \
  500. case 1: \
  501. func_name(__VA_ARGS__, 1); \
  502. break; \
  503. case 2: \
  504. func_name(__VA_ARGS__, 2); \
  505. break; \
  506. case 3: \
  507. func_name(__VA_ARGS__, 3); \
  508. break; \
  509. default: \
  510. default_case; \
  511. break; \
  512. } \
  513. } while (0)
  514. #define SIMDE_CONSTIFY_8_NO_RESULT_(func_name, default_case, imm, ...) \
  515. do { \
  516. switch (imm) { \
  517. case 0: \
  518. func_name(__VA_ARGS__, 0); \
  519. break; \
  520. case 1: \
  521. func_name(__VA_ARGS__, 1); \
  522. break; \
  523. case 2: \
  524. func_name(__VA_ARGS__, 2); \
  525. break; \
  526. case 3: \
  527. func_name(__VA_ARGS__, 3); \
  528. break; \
  529. case 4: \
  530. func_name(__VA_ARGS__, 4); \
  531. break; \
  532. case 5: \
  533. func_name(__VA_ARGS__, 5); \
  534. break; \
  535. case 6: \
  536. func_name(__VA_ARGS__, 6); \
  537. break; \
  538. case 7: \
  539. func_name(__VA_ARGS__, 7); \
  540. break; \
  541. default: \
  542. default_case; \
  543. break; \
  544. } \
  545. } while (0)
  546. #define SIMDE_CONSTIFY_16_NO_RESULT_(func_name, default_case, imm, ...) \
  547. do { \
  548. switch (imm) { \
  549. case 0: \
  550. func_name(__VA_ARGS__, 0); \
  551. break; \
  552. case 1: \
  553. func_name(__VA_ARGS__, 1); \
  554. break; \
  555. case 2: \
  556. func_name(__VA_ARGS__, 2); \
  557. break; \
  558. case 3: \
  559. func_name(__VA_ARGS__, 3); \
  560. break; \
  561. case 4: \
  562. func_name(__VA_ARGS__, 4); \
  563. break; \
  564. case 5: \
  565. func_name(__VA_ARGS__, 5); \
  566. break; \
  567. case 6: \
  568. func_name(__VA_ARGS__, 6); \
  569. break; \
  570. case 7: \
  571. func_name(__VA_ARGS__, 7); \
  572. break; \
  573. case 8: \
  574. func_name(__VA_ARGS__, 8); \
  575. break; \
  576. case 9: \
  577. func_name(__VA_ARGS__, 9); \
  578. break; \
  579. case 10: \
  580. func_name(__VA_ARGS__, 10); \
  581. break; \
  582. case 11: \
  583. func_name(__VA_ARGS__, 11); \
  584. break; \
  585. case 12: \
  586. func_name(__VA_ARGS__, 12); \
  587. break; \
  588. case 13: \
  589. func_name(__VA_ARGS__, 13); \
  590. break; \
  591. case 14: \
  592. func_name(__VA_ARGS__, 14); \
  593. break; \
  594. case 15: \
  595. func_name(__VA_ARGS__, 15); \
  596. break; \
  597. default: \
  598. default_case; \
  599. break; \
  600. } \
  601. } while (0)
  602. #define SIMDE_CONSTIFY_32_NO_RESULT_(func_name, default_case, imm, ...) \
  603. do { \
  604. switch (imm) { \
  605. case 0: \
  606. func_name(__VA_ARGS__, 0); \
  607. break; \
  608. case 1: \
  609. func_name(__VA_ARGS__, 1); \
  610. break; \
  611. case 2: \
  612. func_name(__VA_ARGS__, 2); \
  613. break; \
  614. case 3: \
  615. func_name(__VA_ARGS__, 3); \
  616. break; \
  617. case 4: \
  618. func_name(__VA_ARGS__, 4); \
  619. break; \
  620. case 5: \
  621. func_name(__VA_ARGS__, 5); \
  622. break; \
  623. case 6: \
  624. func_name(__VA_ARGS__, 6); \
  625. break; \
  626. case 7: \
  627. func_name(__VA_ARGS__, 7); \
  628. break; \
  629. case 8: \
  630. func_name(__VA_ARGS__, 8); \
  631. break; \
  632. case 9: \
  633. func_name(__VA_ARGS__, 9); \
  634. break; \
  635. case 10: \
  636. func_name(__VA_ARGS__, 10); \
  637. break; \
  638. case 11: \
  639. func_name(__VA_ARGS__, 11); \
  640. break; \
  641. case 12: \
  642. func_name(__VA_ARGS__, 12); \
  643. break; \
  644. case 13: \
  645. func_name(__VA_ARGS__, 13); \
  646. break; \
  647. case 14: \
  648. func_name(__VA_ARGS__, 14); \
  649. break; \
  650. case 15: \
  651. func_name(__VA_ARGS__, 15); \
  652. break; \
  653. case 16: \
  654. func_name(__VA_ARGS__, 16); \
  655. break; \
  656. case 17: \
  657. func_name(__VA_ARGS__, 17); \
  658. break; \
  659. case 18: \
  660. func_name(__VA_ARGS__, 18); \
  661. break; \
  662. case 19: \
  663. func_name(__VA_ARGS__, 19); \
  664. break; \
  665. case 20: \
  666. func_name(__VA_ARGS__, 20); \
  667. break; \
  668. case 21: \
  669. func_name(__VA_ARGS__, 21); \
  670. break; \
  671. case 22: \
  672. func_name(__VA_ARGS__, 22); \
  673. break; \
  674. case 23: \
  675. func_name(__VA_ARGS__, 23); \
  676. break; \
  677. case 24: \
  678. func_name(__VA_ARGS__, 24); \
  679. break; \
  680. case 25: \
  681. func_name(__VA_ARGS__, 25); \
  682. break; \
  683. case 26: \
  684. func_name(__VA_ARGS__, 26); \
  685. break; \
  686. case 27: \
  687. func_name(__VA_ARGS__, 27); \
  688. break; \
  689. case 28: \
  690. func_name(__VA_ARGS__, 28); \
  691. break; \
  692. case 29: \
  693. func_name(__VA_ARGS__, 29); \
  694. break; \
  695. case 30: \
  696. func_name(__VA_ARGS__, 30); \
  697. break; \
  698. case 31: \
  699. func_name(__VA_ARGS__, 31); \
  700. break; \
  701. default: \
  702. default_case; \
  703. break; \
  704. } \
  705. } while (0)
  706. #define SIMDE_CONSTIFY_64_NO_RESULT_(func_name, default_case, imm, ...) \
  707. do { \
  708. switch (imm) { \
  709. case 0: \
  710. func_name(__VA_ARGS__, 0); \
  711. break; \
  712. case 1: \
  713. func_name(__VA_ARGS__, 1); \
  714. break; \
  715. case 2: \
  716. func_name(__VA_ARGS__, 2); \
  717. break; \
  718. case 3: \
  719. func_name(__VA_ARGS__, 3); \
  720. break; \
  721. case 4: \
  722. func_name(__VA_ARGS__, 4); \
  723. break; \
  724. case 5: \
  725. func_name(__VA_ARGS__, 5); \
  726. break; \
  727. case 6: \
  728. func_name(__VA_ARGS__, 6); \
  729. break; \
  730. case 7: \
  731. func_name(__VA_ARGS__, 7); \
  732. break; \
  733. case 8: \
  734. func_name(__VA_ARGS__, 8); \
  735. break; \
  736. case 9: \
  737. func_name(__VA_ARGS__, 9); \
  738. break; \
  739. case 10: \
  740. func_name(__VA_ARGS__, 10); \
  741. break; \
  742. case 11: \
  743. func_name(__VA_ARGS__, 11); \
  744. break; \
  745. case 12: \
  746. func_name(__VA_ARGS__, 12); \
  747. break; \
  748. case 13: \
  749. func_name(__VA_ARGS__, 13); \
  750. break; \
  751. case 14: \
  752. func_name(__VA_ARGS__, 14); \
  753. break; \
  754. case 15: \
  755. func_name(__VA_ARGS__, 15); \
  756. break; \
  757. case 16: \
  758. func_name(__VA_ARGS__, 16); \
  759. break; \
  760. case 17: \
  761. func_name(__VA_ARGS__, 17); \
  762. break; \
  763. case 18: \
  764. func_name(__VA_ARGS__, 18); \
  765. break; \
  766. case 19: \
  767. func_name(__VA_ARGS__, 19); \
  768. break; \
  769. case 20: \
  770. func_name(__VA_ARGS__, 20); \
  771. break; \
  772. case 21: \
  773. func_name(__VA_ARGS__, 21); \
  774. break; \
  775. case 22: \
  776. func_name(__VA_ARGS__, 22); \
  777. break; \
  778. case 23: \
  779. func_name(__VA_ARGS__, 23); \
  780. break; \
  781. case 24: \
  782. func_name(__VA_ARGS__, 24); \
  783. break; \
  784. case 25: \
  785. func_name(__VA_ARGS__, 25); \
  786. break; \
  787. case 26: \
  788. func_name(__VA_ARGS__, 26); \
  789. break; \
  790. case 27: \
  791. func_name(__VA_ARGS__, 27); \
  792. break; \
  793. case 28: \
  794. func_name(__VA_ARGS__, 28); \
  795. break; \
  796. case 29: \
  797. func_name(__VA_ARGS__, 29); \
  798. break; \
  799. case 30: \
  800. func_name(__VA_ARGS__, 30); \
  801. break; \
  802. case 31: \
  803. func_name(__VA_ARGS__, 31); \
  804. break; \
  805. case 32: \
  806. func_name(__VA_ARGS__, 32); \
  807. break; \
  808. case 33: \
  809. func_name(__VA_ARGS__, 33); \
  810. break; \
  811. case 34: \
  812. func_name(__VA_ARGS__, 34); \
  813. break; \
  814. case 35: \
  815. func_name(__VA_ARGS__, 35); \
  816. break; \
  817. case 36: \
  818. func_name(__VA_ARGS__, 36); \
  819. break; \
  820. case 37: \
  821. func_name(__VA_ARGS__, 37); \
  822. break; \
  823. case 38: \
  824. func_name(__VA_ARGS__, 38); \
  825. break; \
  826. case 39: \
  827. func_name(__VA_ARGS__, 39); \
  828. break; \
  829. case 40: \
  830. func_name(__VA_ARGS__, 40); \
  831. break; \
  832. case 41: \
  833. func_name(__VA_ARGS__, 41); \
  834. break; \
  835. case 42: \
  836. func_name(__VA_ARGS__, 42); \
  837. break; \
  838. case 43: \
  839. func_name(__VA_ARGS__, 43); \
  840. break; \
  841. case 44: \
  842. func_name(__VA_ARGS__, 44); \
  843. break; \
  844. case 45: \
  845. func_name(__VA_ARGS__, 45); \
  846. break; \
  847. case 46: \
  848. func_name(__VA_ARGS__, 46); \
  849. break; \
  850. case 47: \
  851. func_name(__VA_ARGS__, 47); \
  852. break; \
  853. case 48: \
  854. func_name(__VA_ARGS__, 48); \
  855. break; \
  856. case 49: \
  857. func_name(__VA_ARGS__, 49); \
  858. break; \
  859. case 50: \
  860. func_name(__VA_ARGS__, 50); \
  861. break; \
  862. case 51: \
  863. func_name(__VA_ARGS__, 51); \
  864. break; \
  865. case 52: \
  866. func_name(__VA_ARGS__, 52); \
  867. break; \
  868. case 53: \
  869. func_name(__VA_ARGS__, 53); \
  870. break; \
  871. case 54: \
  872. func_name(__VA_ARGS__, 54); \
  873. break; \
  874. case 55: \
  875. func_name(__VA_ARGS__, 55); \
  876. break; \
  877. case 56: \
  878. func_name(__VA_ARGS__, 56); \
  879. break; \
  880. case 57: \
  881. func_name(__VA_ARGS__, 57); \
  882. break; \
  883. case 58: \
  884. func_name(__VA_ARGS__, 58); \
  885. break; \
  886. case 59: \
  887. func_name(__VA_ARGS__, 59); \
  888. break; \
  889. case 60: \
  890. func_name(__VA_ARGS__, 60); \
  891. break; \
  892. case 61: \
  893. func_name(__VA_ARGS__, 61); \
  894. break; \
  895. case 62: \
  896. func_name(__VA_ARGS__, 62); \
  897. break; \
  898. case 63: \
  899. func_name(__VA_ARGS__, 63); \
  900. break; \
  901. default: \
  902. default_case; \
  903. break; \
  904. } \
  905. } while (0)
  906. HEDLEY_DIAGNOSTIC_POP
  907. #endif