cmd/8c: fix store to complex uint64 ptr
Assignment of a computed uint64 value to an address derived with a function call was executing the call after computing the value, which trashed the value (held in registers). long long *f(void) { return 0; } void g(int x, int y) { *f() = (long long)x | (long long)y<<32; } Before: (x.c:3) TEXT g+0(SB),(gok(71)) ... (x.c:4) ORL AX,DX (x.c:4) ORL CX,BX (x.c:4) CALL ,f+0(SB) (x.c:4) MOVL DX,(AX) (x.c:4) MOVL BX,4(AX) After: (x.c:3) TEXT g+0(SB),(gok(71)) (x.c:4) CALL ,f+0(SB) ... (x.c:4) ORL CX,BX (x.c:4) ORL DX,BP (x.c:4) MOVL BX,(AX) (x.c:4) MOVL BP,4(AX) Fixes #3501. R=ken2 CC=golang-dev https://golang.org/cl/5998043
Showing
Please
register
or
sign in
to comment