3 ms·
From the link, it seems like GCC 8 does not cache a read from a variable, and has more memory access to read it, while GCC 9 reads that variable from a register
by asveikau 7y ago
From the link, it seems like GCC 8 does not cache a read from a variable, and has more memory access to read it, while GCC 9 reads that variable from a register every time. (Maybe from a corrupted register?)
- zaarn 7y agoFrom what I can tell, the issue is that GCC9 stores the result of a pointer dereference in a register to reuse on each loop operation but the loop operation needs to dereference the pointer each time to work correctly.
- Asooka 7y agoSounds like it needs to be volatile then, or rather whatever atomic memory read the kernel has.
- zaarn 7y agoProbably volatile. Likely doesn't need to be atomic, just needs to prevent the compiler from optimizing the code into bugs.
- asveikau 7y agoNo, it sounds like it needs the kernel not to corrupt the value. There is nothing wrong with leaving the value in the register.
- wahern 7y agoI believe the aforementioned pointer caching is in the kernel--it's the pointer to the FP register state which is cached across preemption points in the kernel.
- asveikau 7y agoOk I see, that's a good point. Was not spelled out this well in the bug tracker comment. (If it is now it wasn't when I read it.)