Bug#766695: atlas: add ppc64el support

Mauricio Faria de Oliveira mauricfo at linux.vnet.ibm.com
Tue Oct 28 12:10:48 UTC 2014


Hi Sébastien,

Please disregard the previous e-mails.  I believe your point below
is now addressed.

On 10/25/2014 03:39 PM, Sébastien Villemot wrote:
> Also, I really dislike the kludge consisting in modifying the quilt
> series file. Isn't it rather possible to use a standard patch (applied
> on all arches) based on #ifdefs?

Yes. The attached patch now does that. Is it in a better position for
starting a conversation w/ the Release Team?

I reviewed the patches, and all - except for one - were using cpp
conditionals (#if/#else/#endif) properly. Their changes are trivial
and small, well localized to the minimal changes required to powerpc.

	1)
	++   #if defined(__powerpc64__) && (__BYTE_ORDER__ == 
__ORDER_LITTLE_ENDIAN__)
	++      ...
	++   #endif

	2)	
	+-      #if defined(ATL_USE64BITS)
	++      #if defined(ATL_USE64BITS) && _CALL_ELF != 2

	3)
	++      #if _CALL_ELF == 2
	++      /* ABIv2 */
	++      ...
	++      #else
	++      /* ABIv1 */
	+ 	...
	++      #endif


That exception was a patch removing some optimized cases from lists.
I replaced it with another patch that uses #if/#else/#endif per-arch,
leaving the original source code as-is on non-ppc64el arches.

4)
	++#if defined(__powerpc64__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
	++/* FIXME: port to little-endian powerpc64. */
	++#else
	++
	+ ...
	++
	++#endif	/* little-endian powerpc64 */

That said, AFAICT, the changes do not pose any problem to other
powerpc-based ports.

I could successfully build atlas on ppc64el with it, and will
perform/report of builds on powerpc and ppc64 shortly.

-- 
Mauricio Faria de Oliveira
IBM Linux Technology Center
-------------- next part --------------
diff -Nru atlas-3.10.2/debian/archdefs/README atlas-3.10.2/debian/archdefs/README
--- atlas-3.10.2/debian/archdefs/README	2014-07-12 07:23:26.000000000 -0300
+++ atlas-3.10.2/debian/archdefs/README	2014-10-28 07:46:40.000000000 -0200
@@ -16,5 +16,6 @@
 - mips: ATLAS 3.10.1 / gabrielli.debian.org / sid / 2013-07-27
 - mipsel: ATLAS 3.10.1 / eder.debian.org / sid / 2013-06-07
 - powerpc: ATLAS 3.10.1 / partch.debian.org / sid / 2013-06-06
+- ppc64el: ATLAS 3.10.2 / pastel.debian.net / sid / 2014-10-24
 - s390x: ATLAS 3.10.1 / zelenka.debian.org / sid / 2013-06-06
 - sparc: ATLAS 3.10.1 / smetana.debian.org / wheezy / 2013-06-06
diff -Nru atlas-3.10.2/debian/changelog atlas-3.10.2/debian/changelog
--- atlas-3.10.2/debian/changelog	2014-10-15 16:35:41.000000000 -0300
+++ atlas-3.10.2/debian/changelog	2014-10-28 09:28:17.000000000 -0200
@@ -1,3 +1,17 @@
+atlas (3.10.2-4ppc64el2) UNRELEASED; urgency=medium
+
+  * Add ppc64el support (work in progress)
+    - debian/patches/ (thanks, Michael Normand et al).
+      - atlas-new_archdef_for_ppc64le.patch
+      - atlas.3.10.2-ppc64le_abiv2_step2.patch
+      - atlas.3.10.2-ppc64le_abiv2_step3.patch
+      - atlas.3.10.2-ppc64le_ifdef_files_with_lvx.patch
+    - debian/archdefs/ppc64el/GENERIC64LE.tar.bz2: archdefs/timings,
+      currently the same file for POWER7, POWER7+ and POWER8 systems.
+    - debian/archdefs/README: updated accordingly.
+
+ -- Mauricio Faria de Oliveira <mauricfo at linux.vnet.ibm.com>  Thu, 28 Oct 2014 09:28:00 -0200
+
 atlas (3.10.2-4) unstable; urgency=medium
 
   [ Alastair McKinstry ]
