> On Oct 11, 2019, at 4:47 PM, Garrett D'Amore <garr...@damore.org> wrote: > > >> On 10/11/2019 4:32:11 PM, Richard Elling <richard.ell...@richardelling.com> >> wrote: >> >> >> >>> On Oct 11, 2019, at 2:50 PM, Garrett D'Amore <garr...@damore.org >>> <mailto:garr...@damore.org>> wrote: >>> >>> The issue is that you can't just arbitrarily throw a mutex out there -- you >>> have to have a place to *store* that, and you can't fit it inside the >>> 64-bit value. With a 64-bit ISA this isn't usually a problem, but with >>> 32-bit ISAs it is. >> >> I'm not sure how this affects the compiler builtin atomics since they don't >> add mutexes. > Garrett D'Amore: > > You're missing the point. If you have a 32-bit ISA that doesn't offer a > 64-bit atomic operation, then you have to fabricate one. Fabricating one > requires a mutex, spinlock, or some other value.
Or a 64-bit memory barrier. No need for 64-bit ALU. -- richard > > What this means is that compiler builtins can't be used to solve the problem > of supporting a 64-bit atomic when the underlying platform lacks support. So > you have to solve it in software typically, which is what I think this whole > discussion is about. > > - Garrett > >> -- richard >> >>> >>> The only way to store the mutex (which could just be a spinlock) is to have >>> some other place that has it -- typically in library code. Allocation of >>> other objects like that normally falls outside the scope of a compiler >>> builtin (modulo bringing in a separate runtime object file, which can work >>> for user programs but generally not for kernels.) >>>> On 10/11/2019 11:38:57 AM, Richard Elling >>>> <richard.ell...@richardelling.com >>>> <mailto:richard.ell...@richardelling.com>> wrote: >>>> >>>> >>>> >>>>> On Oct 9, 2019, at 11:41 AM, Garrett D'Amore <garr...@damore.org >>>>> <mailto:garr...@damore.org>> wrote: >>>>> >>>>> I don't think 32-bit compilers generally offer builtins for 64-bit >>>>> atomics. Frankly, they can't really unless the underlying ISA provides >>>>> some additional support for this in particular. >>>> >>>> Yes, that is why the builtins exist... the underlying ISA may have a >>>> method that is not part of the C language. >>>> >>>> Worst case, mutex protection will work... slowly. >>>> -- richard >>>> >>>>> >>>>> To implement a 64-bit atomic on a 32-bit architecture, you generally >>>>> needs some additional state somewhere -- typically some sort of mutex or >>>>> spinlock. That has to live somewhere. (You *might* be able to have a >>>>> compiler builtin that provides this along with a compiler runtime which >>>>> provides an instance of the spinlock somewhere in the program's data >>>>> section. I think this sort of "builtin" (which isn't really builtin at >>>>> all) generally can't be used in operating system kernels -- e.g. with >>>>> --freestanding.) >>>>>> On 10/9/2019 11:26:40 AM, Richard Elling >>>>>> <richard.ell...@richardelling.com >>>>>> <mailto:richard.ell...@richardelling.com>> wrote: >>>>>> >>>>>> If it is possible to specify a compiler version, it might be easier to >>>>>> use the compiler >>>>>> builtin atomics. Just sayin' >>>>>> -- richard >>>>>> >>>>>> >>>>>> ------------------------------------------ >>>>>> openzfs: openzfs-developer >>>>>> Permalink: >>>>>> https://openzfs.topicbox.com/groups/developer/T3ee8a81d5f09f2ec-Mabd6346845b79e16d16f57c2 >>>>>> >>>>>> <https://openzfs.topicbox.com/groups/developer/T3ee8a81d5f09f2ec-Mabd6346845b79e16d16f57c2> >>>>>> Delivery options: >>>>>> https://openzfs.topicbox.com/groups/developer/subscription >>>>>> <https://openzfs.topicbox.com/groups/developer/subscription> > > openzfs <https://openzfs.topicbox.com/latest> / openzfs-developer / see > discussions <https://openzfs.topicbox.com/groups/developer> + participants > <https://openzfs.topicbox.com/groups/developer/members> + delivery options > <https://openzfs.topicbox.com/groups/developer/subscription>Permalink > <https://openzfs.topicbox.com/groups/developer/T3ee8a81d5f09f2ec-M620340096d08af342b9b67d2> ------------------------------------------ openzfs: openzfs-developer Permalink: https://openzfs.topicbox.com/groups/developer/T3ee8a81d5f09f2ec-M5de9d8b8d3f1acdecbed9ddc Delivery options: https://openzfs.topicbox.com/groups/developer/subscription