1 diff -ur mono-3.12.0/libgc/include/private/gc_locks.h mono-3.12.0-x32/libgc/include/private/gc_locks.h
2 --- mono-3.12.0/libgc/include/private/gc_locks.h 2014-10-30 23:11:01.000000000 +0100
3 +++ mono-3.12.0-x32/libgc/include/private/gc_locks.h 2015-03-13 19:53:30.391221738 +0100
8 - __asm__ __volatile__("lock; cmpxchgq %2, %0; setz %1"
9 + __asm__ __volatile__("lock; cmpxchg %2, %0; setz %1"
10 : "+m"(*(addr)), "=r"(result)
11 : "r" (new_val), "a"(old) : "memory");
12 return (GC_bool) result;
13 diff -ur mono-3.12.0/mono/mini/mini-codegen.c mono-3.12.0-x32-2/mono/mini/mini-codegen.c
14 --- mono-3.12.0/mono/mini/mini-codegen.c 2015-01-12 18:15:08.000000000 +0100
15 +++ mono-3.12.0-x32-2/mono/mini/mini-codegen.c 2015-03-13 20:24:21.044619503 +0100
18 regmask_t mask = allow & rs->ifree_mask;
20 -#if defined(__x86_64__) && defined(__GNUC__)
21 +#if defined(__x86_64__) && defined(__GNUC__) && !defined(__ILP32__)
25 diff -ur mono-3.12.0/mono/mini/regalloc.h mono-3.12.0-x32-2/mono/mini/regalloc.h
26 --- mono-3.12.0/mono/mini/regalloc.h 2014-10-30 23:11:02.000000000 +0100
27 +++ mono-3.12.0-x32-2/mono/mini/regalloc.h 2015-03-13 20:23:14.031283837 +0100
29 -#if defined(__native_client__) && defined(__x86_64__)
30 +#if defined(__native_client__) && defined(__x86_64__) && !defined(__ILP32__)
31 typedef guint64 regmask_t;
33 typedef size_t regmask_t;
34 --- mono-3.12.1/mono/utils/monobitset.c.orig 2015-03-14 08:21:15.042164662 +0100
35 +++ mono-3.12.1/mono/utils/monobitset.c 2015-03-14 08:21:19.602164473 +0100
36 @@ -280,8 +280,11 @@ my_g_bit_nth_lsf (gsize mask, gint nth_b
37 #if defined(__native_client__) && (defined(__i386__) || defined(__x86_64))
38 #define USE_X86_32BIT_INSTRUCTIONS 1
40 +#if defined(__x86_64) && defined(__ILP32__)
44 -#if (defined(__i386__) && defined(__GNUC__)) || defined(USE_X86_32BIT_INSTRUCTIONS)
45 +#if (defined(__i386__) && defined(__GNUC__)) || defined(USE_X86_32BIT_INSTRUCTIONS) || defined(ARCH_x32)
48 /* This depends on mask != 0 */
49 @@ -311,7 +314,7 @@ static inline gint
50 my_g_bit_nth_lsf_nomask (gsize mask)
52 /* Mask is expected to be != 0 */
53 -#if (defined(__i386__) && defined(__GNUC__)) || defined(USE_X86_32BIT_INSTRUCTIONS)
54 +#if (defined(__i386__) && defined(__GNUC__)) || defined(USE_X86_32BIT_INSTRUCTIONS) || defined(ARCH_x32)
57 __asm__("bsfl %1,%0\n\t"
58 --- mono-3.12.1/mono/profiler/proflog.c.orig 2015-03-06 18:26:50.000000000 +0100
59 +++ mono-3.12.1/mono/profiler/proflog.c 2015-03-14 08:45:51.238769378 +0100
60 @@ -1783,8 +1783,14 @@ perf_event_syscall (struct perf_event_at
62 attr->size = PERF_ATTR_SIZE_VER0;
63 //printf ("perf attr size: %d\n", attr->size);
64 +#if defined(__NR_perf_event_open)
65 + return syscall(__NR_perf_event_open, attr, pid, cpu, group_fd, flags);
66 #if defined(__x86_64__)
67 +# if defined(__ILP32__)
68 + return syscall(/*__NR_perf_event_open*/ 0x40000000+298, attr, pid, cpu, group_fd, flags);
70 return syscall(/*__NR_perf_event_open*/ 298, attr, pid, cpu, group_fd, flags);
72 #elif defined(__i386__)
73 return syscall(/*__NR_perf_event_open*/ 336, attr, pid, cpu, group_fd, flags);
74 #elif defined(__arm__)
77 mono/metadata/mono-config.c (CPU config)
78 mono/utils/mono-compiler.h (MONO_THREAD_VAR_OFFSET - needs x32 ABI knowledge)
79 mono/utils/mono-context.g (MONO_CONTEXT_*)
81 mono/mini/*-x86.* vs mono/mini/*-amd64.* ???
82 mono/arch/x86 vs mono/arch/amd64 ???