On Sunday, 17 August 2014 at 13:59:03 UTC, Artur Skawina via
D.gnu wrote:
On 08/17/14 15:44, Timo Sintonen via D.gnu wrote:
I am compiling for arm and I am sorry I misinterpreted the
optimized code. Actually the code is correct but it still does
not work.
The problem is that the call to get the tls pointer for
volatile_dummy seems to corrupt the register (r3) where the
this pointer is. The call is inside the while loop. After
removing tha call by hand in the assembly everything works. R3
is usually pushed into stack when it is used in a function. I
have to check what is wrong in this case.
Does declaring it as:
extern __gshared int volatile_dummy;
help?
artur
Yes, now it works.
But the register corruption is still an issue. My tls function
clearly uses r3 and does not save it.
Johannes, do you know the arm calling system? Is it caller or
callee that should save r3?
In this case it is my function that has one function inlined that
has another function inlined that contains a compiler generated
function call. Could this be a bug in the compiler that it does
not recognize the innermost call and does not save registers?