]> Cypherpunks repositories - gostls13.git/commit
[dev.power64] 9g: fix under-zeroing in clearfat
authorAustin Clements <austin@google.com>
Fri, 31 Oct 2014 15:08:27 +0000 (11:08 -0400)
committerAustin Clements <austin@google.com>
Fri, 31 Oct 2014 15:08:27 +0000 (11:08 -0400)
commit6e86003651be7feb6da46360d6c411ff1c29b7f5
tree9f6bab5c3b35916281b61d8c842ce4cefda6766a
parentc24156bafe24a82ca4c182f289b1bff121ea72e0
[dev.power64] 9g: fix under-zeroing in clearfat

All three cases of clearfat were wrong on power64x.

The cases that handle 1032 bytes and up and 32 bytes and up
both use MOVDU (one directly generated in a loop and the other
via duffzero), which leaves the pointer register pointing at
the *last written* address.  The generated code was not
accounting for this, so the byte fill loop was re-zeroing the
last zeroed dword, rather than the bytes following the last
zeroed dword.  Fix this by simply adding an additional 8 byte
offset to the byte zeroing loop.

The case that handled under 32 bytes was also wrong.  It
didn't update the pointer register at all, so the byte zeroing
loop was simply re-zeroing the beginning of region.  Again,
the fix is to add an offset to the byte zeroing loop to
account for this.

LGTM=dave, bradfitz
R=rsc, dave, bradfitz
CC=golang-codereviews
https://golang.org/cl/168870043
src/cmd/9g/ggen.c
src/runtime/asm_power64x.s
test/clearfat.go [new file with mode: 0644]