Hello, I'm trying to use Mono runtime on MIPS architecture. Attached change mend some problems, but I'm not confident of the changes (especially the 2nd one), and I want to ask for the review.
1. At first, compilation fails since there is no definition for mips in mono/mono/utils/mono-membar.h. I uses __asm__ __volatile__ ("" : : : "memory"); as for ARM. 2. basic-long.exe stopped at ** ERROR **: file mini-codegen.c: line 224 (mono_spillvar_offset_int): should not be reached When I remove the g_assert_not_reached, another assertion fails: ** ERROR **: file mini-mips.c: line 3190 (mono_arch_emit_prolog): assertion failed: ((alloc_size & (MIPS_STACK_ALIGNMENT-1)) == 0) Below the assertion, /* re-align cfg->stack_offset if needed (due to var spilling in mini-codegen.c) */ cfg->stack_offset = (cfg->stack_offset + MIPS_STACK_ALIGNMENT - 1) & ~(MIPS_STACK_ALIGNMENT - 1); /* stack_offset should not be changed here. */ alloc_size = cfg->stack_offset; cfg->stack_usage = alloc_size; implies spilling may break alignment and alloc_size is reset by aligned value, so I just removed the assertion, then basic-long.exe runs without aborting. I'm not sure what is the correct fix here. The second comment says 'stack_offset' should not be changed. Should we keep stack_offset and align alloc_size alone? 3. Wrong code genered for conditional branching, e.g. using System; class CompareIntegers_simple { public static void Main() { long i64 = 0; if (i64 < Int32.MinValue) { Console.WriteLine("True"); } } } I found there are some mistakes in mono/mono/mini/inssel-long32-mips.brg. I've fixed it and added some related tests. With those changes, I've checked that "mono --regression basic-long.exe" passes except test_0_conv_to_r4 (tested on Debian-MIPS on qemu). Sincerely yours, -- Yoichi NAKAYAMA Pixela Corporation
mono_mips.patch
Description: Binary data
_______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list