<pre style='margin:0'>
Ken (kencu) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/ecbbc972ebf42e88aeeb1c69cd2f37bfc622b0c9">https://github.com/macports/macports-ports/commit/ecbbc972ebf42e88aeeb1c69cd2f37bfc622b0c9</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new ecbbc97 go: backport upstream fix for AVX
</span>ecbbc97 is described below
<span style='display:block; white-space:pre;color:#808000;'>commit ecbbc972ebf42e88aeeb1c69cd2f37bfc622b0c9
</span>Author: Ken Cunningham <kencu@macports.org>
AuthorDate: Wed Feb 26 22:20:00 2020 -0800
<span style='display:block; white-space:pre;color:#404040;'> go: backport upstream fix for AVX
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> closes: https://trac.macports.org/ticket/60133
</span>---
lang/go/Portfile | 3 ++
lang/go/files/go-141-avx-fix.patch | 98 ++++++++++++++++++++++++++++++++++++++
2 files changed, 101 insertions(+)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/go/Portfile b/lang/go/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index b4ff170..77dccba 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/lang/go/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/go/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -66,6 +66,9 @@ build.env GOROOT_BOOTSTRAP=${prefix}/lib/go-1.4 \
</span> GOROOT_FINAL=${GOROOT_FINAL} \
CC=${configure.cc}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# backport upstream patch to test for AVX before using it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append go-141-avx-fix.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> if {${os.platform} eq "darwin" && ${os.major} <= ${legacysupport.newest_darwin_requires_legacy}} {
# The legacy support PG will not actually change anything in this port directly,
# since go doesn't use the standard CFLAGS/CXXFLAGS.
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/go/files/go-141-avx-fix.patch b/lang/go/files/go-141-avx-fix.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..8e4a05f
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/go/files/go-141-avx-fix.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,98 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+go / go / 4d6efad6506ac40d3f6530d5e6f1a5a94431639c^! / .
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+commit 4d6efad6506ac40d3f6530d5e6f1a5a94431639c [log] [tgz]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+author Cherry Zhang <cherryyz@google.com> Tue Feb 25 20:30:37 2020 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+committer Cherry Zhang <cherryyz@google.com> Wed Feb 26 19:59:07 2020 +0000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+tree 54ba05f663696962a5f731a2cfba5acc92a1de6a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+parent 99f8de733936785d0e5c0d1271539d3f2f26d009 [diff]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+[release-branch.go1.14] runtime: guard VZEROUPPER on CPU feature
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+In CL 219131 we inserted a VZEROUPPER instruction on darwin/amd64.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The instruction is not available on pre-AVX machines. Guard it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+with CPU feature.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Updates #37459.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Fixes #37478.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Change-Id: I9a064df277d091be4ee594eda5c7fd8ee323102b
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reviewed-on: https://go-review.googlesource.com/c/go/+/221057
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Run-TryBot: Cherry Zhang <cherryyz@google.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+TryBot-Result: Gobot Gobot <gobot@golang.org>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Reviewed-by: Keith Randall <khr@golang.org>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+(cherry picked from commit c46ffdd2eca339918ed30b6ba9d4715ba769d35d)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git src/runtime/cpuflags.go src/runtime/cpuflags.go
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 94f9331..4bd894d 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/runtime/cpuflags.go
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/runtime/cpuflags.go
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -11,6 +11,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Offsets into internal/cpu records for use in assembly.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ offsetX86HasAVX = unsafe.Offsetof(cpu.X86.HasAVX)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ offsetX86HasAVX2 = unsafe.Offsetof(cpu.X86.HasAVX2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ offsetX86HasERMS = unsafe.Offsetof(cpu.X86.HasERMS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ offsetX86HasSSE2 = unsafe.Offsetof(cpu.X86.HasSSE2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git src/runtime/mkpreempt.go src/runtime/mkpreempt.go
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 31b6f5c..c26406e 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/runtime/mkpreempt.go
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/runtime/mkpreempt.go
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -244,15 +244,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // TODO: MXCSR register?
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- // Apparently, the signal handling code path in darwin kernel leaves
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- // the upper bits of Y registers in a dirty state, which causes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- // many SSE operations (128-bit and narrower) become much slower.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- // Clear the upper bits to get to a clean state. See issue #37174.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- // It is safe here as Go code don't use the upper bits of Y registers.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- p("#ifdef GOOS_darwin")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- p("VZEROUPPER")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- p("#endif")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ p("PUSHQ BP")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ p("MOVQ SP, BP")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ p("// Save flags before clobbering them")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -261,6 +252,18 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ p("ADJSP $%d", l.stack)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ p("// But vet doesn't know ADJSP, so suppress vet stack checking")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ p("NOP SP")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // Apparently, the signal handling code path in darwin kernel leaves
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // the upper bits of Y registers in a dirty state, which causes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // many SSE operations (128-bit and narrower) become much slower.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // Clear the upper bits to get to a clean state. See issue #37174.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // It is safe here as Go code don't use the upper bits of Y registers.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ p("#ifdef GOOS_darwin")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ p("CMPB internal∕cpu·X86+const_offsetX86HasAVX(SB), $0")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ p("JE 2(PC)")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ p("VZEROUPPER")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ p("#endif")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ l.save()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ p("CALL ·asyncPreempt2(SB)")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ l.restore()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git src/runtime/preempt_amd64.s src/runtime/preempt_amd64.s
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 0f2fd7d..4765e9f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/runtime/preempt_amd64.s
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/runtime/preempt_amd64.s
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4,9 +4,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "textflag.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TEXT ·asyncPreempt(SB),NOSPLIT|NOFRAME,$0-0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- #ifdef GOOS_darwin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- VZEROUPPER
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ PUSHQ BP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ MOVQ SP, BP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Save flags before clobbering them
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -15,6 +12,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ADJSP $368
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // But vet doesn't know ADJSP, so suppress vet stack checking
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ NOP SP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #ifdef GOOS_darwin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ CMPB internal∕cpu·X86+const_offsetX86HasAVX(SB), $0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ JE 2(PC)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ VZEROUPPER
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ MOVQ AX, 0(SP)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ MOVQ CX, 8(SP)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ MOVQ DX, 16(SP)
</span></pre><pre style='margin:0'>
</pre>