diff -Naur b/jffi/build.xml a/jffi/build.xml --- b/jffi/build.xml 2016-10-26 13:57:20.000000000 +0800 +++ a/jffi/build.xml 2016-10-26 17:12:55.645022616 +0800 @@ -34,6 +34,7 @@ + @@ -103,6 +104,11 @@ + + + + + diff -Naur b/jffi/jni/GNUmakefile a/jffi/jni/GNUmakefile --- b/jffi/jni/GNUmakefile 2016-10-26 13:57:20.000000000 +0800 +++ a/jffi/jni/GNUmakefile 2016-10-26 17:12:55.551225296 +0800 @@ -243,7 +243,7 @@ MODEL=64 endif -ifneq ($(findstring $(CPU), x86_64 amd64 ppc64 ppc64le powerpc64 s390x aarch64),) +ifneq ($(findstring $(CPU), x86_64 amd64 ppc64 ppc64le powerpc64 s390x aarch64 mips64el),) MODEL = 64 endif diff -Naur b/jffi/jni/jffi/Foreign.c a/jffi/jni/jffi/Foreign.c --- b/jffi/jni/jffi/Foreign.c 2016-10-26 13:57:20.000000000 +0800 +++ a/jffi/jni/jffi/Foreign.c 2016-10-26 17:12:55.559041740 +0800 @@ -242,6 +242,13 @@ #elif defined(__ppc__) || defined(__powerpc__) || defined(__powerpc) # define CPU "ppc" +#elif defined(__mips64) +# if BYTE_ORDER == LITTLE_ENDIAN +# define CPU "mips64el" +# else +# define CPU "mips64" +# endif + /* Need to check for __sparcv9 first, because __sparc will be defined either way . */ #elif defined(__sparcv9__) || defined(__sparcv9) diff -Naur b/jffi/src/main/java/com/kenai/jffi/internal/StubLoader.java a/jffi/src/main/java/com/kenai/jffi/internal/StubLoader.java --- b/jffi/src/main/java/com/kenai/jffi/internal/StubLoader.java 2016-10-26 13:57:20.000000000 +0800 +++ a/jffi/src/main/java/com/kenai/jffi/internal/StubLoader.java 2016-10-26 17:12:55.738819937 +0800 @@ -122,6 +122,8 @@ ARM, /** AArch64 */ AARCH64, + /** MIPS64EL */ + MIPS64EL, /** Unknown CPU */ UNKNOWN; @@ -169,7 +171,9 @@ return CPU.I386; } else if (Util.equalsIgnoreCase("x86_64", archString, LOCALE) || Util.equalsIgnoreCase("amd64", archString, LOCALE)) { return CPU.X86_64; - } else if (Util.equalsIgnoreCase("ppc", archString, LOCALE) || Util.equalsIgnoreCase("powerpc", archString, LOCALE)) { + } else if (Util.equalsIgnoreCase("mips64el", archString, LOCALE)) { + return CPU.MIPS64EL; + } else if (Util.equalsIgnoreCase("ppc", archString, LOCALE) || Util.equalsIgnoreCase("powerpc", archString, LOCALE)) { return CPU.PPC; } else if (Util.equalsIgnoreCase("ppc64", archString, LOCALE) || Util.equalsIgnoreCase("powerpc64", archString, LOCALE)) { if ("little".equals(System.getProperty("sun.cpu.endian"))) { diff -Naur b/jffi/src/main/java/com/kenai/jffi/Platform.java a/jffi/src/main/java/com/kenai/jffi/Platform.java --- b/jffi/src/main/java/com/kenai/jffi/Platform.java 2016-10-26 13:57:20.000000000 +0800 +++ a/jffi/src/main/java/com/kenai/jffi/Platform.java 2016-10-26 17:12:55.742728158 +0800 @@ -100,6 +100,8 @@ ARM(32), /** AARCH64 */ AARCH64(64), + /** MIPS64EL */ + MIPS64EL(64), /** Unknown CPU */ UNKNOWN(64); @@ -213,7 +215,9 @@ } else if (Util.equalsIgnoreCase("x86_64", archString, LOCALE) || Util.equalsIgnoreCase("amd64", archString, LOCALE)) { return CPU.X86_64; - } else if (Util.equalsIgnoreCase("ppc", archString, LOCALE) || Util.equalsIgnoreCase("powerpc", archString, LOCALE)) { + } else if (Util.equalsIgnoreCase("mips64el", archString, LOCALE)) { + return CPU.MIPS64EL; + } else if (Util.equalsIgnoreCase("ppc", archString, LOCALE) || Util.equalsIgnoreCase("powerpc", archString, LOCALE)) { return CPU.PPC; } else if (Util.equalsIgnoreCase("ppc64", archString, LOCALE) || Util.equalsIgnoreCase("powerpc64", archString, LOCALE)) {