diff --git a/atlas-s390port.patch b/atlas-s390port.patch index 21503cf..b1d2507 100644 --- a/atlas-s390port.patch +++ b/atlas-s390port.patch @@ -1,234 +1,7 @@ --- - CONFIG/include/atlconf.h | 18 +++++++----- - CONFIG/src/Makefile | 5 +++ - CONFIG/src/SpewMakeInc.c | 5 +++ - CONFIG/src/atlcomp.txt | 50 ++++++++++++++++++++++++++++++++++++ - CONFIG/src/atlconf_misc.c | 2 + - CONFIG/src/backend/Make.ext | 2 + - CONFIG/src/backend/archinfo_linux.c | 12 ++++++++ CONFIG/src/backend/probe_gas_s390.S | 13 +++++++++ - CONFIG/src/probe_comp.c | 2 + - include/atlas_prefetch.h | 6 ++++ 10 files changed, 108 insertions(+), 7 deletions(-) -Index: b/CONFIG/include/atlconf.h -=================================================================== ---- a/CONFIG/include/atlconf.h -+++ b/CONFIG/include/atlconf.h -@@ -14,9 +14,9 @@ enum OSTYPE {OSOther=0, OSLinux, OSSunOS - OSWin9x, OSWinNT, OSHPUX, OSFreeBSD, OSOSX}; - #define OSIsWin(OS_) (((OS_) == OSWinNT) || ((OS_) == OSWin9x)) - --enum ARCHFAM {AFOther=0, AFPPC, AFSPARC, AFALPHA, AFX86, AFIA64, AFMIPS}; -+enum ARCHFAM {AFOther=0, AFPPC, AFSPARC, AFALPHA, AFX86, AFIA64, AFMIPS, AFS390}; - --#define NMACH 37 -+#define NMACH 42 - static char *machnam[NMACH] = - {"UNKNOWN", "POWER3", "POWER4", "POWER5", "PPCG4", "PPCG5", - "POWER6", "POWER7", -@@ -25,7 +25,8 @@ static char *machnam[NMACH] = - "Efficeon", "K7", "HAMMER", "AMD64K10h", "UNKNOWNx86", - "IA64Itan", "IA64Itan2", - "USI", "USII", "USIII", "USIV", "UST2", "UnknownUS", -- "MIPSR1xK", "MIPSICE9"}; -+ "MIPSR1xK", "MIPSICE9", -+ "IBMz900", "IBMz990", "IBMz9", "IBMz10", "IBMz196" }; - enum MACHTYPE {MACHOther, IbmPwr3, IbmPwr4, IbmPwr5, PPCG4, PPCG5, - IbmPwr6, IbmPwr7, - IntP5, IntP5MMX, IntPPRO, IntPII, IntPIII, IntPM, IntCoreS, -@@ -34,7 +35,8 @@ enum MACHTYPE {MACHOther, IbmPwr3, IbmPw - IA64Itan, IA64Itan2, - SunUSI, SunUSII, SunUSIII, SunUSIV, SunUST2, SunUSX, - MIPSR1xK, /* includes R10K, R12K, R14K, R16K */ -- MIPSICE9 /* SiCortex ICE9 -- like MIPS5K */ -+ MIPSICE9, /* SiCortex ICE9 -- like MIPS5K */ -+ IBMz900, IBMz990, IBMz9, IBMz10, IBMz196 /* s390(x) in Linux */ - }; - #define MachIsX86(mach_) \ - ( (mach_) >= IntP5 && (mach_) <= x86X ) -@@ -51,6 +53,8 @@ enum MACHTYPE {MACHOther, IbmPwr3, IbmPw - #endif - #define MachIsPPC(mach_) \ - ( (mach_) >= PPCG4 && (mach_) <= PPCG5 ) -+#define MachIsS390(mach_) \ -+ ( (mach_) >= IBMz900 && (mach_) <= IBMz196 ) - - static char *f2c_namestr[5] = {"UNKNOWN","Add_", "Add__", "NoChange", "UpCase"}; - static char *f2c_intstr[5] = -@@ -68,13 +72,13 @@ static char *ISAXNAM[NISA] = - {"", "AltiVec", "SSE3", "SSE2", "SSE1", "3DNow"}; - enum ISAEXT {ISA_None=0, ISA_AV, ISA_SSE3, ISA_SSE2, ISA_SSE1, ISA_3DNow}; - --#define NASMD 7 -+#define NASMD 8 - enum ASMDIA - {ASM_None=0, gas_x86_32, gas_x86_64, gas_sparc, gas_ppc, gas_parisc, -- gas_mips}; -+ gas_mips, gas_s390}; - static char *ASMNAM[NASMD] = - {"", "GAS_x8632", "GAS_x8664", "GAS_SPARC", "GAS_PPC", "GAS_PARISC", -- "GAS_MIPS"}; -+ "GAS_MIPS", "GAS_S390"}; - - - /* -Index: b/CONFIG/src/Makefile -=================================================================== ---- a/CONFIG/src/Makefile -+++ b/CONFIG/src/Makefile -@@ -177,6 +177,11 @@ IRun_GAS_x8632 : - $(MAKE) $(atlrun) atldir=$(mydir) exe=xprobe_gas_x8632 args="$(args)" \ - redir=config0.out - - cat config0.out -+IRun_GAS_S390 : -+ $(CC) $(CCFLAGS) -o xprobe_gas_s390 $(SRCdir)/backend/probe_this_asm.c $(SRCdir)/backend/probe_gas_s390.S -+ $(MAKE) $(atlrun) atldir=$(mydir) exe=xprobe_gas_s390 args="$(args)" \ -+ redir=config0.out -+ - cat config0.out - - IRunC2C : - - rm -f config0.out xc2c c2cslave.o -Index: b/CONFIG/src/SpewMakeInc.c -=================================================================== ---- a/CONFIG/src/SpewMakeInc.c -+++ b/CONFIG/src/SpewMakeInc.c -@@ -342,6 +342,9 @@ char *GetPtrbitsFlag(enum OSTYPE OS, enu - return(sp); - if (MachIsMIPS(arch)) - return((ptrbits == 64) ? "-mabi=64" : "-mabi=n32"); -+ if (MachIsS390(arch)) -+ return((ptrbits == 64) ? "-m64" : "-m31"); -+ - if (!CompIsGcc(comp)) - { - /* -@@ -671,6 +674,8 @@ main(int nargs, char **args) - if (OS == OSFreeBSD) - fprintf(fpout, "_fbsd"); - } -+ if (MachIsS390(mach)) -+ fprintf(fpout, ptrbits == 32 ? "-m31" : "-m64"); - fprintf(fpout, "\n F77SYSLIB = %s\n", f77lib ? f77lib : ""); - fprintf(fpout, " BC = $(ICC)\n"); - fprintf(fpout, " NCFLAGS = $(ICCFLAGS)\n"); -Index: b/CONFIG/src/atlcomp.txt -=================================================================== ---- a/CONFIG/src/atlcomp.txt -+++ b/CONFIG/src/atlcomp.txt -@@ -164,6 +164,56 @@ MACH=ALL OS=WinNT LVL=0 COMPS=f77 - MACH=P4,PM OS=WinNT LVL=0 COMPS=icc,dmc,smc,dkc,skc,xcc - 'icl' '-QxN -O3 -Qprec -fp:extended -fp:except -nologo -Oy' - # -+# IBM System z or zEnterprise -+# -+ -+# z900 or z800 -+MACH=IBMz900 OS=ALL LVL=1000 COMPS=f77 -+ 'gfortran' '-march=z900 -O3 -funroll-loops' -+MACH=IBMz900 OS=ALL LVL=1000 COMPS=smc,dmc,skc,dkc,icc,xcc -+ 'gcc' '-march=z900 -O3 -funroll-loops' -+ -+# z990 or z890 -+MACH=IBMz990 OS=ALL LVL=1000 COMPS=f77 -+ 'gfortran' '-march=z990 -O3 -funroll-loops' -+MACH=IBMz990 OS=ALL LVL=1000 COMPS=smc,dmc,skc,dkc,icc,xcc -+ 'gcc' '-march=z990 -O3 -funroll-loops' -+ -+# z9-EC z9-BC or z9-109 -+MACH=IBMz9 OS=ALL LVL=1000 COMPS=f77 -+ 'gfortran' '-march=z9-109 -O3 -funroll-loops' -+MACH=IBMz9 OS=ALL LVL=1000 COMPS=smc,dmc,skc,dkc,icc,xcc -+ 'gcc' '-march=z9-109 -O3 -funroll-loops' -+ -+# on z10 and z196 gcc emits prefetches which disturb cache size -+# detection and optimization. Therefore, we use fno-prefetch-loop-arrays -+# z10 -+MACH=IBMz10 OS=ALL LVL=1000 COMPS=f77 -+ 'gfortran' '-march=z10 -O3 -funroll-loops -fno-prefetch-loop-arrays' -+MACH=IBMz10 OS=ALL LVL=1000 COMPS=smc,dmc,skc,dkc,icc,xcc -+ 'gcc' '-march=z10 -O3 -funroll-loops -fno-prefetch-loop-arrays' -+ -+# z196. we also try to fallback to z10 and z9 for older compilers -+MACH=IBMz196 OS=ALL LVL=1000 COMPS=f77 -+ 'gfortran' '-march=z196 -O3 -funroll-loops -fno-prefetch-loop-arrays' -+MACH=IBMz196 OS=ALL LVL=800 COMPS=f77 -+ 'gfortran' '-march=z10 -O3 -funroll-loops -fno-prefetch-loop-arrays' -+MACH=IBMz196 OS=ALL LVL=600 COMPS=f77 -+ 'gfortran' '-march=z9-109 -O3 -funroll-loops' -+MACH=IBMz196 OS=ALL LVL=1000 COMPS=smc,dmc,skc,dkc,icc,xcc -+ 'gcc' '-march=z196 -O3 -funroll-loops -fno-prefetch-loop-arrays' -+MACH=IBMz196 OS=ALL LVL=800 COMPS=smc,dmc,skc,dkc,icc,xcc -+ 'gcc' '-march=z10 -O3 -funroll-loops -fno-prefetch-loop-arrays' -+MACH=IBMz196 OS=ALL LVL=600 COMPS=smc,dmc,skc,dkc,icc,xcc -+ 'gcc' '-march=z9-109 -O3 -funroll-loops' -+ -+# ALL march options failed, go back to conservative defaults -+MACH=IBMz900,IBMz990,IBMz9,IBMz10,IBMz196 OS=ALL LVL=500 COMPS=f77 -+ 'gfortran' '-O3 -funroll-loops' -+MACH=IBMz900,IBMz990,IBMz9,IBMz10,IBMz196 OS=ALL LVL=500 COMPS=smc,dmc,skc,dkc,icc,xcc -+ 'gcc' '-O3 -funroll-loops' -+ -+# - # Generic defaults - # - MACH=ALL OS=ALL LVL=5 COMPS=icc,smc,dmc,skc,dkc,xcc -Index: b/CONFIG/src/atlconf_misc.c -=================================================================== ---- a/CONFIG/src/atlconf_misc.c -+++ b/CONFIG/src/atlconf_misc.c -@@ -480,6 +480,7 @@ enum ARCHFAM ProbeArchFam(char *targ) - else if (strstr(res, "alpha")) fam = AFALPHA; - else if (strstr(res, "ia64")) fam = AFIA64; - else if (strstr(res, "mips")) fam = AFMIPS; -+ else if (strstr(res, "s390")) fam = AFS390; - else if ( strstr(res, "i686") || strstr(res, "i586") || - strstr(res, "i486") || strstr(res, "i386") || - strstr(res, "x86") || strstr(res, "x86_64") ) fam = AFX86; -@@ -501,6 +502,7 @@ enum ARCHFAM ProbeArchFam(char *targ) - strstr(res, "i486") || strstr(res, "i386") || - strstr(res, "x86_64") ) fam = AFX86; - else if (strstr(res, "mips")) fam = AFMIPS; -+ else if (strstr(res, "s390")) fam = AFS390; - } - } - return(fam); -Index: b/CONFIG/src/backend/Make.ext -=================================================================== ---- a/CONFIG/src/backend/Make.ext -+++ b/CONFIG/src/backend/Make.ext -@@ -43,6 +43,8 @@ probe_gas_parisc.S : $(basf) - $(extC) -b $(basf) -o probe_gas_parisc.S rout=probe_gas_parisc.S - probe_gas_mips.S : $(basf) - $(extC) -b $(basf) -o probe_gas_mips.S rout=probe_gas_mips.S -+probe_gas_s390.S : $(basf) -+ $(extC) -b $(basf) -o probe_gas_s390.S rout=probe_gas_s390.S - probe_SSE3.S : $(basf) - $(extC) -b $(basf) -o probe_SSE3.S rout=probe_SSE3.S - probe_SSE2.S : $(basf) -Index: b/CONFIG/src/backend/archinfo_linux.c -=================================================================== ---- a/CONFIG/src/backend/archinfo_linux.c -+++ b/CONFIG/src/backend/archinfo_linux.c -@@ -193,6 +193,18 @@ enum MACHTYPE ProbeArch() - } - #endif - break; -+ case AFS390: -+ if ( !CmndOneLine(NULL, "cat /proc/cpuinfo | fgrep \"processor \"", res) ) -+ { -+ if (strstr(res, "2064") || strstr(res, "2066")) mach = IBMz900; -+ else if (strstr(res, "2084") || strstr(res, "2086")) mach = IBMz990; -+ else if (strstr(res, "2094") || strstr(res, "2096")) mach = IBMz9; -+ else if (strstr(res, "2097") || strstr(res, "2098")) mach = IBMz10; -+ /* we consider anything else to be a z196 or later */ -+ else mach = IBMz196; -+ } -+ break; -+ - default: - #if 0 - if (!CmndOneLine(NULL, "fgrep 'cpu family' /proc/cpuinfo", res)) Index: b/CONFIG/src/backend/probe_gas_s390.S =================================================================== --- /dev/null @@ -247,33 +20,4 @@ Index: b/CONFIG/src/backend/probe_gas_s390.S + ar r2,r3 + ar r2,r3 + br r14 -Index: b/CONFIG/src/probe_comp.c -=================================================================== ---- a/CONFIG/src/probe_comp.c -+++ b/CONFIG/src/probe_comp.c -@@ -509,6 +509,8 @@ char *GetPtrbitsFlag(enum OSTYPE OS, enu - return(sp); - if (MachIsMIPS(arch)) - return((ptrbits == 64) ? "-mabi=64" : "-mabi=n32"); -+ if (MachIsS390(arch)) -+ return((ptrbits == 64) ? "-m64" : "-m31"); - if (!CompIsGcc(comp)) - { - /* -Index: b/include/atlas_prefetch.h -=================================================================== ---- a/include/atlas_prefetch.h -+++ b/include/atlas_prefetch.h -@@ -149,6 +149,12 @@ - #define ATL_GOT_L1PREFETCH - #define ATL_L1LS 32 - #define ATL_L2LS 64 -+#elif defined(ATL_ARCH_IBMz196) || defined(ATL_ARCH_IBMz10) -+ #define ATL_pfl1R(mem) __builtin_prefetch(mem, 0, 3) -+ #define ATL_pfl1W(mem) __builtin_prefetch(mem, 1, 3) -+ #define ATL_GOT_L1PREFETCH -+ #define ATL_L1LS 256 -+ #define ATL_L2LS 256 - #elif defined(__GNUC__) /* last ditch, use gcc predefined func */ - #define ATL_pfl1R(mem) __builtin_prefetch(mem, 0, 3) - #define ATL_pfl1W(mem) __builtin_prefetch(mem, 1, 3) + diff --git a/atlas.spec b/atlas.spec index 2482e40..3e172d2 100644 --- a/atlas.spec +++ b/atlas.spec @@ -5,7 +5,7 @@ Version: 3.10.0 %if "%{?enable_native_atlas}" != "0" %define dist .native %endif -Release: 1%{?dist} +Release: 2%{?dist} Summary: Automatically Tuned Linear Algebra Software Group: System Environment/Libraries @@ -771,6 +771,9 @@ fi %endif %changelog +* Wed Mar 13 2013 Frantisek Kluknavsky - 3.10.0-2 +- s390 patch partially accepted upstream + * Thu Nov 15 2012 Frantisek Kluknavsky - 3.10.0-1 - Rebase to 3.10.0 - Dropped x86_64-SSE2, ix86-SSE1, ix86-3DNow (uncompilable).