@zigc/lib 0.17.0-dev.704 → 0.17.0-dev.813

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 (42) hide show
  1. package/c/math.zig +10 -0
  2. package/compiler/Maker/Step/TranslateC.zig +8 -4
  3. package/compiler_rt/log.zig +230 -3
  4. package/compiler_rt/log10.zig +228 -3
  5. package/compiler_rt/log2.zig +221 -3
  6. package/compiler_rt/log_f128.zig +173 -0
  7. package/package.json +1 -1
  8. package/std/Io/Writer.zig +6 -2
  9. package/std/Thread.zig +22 -2
  10. package/std/c/darwin.zig +6 -0
  11. package/std/c.zig +26 -5
  12. package/std/compress/flate/Compress.zig +4 -2
  13. package/std/crypto/ff.zig +3 -1
  14. package/std/crypto/tls/Client.zig +17 -2
  15. package/std/debug/cpu_context.zig +3 -3
  16. package/std/heap/BrkAllocator.zig +1 -1
  17. package/std/json/static.zig +2 -1
  18. package/std/math/isnan.zig +5 -0
  19. package/std/math/log1p.zig +13 -19
  20. package/std/math.zig +5 -0
  21. package/std/meta.zig +3 -12
  22. package/std/os/linux/csky.zig +165 -0
  23. package/std/os/linux/microblaze.zig +170 -0
  24. package/std/os/linux/sh.zig +239 -0
  25. package/std/os/linux/sparc.zig +277 -0
  26. package/std/os/linux/sparc64.zig +44 -30
  27. package/std/os/linux/syscalls.zig +1718 -12
  28. package/std/os/linux.zig +37 -8
  29. package/std/os/uefi/protocol/file.zig +16 -0
  30. package/std/os.zig +0 -10
  31. package/std/start.zig +5 -5
  32. package/std/static_string_map.zig +59 -1
  33. package/std/zig/LibCInstallation.zig +2 -2
  34. package/std/zig/Parse.zig +1 -1
  35. package/std/zig/PkgConfig.zig +5 -0
  36. package/std/zig/system/darwin/macos.zig +11 -7
  37. package/std/zig/system.zig +1 -1
  38. package/zig.h +38 -10
  39. package/libc/musl/src/math/i386/log1p.s +0 -25
  40. package/libc/musl/src/math/i386/log1pf.s +0 -26
  41. package/libc/musl/src/math/log1p.c +0 -122
  42. package/libc/musl/src/math/log1pf.c +0 -77
@@ -163,9 +163,190 @@ pub fn __log2x(a: f80) callconv(.c) f80 {
163
163
  return @floatCast(log2q(a));
164
164
  }
165
165
 
