60488e1
diff -up openmsx-0.15.0/build/cpu.py~ openmsx-0.15.0/build/cpu.py
60488e1
--- openmsx-0.15.0/build/cpu.py~	2018-12-08 23:45:38.000000000 +0100
60488e1
+++ openmsx-0.15.0/build/cpu.py	2019-02-20 22:01:03.317081448 +0100
60488e1
@@ -88,6 +88,12 @@ class PPC64(CPU):
60488e1
 	name = 'ppc64'
60488e1
 	bigEndian = True
60488e1
 
60488e1
+class PPC64LE(CPU):
60488e1
+	'''64-bit Power PC LE.
60488e1
+	'''
60488e1
+	name = 'ppc64le'
60488e1
+	bigEndian = False
60488e1
+
60488e1
 class S390(CPU):
60488e1
 	'''IBM S/390.
60488e1
 	'''
60488e1
diff -up openmsx-0.15.0/build/detectsys.py~ openmsx-0.15.0/build/detectsys.py
60488e1
--- openmsx-0.15.0/build/detectsys.py~	2018-12-08 23:45:38.000000000 +0100
60488e1
+++ openmsx-0.15.0/build/detectsys.py	2019-02-20 22:00:17.076725383 +0100
60488e1
@@ -22,6 +22,8 @@ def detectCPU():
60488e1
 		return 'x86_64'
60488e1
 	elif cpu in ('x86', 'i386', 'i486', 'i586', 'i686'):
60488e1
 		return 'x86'
60488e1
+	elif cpu == 'ppc64le':
60488e1
+		return 'ppc64le'
60488e1
 	elif cpu.startswith('ppc') or cpu.endswith('ppc') or cpu.startswith('power'):
60488e1
 		return 'ppc64' if cpu.endswith('64') else 'ppc'
60488e1
 	elif cpu.startswith('arm'):
60488e1
diff -up openmsx-0.15.0/src/utils/small_compare.hh~ openmsx-0.15.0/src/utils/small_compare.hh
60488e1
--- openmsx-0.15.0/src/utils/small_compare.hh~	2018-12-08 23:45:38.000000000 +0100
60488e1
+++ openmsx-0.15.0/src/utils/small_compare.hh	2019-02-20 22:41:23.008761701 +0100
60488e1
@@ -81,7 +81,7 @@ template<typename T, T v, T m> struct Sc
60488e1
 };
60488e1
 template<typename T, T v, T m, char N0, char ...Ns> struct ScValBeImpl<T, v, m, N0, Ns...>
60488e1
 	: ScValBeImpl<T, (v << 8) + T(N0 & 255), (m >> 8), Ns...> {};
60488e1
-template<typename T, char ...Ns> struct ScValBe : ScValBeImpl<T, 0, -1, Ns...> {};
60488e1
+template<typename T, char ...Ns> struct ScValBe : ScValBeImpl<T, 0, T(-1), Ns...> {};
60488e1
 
60488e1
 // ScVal: combines all given characters in one value of type T, also computes a
60488e1
 // mask-value with 1-bits in the 'used' positions.
60488e1
@@ -93,19 +93,14 @@ template<typename T, char ...Ns> struct
60488e1
 template<char ...Ns> struct SmallCompare {
60488e1
 	using Loader = SelectLoader<sizeof...(Ns)>;
60488e1
 	using C = ScVal<typename Loader::type, Ns...>;
60488e1
-	// workaround gcc-4.7 bug
60488e1
-	//static const auto value = C::value;
60488e1
-	//static const auto mask  = C::mask;
60488e1
-	static const typename Loader::type value = C::value;
60488e1
-	static const typename Loader::type mask  = C::mask;
60488e1
+	static const auto value = C::value;
60488e1
+	static const auto mask  = C::mask;
60488e1
 };
60488e1
 
60488e1
 // The actual small-fixed-string-comparison.
60488e1
 template<char ...Ns> bool small_compare(const char* p)
60488e1
 {
60488e1
-	// workaround gcc-4.7 bug
60488e1
-	//using SC = SmallCompare<Ns...>;
60488e1
-	typedef SmallCompare<Ns...> SC;
60488e1
+	using SC = SmallCompare<Ns...>;
60488e1
 	typename SC::Loader loader;
60488e1
 	return (loader(p) & SC::mask) == SC::value;
60488e1
 }