[Info-vax] Rust as a HS language, was: Re: Quiet?
Dan Cross
cross at spitfire.i.gajendra.net
Mon Apr 11 09:46:27 EDT 2022
In article <t2uc6n$hsu$1 at news.misty.com>,
Johnny Billquist <bqt at softjar.se> wrote:
>On 2022-04-09 21:35, Dan Cross wrote:
>> In article <t2pn8f$r5q$1 at news.misty.com>,
>> Johnny Billquist <bqt at softjar.se> wrote:
>>> volatile is simple enough. Every reference have to stay, and be kept in
>>> the same order, and order also kept in relation to other volatile
>>> variables, and the value cannot be "cached" or placed in a register, or
>>> whatever. Memory barriers all around.
>>
>> The last time this came up where I was involved, the murky stuff
>> revolved around precise semantics of generated loads and stores.
>> What you wrote above is true, but suppose I'm doing multiple
>> stores into aligned buffers; can the compiler lower into stores
>> into a larger datum, or must they be kept distinct? That is,
>> suppose I'm writing a bunch of uint16_t's from an aligned source
>> into an aligned destination; can the compiler turn that into
>> corresponding loads/stores of uint32_t? Can it write to the
>> same byte twice? And how do I work with volatile byte buffers
>> without memcpy?
>
>No. You cannot combine two stores into one. That could mean something
>different when dealing with hardware, and would break the semantics
>guaranteed by volatile..
The problem, sadly, is that those semantics _aren't_ guaranteed
for volatile.
>And no, one write can also not be changed into two writes. Same reason.
>
>The actual read/write itself might have meaning, so the compiler cannot
>do anything beyond exactly the operations on the variable specified in
>the code.
>
>This might be accessing hardware registers, where the read/write in
>itself triggers action. Combining two accesses into one might mean
>something else to the hardware. If the compiler were allowed to do that,
>you would not be able to interact with the hardware correctly.
>
>memcpy have a high risk of breaking this, since memcpy is a function
>that are unaware of the volatile property. Properties like volatile
>don't implicitly carry across function calls. Same with const.
>In C, such properties only exists on a variable when explicitly declared
>in the code.
>So don't use memcpy, or any other function that isn't explicitly aware
>of the volatile status of a variable.
I'm afraid this is off. :-( Please see my other response.
- Dan C.
More information about the Info-vax
mailing list