On Sat, Oct 14, 2017 at 2:22 AM, Khem Raj <raj.k...@gmail.com> wrote: > On Fri, Oct 13, 2017 at 12:25 PM, Paul Barker <pbar...@toganlabs.com> wrote: >> These variables are used to control the floating-point instructions emitted >> by >> the go compiler for x86 architectures. >> >> The default is '387' which disables the use of sse/sse2 instructions and is >> safe >> to use on all x86 processors from the i486 onwards. >> >> If TUNE_FEATURES contains a feature set which is known to support sse/sse2 >> instructions then they are set to 'sse2' to enable the use of these >> instructions. This is suitable for most processors from Pentium 4 onwards. >> >> Only the 'core2' and 'corei7' TUNE_FEATURES are defined in the oe-core layer >> and >> are known to support ss2 instructions. Other layers may introduce additional >> tunings which support sse2 instructions and for these layers, TARGET_GO386 >> or go_map_386 should be overridden as needed. >> >> Signed-off-by: Paul Barker <pbar...@toganlabs.com> >> --- >> meta/classes/goarch.bbclass | 11 +++++++++++ >> 1 file changed, 11 insertions(+) >> >> diff --git a/meta/classes/goarch.bbclass b/meta/classes/goarch.bbclass >> index 659b26a..653f035 100644 >> --- a/meta/classes/goarch.bbclass >> +++ b/meta/classes/goarch.bbclass >> @@ -4,10 +4,12 @@ BUILD_GOTUPLE = "${BUILD_GOOS}_${BUILD_GOARCH}" >> HOST_GOOS = "${@go_map_os(d.getVar('HOST_OS'), d)}" >> HOST_GOARCH = "${@go_map_arch(d.getVar('HOST_ARCH'), d)}" >> HOST_GOARM = "${@go_map_arm(d.getVar('HOST_ARCH'), >> d.getVar('TUNE_FEATURES'), d)}" >> +HOST_GO386 = "${@go_map_386(d.getVar('HOST_ARCH'), >> d.getVar('TUNE_FEATURES'), d)}" >> HOST_GOTUPLE = "${HOST_GOOS}_${HOST_GOARCH}" >> TARGET_GOOS = "${@go_map_os(d.getVar('TARGET_OS'), d)}" >> TARGET_GOARCH = "${@go_map_arch(d.getVar('TARGET_ARCH'), d)}" >> TARGET_GOARM = "${@go_map_arm(d.getVar('TARGET_ARCH'), >> d.getVar('TUNE_FEATURES'), d)}" >> +TARGET_GO386 = "${@go_map_386(d.getVar('TARGET_ARCH'), >> d.getVar('TUNE_FEATURES'), d)}" >> TARGET_GOTUPLE = "${TARGET_GOOS}_${TARGET_GOARCH}" >> GO_BUILD_BINDIR = >> "${@['bin/${HOST_GOTUPLE}','bin'][d.getVar('BUILD_GOTUPLE') == >> d.getVar('HOST_GOTUPLE')]}" >> >> @@ -66,6 +68,15 @@ def go_map_arm(a, f, d): >> return '5' >> return '' >> >> +def go_map_386(a, f, d): >> + import re >> + if re.match('i.86', a): >> + if ('core2' in f) or ('corei7' in f): >> + return 'sse2' >> + else: >> + return '387' >> + return '' >> + > > > This is too conservative IMO, e.g. anything above i586 is able to handle sse2 > with this patch i686 will use x87 for FPU, >
The Go documentation says "Pentium 4/Opteron/Athlon 64 or later" (https://golang.org/doc/install/source). GCC documentation also suggests that i686 is too early to support SSE2: https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html#x86-Options. So I think i686 should be using the old-style FPU instructions. Cheers, -- Paul Barker Togán Labs Ltd -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core