diff -Nru atlas-3.10.2/debian/patches/atlas-new_archdef_for_ppc64le.patch atlas-3.10.2/debian/patches/atlas-new_archdef_for_ppc64le.patch
--- atlas-3.10.2/debian/patches/atlas-new_archdef_for_ppc64le.patch	1969-12-31 21:00:00.000000000 -0300
+++ atlas-3.10.2/debian/patches/atlas-new_archdef_for_ppc64le.patch	2014-10-28 07:46:40.000000000 -0200
@@ -0,0 +1,38 @@
+Origin: https://bugzilla.redhat.com/show_bug.cgi?id=1080073#c43
+Forwarded: http://sourceforge.net/p/math-atlas/patches/66/
+Description: Append 'LE' to archdef on little-endian PowerPC64
+ For more details, see:
+ https://bugzilla.redhat.com/show_bug.cgi?id=1080073#c40
+Last-Update: 2014-10-24
+Subject: atlas new archdef for ppc64le
+From: Michel Normand <normand at linux.vnet.ibm.com>
+Date: Sun, 13 Jun 2014 18:02:47 +0200
+
+Need to define different archdef names
+for ppc64 (that is Big Endian) and ppc64le (that is Little Endian).
+This is already done upstream in atlas 3.11.30 with issue
+https://sourceforge.net/p/math-atlas/patches/66/
+
+Required at least as long as I need the bypass of
+atlas.3.10.2-ppc64le_do_not_use_files_with_lvx.patch
+
+Signed-off-by: Michel Normand <normand at linux.vnet.ibm.com>
+---
+ CONFIG/src/SpewMakeInc.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+Index: ATLAS/CONFIG/src/SpewMakeInc.c
+===================================================================
+--- ATLAS.orig/CONFIG/src/SpewMakeInc.c
++++ ATLAS/CONFIG/src/SpewMakeInc.c
+@@ -542,6 +542,10 @@ int main(int nargs, char **args)
+    fprintf(fpout, "#  -------------------------------------------------\n");
+    fprintf(fpout, "   ARCH = %s", machnam[mach]);
+    fprintf(fpout, "%d", ptrbits);
++   /* for ppc64le archi add 'LE' characters */
++   #if defined(__powerpc64__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
++      fprintf(fpout, "%s", "LE");
++   #endif
+    if (ISAX)
+       fprintf(fpout, "%s", ISAXNAM[ISAX]);
+    if (!USEIEEE)
diff -Nru atlas-3.10.2/debian/patches/atlas.3.10.2-ppc64le_abiv2_step2.patch atlas-3.10.2/debian/patches/atlas.3.10.2-ppc64le_abiv2_step2.patch
--- atlas-3.10.2/debian/patches/atlas.3.10.2-ppc64le_abiv2_step2.patch	1969-12-31 21:00:00.000000000 -0300
+++ atlas-3.10.2/debian/patches/atlas.3.10.2-ppc64le_abiv2_step2.patch	2014-10-28 07:46:40.000000000 -0200
@@ -0,0 +1,70 @@
+Origin: http://sourceforge.net/p/math-atlas/patches/65/#3cb1
+Forwarded: http://sourceforge.net/p/math-atlas/patches/65/
+Description: ELFv2 ABI changes (2/3)
+ For more details, see:
+ https://bugzilla.redhat.com/show_bug.cgi?id=1080073#c40
+Last-Update: 2014-10-24
+From: Michel Normand <normand at linux.vnet.ibm.com>
+Subject: atlas.3.10.2 ppc64le abiv2 step2 patch
+Date: Mon, 28 Jul 2014 04:29:05 -0400
+
+atlas.ppc64le abiv2 step2 complete the changes already present in atlas 3.10.2
+* still some files with opd ABI V1 to be disabled for ABI V2
+ tune/blas/gemm/CASES/ATL_dmm4x4x32_ppc.c
+ tune/blas/gemm/CASES/ATL_dmm4x4x80_ppc.c
+ tune/blas/gemm/CASES/ATL_smm4x4x128_av.c
+
+Signed-off-by: Michel Normand <normand at linux.vnet.ibm.com>
+---
+ tune/blas/gemm/CASES/ATL_dmm4x4x32_ppc.c |    2 +-
+ tune/blas/gemm/CASES/ATL_dmm4x4x80_ppc.c |    3 ++-
+ tune/blas/gemm/CASES/ATL_smm4x4x128_av.c |    2 +-
+ 3 files changed, 4 insertions(+), 3 deletions(-)
+
+Index: ATLAS/tune/blas/gemm/CASES/ATL_dmm4x4x32_ppc.c
+===================================================================
+--- ATLAS.orig/tune/blas/gemm/CASES/ATL_dmm4x4x32_ppc.c
++++ ATLAS/tune/blas/gemm/CASES/ATL_dmm4x4x32_ppc.c
+@@ -268,7 +268,7 @@ Mjoin(.,ATL_USERMM):
+ 	.globl  Mjoin(_,ATL_USERMM)
+ Mjoin(_,ATL_USERMM):
+    #else
+-      #if defined(ATL_USE64BITS)
++      #if defined(ATL_USE64BITS) && _CALL_ELF != 2
+ /*
+  *      Official Program Descripter section, seg fault w/o it on Linux/PPC64
+  */
+Index: ATLAS/tune/blas/gemm/CASES/ATL_dmm4x4x80_ppc.c
+===================================================================
+--- ATLAS.orig/tune/blas/gemm/CASES/ATL_dmm4x4x80_ppc.c
++++ ATLAS/tune/blas/gemm/CASES/ATL_dmm4x4x80_ppc.c
+@@ -202,7 +202,7 @@ Mjoin(.,ATL_USERMM):
+ 	.globl  Mjoin(_,ATL_USERMM)
+ Mjoin(_,ATL_USERMM):
+    #else
+-      #if defined(ATL_USE64BITS)
++      #if defined(ATL_USE64BITS) && _CALL_ELF != 2
+ /*
+  *      Official Program Descripter section, seg fault w/o it on Linux/PPC64
+  */
+@@ -257,6 +257,7 @@ ATL_USERMM:
+    #endif
+ #endif
+ 
++
+ #if defined (ATL_USE64BITS)
+         ld      pC0, 120(r1)
+         ld      incCn, 128(r1)
+Index: ATLAS/tune/blas/gemm/CASES/ATL_smm4x4x128_av.c
+===================================================================
+--- ATLAS.orig/tune/blas/gemm/CASES/ATL_smm4x4x128_av.c
++++ ATLAS/tune/blas/gemm/CASES/ATL_smm4x4x128_av.c
+@@ -196,7 +196,7 @@ void ATL_USERMM(const int M, const int N
+ 	.globl  Mjoin(_,ATL_USERMM)
+ Mjoin(_,ATL_USERMM):
+ #else
+-   #if defined(ATL_USE64BITS)
++   #if defined(ATL_USE64BITS) && _CALL_ELF != 2
+ /*
+  *      Official Program Descripter section, seg fault w/o it on Linux/PPC64
+  */
diff -Nru atlas-3.10.2/debian/patches/atlas.3.10.2-ppc64le_abiv2_step3.patch atlas-3.10.2/debian/patches/atlas.3.10.2-ppc64le_abiv2_step3.patch
--- atlas-3.10.2/debian/patches/atlas.3.10.2-ppc64le_abiv2_step3.patch	1969-12-31 21:00:00.000000000 -0300
+++ atlas-3.10.2/debian/patches/atlas.3.10.2-ppc64le_abiv2_step3.patch	2014-10-28 07:46:40.000000000 -0200
@@ -0,0 +1,191 @@
+Origin: http://sourceforge.net/p/math-atlas/patches/65/#3cb1
+Forwarded: http://sourceforge.net/p/math-atlas/patches/65/
+Description: ELFv2 ABI changes (3/3)
+ For more details, see:
+ https://bugzilla.redhat.com/show_bug.cgi?id=1080073#c40
+Last-Update: 2014-10-24
+From: Michel Normand <normand at linux.vnet.ibm.com>
+Subject: atlas.3.10.2 ppc64le abiv2 step3
+Date: Tue, 29 Jul 2014 15:33:18 +0200
+
+atlas.3.10.2 ppc64le abiv2 step3
+* change offsets of parameters read from stack to avoid some segfaults.
+  (values changes 120 => 104 and 128 => 112 identified by gdb investigation)
+
+Despite this step3 patch there are two Remaining problems for ppc64le archi:
+* TODO: still have seg-faults in console during build/check
+but is not critical (without make check) and rpm are generated on fedora.
+unable to investigate because of problem tracked by issue 950
+https://sourceforge.net/p/math-atlas/support-requests/950/
+
+* TODO: make check failure because xsslvtst execution failure
+related to vector assembly code that assumes big-endian env
+as written in ATL_cmm4x4x128_av.c and ATL_smm4x4x128_av.c.
+Would need significant work to support little-endian as per
+endianess comments of all PowerPC vector instructions in:
+https://www-01.ibm.com/chips/techlib/techlib.nsf/techdocs/FBFA164F824370F987256D6A006F424D/$file/vector_simd_pem.ppc.2005AUG23.pdf
+
+Signed-off-by: Michel Normand <normand at linux.vnet.ibm.com>
+---
+ tune/blas/gemm/CASES/ATL_cmm4x4x128_av.c |    7 +++++++
+ tune/blas/gemm/CASES/ATL_dmm4x4x2pf_av.c |    7 +++++++
+ tune/blas/gemm/CASES/ATL_dmm4x4x32_ppc.c |    7 +++++++
+ tune/blas/gemm/CASES/ATL_dmm4x4x80_ppc.c |   17 ++++++++++++++++-
+ tune/blas/gemm/CASES/ATL_smm4x4x128_av.c |   21 +++++++++++++++++++++
+ 5 files changed, 58 insertions(+), 1 deletion(-)
+
+Index: ATLAS/tune/blas/gemm/CASES/ATL_dmm4x4x2pf_av.c
+===================================================================
+--- ATLAS.orig/tune/blas/gemm/CASES/ATL_dmm4x4x2pf_av.c
++++ ATLAS/tune/blas/gemm/CASES/ATL_dmm4x4x2pf_av.c
+@@ -405,8 +405,15 @@ Mjoin(_,ATL_USERMM):
+  */
+ #ifdef ATL_GAS_LINUX_PPC
+    #ifdef ATL_USE64BITS
++      #if _CALL_ELF == 2
++      /* ABIv2 */
++        ld      pC0, 104(r1)
++        ld      incCn, 112(r1)
++      #else
++      /* ABIv1 */
+ 	ld 	pC0, 120(r1)
+ 	ld 	incCn, 128(r1)
++      #endif
+    #else
+ 	lwz	incCn, FSIZE+8(r1)
+    #endif
+Index: ATLAS/tune/blas/gemm/CASES/ATL_dmm4x4x32_ppc.c
+===================================================================
+--- ATLAS.orig/tune/blas/gemm/CASES/ATL_dmm4x4x32_ppc.c
++++ ATLAS/tune/blas/gemm/CASES/ATL_dmm4x4x32_ppc.c
+@@ -324,8 +324,15 @@ ATL_USERMM:
+ #endif
+ 
+ #ifdef ATL_USE64BITS
++#if _CALL_ELF == 2
++/* ABIv2 */
++        ld      pC0, 104(r1)
++        ld      incCn, 112(r1)
++#else
++/* ABIv1 */
+         ld      pC0, 120(r1)
+         ld      incCn, 128(r1)
++#endif
+ #elif defined(ATL_AS_OSX_PPC) || defined(ATL_AS_AIX_PPC)
+         lwz     pC0, 68(r1)
+         lwz     incCn,  72(r1)
+Index: ATLAS/tune/blas/gemm/CASES/ATL_dmm4x4x80_ppc.c
+===================================================================
+--- ATLAS.orig/tune/blas/gemm/CASES/ATL_dmm4x4x80_ppc.c
++++ ATLAS/tune/blas/gemm/CASES/ATL_dmm4x4x80_ppc.c
+@@ -170,13 +170,21 @@ void ATL_USERMM(const int M, const int N
+                 const TYPE beta, TYPE *C, const int ldc)
+                                   (r10)    8(r1)
+ *******************************************************************************
+-64 bit ABIs:
++64 bit ABIv1s:
+                          r3           r4           r5             r6/f1
+ void ATL_USERMM(const int M, const int N, const int K, const TYPE alpha,
+                            r7             r8             r9            r10
+                 const TYPE *A, const int lda, const TYPE *B, const int ldb,
+                              f2   120(r1)        128(r1)
+                 const TYPE beta, TYPE *C, const int ldc)
++
++64 bit ABIv2s:
++                         r3           r4           r5             r6/f1
++void ATL_USERMM(const int M, const int N, const int K, const TYPE alpha,
++                           r7             r8             r9            r10
++                const TYPE *A, const int lda, const TYPE *B, const int ldb,
++                             f2   104(r1)        112(r1)
++                const TYPE beta, TYPE *C, const int ldc)
+ #endif
+ #ifdef ATL_AS_AIX_PPC
+         .csect .text[PR]
+@@ -259,8 +267,15 @@ ATL_USERMM:
+ 
+ 
+ #if defined (ATL_USE64BITS)
++#if _CALL_ELF == 2
++/* ABIv2 */
++        ld      pC0, 104(r1)
++        ld      incCn, 112(r1)
++#else
++/* ABIv1 */
+         ld      pC0, 120(r1)
+         ld      incCn, 128(r1)
++#endif
+ #elif defined(ATL_AS_OSX_PPC) || defined(ATL_AS_AIX_PPC)
+         lwz     pC0, 68(r1)
+         lwz     incCn,  72(r1)
+Index: ATLAS/tune/blas/gemm/CASES/ATL_smm4x4x128_av.c
+===================================================================
+--- ATLAS.orig/tune/blas/gemm/CASES/ATL_smm4x4x128_av.c
++++ ATLAS/tune/blas/gemm/CASES/ATL_smm4x4x128_av.c
+@@ -221,8 +221,15 @@ ATL_USERMM:
+  *      kernel instead
+  */
+ #if defined (ATL_USE64BITS)
++#if _CALL_ELF == 2
++/* ABIv2 */
++        ld      r10, 104(r1)
++        ld      r5, 112(r1)
++#else
++/* ABIv1 */
+         ld      r10, 120(r1)
+         ld      r5, 128(r1)
++#endif
+ #elif defined(ATL_AS_OSX_PPC)
+         lwz     r10, 60(r1)
+         lwz     r5,  64(r1)
+@@ -285,8 +292,15 @@ ATL_USERMM:
+         eqv     r0, r0, r0      /* all 1s */
+         ATL_WriteVRSAVE(r0)     /* signal we use all vector regs */
+ #if defined (ATL_USE64BITS)
++#if _CALL_ELF == 2
++        /* ABIv2 */
++        ld      pC0, FSIZE+104(r1)
++        ld      ldc, FSIZE+112(r1)
++#else
++        /* ABIv1 */
+         ld      pC0, FSIZE+120(r1)
+         ld      ldc, FSIZE+128(r1)
++#endif
+ #elif defined(ATL_AS_OSX_PPC)
+         lwz     pC0, FSIZE+60(r1)
+         lwz     ldc,  FSIZE+64(r1)
+@@ -4258,8 +4272,15 @@ UNALIGNED_C:
+         eqv     r0, r0, r0      /* all 1s */
+         ATL_WriteVRSAVE(r0)     /* signal we use all vector regs */
+ #if defined (ATL_USE64BITS)
++#if _CALL_ELF == 2
++        /* ABIv2 */
++        ld      pC0, FSIZE+104(r1)
++        ld      ldc, FSIZE+112(r1)
++#else
++        /* ABIv1 */
+         ld      pC0, FSIZE+120(r1)
+         ld      ldc, FSIZE+128(r1)
++#endif
+ #elif defined(ATL_AS_OSX_PPC)
+         lwz     pC0, FSIZE+60(r1)
+         lwz     ldc,  FSIZE+64(r1)
+Index: ATLAS/tune/blas/gemm/CASES/ATL_cmm4x4x128_av.c
+===================================================================
+--- ATLAS.orig/tune/blas/gemm/CASES/ATL_cmm4x4x128_av.c
++++ ATLAS/tune/blas/gemm/CASES/ATL_cmm4x4x128_av.c
+@@ -258,8 +258,15 @@ ATL_USERMM:
+         eqv     r0, r0, r0      /* all 1s */
+         ATL_WriteVRSAVE(r0)     /* signal we use all vector regs */
+ #if defined (ATL_USE64BITS)
++#if _CALL_ELF == 2
++/* ABIv2 */
++        ld      pC0, FSIZE+104(r1)
++        ld      ldc, FSIZE+112(r1)
++#else
++/* ABIv1 */
+         ld      pC0, FSIZE+120(r1)
+         ld      ldc, FSIZE+128(r1)
++#endif
+ #elif defined(ATL_AS_OSX_PPC)
+         lwz     pC0, FSIZE+60(r1)
+         lwz     ldc,  FSIZE+64(r1)
diff -Nru atlas-3.10.2/debian/patches/atlas.3.10.2-ppc64le_ifdef_files_with_lvx.patch atlas-3.10.2/debian/patches/atlas.3.10.2-ppc64le_ifdef_files_with_lvx.patch
--- atlas-3.10.2/debian/patches/atlas.3.10.2-ppc64le_ifdef_files_with_lvx.patch	1969-12-31 21:00:00.000000000 -0300
+++ atlas-3.10.2/debian/patches/atlas.3.10.2-ppc64le_ifdef_files_with_lvx.patch	2014-10-28 09:24:53.000000000 -0200
@@ -0,0 +1,123 @@
+Description: Skip optimizations for big-endian PowerPC.
+ Some of the existing optimized files/cases for PowerPC
+ contain assembly instructions with implicit big-endian
+ behavior - thus incorrect for the little-endian mode -
+ incurring tests failures during the build (i.e., FTBFS).
+ This is being worked on; this is the workaround for now.
+ .
+ Note: this is an alternative for Michael Normand's patch
+ 'atlas.3.10.2-ppc64le_do_not_use_files_with_lvx.patch',
+ in order not to touch file lists/indexes, but only C 
+ source code, so the C preprocessor can avoid code per-arch.
+ .
+ For more details, see:
+ https://bugzilla.redhat.com/show_bug.cgi?id=1080073#c40
+Author: Mauricio Faria de Oliveira <mauricfo at linux.vnet.ibm.com>
+Forwarded: http://sourceforge.net/p/math-atlas/patches/65/
+Last-Update: 2014-10-28
+
+Index: atlas-3.10.2/tune/blas/gemm/CASES/ATL_cmm4x4x128_av.c
+===================================================================
+--- atlas-3.10.2.orig/tune/blas/gemm/CASES/ATL_cmm4x4x128_av.c
++++ atlas-3.10.2/tune/blas/gemm/CASES/ATL_cmm4x4x128_av.c
+@@ -7,6 +7,11 @@
+  * meaning that this kernel will do an extra store of vector C to memory
+  * for load by the scalar FPU.
+  */
++
++#if defined(__powerpc64__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
++/* FIXME: port to little-endian powerpc64. */
++#else
++
+ #include "atlas_asm.h"
+ 
+ #if !defined(ATL_AS_OSX_PPC) && !defined(ATL_GAS_LINUX_PPC)
+@@ -4264,3 +4269,5 @@ MPEELEDU:
+         ld      r3, FST(r1)
+         addi    r1, r1, FSIZE
+         blr
++
++#endif	/* little-endian powerpc64 */
+Index: atlas-3.10.2/tune/blas/gemm/CASES/ATL_dmm4x4x80_ppc.c
+===================================================================
+--- atlas-3.10.2.orig/tune/blas/gemm/CASES/ATL_dmm4x4x80_ppc.c
++++ atlas-3.10.2/tune/blas/gemm/CASES/ATL_dmm4x4x80_ppc.c
+@@ -28,6 +28,10 @@
+  *
+  */
+ 
++#if defined(__powerpc64__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
++/* FIXME: port to little-endian powerpc64. */
++#else
++
+ #include "atlas_asm.h"
+ /*
+  * NOTE: this kernel written by R. Clint Whaley, but it uses two key ideas
+@@ -7502,3 +7506,5 @@ DONE:
+         addi    r1, r1, FSIZE
+ #endif
+         blr
++
++#endif  /* little-endian powerpc64 */
+Index: atlas-3.10.2/tune/blas/gemm/CASES/ATL_dmm8x4x2_vsx.c
+===================================================================
+--- atlas-3.10.2.orig/tune/blas/gemm/CASES/ATL_dmm8x4x2_vsx.c
++++ atlas-3.10.2/tune/blas/gemm/CASES/ATL_dmm8x4x2_vsx.c
+@@ -27,6 +27,10 @@
+  *
+  */
+ 
++#if defined(__powerpc64__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
++/* FIXME: port to little-endian powerpc64. */
++#else
++
+ #include <altivec.h>
+ #include "atlas_misc.h"
+ #include "atlas_prefetch.h"               /* ATL_pfl1R, ATL_pfl1W */
+@@ -651,3 +655,5 @@ void ATL_USERMM
+         }
+     }
+ }
++
++#endif  /* little-endian powerpc64 */
+Index: atlas-3.10.2/tune/blas/gemm/CASES/ATL_smm4x4x128_av.c
+===================================================================
+--- atlas-3.10.2.orig/tune/blas/gemm/CASES/ATL_smm4x4x128_av.c
++++ atlas-3.10.2/tune/blas/gemm/CASES/ATL_smm4x4x128_av.c
+@@ -28,6 +28,9 @@
+  *
+  */
+ 
++#if defined(__powerpc64__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
++/* FIXME: port to little-endian powerpc64. */
++#else
+ 
+ #include "atlas_asm.h"
+ 
+@@ -8361,3 +8364,5 @@ MPEELEDU:
+         ld      r3, FST(r1)
+         addi    r1, r1, FSIZE
+         blr
++
++#endif  /* little-endian powerpc64 */
+Index: atlas-3.10.2/tune/blas/gemm/CASES/ATL_smm8x2x4_av.c
+===================================================================
+--- atlas-3.10.2.orig/tune/blas/gemm/CASES/ATL_smm8x2x4_av.c
++++ atlas-3.10.2/tune/blas/gemm/CASES/ATL_smm8x2x4_av.c
+@@ -27,6 +27,10 @@
+  *
+  */
+ 
++#if defined(__powerpc64__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
++/* FIXME: port to little-endian powerpc64. */
++#else
++
+ #include <altivec.h>
+ #include "atlas_misc.h"
+ #include "atlas_prefetch.h"               /* ATL_pfl1R, ATL_pfl1W */
+@@ -326,3 +330,5 @@ void ATL_USERMM
+         }
+     }
+ }
++
++#endif  /* little-endian powerpc64 */
diff -Nru atlas-3.10.2/debian/patches/series atlas-3.10.2/debian/patches/series
--- atlas-3.10.2/debian/patches/series	2014-07-12 07:47:33.000000000 -0300
+++ atlas-3.10.2/debian/patches/series	2014-10-28 09:24:37.000000000 -0200
@@ -13,3 +13,7 @@
 armhf.diff
 cpu-throttling-check.diff
 generic.diff
+atlas-new_archdef_for_ppc64le.patch
+atlas.3.10.2-ppc64le_abiv2_step2.patch
+atlas.3.10.2-ppc64le_abiv2_step3.patch
+atlas.3.10.2-ppc64le_ifdef_files_with_lvx.patch
diff -Nru atlas-3.10.2/debian/source/include-binaries atlas-3.10.2/debian/source/include-binaries
--- atlas-3.10.2/debian/source/include-binaries	2014-07-12 07:23:26.000000000 -0300
+++ atlas-3.10.2/debian/source/include-binaries	2014-10-28 07:46:40.000000000 -0200
@@ -6,5 +6,6 @@
 debian/archdefs/mips/GENERIC32.tar.bz2
 debian/archdefs/mipsel/GENERIC32.tar.bz2
 debian/archdefs/powerpc/GENERIC32.tar.bz2
+debian/archdefs/ppc64el/GENERIC64LE.tar.bz2
 debian/archdefs/s390x/IBMz964.tar.bz2
 debian/archdefs/sparc/USI32.tar.bz2


More information about the debian-science-maintainers mailing list