--- /dev/null
+--- geos-3.8.1/include/geos/algorithm/ttmath/ttmathtypes.h.orig 2019-09-18 23:38:19.000000000 +0200
++++ geos-3.8.1/include/geos/algorithm/ttmath/ttmathtypes.h 2020-11-08 20:39:00.133786117 +0100
+@@ -109,7 +109,7 @@
+ */
+ #if !defined TTMATH_PLATFORM32 && !defined TTMATH_PLATFORM64
+
+- #if !defined _M_X64 && !defined __x86_64__
++ #if !defined _M_X64 && !defined __x86_64__ || defined __ILP32__
+
+ /*
+ other platforms than x86 and amd64 are not recognized at the moment
+--- geos-3.8.1/include/geos/algorithm/ttmath/ttmathuint_x86.h.orig 2019-09-18 23:38:19.000000000 +0200
++++ geos-3.8.1/include/geos/algorithm/ttmath/ttmathuint_x86.h 2020-11-08 21:56:34.060500817 +0100
+@@ -524,7 +524,11 @@
+ uint dummy1, dummy2, dummy3;
+
+ __asm__ __volatile__(
++#ifdef __x86_64__
++ "push %%rdx \n"
++#else
+ "push %%edx \n"
++#endif
+ "xor %%edx, %%edx \n" // edx = 0, cf = 0
+ "1: \n"
+ "mov (%%esi,%%edx,4), %%eax \n"
+@@ -536,7 +540,11 @@
+ "jnz 1b \n"
+
+ "adc %%ecx, %%ecx \n" // ecx has the cf state
++#ifdef __x86_64__
++ "pop %%rax \n" // eax = rest
++#else
+ "pop %%eax \n" // eax = rest
++#endif
+
+ "or %%eax, %%eax \n"
+ "jz 3f \n"
+@@ -857,7 +865,11 @@
+ uint dummy1, dummy2, dummy3;
+
+ __asm__ __volatile__(
++#ifdef __x86_64__
++ "push %%rdx \n"
++#else
+ "push %%edx \n"
++#endif
+ "xor %%edx, %%edx \n" // edx = 0, cf = 0
+ "1: \n"
+ "mov (%%esi,%%edx,4), %%eax \n"
+@@ -869,7 +881,11 @@
+ "jnz 1b \n"
+
+ "adc %%ecx, %%ecx \n" // ecx has the cf state
++#ifdef __x86_64__
++ "pop %%rax \n" // eax = rest
++#else
+ "pop %%eax \n" // eax = rest
++#endif
+
+ "or %%eax, %%eax \n"
+ "jz 3f \n"
+@@ -1141,7 +1157,11 @@
+
+ __asm__ __volatile__(
+
++#ifdef __x86_64__
++ "push %%rbp \n"
++#else
+ "push %%ebp \n"
++#endif
+
+ "movl %%ecx, %%esi \n"
+ "movl $32, %%ecx \n"
+@@ -1171,7 +1191,11 @@
+
+ "and $1, %%eax \n"
+
++#ifdef __x86_64__
++ "pop %%rbp \n"
++#else
+ "pop %%ebp \n"
++#endif
+
+ : "=a" (c), "=D" (dummy), "=S" (dummy2), "=d" (dummy3)
+ : "0" (c), "1" (b), "b" (p1), "c" (bits)
+@@ -1272,7 +1296,11 @@
+
+ __asm__ __volatile__(
+
++#ifdef __x86_64__
++ "push %%rbp \n"
++#else
+ "push %%ebp \n"
++#endif
+
+ "movl %%ecx, %%esi \n"
+ "movl $32, %%ecx \n"
+@@ -1305,7 +1333,11 @@
+ "roll $1, %%eax \n"
+ "andl $1, %%eax \n"
+
++#ifdef __x86_64__
++ "pop %%rbp \n"
++#else
+ "pop %%ebp \n"
++#endif
+
+ : "=a" (c), "=D" (dummy), "=S" (dummy2), "=d" (dummy3)
+ : "0" (c), "1" (b), "b" (p1), "c" (bits)