diff --git a/gcc/go/ChangeLog b/gcc/go/ChangeLog index 4603308a68c..9351ddafe16 100644 --- a/gcc/go/ChangeLog +++ b/gcc/go/ChangeLog @@ -1,3 +1,8 @@ +2016-09-11 Ian Lance Taylor + + * go-gcc.cc (Gcc_backend::Gcc_backend): Add builtin versions of + ctz, ctzll, bswap32, bswap64. + 2016-09-10 Ian Lance Taylor * go-backend.c (go_trampoline_info): Remove. diff --git a/gcc/go/go-gcc.cc b/gcc/go/go-gcc.cc index 13407ea5d37..a332831b310 100644 --- a/gcc/go/go-gcc.cc +++ b/gcc/go/go-gcc.cc @@ -692,6 +692,28 @@ Gcc_backend::Gcc_backend() NULL_TREE), false, false); + // Used by runtime/internal/sys. + this->define_builtin(BUILT_IN_CTZ, "__builtin_ctz", "ctz", + build_function_type_list(integer_type_node, + unsigned_type_node, + NULL_TREE), + true, false); + this->define_builtin(BUILT_IN_CTZLL, "__builtin_ctzll", "ctzll", + build_function_type_list(integer_type_node, + long_long_unsigned_type_node, + NULL_TREE), + true, false); + this->define_builtin(BUILT_IN_BSWAP32, "__builtin_bswap32", "bswap32", + build_function_type_list(uint32_type_node, + uint32_type_node, + NULL_TREE), + true, false); + this->define_builtin(BUILT_IN_BSWAP64, "__builtin_bswap64", "bswap64", + build_function_type_list(uint64_type_node, + uint64_type_node, + NULL_TREE), + true, false); + // We provide some functions for the math library. tree math_function_type = build_function_type_list(double_type_node, double_type_node, diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 7b3a8aa8d63..65badea861d 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -d3a145b111a4f4ea772b812c6a0b3a853c207819 +841bea960b1f097e2cff5ad2618800296dcd4ec2 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/libgo/Makefile.am b/libgo/Makefile.am index 1fde5086812..4ac6a4a7bd5 100644 --- a/libgo/Makefile.am +++ b/libgo/Makefile.am @@ -586,12 +586,54 @@ time.c: $(srcdir)/runtime/time.goc goc2c version.go: s-version; @true s-version: Makefile rm -f version.go.tmp - echo "package runtime" > version.go.tmp - echo 'const defaultGoroot = "$(prefix)"' >> version.go.tmp - echo 'const theVersion = "'`cat $(srcdir)/VERSION | sed 1q`' '`$(GOC) --version | sed 1q`'"' >> version.go.tmp - echo 'const theGoarch = "'$(GOARCH)'"' >> version.go.tmp - echo 'const theGoos = "'$(GOOS)'"' >> version.go.tmp - echo 'const theGccgoToolDir = "$(libexecsubdir)"' >> version.go.tmp + echo "package sys" > version.go.tmp + echo 'const DefaultGoroot = "$(prefix)"' >> version.go.tmp + echo 'const TheVersion = "'`cat $(srcdir)/VERSION | sed 1q`' '`$(GOC) --version | sed 1q`'"' >> version.go.tmp + echo 'const GOARCH = "'$(GOARCH)'"' >> version.go.tmp + echo 'const GOOS = "'$(GOOS)'"' >> version.go.tmp + echo 'const GccgoToolDir = "$(libexecsubdir)"' >> version.go.tmp + echo >> version.go.tmp + echo "type ArchFamilyType int" >> version.go.tmp + echo >> version.go.tmp + echo "const (" >> version.go.tmp + echo " UNKNOWN ArchFamilyType = iota" >> version.go.tmp + for a in $(ALLGOARCHFAMILY); do \ + echo " $${a}" >> version.go.tmp; \ + done + echo ")" >> version.go.tmp + echo >> version.go.tmp + for a in $(ALLGOARCH); do \ + f=`echo $${a} | sed -e 's/\(.\).*/\1/' -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`; \ + n="$${f}`echo $${a} | sed -e 's/.//'`"; \ + if test "$${a}" = "$(GOARCH)"; then \ + echo "const Goarch$${n} = 1" >> version.go.tmp; \ + else \ + echo "const Goarch$${n} = 0" >> version.go.tmp; \ + fi; \ + done + echo >> version.go.tmp + echo "const (" >> version.go.tmp + echo " ArchFamily = $(GOARCH_FAMILY)" >> version.go.tmp + echo " BigEndian = $(GOARCH_BIGENDIAN)" >> version.go.tmp + echo " CacheLineSize = $(GOARCH_CACHELINESIZE)" >> version.go.tmp + echo " PhysPageSize = $(GOARCH_PHYSPAGESIZE)" >> version.go.tmp + echo " PCQuantum = $(GOARCH_PCQUANTUM)" >> version.go.tmp + echo " Int64Align = $(GOARCH_INT64ALIGN)" >> version.go.tmp + echo " HugePageSize = $(GOARCH_HUGEPAGESIZE)" >> version.go.tmp + echo " MinFrameSize = $(GOARCH_MINFRAMESIZE)" >> version.go.tmp + echo ")" >> version.go.tmp + echo >> version.go.tmp + for a in $(ALLGOOS); do \ + f=`echo $${a} | sed -e 's/\(.\).*/\1/' -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`; \ + n="$${f}`echo $${a} | sed -e 's/.//'`"; \ + if test "$${a}" = "$(GOOS)"; then \ + echo "const Goos$${n} = 1" >> version.go.tmp; \ + else \ + echo "const Goos$${n} = 0" >> version.go.tmp; \ + fi; \ + done + echo >> version.go.tmp + echo "type Uintreg uintptr" >> version.go.tmp $(SHELL) $(srcdir)/mvifdiff.sh version.go.tmp version.go $(STAMP) $@ @@ -845,6 +887,7 @@ libgo_go_objs = \ runtime/pprof.lo \ runtime/internal/atomic.lo \ runtime/internal/atomic_c.lo \ + runtime/internal/sys.lo \ sync/atomic.lo \ sync/atomic_c.lo \ text/scanner.lo \ @@ -1224,7 +1267,7 @@ regexp/check: $(CHECK_DEPS) @$(CHECK) .PHONY: regexp/check -extra_go_files_runtime = runtime_sysinfo.go version.go +extra_go_files_runtime = runtime_sysinfo.go @go_include@ runtime-go.lo.dep runtime-go.lo.dep: $(srcdir)/go/runtime/*.go $(extra_go_files_runtime) @@ -2379,6 +2422,18 @@ runtime/internal/atomic/check: $(CHECK_DEPS) @$(CHECK) .PHONY: runtime/internal/atomic/check +extra_go_files_runtime_internal_sys = version.go + +@go_include@ runtime/internal/sys.lo.dep +runtime/internal/sys.lo.dep: $(srcdir)/go/runtime/internal/sys/*.go + $(BUILDDEPS) +runtime_internal_sys_lo_GOCFLAGS = -fgo-compiling-runtime +runtime/internal/sys.lo: + $(BUILDPACKAGE) +runtime/internal/sys/check: $(CHECK_DEPS) + @$(CHECK) +.PHONY: runtime/internal/sys/check + @go_include@ sync/atomic.lo.dep sync/atomic.lo.dep: $(srcdir)/go/sync/atomic/*.go $(BUILDDEPS) @@ -2816,6 +2871,8 @@ runtime/pprof.gox: runtime/pprof.lo $(BUILDGOX) runtime/internal/atomic.gox: runtime/internal/atomic.lo $(BUILDGOX) +runtime/internal/sys.gox: runtime/internal/sys.lo + $(BUILDGOX) sync/atomic.gox: sync/atomic.lo $(BUILDGOX) @@ -2971,6 +3028,7 @@ TEST_PACKAGES = \ regexp/syntax/check \ runtime/pprof/check \ runtime/internal/atomic/check \ + runtime/internal/sys/check \ sync/atomic/check \ text/scanner/check \ text/tabwriter/check \ diff --git a/libgo/Makefile.in b/libgo/Makefile.in index 931a6c9e0ca..2daa83ee443 100644 --- a/libgo/Makefile.in +++ b/libgo/Makefile.in @@ -213,10 +213,10 @@ am__DEPENDENCIES_1 = bufio.lo bytes.lo bytes/index.lo context.lo \ os/user.lo path/filepath.lo regexp/syntax.lo \ net/rpc/jsonrpc.lo runtime/debug.lo runtime/pprof.lo \ runtime/internal/atomic.lo runtime/internal/atomic_c.lo \ - sync/atomic.lo sync/atomic_c.lo text/scanner.lo \ - text/tabwriter.lo text/template.lo text/template/parse.lo \ - testing/iotest.lo testing/quick.lo unicode/utf16.lo \ - unicode/utf8.lo + runtime/internal/sys.lo sync/atomic.lo sync/atomic_c.lo \ + text/scanner.lo text/tabwriter.lo text/template.lo \ + text/template/parse.lo testing/iotest.lo testing/quick.lo \ + unicode/utf16.lo unicode/utf8.lo am__DEPENDENCIES_2 = am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1) \ ../libbacktrace/libbacktrace.la $(am__DEPENDENCIES_2) \ @@ -341,6 +341,9 @@ ETAGS = etags CTAGS = ctags DIST_SUBDIRS = testsuite ACLOCAL = @ACLOCAL@ +ALLGOARCH = @ALLGOARCH@ +ALLGOARCHFAMILY = @ALLGOARCHFAMILY@ +ALLGOOS = @ALLGOOS@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ @@ -365,6 +368,14 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GOARCH = @GOARCH@ +GOARCH_BIGENDIAN = @GOARCH_BIGENDIAN@ +GOARCH_CACHELINESIZE = @GOARCH_CACHELINESIZE@ +GOARCH_FAMILY = @GOARCH_FAMILY@ +GOARCH_HUGEPAGESIZE = @GOARCH_HUGEPAGESIZE@ +GOARCH_INT64ALIGN = @GOARCH_INT64ALIGN@ +GOARCH_MINFRAMESIZE = @GOARCH_MINFRAMESIZE@ +GOARCH_PCQUANTUM = @GOARCH_PCQUANTUM@ +GOARCH_PHYSPAGESIZE = @GOARCH_PHYSPAGESIZE@ GOC = @GOC@ GOCFLAGS = $(CFLAGS) GOOS = @GOOS@ @@ -1099,6 +1110,7 @@ libgo_go_objs = \ runtime/pprof.lo \ runtime/internal/atomic.lo \ runtime/internal/atomic_c.lo \ + runtime/internal/sys.lo \ sync/atomic.lo \ sync/atomic_c.lo \ text/scanner.lo \ @@ -1238,7 +1250,7 @@ CHECK_DEPS = $(toolexeclibgo_DATA) $(toolexeclibgoarchive_DATA) \ @HAVE_STAT_TIMESPEC_FALSE@@LIBGO_IS_SOLARIS_TRUE@matchargs_os = @HAVE_STAT_TIMESPEC_TRUE@@LIBGO_IS_SOLARIS_TRUE@matchargs_os = --tag=solaristag @LIBGO_IS_SOLARIS_FALSE@matchargs_os = -extra_go_files_runtime = runtime_sysinfo.go version.go +extra_go_files_runtime = runtime_sysinfo.go runtime_go_lo_GOCFLAGS = -fgo-c-header=runtime.inc.tmp -fgo-compiling-runtime @LIBGO_IS_BSD_TRUE@golang_org_x_net_route_lo = \ @LIBGO_IS_BSD_TRUE@ golang_org/x/net/route/route.lo @@ -1251,6 +1263,8 @@ runtime_go_lo_GOCFLAGS = -fgo-c-header=runtime.inc.tmp -fgo-compiling-runtime # Also use -fno-inline to get better results from the memory profiler. runtime_pprof_check_GOCFLAGS = -static-libgo -fno-inline runtime_internal_atomic_lo_GOCFLAGS = -fgo-compiling-runtime +extra_go_files_runtime_internal_sys = version.go +runtime_internal_sys_lo_GOCFLAGS = -fgo-compiling-runtime # How to build a .gox file from a .lo file. BUILDGOX = \ @@ -1389,6 +1403,7 @@ TEST_PACKAGES = \ regexp/syntax/check \ runtime/pprof/check \ runtime/internal/atomic/check \ + runtime/internal/sys/check \ sync/atomic/check \ text/scanner/check \ text/tabwriter/check \ @@ -3567,12 +3582,54 @@ time.c: $(srcdir)/runtime/time.goc goc2c version.go: s-version; @true s-version: Makefile rm -f version.go.tmp - echo "package runtime" > version.go.tmp - echo 'const defaultGoroot = "$(prefix)"' >> version.go.tmp - echo 'const theVersion = "'`cat $(srcdir)/VERSION | sed 1q`' '`$(GOC) --version | sed 1q`'"' >> version.go.tmp - echo 'const theGoarch = "'$(GOARCH)'"' >> version.go.tmp - echo 'const theGoos = "'$(GOOS)'"' >> version.go.tmp - echo 'const theGccgoToolDir = "$(libexecsubdir)"' >> version.go.tmp + echo "package sys" > version.go.tmp + echo 'const DefaultGoroot = "$(prefix)"' >> version.go.tmp + echo 'const TheVersion = "'`cat $(srcdir)/VERSION | sed 1q`' '`$(GOC) --version | sed 1q`'"' >> version.go.tmp + echo 'const GOARCH = "'$(GOARCH)'"' >> version.go.tmp + echo 'const GOOS = "'$(GOOS)'"' >> version.go.tmp + echo 'const GccgoToolDir = "$(libexecsubdir)"' >> version.go.tmp + echo >> version.go.tmp + echo "type ArchFamilyType int" >> version.go.tmp + echo >> version.go.tmp + echo "const (" >> version.go.tmp + echo " UNKNOWN ArchFamilyType = iota" >> version.go.tmp + for a in $(ALLGOARCHFAMILY); do \ + echo " $${a}" >> version.go.tmp; \ + done + echo ")" >> version.go.tmp + echo >> version.go.tmp + for a in $(ALLGOARCH); do \ + f=`echo $${a} | sed -e 's/\(.\).*/\1/' -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`; \ + n="$${f}`echo $${a} | sed -e 's/.//'`"; \ + if test "$${a}" = "$(GOARCH)"; then \ + echo "const Goarch$${n} = 1" >> version.go.tmp; \ + else \ + echo "const Goarch$${n} = 0" >> version.go.tmp; \ + fi; \ + done + echo >> version.go.tmp + echo "const (" >> version.go.tmp + echo " ArchFamily = $(GOARCH_FAMILY)" >> version.go.tmp + echo " BigEndian = $(GOARCH_BIGENDIAN)" >> version.go.tmp + echo " CacheLineSize = $(GOARCH_CACHELINESIZE)" >> version.go.tmp + echo " PhysPageSize = $(GOARCH_PHYSPAGESIZE)" >> version.go.tmp + echo " PCQuantum = $(GOARCH_PCQUANTUM)" >> version.go.tmp + echo " Int64Align = $(GOARCH_INT64ALIGN)" >> version.go.tmp + echo " HugePageSize = $(GOARCH_HUGEPAGESIZE)" >> version.go.tmp + echo " MinFrameSize = $(GOARCH_MINFRAMESIZE)" >> version.go.tmp + echo ")" >> version.go.tmp + echo >> version.go.tmp + for a in $(ALLGOOS); do \ + f=`echo $${a} | sed -e 's/\(.\).*/\1/' -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`; \ + n="$${f}`echo $${a} | sed -e 's/.//'`"; \ + if test "$${a}" = "$(GOOS)"; then \ + echo "const Goos$${n} = 1" >> version.go.tmp; \ + else \ + echo "const Goos$${n} = 0" >> version.go.tmp; \ + fi; \ + done + echo >> version.go.tmp + echo "type Uintreg uintptr" >> version.go.tmp $(SHELL) $(srcdir)/mvifdiff.sh version.go.tmp version.go $(STAMP) $@ @@ -5003,6 +5060,15 @@ runtime/internal/atomic/check: $(CHECK_DEPS) @$(CHECK) .PHONY: runtime/internal/atomic/check +@go_include@ runtime/internal/sys.lo.dep +runtime/internal/sys.lo.dep: $(srcdir)/go/runtime/internal/sys/*.go + $(BUILDDEPS) +runtime/internal/sys.lo: + $(BUILDPACKAGE) +runtime/internal/sys/check: $(CHECK_DEPS) + @$(CHECK) +.PHONY: runtime/internal/sys/check + @go_include@ sync/atomic.lo.dep sync/atomic.lo.dep: $(srcdir)/go/sync/atomic/*.go $(BUILDDEPS) @@ -5433,6 +5499,8 @@ runtime/pprof.gox: runtime/pprof.lo $(BUILDGOX) runtime/internal/atomic.gox: runtime/internal/atomic.lo $(BUILDGOX) +runtime/internal/sys.gox: runtime/internal/sys.lo + $(BUILDGOX) sync/atomic.gox: sync/atomic.lo $(BUILDGOX) diff --git a/libgo/configure b/libgo/configure index 756f62e137c..d3f64d2df53 100755 --- a/libgo/configure +++ b/libgo/configure @@ -629,48 +629,19 @@ GO_SYSCALL_OS_ARCH_FILE GO_SYSCALL_OS_FILE GO_LIBCALL_OS_ARCH_FILE GO_LIBCALL_OS_FILE +ALLGOARCHFAMILY +ALLGOARCH +GOARCH_MINFRAMESIZE +GOARCH_HUGEPAGESIZE +GOARCH_INT64ALIGN +GOARCH_PCQUANTUM +GOARCH_PHYSPAGESIZE +GOARCH_CACHELINESIZE +GOARCH_BIGENDIAN +GOARCH_FAMILY GOARCH -LIBGO_IS_X86_64_FALSE -LIBGO_IS_X86_64_TRUE -LIBGO_IS_SPARC64_FALSE -LIBGO_IS_SPARC64_TRUE -LIBGO_IS_SPARC_FALSE -LIBGO_IS_SPARC_TRUE -LIBGO_IS_S390X_FALSE -LIBGO_IS_S390X_TRUE -LIBGO_IS_S390_FALSE -LIBGO_IS_S390_TRUE -LIBGO_IS_PPC64LE_FALSE -LIBGO_IS_PPC64LE_TRUE -LIBGO_IS_PPC64_FALSE -LIBGO_IS_PPC64_TRUE -LIBGO_IS_PPC_FALSE -LIBGO_IS_PPC_TRUE -LIBGO_IS_MIPS64_FALSE -LIBGO_IS_MIPS64_TRUE -LIBGO_IS_MIPSO64_FALSE -LIBGO_IS_MIPSO64_TRUE -LIBGO_IS_MIPSN64_FALSE -LIBGO_IS_MIPSN64_TRUE -LIBGO_IS_MIPSN32_FALSE -LIBGO_IS_MIPSN32_TRUE -LIBGO_IS_MIPSO32_FALSE -LIBGO_IS_MIPSO32_TRUE -LIBGO_IS_MIPS_FALSE -LIBGO_IS_MIPS_TRUE -LIBGO_IS_M68K_FALSE -LIBGO_IS_M68K_TRUE -LIBGO_IS_IA64_FALSE -LIBGO_IS_IA64_TRUE -LIBGO_IS_ARM64_FALSE -LIBGO_IS_ARM64_TRUE -LIBGO_IS_ARM_FALSE -LIBGO_IS_ARM_TRUE -LIBGO_IS_ALPHA_FALSE -LIBGO_IS_ALPHA_TRUE -LIBGO_IS_386_FALSE -LIBGO_IS_386_TRUE USE_DEJAGNU +ALLGOOS GOOS LIBGO_IS_BSD_FALSE LIBGO_IS_BSD_TRUE @@ -11130,7 +11101,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11133 "configure" +#line 11104 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11236,7 +11207,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11239 "configure" +#line 11210 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -13522,6 +13493,11 @@ fi go_include="-include" +# All known GOOS values. This is the union of all operating systems +# supported by the gofrontend and all operating systems supported by +# the gc toolchain. +ALLGOOS="android darwin dragonfly freebsd irix linux netbsd openbsd plan9 rtems solaris windows" + is_darwin=no is_freebsd=no is_irix=no @@ -13625,6 +13601,7 @@ fi + USE_DEJAGNU=no case ${host} in *-*-rtems*) USE_DEJAGNU=yes ;; @@ -13633,34 +13610,46 @@ case ${host} in esac -is_386=no -is_alpha=no -is_arm=no -is_arm64=no -is_ia64=no -is_m68k=no -mips_abi=unknown -is_ppc=no -is_ppc64=no -is_ppc64le=no -is_s390=no -is_s390x=no -is_sparc=no -is_sparc64=no -is_x86_64=no +# All known GOARCH values. This is the union of all architectures +# supported by the gofrontend and all architectures supported by the +# gc toolchain. +# N.B. Keep in sync with gcc/testsuite/go.test/go-test.exp (go-set-goarch). +ALLGOARCH="386 alpha amd64 amd64p32 arm armbe arm64 arm64be ia64 m68k mipso32 mipsn32 mipso64 mipsn64 mips mipsle mips64 mips64le mips64p32 mips64pe32le ppc ppc64 ppc64le s390 s390x sparc sparc64" + +# All known GOARCH_FAMILY values. +ALLGOARCHFAMILY="I386 ALPHA AMD64 ARM ARM64 IA64 M68K MIPS MIPS64 PPC PPC64 S390 S390X SPARC SPARC64" + GOARCH=unknown +GOARCH_FAMILY=unknown +GOARCH_BIGENDIAN=0 +GOARCH_CACHELINESIZE=64 +GOARCH_PHYSPAGESIZE=4096 +GOARCH_PCQUANTUM=1 +GOARCH_INT64ALIGN=8 +GOARCH_HUGEPAGESIZE=0 +GOARCH_MINFRAMESIZE=0 case ${host} in alpha*-*-*) - is_alpha=yes GOARCH=alpha + GOARCH_FAMILY=ALPHA + GOARCH_PHYSPAGESIZE=8192 + GOARCH_PCQUANTUM=4 ;; aarch64-*-*) - is_arm64=yes GOARCH=arm64 + GOARCH_FAMILY=ARM64 + GOARCH_CACHELINESIZE=32 + GOARCH_PHYSPAGESIZE=65536 + GOARCH_PCQUANTUm=4 + GOARCH_MINFRAMESIZE=8 ;; arm*-*-* | strongarm*-*-* | ep9312*-*-* | xscale-*-*) - is_arm=yes GOARCH=arm + GOARCH_FAMILY=ARM + GOARCH_CACHELINESIZE=32 + GOARCH_PCQUANTUM=4 + GOARCH_INT64ALIGN=4 + GOARCH_MINFRAMESIZE=4 ;; i[34567]86-*-* | x86_64-*-*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -13671,24 +13660,32 @@ case ${host} in #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - is_386=yes + GOARCH=386 +GOARCH_FAMILY=I386 +GOARCH_INT64ALIGN=4 +GOARCH_HUGEPAGESIZE="1 << 21" + else - is_x86_64=yes + GOARCH=amd64 +GOARCH_FAMILY=AMD64 +GOARCH_HUGEPAGESIZE="1 << 21" + fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test "$is_386" = "yes"; then - GOARCH=386 - else - GOARCH=amd64 - fi ;; ia64-*-*) - is_ia64=yes GOARCH=ia64 + GOARCH_FAMILY=IA64 + GOARCH_CACHELINESIZE=16384 + GOARCH_PHYSPAGESIZE=8192 ;; m68k*-*-*) - is_m68k=yes GOARCH=m68k + GOARCH_FAMILY=M68K + GOARCH_BIGENDIAN=1 + GOARCH_CACHELINESIZE=16 + GOARCH_PCQUANTUM=4 + GOARCH_INT64ALIGN=4 ;; mips*-*-*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -13747,6 +13744,27 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext "n64") GOARCH=mipsn64 ;; "o64") GOARCH=mipso64 ;; esac + case "$mips_abi" in + "o32" | "n32") + GOARCH_FAMILY=MIPS + GOARCH_INT64ALIGN=4 + GOARCH_MINFRAMESIZE=4 + ;; + "n64" | "o64") + GOARCH_FAMILY=MIPS64 + GOARCH_MINFRAMESIZE=8 + ;; + esac + case "${host}" in + mips*el) + ;; + *) + GOARCH_BIGENDIAN=1 + ;; + esac + GOARCH_CACHELINESIZE=32 + GOARCH_PHYSPAGESIZE=16384 + GOARCH_PCQUANTUM=4 ;; rs6000*-*-* | powerpc*-*-*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -13757,9 +13775,15 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - is_ppc=yes + GOARCH=ppc +GOARCH_FAMILY=PPC +GOARCH_BIGENDIAN=1 +GOARCH_INT64ALIGN=4 + else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + +GOARCH_FAMILY=PPC64 +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN__) @@ -13767,20 +13791,19 @@ else #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - is_ppc64le=yes + GOARCH=ppc64le + else - is_ppc64=yes + GOARCH=ppc64 +GOARCH_BIGENDIAN=1 + fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test "$is_ppc" = "yes"; then - GOARCH=ppc - elif test "$is_ppc64" = "yes"; then - GOARCH=ppc64 - else - GOARCH=ppc64le - fi + GOARCH_PHYSPAGESIZE=65536 + GOARCH_PCQUANTUM=4 + GOARCH_MINFRAMESIZE=32 ;; s390*-*-*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -13791,16 +13814,21 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - is_s390=yes + GOARCH=s390 +GOARCH_FAMILY=S390 +GOARCH_INT64ALIGN=4 +GOARCH_MINFRAMESIZE=4 + else - is_s390x=yes + GOARCH=s390x +GOARCH_FAMILY=S390X +GOARCH_MINFRAMESIZE=8 + fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test "$is_s390" = "yes"; then - GOARCH=s390 - else - GOARCH=s390x - fi + GOARCH_BIGENDIAN=1 + GOARCH_CACHELINESIZE=256 + GOARCH_PCQUANTUM=2 ;; sparc*-*-*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -13811,177 +13839,30 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - is_sparc=yes + GOARCH=sparc +GOARCH_FAMILY=SPARC +GOARCH_INT64ALIGN=4 + else - is_sparc64=yes + GOARCH=sparc64 +GOARCH_FAMILY=SPARC64 + fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test "$is_sparc" = "yes"; then - GOARCH=sparc - else - GOARCH=sparc64 - fi + GOARCH_BIGENDIAN=1 + GOARCH_PHYSPAGESIZE=8192 + GOARCH_PCQUANTUM=4 ;; esac - if test $is_386 = yes; then - LIBGO_IS_386_TRUE= - LIBGO_IS_386_FALSE='#' -else - LIBGO_IS_386_TRUE='#' - LIBGO_IS_386_FALSE= -fi - if test $is_alpha = yes; then - LIBGO_IS_ALPHA_TRUE= - LIBGO_IS_ALPHA_FALSE='#' -else - LIBGO_IS_ALPHA_TRUE='#' - LIBGO_IS_ALPHA_FALSE= -fi - if test $is_arm = yes; then - LIBGO_IS_ARM_TRUE= - LIBGO_IS_ARM_FALSE='#' -else - LIBGO_IS_ARM_TRUE='#' - LIBGO_IS_ARM_FALSE= -fi - if test $is_arm64 = yes; then - LIBGO_IS_ARM64_TRUE= - LIBGO_IS_ARM64_FALSE='#' -else - LIBGO_IS_ARM64_TRUE='#' - LIBGO_IS_ARM64_FALSE= -fi - if test $is_ia64 = yes; then - LIBGO_IS_IA64_TRUE= - LIBGO_IS_IA64_FALSE='#' -else - LIBGO_IS_IA64_TRUE='#' - LIBGO_IS_IA64_FALSE= -fi - if test $is_m68k = yes; then - LIBGO_IS_M68K_TRUE= - LIBGO_IS_M68K_FALSE='#' -else - LIBGO_IS_M68K_TRUE='#' - LIBGO_IS_M68K_FALSE= -fi - if test $mips_abi != unknown; then - LIBGO_IS_MIPS_TRUE= - LIBGO_IS_MIPS_FALSE='#' -else - LIBGO_IS_MIPS_TRUE='#' - LIBGO_IS_MIPS_FALSE= -fi - if test $mips_abi = o32; then - LIBGO_IS_MIPSO32_TRUE= - LIBGO_IS_MIPSO32_FALSE='#' -else - LIBGO_IS_MIPSO32_TRUE='#' - LIBGO_IS_MIPSO32_FALSE= -fi - if test $mips_abi = n32; then - LIBGO_IS_MIPSN32_TRUE= - LIBGO_IS_MIPSN32_FALSE='#' -else - LIBGO_IS_MIPSN32_TRUE='#' - LIBGO_IS_MIPSN32_FALSE= -fi - if test $mips_abi = n64; then - LIBGO_IS_MIPSN64_TRUE= - LIBGO_IS_MIPSN64_FALSE='#' -else - LIBGO_IS_MIPSN64_TRUE='#' - LIBGO_IS_MIPSN64_FALSE= -fi - - if test $mips_abi = o64; then - LIBGO_IS_MIPSO64_TRUE= - LIBGO_IS_MIPSO64_FALSE='#' -else - LIBGO_IS_MIPSO64_TRUE='#' - LIBGO_IS_MIPSO64_FALSE= -fi - - if test $mips_abi = n64 -o $mips_abi = o64; then - LIBGO_IS_MIPS64_TRUE= - LIBGO_IS_MIPS64_FALSE='#' -else - LIBGO_IS_MIPS64_TRUE='#' - LIBGO_IS_MIPS64_FALSE= -fi - - if test $is_ppc = yes; then - LIBGO_IS_PPC_TRUE= - LIBGO_IS_PPC_FALSE='#' -else - LIBGO_IS_PPC_TRUE='#' - LIBGO_IS_PPC_FALSE= -fi - - if test $is_ppc64 = yes; then - LIBGO_IS_PPC64_TRUE= - LIBGO_IS_PPC64_FALSE='#' -else - LIBGO_IS_PPC64_TRUE='#' - LIBGO_IS_PPC64_FALSE= -fi - - if test $is_ppc64le = yes; then - LIBGO_IS_PPC64LE_TRUE= - LIBGO_IS_PPC64LE_FALSE='#' -else - LIBGO_IS_PPC64LE_TRUE='#' - LIBGO_IS_PPC64LE_FALSE= -fi - - if test $is_s390 = yes; then - LIBGO_IS_S390_TRUE= - LIBGO_IS_S390_FALSE='#' -else - LIBGO_IS_S390_TRUE='#' - LIBGO_IS_S390_FALSE= -fi - - if test $is_s390x = yes; then - LIBGO_IS_S390X_TRUE= - LIBGO_IS_S390X_FALSE='#' -else - LIBGO_IS_S390X_TRUE='#' - LIBGO_IS_S390X_FALSE= -fi - - if test $is_sparc = yes; then - LIBGO_IS_SPARC_TRUE= - LIBGO_IS_SPARC_FALSE='#' -else - LIBGO_IS_SPARC_TRUE='#' - LIBGO_IS_SPARC_FALSE= -fi - - if test $is_sparc64 = yes; then - LIBGO_IS_SPARC64_TRUE= - LIBGO_IS_SPARC64_FALSE='#' -else - LIBGO_IS_SPARC64_TRUE='#' - LIBGO_IS_SPARC64_FALSE= -fi - - if test $is_x86_64 = yes; then - LIBGO_IS_X86_64_TRUE= - LIBGO_IS_X86_64_FALSE='#' -else - LIBGO_IS_X86_64_TRUE='#' - LIBGO_IS_X86_64_FALSE= -fi @@ -15798,86 +15679,6 @@ if test -z "${LIBGO_IS_BSD_TRUE}" && test -z "${LIBGO_IS_BSD_FALSE}"; then as_fn_error "conditional \"LIBGO_IS_BSD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${LIBGO_IS_386_TRUE}" && test -z "${LIBGO_IS_386_FALSE}"; then - as_fn_error "conditional \"LIBGO_IS_386\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${LIBGO_IS_ALPHA_TRUE}" && test -z "${LIBGO_IS_ALPHA_FALSE}"; then - as_fn_error "conditional \"LIBGO_IS_ALPHA\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${LIBGO_IS_ARM_TRUE}" && test -z "${LIBGO_IS_ARM_FALSE}"; then - as_fn_error "conditional \"LIBGO_IS_ARM\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${LIBGO_IS_ARM64_TRUE}" && test -z "${LIBGO_IS_ARM64_FALSE}"; then - as_fn_error "conditional \"LIBGO_IS_ARM64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${LIBGO_IS_IA64_TRUE}" && test -z "${LIBGO_IS_IA64_FALSE}"; then - as_fn_error "conditional \"LIBGO_IS_IA64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${LIBGO_IS_M68K_TRUE}" && test -z "${LIBGO_IS_M68K_FALSE}"; then - as_fn_error "conditional \"LIBGO_IS_M68K\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${LIBGO_IS_MIPS_TRUE}" && test -z "${LIBGO_IS_MIPS_FALSE}"; then - as_fn_error "conditional \"LIBGO_IS_MIPS\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${LIBGO_IS_MIPSO32_TRUE}" && test -z "${LIBGO_IS_MIPSO32_FALSE}"; then - as_fn_error "conditional \"LIBGO_IS_MIPSO32\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${LIBGO_IS_MIPSN32_TRUE}" && test -z "${LIBGO_IS_MIPSN32_FALSE}"; then - as_fn_error "conditional \"LIBGO_IS_MIPSN32\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${LIBGO_IS_MIPSN64_TRUE}" && test -z "${LIBGO_IS_MIPSN64_FALSE}"; then - as_fn_error "conditional \"LIBGO_IS_MIPSN64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${LIBGO_IS_MIPSO64_TRUE}" && test -z "${LIBGO_IS_MIPSO64_FALSE}"; then - as_fn_error "conditional \"LIBGO_IS_MIPSO64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${LIBGO_IS_MIPS64_TRUE}" && test -z "${LIBGO_IS_MIPS64_FALSE}"; then - as_fn_error "conditional \"LIBGO_IS_MIPS64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${LIBGO_IS_PPC_TRUE}" && test -z "${LIBGO_IS_PPC_FALSE}"; then - as_fn_error "conditional \"LIBGO_IS_PPC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${LIBGO_IS_PPC64_TRUE}" && test -z "${LIBGO_IS_PPC64_FALSE}"; then - as_fn_error "conditional \"LIBGO_IS_PPC64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${LIBGO_IS_PPC64LE_TRUE}" && test -z "${LIBGO_IS_PPC64LE_FALSE}"; then - as_fn_error "conditional \"LIBGO_IS_PPC64LE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${LIBGO_IS_S390_TRUE}" && test -z "${LIBGO_IS_S390_FALSE}"; then - as_fn_error "conditional \"LIBGO_IS_S390\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${LIBGO_IS_S390X_TRUE}" && test -z "${LIBGO_IS_S390X_FALSE}"; then - as_fn_error "conditional \"LIBGO_IS_S390X\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${LIBGO_IS_SPARC_TRUE}" && test -z "${LIBGO_IS_SPARC_FALSE}"; then - as_fn_error "conditional \"LIBGO_IS_SPARC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${LIBGO_IS_SPARC64_TRUE}" && test -z "${LIBGO_IS_SPARC64_FALSE}"; then - as_fn_error "conditional \"LIBGO_IS_SPARC64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${LIBGO_IS_X86_64_TRUE}" && test -z "${LIBGO_IS_X86_64_FALSE}"; then - as_fn_error "conditional \"LIBGO_IS_X86_64\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi if test -z "${USING_SPLIT_STACK_TRUE}" && test -z "${USING_SPLIT_STACK_FALSE}"; then as_fn_error "conditional \"USING_SPLIT_STACK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 diff --git a/libgo/configure.ac b/libgo/configure.ac index 21ece733f34..f33854503e3 100644 --- a/libgo/configure.ac +++ b/libgo/configure.ac @@ -142,6 +142,11 @@ AC_SUBST(LIBATOMIC) go_include="-include" AC_SUBST(go_include) +# All known GOOS values. This is the union of all operating systems +# supported by the gofrontend and all operating systems supported by +# the gc toolchain. +ALLGOOS="android darwin dragonfly freebsd irix linux netbsd openbsd plan9 rtems solaris windows" + is_darwin=no is_freebsd=no is_irix=no @@ -174,6 +179,7 @@ AM_CONDITIONAL(LIBGO_IS_RTEMS, test $is_rtems = yes) AM_CONDITIONAL(LIBGO_IS_SOLARIS, test $is_solaris = yes) AM_CONDITIONAL(LIBGO_IS_BSD, test $is_darwin = yes -o $is_dragonfly = yes -o $is_freebsd = yes -o $is_netbsd = yes -o $is_openbsd = yes) AC_SUBST(GOOS) +AC_SUBST(ALLGOOS) dnl Test whether we need to use DejaGNU or whether we can use the dnl simpler gotest approach. We can only use gotest for a native @@ -186,35 +192,46 @@ case ${host} in esac AC_SUBST(USE_DEJAGNU) -dnl N.B. Keep in sync with gcc/testsuite/go.test/go-test.exp (go-set-goarch). -is_386=no -is_alpha=no -is_arm=no -is_arm64=no -is_ia64=no -is_m68k=no -mips_abi=unknown -is_ppc=no -is_ppc64=no -is_ppc64le=no -is_s390=no -is_s390x=no -is_sparc=no -is_sparc64=no -is_x86_64=no +# All known GOARCH values. This is the union of all architectures +# supported by the gofrontend and all architectures supported by the +# gc toolchain. +# N.B. Keep in sync with gcc/testsuite/go.test/go-test.exp (go-set-goarch). +ALLGOARCH="386 alpha amd64 amd64p32 arm armbe arm64 arm64be ia64 m68k mipso32 mipsn32 mipso64 mipsn64 mips mipsle mips64 mips64le mips64p32 mips64pe32le ppc ppc64 ppc64le s390 s390x sparc sparc64" + +# All known GOARCH_FAMILY values. +ALLGOARCHFAMILY="I386 ALPHA AMD64 ARM ARM64 IA64 M68K MIPS MIPS64 PPC PPC64 S390 S390X SPARC SPARC64" + GOARCH=unknown +GOARCH_FAMILY=unknown +GOARCH_BIGENDIAN=0 +GOARCH_CACHELINESIZE=64 +GOARCH_PHYSPAGESIZE=4096 +GOARCH_PCQUANTUM=1 +GOARCH_INT64ALIGN=8 +GOARCH_HUGEPAGESIZE=0 +GOARCH_MINFRAMESIZE=0 case ${host} in alpha*-*-*) - is_alpha=yes GOARCH=alpha + GOARCH_FAMILY=ALPHA + GOARCH_PHYSPAGESIZE=8192 + GOARCH_PCQUANTUM=4 ;; aarch64-*-*) - is_arm64=yes GOARCH=arm64 + GOARCH_FAMILY=ARM64 + GOARCH_CACHELINESIZE=32 + GOARCH_PHYSPAGESIZE=65536 + GOARCH_PCQUANTUm=4 + GOARCH_MINFRAMESIZE=8 ;; arm*-*-* | strongarm*-*-* | ep9312*-*-* | xscale-*-*) - is_arm=yes GOARCH=arm + GOARCH_FAMILY=ARM + GOARCH_CACHELINESIZE=32 + GOARCH_PCQUANTUM=4 + GOARCH_INT64ALIGN=4 + GOARCH_MINFRAMESIZE=4 ;; changequote(,)dnl i[34567]86-*-* | x86_64-*-*) @@ -223,20 +240,29 @@ changequote([,])dnl #ifdef __x86_64__ #error 64-bit #endif], -[is_386=yes], [is_x86_64=yes]) - if test "$is_386" = "yes"; then - GOARCH=386 - else - GOARCH=amd64 - fi +[GOARCH=386 +GOARCH_FAMILY=I386 +GOARCH_INT64ALIGN=4 +GOARCH_HUGEPAGESIZE="1 << 21" +], +[GOARCH=amd64 +GOARCH_FAMILY=AMD64 +GOARCH_HUGEPAGESIZE="1 << 21" +]) ;; ia64-*-*) - is_ia64=yes GOARCH=ia64 + GOARCH_FAMILY=IA64 + GOARCH_CACHELINESIZE=16384 + GOARCH_PHYSPAGESIZE=8192 ;; m68k*-*-*) - is_m68k=yes GOARCH=m68k + GOARCH_FAMILY=M68K + GOARCH_BIGENDIAN=1 + GOARCH_CACHELINESIZE=16 + GOARCH_PCQUANTUM=4 + GOARCH_INT64ALIGN=4 ;; mips*-*-*) AC_COMPILE_IFELSE([ @@ -267,72 +293,98 @@ changequote([,])dnl "n64") GOARCH=mipsn64 ;; "o64") GOARCH=mipso64 ;; esac + case "$mips_abi" in + "o32" | "n32") + GOARCH_FAMILY=MIPS + GOARCH_INT64ALIGN=4 + GOARCH_MINFRAMESIZE=4 + ;; + "n64" | "o64") + GOARCH_FAMILY=MIPS64 + GOARCH_MINFRAMESIZE=8 + ;; + esac + case "${host}" in + mips*el) + ;; + *) + GOARCH_BIGENDIAN=1 + ;; + esac + GOARCH_CACHELINESIZE=32 + GOARCH_PHYSPAGESIZE=16384 + GOARCH_PCQUANTUM=4 ;; rs6000*-*-* | powerpc*-*-*) AC_COMPILE_IFELSE([ #ifdef _ARCH_PPC64 #error 64-bit #endif], -[is_ppc=yes], - [AC_COMPILE_IFELSE([ +[GOARCH=ppc +GOARCH_FAMILY=PPC +GOARCH_BIGENDIAN=1 +GOARCH_INT64ALIGN=4 +], + [ +GOARCH_FAMILY=PPC64 +AC_COMPILE_IFELSE([ #if defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN__) #error 64be #endif], -[is_ppc64le=yes],[is_ppc64=yes])]) - if test "$is_ppc" = "yes"; then - GOARCH=ppc - elif test "$is_ppc64" = "yes"; then - GOARCH=ppc64 - else - GOARCH=ppc64le - fi +[GOARCH=ppc64le +], +[GOARCH=ppc64 +GOARCH_BIGENDIAN=1 +])]) + GOARCH_PHYSPAGESIZE=65536 + GOARCH_PCQUANTUM=4 + GOARCH_MINFRAMESIZE=32 ;; s390*-*-*) AC_COMPILE_IFELSE([ #if defined(__s390x__) #error 64-bit #endif], -[is_s390=yes], [is_s390x=yes]) - if test "$is_s390" = "yes"; then - GOARCH=s390 - else - GOARCH=s390x - fi +[GOARCH=s390 +GOARCH_FAMILY=S390 +GOARCH_INT64ALIGN=4 +GOARCH_MINFRAMESIZE=4 +], [GOARCH=s390x +GOARCH_FAMILY=S390X +GOARCH_MINFRAMESIZE=8 +]) + GOARCH_BIGENDIAN=1 + GOARCH_CACHELINESIZE=256 + GOARCH_PCQUANTUM=2 ;; sparc*-*-*) AC_COMPILE_IFELSE([ #if defined(__sparcv9) || defined(__arch64__) #error 64-bit #endif], -[is_sparc=yes], [is_sparc64=yes]) - if test "$is_sparc" = "yes"; then - GOARCH=sparc - else - GOARCH=sparc64 - fi +[GOARCH=sparc +GOARCH_FAMILY=SPARC +GOARCH_INT64ALIGN=4 +], +[GOARCH=sparc64 +GOARCH_FAMILY=SPARC64 +]) + GOARCH_BIGENDIAN=1 + GOARCH_PHYSPAGESIZE=8192 + GOARCH_PCQUANTUM=4 ;; esac -AM_CONDITIONAL(LIBGO_IS_386, test $is_386 = yes) -AM_CONDITIONAL(LIBGO_IS_ALPHA, test $is_alpha = yes) -AM_CONDITIONAL(LIBGO_IS_ARM, test $is_arm = yes) -AM_CONDITIONAL(LIBGO_IS_ARM64, test $is_arm64 = yes) -AM_CONDITIONAL(LIBGO_IS_IA64, test $is_ia64 = yes) -AM_CONDITIONAL(LIBGO_IS_M68K, test $is_m68k = yes) -AM_CONDITIONAL(LIBGO_IS_MIPS, test $mips_abi != unknown) -AM_CONDITIONAL(LIBGO_IS_MIPSO32, test $mips_abi = o32) -AM_CONDITIONAL(LIBGO_IS_MIPSN32, test $mips_abi = n32) -AM_CONDITIONAL(LIBGO_IS_MIPSN64, test $mips_abi = n64) -AM_CONDITIONAL(LIBGO_IS_MIPSO64, test $mips_abi = o64) -AM_CONDITIONAL(LIBGO_IS_MIPS64, test $mips_abi = n64 -o $mips_abi = o64) -AM_CONDITIONAL(LIBGO_IS_PPC, test $is_ppc = yes) -AM_CONDITIONAL(LIBGO_IS_PPC64, test $is_ppc64 = yes) -AM_CONDITIONAL(LIBGO_IS_PPC64LE, test $is_ppc64le = yes) -AM_CONDITIONAL(LIBGO_IS_S390, test $is_s390 = yes) -AM_CONDITIONAL(LIBGO_IS_S390X, test $is_s390x = yes) -AM_CONDITIONAL(LIBGO_IS_SPARC, test $is_sparc = yes) -AM_CONDITIONAL(LIBGO_IS_SPARC64, test $is_sparc64 = yes) -AM_CONDITIONAL(LIBGO_IS_X86_64, test $is_x86_64 = yes) AC_SUBST(GOARCH) +AC_SUBST(GOARCH_FAMILY) +AC_SUBST(GOARCH_BIGENDIAN) +AC_SUBST(GOARCH_CACHELINESIZE) +AC_SUBST(GOARCH_PHYSPAGESIZE) +AC_SUBST(GOARCH_PCQUANTUM) +AC_SUBST(GOARCH_INT64ALIGN) +AC_SUBST(GOARCH_HUGEPAGESIZE) +AC_SUBST(GOARCH_MINFRAMESIZE) +AC_SUBST(ALLGOARCH) +AC_SUBST(ALLGOARCHFAMILY) dnl Some files are only present when needed for specific architectures. GO_LIBCALL_OS_FILE= diff --git a/libgo/go/runtime/extern.go b/libgo/go/runtime/extern.go index fbbf56ced70..e0c5aacc55a 100644 --- a/libgo/go/runtime/extern.go +++ b/libgo/go/runtime/extern.go @@ -157,6 +157,8 @@ of the run-time system. */ package runtime +import "runtime/internal/sys" + // Gosched yields the processor, allowing other goroutines to run. It does not // suspend the current goroutine, so execution resumes automatically. func Gosched() @@ -282,23 +284,23 @@ func GOROOT() string { if s != "" { return s } - return defaultGoroot + return sys.DefaultGoroot } // Version returns the Go tree's version string. // It is either the commit hash and date at the time of the build or, // when possible, a release tag like "go1.3". func Version() string { - return theVersion + return sys.TheVersion } // GOOS is the running program's operating system target: // one of darwin, freebsd, linux, and so on. -const GOOS string = theGoos +const GOOS string = sys.GOOS // GOARCH is the running program's architecture target: // 386, amd64, arm, or s390x. -const GOARCH string = theGoarch +const GOARCH string = sys.GOARCH // GCCGOTOOLDIR is the Tool Dir for the gccgo build -const GCCGOTOOLDIR string = theGccgoToolDir +const GCCGOTOOLDIR string = sys.GccgoToolDir diff --git a/libgo/go/runtime/internal/sys/intrinsics.go b/libgo/go/runtime/internal/sys/intrinsics.go new file mode 100644 index 00000000000..f33209a8878 --- /dev/null +++ b/libgo/go/runtime/internal/sys/intrinsics.go @@ -0,0 +1,77 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sys + +//extern __builtin_ctz +func builtinCtz32(uint32) int32 + +//extern __builtin_ctzll +func builtinCtz64(uint64) int32 + +//go:nosplit + +// Ctz64 counts trailing (low-order) zeroes, +// and if all are zero, then 64. +func Ctz64(x uint64) uint64 { + if x == 0 { + return 64 + } + return uint64(builtinCtz64(x)) +} + +//go:nosplit + +// Ctz32 counts trailing (low-order) zeroes, +// and if all are zero, then 32. +func Ctz32(x uint32) uint32 { + if x == 0 { + return 32 + } + return uint32(builtinCtz32(x)) +} + +//go:nosplit + +// Ctz16 counts trailing (low-order) zeroes, +// and if all are zero, then 16. +func Ctz16(x uint16) uint16 { + if x == 0 { + return 16 + } + return uint16(builtinCtz32(uint32(x))) +} + +//go:nosplit + +// Ctz8 counts trailing (low-order) zeroes, +// and if all are zero, then 8. +func Ctz8(x uint8) uint8 { + if x == 0 { + return 8 + } + return uint8(builtinCtz32(uint32(x))) +} + +//extern __builtin_bswap64 +func bswap64(uint64) uint64 + +//go:nosplit + +// Bswap64 returns its input with byte order reversed +// 0x0102030405060708 -> 0x0807060504030201 +func Bswap64(x uint64) uint64 { + return bswap64(x) +} + +//extern __builtin_bswap32 +func bswap32(uint32) uint32 + +//go:nosplit + +// Bswap32 returns its input with byte order reversed +// 0x01020304 -> 0x04030201 +func Bswap32(x uint32) uint32 { + return bswap32(x) +} diff --git a/libgo/go/runtime/internal/sys/intrinsics_test.go b/libgo/go/runtime/internal/sys/intrinsics_test.go new file mode 100644 index 00000000000..097631bc1e5 --- /dev/null +++ b/libgo/go/runtime/internal/sys/intrinsics_test.go @@ -0,0 +1,54 @@ +package sys_test + +import ( + "runtime/internal/sys" + "testing" +) + +func TestCtz64(t *testing.T) { + for i := uint(0); i <= 64; i++ { + x := uint64(5) << i + if got := sys.Ctz64(x); got != uint64(i) { + t.Errorf("Ctz64(%d)=%d, want %d", x, got, i) + } + } +} +func TestCtz32(t *testing.T) { + for i := uint(0); i <= 32; i++ { + x := uint32(5) << i + if got := sys.Ctz32(x); got != uint32(i) { + t.Errorf("Ctz32(%d)=%d, want %d", x, got, i) + } + } +} +func TestCtz16(t *testing.T) { + for i := uint(0); i <= 16; i++ { + x := uint16(5) << i + if got := sys.Ctz16(x); got != uint16(i) { + t.Errorf("Ctz16(%d)=%d, want %d", x, got, i) + } + } +} +func TestCtz8(t *testing.T) { + for i := uint(0); i <= 8; i++ { + x := uint8(5) << i + if got := sys.Ctz8(x); got != uint8(i) { + t.Errorf("Ctz8(%d)=%d, want %d", x, got, i) + } + } +} + +func TestBswap64(t *testing.T) { + x := uint64(0x1122334455667788) + y := sys.Bswap64(x) + if y != 0x8877665544332211 { + t.Errorf("Bswap(%x)=%x, want 0x8877665544332211", x, y) + } +} +func TestBswap32(t *testing.T) { + x := uint32(0x11223344) + y := sys.Bswap32(x) + if y != 0x44332211 { + t.Errorf("Bswap(%x)=%x, want 0x44332211", x, y) + } +} diff --git a/libgo/go/runtime/internal/sys/stubs.go b/libgo/go/runtime/internal/sys/stubs.go new file mode 100644 index 00000000000..0a94502f32d --- /dev/null +++ b/libgo/go/runtime/internal/sys/stubs.go @@ -0,0 +1,11 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sys + +// Declarations for runtime services implemented in C or assembly. + +const PtrSize = 4 << (^uintptr(0) >> 63) // unsafe.Sizeof(uintptr(0)) but an ideal const +const RegSize = 4 << (^Uintreg(0) >> 63) // unsafe.Sizeof(uintreg(0)) but an ideal const +const SpAlign = 1*(1-GoarchArm64) + 16*GoarchArm64 // SP alignment: 1 normally, 16 for ARM64 diff --git a/libgo/go/runtime/internal/sys/sys.go b/libgo/go/runtime/internal/sys/sys.go new file mode 100644 index 00000000000..586a763717d --- /dev/null +++ b/libgo/go/runtime/internal/sys/sys.go @@ -0,0 +1,15 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// package sys contains system- and configuration- and architecture-specific +// constants used by the runtime. +package sys + +// The next line makes 'go generate' write the zgen_*.go files with +// per-OS and per-arch information, including constants +// named goos_$GOOS and goarch_$GOARCH for every +// known GOOS and GOARCH. The constant is 1 on the +// current system, 0 otherwise; multiplying by them is +// useful for defining GOOS- or GOARCH-specific constants. +//go:generate go run gengoos.go diff --git a/libgo/testsuite/Makefile.in b/libgo/testsuite/Makefile.in index ba04a504cfb..6c82a639d5f 100644 --- a/libgo/testsuite/Makefile.in +++ b/libgo/testsuite/Makefile.in @@ -79,6 +79,9 @@ am__can_run_installinfo = \ DEJATOOL = $(PACKAGE) RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir ACLOCAL = @ACLOCAL@ +ALLGOARCH = @ALLGOARCH@ +ALLGOARCHFAMILY = @ALLGOARCHFAMILY@ +ALLGOOS = @ALLGOOS@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ @@ -103,6 +106,14 @@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GOARCH = @GOARCH@ +GOARCH_BIGENDIAN = @GOARCH_BIGENDIAN@ +GOARCH_CACHELINESIZE = @GOARCH_CACHELINESIZE@ +GOARCH_FAMILY = @GOARCH_FAMILY@ +GOARCH_HUGEPAGESIZE = @GOARCH_HUGEPAGESIZE@ +GOARCH_INT64ALIGN = @GOARCH_INT64ALIGN@ +GOARCH_MINFRAMESIZE = @GOARCH_MINFRAMESIZE@ +GOARCH_PCQUANTUM = @GOARCH_PCQUANTUM@ +GOARCH_PHYSPAGESIZE = @GOARCH_PHYSPAGESIZE@ GOC = @GOC@ GOCFLAGS = @GOCFLAGS@ GOOS = @GOOS@