zemu 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (285) hide show
  1. checksums.yaml +7 -0
  2. data/lib/zemu/config.rb +312 -0
  3. data/lib/zemu/instance.rb +179 -0
  4. data/lib/zemu.rb +172 -0
  5. data/src/debug.c +118 -0
  6. data/src/debug.h +30 -0
  7. data/src/external/Z/API/Z/ABIs/generic/allocator.h +36 -0
  8. data/src/external/Z/API/Z/ABIs/generic/cipher.h +47 -0
  9. data/src/external/Z/API/Z/ABIs/generic/data codec.h +33 -0
  10. data/src/external/Z/API/Z/ABIs/generic/emulation.h +103 -0
  11. data/src/external/Z/API/Z/ABIs/generic/hash function.h +33 -0
  12. data/src/external/Z/API/Z/ABIs/generic/module.h +33 -0
  13. data/src/external/Z/API/Z/ABIs/generic/wave codec.h +40 -0
  14. data/src/external/Z/API/Z/classes/base/InitializerList.hpp +34 -0
  15. data/src/external/Z/API/Z/classes/base/OpaqueFunctionPointer.hpp +26 -0
  16. data/src/external/Z/API/Z/classes/base/OpaqueMemberFunctionPointer.hpp +26 -0
  17. data/src/external/Z/API/Z/classes/base/Pair.hpp +46 -0
  18. data/src/external/Z/API/Z/classes/base/Range.hpp +111 -0
  19. data/src/external/Z/API/Z/classes/base/SizedString.hpp +66 -0
  20. data/src/external/Z/API/Z/classes/base/Status.hpp +89 -0
  21. data/src/external/Z/API/Z/classes/base/Symbol.hpp +39 -0
  22. data/src/external/Z/API/Z/classes/base/Tuple.hpp +111 -0
  23. data/src/external/Z/API/Z/classes/base/Value2D.hpp +389 -0
  24. data/src/external/Z/API/Z/classes/base/Value3D.hpp +368 -0
  25. data/src/external/Z/API/Z/classes/buffering/RingBuffer.hpp +93 -0
  26. data/src/external/Z/API/Z/classes/buffering/TripleBuffer.hpp +68 -0
  27. data/src/external/Z/API/Z/classes/functional/Functor.hpp +265 -0
  28. data/src/external/Z/API/Z/classes/functional/MemberFunction.hpp +98 -0
  29. data/src/external/Z/API/Z/classes/functional/ObjectMemberFunction.hpp +172 -0
  30. data/src/external/Z/API/Z/classes/functional/ObjectSelector.hpp +219 -0
  31. data/src/external/Z/API/Z/classes/functional/Selector.hpp +146 -0
  32. data/src/external/Z/API/Z/classes/mathematics/geometry/euclidean/AABB.hpp +81 -0
  33. data/src/external/Z/API/Z/classes/mathematics/geometry/euclidean/AABR.hpp +685 -0
  34. data/src/external/Z/API/Z/classes/mathematics/geometry/euclidean/Box.hpp +219 -0
  35. data/src/external/Z/API/Z/classes/mathematics/geometry/euclidean/Circle.hpp +80 -0
  36. data/src/external/Z/API/Z/classes/mathematics/geometry/euclidean/Line2D.hpp +93 -0
  37. data/src/external/Z/API/Z/classes/mathematics/geometry/euclidean/Line3D.hpp +80 -0
  38. data/src/external/Z/API/Z/classes/mathematics/geometry/euclidean/Rectangle.hpp +675 -0
  39. data/src/external/Z/API/Z/classes/mathematics/geometry/euclidean/Sphere.hpp +0 -0
  40. data/src/external/Z/API/Z/classes/memory/Shared.hpp +90 -0
  41. data/src/external/Z/API/Z/constants/base.h +35 -0
  42. data/src/external/Z/API/Z/constants/chemical elements.h +6385 -0
  43. data/src/external/Z/API/Z/constants/numbers.h +963 -0
  44. data/src/external/Z/API/Z/constants/version.h +15 -0
  45. data/src/external/Z/API/Z/formats/character set/ASCII.h +158 -0
  46. data/src/external/Z/API/Z/formats/character set/DOS CP437.h +159 -0
  47. data/src/external/Z/API/Z/formats/character set/DOS CP737.h +159 -0
  48. data/src/external/Z/API/Z/formats/character set/DOS CP775.h +159 -0
  49. data/src/external/Z/API/Z/formats/character set/DOS CP850.h +159 -0
  50. data/src/external/Z/API/Z/formats/character set/DOS CP852.h +159 -0
  51. data/src/external/Z/API/Z/formats/character set/DOS CP855.h +159 -0
  52. data/src/external/Z/API/Z/formats/character set/DOS CP857.h +159 -0
  53. data/src/external/Z/API/Z/formats/character set/DOS CP858.h +159 -0
  54. data/src/external/Z/API/Z/formats/character set/DOS CP860.h +159 -0
  55. data/src/external/Z/API/Z/formats/character set/DOS CP861.h +159 -0
  56. data/src/external/Z/API/Z/formats/character set/DOS CP862.h +159 -0
  57. data/src/external/Z/API/Z/formats/character set/DOS CP863.h +159 -0
  58. data/src/external/Z/API/Z/formats/character set/DOS CP864.h +159 -0
  59. data/src/external/Z/API/Z/formats/character set/DOS CP865.h +159 -0
  60. data/src/external/Z/API/Z/formats/character set/DOS CP866.h +159 -0
  61. data/src/external/Z/API/Z/formats/character set/DOS CP869.h +159 -0
  62. data/src/external/Z/API/Z/formats/character set/DOS CP872.h +159 -0
  63. data/src/external/Z/API/Z/formats/character set/DOS CP874.h +159 -0
  64. data/src/external/Z/API/Z/formats/character set/Unicode.h +30119 -0
  65. data/src/external/Z/API/Z/formats/data model/I16LP32.h +19 -0
  66. data/src/external/Z/API/Z/formats/data model/ILP32.h +19 -0
  67. data/src/external/Z/API/Z/formats/data model/ILP64.h +19 -0
  68. data/src/external/Z/API/Z/formats/data model/IP16L32.h +19 -0
  69. data/src/external/Z/API/Z/formats/data model/LLP64.h +19 -0
  70. data/src/external/Z/API/Z/formats/data model/LP32.h +19 -0
  71. data/src/external/Z/API/Z/formats/data model/LP64.h +19 -0
  72. data/src/external/Z/API/Z/formats/data model/SILP64.h +19 -0
  73. data/src/external/Z/API/Z/formats/file system/FAT12.h +61 -0
  74. data/src/external/Z/API/Z/formats/floating-point/IEEE 754.h +141 -0
  75. data/src/external/Z/API/Z/formats/floating-point/x87.h +74 -0
  76. data/src/external/Z/API/Z/formats/image/ICNS.h +39 -0
  77. data/src/external/Z/API/Z/formats/keymap/Mac OS.h +284 -0
  78. data/src/external/Z/API/Z/formats/keymap/Z.h +141 -0
  79. data/src/external/Z/API/Z/formats/multimedia/Creative Voice.h +106 -0
  80. data/src/external/Z/API/Z/formats/multimedia/Microsoft Wave.h +49 -0
  81. data/src/external/Z/API/Z/formats/snapshot/machine/computer/ZX Spectrum/ACH.h +44 -0
  82. data/src/external/Z/API/Z/formats/snapshot/machine/computer/ZX Spectrum/FRZ.h +54 -0
  83. data/src/external/Z/API/Z/formats/snapshot/machine/computer/ZX Spectrum/PRG.h +33 -0
  84. data/src/external/Z/API/Z/formats/snapshot/machine/computer/ZX Spectrum/SEM.h +46 -0
  85. data/src/external/Z/API/Z/formats/snapshot/machine/computer/ZX Spectrum/SIT.h +34 -0
  86. data/src/external/Z/API/Z/formats/snapshot/machine/computer/ZX Spectrum/SNA.h +117 -0
  87. data/src/external/Z/API/Z/formats/snapshot/machine/computer/ZX Spectrum/SNP.h +37 -0
  88. data/src/external/Z/API/Z/formats/snapshot/machine/computer/ZX Spectrum/SP.h +62 -0
  89. data/src/external/Z/API/Z/formats/snapshot/machine/computer/ZX Spectrum/Z80.h +117 -0
  90. data/src/external/Z/API/Z/formats/snapshot/machine/computer/ZX Spectrum/ZX.h +56 -0
  91. data/src/external/Z/API/Z/formats/snapshot/machine/computer/ZX Spectrum/ZX82.h +70 -0
  92. data/src/external/Z/API/Z/formats/storage medium image/NES Game Pak/UNIF.h +26 -0
  93. data/src/external/Z/API/Z/formats/storage medium image/NES Game Pak/iNES.h +76 -0
  94. data/src/external/Z/API/Z/formats/storage medium image/audio/TAP.h +25 -0
  95. data/src/external/Z/API/Z/formats/storage medium image/audio/TZX.h +1185 -0
  96. data/src/external/Z/API/Z/formats/storage medium image/audio/Warajevo TAP.h +32 -0
  97. data/src/external/Z/API/Z/formats/storage medium image/floppy disk/FDI.h +45 -0
  98. data/src/external/Z/API/Z/functions/base/Z2D.h +583 -0
  99. data/src/external/Z/API/Z/functions/base/Z3D.h +712 -0
  100. data/src/external/Z/API/Z/functions/base/ZRange.h +137 -0
  101. data/src/external/Z/API/Z/functions/base/all.h +16 -0
  102. data/src/external/Z/API/Z/functions/base/casting.hpp +37 -0
  103. data/src/external/Z/API/Z/functions/base/character.h +38 -0
  104. data/src/external/Z/API/Z/functions/base/constructors.h +326 -0
  105. data/src/external/Z/API/Z/functions/base/structure.hpp +26 -0
  106. data/src/external/Z/API/Z/functions/base/type.hpp +60 -0
  107. data/src/external/Z/API/Z/functions/base/value.h +1901 -0
  108. data/src/external/Z/API/Z/functions/base/value.hpp +112 -0
  109. data/src/external/Z/API/Z/functions/buffering/ZRingBuffer.h +85 -0
  110. data/src/external/Z/API/Z/functions/buffering/ZTripleBuffer.h +65 -0
  111. data/src/external/Z/API/Z/functions/mathematics/geometry/euclidean/Z2DLine.h +179 -0
  112. data/src/external/Z/API/Z/functions/mathematics/geometry/euclidean/Z3DLine.h +168 -0
  113. data/src/external/Z/API/Z/functions/mathematics/geometry/euclidean/ZAABB.h +361 -0
  114. data/src/external/Z/API/Z/functions/mathematics/geometry/euclidean/ZAABR.h +1081 -0
  115. data/src/external/Z/API/Z/functions/mathematics/geometry/euclidean/ZBox.h +340 -0
  116. data/src/external/Z/API/Z/functions/mathematics/geometry/euclidean/ZCircle.h +142 -0
  117. data/src/external/Z/API/Z/functions/mathematics/geometry/euclidean/ZRectangle.h +1267 -0
  118. data/src/external/Z/API/Z/functions/mathematics/geometry/euclidean/ZSphere.h +156 -0
  119. data/src/external/Z/API/Z/functions/mathematics/geometry/euclidean/all.h +18 -0
  120. data/src/external/Z/API/Z/functions/mathematics/geometry/euclidean/constructors.h +620 -0
  121. data/src/external/Z/API/Z/functions/time/date.h +29 -0
  122. data/src/external/Z/API/Z/hardware/CPU/architecture/6502.h +90 -0
  123. data/src/external/Z/API/Z/hardware/CPU/architecture/Z80.h +245 -0
  124. data/src/external/Z/API/Z/hardware/CPU/architecture/i4004.h +37 -0
  125. data/src/external/Z/API/Z/hardware/PSG/General Instrument/AY-3-891x.h +180 -0
  126. data/src/external/Z/API/Z/hardware/VDC/Ricoh/RP2C0x.h +625 -0
  127. data/src/external/Z/API/Z/hardware/bus/AGP.h +24 -0
  128. data/src/external/Z/API/Z/hardware/bus/USB.h +510 -0
  129. data/src/external/Z/API/Z/hardware/machine/model/computer/ZX Spectrum/Inves Spectrum +.h +47 -0
  130. data/src/external/Z/API/Z/hardware/machine/model/computer/ZX Spectrum/Pentagon.h +13 -0
  131. data/src/external/Z/API/Z/hardware/machine/model/computer/ZX Spectrum/Scorpion.h +13 -0
  132. data/src/external/Z/API/Z/hardware/machine/model/computer/ZX Spectrum/ZX Spectrum + 128K.h +158 -0
  133. data/src/external/Z/API/Z/hardware/machine/model/computer/ZX Spectrum/ZX Spectrum +.h +82 -0
  134. data/src/external/Z/API/Z/hardware/machine/model/computer/ZX Spectrum/ZX Spectrum +2.h +13 -0
  135. data/src/external/Z/API/Z/hardware/machine/model/computer/ZX Spectrum/ZX Spectrum +2A.h +13 -0
  136. data/src/external/Z/API/Z/hardware/machine/model/computer/ZX Spectrum/ZX Spectrum +3.h +13 -0
  137. data/src/external/Z/API/Z/hardware/machine/model/computer/ZX Spectrum/ZX Spectrum.h +109 -0
  138. data/src/external/Z/API/Z/hardware/machine/model/console/Nintendo Entertainment System/NES-001 (NTSC).h +29 -0
  139. data/src/external/Z/API/Z/hardware/machine/model/console/Nintendo Entertainment System/NES-001 (PAL).h +29 -0
  140. data/src/external/Z/API/Z/hardware/machine/platform/computer/ZX Spectrum.h +405 -0
  141. data/src/external/Z/API/Z/hardware/machine/platform/console/Game Boy.h +49 -0
  142. data/src/external/Z/API/Z/hardware/machine/platform/console/Nintendo Entertainment System.h +350 -0
  143. data/src/external/Z/API/Z/hardware/storage medium/ROM cartridge/SNES Game Pak.h +238 -0
  144. data/src/external/Z/API/Z/inspection/C/completion.h +178 -0
  145. data/src/external/Z/API/Z/inspection/C/modules/C11.h +41 -0
  146. data/src/external/Z/API/Z/inspection/C/modules/C18.h +13 -0
  147. data/src/external/Z/API/Z/inspection/C/modules/C89.h +19 -0
  148. data/src/external/Z/API/Z/inspection/C/modules/C90.h +13 -0
  149. data/src/external/Z/API/Z/inspection/C/modules/C94.h +15 -0
  150. data/src/external/Z/API/Z/inspection/C/modules/C99.h +29 -0
  151. data/src/external/Z/API/Z/inspection/C/modules/KR C.h +19 -0
  152. data/src/external/Z/API/Z/inspection/C++/completion.h +512 -0
  153. data/src/external/Z/API/Z/inspection/C++/modules/C++03.h +15 -0
  154. data/src/external/Z/API/Z/inspection/C++/modules/C++11.h +80 -0
  155. data/src/external/Z/API/Z/inspection/C++/modules/C++14.h +26 -0
  156. data/src/external/Z/API/Z/inspection/C++/modules/C++17.h +55 -0
  157. data/src/external/Z/API/Z/inspection/C++/modules/C++85.h +11 -0
  158. data/src/external/Z/API/Z/inspection/C++/modules/C++89.h +13 -0
  159. data/src/external/Z/API/Z/inspection/C++/modules/C++98.h +17 -0
  160. data/src/external/Z/API/Z/inspection/C++.h +78 -0
  161. data/src/external/Z/API/Z/inspection/C.h +79 -0
  162. data/src/external/Z/API/Z/inspection/CPU/completion.h +56 -0
  163. data/src/external/Z/API/Z/inspection/CPU/detection.h +714 -0
  164. data/src/external/Z/API/Z/inspection/CPU/modules/6502.h +25 -0
  165. data/src/external/Z/API/Z/inspection/CPU/modules/AArch32.h +32 -0
  166. data/src/external/Z/API/Z/inspection/CPU/modules/AArch64.h +32 -0
  167. data/src/external/Z/API/Z/inspection/CPU/modules/Z80.h +26 -0
  168. data/src/external/Z/API/Z/inspection/CPU/modules/x86-32.h +31 -0
  169. data/src/external/Z/API/Z/inspection/CPU/modules/x86-64.h +312 -0
  170. data/src/external/Z/API/Z/inspection/CPU.h +209 -0
  171. data/src/external/Z/API/Z/inspection/OS/completion.h +36 -0
  172. data/src/external/Z/API/Z/inspection/OS/detection.h +768 -0
  173. data/src/external/Z/API/Z/inspection/OS/modules/Linux.h +22 -0
  174. data/src/external/Z/API/Z/inspection/OS/modules/MS-DOS.h +16 -0
  175. data/src/external/Z/API/Z/inspection/OS/modules/Mac OS X.h +23 -0
  176. data/src/external/Z/API/Z/inspection/OS/modules/Windows.h +19 -0
  177. data/src/external/Z/API/Z/inspection/OS/modules/iPhone OS.h +23 -0
  178. data/src/external/Z/API/Z/inspection/OS.h +236 -0
  179. data/src/external/Z/API/Z/inspection/Objective-C/completion.h +8 -0
  180. data/src/external/Z/API/Z/inspection/Objective-C/modules/Objective-C v1.0.h +11 -0
  181. data/src/external/Z/API/Z/inspection/Objective-C/modules/Objective-C v2.0.h +15 -0
  182. data/src/external/Z/API/Z/inspection/Objective-C.h +51 -0
  183. data/src/external/Z/API/Z/inspection/Z.h +19 -0
  184. data/src/external/Z/API/Z/inspection/build.h +22 -0
  185. data/src/external/Z/API/Z/inspection/character set.h +66 -0
  186. data/src/external/Z/API/Z/inspection/compiler/completion.h +2885 -0
  187. data/src/external/Z/API/Z/inspection/compiler/modules/Apple LLVM.h +26 -0
  188. data/src/external/Z/API/Z/inspection/compiler/modules/Clang.h +1664 -0
  189. data/src/external/Z/API/Z/inspection/compiler/modules/GCC.h +1366 -0
  190. data/src/external/Z/API/Z/inspection/compiler/modules/SCCZ80.h +473 -0
  191. data/src/external/Z/API/Z/inspection/compiler/modules/Visual C++.h +606 -0
  192. data/src/external/Z/API/Z/inspection/compiler/modules/cc65.h +529 -0
  193. data/src/external/Z/API/Z/inspection/compiler/modules/generic.h +13 -0
  194. data/src/external/Z/API/Z/inspection/compiler/modules/template.h +650 -0
  195. data/src/external/Z/API/Z/inspection/compiler.h +299 -0
  196. data/src/external/Z/API/Z/inspection/data model/completion.h +128 -0
  197. data/src/external/Z/API/Z/inspection/data model/deduction.h +9 -0
  198. data/src/external/Z/API/Z/inspection/data model/detection.h +45 -0
  199. data/src/external/Z/API/Z/inspection/data model.h +362 -0
  200. data/src/external/Z/API/Z/inspection/floating-point/completion.h +50 -0
  201. data/src/external/Z/API/Z/inspection/floating-point.h +324 -0
  202. data/src/external/Z/API/Z/inspection/language.h +163 -0
  203. data/src/external/Z/API/Z/inspection/platform/detection.h +9 -0
  204. data/src/external/Z/API/Z/inspection/platform.h +29 -0
  205. data/src/external/Z/API/Z/keys/C++.h +27 -0
  206. data/src/external/Z/API/Z/keys/C.h +29 -0
  207. data/src/external/Z/API/Z/keys/CPU.h +80 -0
  208. data/src/external/Z/API/Z/keys/OS.h +182 -0
  209. data/src/external/Z/API/Z/keys/Objective-C.h +17 -0
  210. data/src/external/Z/API/Z/keys/chemistry.h +26 -0
  211. data/src/external/Z/API/Z/keys/compiler.h +178 -0
  212. data/src/external/Z/API/Z/keys/data model.h +32 -0
  213. data/src/external/Z/API/Z/keys/endianness.h +24 -0
  214. data/src/external/Z/API/Z/keys/language.h +21 -0
  215. data/src/external/Z/API/Z/keys/layout.h +20 -0
  216. data/src/external/Z/API/Z/keys/mathematics/geometry.h +29 -0
  217. data/src/external/Z/API/Z/keys/mathematics/number.h +21 -0
  218. data/src/external/Z/API/Z/keys/order.h +18 -0
  219. data/src/external/Z/API/Z/keys/platform.h +87 -0
  220. data/src/external/Z/API/Z/keys/program.h +39 -0
  221. data/src/external/Z/API/Z/keys/science/chemical elements.h +200 -0
  222. data/src/external/Z/API/Z/keys/science/electricity.h +18 -0
  223. data/src/external/Z/API/Z/keys/science/magnetism.h +19 -0
  224. data/src/external/Z/API/Z/keys/status.h +69 -0
  225. data/src/external/Z/API/Z/keys/text.h +27 -0
  226. data/src/external/Z/API/Z/keys/value.h +88 -0
  227. data/src/external/Z/API/Z/macros/arguments.h +25 -0
  228. data/src/external/Z/API/Z/macros/casting.h +22 -0
  229. data/src/external/Z/API/Z/macros/character.h +159 -0
  230. data/src/external/Z/API/Z/macros/date.h +14 -0
  231. data/src/external/Z/API/Z/macros/key.h +20 -0
  232. data/src/external/Z/API/Z/macros/language.h +126 -0
  233. data/src/external/Z/API/Z/macros/language.hpp +81 -0
  234. data/src/external/Z/API/Z/macros/members.h +86 -0
  235. data/src/external/Z/API/Z/macros/pasting.h +308 -0
  236. data/src/external/Z/API/Z/macros/pointer.h +33 -0
  237. data/src/external/Z/API/Z/macros/repetition.h +283 -0
  238. data/src/external/Z/API/Z/macros/structure.h +104 -0
  239. data/src/external/Z/API/Z/macros/templating.h +407 -0
  240. data/src/external/Z/API/Z/macros/tokens.h +14 -0
  241. data/src/external/Z/API/Z/macros/type enumeration.h +43 -0
  242. data/src/external/Z/API/Z/macros/type selection.hpp +76 -0
  243. data/src/external/Z/API/Z/macros/value.h +489 -0
  244. data/src/external/Z/API/Z/macros/variadic pasting.h +21 -0
  245. data/src/external/Z/API/Z/macros/variadic selection.h +56 -0
  246. data/src/external/Z/API/Z/macros/variadic.h +46 -0
  247. data/src/external/Z/API/Z/macros/version.h +17 -0
  248. data/src/external/Z/API/Z/network/3/IP.h +36 -0
  249. data/src/external/Z/API/Z/network/4/TCP.h +24 -0
  250. data/src/external/Z/API/Z/network/4/UDP.h +26 -0
  251. data/src/external/Z/API/Z/network/7/ED2K.h +104 -0
  252. data/src/external/Z/API/Z/network/7/HTTP.h +100 -0
  253. data/src/external/Z/API/Z/traits/SelectType.hpp +71 -0
  254. data/src/external/Z/API/Z/traits/TernaryType.hpp +20 -0
  255. data/src/external/Z/API/Z/traits/Type.hpp +4516 -0
  256. data/src/external/Z/API/Z/traits/TypeCount.hpp +52 -0
  257. data/src/external/Z/API/Z/traits/TypeList.hpp +376 -0
  258. data/src/external/Z/API/Z/traits/base.hpp +19 -0
  259. data/src/external/Z/API/Z/traits/filtering.hpp +30 -0
  260. data/src/external/Z/API/Z/traits/mathematics.hpp +48 -0
  261. data/src/external/Z/API/Z/types/arguments.h +19 -0
  262. data/src/external/Z/API/Z/types/base.h +1655 -0
  263. data/src/external/Z/API/Z/types/base.hpp +169 -0
  264. data/src/external/Z/API/Z/types/buffering.h +27 -0
  265. data/src/external/Z/API/Z/types/mathematics.h +135 -0
  266. data/src/external/Z/API/Z/types/time.h +23 -0
  267. data/src/external/Z/COPYING.LESSER +165 -0
  268. data/src/external/Z/development/Qt Creator/Z.pro +253 -0
  269. data/src/external/Z/distribution/CocoaPods/Zeta.podspec +18 -0
  270. data/src/external/Z/distribution/Gentoo Linux/Zeta-0.1.ebuild +22 -0
  271. data/src/external/Z/distribution/Gentoo Linux/metadata.xml +8 -0
  272. data/src/external/Z/distribution/Homebrew/Zeta.rb +11 -0
  273. data/src/external/z80/API/emulation/CPU/Z80.h +201 -0
  274. data/src/external/z80/README.md +229 -0
  275. data/src/external/z80/building/premake4.lua +33 -0
  276. data/src/external/z80/development/Xcode/Z80.xcodeproj/project.pbxproj +520 -0
  277. data/src/external/z80/sources/Z80.c +1660 -0
  278. data/src/interrupt.c +6 -0
  279. data/src/interrupt.h +3 -0
  280. data/src/io.c.erb +115 -0
  281. data/src/io.h.erb +18 -0
  282. data/src/main.c +69 -0
  283. data/src/memory.c.erb +43 -0
  284. data/src/memory.h.erb +9 -0
  285. metadata +329 -0