166
- pub fn log2q(a: f128) callconv(.c) f128 {
167
- // TODO: more correct implementation
168
- return log2(@floatCast(a));
166
+ /// Implementation of "Table-driven implementation of the logarithm function in IEEE floating-point arithmetic"
167
+ /// by PTP Tang in ACM Transactions on Mathematical Software (TOMS), 1990
168
+ ///
169
+ /// https://dl.acm.org/doi/pdf/10.1145/98267.98294
170
+ ///
171
+ /// Adapted to work for f128 and base 2 by Christophe Delage.
172
+ ///
173
+ /// Accuracy on 100 million random numbers in [0, inf) (exponent uniformly random)
174
+ /// <= 0.5 ulp: 99.99%, worst case <= 0.594 ulp
175
+ ///
176
+ /// Accuracy on 10 million random numbers near x = 1 (testing the proc2 case):
177
+ /// <= 0.5 ulp: 99.86%, worst case <= 0.546 ulp
178
+ pub fn log2q(x: f128) callconv(.c) f128 {
179
+ const impl = @import("log_f128.zig");
180
+
181
+ if (impl.specialCases(x)) |y|
182
+ return y;
183
+
184
+ if (impl.Proc2.lo < x and x < impl.Proc2.hi) {
185
+ // Polynomial approximation of log2((1 + u / 2) / (1 - u / 2))
186
+ // in [2 * a / (2 + a), 2 * b / (2 + b)]
187
+ // where a = exp(-1 / 16) - 1 and b = exp(1 / 16) - 1
188
+ const poly: impl.Proc2.Poly = .{
189
+ .b1_hi = 0x1.71547652b82fep0,
190
+ .b1_lo = 0x1.777d0ffda0d23a7d11d6aef551bbp-56,
191
+ .b3 = 0.12022458674074695061332705675016125,
192
+ .b5 = 1.8033688011112042591999058475816515e-2,
193
+ .b7 = 3.2203014305557218914285331735164364e-3,
194
+ .b9 = 6.261697226080570342191671010883619e-4,
195
+ .b11 = 1.280801705334664325639770412440281e-4,
196
+ .b13 = 2.7093882228102330360125035037716968e-5,
197
+ .b15 = 5.870341197214724685339102193694838e-6,
198
+ .b17 = 1.294917697032820750200161813672143e-6,
199
+ .b19 = 2.909291439731657940692470637735429e-7,
200
+ };
201
+ return impl.proc2(.{ .poly = poly }, x);
202
+ }
203
+
204
+ // Polynomial approximation of log2(1 + 2 * u / (2 - u))
205
+ // in [-(2 * fmax) / (2 + fmax), (2 * fmax) / (2 - fmax)]
206
+ // where fmax = 0.5 / size
207
+ const poly: impl.Proc1.Poly = .{
208
+ .a1 = 1.442695040888963407359924681001892,
209
+ .a3 = 0.12022458674074695061332705675072149,
210
+ .a5 = 1.8033688011112042591998536830294507e-2,
211
+ .a7 = 3.22030143055572204818095463930704e-3,
212
+ .a9 = 6.261697225875019234719395591078697e-4,
213
+ .a11 = 1.280813940786848788109850061222256e-4,
214
+ };
215
+ // tab[j].hi = 2^-n * round-to-integer(2^n * l)
216
+ // tab[j].lo = round-to-nearest-f128(l - tab[j].hi)
217
+ // where n = 97 and l = log2(1 + j / size)
218
+ const tab = [impl.size + 1]impl.Proc1.HiLo{
219
+ .{ .hi = 0, .lo = 0 },
220
+ .{ .hi = 0x1.6fe50b6ef08517f8e37bp-7, .lo = 0x1.794f4441ccdf648f265a41e57d75p-99 },
221
+ .{ .hi = 0x1.6e79685c2d2298a6e27e212p-6, .lo = -0x1.fbd41ae7d5a2434912ad3fe21cfbp-100 },
222
+ .{ .hi = 0x1.11cd1d5133412ed814504fbp-5, .lo = -0x1.b2e2b43254008aeb4167a3359577p-99 },
223
+ .{ .hi = 0x1.6bad3758efd87313606f097p-5, .lo = -0x1.20fbdb7ce4c86d28e4be331fce17p-99 },
224
+ .{ .hi = 0x1.c4dfab90aab5ef4f8f869e6p-5, .lo = 0x1.dc4142bd2b182fdaac375356fc29p-100 },
225
+ .{ .hi = 0x1.0eb389fa29f9ab3cf74bab98p-4, .lo = 0x1.9217066b9150f3c7ddd223517be7p-100 },
226
+ .{ .hi = 0x1.3aa2fdd27f1c2d804d1121b8p-4, .lo = -0x1.acec4ac95b97a0e1d121d0222ba5p-99 },
227
+ .{ .hi = 0x1.663f6fac913167ccc5382618p-4, .lo = -0x1.dd4529e1ad7c182a716c033db6dep-99 },
228
+ .{ .hi = 0x1.918a16e46335aae7232494d8p-4, .lo = 0x1.9d1d19046b227370f7cb86bd9e3ep-99 },
229
+ .{ .hi = 0x1.bc84240adabba63b2c5a6e5p-4, .lo = 0x1.97ab879641c50810e3b820ca9aap-100 },
230
+ .{ .hi = 0x1.e72ec117fa5b21cbdb5d9dcp-4, .lo = 0x1.4f902752a1dc5b384b68c4f1e669p-99 },
231
+ .{ .hi = 0x1.08c588cda79e39627bc6fd0cp-3, .lo = -0x1.aad7542b0c4015f8fdff17d7ea79p-99 },
232
+ .{ .hi = 0x1.1dcd197552b7b5ea45430784p-3, .lo = -0x1.a7aa295e08add52f96d8aaf3b8edp-101 },
233
+ .{ .hi = 0x1.32ae9e278ae1a1f51f2c075cp-3, .lo = -0x1.8b459b26ac0ed3b39116e44d50c8p-99 },
234
+ .{ .hi = 0x1.476a9f983f74d3138e941644p-3, .lo = -0x1.27d822a49870762eeaffdcde52bdp-104 },
235
+ .{ .hi = 0x1.5c01a39fbd6879fa00b120ap-3, .lo = 0x1.a2eb74493cf9a8e8966c101ef964p-101 },
236
+ .{ .hi = 0x1.70742d4ef027f29c01cfad78p-3, .lo = -0x1.8495d6ca3b2dcc7941a5df4c8decp-103 },
237
+ .{ .hi = 0x1.84c2bd02f03b2fdd2248ee78p-3, .lo = -0x1.c56a8f0829344b50240232cdb09ep-99 },
238
+ .{ .hi = 0x1.98edd077e70df02face8ca9p-3, .lo = 0x1.72b7f2fcb409899d29e3feaf9c8fp-99 },
239
+ .{ .hi = 0x1.acf5e2db4ec93efe11ecbcp-3, .lo = 0x1.83634b52082beea143f1178aaf62p-99 },
240
+ .{ .hi = 0x1.c0db6cdd94dee40e26d9899cp-3, .lo = 0x1.fde86bd82482b9b4a45aa674cc1bp-100 },
241
+ .{ .hi = 0x1.d49ee4c32596fc8f4b565024p-3, .lo = -0x1.7eaef901f52d2d54011ca95ecca1p-101 },
242
+ .{ .hi = 0x1.e840be74e6a4cc7c9f3d51ep-3, .lo = -0x1.03c7c0d8554c2c17f944fa1f93cfp-99 },
243
+ .{ .hi = 0x1.fbc16b902680a23a8d998a78p-3, .lo = 0x1.3bcd7c933d5bb6b52a41ad567d8ep-101 },
244
+ .{ .hi = 0x1.0790adbb030096f031a699d6p-2, .lo = -0x1.748a4ccf5e3dadf04bd0ff35f885p-99 },
245
+ .{ .hi = 0x1.11307dad30b75cb09705a796p-2, .lo = -0x1.6c580f988c64f00bd800ed9b9d24p-100 },
246
+ .{ .hi = 0x1.1ac05b291f070528c7386df8p-2, .lo = 0x1.94340c3b639a4e5a59fded67fcb7p-99 },
247
+ .{ .hi = 0x1.24407ab0e07398245b94ba44p-2, .lo = 0x1.8077f77a0f4353b19301384099dap-99 },
248
+ .{ .hi = 0x1.2db10fc4d9aaf6f137a3d8c6p-2, .lo = 0x1.e79b8ee38b380b8be44e090558d7p-99 },
249
+ .{ .hi = 0x1.37124cea4cdecd991336c96p-2, .lo = 0x1.fb9186e41376f4612d4b0b9a507dp-100 },
250
+ .{ .hi = 0x1.406463b1b044975b2f344252p-2, .lo = 0x1.9a92f79c803c5151cb25af73b143p-101 },
251
+ .{ .hi = 0x1.49a784bcd1b8afe492bf6ff4p-2, .lo = 0x1.b5fb699b2d8abfc6f675a9d236d6p-99 },
252
+ .{ .hi = 0x1.52dbdfc4c96b37dcf60e61fcp-2, .lo = 0x1.36a5977bbf78792b6a99ccb74cd5p-99 },
253
+ .{ .hi = 0x1.5c01a39fbd6879fa00b120ap-2, .lo = 0x1.a2eb74493cf9a8e8966c101ef964p-100 },
254
+ .{ .hi = 0x1.6518fe4677ba6e52278edc8ap-2, .lo = -0x1.6778b4ba074a8ce60972502c7262p-102 },
255
+ .{ .hi = 0x1.6e221cd9d0cde578d520b45p-2, .lo = -0x1.1f87779b03b7d7e6bd0493f2e147p-99 },
256
+ .{ .hi = 0x1.771d2ba7efb3be46fecd5122p-2, .lo = 0x1.29ff1c3c9184a53c236eed64d17ep-100 },
257
+ .{ .hi = 0x1.800a563161c5432aeb609f4ep-2, .lo = -0x1.0a6ee4f4272036db2b8f6963d1c4p-103 },
258
+ .{ .hi = 0x1.88e9c72e0b225a4b664a4c8ep-2, .lo = -0x1.59153bc13892380cd03989062763p-100 },
259
+ .{ .hi = 0x1.91bba891f1708b4b2b5056b8p-2, .lo = 0x1.a7156185dba8beba3cb180b37bbbp-100 },
260
+ .{ .hi = 0x1.9a802391e232f34bb6d0e43ap-2, .lo = -0x1.67caee1e30b7c2d6ff9893868aa6p-99 },
261
+ .{ .hi = 0x1.a33760a7f60509d7c40d797ap-2, .lo = -0x1.3a4e0233ff8ac31bd7b2cb5c0041p-102 },
262
+ .{ .hi = 0x1.abe18797f1f48e1a4725558cp-2, .lo = 0x1.6f5c786e3d2aafcee056debabb79p-100 },
263
+ .{ .hi = 0x1.b47ebf73882a0a4146ef8fd8p-2, .lo = 0x1.44f1d5b8a5402f72138cbfe19e49p-99 },
264
+ .{ .hi = 0x1.bd0f2e9e79030ab442ce3202p-2, .lo = -0x1.d27aeb2ddd02924cf83def704a7bp-99 },
265
+ .{ .hi = 0x1.c592fad295b567e7ee54aefp-2, .lo = -0x1.99e7587ea99e677177c285c32088p-99 },
266
+ .{ .hi = 0x1.ce0a4923a587cc95d0a2ee7ap-2, .lo = 0x1.6482ae04295539bf0ed23f498b8ap-104 },
267
+ .{ .hi = 0x1.d6753e032ea0efe3ebe19906p-2, .lo = -0x1.55594a060c67a245f78bb523ad43p-99 },
268
+ .{ .hi = 0x1.ded3fd442364c4ebb196116p-2, .lo = -0x1.df9689b34ee848b0b7818878492cp-99 },
269
+ .{ .hi = 0x1.e726aa1e754d20c519e12f48p-2, .lo = -0x1.dd99950bae450ac5754344a16faep-99 },
270
+ .{ .hi = 0x1.ef6d67328e2207d1e01a839p-2, .lo = 0x1.04907f9ccddb53ed88c47c7d794cp-100 },
271
+ .{ .hi = 0x1.f7a8568cb06cece193180046p-2, .lo = -0x1.e149b9528336d5fee3ef52260ad1p-99 },
272
+ .{ .hi = 0x1.ffd799a83ff9ab9cc7f342f8p-2, .lo = 0x1.70c458bda55b08c8c8668867736bp-99 },
273
+ .{ .hi = 0x1.03fda8b97997f33943464056p-1, .lo = 0x1.eb47cb2aadd948d48bbef492995ep-99 },
274
+ .{ .hi = 0x1.0809cf27f703d525b3c1d158p-1, .lo = 0x1.f51e170ccb0f7761e5ff9b93854ep-100 },
275
+ .{ .hi = 0x1.0c10500d63aa6588257529b6p-1, .lo = 0x1.2ef0aa83f2869dd6be1d1cc2dc47p-100 },
276
+ .{ .hi = 0x1.10113b153c8ea7b1cddae6fbp-1, .lo = -0x1.8d4296259492a32f8b327d46339p-100 },
277
+ .{ .hi = 0x1.140c9faa1e5439e15a52a316p-1, .lo = 0x1.29611295daec3b07655c599a50e7p-103 },
278
+ .{ .hi = 0x1.18028cf72976a4eb8e97d145p-1, .lo = 0x1.9ac318308c388b1f2e108f3d37bep-100 },
279
+ .{ .hi = 0x1.1bf311e95d00de3b513a9dcdp-1, .lo = -0x1.3c8ff1c1539554d1f10759819adp-100 },
280
+ .{ .hi = 0x1.1fde3d30e812642415d47384p-1, .lo = 0x1.3c458dd53d12c99743f3c4617c37p-99 },
281
+ .{ .hi = 0x1.23c41d42727c8080ecc61a99p-1, .lo = -0x1.fb113740031e528bbef9ead829c7p-99 },
282
+ .{ .hi = 0x1.27a4c0585cbf805784ee0e3bp-1, .lo = -0x1.60c515c0f4b1772f673312a17eep-101 },
283
+ .{ .hi = 0x1.2b803473f7ad0f3f40162414p-1, .lo = 0x1.a2eb74493cf9a8e8966c101ef964p-102 },
284
+ .{ .hi = 0x1.2f56875eb3f2614278cd1699p-1, .lo = 0x1.88c5d320344f129c318704371e3dp-100 },
285
+ .{ .hi = 0x1.3327c6ab49ca6c86b9205fa4p-1, .lo = 0x1.1010939e6edc060bf80459dd880dp-100 },
286
+ .{ .hi = 0x1.36f3ffb6d9162404772a151dp-1, .lo = -0x1.93193dd58663d90eed123bda5ea2p-100 },
287
+ .{ .hi = 0x1.3abb3faa02166cccab240e9p-1, .lo = 0x1.3e5a84738c6a548017167cabbd62p-99 },
288
+ .{ .hi = 0x1.3e7d9379f70166ae2a7ada55p-1, .lo = 0x1.6369ad81817bfeddee4a96320fd3p-100 },
289
+ .{ .hi = 0x1.423b07e986aa9670761d14abp-1, .lo = -0x1.d93cd9e77a527017a3e16237ddd4p-100 },
290
+ .{ .hi = 0x1.45f3a98a20738a4d7ffe0267p-1, .lo = 0x1.75541c775be89f0841ae8379c6adp-100 },
291
+ .{ .hi = 0x1.49a784bcd1b8afe492bf6ff5p-1, .lo = -0x1.2812599349d500e4262958b724aap-100 },
292
+ .{ .hi = 0x1.4d56a5b33cec44a6deff9987p-1, .lo = 0x1.fad1e37de08f5e02036d27593a4p-100 },
293
+ .{ .hi = 0x1.510118708a8f8dde949378b2p-1, .lo = 0x1.348f1454e8c939a60252b34c6c66p-100 },
294
+ .{ .hi = 0x1.54a6e8ca5438db1b0ca63aacp-1, .lo = -0x1.2f1784ce0b08724e7f04c9712103p-99 },
295
+ .{ .hi = 0x1.5848226989d33c38d8bd28d7p-1, .lo = -0x1.a8e7bb5885dce30d5e9e8139d7b1p-99 },
296
+ .{ .hi = 0x1.5be4d0cb51434aaeb3f01222p-1, .lo = 0x1.2ce7e40053a5cfc072e22bbeab1dp-100 },
297
+ .{ .hi = 0x1.5f7cff41e09aeb8cb1ac05cdp-1, .lo = -0x1.4fb2c4a0dc9f7b2e29701f76805bp-100 },
298
+ .{ .hi = 0x1.6310b8f553048406a5a171dep-1, .lo = 0x1.003332544881b92584a992692c7dp-99 },
299
+ .{ .hi = 0x1.66a008e4788cbcd2edb4390ep-1, .lo = 0x1.4c1a88f0e7a41e948033b63cbaadp-99 },
300
+ .{ .hi = 0x1.6a2af9e5a0f0a08099572f21p-1, .lo = -0x1.0665eae13d10b498acfb49ce0dep-99 },
301
+ .{ .hi = 0x1.6db196a761949d97df07e357p-1, .lo = -0x1.7679e5a1e4a0e0dbeb3195d40b4dp-99 },
302
+ .{ .hi = 0x1.7133e9b156c7be5167fbdc81p-1, .lo = 0x1.b935e716c7cb214a0b718fc30587p-100 },
303
+ .{ .hi = 0x1.74b1fd64e0753c6e5783fd15p-1, .lo = 0x1.923a7aefc37ef9baffdf4ec86923p-102 },
304
+ .{ .hi = 0x1.782bdbfdda6577bc87e125ebp-1, .lo = -0x1.56e82c9d846f9e967e496249719bp-99 },
305
+ .{ .hi = 0x1.7ba18f93502e409eab77f21ap-1, .lo = -0x1.c097ea4900b7ca9ea124a56a0c75p-100 },
306
+ .{ .hi = 0x1.7f1322182cf15d12ecd77fe7p-1, .lo = -0x1.0512c0ac2d3510c6f5fd964c2ae2p-99 },
307
+ .{ .hi = 0x1.82809d5be7072dbdc0426c3cp-1, .lo = 0x1.3a309736edbb3eae70d10c173b0bp-100 },
308
+ .{ .hi = 0x1.85ea0b0b27b261086fce864ap-1, .lo = 0x1.f5979367f112e34dbc4e07ae924cp-101 },
309
+ .{ .hi = 0x1.894f74b06ef8b406ea2c7d92p-1, .lo = -0x1.54ede83a0018a21469a1f11911aep-99 },
310
+ .{ .hi = 0x1.8cb0e3b4b3bbdb3688a85fb2p-1, .lo = -0x1.910d207f019516331134b0c9d172p-99 },
311
+ .{ .hi = 0x1.900e6160002ccfe43f50847dp-1, .lo = 0x1.82887e54848c7603fba7d2ba264ap-101 },
312
+ .{ .hi = 0x1.9367f6da0ab2e9cc865b3dd1p-1, .lo = -0x1.225541e18baff32be2709a01f861p-100 },
313
+ .{ .hi = 0x1.96bdad2acb5f5efec4915314p-1, .lo = 0x1.b7c0b9db2fcb23be56be998e8e8fp-99 },
314
+ .{ .hi = 0x1.9a0f8d3b0e04fde95734abd3p-1, .lo = -0x1.9f19ce27d2dca3979bbb0ca9365fp-104 },
315
+ .{ .hi = 0x1.9d5d9fd5010b366655920748p-1, .lo = 0x1.3e5a84738c6a548017167cabbd62p-100 },
316
+ .{ .hi = 0x1.a0a7eda4c112ce6312ebb81dp-1, .lo = -0x1.5a727dbaad60b1bf6bcd429e9fdfp-102 },
317
+ .{ .hi = 0x1.a3ee7f38e181ed0798d1aa21p-1, .lo = 0x1.a51584c9dc5627ac1ab989c42834p-99 },
318
+ .{ .hi = 0x1.a7315d02f20c7bd560a3fee1p-1, .lo = -0x1.dacbac02cace034400340f2319ddp-99 },
319
+ .{ .hi = 0x1.aa708f58014d37cde37c86b2p-1, .lo = 0x1.06a19b5bedec4594babbdab2fd2p-100 },
320
+ .{ .hi = 0x1.adac1e711c832d1562d61af7p-1, .lo = 0x1.fbfa94970bb9fab077c80ac91e28p-100 },
321
+ .{ .hi = 0x1.b0e4126bcc86bd7a6ed4e1b1p-1, .lo = -0x1.b28c4122d931f14daa7bc7cc5b07p-99 },
322
+ .{ .hi = 0x1.b418734a9008bd978b98f7dfp-1, .lo = -0x1.039d32863d2685d1b265e993decbp-100 },
323
+ .{ .hi = 0x1.b74948f5532da4b4b7143364p-1, .lo = -0x1.ce44c707d13d9c8e8a9007c6ffb4p-99 },
324
+ .{ .hi = 0x1.ba769b39e49640ef87ede14bp-1, .lo = -0x1.735f3571b2e44add58e787eb935ep-101 },
325
+ .{ .hi = 0x1.bda071cc67e6db516de08136p-1, .lo = 0x1.b4d5660336e288cea5ceba447906p-99 },
326
+ .{ .hi = 0x1.c0c6d447c5dd362d9a9a55c7p-1, .lo = 0x1.17b370ba83c0155dfdf1fd11696ep-99 },
327
+ .{ .hi = 0x1.c3e9ca2e1a05533698b4e49bp-1, .lo = 0x1.ec0c07c38978823235b0f583d7a7p-99 },
328
+ .{ .hi = 0x1.c7095ae91e1c760bc9b188c4p-1, .lo = 0x1.322631fb315aaf4da97307d1076bp-99 },
329
+ .{ .hi = 0x1.ca258dca9331635fee390c0bp-1, .lo = -0x1.3e17e7a7e746edea65e0c4e7d82dp-99 },
330
+ .{ .hi = 0x1.cd3e6a0ca8906c243749114cp-1, .lo = 0x1.2bbae931e8daa670e214b298ab12p-99 },
331
+ .{ .hi = 0x1.d053f6d2608967318975dc0ep-1, .lo = 0x1.ea58d8245529f4e409432bd61602p-99 },
332
+ .{ .hi = 0x1.d3663b27f31d5297837adb4bp-1, .lo = -0x1.38daa2d672ec54842668a312854dp-100 },
333
+ .{ .hi = 0x1.d6753e032ea0efe3ebe19905p-1, .lo = 0x1.554d6bf3e730bb7410e895b8a57ap-99 },
334
+ .{ .hi = 0x1.d9810643d6614c3c406eb464p-1, .lo = 0x1.05d328adc61c09915e038a135bdfp-99 },
335
+ .{ .hi = 0x1.dc899ab3ff56c5e673abad44p-1, .lo = 0x1.8c6339fa7bd10d27c064978bc6f5p-100 },
336
+ .{ .hi = 0x1.df8f02086af2c4bef483c68bp-1, .lo = -0x1.0baa11f1460aebb8f273d9820bc8p-99 },
337
+ .{ .hi = 0x1.e29142e0e01401fbaaa67e3cp-1, .lo = -0x1.d6541223b8314593546e23de0435p-100 },
338
+ .{ .hi = 0x1.e59063c8822ce561911a9bacp-1, .lo = 0x1.9b0de815b6fb0c41cac421925a11p-99 },
339
+ .{ .hi = 0x1.e88c6b3626a72aa21a3c7f02p-1, .lo = -0x1.0e3aeafe4f838b64e3bde351d0f1p-102 },
340
+ .{ .hi = 0x1.eb855f8ca88fb0d4b5c673bbp-1, .lo = 0x1.1db401cf29698d7b00a45b6d1082p-102 },
341
+ .{ .hi = 0x1.ee7b471b3a9507d6dc1f27efp-1, .lo = 0x1.21f23cd188a03f54e360fd76a481p-99 },
342
+ .{ .hi = 0x1.f16e281db76303b21928c216p-1, .lo = -0x1.2854f795db443461c5e7233e545fp-102 },
343
+ .{ .hi = 0x1.f45e08bcf06554e4d5be4f7p-1, .lo = 0x1.07e81f4c1573947a3126425d9d0ap-99 },
344
+ .{ .hi = 0x1.f74aef0efafadd7a1b65f639p-1, .lo = -0x1.7bc1e9882648a6b530fa4d847e3fp-100 },
345
+ .{ .hi = 0x1.fa34e1177c23362928b9ed75p-1, .lo = -0x1.856dc2b529ad698bfda1e41b89bdp-101 },
346
+ .{ .hi = 0x1.fd1be4c7f2af942b221ce0d1p-1, .lo = 0x1.a275c854f5bb9732fae5130be48bp-104 },
347
+ .{ .hi = 0x1p0, .lo = 0 },
348
+ };
349
+ return impl.proc1(.{ .poly = poly, .tab = tab }, x);
169
350
  }
170
351
 
171
352
  pub fn log2l(x: c_longdouble) callconv(.c) c_longdouble {
@@ -247,3 +428,40 @@ test "log2() boundary" {
247
428
  try expectEqual(log2(0x1p-1022), -0x1.ffp+9); // First subnormal
248
429
  try expect(math.isNan(log2(-0x1p-1022))); // First negative subnormal
249
430
  }
431
+
432
+ test "log2q() special" {
433
+ try expectEqual(log2q(0.0), -math.inf(f128));
434
+ try expectEqual(log2q(-0.0), -math.inf(f128));
435
+ try expect(math.isPositiveZero(log2q(1.0)));
436
+ try expectEqual(log2q(2.0), 1.0);
437
+ try expectEqual(log2q(math.inf(f128)), math.inf(f128));
438
+ try expect(math.isNan(log2q(-1.0)));
439
+ try expect(math.isNan(log2q(-math.inf(f128))));
440
+ try expect(math.isNan(log2q(math.nan(f128))));
441
+ try expect(math.isNan(log2q(math.snan(f128))));
442
+ }
443
+
444
+ test "log2q() boundary" {
445
+ try expectEqual(log2q(0x1.ffffffffffffffffffffffffffffp16383), 0x1p14); // Max input value
446
+ try expectEqual(log2q(0x1p-16494), -0x1.01b8p14); // Min positive input value
447
+ try expect(math.isNan(log2q(-0x1p-16494))); // Min negative input value
448
+ try expectEqual(log2q(0x1.0000000000000000000000000001p0), 0x1.71547652b82fe1777d0ffda0d23ap-112); // Last value before result reaches +0
449
+ try expectEqual(log2q(0x1.ffffffffffffffffffffffffffffp-1), -0x1.71547652b82fe1777d0ffda0d23bp-113); // Last value before result reaches -0
450
+ try expectEqual(log2q(0x1p-16382), -0x1.fffp13); // First subnormal
451
+ try expect(math.isNan(log2q(-0x1p-16382))); // First negative subnormal
452
+ }
453
+
454
+ test "log2q() sanity" {
455
+ try expectEqual(log2q(8.0965013884643408203125e11), 3.955850767769801288865582596068254e1);
456
+ try expectEqual(log2q(8.346531942223744e15), 5.28900982928636641107356163006646e1);
457
+ try expectEqual(log2q(9.707809913413123613777865431464565e-20), -6.315941603809020445822192336703809e1);
458
+ try expectEqual(log2q(1.9179565888043380306021427656243352e-24), -7.878670421065570557450089031998522e1);
459
+ try expectEqual(log2q(2.5260048200126556877075044745936796e-25), -8.17113449801679676275805009400338e1);
460
+ try expectEqual(log2q(3.1170134002568967640399932861328125e7), 2.489366102143423848582774267206741e1);
461
+ // test near 1
462
+ try expectEqual(log2q(1.026586845186097528392910049888087e0), 3.7855678902522753591699367969189364e-2);
463
+ try expectEqual(log2q(1.0005582850578053877743656130405725e0), 8.052103367568488432896147152682078e-4);
464
+ try expectEqual(log2q(1.0370174103591254835765589348284266e0), 5.244011558596899945639244281954306e-2);
465
+ try expectEqual(log2q(1.0429996503525671713075162472250667e0), 6.073867421942172944687194557176633e-2);
466
+ try expectEqual(log2q(1.0383384027961064621892184334228659e0), 5.4276706191956281784022630732940314e-2);
467
+ }
@@ -0,0 +1,173 @@
1
+ /// Implementation of "Table-driven implementation of the logarithm function in IEEE floating-point arithmetic"
2
+ /// by PTP Tang in ACM Transactions on Mathematical Software (TOMS), 1990
3
+ ///
4
+ /// https://dl.acm.org/doi/pdf/10.1145/98267.98294
5
+ ///
6
+ /// Adapted to work for f128 and bases 2 and 10 by Christophe Delage.
7
+ ///
8
+ /// This file contains the code shared between logq, log2q and log10q.
9
+ const log_f128 = @This();
10
+
11
+ const std = @import("std");
12
+ const math = std.math;
13
+
14
+ pub const log2size = 7;
15
+ pub const size = 1 << log2size;
16
+
17
+ /// Filter out special cases for log in bases {e,2,10}.
18
+ ///
19
+ /// If x is finite and positive, returns null.
20
+ /// Returns the appropriate NaN or inf otherwise.
21
+ pub fn specialCases(x: f128) ?f128 {
22
+ if (!math.isFinite(x)) {
23
+ if (math.isNan(x)) {
24
+ if (math.isSignalNan(x)) math.raiseInvalid();
25
+ return math.nan(f128);
26
+ }
27
+ if (math.isPositiveInf(x)) return x;
28
+ }
29
+ if (x <= 0.0) {
30
+ if (x >= 0.0) {
31
+ math.raiseDivByZero();
32
+ return -math.inf(f128);
33
+ }
34
+ math.raiseInvalid();
35
+ return math.nan(f128);
36
+ }
37
+
38
+ return null;
39
+ }
40
+
41
+ pub const Proc1 = struct {
42
+ pub const Poly = struct {
43
+ a1: f128,
44
+ a3: f128,
45
+ a5: f128,
46
+ a7: f128,
47
+ a9: f64,
48
+ a11: f64,
49
+ };
50
+ pub const HiLo = struct { hi: f128, lo: f128 };
51
+ poly: Poly,
52
+ tab: [size + 1]HiLo,
53
+ };
54
+
55
+ pub fn proc1(comptime p: Proc1, x: f128) f128 {
56
+ const ym = frexp2(x);
57
+ const y = ym.significand;
58
+ const m = ym.exponent;
59
+
60
+ const F0 = @round(math.ldexp(y, log2size));
61
+ const j0: usize = @intFromFloat(F0);
62
+ const j = j0 - size;
63
+ const F = math.ldexp(F0, -log2size);
64
+ const f = y - F;
65
+
66
+ const u = (f + f) / (y + F);
67
+ const v = u * u;
68
+ const v64: f64 = @floatCast(v);
69
+
70
+ const p9 = p.poly.a9 + v64 * p.poly.a11;
71
+ const p7 = p.poly.a7 + v * p9;
72
+ const p5 = p.poly.a5 + v * p7;
73
+ const p3 = p.poly.a3 + v * p5;
74
+
75
+ const q = u * v * p3;
76
+
77
+ const xm: f128 = @floatFromInt(m);
78
+ const l_hi = xm * p.tab[128].hi + p.tab[j].hi;
79
+ const l_lo = xm * p.tab[128].lo + p.tab[j].lo;
80
+
81
+ if (comptime p.poly.a1 == 1.0)
82
+ return l_hi + (u + (q + l_lo))
83
+ else
84
+ return l_hi + (u * p.poly.a1 + (q + l_lo));
85
+ }
86
+
87
+ pub const Proc2 = struct {
88
+ // exp(-1 / 16) rounded down
89
+ pub const lo: f128 = 0.939413062813475786119710824622305;
90
+ // exp(1 / 16) rounded up
91
+ pub const hi: f128 = 1.0644944589178594295633905946428897;
92
+
93
+ pub const Poly = struct {
94
+ b1_hi: f128,
95
+ b1_lo: f128,
96
+ b3: f128,
97
+ b5: f128,
98
+ b7: f128,
99
+ b9: f128,
100
+ b11: f128,
101
+ b13: f128,
102
+ b15: f64,
103
+ b17: f64,
104
+ b19: f64,
105
+ };
106
+
107
+ poly: Poly,
108
+ };
109
+
110
+ pub fn proc2(comptime p: Proc2, x: f128) f128 {
111
+ std.debug.assert(Proc2.lo < x and x < Proc2.hi);
112
+
113
+ const f = x - 1.0;
114
+ const g = 1 / (2 + f);
115
+ const u = 2 * f * g;
116
+ const v = u * u;
117
+ const uv = u * v;
118
+ const v64: f64 = @floatCast(v);
119
+
120
+ const p17 = p.poly.b17 + v64 * p.poly.b19;
121
+ const p15 = p.poly.b15 + v64 * p17;
122
+ const p13 = p.poly.b13 + v * p15;
123
+ const p11 = p.poly.b11 + v * p13;
124
+ const p9 = p.poly.b9 + v * p11;
125
+ const p7 = p.poly.b7 + v * p9;
126
+ const p5 = p.poly.b5 + v * p7;
127
+
128
+ const q_hi = uv * p.poly.b3;
129
+ const q_lo = uv * v * p5;
130
+
131
+ const f_hi: f128 = @as(f64, @floatCast(f));
132
+ const f_lo = f - f_hi;
133
+
134
+ const u_hi: f128 = @as(f64, @floatCast(u));
135
+ const u_lo = ((2 * (f - u_hi) - u_hi * f_hi) - u_hi * f_lo) * g;
136
+
137
+ if (comptime p.poly.b1_hi == 1.0 and p.poly.b1_lo == 0.0)
138
+ return u_hi + (u_lo + (q_hi + q_lo));
139
+
140
+ // t = u * p.poly.b1
141
+ const t_hi = u_hi * p.poly.b1_hi;
142
+ const t_lo = u_lo * p.poly.b1_hi + u * p.poly.b1_lo;
143
+
144
+ // y = t + q
145
+ const y_hi = t_hi + q_hi;
146
+ const y_lo = t_lo + (t_hi - y_hi + q_hi) + q_lo;
147
+
148
+ return y_hi + y_lo;
149
+ }
150
+
151
+ /// Returns (f, k) such that x = f * 2^k and f in [1,2).
152
+ /// Asserts that x is finite and positive.
153
+ pub fn frexp2(x: f128) math.Frexp(f128) {
154
+ std.debug.assert(math.isFinite(x));
155
+ std.debug.assert(x > 0.0);
156
+
157
+ const bits: u128 = @bitCast(x);
158
+ const uexp: i32 = @intCast(bits >> 112);
159
+
160
+ std.debug.assert(uexp >= 0);
161
+
162
+ if (uexp == 0) {
163
+ const shift: u7 = @intCast(@clz(bits) - 15);
164
+
165
+ const exp = -@as(i32, shift) - 0x3ffe;
166
+ const frac: f128 = @bitCast((bits << shift) | (0x3fff << 112));
167
+ return .{ .significand = frac, .exponent = exp };
168
+ }
169
+
170
+ const exp = uexp - 0x3fff;
171
+ const frac: f128 = @bitCast((0x3fff << 112) | ((bits << 16) >> 16));
172
+ return .{ .significand = frac, .exponent = exp };
173
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zigc/lib",
3
- "version": "0.17.0-dev.704",
3
+ "version": "0.17.0-dev.813",
4
4
  "description": "Zig standard library and libc headers (shared across all platforms)",
5
5
  "repository": {
6
6
  "type": "git",
package/std/Io/Writer.zig CHANGED
@@ -2772,10 +2772,14 @@ pub const Allocating = struct {
2772
2772
  if (limit == .nothing) return 0;
2773
2773
  const a: *Allocating = @fieldParentPtr("writer", w);
2774
2774
  const pos = file_reader.logicalPos();
2775
- const additional = if (file_reader.getSize()) |size| size - pos else |_| std.atomic.cache_line;
2775
+ const additional, const exact = if (file_reader.getSize()) |size|
2776
+ .{ size - pos, true }
2777
+ else |_|
2778
+ .{ std.atomic.cache_line, false };
2776
2779
  if (additional == 0) return error.EndOfStream;
2777
2780
  a.ensureUnusedCapacity(limit.minInt64(additional)) catch return error.WriteFailed;
2778
- const dest = limit.slice(a.writer.buffer[a.writer.end..]);
2781
+ const buffer = a.writer.buffer[a.writer.end..];
2782
+ const dest = if (exact) buffer[0..limit.minInt64(additional)] else limit.slice(buffer);
2779
2783
  const n = try file_reader.interface.readSliceShort(dest);
2780
2784
  if (n == 0) return error.EndOfStream;
2781
2785
  a.writer.end += n;
package/std/Thread.zig CHANGED
@@ -1220,6 +1220,16 @@ const LinuxThreadImpl = struct {
1220
1220
  : [ptr] "{$16}" (@intFromPtr(self.mapped.ptr)),
1221
1221
  [len] "{$17}" (self.mapped.len),
1222
1222
  ),
1223
+ .arc, .arceb => asm volatile (
1224
+ \\ mov r8, 215 # SYS_munmap
1225
+ \\ trap_s 0
1226
+ \\ mov r8, 93 # SYS_exit
1227
+ \\ mov r0, 0
1228
+ \\ trap_s 0
1229
+ :
1230
+ : [ptr] "{r0}" (@intFromPtr(self.mapped.ptr)),
1231
+ [len] "{r1}" (self.mapped.len),
1232
+ ),
1223
1233
  .hexagon => asm volatile (
1224
1234
  \\ r6 = #215 // SYS_munmap
1225
1235
  \\ trap0(#1)
@@ -1254,7 +1264,7 @@ const LinuxThreadImpl = struct {
1254
1264
  \\ ori r12, r0, 91 # SYS_munmap
1255
1265
  \\ brki r14, 0x8
1256
1266
  \\ ori r12, r0, 1 # SYS_exit
1257
- \\ or r5, r0, r0
1267
+ \\ ori r5, r0, 0
1258
1268
  \\ brki r14, 0x8
1259
1269
  :
1260
1270
  : [ptr] "{r5}" (@intFromPtr(self.mapped.ptr)),
@@ -1366,7 +1376,7 @@ const LinuxThreadImpl = struct {
1366
1376
  \\ mov %%g1, %%o0 // ptr
1367
1377
  \\ mov %%g2, %%o1 // len
1368
1378
  \\ mov 73, %%g1 // SYS_munmap
1369
- \\ t 0x3 # ST_FLUSH_WINDOWS
1379
+ \\ t 0x3 // ST_FLUSH_WINDOWS
1370
1380
  \\ t 0x10
1371
1381
  \\ mov 1, %%g1 // SYS_exit
1372
1382
  \\ mov 0, %%o0
@@ -1411,6 +1421,16 @@ const LinuxThreadImpl = struct {
1411
1421
  : [ptr] "{r4}" (@intFromPtr(self.mapped.ptr)),
1412
1422
  [len] "{r5}" (self.mapped.len),
1413
1423
  : .{ .memory = true }),
1424
+ .csky => asm volatile (
1425
+ \\ movi r7, 215 # SYS_munmap
1426
+ \\ trap 0
1427
+ \\ movi r7, 93 # SYS_exit
1428
+ \\ movi r0, 0
1429
+ \\ trap 0
1430
+ :
1431
+ : [ptr] "{r0}" (@intFromPtr(self.mapped.ptr)),
1432
+ [len] "{r1}" (self.mapped.len),
1433
+ : .{ .memory = true }),
1414
1434
  .xtensa, .xtensaeb => asm volatile (
1415
1435
  \\ movi a2, 81 // SYS_munmap
1416
1436
  \\ syscall
package/std/c/darwin.zig CHANGED
@@ -1184,6 +1184,10 @@ pub const CPUFAMILY = enum(u32) {
1184
1184
  ARM_BRAVA = 0x17d5b93a,
1185
1185
  ARM_TAHITI = 0x75d4acb9,
1186
1186
  ARM_TUPAI = 0x204526d0,
1187
+ ARM_HIDRA = 0x1d5a87e8,
1188
+ ARM_SOTRA = 0xf76c5b1a,
1189
+ ARM_THERA = 0xab345f09,
1190
+ ARM_TILOS = 0x01d7a72b,
1187
1191
  _,
1188
1192
  };
1189
1193
 
@@ -1490,6 +1494,8 @@ pub const E = enum(u16) {
1490
1494
  OWNERDEAD = 105,
1491
1495
  /// Interface output queue is full
1492
1496
  QFULL = 106,
1497
+ /// Capabilities insufficient
1498
+ NOTCAPABLE = 107,
1493
1499
  _,
1494
1500
  };
1495
1501
 
package/std/c.zig CHANGED
@@ -148,12 +148,12 @@ pub const timespec = switch (native_os) {
148
148
  };
149
149
 
150
150
  pub const dev_t = switch (native_os) {
151
- .linux => linux.dev_t,
152
151
  .emscripten => emscripten.dev_t,
153
152
  .wasi => wasi.device_t,
154
153
  .openbsd, .haiku, .illumos, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => i32,
154
+ // glibc and musl define dev_t as u64, while in Linux kernel it is u32.
155
155
  // https://github.com/SerenityOS/serenity/blob/b98f537f117b341788023ab82e0c11ca9ae29a57/Kernel/API/POSIX/sys/types.h#L43
156
- .netbsd, .freebsd, .serenity => u64,
156
+ .linux, .netbsd, .freebsd, .serenity => u64,
157
157
  else => void,
158
158
  };
159
159
 
@@ -10552,6 +10552,7 @@ const sigrt_private = struct {
10552
10552
  .freebsd => 65,
10553
10553
  .netbsd => 33,
10554
10554
  .illumos => @truncate(sysconf(@intFromEnum(_SC.SIGRT_MIN))),
10555
+ .haiku => @truncate(@as(c_uint, @bitCast(private.__signal_get_sigrtmin()))),
10555
10556
  else => @truncate(@as(c_uint, @bitCast(private.__libc_current_sigrtmin()))),
10556
10557
  };
10557
10558
  }
@@ -10561,6 +10562,7 @@ const sigrt_private = struct {
10561
10562
  .freebsd => 126,
10562
10563
  .netbsd => 63,
10563
10564
  .illumos => @truncate(sysconf(@intFromEnum(_SC.SIGRT_MAX))),
10565
+ .haiku => @truncate(@as(c_uint, @bitCast(private.__signal_get_sigrtmax()))),
10564
10566
  else => @truncate(@as(c_uint, @bitCast(private.__libc_current_sigrtmax()))),
10565
10567
  };
10566
10568
  }
@@ -11132,14 +11134,23 @@ pub const ioctl = switch (native_os) {
11132
11134
 
11133
11135
  pub extern "c" fn bzero(s: *anyopaque, n: usize) void;
11134
11136
 
11135
- pub extern "c" fn swab(noalias from: *const anyopaque, noalias to: *anyopaque, n: isize) void;
11137
+ pub const swab = switch (builtin.abi) {
11138
+ .msvc => private._swab,
11139
+ else => private.swab,
11140
+ };
11136
11141
 
11137
11142
  pub extern "c" fn strncmp(a: [*:0]const c_char, b: [*:0]const c_char, max: usize) c_int;
11138
11143
  pub extern "c" fn strcasecmp(a: [*:0]const c_char, b: [*:0]const c_char) c_int;
11139
11144
  pub extern "c" fn strncasecmp(a: [*:0]const c_char, b: [*:0]const c_char, max: usize) c_int;
11140
- pub extern "c" fn strdup(s: [*:0]const c_char) ?[*:0]c_char;
11145
+ pub const strdup = switch (builtin.abi) {
11146
+ .msvc => private._strdup,
11147
+ else => private.strdup,
11148
+ };
11141
11149
  pub extern "c" fn strndup(s: [*:0]const c_char, n: usize) ?[*:0]c_char;
11142
- pub extern "c" fn wcsdup(s: [*:0]const wchar_t) ?[*:0]wchar_t;
11150
+ pub const wcsdup = switch (builtin.abi) {
11151
+ .msvc => private._wcsdup,
11152
+ else => private.wcsdup,
11153
+ };
11143
11154
 
11144
11155
  pub extern "c" fn ffs(i: c_int) c_int;
11145
11156
  pub extern "c" fn ffsl(i: c_long) c_long;
@@ -11553,6 +11564,14 @@ pub const setkeymap = serenity.setkeymap;
11553
11564
 
11554
11565
  /// External definitions shared by two or more operating systems.
11555
11566
  const private = struct {
11567
+ pub extern "c" fn strdup(s: [*:0]const c_char) ?[*:0]c_char;
11568
+ pub extern "c" fn _strdup(s: [*:0]const c_char) ?[*:0]c_char;
11569
+ pub extern "c" fn wcsdup(s: [*:0]const wchar_t) ?[*:0]wchar_t;
11570
+ pub extern "c" fn _wcsdup(s: [*:0]const wchar_t) ?[*:0]wchar_t;
11571
+
11572
+ pub extern "c" fn swab(noalias from: *const anyopaque, noalias to: *anyopaque, n: isize) void;
11573
+ pub extern "c" fn _swab(noalias from: *const anyopaque, noalias to: *anyopaque, n: isize) void;
11574
+
11556
11575
  extern "c" fn close(fd: fd_t) c_int;
11557
11576
  extern "c" fn clock_getres(clk_id: clockid_t, tp: *timespec) c_int;
11558
11577
  extern "c" fn clock_gettime(clk_id: clockid_t, tp: *timespec) c_int;
@@ -11649,6 +11668,8 @@ const private = struct {
11649
11668
 
11650
11669
  extern "c" fn __libc_current_sigrtmin() c_int;
11651
11670
  extern "c" fn __libc_current_sigrtmax() c_int;
11671
+ extern "c" fn __signal_get_sigrtmin() c_int;
11672
+ extern "c" fn __signal_get_sigrtmax() c_int;
11652
11673
 
11653
11674
  // Don't forget to add another clown when an OS picks yet another unique
11654
11675
  // symbol name for errno location!
@@ -1743,8 +1743,10 @@ pub const Raw = struct {
1743
1743
  try Raw.rebaseInner(w, 0, w.buffer.len, false);
1744
1744
  }
1745
1745
 
1746
- fn finish(r: *Raw) Writer.Error!void {
1746
+ pub fn finish(r: *Raw) Writer.Error!void {
1747
+ defer r.writer = .failing;
1747
1748
  try Raw.rebaseInner(&r.writer, 0, r.writer.buffer.len, true);
1749
+ // The footer is written in `rebaseInner` as part of the write vector
1748
1750
  }
1749
1751
 
1750
1752
  fn rebase(w: *Writer, preserve: usize, capacity: usize) Writer.Error!void {
@@ -2334,7 +2336,7 @@ pub const Huffman = struct {
2334
2336
  try h.bit_writer.byteAlignBlocks();
2335
2337
  }
2336
2338
 
2337
- fn finish(h: *Huffman) Writer.Error!void {
2339
+ pub fn finish(h: *Huffman) Writer.Error!void {
2338
2340
  defer h.writer = .failing;
2339
2341
  try Huffman.rebaseInner(&h.writer, 0, h.writer.buffer.len, true);
2340
2342
  try h.bit_writer.output.rebase(0, 1);
package/std/crypto/ff.zig CHANGED
@@ -702,7 +702,9 @@ pub fn Modulus(comptime max_bits: comptime_int) type {
702
702
  var out = self.one();
703
703
  self.toMontgomery(&out) catch unreachable;
704
704
 
705
- if (public and e.len < 3 or (e.len == 3 and e[if (endian == .big) 0 else 2] <= 0b1111)) {
705
+ if (public and
706
+ (e.len < 3 or (e.len == 3 and e[if (endian == .big) 0 else 2] <= 0b1111)))
707
+ {
706
708
  // Do not use a precomputation table for short, public exponents
707
709
  var x_m = x;
708
710
  if (!x.montgomery) {