[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#579778: powerpcspe: Preliminary architecture port



Package: eglibc
Version: 2.10.2-6
Severity: normal
Tags: patch sid

The 'powerpcspe' architecture is a binary-incompatible variant of
PowerPC/POWER designed and supported by FreeScale and IBM.  It is also
known under the trade names "e500"/"MPC8500" and "e200"/"MPC5xx".

This architecture was added to dpkg in commit feb5792 on 2010/04/30:
  http://git.debian.org/?p=dpkg/dpkg.git;a=commitdiff;h=feb5792

Additional information can be found at:
  http://en.wikipedia.org/wiki/PowerPC_e500
  http://en.wikipedia.org/wiki/PowerPC_e200

In particular, the 'powerpcspe' architecture lacks the classic FPU with
dedicated FPRs found on most other PowerPC systems.  It is replaced with
a set of "SPE" instructions which perform floating-point operations on
the integer registers.

In an unfortunate choice of architecture design, the instructions used
for the "SPE" operations overlap with those for the AltiVec unit on most
other modern PowerPC cores.

The "e500v2"-series chips have 64-bit GPRs, where the high 32-bits are
accesible only via the special "SPE" instructions, allowing them to make
efficient use of the "double" datatype.

The relative rare "e500v1"-series chips have only 32-bit GPRs, and
require software traps and emulation to support native "double".

The "e200z3" and "e200z6" chips have no support for floating point at
all, but with software traps and emulation are binary-compatible with
the "e500"-series chips.

The Debian port to this architecture specifically chooses to optimize
for the higher-end chips (e500v2), as most of the others are targeted at
automotive applications or no longer in production.

EGLIBC almost builds correctly by default for 'powerpcspe', assuming
that your Debian-provided GCC was patched to install the necessary
headers.  The only changes necessary are to add 'powerpcspe' as a
supported architecture and to enable the "ports" addon, which contains
necessary support for the "SPE" floating point instructions.

At this time the 'powerpcspe' architecture port is still very much an
unofficial port.  While we hope that will change in the future, it is
entirely possible that the embedded niche of the processor will make
such an official Debian port problematic.

Signed-off-by: Kyle Moffett <Kyle.D.Moffett@boeing.com>
---
 debian/rules.d/control.mk    |    2 +-
 debian/sysdeps/powerpcspe.mk |    1 +
 2 files changed, 2 insertions(+), 1 deletions(-)
 create mode 100644 debian/sysdeps/powerpcspe.mk

diff --git a/debian/rules.d/control.mk b/debian/rules.d/control.mk
index b604935..6992194 100644
--- a/debian/rules.d/control.mk
+++ b/debian/rules.d/control.mk
@@ -2,7 +2,7 @@ control_deps := $(addprefix debian/control.in/, libc6 libc6.1 libc0.1 libc0.3 sp
 
 debian/control.in/libc6: debian/control.in/libc debian/rules.d/control.mk
 	sed -e 's%@libc@%libc6%g' \
-	    -e 's%@archs@%amd64 arm armeb armel i386 m32r m68k mips mipsel powerpc ppc64 sparc sparc64 s390 hppa sh3 sh4 sh3eb sh4eb%g' < $< > $@
+	    -e 's%@archs@%amd64 arm armeb armel i386 m32r m68k mips mipsel powerpc powerpcspe ppc64 sparc sparc64 s390 hppa sh3 sh4 sh3eb sh4eb%g' < $< > $@
 
 debian/control.in/libc6.1: debian/control.in/libc debian/rules.d/control.mk
 	sed -e 's%@libc@%libc6.1%g;s%@archs@%alpha ia64%g' < $< > $@
diff --git a/debian/sysdeps/powerpcspe.mk b/debian/sysdeps/powerpcspe.mk
new file mode 100644
index 0000000..567f0a7
--- /dev/null
+++ b/debian/sysdeps/powerpcspe.mk
@@ -0,0 +1 @@
+libc_add-ons = ports nptl $(add-ons)
-- 
1.7.0
--- Begin Message ---
The 'powerpcspe' architecture is a binary-incompatible variant of
PowerPC/POWER designed and supported by FreeScale and IBM.  It is also
known under the trade names "e500"/"MPC8500" and "e200"/"MPC5xx".

This architecture was added to dpkg in commit feb5792 on 2010/04/30:
  http://git.debian.org/?p=dpkg/dpkg.git;a=commitdiff;h=feb5792

Additional information can be found at:
  http://en.wikipedia.org/wiki/PowerPC_e500
  http://en.wikipedia.org/wiki/PowerPC_e200

In particular, the 'powerpcspe' architecture lacks the classic FPU with
dedicated FPRs found on most other PowerPC systems.  It is replaced with
a set of "SPE" instructions which perform floating-point operations on
the integer registers.

In an unfortunate choice of architecture design, the instructions used
for the "SPE" operations overlap with those for the AltiVec unit on most
other modern PowerPC cores.

The "e500v2"-series chips have 64-bit GPRs, where the high 32-bits are
accesible only via the special "SPE" instructions, allowing them to make
efficient use of the "double" datatype.

The relative rare "e500v1"-series chips have only 32-bit GPRs, and
require software traps and emulation to support native "double".

The "e200z3" and "e200z6" chips have no support for floating point at
all, but with software traps and emulation are binary-compatible with
the "e500"-series chips.

The Debian port to this architecture specifically chooses to optimize
for the higher-end chips (e500v2), as most of the others are targeted at
automotive applications or no longer in production.

EGLIBC almost builds correctly by default for 'powerpcspe', assuming
that your Debian-provided GCC was patched to install the necessary
headers.  The only changes necessary are to add 'powerpcspe' as a
supported architecture and to enable the "ports" addon, which contains
necessary support for the "SPE" floating point instructions.

At this time the 'powerpcspe' architecture port is still very much an
unofficial port.  While we hope that will change in the future, it is
entirely possible that the embedded niche of the processor will make
such an official Debian port problematic.

Signed-off-by: Kyle Moffett <Kyle.D.Moffett@boeing.com>
---
 debian/rules.d/control.mk    |    2 +-
 debian/sysdeps/powerpcspe.mk |    1 +
 2 files changed, 2 insertions(+), 1 deletions(-)
 create mode 100644 debian/sysdeps/powerpcspe.mk

diff --git a/debian/rules.d/control.mk b/debian/rules.d/control.mk
index b604935..6992194 100644
--- a/debian/rules.d/control.mk
+++ b/debian/rules.d/control.mk
@@ -2,7 +2,7 @@ control_deps := $(addprefix debian/control.in/, libc6 libc6.1 libc0.1 libc0.3 sp
 
 debian/control.in/libc6: debian/control.in/libc debian/rules.d/control.mk
 	sed -e 's%@libc@%libc6%g' \
-	    -e 's%@archs@%amd64 arm armeb armel i386 m32r m68k mips mipsel powerpc ppc64 sparc sparc64 s390 hppa sh3 sh4 sh3eb sh4eb%g' < $< > $@
+	    -e 's%@archs@%amd64 arm armeb armel i386 m32r m68k mips mipsel powerpc powerpcspe ppc64 sparc sparc64 s390 hppa sh3 sh4 sh3eb sh4eb%g' < $< > $@
 
 debian/control.in/libc6.1: debian/control.in/libc debian/rules.d/control.mk
 	sed -e 's%@libc@%libc6.1%g;s%@archs@%alpha ia64%g' < $< > $@
diff --git a/debian/sysdeps/powerpcspe.mk b/debian/sysdeps/powerpcspe.mk
new file mode 100644
index 0000000..567f0a7
--- /dev/null
+++ b/debian/sysdeps/powerpcspe.mk
@@ -0,0 +1 @@
+libc_add-ons = ports nptl $(add-ons)
-- 
1.7.0


--- End Message ---

Reply to: