diff --git a/core/java/src/net/i2p/util/NativeBigInteger.java b/core/java/src/net/i2p/util/NativeBigInteger.java index d2d53ada82b161565fd819e5a413f03bc6314bdb..a542bfbe3db1502c97d4c4b47737aaa193157a40 100644 --- a/core/java/src/net/i2p/util/NativeBigInteger.java +++ b/core/java/src/net/i2p/util/NativeBigInteger.java @@ -125,13 +125,19 @@ public class NativeBigInteger extends BigInteger { private final static String JBIGI_OPTIMIZATION_PENTIUM3 = "pentium3"; private final static String JBIGI_OPTIMIZATION_PENTIUM4 = "pentium4"; private final static String JBIGI_OPTIMIZATION_VIAC3 = "viac3"; - /** below here @since 0.8.7 */ + /** + * The 7 optimizations below here are since 0.8.7. Each of the 32-bit processors below + * needs an explicit fallback in getResourceList() or getMiddleName2(). + * 64-bit processors will fallback to athlon64 and athlon in getResourceList(). + * @since 0.8.7 + */ private final static String JBIGI_OPTIMIZATION_ATOM = "atom"; private final static String JBIGI_OPTIMIZATION_CORE2 = "core2"; private final static String JBIGI_OPTIMIZATION_COREI = "corei"; private final static String JBIGI_OPTIMIZATION_GEODE = "geode"; private final static String JBIGI_OPTIMIZATION_NANO = "nano"; private final static String JBIGI_OPTIMIZATION_PENTIUMM = "pentiumm"; + /** all libjbibi builds are identical to pentium3, case handled in getMiddleName2() */ private final static String JBIGI_OPTIMIZATION_VIAC32 = "viac32"; private static final boolean _isWin = System.getProperty("os.name").startsWith("Win"); @@ -192,15 +198,20 @@ public class NativeBigInteger extends BigInteger { if (c instanceof VIACPUInfo){ VIACPUInfo viacpu = (VIACPUInfo) c; if (viacpu.IsNanoCompatible()) - return JBIGI_OPTIMIZATION_NANO; - if (viacpu.IsNanoCompatible()) - return JBIGI_OPTIMIZATION_VIAC3; + return JBIGI_OPTIMIZATION_NANO; + return JBIGI_OPTIMIZATION_VIAC3; } else if(c instanceof AMDCPUInfo) { AMDCPUInfo amdcpu = (AMDCPUInfo) c; + // Supported in CPUID, no GMP support + //if (amdcpu.IsBobcatCompatible()) + // return JBIGI_OPTIMIZATION_BOBCAT; if (amdcpu.IsAthlon64Compatible()) return JBIGI_OPTIMIZATION_ATHLON64; if (amdcpu.IsAthlonCompatible()) return JBIGI_OPTIMIZATION_ATHLON; + // FIXME lots of geodes, but GMP configures like a K6-3 + if (amdcpu.IsGeodeCompatible()) + return JBIGI_OPTIMIZATION_GEODE; if (amdcpu.IsK6_3_Compatible()) return JBIGI_OPTIMIZATION_K6_3; if (amdcpu.IsK6_2_Compatible()) @@ -209,8 +220,16 @@ public class NativeBigInteger extends BigInteger { return JBIGI_OPTIMIZATION_K6; } else if (c instanceof IntelCPUInfo) { IntelCPUInfo intelcpu = (IntelCPUInfo) c; + if (intelcpu.IsCoreiCompatible()) + return JBIGI_OPTIMIZATION_COREI; + if (intelcpu.IsCore2Compatible()) + return JBIGI_OPTIMIZATION_CORE2; if (intelcpu.IsPentium4Compatible()) return JBIGI_OPTIMIZATION_PENTIUM4; + if (intelcpu.IsAtomCompatible()) + return JBIGI_OPTIMIZATION_ATOM; + if (intelcpu.IsPentiumMCompatible()) + return JBIGI_OPTIMIZATION_PENTIUMM; if (intelcpu.IsPentium3Compatible()) return JBIGI_OPTIMIZATION_PENTIUM3; if (intelcpu.IsPentium2Compatible()) @@ -605,12 +624,18 @@ public class NativeBigInteger extends BigInteger { } // the preferred selection rv.add(_libPrefix + getMiddleName1() + primary + _libSuffix); + // athlon64 is always a fallback for 64 bit if (_is64 && !primary.equals(JBIGI_OPTIMIZATION_ATHLON64)) rv.add(_libPrefix + getMiddleName1() + JBIGI_OPTIMIZATION_ATHLON64 + _libSuffix); + // Add fallbacks for any 32-bit that were added 0.8.7 or later here - if (primary.equals(JBIGI_OPTIMIZATION_ATOM)) + // FIXME lots of geodes, but GMP configures like a K6-3, so pentium3 is probably a good backup + if (primary.equals(JBIGI_OPTIMIZATION_ATOM) || + primary.equals(JBIGI_OPTIMIZATION_PENTIUMM) || + primary.equals(JBIGI_OPTIMIZATION_GEODE)) rv.add(_libPrefix + getMiddleName1() + JBIGI_OPTIMIZATION_PENTIUM3 + _libSuffix); + // athlon is always a fallback for 64 bit, we have it for all architectures // and it should be much better than "none" if (_is64) diff --git a/installer/lib/jbigi/libjbigi-linux-atom.so b/installer/lib/jbigi/libjbigi-linux-atom.so new file mode 100644 index 0000000000000000000000000000000000000000..8de95258a4a406895f749ee8ec4ea874c7bac109 Binary files /dev/null and b/installer/lib/jbigi/libjbigi-linux-atom.so differ diff --git a/installer/lib/jbigi/libjbigi-linux-atom_64.so b/installer/lib/jbigi/libjbigi-linux-atom_64.so new file mode 100644 index 0000000000000000000000000000000000000000..069aeb855304fbf0dbf7e73762859759defab12e Binary files /dev/null and b/installer/lib/jbigi/libjbigi-linux-atom_64.so differ diff --git a/installer/lib/jbigi/libjbigi-linux-core2.so b/installer/lib/jbigi/libjbigi-linux-core2.so new file mode 100644 index 0000000000000000000000000000000000000000..ce34a65ce43173b31771210284034bf7a2f266d6 Binary files /dev/null and b/installer/lib/jbigi/libjbigi-linux-core2.so differ diff --git a/installer/lib/jbigi/libjbigi-linux-core2_64.so b/installer/lib/jbigi/libjbigi-linux-core2_64.so new file mode 100644 index 0000000000000000000000000000000000000000..eab1ff757ca9ae63afb5e532cec7e6b0684a8995 Binary files /dev/null and b/installer/lib/jbigi/libjbigi-linux-core2_64.so differ diff --git a/installer/lib/jbigi/libjbigi-linux-corei.so b/installer/lib/jbigi/libjbigi-linux-corei.so new file mode 100644 index 0000000000000000000000000000000000000000..ce34a65ce43173b31771210284034bf7a2f266d6 Binary files /dev/null and b/installer/lib/jbigi/libjbigi-linux-corei.so differ diff --git a/installer/lib/jbigi/libjbigi-linux-corei_64.so b/installer/lib/jbigi/libjbigi-linux-corei_64.so new file mode 100644 index 0000000000000000000000000000000000000000..e72a3aaaa4e1f2430b3a6d8390448af6ca14bbff Binary files /dev/null and b/installer/lib/jbigi/libjbigi-linux-corei_64.so differ diff --git a/installer/lib/jbigi/libjbigi-linux-geode.so b/installer/lib/jbigi/libjbigi-linux-geode.so new file mode 100644 index 0000000000000000000000000000000000000000..8865e6dcde5423beb2bd3e4fa840fd6aa93bd655 Binary files /dev/null and b/installer/lib/jbigi/libjbigi-linux-geode.so differ diff --git a/installer/lib/jbigi/libjbigi-linux-nano.so b/installer/lib/jbigi/libjbigi-linux-nano.so new file mode 100644 index 0000000000000000000000000000000000000000..16873d80c85fd7447e27d8ab65a8b4e97814fb86 Binary files /dev/null and b/installer/lib/jbigi/libjbigi-linux-nano.so differ diff --git a/installer/lib/jbigi/libjbigi-linux-nano_64.so b/installer/lib/jbigi/libjbigi-linux-nano_64.so new file mode 100644 index 0000000000000000000000000000000000000000..855e7d56307565ac1823d17ccb8a2a65289c3595 Binary files /dev/null and b/installer/lib/jbigi/libjbigi-linux-nano_64.so differ diff --git a/installer/lib/jbigi/libjbigi-linux-pentiumm.so b/installer/lib/jbigi/libjbigi-linux-pentiumm.so new file mode 100644 index 0000000000000000000000000000000000000000..336d5d12060aa6171f3037e26c3934148e47c067 Binary files /dev/null and b/installer/lib/jbigi/libjbigi-linux-pentiumm.so differ