[atlas] Add s390 patch

Deji Akingunola deji at fedoraproject.org
Wed Jun 15 20:22:57 UTC 2011


commit c479c806d1a3eec14b12128c0104182a06a4cb3a
Author: Deji Akingunola <dakingun at mail.com>
Date:   Wed Jun 15 16:24:36 2011 -0400

    Add s390 patch

 atlas-s390port.patch |  279 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 279 insertions(+), 0 deletions(-)
---
diff --git a/atlas-s390port.patch b/atlas-s390port.patch
new file mode 100644
index 0000000..21503cf
--- /dev/null
+++ b/atlas-s390port.patch
@@ -0,0 +1,279 @@
+---
+ 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
++++ b/CONFIG/src/backend/probe_gas_s390.S
+@@ -0,0 +1,13 @@
++#define ATL_GAS_PPC
++#include "atlas_asm.h"
++/*
++ * Linux S390 assembler for:
++ * int asm_probe(int i)
++ * RETURNS: i*3
++ */
++.globl ATL_asmdecor(asm_probe)
++ATL_asmdecor(asm_probe):
++	lr	r3,r2
++	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)


More information about the scm-commits mailing list