runtime: fix lfstackUnpack on ia64
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 25 Jan 2018 17:44:19 +0000 (17:44 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 25 Jan 2018 17:44:19 +0000 (17:44 +0000)
    The top three region number bits must be masked out before
    right-shifting the address bits into place, otherwise they will be
    copied down into the lower always-zero address bits.

    Reviewed-on: https://go-review.googlesource.com/84535

From-SVN: r257061

gcc/go/gofrontend/MERGE
libgo/go/runtime/lfstack_64bit.go

index e55b2bcfc6cece78fcebc3ee831f1f4a9e791844..adee9cce151a946f7a76ad0e53dcf6b568bad7b7 100644 (file)
@@ -1,4 +1,4 @@
-016ea21c4cba324c6ea6424da7988c6f985e671b
+553e04735d1be372c596c720bcaea27e050b13a6
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index 44cbf74cae0c8141d9385912ae46cb4312cad533..95d0eba57a6b138bc6943a4e995296d049891c76 100644 (file)
@@ -78,7 +78,7 @@ func lfstackUnpack(val uint64) *lfnode {
                return (*lfnode)(unsafe.Pointer(uintptr(int64(val) >> sparcLinuxCntBits << 3)))
        }
        if GOARCH == "ia64" {
-               return (*lfnode)(unsafe.Pointer(uintptr((val>>ia64CntBits<<3)&(1<<(64-3)-1) | val&^(1<<(64-3)-1))))
+               return (*lfnode)(unsafe.Pointer(uintptr(((val & (1<<(64-3) - 1)) >> ia64CntBits << 3) | val&^(1<<(64-3)-1))))
        }
        if GOARCH == "ppc64" && GOOS == "aix" {
                if val&(1<<63) != 0 {