[Mono-dev] CONV.i8 conversion problem on E500 power pc

jbroekhuizen jbroekhuizen at hotmail.nl
Tue Feb 5 21:35:32 UTC 2013


I managed to compile Mono 3.0.3 on my Synology NAS with a P1022 (dual e500)
ppc processor. Shortly after I noticed that the conversion of doubles to
long fails. This was triggered by some runtime exception in XSP web server
that the timespan was negative. I deduced the code to fail to the following:

double dval = 110.0;
long lval = (long) dval;

In this case lval is always zero. Disassembled this is:
IL_0000:  ldc.r8 110.
IL_0009:  stloc.0
IL_000a:  ldloc.0
IL_000b:  conv.i8
IL_000c:  stloc.1

In some documentation I noticed that the E500 cores do not support the
conversion instructions for double and long, so I ensured that in
mini/mini-ppc the conversion emulator functions where registered correctly
(by adding some defines). So, now the emulator function "mono_fconv_i8" is
called. However, the argument it gets in is zero as well. So, I wonder what
could go wrong. I am pretty lost in the "mono_arch_emit_call" function where
the arguments are added (FP type, resulting in a OP_FMOVE). But I currently
do not know enough about the registers to make anything out of this.

Does anyone know how I can fix this problem?

Thanks! Jeroen

View this message in context: http://mono.1490590.n4.nabble.com/CONV-i8-conversion-problem-on-E500-power-pc-tp4658483.html
Sent from the Mono - Dev mailing list archive at Nabble.com.

More information about the Mono-devel-list mailing list