atomic-maybe-uninit 0.3.21

Atomic operations on potentially uninitialized integers.
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
# Changelog

All notable changes to this project will be documented in this file.

This project adheres to [Semantic Versioning](https://semver.org).

Releases may yanked if there is a security bug, a soundness bug, or a regression.

<!--
Note: In this file, do not use the hard wrap in the middle of a sentence for compatibility with GitHub comment style markdown rendering.
-->

## [Unreleased]

## [0.3.21] - 2026-07-19

- Add `try_update` and `update`. (align to the [std atomic change in Rust 1.95]https://github.com/rust-lang/rust/pull/148590) ([0e28b20]https://github.com/taiki-e/atomic-maybe-uninit/commit/0e28b20e3208c2ca68f3fed3beac890a29f4ab27)

- Deprecate `fetch_update`. (align to the [std atomic change in Rust 1.99]https://github.com/rust-lang/rust/pull/148590) ([0e28b20]https://github.com/taiki-e/atomic-maybe-uninit/commit/0e28b20e3208c2ca68f3fed3beac890a29f4ab27)

- Make `from_ptr` always `const fn`. Previously it was `const fn` only on Rust 1.83+. ([ec36e13]https://github.com/taiki-e/atomic-maybe-uninit/commit/ec36e1386e83d62b0e7ac7db2ddea6785a5db84f)

- Fix an issue where a workaround for an old LLVM bug were not applied to `raw` APIs. ([d635243]https://github.com/taiki-e/atomic-maybe-uninit/commit/d6352437fbd647637e1187716e7764cf677e313d)

- Improve support for custom target with non-standard name on old rustc. ([94743d8]https://github.com/taiki-e/atomic-maybe-uninit/commit/94743d818db9aa675c9e79acc5ee142aca66e836)

- Optimize 128-bit CAS/swap on s390x. ([e10c779]https://github.com/taiki-e/atomic-maybe-uninit/commit/e10c77957f146806218d6031cdf791e1a9d5b749)

- Documentation improvements.

## [0.3.20] - 2026-07-16

- Support 128-bit atomics on LoongArch64 when scq is enabled. ([30bddc8]https://github.com/taiki-e/atomic-maybe-uninit/commit/30bddc855b0093716b85db21f63a2475a2ef02d4)

- Fix an issue where a workaround for an old LLVM bug were not applied when the build system did not run the build script or when version detection failed. ([64d6bc7]https://github.com/taiki-e/atomic-maybe-uninit/commit/64d6bc7e1392cf46dc8a41c4ed474e494b718b3c)

- Fix panic in build script when custom target with non-standard name on old rustc. ([54c8235]https://github.com/taiki-e/atomic-maybe-uninit/commit/54c8235bbb8df5f2224d113e99cb93ff3e69f816)

- Fix 64-bit atomic support on non-Linux/NetBSD MC68060. ([e884a4c]https://github.com/taiki-e/atomic-maybe-uninit/commit/e884a4c918f21790ce093fb0860ce6ed8e290478)

- Optimize {8,16,32}-bit CAS on pre-v6 Arm Linux/Android. ([b862449]https://github.com/taiki-e/atomic-maybe-uninit/commit/b8624498b0000ef1dfab35a645ec21fd69d6d026)

- Optimize relaxed swap on LoongArch64. ([19813c7]https://github.com/taiki-e/atomic-maybe-uninit/commit/19813c7e60c1e1173acc4df3d61139a1d1e550ef)

- Optimize CAS on LoongArch64 when lamcas is enabled. ([4af30f2]https://github.com/taiki-e/atomic-maybe-uninit/commit/4af30f2da66fdb9885389889940324e2eb786b81)

- Optimize {8,16}-bit swap on LoongArch64 when lam-bh is enabled. ([8775efb]https://github.com/taiki-e/atomic-maybe-uninit/commit/8775efba23d05c0de5239ad8c867665ff06cae6a)

- Improve compile-time detection of armv8m target features. ([ead614e]https://github.com/taiki-e/atomic-maybe-uninit/commit/ead614e5709ebebd251a1192327cd51c3fadb854)

- Documentation improvements.

## [0.3.19] - 2026-07-06

- Fix default cpu handling of sparc-unknown-none-elf. ([9922b04]https://github.com/taiki-e/atomic-maybe-uninit/commit/9922b04e89738c672843f9b706d2dc3464a6b654)

- Improve handling of armv8m targets on nightly. ([d631861]https://github.com/taiki-e/atomic-maybe-uninit/commit/d631861dcb34269df12d159c40fb5877a7c30ae2)

- Optimize swap/CAS on SPARC-V8+ and SPARC64. ([575c7a1]https://github.com/taiki-e/atomic-maybe-uninit/commit/575c7a1f13bd610051038d4aa7fff17cb26a35b2)

- Optimize run-time CPU feature detection. ([f039131]https://github.com/taiki-e/atomic-maybe-uninit/commit/f039131f681054d1dd4e6d7fb802d20c1de018ca)

- Documentation improvements.

## [0.3.18] - 2026-04-13

- Remove reliance on unguaranteed behavior of the compiler in CAS on riscv64, MIPS64, and LoongArch64. ([ad48602]https://github.com/taiki-e/atomic-maybe-uninit/commit/ad48602ec2f57132baed41d6d86b5b912bd2e59a)

- Implement workaround for SPARC errata GRLIB-TN-0010 & GRLIB-TN-0011 in 32-bit swap. Previously it was implemented only for other operations. ([b97bc5d]https://github.com/taiki-e/atomic-maybe-uninit/commit/b97bc5d8c926ed5be5882f1bd9da3916b905a911)

- Optimize swap/CAS on Hexagon. ([996e7ee]https://github.com/taiki-e/atomic-maybe-uninit/commit/996e7ee6275b8c04eb121918fd76678275932498)

- Optimize 128-bit swap on s390x. ([78e6f18]https://github.com/taiki-e/atomic-maybe-uninit/commit/78e6f18c483d61f87a0223f5722e33ef048b92c8)

## [0.3.17] - 2026-03-11

- Improve support for thumbv8m.main. ([b083741]https://github.com/taiki-e/atomic-maybe-uninit/commit/b083741c25bcee1194c7d095cad5c074ab0b49b5)

- Optimize 16-bit swap on AVR. ([23634cd]https://github.com/taiki-e/atomic-maybe-uninit/commit/23634cd6c8d569cedae0c41ccc73cda158ef58a4)

- Optimize 64-bit store when not inlined on pre-v6 Arm Linux/Android and M68k. ([94c325c]https://github.com/taiki-e/atomic-maybe-uninit/commit/94c325c3023e27babab48f01a29530c85d750a78)

## [0.3.16] - 2026-03-09

- Support 64-bit atomics on SPARC-V8+ (e.g., sparc-unknown-linux-gnu). ([#57]https://github.com/taiki-e/atomic-maybe-uninit/pull/57)

- Support pre-v6 Arm Linux/Android in Thumb mode. ([b1bbcac]https://github.com/taiki-e/atomic-maybe-uninit/commit/b1bbcac11e7c8693cdad66d8308616e2ebcaaafc)

- Support load/store on all SPARC-V8 CPUs. Previously `v9` or `leoncasa` target feature was required. ([e9db1ac]https://github.com/taiki-e/atomic-maybe-uninit/commit/e9db1ac356571ff0404f04e6defdefea33350aec)

- Support 32-bit swap on all SPARC-V8 CPUs. Previously `v9` or `leoncasa` target feature was required. ([4871adb]https://github.com/taiki-e/atomic-maybe-uninit/commit/4871adb0c4fc1999161455286a5c2915936981e3)

- Support MIPS R5900. ([1c406f4]https://github.com/taiki-e/atomic-maybe-uninit/commit/1c406f4b3a117d3debeb18ef2c533ba46cc6592d)

- Implement workaround for Arm Cortex-A15 erratum 830321. ([11c6161]https://github.com/taiki-e/atomic-maybe-uninit/commit/11c6161b49af2673f912acfa6dcc3715763df83d)

- Implement workaround for SPARC errata GRLIB-TN-0009 & GRLIB-TN-0010. Previously it was partially implemented. ([291228f]https://github.com/taiki-e/atomic-maybe-uninit/commit/291228fa19d8dee92b53a07949009086714362c6)

- Partially implement workaround for SPARC errata GRLIB-TN-0004. There is no known workaround for the remaining part. ([291228f]https://github.com/taiki-e/atomic-maybe-uninit/commit/291228fa19d8dee92b53a07949009086714362c6)

- Various optimizations:
  - Support run-time detection of AVX (optimized 128-bit load/store) on x86_64. ([0f5e4f8]https://github.com/taiki-e/atomic-maybe-uninit/commit/0f5e4f8676f8551f154bbf4f9a488eeed8494a10)
  - Optimize SeqCst atomics on AArch64 Windows MSVC. ([f8b02bb]https://github.com/taiki-e/atomic-maybe-uninit/commit/f8b02bb5225cac1bdc33d94a437c1f7b2cea504a)
  - Optimize CAS on Armv6+. ([11c6161]https://github.com/taiki-e/atomic-maybe-uninit/commit/11c6161b49af2673f912acfa6dcc3715763df83d)
  - Optimize {32,64}-bit CAS on RISC-V. ([317f8cf]https://github.com/taiki-e/atomic-maybe-uninit/commit/317f8cfbef2f1caa2054a2c3ab2270f03f45da38)
  - Optimize Acquire load and Release store on RISC-V when Zalasr extension is available. ([1a90421]https://github.com/taiki-e/atomic-maybe-uninit/commit/1a90421b2b9ca056ea96aaf96eec9e3aa216487c)
  - Optimize swap/CAS on PowerPC/PowerPC64. ([3e5e173]https://github.com/taiki-e/atomic-maybe-uninit/commit/3e5e1736de10aa93a136005b7cd87a38d4f154cf)
  - Optimize swap/CAS on MIPS/MIPS64. ([1c406f4]https://github.com/taiki-e/atomic-maybe-uninit/commit/1c406f4b3a117d3debeb18ef2c533ba46cc6592d)
  - Optimize non-relaxed atomics on SPARC/SPARC64. ([291228f]https://github.com/taiki-e/atomic-maybe-uninit/commit/291228fa19d8dee92b53a07949009086714362c6)
  - Optimize swap/CAS on Hexagon. ([0016af6]https://github.com/taiki-e/atomic-maybe-uninit/commit/0016af62e398a3c240444922327c6ccbc8593726)
  - Optimize 16-bit atomics on AVR. ([5c85b66]https://github.com/taiki-e/atomic-maybe-uninit/commit/5c85b6605b8281fc0b7e292d4437e8ca064a0c22, [317f8cf]https://github.com/taiki-e/atomic-maybe-uninit/commit/317f8cfbef2f1caa2054a2c3ab2270f03f45da38)
  - Optimize {8,16}-bit swap/CAS when return value is not used on pre-v7 Arm Linux/Android, C-SKY, Hexagon, LoongArch, MIPS, PowerPC, RISC-V, SPARC, and Xtensa. ([9346849]https://github.com/taiki-e/atomic-maybe-uninit/commit/9346849ba24b68a7b706fb0c436ba83af14c9a0f, [b1bbcac]https://github.com/taiki-e/atomic-maybe-uninit/commit/b1bbcac11e7c8693cdad66d8308616e2ebcaaafc)
  - Optimize load/store/CAS when not inlined. ([a9db0ec]https://github.com/taiki-e/atomic-maybe-uninit/commit/a9db0ece9e3d7618871aa6f28f36802f2739449a, [e0818e1]https://github.com/taiki-e/atomic-maybe-uninit/commit/e0818e1b6a0c894ef66c1a0e0fbbc67c9ab0b49b)

- Improve compile-time detection of AVR target features. ([e3832c3]https://github.com/taiki-e/atomic-maybe-uninit/commit/e3832c32c5ebfbd44b96ceabde408445744fe365)

## [0.3.15] - 2026-01-28

- Update to stabilized [PowerPC]https://github.com/rust-lang/rust/pull/147996 inline assembly. ([c4cb5b1]https://github.com/taiki-e/atomic-maybe-uninit/commit/c4cb5b1f10857004852307c4a78ceec7ddeccd4f)

- Work around [rustc_codegen_gcc bugs on x86_64]https://github.com/rust-lang/rustc_codegen_gcc/issues/821#issuecomment-3793567607. ([97a9190]https://github.com/taiki-e/atomic-maybe-uninit/commit/97a9190a2d877371bfb4c8f1b3f8624d030eaf12)

- Optimize x86_64 128-bit atomics. ([d20f462]https://github.com/taiki-e/atomic-maybe-uninit/commit/d20f46213995b153dc2b71be52829ab893bc793a, [ca271a3]https://github.com/taiki-e/atomic-maybe-uninit/commit/ca271a38250f4f1ca7546ba1be758cb77866cb3f)

- Optimize swap and {8,16}-bit CAS on SPARC/SPARC64. ([fc697c3]https://github.com/taiki-e/atomic-maybe-uninit/commit/fc697c3f29c0d288740d54c24a9bd7ab25490bf2)

- Improve compile-time detection of RISC-V target features. ([de420f6]https://github.com/taiki-e/atomic-maybe-uninit/commit/de420f6a374a5916c22898d8ca7c005f8766bcab)

- Enable [release immutability]https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/immutable-releases.

## [0.3.14] - 2025-12-28

- Support thumbv6k. ([c5e93f5]https://github.com/taiki-e/atomic-maybe-uninit/commit/c5e93f58e511bc34cdcd398470a14d7afc4712f6)

- Optimize CAS on Armv6 and Armv7. ([f98d8ab]https://github.com/taiki-e/atomic-maybe-uninit/commit/f98d8ab43c83e49bc3e030d8c3cb8ea1c5f96cab)

## [0.3.13] - 2025-11-30

- Optimize 128-bit load/store when AVX is enabled. ([908f454]https://github.com/taiki-e/atomic-maybe-uninit/commit/908f4542cd8a991a666502ad17f46610f1659039)

## [0.3.12] - 2025-10-14

- Support C-SKY (experimental). ([#32]https://github.com/taiki-e/atomic-maybe-uninit/pull/32)

- Support 64-bit atomics on M68k. ([#50]https://github.com/taiki-e/atomic-maybe-uninit/pull/50)

- Fix compile error on LoongArch32. ([658e1fc]https://github.com/taiki-e/atomic-maybe-uninit/commit/658e1fc68397ccd4ddc0092b4f667a30fa870a60)

- Optimize CAS on Hexagon and MIPS. ([4b0c7b2]https://github.com/taiki-e/atomic-maybe-uninit/commit/4b0c7b20f9571b652628502f2935139c498aabd1)

- Optimize {8,16}-bit CAS on RISC-V and Xtensa. ([4b0c7b2]https://github.com/taiki-e/atomic-maybe-uninit/commit/4b0c7b20f9571b652628502f2935139c498aabd1)

- Optimize CAS on x86/x86_64. ([3ad33c8]https://github.com/taiki-e/atomic-maybe-uninit/commit/3ad33c896119a5522838ec20a146b58fa295f7d1)

## [0.3.11] - 2025-09-25

- Fix bug in CAS on M68k. ([3b022e7]https://github.com/taiki-e/atomic-maybe-uninit/commit/3b022e7dd3d82feff1bfd18002539f7f774d0673)

- Optimize 64-bit load/store on x86_32. ([3b45646]https://github.com/taiki-e/atomic-maybe-uninit/commit/3b4564625830e8685a94818cba6e4698cd0f2113)

- Optimize 8-bit swap/CAS on AVR. ([cbab034]https://github.com/taiki-e/atomic-maybe-uninit/commit/cbab034f49fcd8cd508832ee45f4abb2661bfdd5)

## [0.3.10] - 2025-09-12

- Increase the minimum supported Rust version (MSRV) from Rust 1.59 to Rust 1.74. ([#48]https://github.com/taiki-e/atomic-maybe-uninit/pull/48)
  This removes legacy [inefficient]https://github.com/crossbeam-rs/crossbeam/pull/1015#issuecomment-1676549870 implementation for pre-1.74 Rust which doesn't support `MaybeUninit` registers in `asm!`. ([#48]https://github.com/taiki-e/atomic-maybe-uninit/pull/48)

- Deprecate `AtomicMaybeUninit::const_new` because `AtomicMaybeUninit::new` is now always `const fn` because of the MSRV bump. ([#48]https://github.com/taiki-e/atomic-maybe-uninit/pull/48, [d428f97]https://github.com/taiki-e/atomic-maybe-uninit/commit/d428f975f88f4bfeffd2e31656bc18200722deff)

- Fix bug in 64-bit atomics on pre-v6 Arm Linux/Android. ([075494c]https://github.com/taiki-e/atomic-maybe-uninit/commit/075494c1d7c6ab6db6c12c2adc149a1e16b9c5ae)

  (Note that the `cfg_{has,no}_atomic_64!` for affected targets treats this target as one that does not support 64-bit atomics in this and all previous versions.)

- Optimize AArch64 128-bit CAS when FEAT_LSE is not enabled. ([0015d1a]https://github.com/taiki-e/atomic-maybe-uninit/commit/0015d1ae76c8d79285d482c999f250386c5fb142)

## [0.3.9] - 2025-09-05

- Update to stabilized [LoongArch32]https://github.com/rust-lang/rust/pull/144402 inline assembly. ([803b062]https://github.com/taiki-e/atomic-maybe-uninit/commit/803b06263c8a3e38596eb48aec88d2dce77d60e6)

## [0.3.8] - 2025-07-06

- Support LoongArch32 (experimental). ([a4a93e7]https://github.com/taiki-e/atomic-maybe-uninit/commit/a4a93e7fd76b6f3827f41f0a1cbee9c2bcf673d8)

## [0.3.7] - 2025-03-04

- Improve RISC-V support
  - Support 64-bit atomics on riscv32 when Zacas extension is available. ([f32463f]https://github.com/taiki-e/atomic-maybe-uninit/commit/f32463f92c35c9ee902e07c08e3952698db5b2a8)
  - Support 128-bit atomics on riscv64 when Zacas extension is available. ([f32463f]https://github.com/taiki-e/atomic-maybe-uninit/commit/f32463f92c35c9ee902e07c08e3952698db5b2a8)
  - Provide all operations when Zalrsc or Zacas extension is available even if A extension is not available. ([2668665]https://github.com/taiki-e/atomic-maybe-uninit/commit/26686651192aea4d7380b162c4b60c1772f70903, [7069c98]https://github.com/taiki-e/atomic-maybe-uninit/commit/7069c98f15a393b5dfdbcae2cffe6f2a20157197)
  - Optimize atomic CAS when Zacas extension is available. ([0d7dc48]https://github.com/taiki-e/atomic-maybe-uninit/commit/0d7dc48172b3cab61b9a4a9b3a957b9a40bf20c3, [ed74261]https://github.com/taiki-e/atomic-maybe-uninit/commit/ed7426182f2f4bc04166a918c44cc20b599d34e6)

- Support PowerPC CPUs without `lwsync` instruction such as e500. ([91812c2]https://github.com/taiki-e/atomic-maybe-uninit/commit/91812c2ebabd24de38294627fff3eeec0f04d46d, [79f7479]https://github.com/taiki-e/atomic-maybe-uninit/commit/79f7479e60adca8da1f2c10d2c4598553475a8e1)

- Improve support for very legacy CPUs on x86 and MIPS. ([02627e2]https://github.com/taiki-e/atomic-maybe-uninit/commit/02627e29c6997bbfecd52876dec5aec32b74d6b0, [2877324]https://github.com/taiki-e/atomic-maybe-uninit/commit/2877324dd82c67b14dee34b83fc5b81c630dee65, [292f6b3]https://github.com/taiki-e/atomic-maybe-uninit/commit/292f6b314eb335c4ba4a9b25de61c091ca6663aa)

- Optimize Arm/AArch64 atomic store/RMWs. ([fdea51f]https://github.com/taiki-e/atomic-maybe-uninit/commit/fdea51fd020eb5769b58e8a0e189bd92559e3f7e)

- Optimize MSP430 atomic RMWs. ([e76c112]https://github.com/taiki-e/atomic-maybe-uninit/commit/e76c11237f9a708e9952e03f40653c2cf142c30e)

## [0.3.6] - 2025-01-05

- Optimize Hexagon atomic RMWs. ([cd12f7b]https://github.com/taiki-e/atomic-maybe-uninit/commit/cd12f7b60fb41796528fe351e6d5b8ad1bb3dedf)

- Improve compile-time detection of x86_32 x87. ([7c40f86]https://github.com/taiki-e/atomic-maybe-uninit/commit/7c40f86e2eba61bdf4268129c39d1721f2efe1f1)

- Improve compile-time detection of m68k isa-68020. ([0aec2a6]https://github.com/taiki-e/atomic-maybe-uninit/commit/0aec2a6703d4bc92bbd5e9619d370754d0299754)

- Improve diagnostics when method is unavailable. ([b9f7f2d]https://github.com/taiki-e/atomic-maybe-uninit/commit/b9f7f2da3af19cee947ac2685833de6d9a924959)

## [0.3.5] - 2024-11-23

- Documentation improvements.

## [0.3.4] - 2024-11-19

This release includes improvements to platform support, various optimizations, [significant improvements to code comments](https://github.com/taiki-e/atomic-maybe-uninit/pull/30), etc.

- Improvements to platform support:
  - Support SPARC/SPARC64 (experimental). ([#31]https://github.com/taiki-e/atomic-maybe-uninit/pull/31)
  - Support M68k (experimental). ([#27]https://github.com/taiki-e/atomic-maybe-uninit/pull/27, [#28]https://github.com/taiki-e/atomic-maybe-uninit/pull/28)
  - Support Xtensa (experimental). ([#26]https://github.com/taiki-e/atomic-maybe-uninit/pull/26, [#29]https://github.com/taiki-e/atomic-maybe-uninit/pull/29)
  - Support swap/CAS on MSP430 (experimental). ([4fb09a7]https://github.com/taiki-e/atomic-maybe-uninit/commit/4fb09a724485073ebdcb27ecd2d89a2e30997f7f)

- Update to stabilized [s390x]https://github.com/rust-lang/rust/pull/131258 and [Arm64EC]https://github.com/rust-lang/rust/pull/131781 inline assembly. ([c9d7286]https://github.com/taiki-e/atomic-maybe-uninit/commit/c9d72863c9701ed6b91088631fd6c83c3635d8dd, [3a85789]https://github.com/taiki-e/atomic-maybe-uninit/commit/3a85789eda2cf3c1432335b91d2e73d2d763721f)

- Make `from_ptr` `const fn` on Rust 1.83+. (align to the [std atomic change in Rust 1.84]https://github.com/rust-lang/rust/pull/131717) ([c8ef5c4]https://github.com/taiki-e/atomic-maybe-uninit/commit/c8ef5c4eefb45d372c8b95ab196d5b1ed195f810)

- Various optimizations:
  - AArch64: Optimize 128-bit SeqCst load when FEAT_LRCPC3 enabled and 128-bit SeqCst store when FEAT_LRCPC3 enabled and FEAT_LSE128 is disabled. ([#30]https://github.com/taiki-e/atomic-maybe-uninit/pull/30)
  - pre-v6 Arm Linux/Android: Optimize {8,16,32}-bit swap/CAS and all 64-bit atomics. ([#30]https://github.com/taiki-e/atomic-maybe-uninit/pull/30)
  - PowerPC: Optimize {8,16}-bit swap/CAS ([#30]https://github.com/taiki-e/atomic-maybe-uninit/pull/30), all Acquire/AcqRel/SeqCst swap/CAS, all CAS with Relaxed failure ordering, and {8,16}-bit weak CAS ([18aadd2]https://github.com/taiki-e/atomic-maybe-uninit/commit/18aadd249062b0874f3017623e0be73f8df529de).
  - s390x: Optimize {8,16,128}-bit swap. ([#30]https://github.com/taiki-e/atomic-maybe-uninit/pull/30)
  - RISC-V, MIPS, LoongArch64, Hexagon: Optimize {8,16}-bit swap/CAS. ([#30]https://github.com/taiki-e/atomic-maybe-uninit/pull/30)
  - AVR: Optimize 8-bit load/store. ([18aadd2]https://github.com/taiki-e/atomic-maybe-uninit/commit/18aadd249062b0874f3017623e0be73f8df529de)

- Respect [`RUSTC_BOOTSTRAP=-1` recently added in nightly]https://github.com/rust-lang/rust/pull/132993 in rustc version detection. ([07f64d5]https://github.com/taiki-e/atomic-maybe-uninit/commit/07f64d56bfa0e1cee64531f111e5d5cb827fbd21)

## [0.3.3] - 2024-10-14

- Make `get_mut` `const fn` on Rust 1.83+. ([484a32f]https://github.com/taiki-e/atomic-maybe-uninit/commit/484a32f8cc2a45315b6868e6984036814f9850b5)

- Work around [LLVM pre-20 bug]https://github.com/rust-lang/rust/issues/129585. ([#25]https://github.com/taiki-e/atomic-maybe-uninit/issues/25)

- Support atomic swap on RISC-V without A-extension when Zaamo extension enabled. ([34d37b9]https://github.com/taiki-e/atomic-maybe-uninit/commit/34d37b936f242457da3c2bb3c6c6f8861082f6eb)

- Optimize RISC-V {8,16}-bit atomic swap when Zabha is enabled. ([34d37b9]https://github.com/taiki-e/atomic-maybe-uninit/commit/34d37b936f242457da3c2bb3c6c6f8861082f6eb)

- Strengthen RISC-V SeqCst store to improve compatibility with code that uses atomic instruction mapping that differs from LLVM and GCC. ([836d3fe]https://github.com/taiki-e/atomic-maybe-uninit/commit/836d3fe2a364da6e2137f991a2fb6153225ecd36)

- Optimize x86_32 64-bit load/store when SSE is not available. ([c6f914b]https://github.com/taiki-e/atomic-maybe-uninit/commit/c6f914b105bfb9d5b35c5c90e0c26c4a704a1f15)

- Improve compile-time detection of AArch64 FEAT_LSE2/FEAT_LRCPC3/FEAT_LSE128. ([959477b]https://github.com/taiki-e/atomic-maybe-uninit/commit/959477b043bc44917e8c2197c4c60bb3adbac4dd)

- Improve compile-time detection of powerpc64 partword-atomics/quadword-atomics. ([e1a1596]https://github.com/taiki-e/atomic-maybe-uninit/commit/e1a1596ff1359e2888a04db32e6af8f8b4d5ef8e)

## [0.3.2] - 2024-07-10

**Note:** This release has been yanked due to pre-20 LLVM's bug (we implemented a workaround in 0.3.3).

- Support Arm64EC (experimental). ([4d94b3c]https://github.com/taiki-e/atomic-maybe-uninit/commit/4d94b3c0fe4c51f061abb33196821c0e32fa3f21)

- Support swap/CAS on AVR (experimental). ([71b9a5f]https://github.com/taiki-e/atomic-maybe-uninit/commit/71b9a5fa905f59c0c285c78157ed2165bf974fa5)

- Make `into_inner` `const fn` on Rust 1.61+. (align to the [std atomic change in Rust 1.79]https://github.com/rust-lang/rust/pull/123522) ([9c253dc]https://github.com/taiki-e/atomic-maybe-uninit/commit/9c253dcc6590f27f7d896400d07ac862fae5e712)

- Improve LoongArch64 support. ([358360c]https://github.com/taiki-e/atomic-maybe-uninit/commit/358360c2d6b89cdd3315eae6ec6a3b0c6d3abff4)

- Make rustc version detection robust for custom toolchains. ([c034611]https://github.com/taiki-e/atomic-maybe-uninit/commit/c0346119bf7e9e07cf9887c1acf10413c529f266)

- Respect `RUSTC_WRAPPER` in rustc version detection.

- Our build script is now less likely to be [re-run unnecessarily]https://github.com/taiki-e/portable-atomic/issues/151 in versions where the cargo bug fix is available (cargo 1.79+). ([91ec716]https://github.com/taiki-e/atomic-maybe-uninit/commit/91ec716ee76d68c08c217f06be3865a99588afb6)

- Various optimizations
  - Optimize x86_32 64-bit load/store when SSE is not available. ([75ca334]https://github.com/taiki-e/atomic-maybe-uninit/commit/75ca334dac1d0974a2e61dbb4c3d89cb0cf6cf22)
  - Optimize PowerPC32 Acquire/SeqCst load. ([f5ce83b]https://github.com/taiki-e/atomic-maybe-uninit/commit/f5ce83be02e1f123a8e549200786d0efb299d29d)
  - Optimize x86 inline assembly. ([adaf3a9]https://github.com/taiki-e/atomic-maybe-uninit/commit/adaf3a99a74f63faea7bc7bf407925a0ec8b9c49, [3ba37e9]https://github.com/taiki-e/atomic-maybe-uninit/commit/3ba37e95b084f6a4dd9e08c7b4f08d23e1cf47f6, [fcc0bf8]https://github.com/taiki-e/atomic-maybe-uninit/commit/fcc0bf8c0ff677b608900c139a50d9b34da8d476)
  - Optimize s390x inline assembly. ([9ee7f57]https://github.com/taiki-e/atomic-maybe-uninit/commit/9ee7f57101e68aaadb5f2ef9be095517692e8e2a)

## [0.3.1] - 2023-10-14

**Note:** This release has been yanked due to pre-20 LLVM's bug (we implemented a workaround in 0.3.3).

- Add `as_ptr`. ([d9f0cf5]https://github.com/taiki-e/atomic-maybe-uninit/commit/d9f0cf581f3d39ddb2b2928809771dba7f6c582a)

- Add `from_ptr`. ([6338985]https://github.com/taiki-e/atomic-maybe-uninit/commit/63389851db9a2616f8a093ace2d0f32e4606142e)

- Optimize weak CAS on PowerPC. ([6f14f20]https://github.com/taiki-e/atomic-maybe-uninit/commit/6f14f20ebffd1c9f3f842997e67ff696d53a79fb)

- Optimize {8,16}-bit CAS on AArch64. ([29aae39]https://github.com/taiki-e/atomic-maybe-uninit/commit/29aae3976ae858bc39c03b229f747ac44fe26521)

## [0.3.0] - 2023-10-01

**Note:** This release has been yanked due to pre-20 LLVM's bug (we implemented a workaround in 0.3.3).

- Optimize inline assemblies using `MaybeUninit` input/output of inline assembly implemented by [rust-lang/rust#114790]https://github.com/rust-lang/rust/pull/114790, where it is available. This greatly improves performance and is almost equivalent to std atomic types. ([#19]https://github.com/taiki-e/atomic-maybe-uninit/pull/19)

## [0.2.22] - 2023-08-15

**Note:** This release has been yanked due to pre-20 LLVM's bug (we implemented a workaround in 0.3.3).

- Add `cfg_{has,no}_atomic_{8,16,32,64,128,ptr}` macros to enable code when the corresponding atomic implementation is available/unavailable. ([#9]https://github.com/taiki-e/atomic-maybe-uninit/pull/9)

- Add `cfg_{has,no}_atomic_cas` macros to enable code when atomic swap/CAS implementation is available/unavailable. ([#9]https://github.com/taiki-e/atomic-maybe-uninit/pull/9)

- Documentation improvements. ([#17]https://github.com/taiki-e/atomic-maybe-uninit/pull/17, [#18]https://github.com/taiki-e/atomic-maybe-uninit/pull/18, thanks @RalfJung)

## [0.2.21] - 2023-08-10

**Note:** This release has been yanked due to pre-20 LLVM's bug (we implemented a workaround in 0.3.3).

- Fix AVR 16-bit atomic load/store. ([b2fcc0d]https://github.com/taiki-e/atomic-maybe-uninit/commit/b2fcc0d8b523166a9d92b6e41f58d435785d0f90)

- Optimize AArch64 128-bit atomic store/swap when the `lse128` target feature is enabled at compile-time. ([9a114a7]https://github.com/taiki-e/atomic-maybe-uninit/commit/9a114a746a7f265e33b07d566f498586893c7266)

- Optimize AArch64 128-bit atomic load/store when the `rcpc3` target feature is enabled at compile-time. ([85d9ef3]https://github.com/taiki-e/atomic-maybe-uninit/commit/85d9ef3622345f9b85700ffa7181dde1731b1a5c)

## [0.2.20] - 2023-08-02

**Note:** This release has been yanked due to pre-20 LLVM's bug (we implemented a workaround in 0.3.3).

- Support pre-v6 Arm Linux/Android (e.g., armv5te-unknown-linux-gnueabi, arm-linux-androideabi, etc.). ([#10]https://github.com/taiki-e/atomic-maybe-uninit/pull/10)

- Support Hexagon (experimental). ([#15]https://github.com/taiki-e/atomic-maybe-uninit/pull/15)

- Support AVR atomic load/store (experimental). ([6491450]https://github.com/taiki-e/atomic-maybe-uninit/commit/649145078abd23d9e3495e81fb828e02aeff947d)

- Improve {8,16}-bit atomic implementations on RISC-V, PowerPC, MIPS, s390x, LoongArch64. ([d82c47f]https://github.com/taiki-e/atomic-maybe-uninit/commit/d82c47f2079cccfa5fb36514e13b34132b7afdfa)

## [0.2.19] - 2023-07-27

**Note:** This release has been yanked due to pre-20 LLVM's bug (we implemented a workaround in 0.3.3).

- Support LoongArch64. ([#14]https://github.com/taiki-e/atomic-maybe-uninit/pull/14)

- Fix build error on MIPS32r6 and MIPS64r6 (both tier 3) since [nightly-2023-07-19's target_arch change]https://github.com/rust-lang/rust/pull/112374.

- Fix build error on big endian Armv8 AArch32 (tier 3).

- Acknowledge all x86_64 Apple targets support 128-bit atomics.

  Our code already recognizes this via `cfg(target_feature)`, so this only affects users using pre-1.69 stable rustc.

  See also [rust-lang/rust#112150]https://github.com/rust-lang/rust/pull/112150.

- Optimize inline assemblies.

## [0.2.18] - 2023-05-31

**Note:** This release has been yanked due to pre-20 LLVM's bug (we implemented a workaround in 0.3.3).

- Fix build error on AArch64 ILP32 ABI targets (tier 3).

- Optimize inline assemblies on PowerPC and s390x.

## [0.2.17] - 2023-05-09

**Note:** This release has been yanked due to pre-20 LLVM's bug (we implemented a workaround in 0.3.3).

- Fix bug in s390x atomic RMWs on old nightly.

- Optimize inline assemblies on RISC-V, PowerPC, s390x, and MSP430.

## [0.2.16] - 2023-04-30

**Note:** This release has been yanked due to a bug fixed in 0.2.17.

- Support 64-bit atomics on Armv7-R and Armv8-R.

- Fix bug in AArch64 16-bit compare_exchange_weak.

- Fix bug in AArch64 128-bit SeqCst load when FEAT_LSE2 is enabled at compile-time.

- Optimize AArch64 atomic load when the `rcpc` target feature is enabled at compile-time.

- Optimize PowerPC atomic RMWs.

## [0.2.15] - 2022-12-25

**Note:** This release has been yanked due to a bug fixed in 0.2.16.

- Improve support for Armv8 AArch32.

- Optimize inline assemblies on x86.

- Documentation improvements.

## [0.2.14] - 2022-09-04

**Note:** This release has been yanked due to a bug fixed in 0.2.16.

- Support pre-power8 powerpc64le. powerpc64le's default cpu version is power8, but you can technically compile it for the old cpu using the unsafe `-C target-cpu` rustc flag.

## [0.2.13] - 2022-08-17

**Note:** This release has been yanked due to a bug fixed in 0.2.16.

- Support MSP430 atomic load/store.

- Use track_caller when debug assertions are enabled.

## [0.2.12] - 2022-08-03

**Note:** This release has been yanked due to a bug fixed in 0.2.16.

- Optimize AArch64 128-bit atomic load when the `lse` target feature is enabled at compile-time.

## [0.2.11] - 2022-07-31

**Note:** This release has been yanked due to a bug fixed in 0.2.16.

- Optimize inline assemblies on x86, Arm, AArch64, and RISC-V.

## [0.2.10] - 2022-07-16

**Note:** This release has been yanked due to a bug fixed in 0.2.16.

- Support Armv6.

## [0.2.9] - 2022-06-30

**Note:** This release has been yanked due to a bug fixed in 0.2.16.

- Add `compare_exchange`, `compare_exchange_weak`, and `fetch_update`. ([#7]https://github.com/taiki-e/atomic-maybe-uninit/pull/7)

- Support x86_64 128-bit atomics when the `cmpxchg16b` target feature is enabled at compile-time.

- Support x86 64-bit atomics.

## [0.2.8] - 2022-06-21

**Note:** This release has been yanked due to a bug fixed in 0.2.16.

- Fix bug in powerpc64 128-bit atomics.

- Documentation improvements.

## [0.2.7] - 2022-06-19

**Note:** This release has been yanked due to a bug fixed in 0.2.8.

- Fix bug in powerpc64 SeqCst atomic load.

## [0.2.6] - 2022-06-16

**Note:** This release has been yanked due to a bug fixed in 0.2.7.

- Support PowerPC. ([#5]https://github.com/taiki-e/atomic-maybe-uninit/pull/5)

- Support s390x. ([#6]https://github.com/taiki-e/atomic-maybe-uninit/pull/6)

- Implement RISC-V 8-bit and 16-bit swap.

- Implement MIPS32r2 8-bit and 16-bit swap.

- Implement MIPS64r2 8-bit and 16-bit swap.

## [0.2.5] - 2022-05-30

**Note:** This release has been yanked due to a bug fixed in 0.2.16.

- Support Armv6-M. ([#4]https://github.com/taiki-e/atomic-maybe-uninit/pull/4)

- Optimize AArch64 128-bit atomic load/store when the `lse2` target feature is enabled at compile-time.

## [0.2.4] - 2022-03-20

**Note:** This release has been yanked due to pre-20 LLVM's bug (we implemented a workaround in 0.3.3).

- Implement MIPS32r2 32-bit swap.

- Implement MIPS64r2 32-bit and 64-bit swap.

## [0.2.3] - 2022-03-19

**Note:** This release has been yanked due to pre-20 LLVM's bug (we implemented a workaround in 0.3.3).

- Support MIPS32r2 and MIPS64r2.

- Add `#[must_use]` to constructors.

## [0.2.2] - 2022-03-16

**Note:** This release has been yanked due to pre-20 LLVM's bug (we implemented a workaround in 0.3.3).

- Support Armv7-A, Armv7-R, Armv7-M, and Armv8-M.

## [0.2.1] - 2022-03-14

**Note:** This release has been yanked due to pre-20 LLVM's bug (we implemented a workaround in 0.3.3).

- Optimize AArch64 atomic swap when the `lse` target feature is enabled at compile-time.

- Document safety requirements of functions in `raw` module.

## [0.2.0] - 2022-03-13

**Note:** This release has been yanked due to pre-20 LLVM's bug (we implemented a workaround in 0.3.3).

- Support AArch64.

- Support X32 ABI.

- Remove `raw` feature and always expose `raw` module.

## [0.1.0] - 2022-03-12

**Note:** This release has been yanked due to pre-20 LLVM's bug (we implemented a workaround in 0.3.3).

Initial release

[Unreleased]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.3.21...HEAD
[0.3.21]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.3.20...v0.3.21
[0.3.20]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.3.19...v0.3.20
[0.3.19]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.3.18...v0.3.19
[0.3.18]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.3.17...v0.3.18
[0.3.17]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.3.16...v0.3.17
[0.3.16]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.3.15...v0.3.16
[0.3.15]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.3.14...v0.3.15
[0.3.14]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.3.13...v0.3.14
[0.3.13]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.3.12...v0.3.13
[0.3.12]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.3.11...v0.3.12
[0.3.11]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.3.10...v0.3.11
[0.3.10]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.3.9...v0.3.10
[0.3.9]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.3.8...v0.3.9
[0.3.8]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.3.7...v0.3.8
[0.3.7]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.3.6...v0.3.7
[0.3.6]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.3.5...v0.3.6
[0.3.5]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.3.4...v0.3.5
[0.3.4]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.3.3...v0.3.4
[0.3.3]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.3.2...v0.3.3
[0.3.2]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.3.1...v0.3.2
[0.3.1]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.3.0...v0.3.1
[0.3.0]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.22...v0.3.0
[0.2.22]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.21...v0.2.22
[0.2.21]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.20...v0.2.21
[0.2.20]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.19...v0.2.20
[0.2.19]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.18...v0.2.19
[0.2.18]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.17...v0.2.18
[0.2.17]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.16...v0.2.17
[0.2.16]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.15...v0.2.16
[0.2.15]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.14...v0.2.15
[0.2.14]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.13...v0.2.14
[0.2.13]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.12...v0.2.13
[0.2.12]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.11...v0.2.12
[0.2.11]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.10...v0.2.11
[0.2.10]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.9...v0.2.10
[0.2.9]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.8...v0.2.9
[0.2.8]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.7...v0.2.8
[0.2.7]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.6...v0.2.7
[0.2.6]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.5...v0.2.6
[0.2.5]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.4...v0.2.5
[0.2.4]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.3...v0.2.4
[0.2.3]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.2...v0.2.3
[0.2.2]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.1...v0.2.2
[0.2.1]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.2.0...v0.2.1
[0.2.0]: https://github.com/taiki-e/atomic-maybe-uninit/compare/v0.1.0...v0.2.0
[0.1.0]: https://github.com/taiki-e/atomic-maybe-uninit/releases/tag/v0.1.0