@zigc/lib 0.16.0-test.1 → 0.17.0-dev.131

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (352) hide show
  1. package/LICENSE +19 -0
  2. package/c/fcntl.zig +6 -1
  3. package/c/inttypes.zig +0 -10
  4. package/c/math.zig +138 -114
  5. package/c/pthread.zig +57 -0
  6. package/c/search.zig +1 -27
  7. package/c/stdlib/drand48.zig +0 -57
  8. package/c/stdlib.zig +0 -100
  9. package/c/string.zig +20 -7
  10. package/c/strings.zig +0 -38
  11. package/c/stropts.zig +17 -0
  12. package/c/unistd.zig +27 -26
  13. package/c/wchar.zig +10 -0
  14. package/c.zig +3 -2
  15. package/compiler/aro/aro/Attribute/names.zig +604 -589
  16. package/compiler/aro/aro/Attribute.zig +202 -116
  17. package/compiler/aro/aro/Builtins/common.zig +874 -863
  18. package/compiler/aro/aro/Builtins/eval.zig +15 -7
  19. package/compiler/aro/aro/Builtins.zig +0 -1
  20. package/compiler/aro/aro/CodeGen.zig +8 -7
  21. package/compiler/aro/aro/Compilation.zig +137 -111
  22. package/compiler/aro/aro/Diagnostics.zig +21 -17
  23. package/compiler/aro/aro/Driver/GCCDetector.zig +635 -0
  24. package/compiler/aro/aro/Driver.zig +138 -63
  25. package/compiler/aro/aro/LangOpts.zig +12 -2
  26. package/compiler/aro/aro/Parser/Diagnostic.zig +79 -19
  27. package/compiler/aro/aro/Parser.zig +352 -153
  28. package/compiler/aro/aro/Pragma.zig +3 -2
  29. package/compiler/aro/aro/Preprocessor/Diagnostic.zig +21 -0
  30. package/compiler/aro/aro/Preprocessor.zig +136 -62
  31. package/compiler/aro/aro/Target.zig +17 -12
  32. package/compiler/aro/aro/Tokenizer.zig +31 -14
  33. package/compiler/aro/aro/Toolchain.zig +4 -7
  34. package/compiler/aro/aro/Tree.zig +178 -148
  35. package/compiler/aro/aro/TypeStore.zig +82 -24
  36. package/compiler/aro/aro/Value.zig +13 -17
  37. package/compiler/aro/aro/features.zig +1 -0
  38. package/compiler/aro/aro/pragmas/message.zig +3 -2
  39. package/compiler/aro/aro/pragmas/once.zig +0 -1
  40. package/compiler/aro/aro/record_layout.zig +3 -3
  41. package/compiler/aro/aro/text_literal.zig +3 -2
  42. package/compiler/aro/assembly_backend/x86_64.zig +7 -8
  43. package/compiler/aro/backend/Assembly.zig +1 -2
  44. package/compiler/aro/backend/Interner.zig +2 -2
  45. package/compiler/aro/backend/Ir.zig +100 -92
  46. package/compiler/aro/include/ptrcheck.h +49 -0
  47. package/compiler/aro/main.zig +26 -10
  48. package/compiler/build_runner.zig +1 -2
  49. package/compiler/objdump.zig +93 -0
  50. package/compiler/reduce/Walk.zig +7 -7
  51. package/compiler/reduce.zig +5 -1
  52. package/compiler/resinator/compile.zig +2 -2
  53. package/compiler/resinator/main.zig +7 -1
  54. package/compiler/resinator/preprocess.zig +1 -3
  55. package/compiler/std-docs.zig +8 -1
  56. package/compiler/test_runner.zig +194 -62
  57. package/compiler/translate-c/MacroTranslator.zig +80 -11
  58. package/compiler/translate-c/PatternList.zig +1 -9
  59. package/compiler/translate-c/Scope.zig +43 -6
  60. package/compiler/translate-c/Translator.zig +369 -127
  61. package/compiler/translate-c/ast.zig +19 -11
  62. package/compiler/translate-c/main.zig +76 -17
  63. package/compiler_rt/cos.zig +140 -53
  64. package/compiler_rt/divmodei4.zig +40 -17
  65. package/compiler_rt/exp.zig +1 -6
  66. package/compiler_rt/exp2.zig +1 -6
  67. package/compiler_rt/exp_f128.zig +377 -0
  68. package/compiler_rt/fabs.zig +0 -2
  69. package/compiler_rt/fma.zig +0 -2
  70. package/compiler_rt/fmax.zig +0 -2
  71. package/compiler_rt/fmin.zig +0 -2
  72. package/compiler_rt/fmod.zig +0 -2
  73. package/compiler_rt/limb64.zig +1127 -0
  74. package/compiler_rt/log.zig +0 -2
  75. package/compiler_rt/log10.zig +0 -2
  76. package/compiler_rt/log2.zig +0 -2
  77. package/compiler_rt/long_double.zig +37 -0
  78. package/compiler_rt/mulXi3.zig +1 -1
  79. package/compiler_rt/mulo.zig +6 -1
  80. package/compiler_rt/rem_pio2l.zig +173 -0
  81. package/compiler_rt/round.zig +0 -2
  82. package/compiler_rt/sin.zig +139 -56
  83. package/compiler_rt/sincos.zig +277 -72
  84. package/compiler_rt/sqrt.zig +0 -2
  85. package/compiler_rt/ssp.zig +1 -1
  86. package/compiler_rt/tan.zig +117 -48
  87. package/compiler_rt/trig.zig +256 -6
  88. package/compiler_rt/trunc.zig +0 -2
  89. package/compiler_rt/udivmodei4.zig +28 -0
  90. package/compiler_rt.zig +2 -0
  91. package/fuzzer.zig +857 -307
  92. package/libc/musl/arch/mipsn32/syscall_arch.h +35 -32
  93. package/libc/musl/src/math/pow.c +343 -0
  94. package/package.json +1 -1
  95. package/std/Build/Cache.zig +6 -6
  96. package/std/Build/Fuzz.zig +6 -19
  97. package/std/Build/Module.zig +1 -1
  98. package/std/Build/Step/CheckObject.zig +3 -3
  99. package/std/Build/Step/Compile.zig +18 -1
  100. package/std/Build/Step/ConfigHeader.zig +49 -33
  101. package/std/Build/Step/InstallArtifact.zig +18 -0
  102. package/std/Build/Step/Run.zig +538 -89
  103. package/std/Build/Step/TranslateC.zig +0 -6
  104. package/std/Build/Step.zig +10 -19
  105. package/std/Build/WebServer.zig +31 -19
  106. package/std/Build/abi.zig +47 -11
  107. package/std/Build.zig +17 -17
  108. package/std/Io/Dir.zig +7 -2
  109. package/std/Io/Dispatch.zig +5 -13
  110. package/std/Io/File/Reader.zig +3 -1
  111. package/std/Io/File/Writer.zig +8 -6
  112. package/std/Io/File.zig +1 -0
  113. package/std/Io/Kqueue.zig +2 -2
  114. package/std/Io/Reader.zig +8 -9
  115. package/std/Io/Semaphore.zig +112 -17
  116. package/std/Io/Terminal.zig +1 -1
  117. package/std/Io/Threaded.zig +352 -180
  118. package/std/Io/Uring.zig +15 -16
  119. package/std/Io/Writer.zig +46 -42
  120. package/std/Io/net.zig +11 -11
  121. package/std/Io.zig +1052 -20
  122. package/std/SemanticVersion.zig +1 -1
  123. package/std/Target/Query.zig +2 -2
  124. package/std/Target.zig +53 -7
  125. package/std/Thread.zig +8 -3
  126. package/std/array_hash_map.zig +105 -573
  127. package/std/array_list.zig +22 -31
  128. package/std/bit_set.zig +22 -6
  129. package/std/builtin/assembly.zig +68 -0
  130. package/std/builtin.zig +4 -0
  131. package/std/c/haiku.zig +3 -0
  132. package/std/c/serenity.zig +1 -6
  133. package/std/c.zig +106 -24
  134. package/std/compress/flate/Compress.zig +3 -3
  135. package/std/compress/flate/Decompress.zig +2 -3
  136. package/std/compress/zstd/Decompress.zig +2 -4
  137. package/std/crypto/Certificate/Bundle.zig +15 -1
  138. package/std/crypto/Certificate.zig +13 -1
  139. package/std/crypto/ascon.zig +75 -33
  140. package/std/crypto/codecs/asn1/Oid.zig +12 -1
  141. package/std/crypto/codecs/asn1.zig +33 -18
  142. package/std/crypto/codecs/base64_hex_ct.zig +16 -8
  143. package/std/crypto/ml_kem.zig +2 -9
  144. package/std/crypto/tls/Client.zig +79 -4
  145. package/std/crypto/tls.zig +1 -1
  146. package/std/crypto.zig +1 -0
  147. package/std/debug/Dwarf.zig +29 -9
  148. package/std/debug/Info.zig +4 -0
  149. package/std/debug/MachOFile.zig +46 -8
  150. package/std/debug/Pdb.zig +540 -37
  151. package/std/debug/SelfInfo/Elf.zig +19 -18
  152. package/std/debug/SelfInfo/MachO.zig +18 -7
  153. package/std/debug/SelfInfo/Windows.zig +138 -36
  154. package/std/debug.zig +181 -66
  155. package/std/enums.zig +25 -19
  156. package/std/fmt.zig +8 -3
  157. package/std/fs/path.zig +6 -4
  158. package/std/heap/ArenaAllocator.zig +145 -154
  159. package/std/heap/BufferFirstAllocator.zig +165 -0
  160. package/std/heap/debug_allocator.zig +7 -7
  161. package/std/heap.zig +2 -126
  162. package/std/http/Client.zig +31 -30
  163. package/std/http.zig +14 -13
  164. package/std/json/Scanner.zig +2 -2
  165. package/std/json/Stringify.zig +3 -3
  166. package/std/json/dynamic.zig +4 -4
  167. package/std/math/big/int.zig +16 -17
  168. package/std/mem/Allocator.zig +4 -5
  169. package/std/mem.zig +48 -0
  170. package/std/os/emscripten.zig +2 -18
  171. package/std/os/linux/IoUring.zig +2 -0
  172. package/std/os/linux/aarch64.zig +41 -12
  173. package/std/os/linux/arc.zig +173 -0
  174. package/std/os/linux/arm.zig +41 -12
  175. package/std/os/linux/hexagon.zig +33 -11
  176. package/std/os/linux/loongarch32.zig +41 -13
  177. package/std/os/linux/loongarch64.zig +41 -12
  178. package/std/os/linux/m68k.zig +41 -13
  179. package/std/os/linux/mips.zig +67 -36
  180. package/std/os/linux/mips64.zig +60 -29
  181. package/std/os/linux/mipsn32.zig +60 -29
  182. package/std/os/linux/or1k.zig +41 -12
  183. package/std/os/linux/powerpc.zig +41 -12
  184. package/std/os/linux/powerpc64.zig +41 -12
  185. package/std/os/linux/riscv32.zig +41 -12
  186. package/std/os/linux/riscv64.zig +41 -12
  187. package/std/os/linux/s390x.zig +44 -7
  188. package/std/os/linux/sparc64.zig +83 -52
  189. package/std/os/linux/thumb.zig +52 -36
  190. package/std/os/linux/x32.zig +41 -12
  191. package/std/os/linux/x86.zig +42 -13
  192. package/std/os/linux/x86_64.zig +41 -12
  193. package/std/os/linux.zig +419 -438
  194. package/std/os/uefi/tables/boot_services.zig +9 -8
  195. package/std/os/windows.zig +2 -2
  196. package/std/os.zig +41 -0
  197. package/std/pdb.zig +143 -4
  198. package/std/posix.zig +6 -12
  199. package/std/priority_dequeue.zig +13 -12
  200. package/std/priority_queue.zig +5 -4
  201. package/std/process/Child.zig +1 -1
  202. package/std/process/Environ.zig +1 -1
  203. package/std/process.zig +1 -1
  204. package/std/sort.zig +3 -3
  205. package/std/start.zig +17 -4
  206. package/std/std.zig +19 -6
  207. package/std/testing/FailingAllocator.zig +4 -4
  208. package/std/testing/Smith.zig +37 -2
  209. package/std/zig/Ast/Render.zig +187 -459
  210. package/std/zig/Ast.zig +0 -4
  211. package/std/zig/AstGen.zig +86 -103
  212. package/std/zig/AstRlAnnotate.zig +0 -11
  213. package/std/zig/AstSmith.zig +2602 -0
  214. package/std/zig/BuiltinFn.zig +0 -32
  215. package/std/zig/Client.zig +8 -3
  216. package/std/zig/LibCInstallation.zig +4 -3
  217. package/std/zig/Parse.zig +90 -81
  218. package/std/zig/Server.zig +26 -0
  219. package/std/zig/WindowsSdk.zig +13 -13
  220. package/std/zig/Zir.zig +66 -62
  221. package/std/zig/ZonGen.zig +6 -5
  222. package/std/zig/c_translation/helpers.zig +14 -9
  223. package/std/zig/llvm/Builder.zig +119 -60
  224. package/std/zig/system.zig +20 -4
  225. package/std/zig/tokenizer.zig +2 -1
  226. package/std/zig.zig +7 -10
  227. package/std/zip.zig +5 -5
  228. package/zig.h +340 -1
  229. package/compiler/aro/aro/Driver/Filesystem.zig +0 -241
  230. package/libc/mingw/complex/cabs.c +0 -48
  231. package/libc/mingw/complex/cabsf.c +0 -48
  232. package/libc/mingw/complex/cacos.c +0 -50
  233. package/libc/mingw/complex/cacosf.c +0 -50
  234. package/libc/mingw/complex/carg.c +0 -48
  235. package/libc/mingw/complex/cargf.c +0 -48
  236. package/libc/mingw/complex/casin.c +0 -50
  237. package/libc/mingw/complex/casinf.c +0 -50
  238. package/libc/mingw/complex/catan.c +0 -50
  239. package/libc/mingw/complex/catanf.c +0 -50
  240. package/libc/mingw/complex/ccos.c +0 -50
  241. package/libc/mingw/complex/ccosf.c +0 -50
  242. package/libc/mingw/complex/cexp.c +0 -48
  243. package/libc/mingw/complex/cexpf.c +0 -48
  244. package/libc/mingw/complex/cimag.c +0 -48
  245. package/libc/mingw/complex/cimagf.c +0 -48
  246. package/libc/mingw/complex/clog.c +0 -48
  247. package/libc/mingw/complex/clog10.c +0 -49
  248. package/libc/mingw/complex/clog10f.c +0 -49
  249. package/libc/mingw/complex/clogf.c +0 -48
  250. package/libc/mingw/complex/conj.c +0 -48
  251. package/libc/mingw/complex/conjf.c +0 -48
  252. package/libc/mingw/complex/cpow.c +0 -48
  253. package/libc/mingw/complex/cpowf.c +0 -48
  254. package/libc/mingw/complex/cproj.c +0 -48
  255. package/libc/mingw/complex/cprojf.c +0 -48
  256. package/libc/mingw/complex/creal.c +0 -48
  257. package/libc/mingw/complex/crealf.c +0 -48
  258. package/libc/mingw/complex/csin.c +0 -50
  259. package/libc/mingw/complex/csinf.c +0 -50
  260. package/libc/mingw/complex/csqrt.c +0 -48
  261. package/libc/mingw/complex/csqrtf.c +0 -48
  262. package/libc/mingw/complex/ctan.c +0 -50
  263. package/libc/mingw/complex/ctanf.c +0 -50
  264. package/libc/mingw/math/arm/s_rint.c +0 -86
  265. package/libc/mingw/math/arm/s_rintf.c +0 -51
  266. package/libc/mingw/math/arm/sincos.S +0 -30
  267. package/libc/mingw/math/arm-common/sincosl.c +0 -13
  268. package/libc/mingw/math/arm64/rint.c +0 -12
  269. package/libc/mingw/math/arm64/rintf.c +0 -12
  270. package/libc/mingw/math/arm64/sincos.S +0 -32
  271. package/libc/mingw/math/bsd_private_base.h +0 -148
  272. package/libc/mingw/math/fdiml.c +0 -24
  273. package/libc/mingw/math/frexpf.c +0 -13
  274. package/libc/mingw/math/frexpl.c +0 -71
  275. package/libc/mingw/math/x86/acosf.c +0 -29
  276. package/libc/mingw/math/x86/atanf.c +0 -23
  277. package/libc/mingw/math/x86/atanl.c +0 -18
  278. package/libc/mingw/math/x86/cos.def.h +0 -65
  279. package/libc/mingw/math/x86/cosl.c +0 -46
  280. package/libc/mingw/math/x86/cosl_internal.S +0 -55
  281. package/libc/mingw/math/x86/ldexp.c +0 -23
  282. package/libc/mingw/math/x86/scalbn.S +0 -41
  283. package/libc/mingw/math/x86/scalbnf.S +0 -40
  284. package/libc/mingw/math/x86/sin.def.h +0 -65
  285. package/libc/mingw/math/x86/sinl.c +0 -46
  286. package/libc/mingw/math/x86/sinl_internal.S +0 -58
  287. package/libc/mingw/math/x86/tanl.S +0 -62
  288. package/libc/mingw/misc/btowc.c +0 -28
  289. package/libc/mingw/misc/wcstof.c +0 -66
  290. package/libc/mingw/misc/wcstoimax.c +0 -132
  291. package/libc/mingw/misc/wcstoumax.c +0 -126
  292. package/libc/mingw/misc/wctob.c +0 -29
  293. package/libc/mingw/misc/winbs_uint64.c +0 -6
  294. package/libc/mingw/misc/winbs_ulong.c +0 -6
  295. package/libc/mingw/misc/winbs_ushort.c +0 -6
  296. package/libc/mingw/stdio/_Exit.c +0 -10
  297. package/libc/mingw/stdio/_findfirst64i32.c +0 -21
  298. package/libc/mingw/stdio/_findnext64i32.c +0 -21
  299. package/libc/mingw/stdio/_fstat64i32.c +0 -37
  300. package/libc/mingw/stdio/_stat64i32.c +0 -37
  301. package/libc/mingw/stdio/_wfindfirst64i32.c +0 -21
  302. package/libc/mingw/stdio/_wfindnext64i32.c +0 -21
  303. package/libc/mingw/stdio/_wstat64i32.c +0 -37
  304. package/libc/mingw/winpthreads/spinlock.c +0 -82
  305. package/libc/musl/src/legacy/isastream.c +0 -7
  306. package/libc/musl/src/legacy/valloc.c +0 -8
  307. package/libc/musl/src/linux/tee.c +0 -8
  308. package/libc/musl/src/math/__cosl.c +0 -96
  309. package/libc/musl/src/math/__sinl.c +0 -78
  310. package/libc/musl/src/math/__tanl.c +0 -143
  311. package/libc/musl/src/math/aarch64/lrint.c +0 -10
  312. package/libc/musl/src/math/aarch64/lrintf.c +0 -10
  313. package/libc/musl/src/math/aarch64/rintf.c +0 -7
  314. package/libc/musl/src/math/cosl.c +0 -39
  315. package/libc/musl/src/math/fdim.c +0 -10
  316. package/libc/musl/src/math/fdimf.c +0 -10
  317. package/libc/musl/src/math/fdiml.c +0 -18
  318. package/libc/musl/src/math/finite.c +0 -7
  319. package/libc/musl/src/math/finitef.c +0 -7
  320. package/libc/musl/src/math/frexp.c +0 -23
  321. package/libc/musl/src/math/frexpf.c +0 -23
  322. package/libc/musl/src/math/frexpl.c +0 -29
  323. package/libc/musl/src/math/i386/lrint.c +0 -8
  324. package/libc/musl/src/math/i386/lrintf.c +0 -8
  325. package/libc/musl/src/math/i386/rintf.c +0 -7
  326. package/libc/musl/src/math/lrint.c +0 -72
  327. package/libc/musl/src/math/lrintf.c +0 -8
  328. package/libc/musl/src/math/powerpc64/lrint.c +0 -16
  329. package/libc/musl/src/math/powerpc64/lrintf.c +0 -16
  330. package/libc/musl/src/math/rintf.c +0 -30
  331. package/libc/musl/src/math/s390x/rintf.c +0 -15
  332. package/libc/musl/src/math/sincosl.c +0 -60
  333. package/libc/musl/src/math/sinl.c +0 -41
  334. package/libc/musl/src/math/tanl.c +0 -29
  335. package/libc/musl/src/math/x32/lrint.s +0 -5
  336. package/libc/musl/src/math/x32/lrintf.s +0 -5
  337. package/libc/musl/src/math/x86_64/lrint.c +0 -8
  338. package/libc/musl/src/math/x86_64/lrintf.c +0 -8
  339. package/libc/musl/src/string/strdup.c +0 -10
  340. package/libc/musl/src/string/strndup.c +0 -12
  341. package/libc/musl/src/string/wcsdup.c +0 -10
  342. package/libc/musl/src/thread/pthread_spin_destroy.c +0 -6
  343. package/libc/musl/src/thread/pthread_spin_init.c +0 -6
  344. package/libc/musl/src/thread/pthread_spin_lock.c +0 -8
  345. package/libc/musl/src/thread/pthread_spin_trylock.c +0 -7
  346. package/libc/musl/src/thread/pthread_spin_unlock.c +0 -7
  347. package/libc/musl/src/unistd/dup2.c +0 -20
  348. package/libc/musl/src/unistd/dup3.c +0 -26
  349. package/libc/wasi/libc-bottom-half/sources/reallocarray.c +0 -14
  350. package/libc/wasi/thread-stub/pthread_spin_lock.c +0 -8
  351. package/libc/wasi/thread-stub/pthread_spin_trylock.c +0 -8
  352. package/libc/wasi/thread-stub/pthread_spin_unlock.c +0 -7