@@ -0,0 +1,1901 @@
1
+ /* Z Kit - functions/base/value.h
2
+ _____ _______________
3
+ /_ /_/ -_/_ _/ _ |
4
+ /____/\___/ /__//___/_| Kit
5
+ Copyright (C) 2006-2018 Manuel Sainz de Baranda y Goñi.
6
+ Released under the terms of the GNU Lesser General Public License v3. */
7
+
8
+ #ifndef _Z_functions_base_value_H_
9
+ #define _Z_functions_base_value_H_
10
+
11
+ #include <Z/macros/value.h>
12
+
13
+
14
+ /* MARK: - Common implementation */
15
+
16
+
17
+ #define Z_IMPLEMENTATION_COMMON(type) \
18
+ \
19
+ static Z_INLINE \
20
+ z##type z_##type##_maximum(z##type a, z##type b) \
21
+ {return Z_MAXIMUM(a, b);} \
22
+ \
23
+ \
24
+ static Z_INLINE \
25
+ z##type z_##type##_minimum(z##type a, z##type b) \
26
+ {return Z_MINIMUM(a, b);} \
27
+ \
28
+ \
29
+ static Z_INLINE \
30
+ z##type z_##type##_clamp(z##type value, z##type minimum, z##type maximum) \
31
+ {return z_##type##_minimum(z_##type##_maximum(value, minimum), maximum);} \
32
+ \
33
+ \
34
+ static Z_INLINE \
35
+ void z_##type##_swap(void *a, void *b) \
36
+ { \
37
+ z##type t = *(z##type *)a; \
38
+ \
39
+ *(z##type *)a = *(z##type *)b; \
40
+ *(z##type *)b = t; \
41
+ }
42
+
43
+
44
+ #define z_type_clamp( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _clamp )
45
+ #define z_type_maximum(TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _maximum)
46
+ #define z_type_minimum(TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _minimum)
47
+ #define z_type_swap( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _swap )
48
+
49
+
50
+ /* MARK: - Partial implementation for signed types */
51
+
52
+
53
+ #define Z_IMPLEMENTATION_SIGNED(type) \
54
+ \
55
+ static Z_INLINE \
56
+ z##type z_##type##_absolute(z##type value) \
57
+ {return value < (z##type)0 ? -value : value;} \
58
+ \
59
+ \
60
+ static Z_INLINE \
61
+ z##type z_##type##_sign(z##type value) \
62
+ {return value >= (z##type)0 ? (z##type)1 : -(z##type)1;}
63
+
64
+
65
+ #define z_type_absolute(TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _absolute)
66
+ #define z_type_sign( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _sign )
67
+
68
+
69
+ /* MARK: - Implementation for real types */
70
+
71
+
72
+ #define Z_IMPLEMENTATION_REAL(type, _, epsilon, infinity) \
73
+ \
74
+ static Z_INLINE \
75
+ zboolean z_##type##_are_almost_equal(z##type a, z##type b) \
76
+ {return z_##type##_absolute(a - b) <= epsilon;} \
77
+ \
78
+ \
79
+ static Z_INLINE \
80
+ z##type z_##type##_clamp_01(z##type value) \
81
+ {return z_##type##_minimum(z_##type##_maximum(value, _(0.0)), _(1.0));} \
82
+ \
83
+ \
84
+ static Z_INLINE \
85
+ z##type z_##type##_inverse_lerp(z##type a, z##type b, z##type t) \
86
+ {return (t - a) / (b - a);} \
87
+ \
88
+ \
89
+ static Z_INLINE \
90
+ zboolean z_##type##_is_almost_zero(z##type value) \
91
+ {return z_##type##_absolute(value) <= epsilon;} \
92
+ \
93
+ \
94
+ static Z_INLINE \
95
+ zboolean z_##type##_is_finite(z##type value) \
96
+ {return value == value && value != infinity && value != -infinity;} \
97
+ \
98
+ \
99
+ static Z_INLINE \
100
+ zboolean z_##type##_is_infinity(z##type value) \
101
+ {return value == infinity || value == -infinity;} \
102
+ \
103
+ \
104
+ static Z_INLINE \
105
+ zboolean z_##type##_is_nan(z##type value) \
106
+ {return !(value == value);} \
107
+ \
108
+ \
109
+ static Z_INLINE \
110
+ z##type z_##type##_lerp(z##type a, z##type b, z##type t) \
111
+ {return a + t * (b - a);} \
112
+ \
113
+ \
114
+ static Z_INLINE \
115
+ z##type z_##type##_sign_or_zero(z##type value) \
116
+ { \
117
+ return z_##type##_absolute(value) <= epsilon \
118
+ ? _(0.0) \
119
+ : z_##type##_sign(value); \
120
+ } \
121
+ \
122
+ \
123
+ static Z_INLINE \
124
+ z##type z_##type##_smootherstep(z##type a, z##type b, z##type t) \
125
+ { \
126
+ if (t <= a) return _(0.0); \
127
+ if (t >= b) return _(1.0); \
128
+ t = (t - a) / (b - a); \
129
+ return t * t * t * (t * (t * _(6.0) - _(15.0)) + _(10.0)); \
130
+ } \
131
+ \
132
+ \
133
+ static Z_INLINE \
134
+ z##type z_##type##_smoothstep(z##type a, z##type b, z##type t) \
135
+ { \
136
+ if (t <= a) return _(0.0); \
137
+ if (t >= b) return _(1.0); \
138
+ t = (t - a) / (b - a); \
139
+ return t * t * (_(3.0) - _(2.0) * t); \
140
+ }
141
+
142
+
143
+ #define z_type_are_almost_equal(TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _are_almost_equal)
144
+ #define z_type_clamp_01( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _clamp_01 )
145
+ #define z_type_inverse_lerp( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _inverse_lerp )
146
+ #define z_type_is_almost_zero( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _is_almost_zero )
147
+ #define z_type_is_finite( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _is_finite )
148
+ #define z_type_is_infinity( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _is_infinity )
149
+ #define z_type_is_nan( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _is_nan )
150
+ #define z_type_lerp( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _lerp )
151
+ #define z_type_sign_or_zero( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _sign_or_zero )
152
+ #define z_type_smootherstep( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _smootherstep )
153
+ #define z_type_smoothstep( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _smoothstep )
154
+
155
+
156
+ /* MARK: - Partial implementations for bit operations */
157
+
158
+
159
+ #define Z_IMPLEMENTATION_REVERSE(type, bits, level) \
160
+ \
161
+ static Z_INLINE \
162
+ z##type z_##type##_reverse_in_##level##bit(z##type value) \
163
+ {return (z##type)Z_##bits##BIT_REVERSE_IN_##level##BIT((zuint##bits)value);}
164
+
165
+
166
+ #define z_type_reverse(TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _reverse_in_8bit)
167
+
168
+
169
+ #define Z_IMPLEMENTATION_ROTATE(type, bits) \
170
+ \
171
+ static Z_INLINE \
172
+ z##type z_##type##_rotate_left(z##type value, zuint rotation) \
173
+ {return (z##type)Z_##bits##BIT_ROTATE_LEFT((zuint##bits)value, rotation);} \
174
+ \
175
+ \
176
+ static Z_INLINE \
177
+ z##type z_##type##_rotate_right(z##type value, zuint rotation) \
178
+ {return (z##type)Z_##bits##BIT_ROTATE_RIGHT((zuint##bits)value, rotation);}
179
+
180
+
181
+ #define z_type_rotate_left( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _rotate_left )
182
+ #define z_type_rotate_right(TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _rotate_right)
183
+
184
+
185
+ /* MARK: - uint8 */
186
+
187
+
188
+ Z_IMPLEMENTATION_COMMON (uint8)
189
+ Z_IMPLEMENTATION_REVERSE(uint8, 8, 1)
190
+ Z_IMPLEMENTATION_REVERSE(uint8, 8, 2)
191
+ Z_IMPLEMENTATION_REVERSE(uint8, 8, 4)
192
+ Z_IMPLEMENTATION_ROTATE (uint8, 8)
193
+
194
+
195
+ #define z_uint8_reverse Z_SAME
196
+
197
+
198
+ static Z_INLINE
199
+ zboolean z_uint8_addition_overflows(zuint8 a, zuint8 b)
200
+ {return (zuint16)a + (zuint16)b > Z_UINT8_MAXIMUM;}
201
+
202
+
203
+ static Z_INLINE
204
+ zboolean z_uint8_addition_overflows_3(zuint8 a, zuint8 b, zuint8 c)
205
+ {return (zuint16)a + (zuint16)b + (zuint16)c > Z_UINT8_MAXIMUM;}
206
+
207
+
208
+ static Z_INLINE
209
+ zboolean z_uint8_addition_overflows_4(zuint8 a, zuint8 b, zuint8 c, zuint8 d)
210
+ {return (zuint16)a + (zuint16)b + (zuint16)c + (zuint16)d > Z_UINT8_MAXIMUM;}
211
+
212
+
213
+ static Z_INLINE
214
+ zboolean z_uint8_multiplication_overflows(zuint8 a, zuint8 b)
215
+ {return (zuint16)a * (zuint16)b > Z_UINT8_MAXIMUM;}
216
+
217
+
218
+ /*static Z_INLINE
219
+ zboolean z_uint8_multiplication_overflows_3(zuint8 a, zuint8 b, zuint8 c)
220
+ {return FALSE;}
221
+
222
+
223
+ static Z_INLINE
224
+ zboolean z_uint8_multiplication_overflows_4(zuint8 a, zuint8 b, zuint8 c, zuint8 d)
225
+ {return FALSE;}*/
226
+
227
+
228
+ static Z_INLINE
229
+ zboolean z_uint8_subtraction_overflows(zuint8 a, zuint8 b)
230
+ {return b > a;}
231
+
232
+
233
+ /*static Z_INLINE
234
+ zboolean z_uint8_subtraction_overflows_3(zuint8 a, zuint8 b, zuint8 c)
235
+ {return FALSE;}
236
+
237
+
238
+ static Z_INLINE
239
+ zboolean z_uint8_subtraction_overflows_4(zuint8 a, zuint8 b, zuint8 c, zuint8 d)
240
+ {return FALSE;}*/
241
+
242
+
243
+ #if Z_COMPILER_HAS_FUNCTION(UINT8_ATOMIC_ADD_THEN_GET)
244
+ # define z_uint8_atomic_add_then_get Z_COMPILER_FUNCTION(UINT8_ATOMIC_ADD_THEN_GET)
245
+ #endif
246
+
247
+ #if Z_COMPILER_HAS_FUNCTION(UINT8_ATOMIC_AND_THEN_GET)
248
+ # define z_uint8_atomic_and_then_get Z_COMPILER_FUNCTION(UINT8_ATOMIC_AND_THEN_GET)
249
+ #endif
250
+
251
+ #if Z_COMPILER_HAS_FUNCTION(UINT8_ATOMIC_DECREMENT_THEN_GET)
252
+ # define z_uint8_atomic_decrement_then_get Z_COMPILER_FUNCTION(UINT8_ATOMIC_DECREMENT_THEN_GET)
253
+ #endif
254
+
255
+ #if Z_COMPILER_HAS_FUNCTION(UINT8_ATOMIC_GET_THEN_ADD)
256
+ # define z_uint8_atomic_get_then_add Z_COMPILER_FUNCTION(UINT8_ATOMIC_GET_THEN_ADD)
257
+ #endif
258
+
259
+ #if Z_COMPILER_HAS_FUNCTION(UINT8_ATOMIC_GET_THEN_AND)
260
+ # define z_uint8_atomic_get_then_and Z_COMPILER_FUNCTION(UINT8_ATOMIC_GET_THEN_AND)
261
+ #endif
262
+
263
+ #if Z_COMPILER_HAS_FUNCTION(UINT8_ATOMIC_GET_THEN_DECREMENT)
264
+ # define z_uint8_atomic_get_then_decrement Z_COMPILER_FUNCTION(UINT8_ATOMIC_GET_THEN_DECREMENT)
265
+ #endif
266
+
267
+ #if Z_COMPILER_HAS_FUNCTION(UINT8_ATOMIC_GET_THEN_INCREMENT)
268
+ # define z_uint8_atomic_get_then_increment Z_COMPILER_FUNCTION(UINT8_ATOMIC_GET_THEN_INCREMENT)
269
+ #endif
270
+
271
+ #if Z_COMPILER_HAS_FUNCTION(UINT8_ATOMIC_GET_THEN_NAND)
272
+ # define z_uint8_atomic_get_then_nand Z_COMPILER_FUNCTION(UINT8_ATOMIC_GET_THEN_NAND)
273
+ #endif
274
+
275
+ #if Z_COMPILER_HAS_FUNCTION(UINT8_ATOMIC_GET_THEN_NOT)
276
+ # define z_uint8_atomic_get_then_not Z_COMPILER_FUNCTION(UINT8_ATOMIC_GET_THEN_NOT)
277
+ #endif
278
+
279
+ #if Z_COMPILER_HAS_FUNCTION(UINT8_ATOMIC_GET_THEN_OR)
280
+ # define z_uint8_atomic_get_then_or Z_COMPILER_FUNCTION(UINT8_ATOMIC_GET_THEN_OR)
281
+ #endif
282
+
283
+ #if Z_COMPILER_HAS_FUNCTION(UINT8_ATOMIC_GET_THEN_SET)
284
+ # define z_uint8_atomic_get_then_set Z_COMPILER_FUNCTION(UINT8_ATOMIC_GET_THEN_SET)
285
+ #endif
286
+
287
+ #if Z_COMPILER_HAS_FUNCTION(UINT8_ATOMIC_GET_THEN_SUBTRACT)
288
+ # define z_uint8_atomic_get_then_subtract Z_COMPILER_FUNCTION(UINT8_ATOMIC_GET_THEN_SUBTRACT)
289
+ #endif
290
+
291
+ #if Z_COMPILER_HAS_FUNCTION(UINT8_ATOMIC_GET_THEN_XOR)
292
+ # define z_uint8_atomic_get_then_xor Z_COMPILER_FUNCTION(UINT8_ATOMIC_GET_THEN_XOR)
293
+ #endif
294
+
295
+ #if Z_COMPILER_HAS_FUNCTION(UINT8_ATOMIC_INCREMENT_THEN_GET)
296
+ # define z_uint8_atomic_increment_then_get Z_COMPILER_FUNCTION(UINT8_ATOMIC_INCREMENT_THEN_GET)
297
+ #endif
298
+
299
+ #if Z_COMPILER_HAS_FUNCTION(UINT8_ATOMIC_NAND_THEN_GET)
300
+ # define z_uint8_atomic_nand_then_get Z_COMPILER_FUNCTION(UINT8_ATOMIC_NAND_THEN_GET)
301
+ #endif
302
+
303
+ #if Z_COMPILER_HAS_FUNCTION(UINT8_ATOMIC_NOT_THEN_GET)
304
+ # define z_uint8_atomic_not_then_get Z_COMPILER_FUNCTION(UINT8_ATOMIC_NOT_THEN_GET)
305
+ #endif
306
+
307
+ #if Z_COMPILER_HAS_FUNCTION(UINT8_ATOMIC_OR_THEN_GET)
308
+ # define z_uint8_atomic_or_then_get Z_COMPILER_FUNCTION(UINT8_ATOMIC_OR_THEN_GET)
309
+ #endif
310
+
311
+ #if Z_COMPILER_HAS_FUNCTION(UINT8_ATOMIC_SET_IF_EQUAL)
312
+ # define z_uint8_atomic_set_if_equal Z_COMPILER_FUNCTION(UINT8_ATOMIC_SET_IF_EQUAL)
313
+ #endif
314
+
315
+ #if Z_COMPILER_HAS_FUNCTION(UINT8_ATOMIC_SUBTRACT_THEN_GET)
316
+ # define z_uint8_atomic_subtract_then_get Z_COMPILER_FUNCTION(UINT8_ATOMIC_SUBTRACT_THEN_GET)
317
+ #endif
318
+
319
+ #if Z_COMPILER_HAS_FUNCTION(UINT8_ATOMIC_XOR_THEN_GET)
320
+ # define z_uint8_atomic_xor_then_get Z_COMPILER_FUNCTION(UINT8_ATOMIC_XOR_THEN_GET)
321
+ #endif
322
+
323
+
324
+ /* MARK: - sint8 */
325
+
326
+
327
+ Z_IMPLEMENTATION_COMMON (sint8)
328
+ Z_IMPLEMENTATION_SIGNED (sint8)
329
+ Z_IMPLEMENTATION_REVERSE(sint8, 8, 1)
330
+ Z_IMPLEMENTATION_REVERSE(sint8, 8, 2)
331
+ Z_IMPLEMENTATION_REVERSE(sint8, 8, 4)
332
+ Z_IMPLEMENTATION_ROTATE (sint8, 8)
333
+
334
+
335
+ #define z_sint8_reverse Z_SAME
336
+
337
+
338
+ /*static Z_INLINE
339
+ zboolean z_sint8_addition_overflows(zsint8 a, zsint8 b)
340
+ {return FALSE;}
341
+
342
+
343
+ static Z_INLINE
344
+ zboolean z_sint8_addition_overflows_3(zsint8 a, zsint8 b, zsint8 c)
345
+ {return FALSE;}
346
+
347
+
348
+ static Z_INLINE
349
+ zboolean z_sint8_addition_overflows_4(zsint8 a, zsint8 b, zsint8 c, zsint8 d)
350
+ {return FALSE;}
351
+
352
+
353
+ static Z_INLINE
354
+ zboolean z_sint8_multiplication_overflows(zsint8 a, zsint8 b)
355
+ {return FALSE;}
356
+
357
+
358
+ static Z_INLINE
359
+ zboolean z_sint8_multiplication_overflows_3(zsint8 a, zsint8 b, zsint8 c)
360
+ {return FALSE;}
361
+
362
+
363
+ static Z_INLINE
364
+ zboolean z_sint8_multiplication_overflows_4(zsint8 a, zsint8 b, zsint8 c, zsint8 d)
365
+ {return FALSE;}
366
+
367
+
368
+ static Z_INLINE
369
+ zboolean z_sint8_subtraction_overflows(zsint8 a, zsint8 b)
370
+ {return FALSE;}
371
+
372
+
373
+ static Z_INLINE
374
+ zboolean z_sint8_subtraction_overflows_3(zsint8 a, zsint8 b, zsint8 c)
375
+ {return FALSE;}
376
+
377
+
378
+ static Z_INLINE
379
+ zboolean z_sint8_subtraction_overflows_4(zsint8 a, zsint8 b, zsint8 c, zsint8 d)
380
+ {return FALSE;}*/
381
+
382
+
383
+ #if Z_COMPILER_HAS_FUNCTION(SINT8_ATOMIC_ADD_THEN_GET)
384
+ # define z_sint8_atomic_add_then_get Z_COMPILER_FUNCTION(SINT8_ATOMIC_ADD_THEN_GET)
385
+ #endif
386
+
387
+ #if Z_COMPILER_HAS_FUNCTION(SINT8_ATOMIC_AND_THEN_GET)
388
+ # define z_sint8_atomic_and_then_get Z_COMPILER_FUNCTION(SINT8_ATOMIC_AND_THEN_GET)
389
+ #endif
390
+
391
+ #if Z_COMPILER_HAS_FUNCTION(SINT8_ATOMIC_DECREMENT_THEN_GET)
392
+ # define z_sint8_atomic_decrement_then_get Z_COMPILER_FUNCTION(SINT8_ATOMIC_DECREMENT_THEN_GET)
393
+ #endif
394
+
395
+ #if Z_COMPILER_HAS_FUNCTION(SINT8_ATOMIC_GET_THEN_ADD)
396
+ # define z_sint8_atomic_get_then_add Z_COMPILER_FUNCTION(SINT8_ATOMIC_GET_THEN_ADD)
397
+ #endif
398
+
399
+ #if Z_COMPILER_HAS_FUNCTION(SINT8_ATOMIC_GET_THEN_AND)
400
+ # define z_sint8_atomic_get_then_and Z_COMPILER_FUNCTION(SINT8_ATOMIC_GET_THEN_AND)
401
+ #endif
402
+
403
+ #if Z_COMPILER_HAS_FUNCTION(SINT8_ATOMIC_GET_THEN_DECREMENT)
404
+ # define z_sint8_atomic_get_then_decrement Z_COMPILER_FUNCTION(SINT8_ATOMIC_GET_THEN_DECREMENT)
405
+ #endif
406
+
407
+ #if Z_COMPILER_HAS_FUNCTION(SINT8_ATOMIC_GET_THEN_INCREMENT)
408
+ # define z_sint8_atomic_get_then_increment Z_COMPILER_FUNCTION(SINT8_ATOMIC_GET_THEN_INCREMENT)
409
+ #endif
410
+
411
+ #if Z_COMPILER_HAS_FUNCTION(SINT8_ATOMIC_GET_THEN_NAND)
412
+ # define z_sint8_atomic_get_then_nand Z_COMPILER_FUNCTION(SINT8_ATOMIC_GET_THEN_NAND)
413
+ #endif
414
+
415
+ #if Z_COMPILER_HAS_FUNCTION(SINT8_ATOMIC_GET_THEN_NOT)
416
+ # define z_sint8_atomic_get_then_not Z_COMPILER_FUNCTION(SINT8_ATOMIC_GET_THEN_NOT)
417
+ #endif
418
+
419
+ #if Z_COMPILER_HAS_FUNCTION(SINT8_ATOMIC_GET_THEN_OR)
420
+ # define z_sint8_atomic_get_then_or Z_COMPILER_FUNCTION(SINT8_ATOMIC_GET_THEN_OR)
421
+ #endif
422
+
423
+ #if Z_COMPILER_HAS_FUNCTION(SINT8_ATOMIC_GET_THEN_SET)
424
+ # define z_sint8_atomic_get_then_set Z_COMPILER_FUNCTION(SINT8_ATOMIC_GET_THEN_SET)
425
+ #endif
426
+
427
+ #if Z_COMPILER_HAS_FUNCTION(SINT8_ATOMIC_GET_THEN_SUBTRACT)
428
+ # define z_sint8_atomic_get_then_subtract Z_COMPILER_FUNCTION(SINT8_ATOMIC_GET_THEN_SUBTRACT)
429
+ #endif
430
+
431
+ #if Z_COMPILER_HAS_FUNCTION(SINT8_ATOMIC_GET_THEN_XOR)
432
+ # define z_sint8_atomic_get_then_xor Z_COMPILER_FUNCTION(SINT8_ATOMIC_GET_THEN_XOR)
433
+ #endif
434
+
435
+ #if Z_COMPILER_HAS_FUNCTION(SINT8_ATOMIC_INCREMENT_THEN_GET)
436
+ # define z_sint8_atomic_increment_then_get Z_COMPILER_FUNCTION(SINT8_ATOMIC_INCREMENT_THEN_GET)
437
+ #endif
438
+
439
+ #if Z_COMPILER_HAS_FUNCTION(SINT8_ATOMIC_NAND_THEN_GET)
440
+ # define z_sint8_atomic_nand_then_get Z_COMPILER_FUNCTION(SINT8_ATOMIC_NAND_THEN_GET)
441
+ #endif
442
+
443
+ #if Z_COMPILER_HAS_FUNCTION(SINT8_ATOMIC_NOT_THEN_GET)
444
+ # define z_sint8_atomic_not_then_get Z_COMPILER_FUNCTION(SINT8_ATOMIC_NOT_THEN_GET)
445
+ #endif
446
+
447
+ #if Z_COMPILER_HAS_FUNCTION(SINT8_ATOMIC_OR_THEN_GET)
448
+ # define z_sint8_atomic_or_then_get Z_COMPILER_FUNCTION(SINT8_ATOMIC_OR_THEN_GET)
449
+ #endif
450
+
451
+ #if Z_COMPILER_HAS_FUNCTION(SINT8_ATOMIC_SET_IF_EQUAL)
452
+ # define z_sint8_atomic_set_if_equal Z_COMPILER_FUNCTION(SINT8_ATOMIC_SET_IF_EQUAL)
453
+ #endif
454
+
455
+ #if Z_COMPILER_HAS_FUNCTION(SINT8_ATOMIC_SUBTRACT_THEN_GET)
456
+ # define z_sint8_atomic_subtract_then_get Z_COMPILER_FUNCTION(SINT8_ATOMIC_SUBTRACT_THEN_GET)
457
+ #endif
458
+
459
+ #if Z_COMPILER_HAS_FUNCTION(SINT8_ATOMIC_XOR_THEN_GET)
460
+ # define z_sint8_atomic_xor_then_get Z_COMPILER_FUNCTION(SINT8_ATOMIC_XOR_THEN_GET)
461
+ #endif
462
+
463
+
464
+ /* MARK: - uint16 */
465
+
466
+
467
+ Z_IMPLEMENTATION_COMMON (uint16)
468
+ Z_IMPLEMENTATION_REVERSE(uint16, 16, 1)
469
+ Z_IMPLEMENTATION_REVERSE(uint16, 16, 2)
470
+ Z_IMPLEMENTATION_REVERSE(uint16, 16, 4)
471
+ Z_IMPLEMENTATION_REVERSE(uint16, 16, 8)
472
+ Z_IMPLEMENTATION_ROTATE (uint16, 16)
473
+
474
+
475
+ #define z_uint16_reverse z_uint16_reverse_in_8bit
476
+
477
+ #if Z_UINT16_ENDIANNESS == Z_ENDIANNESS_BIG
478
+
479
+ # define z_uint16_big_endian Z_SAME
480
+ # define z_uint16_little_endian z_uint16_reverse
481
+
482
+ #elif Z_UINT16_ENDIANNESS == Z_ENDIANNESS_LITTLE
483
+
484
+ # define z_uint16_big_endian z_uint16_reverse
485
+ # define z_uint16_little_endian Z_SAME
486
+
487
+ #endif
488
+
489
+
490
+ static Z_INLINE
491
+ zboolean z_uint16_addition_overflows(zuint16 a, zuint16 b)
492
+ {return (zuint32)a + (zuint32)b > Z_UINT16_MAXIMUM;}
493
+
494
+
495
+ static Z_INLINE
496
+ zboolean z_uint16_addition_overflows_3(zuint16 a, zuint16 b, zuint16 c)
497
+ {return (zuint32)a + (zuint32)b + (zuint32)c > Z_UINT16_MAXIMUM;}
498
+
499
+
500
+ static Z_INLINE
501
+ zboolean z_uint16_addition_overflows_4(zuint16 a, zuint16 b, zuint16 c, zuint16 d)
502
+ {return (zuint32)a + (zuint32)b + (zuint32)c + (zuint32)d > Z_UINT16_MAXIMUM;}
503
+
504
+
505
+ static Z_INLINE
506
+ zboolean z_uint16_multiplication_overflows(zuint16 a, zuint16 b)
507
+ {return (zuint32)a * (zuint32)b > Z_UINT16_MAXIMUM;}
508
+
509
+
510
+ /*static Z_INLINE
511
+ zboolean z_uint16_multiplication_overflows_3(zuint16 a, zuint16 b, zuint16 c)
512
+ {return FALSE;}
513
+
514
+
515
+ static Z_INLINE
516
+ zboolean z_uint16_multiplication_overflows_4(zuint16 a, zuint16 b, zuint16 c, zuint16 d)
517
+ {return FALSE;}*/
518
+
519
+
520
+ static Z_INLINE
521
+ zboolean z_uint16_subtraction_overflows(zuint16 a, zuint16 b)
522
+ {return b > a;}
523
+
524
+
525
+ /*static Z_INLINE
526
+ zboolean z_uint16_subtraction_overflows_3(zuint16 a, zuint16 b, zuint16 c)
527
+ {return FALSE;}
528
+
529
+
530
+ static Z_INLINE
531
+ zboolean z_uint16_subtraction_overflows_4(zuint16 a, zuint16 b, zuint16 c, zuint16 d)
532
+ {return FALSE;}*/
533
+
534
+
535
+ static Z_INLINE
536
+ zuint8 z_uint16_minimum_storage_size(zuint16 value)
537
+ {return value >> 8 ? 2 : 1;}
538
+
539
+
540
+ #if Z_COMPILER_HAS_FUNCTION(UINT16_ATOMIC_ADD_THEN_GET)
541
+ # define z_uint16_atomic_add_then_get Z_COMPILER_FUNCTION(UINT16_ATOMIC_ADD_THEN_GET)
542
+ #endif
543
+
544
+ #if Z_COMPILER_HAS_FUNCTION(UINT16_ATOMIC_AND_THEN_GET)
545
+ # define z_uint16_atomic_and_then_get Z_COMPILER_FUNCTION(UINT16_ATOMIC_AND_THEN_GET)
546
+ #endif
547
+
548
+ #if Z_COMPILER_HAS_FUNCTION(UINT16_ATOMIC_DECREMENT_THEN_GET)
549
+ # define z_uint16_atomic_decrement_then_get Z_COMPILER_FUNCTION(UINT16_ATOMIC_DECREMENT_THEN_GET)
550
+ #endif
551
+
552
+ #if Z_COMPILER_HAS_FUNCTION(UINT16_ATOMIC_GET_THEN_ADD)
553
+ # define z_uint16_atomic_get_then_add Z_COMPILER_FUNCTION(UINT16_ATOMIC_GET_THEN_ADD)
554
+ #endif
555
+
556
+ #if Z_COMPILER_HAS_FUNCTION(UINT16_ATOMIC_GET_THEN_AND)
557
+ # define z_uint16_atomic_get_then_and Z_COMPILER_FUNCTION(UINT16_ATOMIC_GET_THEN_AND)
558
+ #endif
559
+
560
+ #if Z_COMPILER_HAS_FUNCTION(UINT16_ATOMIC_GET_THEN_DECREMENT)
561
+ # define z_uint16_atomic_get_then_decrement Z_COMPILER_FUNCTION(UINT16_ATOMIC_GET_THEN_DECREMENT)
562
+ #endif
563
+
564
+ #if Z_COMPILER_HAS_FUNCTION(UINT16_ATOMIC_GET_THEN_INCREMENT)
565
+ # define z_uint16_atomic_get_then_increment Z_COMPILER_FUNCTION(UINT16_ATOMIC_GET_THEN_INCREMENT)
566
+ #endif
567
+
568
+ #if Z_COMPILER_HAS_FUNCTION(UINT16_ATOMIC_GET_THEN_NAND)
569
+ # define z_uint16_atomic_get_then_nand Z_COMPILER_FUNCTION(UINT16_ATOMIC_GET_THEN_NAND)
570
+ #endif
571
+
572
+ #if Z_COMPILER_HAS_FUNCTION(UINT16_ATOMIC_GET_THEN_NOT)
573
+ # define z_uint16_atomic_get_then_not Z_COMPILER_FUNCTION(UINT16_ATOMIC_GET_THEN_NOT)
574
+ #endif
575
+
576
+ #if Z_COMPILER_HAS_FUNCTION(UINT16_ATOMIC_GET_THEN_OR)
577
+ # define z_uint16_atomic_get_then_or Z_COMPILER_FUNCTION(UINT16_ATOMIC_GET_THEN_OR)
578
+ #endif
579
+
580
+ #if Z_COMPILER_HAS_FUNCTION(UINT16_ATOMIC_GET_THEN_SET)
581
+ # define z_uint16_atomic_get_then_set Z_COMPILER_FUNCTION(UINT16_ATOMIC_GET_THEN_SET)
582
+ #endif
583
+
584
+ #if Z_COMPILER_HAS_FUNCTION(UINT16_ATOMIC_GET_THEN_SUBTRACT)
585
+ # define z_uint16_atomic_get_then_subtract Z_COMPILER_FUNCTION(UINT16_ATOMIC_GET_THEN_SUBTRACT)
586
+ #endif
587
+
588
+ #if Z_COMPILER_HAS_FUNCTION(UINT16_ATOMIC_GET_THEN_XOR)
589
+ # define z_uint16_atomic_get_then_xor Z_COMPILER_FUNCTION(UINT16_ATOMIC_GET_THEN_XOR)
590
+ #endif
591
+
592
+ #if Z_COMPILER_HAS_FUNCTION(UINT16_ATOMIC_INCREMENT_THEN_GET)
593
+ # define z_uint16_atomic_increment_then_get Z_COMPILER_FUNCTION(UINT16_ATOMIC_INCREMENT_THEN_GET)
594
+ #endif
595
+
596
+ #if Z_COMPILER_HAS_FUNCTION(UINT16_ATOMIC_NAND_THEN_GET)
597
+ # define z_uint16_atomic_nand_then_get Z_COMPILER_FUNCTION(UINT16_ATOMIC_NAND_THEN_GET)
598
+ #endif
599
+
600
+ #if Z_COMPILER_HAS_FUNCTION(UINT16_ATOMIC_NOT_THEN_GET)
601
+ # define z_uint16_atomic_not_then_get Z_COMPILER_FUNCTION(UINT16_ATOMIC_NOT_THEN_GET)
602
+ #endif
603
+
604
+ #if Z_COMPILER_HAS_FUNCTION(UINT16_ATOMIC_OR_THEN_GET)
605
+ # define z_uint16_atomic_or_then_get Z_COMPILER_FUNCTION(UINT16_ATOMIC_OR_THEN_GET)
606
+ #endif
607
+
608
+ #if Z_COMPILER_HAS_FUNCTION(UINT16_ATOMIC_SET_IF_EQUAL)
609
+ # define z_uint16_atomic_set_if_equal Z_COMPILER_FUNCTION(UINT16_ATOMIC_SET_IF_EQUAL)
610
+ #endif
611
+
612
+ #if Z_COMPILER_HAS_FUNCTION(UINT16_ATOMIC_SUBTRACT_THEN_GET)
613
+ # define z_uint16_atomic_subtract_then_get Z_COMPILER_FUNCTION(UINT16_ATOMIC_SUBTRACT_THEN_GET)
614
+ #endif
615
+
616
+ #if Z_COMPILER_HAS_FUNCTION(UINT16_ATOMIC_XOR_THEN_GET)
617
+ # define z_uint16_atomic_xor_then_get Z_COMPILER_FUNCTION(UINT16_ATOMIC_XOR_THEN_GET)
618
+ #endif
619
+
620
+
621
+ /* MARK: - sint16 */
622
+
623
+
624
+ Z_IMPLEMENTATION_COMMON (sint16)
625
+ Z_IMPLEMENTATION_SIGNED (sint16)
626
+ Z_IMPLEMENTATION_REVERSE(sint16, 16, 1)
627
+ Z_IMPLEMENTATION_REVERSE(sint16, 16, 2)
628
+ Z_IMPLEMENTATION_REVERSE(sint16, 16, 4)
629
+ Z_IMPLEMENTATION_REVERSE(sint16, 16, 8)
630
+ Z_IMPLEMENTATION_ROTATE (sint16, 16)
631
+
632
+
633
+ #define z_sint16_reverse z_sint16_reverse_in_8bit
634
+
635
+ #if Z_SINT16_ENDIANNESS == Z_ENDIANNESS_BIG
636
+
637
+ # define z_sint16_big_endian Z_SAME
638
+ # define z_sint16_little_endian z_sint16_reverse
639
+
640
+ #elif Z_SINT16_ENDIANNESS == Z_ENDIANNESS_LITTLE
641
+
642
+ # define z_sint16_big_endian z_sint16_reverse
643
+ # define z_sint16_little_endian Z_SAME
644
+
645
+ #endif
646
+
647
+
648
+ /*static Z_INLINE
649
+ zboolean z_sint16_addition_overflows(zsint16 a, zsint16 b)
650
+ {return FALSE;}
651
+
652
+
653
+ static Z_INLINE
654
+ zboolean z_sint16_addition_overflows_3(zsint16 a, zsint16 b, zsint16 c)
655
+ {return FALSE;}
656
+
657
+
658
+ static Z_INLINE
659
+ zboolean z_sint16_addition_overflows_4(zsint16 a, zsint16 b, zsint16 c, zsint16 d)
660
+ {return FALSE;}
661
+
662
+
663
+ static Z_INLINE
664
+ zboolean z_sint16_multiplication_overflows(zsint16 a, zsint16 b)
665
+ {return FALSE;}
666
+
667
+
668
+ static Z_INLINE
669
+ zboolean z_sint16_multiplication_overflows_3(zsint16 a, zsint16 b, zsint16 c)
670
+ {return FALSE;}
671
+
672
+
673
+ static Z_INLINE
674
+ zboolean z_sint16_multiplication_overflows_4(zsint16 a, zsint16 b, zsint16 c, zsint16 d)
675
+ {return FALSE;}
676
+
677
+
678
+ static Z_INLINE
679
+ zboolean z_sint16_subtraction_overflows(zsint16 a, zsint16 b)
680
+ {return FALSE;}
681
+
682
+
683
+ static Z_INLINE
684
+ zboolean z_sint16_subtraction_overflows_3(zsint16 a, zsint16 b, zsint16 c)
685
+ {return FALSE;}
686
+
687
+
688
+ static Z_INLINE
689
+ zboolean z_sint16_subtraction_overflows_4(zsint16 a, zsint16 b, zsint16 c, zsint16 d)
690
+ {return FALSE;}*/
691
+
692
+
693
+ #if Z_COMPILER_HAS_FUNCTION(SINT16_ATOMIC_ADD_THEN_GET)
694
+ # define z_sint16_atomic_add_then_get Z_COMPILER_FUNCTION(SINT16_ATOMIC_ADD_THEN_GET)
695
+ #endif
696
+
697
+ #if Z_COMPILER_HAS_FUNCTION(SINT16_ATOMIC_AND_THEN_GET)
698
+ # define z_sint16_atomic_and_then_get Z_COMPILER_FUNCTION(SINT16_ATOMIC_AND_THEN_GET)
699
+ #endif
700
+
701
+ #if Z_COMPILER_HAS_FUNCTION(SINT16_ATOMIC_DECREMENT_THEN_GET)
702
+ # define z_sint16_atomic_decrement_then_get Z_COMPILER_FUNCTION(SINT16_ATOMIC_DECREMENT_THEN_GET)
703
+ #endif
704
+
705
+ #if Z_COMPILER_HAS_FUNCTION(SINT16_ATOMIC_GET_THEN_ADD)
706
+ # define z_sint16_atomic_get_then_add Z_COMPILER_FUNCTION(SINT16_ATOMIC_GET_THEN_ADD)
707
+ #endif
708
+
709
+ #if Z_COMPILER_HAS_FUNCTION(SINT16_ATOMIC_GET_THEN_AND)
710
+ # define z_sint16_atomic_get_then_and Z_COMPILER_FUNCTION(SINT16_ATOMIC_GET_THEN_AND)
711
+ #endif
712
+
713
+ #if Z_COMPILER_HAS_FUNCTION(SINT16_ATOMIC_GET_THEN_DECREMENT)
714
+ # define z_sint16_atomic_get_then_decrement Z_COMPILER_FUNCTION(SINT16_ATOMIC_GET_THEN_DECREMENT)
715
+ #endif
716
+
717
+ #if Z_COMPILER_HAS_FUNCTION(SINT16_ATOMIC_GET_THEN_INCREMENT)
718
+ # define z_sint16_atomic_get_then_increment Z_COMPILER_FUNCTION(SINT16_ATOMIC_GET_THEN_INCREMENT)
719
+ #endif
720
+
721
+ #if Z_COMPILER_HAS_FUNCTION(SINT16_ATOMIC_GET_THEN_NAND)
722
+ # define z_sint16_atomic_get_then_nand Z_COMPILER_FUNCTION(SINT16_ATOMIC_GET_THEN_NAND)
723
+ #endif
724
+
725
+ #if Z_COMPILER_HAS_FUNCTION(SINT16_ATOMIC_GET_THEN_NOT)
726
+ # define z_sint16_atomic_get_then_not Z_COMPILER_FUNCTION(SINT16_ATOMIC_GET_THEN_NOT)
727
+ #endif
728
+
729
+ #if Z_COMPILER_HAS_FUNCTION(SINT16_ATOMIC_GET_THEN_OR)
730
+ # define z_sint16_atomic_get_then_or Z_COMPILER_FUNCTION(SINT16_ATOMIC_GET_THEN_OR)
731
+ #endif
732
+
733
+ #if Z_COMPILER_HAS_FUNCTION(SINT16_ATOMIC_GET_THEN_SET)
734
+ # define z_sint16_atomic_get_then_set Z_COMPILER_FUNCTION(SINT16_ATOMIC_GET_THEN_SET)
735
+ #endif
736
+
737
+ #if Z_COMPILER_HAS_FUNCTION(SINT16_ATOMIC_GET_THEN_SUBTRACT)
738
+ # define z_sint16_atomic_get_then_subtract Z_COMPILER_FUNCTION(SINT16_ATOMIC_GET_THEN_SUBTRACT)
739
+ #endif
740
+
741
+ #if Z_COMPILER_HAS_FUNCTION(SINT16_ATOMIC_GET_THEN_XOR)
742
+ # define z_sint16_atomic_get_then_xor Z_COMPILER_FUNCTION(SINT16_ATOMIC_GET_THEN_XOR)
743
+ #endif
744
+
745
+ #if Z_COMPILER_HAS_FUNCTION(SINT16_ATOMIC_INCREMENT_THEN_GET)
746
+ # define z_sint16_atomic_increment_then_get Z_COMPILER_FUNCTION(SINT16_ATOMIC_INCREMENT_THEN_GET)
747
+ #endif
748
+
749
+ #if Z_COMPILER_HAS_FUNCTION(SINT16_ATOMIC_NAND_THEN_GET)
750
+ # define z_sint16_atomic_nand_then_get Z_COMPILER_FUNCTION(SINT16_ATOMIC_NAND_THEN_GET)
751
+ #endif
752
+
753
+ #if Z_COMPILER_HAS_FUNCTION(SINT16_ATOMIC_NOT_THEN_GET)
754
+ # define z_sint16_atomic_not_then_get Z_COMPILER_FUNCTION(SINT16_ATOMIC_NOT_THEN_GET)
755
+ #endif
756
+
757
+ #if Z_COMPILER_HAS_FUNCTION(SINT16_ATOMIC_OR_THEN_GET)
758
+ # define z_sint16_atomic_or_then_get Z_COMPILER_FUNCTION(SINT16_ATOMIC_OR_THEN_GET)
759
+ #endif
760
+
761
+ #if Z_COMPILER_HAS_FUNCTION(SINT16_ATOMIC_SET_IF_EQUAL)
762
+ # define z_sint16_atomic_set_if_equal Z_COMPILER_FUNCTION(SINT16_ATOMIC_SET_IF_EQUAL)
763
+ #endif
764
+
765
+ #if Z_COMPILER_HAS_FUNCTION(SINT16_ATOMIC_SUBTRACT_THEN_GET)
766
+ # define z_sint16_atomic_subtract_then_get Z_COMPILER_FUNCTION(SINT16_ATOMIC_SUBTRACT_THEN_GET)
767
+ #endif
768
+
769
+ #if Z_COMPILER_HAS_FUNCTION(SINT16_ATOMIC_XOR_THEN_GET)
770
+ # define z_sint16_atomic_xor_then_get Z_COMPILER_FUNCTION(SINT16_ATOMIC_XOR_THEN_GET)
771
+ #endif
772
+
773
+
774
+ /* MARK: - uint32 */
775
+
776
+
777
+ Z_IMPLEMENTATION_COMMON (uint32)
778
+ Z_IMPLEMENTATION_REVERSE(uint32, 32, 1)
779
+ Z_IMPLEMENTATION_REVERSE(uint32, 32, 2)
780
+ Z_IMPLEMENTATION_REVERSE(uint32, 32, 4)
781
+ Z_IMPLEMENTATION_REVERSE(uint32, 32, 8)
782
+ Z_IMPLEMENTATION_REVERSE(uint32, 32, 16)
783
+ Z_IMPLEMENTATION_ROTATE (uint32, 32)
784
+
785
+
786
+ #define z_uint32_reverse z_uint32_reverse_in_8bit
787
+
788
+ #if Z_UINT32_ENDIANNESS == Z_ENDIANNESS_BIG
789
+
790
+ # define z_uint32_big_endian Z_SAME
791
+ # define z_uint32_little_endian z_uint32_reverse
792
+
793
+ #elif Z_UINT32_ENDIANNESS == Z_ENDIANNESS_LITTLE
794
+
795
+ # define z_uint32_big_endian z_uint32_reverse
796
+ # define z_uint32_little_endian Z_SAME
797
+
798
+ #endif
799
+
800
+
801
+ /*static Z_INLINE
802
+ zboolean z_uint32_addition_overflows(zuint32 a, zuint32 b)
803
+ {return FALSE;}
804
+
805
+
806
+ static Z_INLINE
807
+ zboolean z_uint32_addition_overflows_3(zuint32 a, zuint32 b, zuint32 c)
808
+ {return FALSE;}
809
+
810
+
811
+ static Z_INLINE
812
+ zboolean z_uint32_addition_overflows_4(zuint32 a, zuint32 b, zuint32 c, zuint32 d)
813
+ {return FALSE;}
814
+
815
+
816
+ static Z_INLINE
817
+ zboolean z_uint32_multiplication_overflows(zuint32 a, zuint32 b)
818
+ {return FALSE;}
819
+
820
+
821
+ static Z_INLINE
822
+ zboolean z_uint32_multiplication_overflows_3(zuint32 a, zuint32 b, zuint32 c)
823
+ {return FALSE;}
824
+
825
+
826
+ static Z_INLINE
827
+ zboolean z_uint32_multiplication_overflows_4(zuint32 a, zuint32 b, zuint32 c, zuint32 d)
828
+ {return FALSE;}
829
+
830
+
831
+ static Z_INLINE
832
+ zboolean z_uint32_subtraction_overflows(zuint32 a, zuint32 b)
833
+ {return b > a;}
834
+
835
+
836
+ static Z_INLINE
837
+ zboolean z_uint32_subtraction_overflows_3(zuint32 a, zuint32 b, zuint32 c)
838
+ {return FALSE;}
839
+
840
+
841
+ static Z_INLINE
842
+ zboolean z_uint32_subtraction_overflows_4(zuint32 a, zuint32 b, zuint32 c, zuint32 d)
843
+ {return FALSE;}*/
844
+
845
+
846
+ static Z_INLINE
847
+ zuint8 z_uint32_minimum_storage_size(zuint32 value)
848
+ {
849
+ if ((value >> 24)) return 4;
850
+ if ((value >> 16)) return 3;
851
+ if ((value >> 8)) return 2;
852
+ return 1;
853
+ }
854
+
855
+
856
+ #if Z_COMPILER_HAS_FUNCTION(UINT32_ATOMIC_ADD_THEN_GET)
857
+ # define z_uint32_atomic_add_then_get Z_COMPILER_FUNCTION(UINT32_ATOMIC_ADD_THEN_GET)
858
+ #endif
859
+
860
+ #if Z_COMPILER_HAS_FUNCTION(UINT32_ATOMIC_AND_THEN_GET)
861
+ # define z_uint32_atomic_and_then_get Z_COMPILER_FUNCTION(UINT32_ATOMIC_AND_THEN_GET)
862
+ #endif
863
+
864
+ #if Z_COMPILER_HAS_FUNCTION(UINT32_ATOMIC_DECREMENT_THEN_GET)
865
+ # define z_uint32_atomic_decrement_then_get Z_COMPILER_FUNCTION(UINT32_ATOMIC_DECREMENT_THEN_GET)
866
+ #endif
867
+
868
+ #if Z_COMPILER_HAS_FUNCTION(UINT32_ATOMIC_GET_THEN_ADD)
869
+ # define z_uint32_atomic_get_then_add Z_COMPILER_FUNCTION(UINT32_ATOMIC_GET_THEN_ADD)
870
+ #endif
871
+
872
+ #if Z_COMPILER_HAS_FUNCTION(UINT32_ATOMIC_GET_THEN_AND)
873
+ # define z_uint32_atomic_get_then_and Z_COMPILER_FUNCTION(UINT32_ATOMIC_GET_THEN_AND)
874
+ #endif
875
+
876
+ #if Z_COMPILER_HAS_FUNCTION(UINT32_ATOMIC_GET_THEN_DECREMENT)
877
+ # define z_uint32_atomic_get_then_decrement Z_COMPILER_FUNCTION(UINT32_ATOMIC_GET_THEN_DECREMENT)
878
+ #endif
879
+
880
+ #if Z_COMPILER_HAS_FUNCTION(UINT32_ATOMIC_GET_THEN_INCREMENT)
881
+ # define z_uint32_atomic_get_then_increment Z_COMPILER_FUNCTION(UINT32_ATOMIC_GET_THEN_INCREMENT)
882
+ #endif
883
+
884
+ #if Z_COMPILER_HAS_FUNCTION(UINT32_ATOMIC_GET_THEN_NAND)
885
+ # define z_uint32_atomic_get_then_nand Z_COMPILER_FUNCTION(UINT32_ATOMIC_GET_THEN_NAND)
886
+ #endif
887
+
888
+ #if Z_COMPILER_HAS_FUNCTION(UINT32_ATOMIC_GET_THEN_NOT)
889
+ # define z_uint32_atomic_get_then_not Z_COMPILER_FUNCTION(UINT32_ATOMIC_GET_THEN_NOT)
890
+ #endif
891
+
892
+ #if Z_COMPILER_HAS_FUNCTION(UINT32_ATOMIC_GET_THEN_OR)
893
+ # define z_uint32_atomic_get_then_or Z_COMPILER_FUNCTION(UINT32_ATOMIC_GET_THEN_OR)
894
+ #endif
895
+
896
+ #if Z_COMPILER_HAS_FUNCTION(UINT32_ATOMIC_GET_THEN_SET)
897
+ # define z_uint32_atomic_get_then_set Z_COMPILER_FUNCTION(UINT32_ATOMIC_GET_THEN_SET)
898
+ #endif
899
+
900
+ #if Z_COMPILER_HAS_FUNCTION(UINT32_ATOMIC_GET_THEN_SUBTRACT)
901
+ # define z_uint32_atomic_get_then_subtract Z_COMPILER_FUNCTION(UINT32_ATOMIC_GET_THEN_SUBTRACT)
902
+ #endif
903
+
904
+ #if Z_COMPILER_HAS_FUNCTION(UINT32_ATOMIC_GET_THEN_XOR)
905
+ # define z_uint32_atomic_get_then_xor Z_COMPILER_FUNCTION(UINT32_ATOMIC_GET_THEN_XOR)
906
+ #endif
907
+
908
+ #if Z_COMPILER_HAS_FUNCTION(UINT32_ATOMIC_INCREMENT_THEN_GET)
909
+ # define z_uint32_atomic_increment_then_get Z_COMPILER_FUNCTION(UINT32_ATOMIC_INCREMENT_THEN_GET)
910
+ #endif
911
+
912
+ #if Z_COMPILER_HAS_FUNCTION(UINT32_ATOMIC_NAND_THEN_GET)
913
+ # define z_uint32_atomic_nand_then_get Z_COMPILER_FUNCTION(UINT32_ATOMIC_NAND_THEN_GET)
914
+ #endif
915
+
916
+ #if Z_COMPILER_HAS_FUNCTION(UINT32_ATOMIC_NOT_THEN_GET)
917
+ # define z_uint32_atomic_not_then_get Z_COMPILER_FUNCTION(UINT32_ATOMIC_NOT_THEN_GET)
918
+ #endif
919
+
920
+ #if Z_COMPILER_HAS_FUNCTION(UINT32_ATOMIC_OR_THEN_GET)
921
+ # define z_uint32_atomic_or_then_get Z_COMPILER_FUNCTION(UINT32_ATOMIC_OR_THEN_GET)
922
+ #endif
923
+
924
+ #if Z_COMPILER_HAS_FUNCTION(UINT32_ATOMIC_SET_IF_EQUAL)
925
+ # define z_uint32_atomic_set_if_equal Z_COMPILER_FUNCTION(UINT32_ATOMIC_SET_IF_EQUAL)
926
+ #endif
927
+
928
+ #if Z_COMPILER_HAS_FUNCTION(UINT32_ATOMIC_SUBTRACT_THEN_GET)
929
+ # define z_uint32_atomic_subtract_then_get Z_COMPILER_FUNCTION(UINT32_ATOMIC_SUBTRACT_THEN_GET)
930
+ #endif
931
+
932
+ #if Z_COMPILER_HAS_FUNCTION(UINT32_ATOMIC_XOR_THEN_GET)
933
+ # define z_uint32_atomic_xor_then_get Z_COMPILER_FUNCTION(UINT32_ATOMIC_XOR_THEN_GET)
934
+ #endif
935
+
936
+
937
+ /* MARK: - sint32 */
938
+
939
+
940
+ Z_IMPLEMENTATION_COMMON (sint32)
941
+ Z_IMPLEMENTATION_SIGNED (sint32)
942
+ Z_IMPLEMENTATION_REVERSE(sint32, 32, 1)
943
+ Z_IMPLEMENTATION_REVERSE(sint32, 32, 2)
944
+ Z_IMPLEMENTATION_REVERSE(sint32, 32, 4)
945
+ Z_IMPLEMENTATION_REVERSE(sint32, 32, 8)
946
+ Z_IMPLEMENTATION_REVERSE(sint32, 32, 16)
947
+ Z_IMPLEMENTATION_ROTATE (sint32, 32)
948
+
949
+
950
+ #define z_sint32_reverse z_sint32_reverse_in_8bit
951
+
952
+ #if Z_SINT32_ENDIANNESS == Z_ENDIANNESS_BIG
953
+
954
+ # define z_sint32_big_endian Z_SAME
955
+ # define z_sint32_little_endian z_sint32_reverse
956
+
957
+ #elif Z_SINT32_ENDIANNESS == Z_ENDIANNESS_LITTLE
958
+
959
+ # define z_sint32_big_endian z_sint32_reverse
960
+ # define z_sint32_little_endian Z_SAME
961
+
962
+ #endif
963
+
964
+
965
+ /*static Z_INLINE
966
+ zboolean z_sint32_addition_overflows(zsint32 a, zsint32 b)
967
+ {return FALSE;}
968
+
969
+
970
+ static Z_INLINE
971
+ zboolean z_sint32_addition_overflows_3(zsint32 a, zsint32 b, zsint32 c)
972
+ {return FALSE;}
973
+
974
+
975
+ static Z_INLINE
976
+ zboolean z_sint32_addition_overflows_4(zsint32 a, zsint32 b, zsint32 c, zsint32 d)
977
+ {return FALSE;}
978
+
979
+
980
+ static Z_INLINE
981
+ zboolean z_sint32_multiplication_overflows(zsint32 a, zsint32 b)
982
+ {return FALSE;}
983
+
984
+
985
+ static Z_INLINE
986
+ zboolean z_sint32_multiplication_overflows_3(zsint32 a, zsint32 b, zsint32 c)
987
+ {return FALSE;}
988
+
989
+
990
+ static Z_INLINE
991
+ zboolean z_sint32_multiplication_overflows_4(zsint32 a, zsint32 b, zsint32 c, zsint32 d)
992
+ {return FALSE;}
993
+
994
+
995
+ static Z_INLINE
996
+ zboolean z_sint32_subtraction_overflows(zsint32 a, zsint32 b)
997
+ {return FALSE;}
998
+
999
+
1000
+ static Z_INLINE
1001
+ zboolean z_sint32_subtraction_overflows_3(zsint32 a, zsint32 b, zsint32 c)
1002
+ {return FALSE;}
1003
+
1004
+
1005
+ static Z_INLINE
1006
+ zboolean z_sint32_subtraction_overflows_4(zsint32 a, zsint32 b, zsint32 c, zsint32 d)
1007
+ {return FALSE;}*/
1008
+
1009
+
1010
+ #if Z_COMPILER_HAS_FUNCTION(SINT32_ATOMIC_ADD_THEN_GET)
1011
+ # define z_sint32_atomic_add_then_get Z_COMPILER_FUNCTION(SINT32_ATOMIC_ADD_THEN_GET)
1012
+ #endif
1013
+
1014
+ #if Z_COMPILER_HAS_FUNCTION(SINT32_ATOMIC_AND_THEN_GET)
1015
+ # define z_sint32_atomic_and_then_get Z_COMPILER_FUNCTION(SINT32_ATOMIC_AND_THEN_GET)
1016
+ #endif
1017
+
1018
+ #if Z_COMPILER_HAS_FUNCTION(SINT32_ATOMIC_DECREMENT_THEN_GET)
1019
+ # define z_sint32_atomic_decrement_then_get Z_COMPILER_FUNCTION(SINT32_ATOMIC_DECREMENT_THEN_GET)
1020
+ #endif
1021
+
1022
+ #if Z_COMPILER_HAS_FUNCTION(SINT32_ATOMIC_GET_THEN_ADD)
1023
+ # define z_sint32_atomic_get_then_add Z_COMPILER_FUNCTION(SINT32_ATOMIC_GET_THEN_ADD)
1024
+ #endif
1025
+
1026
+ #if Z_COMPILER_HAS_FUNCTION(SINT32_ATOMIC_GET_THEN_AND)
1027
+ # define z_sint32_atomic_get_then_and Z_COMPILER_FUNCTION(SINT32_ATOMIC_GET_THEN_AND)
1028
+ #endif
1029
+
1030
+ #if Z_COMPILER_HAS_FUNCTION(SINT32_ATOMIC_GET_THEN_DECREMENT)
1031
+ # define z_sint32_atomic_get_then_decrement Z_COMPILER_FUNCTION(SINT32_ATOMIC_GET_THEN_DECREMENT)
1032
+ #endif
1033
+
1034
+ #if Z_COMPILER_HAS_FUNCTION(SINT32_ATOMIC_GET_THEN_INCREMENT)
1035
+ # define z_sint32_atomic_get_then_increment Z_COMPILER_FUNCTION(SINT32_ATOMIC_GET_THEN_INCREMENT)
1036
+ #endif
1037
+
1038
+ #if Z_COMPILER_HAS_FUNCTION(SINT32_ATOMIC_GET_THEN_NAND)
1039
+ # define z_sint32_atomic_get_then_nand Z_COMPILER_FUNCTION(SINT32_ATOMIC_GET_THEN_NAND)
1040
+ #endif
1041
+
1042
+ #if Z_COMPILER_HAS_FUNCTION(SINT32_ATOMIC_GET_THEN_NOT)
1043
+ # define z_sint32_atomic_get_then_not Z_COMPILER_FUNCTION(SINT32_ATOMIC_GET_THEN_NOT)
1044
+ #endif
1045
+
1046
+ #if Z_COMPILER_HAS_FUNCTION(SINT32_ATOMIC_GET_THEN_OR)
1047
+ # define z_sint32_atomic_get_then_or Z_COMPILER_FUNCTION(SINT32_ATOMIC_GET_THEN_OR)
1048
+ #endif
1049
+
1050
+ #if Z_COMPILER_HAS_FUNCTION(SINT32_ATOMIC_GET_THEN_SET)
1051
+ # define z_sint32_atomic_get_then_set Z_COMPILER_FUNCTION(SINT32_ATOMIC_GET_THEN_SET)
1052
+ #endif
1053
+
1054
+ #if Z_COMPILER_HAS_FUNCTION(SINT32_ATOMIC_GET_THEN_SUBTRACT)
1055
+ # define z_sint32_atomic_get_then_subtract Z_COMPILER_FUNCTION(SINT32_ATOMIC_GET_THEN_SUBTRACT)
1056
+ #endif
1057
+
1058
+ #if Z_COMPILER_HAS_FUNCTION(SINT32_ATOMIC_GET_THEN_XOR)
1059
+ # define z_sint32_atomic_get_then_xor Z_COMPILER_FUNCTION(SINT32_ATOMIC_GET_THEN_XOR)
1060
+ #endif
1061
+
1062
+ #if Z_COMPILER_HAS_FUNCTION(SINT32_ATOMIC_INCREMENT_THEN_GET)
1063
+ # define z_sint32_atomic_increment_then_get Z_COMPILER_FUNCTION(SINT32_ATOMIC_INCREMENT_THEN_GET)
1064
+ #endif
1065
+
1066
+ #if Z_COMPILER_HAS_FUNCTION(SINT32_ATOMIC_NAND_THEN_GET)
1067
+ # define z_sint32_atomic_nand_then_get Z_COMPILER_FUNCTION(SINT32_ATOMIC_NAND_THEN_GET)
1068
+ #endif
1069
+
1070
+ #if Z_COMPILER_HAS_FUNCTION(SINT32_ATOMIC_NOT_THEN_GET)
1071
+ # define z_sint32_atomic_not_then_get Z_COMPILER_FUNCTION(SINT32_ATOMIC_NOT_THEN_GET)
1072
+ #endif
1073
+
1074
+ #if Z_COMPILER_HAS_FUNCTION(SINT32_ATOMIC_OR_THEN_GET)
1075
+ # define z_sint32_atomic_or_then_get Z_COMPILER_FUNCTION(SINT32_ATOMIC_OR_THEN_GET)
1076
+ #endif
1077
+
1078
+ #if Z_COMPILER_HAS_FUNCTION(SINT32_ATOMIC_SET_IF_EQUAL)
1079
+ # define z_sint32_atomic_set_if_equal Z_COMPILER_FUNCTION(SINT32_ATOMIC_SET_IF_EQUAL)
1080
+ #endif
1081
+
1082
+ #if Z_COMPILER_HAS_FUNCTION(SINT32_ATOMIC_SUBTRACT_THEN_GET)
1083
+ # define z_sint32_atomic_subtract_then_get Z_COMPILER_FUNCTION(SINT32_ATOMIC_SUBTRACT_THEN_GET)
1084
+ #endif
1085
+
1086
+ #if Z_COMPILER_HAS_FUNCTION(SINT32_ATOMIC_XOR_THEN_GET)
1087
+ # define z_sint32_atomic_xor_then_get Z_COMPILER_FUNCTION(SINT32_ATOMIC_XOR_THEN_GET)
1088
+ #endif
1089
+
1090
+
1091
+ /* MARK: - uint64 */
1092
+
1093
+
1094
+ #ifdef Z_UINT64
1095
+
1096
+ Z_IMPLEMENTATION_COMMON (uint64)
1097
+ Z_IMPLEMENTATION_REVERSE(uint64, 64, 1)
1098
+ Z_IMPLEMENTATION_REVERSE(uint64, 64, 2)
1099
+ Z_IMPLEMENTATION_REVERSE(uint64, 64, 4)
1100
+ Z_IMPLEMENTATION_REVERSE(uint64, 64, 8)
1101
+ Z_IMPLEMENTATION_REVERSE(uint64, 64, 16)
1102
+ Z_IMPLEMENTATION_REVERSE(uint64, 64, 32)
1103
+ Z_IMPLEMENTATION_ROTATE (uint64, 64)
1104
+
1105
+
1106
+ # define z_uint64_reverse z_uint64_reverse_in_8bit
1107
+
1108
+ # if Z_UINT64_ENDIANNESS == Z_ENDIANNESS_BIG
1109
+
1110
+ # define z_uint64_big_endian Z_SAME
1111
+ # define z_uint64_little_endian z_uint64_reverse
1112
+
1113
+ # elif Z_UINT64_ENDIANNESS == Z_ENDIANNESS_LITTLE
1114
+
1115
+ # define z_uint64_big_endian z_uint64_reverse
1116
+ # define z_uint64_little_endian Z_SAME
1117
+
1118
+ # endif
1119
+
1120
+
1121
+ /*static Z_INLINE
1122
+ zboolean z_uint64_addition_overflows(zuint64 a, zuint64 b)
1123
+ {return FALSE;}
1124
+
1125
+
1126
+ static Z_INLINE
1127
+ zboolean z_uint64_addition_overflows_3(zuint64 a, zuint64 b, zuint64 c)
1128
+ {return FALSE;}
1129
+
1130
+
1131
+ static Z_INLINE
1132
+ zboolean z_uint64_addition_overflows_4(zuint64 a, zuint64 b, zuint64 c, zuint64 d)
1133
+ {return FALSE;}
1134
+
1135
+
1136
+ static Z_INLINE
1137
+ zboolean z_uint64_multiplication_overflows(zuint64 a, zuint64 b)
1138
+ {return FALSE;}
1139
+
1140
+ static Z_INLINE
1141
+ zboolean z_uint64_multiplication_overflows_3(zuint64 a, zuint64 b, zuint64 c)
1142
+ {return FALSE;}
1143
+
1144
+
1145
+ static Z_INLINE
1146
+ zboolean z_uint64_multiplication_overflows_4(zuint64 a, zuint64 b, zuint64 c, zuint64 d)
1147
+ {return FALSE;}
1148
+
1149
+
1150
+ static Z_INLINE
1151
+ zboolean z_uint64_subtraction_overflows(zuint64 a, zuint64 b)
1152
+ {return b > a;}
1153
+
1154
+
1155
+ static Z_INLINE
1156
+ zboolean z_uint64_subtraction_overflows_3(zuint64 a, zuint64 b, zuint64 c)
1157
+ {return FALSE;}
1158
+
1159
+
1160
+ static Z_INLINE
1161
+ zboolean z_uint64_subtraction_overflows_4(zuint64 a, zuint64 b, zuint64 c, zuint64 d)
1162
+ {return FALSE;}*/
1163
+
1164
+
1165
+ static Z_INLINE
1166
+ zuint8 z_uint64_minimum_storage_size(zuint64 value)
1167
+ {
1168
+ if ((value >> 56)) return 8;
1169
+ if ((value >> 48)) return 7;
1170
+ if ((value >> 40)) return 6;
1171
+ if ((value >> 32)) return 5;
1172
+ if ((value >> 24)) return 4;
1173
+ if ((value >> 16)) return 3;
1174
+ if ((value >> 8)) return 2;
1175
+ return 1;
1176
+ }
1177
+
1178
+
1179
+ # if Z_COMPILER_HAS_FUNCTION(UINT64_ATOMIC_ADD_THEN_GET)
1180
+ # define z_uint64_atomic_add_then_get Z_COMPILER_FUNCTION(UINT64_ATOMIC_ADD_THEN_GET)
1181
+ # endif
1182
+
1183
+ # if Z_COMPILER_HAS_FUNCTION(UINT64_ATOMIC_AND_THEN_GET)
1184
+ # define z_uint64_atomic_and_then_get Z_COMPILER_FUNCTION(UINT64_ATOMIC_AND_THEN_GET)
1185
+ # endif
1186
+
1187
+ # if Z_COMPILER_HAS_FUNCTION(UINT64_ATOMIC_DECREMENT_THEN_GET)
1188
+ # define z_uint64_atomic_decrement_then_get Z_COMPILER_FUNCTION(UINT64_ATOMIC_DECREMENT_THEN_GET)
1189
+ # endif
1190
+
1191
+ # if Z_COMPILER_HAS_FUNCTION(UINT64_ATOMIC_GET_THEN_ADD)
1192
+ # define z_uint64_atomic_get_then_add Z_COMPILER_FUNCTION(UINT64_ATOMIC_GET_THEN_ADD)
1193
+ # endif
1194
+
1195
+ # if Z_COMPILER_HAS_FUNCTION(UINT64_ATOMIC_GET_THEN_AND)
1196
+ # define z_uint64_atomic_get_then_and Z_COMPILER_FUNCTION(UINT64_ATOMIC_GET_THEN_AND)
1197
+ # endif
1198
+
1199
+ # if Z_COMPILER_HAS_FUNCTION(UINT64_ATOMIC_GET_THEN_DECREMENT)
1200
+ # define z_uint64_atomic_get_then_decrement Z_COMPILER_FUNCTION(UINT64_ATOMIC_GET_THEN_DECREMENT)
1201
+ # endif
1202
+
1203
+ # if Z_COMPILER_HAS_FUNCTION(UINT64_ATOMIC_GET_THEN_INCREMENT)
1204
+ # define z_uint64_atomic_get_then_increment Z_COMPILER_FUNCTION(UINT64_ATOMIC_GET_THEN_INCREMENT)
1205
+ # endif
1206
+
1207
+ # if Z_COMPILER_HAS_FUNCTION(UINT64_ATOMIC_GET_THEN_NAND)
1208
+ # define z_uint64_atomic_get_then_nand Z_COMPILER_FUNCTION(UINT64_ATOMIC_GET_THEN_NAND)
1209
+ # endif
1210
+
1211
+ # if Z_COMPILER_HAS_FUNCTION(UINT64_ATOMIC_GET_THEN_NOT)
1212
+ # define z_uint64_atomic_get_then_not Z_COMPILER_FUNCTION(UINT64_ATOMIC_GET_THEN_NOT)
1213
+ # endif
1214
+
1215
+ # if Z_COMPILER_HAS_FUNCTION(UINT64_ATOMIC_GET_THEN_OR)
1216
+ # define z_uint64_atomic_get_then_or Z_COMPILER_FUNCTION(UINT64_ATOMIC_GET_THEN_OR)
1217
+ # endif
1218
+
1219
+ # if Z_COMPILER_HAS_FUNCTION(UINT64_ATOMIC_GET_THEN_SET)
1220
+ # define z_uint64_atomic_get_then_set Z_COMPILER_FUNCTION(UINT64_ATOMIC_GET_THEN_SET)
1221
+ # endif
1222
+
1223
+ # if Z_COMPILER_HAS_FUNCTION(UINT64_ATOMIC_GET_THEN_SUBTRACT)
1224
+ # define z_uint64_atomic_get_then_subtract Z_COMPILER_FUNCTION(UINT64_ATOMIC_GET_THEN_SUBTRACT)
1225
+ # endif
1226
+
1227
+ # if Z_COMPILER_HAS_FUNCTION(UINT64_ATOMIC_GET_THEN_XOR)
1228
+ # define z_uint64_atomic_get_then_xor Z_COMPILER_FUNCTION(UINT64_ATOMIC_GET_THEN_XOR)
1229
+ # endif
1230
+
1231
+ # if Z_COMPILER_HAS_FUNCTION(UINT64_ATOMIC_INCREMENT_THEN_GET)
1232
+ # define z_uint64_atomic_increment_then_get Z_COMPILER_FUNCTION(UINT64_ATOMIC_INCREMENT_THEN_GET)
1233
+ # endif
1234
+
1235
+ # if Z_COMPILER_HAS_FUNCTION(UINT64_ATOMIC_NAND_THEN_GET)
1236
+ # define z_uint64_atomic_nand_then_get Z_COMPILER_FUNCTION(UINT64_ATOMIC_NAND_THEN_GET)
1237
+ # endif
1238
+
1239
+ # if Z_COMPILER_HAS_FUNCTION(UINT64_ATOMIC_NOT_THEN_GET)
1240
+ # define z_uint64_atomic_not_then_get Z_COMPILER_FUNCTION(UINT64_ATOMIC_NOT_THEN_GET)
1241
+ # endif
1242
+
1243
+ # if Z_COMPILER_HAS_FUNCTION(UINT64_ATOMIC_OR_THEN_GET)
1244
+ # define z_uint64_atomic_or_then_get Z_COMPILER_FUNCTION(UINT64_ATOMIC_OR_THEN_GET)
1245
+ # endif
1246
+
1247
+ # if Z_COMPILER_HAS_FUNCTION(UINT64_ATOMIC_SET_IF_EQUAL)
1248
+ # define z_uint64_atomic_set_if_equal Z_COMPILER_FUNCTION(UINT64_ATOMIC_SET_IF_EQUAL)
1249
+ # endif
1250
+
1251
+ # if Z_COMPILER_HAS_FUNCTION(UINT64_ATOMIC_SUBTRACT_THEN_GET)
1252
+ # define z_uint64_atomic_subtract_then_get Z_COMPILER_FUNCTION(UINT64_ATOMIC_SUBTRACT_THEN_GET)
1253
+ # endif
1254
+
1255
+ # if Z_COMPILER_HAS_FUNCTION(UINT64_ATOMIC_XOR_THEN_GET)
1256
+ # define z_uint64_atomic_xor_then_get Z_COMPILER_FUNCTION(UINT64_ATOMIC_XOR_THEN_GET)
1257
+ # endif
1258
+
1259
+ #endif
1260
+
1261
+
1262
+ /* MARK: - sint64 */
1263
+
1264
+
1265
+ #ifdef Z_SINT64
1266
+
1267
+ Z_IMPLEMENTATION_COMMON (sint64)
1268
+ Z_IMPLEMENTATION_SIGNED (sint64)
1269
+ Z_IMPLEMENTATION_REVERSE(sint64, 64, 1)
1270
+ Z_IMPLEMENTATION_REVERSE(sint64, 64, 2)
1271
+ Z_IMPLEMENTATION_REVERSE(sint64, 64, 4)
1272
+ Z_IMPLEMENTATION_REVERSE(sint64, 64, 8)
1273
+ Z_IMPLEMENTATION_REVERSE(sint64, 64, 16)
1274
+ Z_IMPLEMENTATION_REVERSE(sint64, 64, 32)
1275
+ Z_IMPLEMENTATION_ROTATE (sint64, 64)
1276
+
1277
+
1278
+ # define z_sint64_reverse z_sint64_reverse_in_8bit
1279
+
1280
+ # if Z_SINT64_ENDIANNESS == Z_ENDIANNESS_BIG
1281
+
1282
+ # define z_sint64_big_endian Z_SAME
1283
+ # define z_sint64_little_endian z_sint64_reverse
1284
+
1285
+ # elif Z_SINT64_ENDIANNESS == Z_ENDIANNESS_LITTLE
1286
+
1287
+ # define z_sint64_big_endian z_sint64_reverse
1288
+ # define z_sint64_little_endian Z_SAME
1289
+
1290
+ # endif
1291
+
1292
+
1293
+ /*static Z_INLINE
1294
+ zboolean z_sint64_addition_overflows(zsint64 a, zsint64 b)
1295
+ {return FALSE;}
1296
+
1297
+
1298
+ static Z_INLINE
1299
+ zboolean z_sint64_addition_overflows_3(zsint64 a, zsint64 b, zsint64 c)
1300
+ {return FALSE;}
1301
+
1302
+
1303
+ static Z_INLINE
1304
+ zboolean z_sint64_addition_overflows_4(zsint64 a, zsint64 b, zsint64 c, zsint64 d)
1305
+ {return FALSE;}
1306
+
1307
+
1308
+ static Z_INLINE
1309
+ zboolean z_sint64_multiplication_overflows(zsint64 a, zsint64 b)
1310
+ {return FALSE;}
1311
+
1312
+
1313
+ static Z_INLINE
1314
+ zboolean z_sint64_multiplication_overflows_3(zsint64 a, zsint64 b, zsint64 c)
1315
+ {return FALSE;}
1316
+
1317
+
1318
+ static Z_INLINE
1319
+ zboolean z_sint64_multiplication_overflows_4(zsint64 a, zsint64 b, zsint64 c, zsint64 d)
1320
+ {return FALSE;}
1321
+
1322
+
1323
+ static Z_INLINE
1324
+ zboolean z_sint64_subtraction_overflows(zsint64 a, zsint64 b)
1325
+ {return FALSE;}
1326
+
1327
+
1328
+ static Z_INLINE
1329
+ zboolean z_sint64_subtraction_overflows_3(zsint64 a, zsint64 b, zsint64 c)
1330
+ {return FALSE;}
1331
+
1332
+
1333
+ static Z_INLINE
1334
+ zboolean z_sint64_subtraction_overflows_4(zsint64 a, zsint64 b, zsint64 c, zsint64 d)
1335
+ {return FALSE;}*/
1336
+
1337
+
1338
+ # if Z_COMPILER_HAS_FUNCTION(SINT64_ATOMIC_ADD_THEN_GET)
1339
+ # define z_sint64_atomic_add_then_get Z_COMPILER_FUNCTION(SINT64_ATOMIC_ADD_THEN_GET)
1340
+ # endif
1341
+
1342
+ # if Z_COMPILER_HAS_FUNCTION(SINT64_ATOMIC_AND_THEN_GET)
1343
+ # define z_sint64_atomic_and_then_get Z_COMPILER_FUNCTION(SINT64_ATOMIC_AND_THEN_GET)
1344
+ # endif
1345
+
1346
+ # if Z_COMPILER_HAS_FUNCTION(SINT64_ATOMIC_DECREMENT_THEN_GET)
1347
+ # define z_sint64_atomic_decrement_then_get Z_COMPILER_FUNCTION(SINT64_ATOMIC_DECREMENT_THEN_GET)
1348
+ # endif
1349
+
1350
+ # if Z_COMPILER_HAS_FUNCTION(SINT64_ATOMIC_GET_THEN_ADD)
1351
+ # define z_sint64_atomic_get_then_add Z_COMPILER_FUNCTION(SINT64_ATOMIC_GET_THEN_ADD)
1352
+ # endif
1353
+
1354
+ # if Z_COMPILER_HAS_FUNCTION(SINT64_ATOMIC_GET_THEN_AND)
1355
+ # define z_sint64_atomic_get_then_and Z_COMPILER_FUNCTION(SINT64_ATOMIC_GET_THEN_AND)
1356
+ # endif
1357
+
1358
+ # if Z_COMPILER_HAS_FUNCTION(SINT64_ATOMIC_GET_THEN_DECREMENT)
1359
+ # define z_sint64_atomic_get_then_decrement Z_COMPILER_FUNCTION(SINT64_ATOMIC_GET_THEN_DECREMENT)
1360
+ # endif
1361
+
1362
+ # if Z_COMPILER_HAS_FUNCTION(SINT64_ATOMIC_GET_THEN_INCREMENT)
1363
+ # define z_sint64_atomic_get_then_increment Z_COMPILER_FUNCTION(SINT64_ATOMIC_GET_THEN_INCREMENT)
1364
+ # endif
1365
+
1366
+ # if Z_COMPILER_HAS_FUNCTION(SINT64_ATOMIC_GET_THEN_NAND)
1367
+ # define z_sint64_atomic_get_then_nand Z_COMPILER_FUNCTION(SINT64_ATOMIC_GET_THEN_NAND)
1368
+ # endif
1369
+
1370
+ # if Z_COMPILER_HAS_FUNCTION(SINT64_ATOMIC_GET_THEN_NOT)
1371
+ # define z_sint64_atomic_get_then_not Z_COMPILER_FUNCTION(SINT64_ATOMIC_GET_THEN_NOT)
1372
+ # endif
1373
+
1374
+ # if Z_COMPILER_HAS_FUNCTION(SINT64_ATOMIC_GET_THEN_OR)
1375
+ # define z_sint64_atomic_get_then_or Z_COMPILER_FUNCTION(SINT64_ATOMIC_GET_THEN_OR)
1376
+ # endif
1377
+
1378
+ # if Z_COMPILER_HAS_FUNCTION(SINT64_ATOMIC_GET_THEN_SET)
1379
+ # define z_sint64_atomic_get_then_set Z_COMPILER_FUNCTION(SINT64_ATOMIC_GET_THEN_SET)
1380
+ # endif
1381
+
1382
+ # if Z_COMPILER_HAS_FUNCTION(SINT64_ATOMIC_GET_THEN_SUBTRACT)
1383
+ # define z_sint64_atomic_get_then_subtract Z_COMPILER_FUNCTION(SINT64_ATOMIC_GET_THEN_SUBTRACT)
1384
+ # endif
1385
+
1386
+ # if Z_COMPILER_HAS_FUNCTION(SINT64_ATOMIC_GET_THEN_XOR)
1387
+ # define z_sint64_atomic_get_then_xor Z_COMPILER_FUNCTION(SINT64_ATOMIC_GET_THEN_XOR)
1388
+ # endif
1389
+
1390
+ # if Z_COMPILER_HAS_FUNCTION(SINT64_ATOMIC_INCREMENT_THEN_GET)
1391
+ # define z_sint64_atomic_increment_then_get Z_COMPILER_FUNCTION(SINT64_ATOMIC_INCREMENT_THEN_GET)
1392
+ # endif
1393
+
1394
+ # if Z_COMPILER_HAS_FUNCTION(SINT64_ATOMIC_NAND_THEN_GET)
1395
+ # define z_sint64_atomic_nand_then_get Z_COMPILER_FUNCTION(SINT64_ATOMIC_NAND_THEN_GET)
1396
+ # endif
1397
+
1398
+ # if Z_COMPILER_HAS_FUNCTION(SINT64_ATOMIC_NOT_THEN_GET)
1399
+ # define z_sint64_atomic_not_then_get Z_COMPILER_FUNCTION(SINT64_ATOMIC_NOT_THEN_GET)
1400
+ # endif
1401
+
1402
+ # if Z_COMPILER_HAS_FUNCTION(SINT64_ATOMIC_OR_THEN_GET)
1403
+ # define z_sint64_atomic_or_then_get Z_COMPILER_FUNCTION(SINT64_ATOMIC_OR_THEN_GET)
1404
+ # endif
1405
+
1406
+ # if Z_COMPILER_HAS_FUNCTION(SINT64_ATOMIC_SET_IF_EQUAL)
1407
+ # define z_sint64_atomic_set_if_equal Z_COMPILER_FUNCTION(SINT64_ATOMIC_SET_IF_EQUAL)
1408
+ # endif
1409
+
1410
+ # if Z_COMPILER_HAS_FUNCTION(SINT64_ATOMIC_SUBTRACT_THEN_GET)
1411
+ # define z_sint64_atomic_subtract_then_get Z_COMPILER_FUNCTION(SINT64_ATOMIC_SUBTRACT_THEN_GET)
1412
+ # endif
1413
+
1414
+ # if Z_COMPILER_HAS_FUNCTION(SINT64_ATOMIC_XOR_THEN_GET)
1415
+ # define z_sint64_atomic_xor_then_get Z_COMPILER_FUNCTION(SINT64_ATOMIC_XOR_THEN_GET)
1416
+ # endif
1417
+
1418
+ #endif
1419
+
1420
+
1421
+ /* MARK: - uint128 */
1422
+
1423
+
1424
+ #ifdef Z_UINT128
1425
+
1426
+ Z_IMPLEMENTATION_COMMON (uint128)
1427
+ Z_IMPLEMENTATION_REVERSE(uint128, 128, 1)
1428
+ Z_IMPLEMENTATION_REVERSE(uint128, 128, 2)
1429
+ Z_IMPLEMENTATION_REVERSE(uint128, 128, 4)
1430
+ Z_IMPLEMENTATION_REVERSE(uint128, 128, 8)
1431
+ Z_IMPLEMENTATION_REVERSE(uint128, 128, 16)
1432
+ Z_IMPLEMENTATION_REVERSE(uint128, 128, 32)
1433
+ Z_IMPLEMENTATION_REVERSE(uint128, 128, 64)
1434
+ Z_IMPLEMENTATION_ROTATE (uint128, 128)
1435
+
1436
+
1437
+ # define z_uint128_reverse z_uint128_reverse_in_8bit
1438
+
1439
+ # if Z_UINT128_ENDIANNESS == Z_ENDIANNESS_BIG
1440
+
1441
+ # define z_uint128_big_endian Z_SAME
1442
+ # define z_uint128_little_endian z_uint128_reverse
1443
+
1444
+ # elif Z_UINT128_ENDIANNESS == Z_ENDIANNESS_LITTLE
1445
+
1446
+ # define z_uint128_big_endian z_uint128_reverse
1447
+ # define z_uint128_little_endian Z_SAME
1448
+
1449
+ # endif
1450
+
1451
+
1452
+ /*static Z_INLINE
1453
+ zboolean z_uint128_addition_overflows(zuint128 a, zuint128 b)
1454
+ {return FALSE;}
1455
+
1456
+
1457
+ static Z_INLINE
1458
+ zboolean z_uint128_addition_overflows_3(zuint128 a, zuint128 b, zuint128 c)
1459
+ {return FALSE;}
1460
+
1461
+
1462
+ static Z_INLINE
1463
+ zboolean z_uint128_addition_overflows_4(zuint128 a, zuint128 b, zuint128 c, zuint128 d)
1464
+ {return FALSE;}
1465
+
1466
+
1467
+ static Z_INLINE
1468
+ zboolean z_uint128_multiplication_overflows(zuint128 a, zuint128 b)
1469
+ {return FALSE;}
1470
+
1471
+
1472
+ static Z_INLINE
1473
+ zboolean z_uint128_multiplication_overflows_3(zuint128 a, zuint128 b, zuint128 c)
1474
+ {return FALSE;}
1475
+
1476
+
1477
+ static Z_INLINE
1478
+ zboolean z_uint128_multiplication_overflows_4(zuint128 a, zuint128 b, zuint128 c, zuint128 d)
1479
+ {return FALSE;}
1480
+
1481
+
1482
+ static Z_INLINE
1483
+ zboolean z_uint128_subtraction_overflows(zuint128 a, zuint128 b)
1484
+ {return b > a;}
1485
+
1486
+
1487
+ static Z_INLINE
1488
+ zboolean z_uint128_subtraction_overflows_3(zuint128 a, zuint128 b, zuint128 c)
1489
+ {return FALSE;}
1490
+
1491
+
1492
+ static Z_INLINE
1493
+ zboolean z_uint128_subtraction_overflows_4(zuint128 a, zuint128 b, zuint128 c, zuint128 d)
1494
+ {return FALSE;}*/
1495
+
1496
+
1497
+ static Z_INLINE
1498
+ zuint8 z_uint128_minimum_storage_size(zuint128 value)
1499
+ {
1500
+ if ((value >> 120)) return 16;
1501
+ if ((value >> 112)) return 15;
1502
+ if ((value >> 104)) return 14;
1503
+ if ((value >> 96)) return 13;
1504
+ if ((value >> 88)) return 12;
1505
+ if ((value >> 80)) return 11;
1506
+ if ((value >> 72)) return 10;
1507
+ if ((value >> 64)) return 9;
1508
+ if ((value >> 56)) return 8;
1509
+ if ((value >> 48)) return 7;
1510
+ if ((value >> 40)) return 6;
1511
+ if ((value >> 32)) return 5;
1512
+ if ((value >> 24)) return 4;
1513
+ if ((value >> 16)) return 3;
1514
+ if ((value >> 8)) return 2;
1515
+ return 1;
1516
+ }
1517
+
1518
+
1519
+ # if Z_COMPILER_HAS_FUNCTION(UINT128_ATOMIC_ADD_THEN_GET)
1520
+ # define z_uint128_atomic_add_then_get Z_COMPILER_FUNCTION(UINT128_ATOMIC_ADD_THEN_GET)
1521
+ # endif
1522
+
1523
+ # if Z_COMPILER_HAS_FUNCTION(UINT128_ATOMIC_AND_THEN_GET)
1524
+ # define z_uint128_atomic_and_then_get Z_COMPILER_FUNCTION(UINT128_ATOMIC_AND_THEN_GET)
1525
+ # endif
1526
+
1527
+ # if Z_COMPILER_HAS_FUNCTION(UINT128_ATOMIC_DECREMENT_THEN_GET)
1528
+ # define z_uint128_atomic_decrement_then_get Z_COMPILER_FUNCTION(UINT128_ATOMIC_DECREMENT_THEN_GET)
1529
+ # endif
1530
+
1531
+ # if Z_COMPILER_HAS_FUNCTION(UINT128_ATOMIC_GET_THEN_ADD)
1532
+ # define z_uint128_atomic_get_then_add Z_COMPILER_FUNCTION(UINT128_ATOMIC_GET_THEN_ADD)
1533
+ # endif
1534
+
1535
+ # if Z_COMPILER_HAS_FUNCTION(UINT128_ATOMIC_GET_THEN_AND)
1536
+ # define z_uint128_atomic_get_then_and Z_COMPILER_FUNCTION(UINT128_ATOMIC_GET_THEN_AND)
1537
+ # endif
1538
+
1539
+ # if Z_COMPILER_HAS_FUNCTION(UINT128_ATOMIC_GET_THEN_DECREMENT)
1540
+ # define z_uint128_atomic_get_then_decrement Z_COMPILER_FUNCTION(UINT128_ATOMIC_GET_THEN_DECREMENT)
1541
+ # endif
1542
+
1543
+ # if Z_COMPILER_HAS_FUNCTION(UINT128_ATOMIC_GET_THEN_INCREMENT)
1544
+ # define z_uint128_atomic_get_then_increment Z_COMPILER_FUNCTION(UINT128_ATOMIC_GET_THEN_INCREMENT)
1545
+ # endif
1546
+
1547
+ # if Z_COMPILER_HAS_FUNCTION(UINT128_ATOMIC_GET_THEN_NAND)
1548
+ # define z_uint128_atomic_get_then_nand Z_COMPILER_FUNCTION(UINT128_ATOMIC_GET_THEN_NAND)
1549
+ # endif
1550
+
1551
+ # if Z_COMPILER_HAS_FUNCTION(UINT128_ATOMIC_GET_THEN_NOT)
1552
+ # define z_uint128_atomic_get_then_not Z_COMPILER_FUNCTION(UINT128_ATOMIC_GET_THEN_NOT)
1553
+ # endif
1554
+
1555
+ # if Z_COMPILER_HAS_FUNCTION(UINT128_ATOMIC_GET_THEN_OR)
1556
+ # define z_uint128_atomic_get_then_or Z_COMPILER_FUNCTION(UINT128_ATOMIC_GET_THEN_OR)
1557
+ # endif
1558
+
1559
+ # if Z_COMPILER_HAS_FUNCTION(UINT128_ATOMIC_GET_THEN_SET)
1560
+ # define z_uint128_atomic_get_then_set Z_COMPILER_FUNCTION(UINT128_ATOMIC_GET_THEN_SET)
1561
+ # endif
1562
+
1563
+ # if Z_COMPILER_HAS_FUNCTION(UINT128_ATOMIC_GET_THEN_SUBTRACT)
1564
+ # define z_uint128_atomic_get_then_subtract Z_COMPILER_FUNCTION(UINT128_ATOMIC_GET_THEN_SUBTRACT)
1565
+ # endif
1566
+
1567
+ # if Z_COMPILER_HAS_FUNCTION(UINT128_ATOMIC_GET_THEN_XOR)
1568
+ # define z_uint128_atomic_get_then_xor Z_COMPILER_FUNCTION(UINT128_ATOMIC_GET_THEN_XOR)
1569
+ # endif
1570
+
1571
+ # if Z_COMPILER_HAS_FUNCTION(UINT128_ATOMIC_INCREMENT_THEN_GET)
1572
+ # define z_uint128_atomic_increment_then_get Z_COMPILER_FUNCTION(UINT128_ATOMIC_INCREMENT_THEN_GET)
1573
+ # endif
1574
+
1575
+ # if Z_COMPILER_HAS_FUNCTION(UINT128_ATOMIC_NAND_THEN_GET)
1576
+ # define z_uint128_atomic_nand_then_get Z_COMPILER_FUNCTION(UINT128_ATOMIC_NAND_THEN_GET)
1577
+ # endif
1578
+
1579
+ # if Z_COMPILER_HAS_FUNCTION(UINT128_ATOMIC_NOT_THEN_GET)
1580
+ # define z_uint128_atomic_not_then_get Z_COMPILER_FUNCTION(UINT128_ATOMIC_NOT_THEN_GET)
1581
+ # endif
1582
+
1583
+ # if Z_COMPILER_HAS_FUNCTION(UINT128_ATOMIC_OR_THEN_GET)
1584
+ # define z_uint128_atomic_or_then_get Z_COMPILER_FUNCTION(UINT128_ATOMIC_OR_THEN_GET)
1585
+ # endif
1586
+
1587
+ # if Z_COMPILER_HAS_FUNCTION(UINT128_ATOMIC_SET_IF_EQUAL)
1588
+ # define z_uint128_atomic_set_if_equal Z_COMPILER_FUNCTION(UINT128_ATOMIC_SET_IF_EQUAL)
1589
+ # endif
1590
+
1591
+ # if Z_COMPILER_HAS_FUNCTION(UINT128_ATOMIC_SUBTRACT_THEN_GET)
1592
+ # define z_uint128_atomic_subtract_then_get Z_COMPILER_FUNCTION(UINT128_ATOMIC_SUBTRACT_THEN_GET)
1593
+ # endif
1594
+
1595
+ # if Z_COMPILER_HAS_FUNCTION(UINT128_ATOMIC_XOR_THEN_GET)
1596
+ # define z_uint128_atomic_xor_then_get Z_COMPILER_FUNCTION(UINT128_ATOMIC_XOR_THEN_GET)
1597
+ # endif
1598
+
1599
+ #endif
1600
+
1601
+
1602
+ /* MARK: - sint128 */
1603
+
1604
+
1605
+ #ifdef Z_SINT128
1606
+
1607
+ Z_IMPLEMENTATION_COMMON (sint128)
1608
+ Z_IMPLEMENTATION_SIGNED (sint128)
1609
+ Z_IMPLEMENTATION_REVERSE(sint128, 128, 1)
1610
+ Z_IMPLEMENTATION_REVERSE(sint128, 128, 2)
1611
+ Z_IMPLEMENTATION_REVERSE(sint128, 128, 4)
1612
+ Z_IMPLEMENTATION_REVERSE(sint128, 128, 8)
1613
+ Z_IMPLEMENTATION_REVERSE(sint128, 128, 16)
1614
+ Z_IMPLEMENTATION_REVERSE(sint128, 128, 32)
1615
+ Z_IMPLEMENTATION_REVERSE(sint128, 128, 64)
1616
+ Z_IMPLEMENTATION_ROTATE (sint128, 128)
1617
+
1618
+
1619
+ # define z_sint128_reverse z_sint128_reverse_in_8bit
1620
+
1621
+ # if Z_SINT128_ENDIANNESS == Z_ENDIANNESS_BIG
1622
+
1623
+ # define z_sint128_big_endian Z_SAME
1624
+ # define z_sint128_little_endian z_sint128_reverse
1625
+
1626
+ # elif Z_SINT128_ENDIANNESS == Z_ENDIANNESS_LITTLE
1627
+
1628
+ # define z_sint128_big_endian z_sint128_reverse
1629
+ # define z_sint128_little_endian Z_SAME
1630
+
1631
+ # endif
1632
+
1633
+
1634
+ /*static Z_INLINE
1635
+ zboolean z_sint128_addition_overflows(zsint128 a, zsint128 b)
1636
+ {return FALSE;}
1637
+
1638
+
1639
+ static Z_INLINE
1640
+ zboolean z_sint128_addition_overflows_3(zsint128 a, zsint128 b, zsint128 c)
1641
+ {return FALSE;}
1642
+
1643
+
1644
+ static Z_INLINE
1645
+ zboolean z_sint128_addition_overflows_4(zsint128 a, zsint128 b, zsint128 c, zsint128 d)
1646
+ {return FALSE;}
1647
+
1648
+
1649
+ static Z_INLINE
1650
+ zboolean z_sint128_multiplication_overflows(zsint128 a, zsint128 b)
1651
+ {return FALSE;}
1652
+
1653
+
1654
+ static Z_INLINE
1655
+ zboolean z_sint128_multiplication_overflows_3(zsint128 a, zsint128 b, zsint128 c)
1656
+ {return FALSE;}
1657
+
1658
+
1659
+ static Z_INLINE
1660
+ zboolean z_sint128_multiplication_overflows_4(zsint128 a, zsint128 b, zsint128 c, zsint128 d)
1661
+ {return FALSE;}
1662
+
1663
+
1664
+ static Z_INLINE
1665
+ zboolean z_sint128_subtraction_overflows(zsint128 a, zsint128 b)
1666
+ {return FALSE;}
1667
+
1668
+
1669
+ static Z_INLINE
1670
+ zboolean z_sint128_subtraction_overflows_3(zsint128 a, zsint128 b, zsint128 c)
1671
+ {return FALSE;}
1672
+
1673
+
1674
+ static Z_INLINE
1675
+ zboolean z_sint128_subtraction_overflows_4(zsint128 a, zsint128 b, zsint128 c, zsint128 d)
1676
+ {return FALSE;}*/
1677
+
1678
+
1679
+ # if Z_COMPILER_HAS_FUNCTION(SINT128_ATOMIC_ADD_THEN_GET)
1680
+ # define z_sint128_atomic_add_then_get Z_COMPILER_FUNCTION(SINT128_ATOMIC_ADD_THEN_GET)
1681
+ # endif
1682
+
1683
+ # if Z_COMPILER_HAS_FUNCTION(SINT128_ATOMIC_AND_THEN_GET)
1684
+ # define z_sint128_atomic_and_then_get Z_COMPILER_FUNCTION(SINT128_ATOMIC_AND_THEN_GET)
1685
+ # endif
1686
+
1687
+ # if Z_COMPILER_HAS_FUNCTION(SINT128_ATOMIC_DECREMENT_THEN_GET)
1688
+ # define z_sint128_atomic_decrement_then_get Z_COMPILER_FUNCTION(SINT128_ATOMIC_DECREMENT_THEN_GET)
1689
+ # endif
1690
+
1691
+ # if Z_COMPILER_HAS_FUNCTION(SINT128_ATOMIC_GET_THEN_ADD)
1692
+ # define z_sint128_atomic_get_then_add Z_COMPILER_FUNCTION(SINT128_ATOMIC_GET_THEN_ADD)
1693
+ # endif
1694
+
1695
+ # if Z_COMPILER_HAS_FUNCTION(SINT128_ATOMIC_GET_THEN_AND)
1696
+ # define z_sint128_atomic_get_then_and Z_COMPILER_FUNCTION(SINT128_ATOMIC_GET_THEN_AND)
1697
+ # endif
1698
+
1699
+ # if Z_COMPILER_HAS_FUNCTION(SINT128_ATOMIC_GET_THEN_DECREMENT)
1700
+ # define z_sint128_atomic_get_then_decrement Z_COMPILER_FUNCTION(SINT128_ATOMIC_GET_THEN_DECREMENT)
1701
+ # endif
1702
+
1703
+ # if Z_COMPILER_HAS_FUNCTION(SINT128_ATOMIC_GET_THEN_INCREMENT)
1704
+ # define z_sint128_atomic_get_then_increment Z_COMPILER_FUNCTION(SINT128_ATOMIC_GET_THEN_INCREMENT)
1705
+ # endif
1706
+
1707
+ # if Z_COMPILER_HAS_FUNCTION(SINT128_ATOMIC_GET_THEN_NAND)
1708
+ # define z_sint128_atomic_get_then_nand Z_COMPILER_FUNCTION(SINT128_ATOMIC_GET_THEN_NAND)
1709
+ # endif
1710
+
1711
+ # if Z_COMPILER_HAS_FUNCTION(SINT128_ATOMIC_GET_THEN_NOT)
1712
+ # define z_sint128_atomic_get_then_not Z_COMPILER_FUNCTION(SINT128_ATOMIC_GET_THEN_NOT)
1713
+ # endif
1714
+
1715
+ # if Z_COMPILER_HAS_FUNCTION(SINT128_ATOMIC_GET_THEN_OR)
1716
+ # define z_sint128_atomic_get_then_or Z_COMPILER_FUNCTION(SINT128_ATOMIC_GET_THEN_OR)
1717
+ # endif
1718
+
1719
+ # if Z_COMPILER_HAS_FUNCTION(SINT128_ATOMIC_GET_THEN_SET)
1720
+ # define z_sint128_atomic_get_then_set Z_COMPILER_FUNCTION(SINT128_ATOMIC_GET_THEN_SET)
1721
+ # endif
1722
+
1723
+ # if Z_COMPILER_HAS_FUNCTION(SINT128_ATOMIC_GET_THEN_SUBTRACT)
1724
+ # define z_sint128_atomic_get_then_subtract Z_COMPILER_FUNCTION(SINT128_ATOMIC_GET_THEN_SUBTRACT)
1725
+ # endif
1726
+
1727
+ # if Z_COMPILER_HAS_FUNCTION(SINT128_ATOMIC_GET_THEN_XOR)
1728
+ # define z_sint128_atomic_get_then_xor Z_COMPILER_FUNCTION(SINT128_ATOMIC_GET_THEN_XOR)
1729
+ # endif
1730
+
1731
+ # if Z_COMPILER_HAS_FUNCTION(SINT128_ATOMIC_INCREMENT_THEN_GET)
1732
+ # define z_sint128_atomic_increment_then_get Z_COMPILER_FUNCTION(SINT128_ATOMIC_INCREMENT_THEN_GET)
1733
+ # endif
1734
+
1735
+ # if Z_COMPILER_HAS_FUNCTION(SINT128_ATOMIC_NAND_THEN_GET)
1736
+ # define z_sint128_atomic_nand_then_get Z_COMPILER_FUNCTION(SINT128_ATOMIC_NAND_THEN_GET)
1737
+ # endif
1738
+
1739
+ # if Z_COMPILER_HAS_FUNCTION(SINT128_ATOMIC_NOT_THEN_GET)
1740
+ # define z_sint128_atomic_not_then_get Z_COMPILER_FUNCTION(SINT128_ATOMIC_NOT_THEN_GET)
1741
+ # endif
1742
+
1743
+ # if Z_COMPILER_HAS_FUNCTION(SINT128_ATOMIC_OR_THEN_GET)
1744
+ # define z_sint128_atomic_or_then_get Z_COMPILER_FUNCTION(SINT128_ATOMIC_OR_THEN_GET)
1745
+ # endif
1746
+
1747
+ # if Z_COMPILER_HAS_FUNCTION(SINT128_ATOMIC_SET_IF_EQUAL)
1748
+ # define z_sint128_atomic_set_if_equal Z_COMPILER_FUNCTION(SINT128_ATOMIC_SET_IF_EQUAL)
1749
+ # endif
1750
+
1751
+ # if Z_COMPILER_HAS_FUNCTION(SINT128_ATOMIC_SUBTRACT_THEN_GET)
1752
+ # define z_sint128_atomic_subtract_then_get Z_COMPILER_FUNCTION(SINT128_ATOMIC_SUBTRACT_THEN_GET)
1753
+ # endif
1754
+
1755
+ # if Z_COMPILER_HAS_FUNCTION(SINT128_ATOMIC_XOR_THEN_GET)
1756
+ # define z_sint128_atomic_xor_then_get Z_COMPILER_FUNCTION(SINT128_ATOMIC_XOR_THEN_GET)
1757
+ # endif
1758
+
1759
+ #endif
1760
+
1761
+
1762
+ /* MARK: - float16 */
1763
+
1764
+
1765
+ #ifdef Z_FLOAT16
1766
+ Z_IMPLEMENTATION_COMMON(float16)
1767
+ Z_IMPLEMENTATION_SIGNED(float16)
1768
+ Z_IMPLEMENTATION_REAL (float16, Z_FLOAT16, Z_FLOAT16_EPSILON, Z_FLOAT16_INFINITY)
1769
+ #endif
1770
+
1771
+
1772
+ /* MARK: - float32 */
1773
+
1774
+
1775
+ #ifdef Z_FLOAT32
1776
+ Z_IMPLEMENTATION_COMMON(float32)
1777
+ Z_IMPLEMENTATION_SIGNED(float32)
1778
+ Z_IMPLEMENTATION_REAL (float32, Z_FLOAT32, Z_FLOAT32_EPSILON, Z_FLOAT32_INFINITY)
1779
+ #endif
1780
+
1781
+ /* MARK: - float64 */
1782
+
1783
+
1784
+ #ifdef Z_FLOAT64
1785
+ Z_IMPLEMENTATION_COMMON(float64)
1786
+ Z_IMPLEMENTATION_SIGNED(float64)
1787
+ Z_IMPLEMENTATION_REAL (float64, Z_FLOAT64, Z_FLOAT64_EPSILON, Z_FLOAT64_INFINITY)
1788
+ #endif
1789
+
1790
+
1791
+ /* MARK: - float128 */
1792
+
1793
+
1794
+ #ifdef Z_FLOAT128
1795
+ Z_IMPLEMENTATION_COMMON(float128)
1796
+ Z_IMPLEMENTATION_SIGNED(float128)
1797
+ Z_IMPLEMENTATION_REAL (float128, Z_FLOAT128, Z_FLOAT128_EPSILON, Z_FLOAT128_INFINITY)
1798
+ #endif
1799
+
1800
+
1801
+ /* MARK: - float80_x87 */
1802
+
1803
+
1804
+ #ifdef Z_FLOAT80_X87
1805
+ Z_IMPLEMENTATION_COMMON(float80_x87)
1806
+ Z_IMPLEMENTATION_SIGNED(float80_x87)
1807
+ Z_IMPLEMENTATION_REAL (float80_x87, Z_FLOAT80_X87, Z_FLOAT80_X87_EPSILON, Z_FLOAT80_X87_INFINITY)
1808
+ #endif
1809
+
1810
+
1811
+ /* MARK: - float96_x87 */
1812
+
1813
+
1814
+ #ifdef Z_FLOAT96_X87
1815
+ Z_IMPLEMENTATION_COMMON(float96_x87)
1816
+ Z_IMPLEMENTATION_SIGNED(float96_x87)
1817
+ Z_IMPLEMENTATION_REAL (float96_x87, Z_FLOAT96_X87, Z_FLOAT96_X87_EPSILON, Z_FLOAT96_X87_INFINITY)
1818
+ #endif
1819
+
1820
+
1821
+ /* MARK: - float128_x87 */
1822
+
1823
+
1824
+ #ifdef Z_FLOAT128_X87
1825
+ Z_IMPLEMENTATION_COMMON(float128_x87)
1826
+ Z_IMPLEMENTATION_SIGNED(float128_x87)
1827
+ Z_IMPLEMENTATION_REAL (float128_x87, Z_FLOAT128_X87, Z_FLOAT128_X87_EPSILON, Z_FLOAT128_X87_INFINITY)
1828
+ #endif
1829
+
1830
+
1831
+ /* MARK: - Cleanup */
1832
+
1833
+
1834
+ #undef Z_IMPLEMENTATION_COMMON
1835
+ #undef Z_IMPLEMENTATION_SIGNED
1836
+ #undef Z_IMPLEMENTATION_REAL
1837
+ #undef Z_IMPLEMENTATION_REVERSE
1838
+ #undef Z_IMPLEMENTATION_ROTATE
1839
+
1840
+
1841
+ /* MARK: - Function selectors */
1842
+
1843
+
1844
+ #define z_type_addition_overflows( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _addition_overflows )
1845
+ #define z_type_addition_overflows_3( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _addition_overflows_3 )
1846
+ #define z_type_addition_overflows_4( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _addition_overflows_4 )
1847
+ #define z_type_atomic_add_then_get( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _atomic_add_then_get )
1848
+ #define z_type_atomic_and_then_get( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _atomic_and_then_get )
1849
+ #define z_type_atomic_decrement_then_get( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _atomic_decrement_then_get)
1850
+ #define z_type_atomic_get_then_add( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _atomic_get_then_add )
1851
+ #define z_type_atomic_get_then_and( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _atomic_get_then_and )
1852
+ #define z_type_atomic_get_then_decrement( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _atomic_get_then_decrement)
1853
+ #define z_type_atomic_get_then_increment( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _atomic_get_then_increment)
1854
+ #define z_type_atomic_get_then_nand( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _atomic_get_then_nand )
1855
+ #define z_type_atomic_get_then_not( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _atomic_get_then_not )
1856
+ #define z_type_atomic_get_then_or( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _atomic_get_then_or )
1857
+ #define z_type_atomic_get_then_set( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _atomic_get_then_set )
1858
+ #define z_type_atomic_get_then_subtract( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _atomic_get_then_subtract )
1859
+ #define z_type_atomic_get_then_xor( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _atomic_get_then_xor )
1860
+ #define z_type_atomic_increment_then_get( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _atomic_increment_then_get)
1861
+ #define z_type_atomic_nand_then_get( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _atomic_nand_then_get )
1862
+ #define z_type_atomic_not_then_get( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _atomic_not_then_get )
1863
+ #define z_type_atomic_or_then_get( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _atomic_or_then_get )
1864
+ #define z_type_atomic_set_if_equal( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _atomic_set_if_equal )
1865
+ #define z_type_atomic_subtract_then_get( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _atomic_subtract_then_get )
1866
+ #define z_type_atomic_xor_then_get( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _atomic_xor_then_get )
1867
+ #define z_type_big_endian( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _big_endian )
1868
+ #define z_type_little_endian( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _little_endian )
1869
+ #define z_type_minimum_storage_size( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _minimum_storage_size )
1870
+ #define z_type_multiplication_overflows( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _addition_overflows )
1871
+ #define z_type_multiplication_overflows_3(TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _addition_overflows_3 )
1872
+ #define z_type_multiplication_overflows_4(TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _addition_overflows_4 )
1873
+ #define z_type_subtraction_overflows( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _subtraction_overflows )
1874
+ #define z_type_subtraction_overflows_3( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _subtraction_overflows_3 )
1875
+ #define z_type_subtraction_overflows_4( TYPE) Z_INSERT_##TYPE##_fixed_type(z_, _subtraction_overflows_4 )
1876
+
1877
+
1878
+ /* MARK: - Default real type definitions */
1879
+
1880
+
1881
+ #ifdef Z_REAL
1882
+ # define z_absolute z_type_absolute (REAL)
1883
+ # define z_are_almost_equal z_type_are_almost_equal(REAL)
1884
+ # define z_clamp z_type_clamp (REAL)
1885
+ # define z_clamp_01 z_type_clamp_01 (REAL)
1886
+ # define z_inverse_lerp z_type_inverse_lerp (REAL)
1887
+ # define z_is_almost_zero z_type_is_almost_zero (REAL)
1888
+ # define z_is_finite z_type_is_finite (REAL)
1889
+ # define z_is_infinity z_type_is_infinity (REAL)
1890
+ # define z_is_nan z_type_is_nan (REAL)
1891
+ # define z_lerp z_type_lerp (REAL)
1892
+ # define z_maximum z_type_maximum (REAL)
1893
+ # define z_minimum z_type_minimum (REAL)
1894
+ # define z_sign z_type_sign (REAL)
1895
+ # define z_sign_or_zero z_type_sign_or_zero (REAL)
1896
+ # define z_smootherstep z_type_smootherstep (REAL)
1897
+ # define z_smoothstep z_type_smoothstep (REAL)
1898
+ #endif
1899
+
1900
+
1901
+ #endif /* _Z_functions_base_value_H_ */