@@ -3,17 +3,21 @@ const builtin = @import("builtin");
3
3
  const arch = builtin.cpu.arch;
4
4
  const math = std.math;
5
5
  const mem = std.mem;
6
+ const expect = std.testing.expect;
7
+ const expectApproxEqAbs = std.testing.expectApproxEqAbs;
6
8
  const trig = @import("trig.zig");
7
9
  const rem_pio2 = @import("rem_pio2.zig").rem_pio2;
8
10
  const rem_pio2f = @import("rem_pio2f.zig").rem_pio2f;
11
+ const rem_pio2l = @import("rem_pio2l.zig").rem_pio2l;
12
+ const ld = @import("long_double.zig");
9
13
  const compiler_rt = @import("../compiler_rt.zig");
10
14
  const symbol = compiler_rt.symbol;
11
15
 
12
16
  comptime {
13
- symbol(&__sincosh, "__sincosh");
17
+ symbol(&sincosh, "__sincosh");
14
18
  symbol(&sincosf, "sincosf");
15
19
  symbol(&sincos, "sincos");
16
- symbol(&__sincosx, "__sincosx");
20
+ symbol(&sincosx, "__sincosx");
17
21
  if (compiler_rt.want_ppc_abi) {
18
22
  symbol(&sincosq, "sincosf128");
19
23
  }
@@ -21,7 +25,7 @@ comptime {
21
25
  symbol(&sincosl, "sincosl");
22
26
  }
23
27
 
24
- pub fn __sincosh(x: f16, r_sin: *f16, r_cos: *f16) callconv(.c) void {
28
+ pub fn sincosh(x: f16, r_sin: *f16, r_cos: *f16) callconv(.c) void {
25
29
  // TODO: more efficient implementation
26
30
  var big_sin: f32 = undefined;
27
31
  var big_cos: f32 = undefined;
@@ -56,8 +60,8 @@ pub fn sincosf(x: f32, r_sin: *f32, r_cos: *f32) callconv(.c) void {
56
60
  r_cos.* = 1.0;
57
61
  return;
58
62
  }
59
- r_sin.* = trig.__sindf(x);
60
- r_cos.* = trig.__cosdf(x);
63
+ r_sin.* = trig.sindf(x);
64
+ r_cos.* = trig.cosdf(x);
61
65
  return;
62
66
  }
63
67
 
@@ -66,17 +70,17 @@ pub fn sincosf(x: f32, r_sin: *f32, r_cos: *f32) callconv(.c) void {
66
70
  // |x| ~<= 3pi/4
67
71
  if (ix <= 0x4016cbe3) {
68
72
  if (sign) {
69
- r_sin.* = -trig.__cosdf(x + sc1pio2);
70
- r_cos.* = trig.__sindf(x + sc1pio2);
73
+ r_sin.* = -trig.cosdf(x + sc1pio2);
74
+ r_cos.* = trig.sindf(x + sc1pio2);
71
75
  } else {
72
- r_sin.* = trig.__cosdf(sc1pio2 - x);
73
- r_cos.* = trig.__sindf(sc1pio2 - x);
76
+ r_sin.* = trig.cosdf(sc1pio2 - x);
77
+ r_cos.* = trig.sindf(sc1pio2 - x);
74
78
  }
75
79
  return;
76
80
  }
77
81
  // -sin(x+c) is not correct if x+c could be 0: -0 vs +0
78
- r_sin.* = -trig.__sindf(if (sign) x + sc2pio2 else x - sc2pio2);
79
- r_cos.* = -trig.__cosdf(if (sign) x + sc2pio2 else x - sc2pio2);
82
+ r_sin.* = -trig.sindf(if (sign) x + sc2pio2 else x - sc2pio2);
83
+ r_cos.* = -trig.cosdf(if (sign) x + sc2pio2 else x - sc2pio2);
80
84
  return;
81
85
  }
82
86
 
@@ -85,16 +89,16 @@ pub fn sincosf(x: f32, r_sin: *f32, r_cos: *f32) callconv(.c) void {
85
89
  // |x| ~<= 7*pi/4
86
90
  if (ix <= 0x40afeddf) {
87
91
  if (sign) {
88
- r_sin.* = trig.__cosdf(x + sc3pio2);
89
- r_cos.* = -trig.__sindf(x + sc3pio2);
92
+ r_sin.* = trig.cosdf(x + sc3pio2);
93
+ r_cos.* = -trig.sindf(x + sc3pio2);
90
94
  } else {
91
- r_sin.* = -trig.__cosdf(x - sc3pio2);
92
- r_cos.* = trig.__sindf(x - sc3pio2);
95
+ r_sin.* = -trig.cosdf(x - sc3pio2);
96
+ r_cos.* = trig.sindf(x - sc3pio2);
93
97
  }
94
98
  return;
95
99
  }
96
- r_sin.* = trig.__sindf(if (sign) x + sc4pio2 else x - sc4pio2);
97
- r_cos.* = trig.__cosdf(if (sign) x + sc4pio2 else x - sc4pio2);
100
+ r_sin.* = trig.sindf(if (sign) x + sc4pio2 else x - sc4pio2);
101
+ r_cos.* = trig.cosdf(if (sign) x + sc4pio2 else x - sc4pio2);
98
102
  return;
99
103
  }
100
104
 
@@ -109,8 +113,8 @@ pub fn sincosf(x: f32, r_sin: *f32, r_cos: *f32) callconv(.c) void {
109
113
  // general argument reduction needed
110
114
  var y: f64 = undefined;
111
115
  const n = rem_pio2f(x, &y);
112
- const s = trig.__sindf(y);
113
- const c = trig.__cosdf(y);
116
+ const s = trig.sindf(y);
117
+ const c = trig.cosdf(y);
114
118
  switch (n & 3) {
115
119
  0 => {
116
120
  r_sin.* = s;
@@ -150,8 +154,8 @@ pub fn sincos(x: f64, r_sin: *f64, r_cos: *f64) callconv(.c) void {
150
154
  r_cos.* = 1.0;
151
155
  return;
152
156
  }
153
- r_sin.* = trig.__sin(x, 0.0, 0);
154
- r_cos.* = trig.__cos(x, 0.0);
157
+ r_sin.* = trig.sin(x, 0.0, 0);
158
+ r_cos.* = trig.cos(x, 0.0);
155
159
  return;
156
160
  }
157
161
 
@@ -166,8 +170,8 @@ pub fn sincos(x: f64, r_sin: *f64, r_cos: *f64) callconv(.c) void {
166
170
  // argument reduction needed
167
171
  var y: [2]f64 = undefined;
168
172
  const n = rem_pio2(x, &y);
169
- const s = trig.__sin(y[0], y[1], 1);
170
- const c = trig.__cos(y[0], y[1]);
173
+ const s = trig.sin(y[0], y[1], 1);
174
+ const c = trig.cos(y[0], y[1]);
171
175
  switch (n & 3) {
172
176
  0 => {
173
177
  r_sin.* = s;
@@ -188,50 +192,57 @@ pub fn sincos(x: f64, r_sin: *f64, r_cos: *f64) callconv(.c) void {
188
192
  }
189
193
  }
190
194
 
191
- pub fn __sincosx(x: f80, r_sin: *f80, r_cos: *f80) callconv(.c) void {
192
- // TODO: more efficient implementation
193
- //return sincos_generic(f80, x, r_sin, r_cos);
194
- var big_sin: f128 = undefined;
195
- var big_cos: f128 = undefined;
196
- sincosq(x, &big_sin, &big_cos);
197
- r_sin.* = @as(f80, @floatCast(big_sin));
198
- r_cos.* = @as(f80, @floatCast(big_cos));
199
- }
195
+ pub fn sincosx(x: f80, r_sin: *f80, r_cos: *f80) callconv(.c) void {
196
+ const se = ld.signExponent(x) & 0x7fff;
197
+ if (se == 0x7fff) {
198
+ const result = x - x;
199
+ r_sin.* = result;
200
+ r_cos.* = result;
201
+ return;
202
+ }
200
203
 
201
- pub fn sincosq(x: f128, r_sin: *f128, r_cos: *f128) callconv(.c) void {
202
- // TODO: more correct implementation
203
- //return sincos_generic(f128, x, r_sin, r_cos);
204
- var small_sin: f64 = undefined;
205
- var small_cos: f64 = undefined;
206
- sincos(@as(f64, @floatCast(x)), &small_sin, &small_cos);
207
- r_sin.* = small_sin;
208
- r_cos.* = small_cos;
209
- }
204
+ if (@abs(x) < trig.pi_4) {
205
+ if (se < 0x3fff - math.floatMantissaBits(f80)) {
206
+ // raise underflow if subnormal
207
+ if (compiler_rt.want_float_exceptions and se == 0) {
208
+ mem.doNotOptimizeAway(x * 0x1p-120);
209
+ }
210
+ r_sin.* = x;
211
+ // raise inexact if x!=0
212
+ r_cos.* = 1.0 + x;
213
+ return;
214
+ }
215
+ r_sin.* = trig.sinx(x, 0.0, 0);
216
+ r_cos.* = trig.cosx(x, 0.0);
217
+ return;
218
+ }
210
219
 
211
- pub fn sincosl(x: c_longdouble, r_sin: *c_longdouble, r_cos: *c_longdouble) callconv(.c) void {
212
- switch (@typeInfo(c_longdouble).float.bits) {
213
- 16 => return __sincosh(x, r_sin, r_cos),
214
- 32 => return sincosf(x, r_sin, r_cos),
215
- 64 => return sincos(x, r_sin, r_cos),
216
- 80 => return __sincosx(x, r_sin, r_cos),
217
- 128 => return sincosq(x, r_sin, r_cos),
218
- else => @compileError("unreachable"),
220
+ var y: [2]f80 = undefined;
221
+ const n = rem_pio2l(f80, x, &y);
222
+ const s = trig.sinx(y[0], y[1], 1);
223
+ const c = trig.cosx(y[0], y[1]);
224
+ switch (n & 3) {
225
+ 0 => {
226
+ r_sin.* = s;
227
+ r_cos.* = c;
228
+ },
229
+ 1 => {
230
+ r_sin.* = c;
231
+ r_cos.* = -s;
232
+ },
233
+ 2 => {
234
+ r_sin.* = -s;
235
+ r_cos.* = -c;
236
+ },
237
+ else => {
238
+ r_sin.* = -c;
239
+ r_cos.* = s;
240
+ },
219
241
  }
220
242
  }
221
243
 
222
- pub const rem_pio2_generic = @compileError("TODO");
223
-
224
- /// Ported from musl sincosl.c. Needs the following dependencies to be complete:
225
- /// * rem_pio2_generic ported from __rem_pio2l.c
226
- /// * trig.sin_generic ported from __sinl.c
227
- /// * trig.cos_generic ported from __cosl.c
228
- inline fn sincos_generic(comptime F: type, x: F, r_sin: *F, r_cos: *F) void {
229
- const sc1pio4: F = 1.0 * math.pi / 4.0;
230
- const bits = @typeInfo(F).float.bits;
231
- const I = std.meta.Int(.unsigned, bits);
232
- const ix = @as(I, @bitCast(x)) & (math.maxInt(I) >> 1);
233
- const se: u16 = @truncate(ix >> (bits - 16));
234
-
244
+ pub fn sincosq(x: f128, r_sin: *f128, r_cos: *f128) callconv(.c) void {
245
+ const se = ld.signExponent(x) & 0x7fff;
235
246
  if (se == 0x7fff) {
236
247
  const result = x - x;
237
248
  r_sin.* = result;
@@ -239,26 +250,26 @@ inline fn sincos_generic(comptime F: type, x: F, r_sin: *F, r_cos: *F) void {
239
250
  return;
240
251
  }
241
252
 
242
- if (@as(F, @bitCast(ix)) < sc1pio4) {
243
- if (se < 0x3fff - math.floatFractionalBits(F) - 1) {
253
+ if (@abs(x) < trig.pi_4) {
254
+ if (se < 0x3fff - math.floatMantissaBits(f128)) {
244
255
  // raise underflow if subnormal
245
- if (se == 0) {
246
- if (compiler_rt.want_float_exceptions) mem.doNotOptimizeAway(x * 0x1p-120);
256
+ if (compiler_rt.want_float_exceptions and se == 0) {
257
+ mem.doNotOptimizeAway(x * 0x1p-120);
247
258
  }
248
259
  r_sin.* = x;
249
260
  // raise inexact if x!=0
250
261
  r_cos.* = 1.0 + x;
251
262
  return;
252
263
  }
253
- r_sin.* = trig.sin_generic(F, x, 0, 0);
254
- r_cos.* = trig.cos_generic(F, x, 0);
264
+ r_sin.* = trig.sinq(x, 0.0, 0);
265
+ r_cos.* = trig.cosq(x, 0.0);
255
266
  return;
256
267
  }
257
268
 
258
- var y: [2]F = undefined;
259
- const n = rem_pio2_generic(F, x, &y);
260
- const s = trig.sin_generic(F, y[0], y[1], 1);
261
- const c = trig.cos_generic(F, y[0], y[1]);
269
+ var y: [2]f128 = undefined;
270
+ const n = rem_pio2l(f128, x, &y);
271
+ const s = trig.sinq(y[0], y[1], 1);
272
+ const c = trig.cosq(y[0], y[1]);
262
273
  switch (n & 3) {
263
274
  0 => {
264
275
  r_sin.* = s;
@@ -278,3 +289,197 @@ inline fn sincos_generic(comptime F: type, x: F, r_sin: *F, r_cos: *F) void {
278
289
  },
279
290
  }
280
291
  }
292
+
293
+ pub fn sincosl(x: c_longdouble, r_sin: *c_longdouble, r_cos: *c_longdouble) callconv(.c) void {
294
+ switch (@typeInfo(c_longdouble).float.bits) {
295
+ 64 => return sincos(x, r_sin, r_cos),
296
+ 80 => return sincosx(x, r_sin, r_cos),
297
+ 128 => return sincosq(x, r_sin, r_cos),
298
+ else => @compileError("unreachable"),
299
+ }
300
+ }
301
+
302
+ fn testSincosSpecial(comptime T: type) !void {
303
+ const f = switch (T) {
304
+ f32 => sincosf,
305
+ f64 => sincos,
306
+ f80 => sincosx,
307
+ f128 => sincosq,
308
+ else => @compileError("unimplemented"),
309
+ };
310
+
311
+ var s: T = undefined;
312
+ var c: T = undefined;
313
+
314
+ f(0.0, &s, &c);
315
+ try expect(math.isPositiveZero(s));
316
+ try expect(c == 1.0);
317
+
318
+ f(-0.0, &s, &c);
319
+ try expect(math.isNegativeZero(s));
320
+ try expect(c == 1.0);
321
+
322
+ f(math.inf(T), &s, &c);
323
+ try expect(math.isNan(s));
324
+ try expect(math.isNan(c));
325
+
326
+ f(-math.inf(T), &s, &c);
327
+ try expect(math.isNan(s));
328
+ try expect(math.isNan(c));
329
+
330
+ f(math.nan(T), &s, &c);
331
+ try expect(math.isNan(s));
332
+ try expect(math.isNan(c));
333
+ }
334
+
335
+ test "sincos32.normal" {
336
+ const epsilon = math.floatEps(f32);
337
+ var s: f32 = undefined;
338
+ var c: f32 = undefined;
339
+
340
+ sincosf(0.0, &s, &c);
341
+ try expectApproxEqAbs(@as(f32, 0.0), s, epsilon);
342
+ try expectApproxEqAbs(@as(f32, 1.0), c, epsilon);
343
+
344
+ sincosf(0.2, &s, &c);
345
+ try expectApproxEqAbs(@as(f32, 0.19866933), s, epsilon);
346
+ try expectApproxEqAbs(@as(f32, 0.9800666), c, epsilon);
347
+
348
+ sincosf(0.8923, &s, &c);
349
+ try expectApproxEqAbs(@as(f32, 0.77851737), s, epsilon);
350
+ try expectApproxEqAbs(@as(f32, 0.6276231), c, epsilon);
351
+
352
+ sincosf(1.5, &s, &c);
353
+ try expectApproxEqAbs(@as(f32, 0.997495), s, epsilon);
354
+ try expectApproxEqAbs(@as(f32, 0.0707372), c, epsilon);
355
+
356
+ sincosf(-1.5, &s, &c);
357
+ try expectApproxEqAbs(@as(f32, -0.997495), s, epsilon);
358
+ try expectApproxEqAbs(@as(f32, 0.0707372), c, epsilon);
359
+
360
+ sincosf(37.45, &s, &c);
361
+ try expectApproxEqAbs(@as(f32, -0.24654257), s, epsilon);
362
+ try expectApproxEqAbs(@as(f32, 0.96913195), c, epsilon);
363
+
364
+ sincosf(89.123, &s, &c);
365
+ try expectApproxEqAbs(@as(f32, 0.9161657), s, epsilon);
366
+ try expectApproxEqAbs(@as(f32, 0.40079966), c, epsilon);
367
+ }
368
+
369
+ test "sincos32.special" {
370
+ try testSincosSpecial(f32);
371
+ }
372
+
373
+ test "sincos64.normal" {
374
+ const epsilon = math.floatEps(f64);
375
+ var s: f64 = undefined;
376
+ var c: f64 = undefined;
377
+
378
+ sincos(0.0, &s, &c);
379
+ try expectApproxEqAbs(@as(f64, 0.0), s, epsilon);
380
+ try expectApproxEqAbs(@as(f64, 1.0), c, epsilon);
381
+
382
+ sincos(0.2, &s, &c);
383
+ try expectApproxEqAbs(@as(f64, 0.19866933079506122), s, epsilon);
384
+ try expectApproxEqAbs(@as(f64, 0.9800665778412416), c, epsilon);
385
+
386
+ sincos(0.8923, &s, &c);
387
+ try expectApproxEqAbs(@as(f64, 0.7785173385577349), s, epsilon);
388
+ try expectApproxEqAbs(@as(f64, 0.6276230983360804), c, epsilon);
389
+
390
+ sincos(1.5, &s, &c);
391
+ try expectApproxEqAbs(@as(f64, 0.9974949866040544), s, epsilon);
392
+ try expectApproxEqAbs(@as(f64, 0.0707372016677029), c, epsilon);
393
+
394
+ sincos(-1.5, &s, &c);
395
+ try expectApproxEqAbs(@as(f64, -0.9974949866040544), s, epsilon);
396
+ try expectApproxEqAbs(@as(f64, 0.0707372016677029), c, epsilon);
397
+
398
+ sincos(37.45, &s, &c);
399
+ try expectApproxEqAbs(@as(f64, -0.24654331551411082), s, epsilon);
400
+ try expectApproxEqAbs(@as(f64, 0.9691317730707778), c, epsilon);
401
+
402
+ sincos(89.123, &s, &c);
403
+ try expectApproxEqAbs(@as(f64, 0.9161652766622714), s, epsilon);
404
+ try expectApproxEqAbs(@as(f64, 0.4008006809354791), c, epsilon);
405
+ }
406
+
407
+ test "sincos64.special" {
408
+ try testSincosSpecial(f64);
409
+ }
410
+
411
+ test "sincos80.normal" {
412
+ const epsilon = math.floatEps(f80);
413
+ var s: f80 = undefined;
414
+ var c: f80 = undefined;
415
+
416
+ sincosx(0.0, &s, &c);
417
+ try expectApproxEqAbs(@as(f80, 0.0), s, epsilon);
418
+ try expectApproxEqAbs(@as(f80, 1.0), c, epsilon);
419
+
420
+ sincosx(0.2, &s, &c);
421
+ try expectApproxEqAbs(@as(f80, 0.19866933079506121545941262711838975), s, epsilon);
422
+ try expectApproxEqAbs(@as(f80, 0.98006657784124163112419651674816888), c, epsilon);
423
+
424
+ sincosx(0.8923, &s, &c);
425
+ try expectApproxEqAbs(@as(f80, 0.77851733855773487830689285621486050), s, epsilon);
426
+ try expectApproxEqAbs(@as(f80, 0.62762309833608037003563995939286067), c, epsilon);
427
+
428
+ sincosx(1.5, &s, &c);
429
+ try expectApproxEqAbs(@as(f80, 0.99749498660405443094172337114148732), s, epsilon);
430
+ try expectApproxEqAbs(@as(f80, 0.070737201667702910088189851434268747), c, epsilon);
431
+
432
+ sincosx(-1.5, &s, &c);
433
+ try expectApproxEqAbs(@as(f80, -0.99749498660405443094172337114148732), s, epsilon);
434
+ try expectApproxEqAbs(@as(f80, 0.070737201667702910088189851434268747), c, epsilon);
435
+
436
+ sincosx(37.45, &s, &c);
437
+ try expectApproxEqAbs(@as(f80, -0.24654331551411356504), s, epsilon);
438
+ try expectApproxEqAbs(@as(f80, 0.9691317730707771246), c, epsilon);
439
+
440
+ sincosx(89.123, &s, &c);
441
+ try expectApproxEqAbs(@as(f80, 0.91616527666226951006), s, epsilon);
442
+ try expectApproxEqAbs(@as(f80, 0.4008006809354834001), c, epsilon);
443
+ }
444
+
445
+ test "sincos80.special" {
446
+ try testSincosSpecial(f80);
447
+ }
448
+
449
+ test "sincos128.normal" {
450
+ const epsilon = math.floatEps(f128);
451
+ var s: f128 = undefined;
452
+ var c: f128 = undefined;
453
+
454
+ sincosq(0.0, &s, &c);
455
+ try expectApproxEqAbs(@as(f128, 0.0), s, epsilon);
456
+ try expectApproxEqAbs(@as(f128, 1.0), c, epsilon);
457
+
458
+ sincosq(0.2, &s, &c);
459
+ try expectApproxEqAbs(@as(f128, 0.19866933079506121545941262711838975), s, epsilon);
460
+ try expectApproxEqAbs(@as(f128, 0.98006657784124163112419651674816888), c, epsilon);
461
+
462
+ sincosq(0.8923, &s, &c);
463
+ try expectApproxEqAbs(@as(f128, 0.77851733855773487830689285621486050), s, epsilon);
464
+ try expectApproxEqAbs(@as(f128, 0.62762309833608037003563995939286067), c, epsilon);
465
+
466
+ sincosq(1.5, &s, &c);
467
+ try expectApproxEqAbs(@as(f128, 0.99749498660405443094172337114148732), s, epsilon);
468
+ try expectApproxEqAbs(@as(f128, 0.070737201667702910088189851434268747), c, epsilon);
469
+
470
+ sincosq(-1.5, &s, &c);
471
+ try expectApproxEqAbs(@as(f128, -0.99749498660405443094172337114148732), s, epsilon);
472
+ try expectApproxEqAbs(@as(f128, 0.070737201667702910088189851434268747), c, epsilon);
473
+
474
+ sincosq(37.45, &s, &c);
475
+ try expectApproxEqAbs(@as(f128, -0.24654331551411356571238581321661085), s, epsilon);
476
+ try expectApproxEqAbs(@as(f128, 0.96913177307077712443149563847233230), c, epsilon);
477
+
478
+ sincosq(89.123, &s, &c);
479
+ try expectApproxEqAbs(@as(f128, 0.91616527666226951075019849560482170), s, epsilon);
480
+ try expectApproxEqAbs(@as(f128, 0.40080068093548339848199454493704702), c, epsilon);
481
+ }
482
+
483
+ test "sincos128.special" {
484
+ try testSincosSpecial(f128);
485
+ }
@@ -481,8 +481,6 @@ fn _Qp_sqrt(c: *f128, a: *f128) callconv(.c) void {
481
481
 
482
482
  pub fn sqrtl(x: c_longdouble) callconv(.c) c_longdouble {
483
483
  switch (@typeInfo(c_longdouble).float.bits) {
484
- 16 => return __sqrth(x),
485
- 32 => return sqrtf(x),
486
484
  64 => return sqrt(x),
487
485
  80 => return __sqrtx(x),
488
486
  128 => return sqrtq(x),
@@ -24,7 +24,7 @@ extern fn memmove(dest: ?[*]u8, src: ?[*]const u8, n: usize) callconv(.c) ?[*]u8
24
24
  comptime {
25
25
  @export(&__stack_chk_fail, .{ .name = if (builtin.os.tag == .openbsd) "__stack_smash_handler" else "__stack_chk_fail", .linkage = compiler_rt.linkage, .visibility = compiler_rt.visibility });
26
26
  symbol(&__chk_fail, "__chk_fail");
27
- symbol(&__stack_chk_guard, "__stack_chk_guard");
27
+ symbol(&__stack_chk_guard, if (builtin.os.tag == .openbsd) "__guard_local" else "__stack_chk_guard");
28
28
  symbol(&__strcpy_chk, "__strcpy_chk");
29
29
  symbol(&__strncpy_chk, "__strncpy_chk");
30
30
  symbol(&__strcat_chk, "__strcat_chk");