Run the following code on x86 Mono, e.g. on Android:
float resultF = Add ( 1.0f , 2.0f ) ;
double resultD = Add ( 1.0 , 2.0 ) ;
Console . WriteLine ( resultF ) ;
Console . WriteLine ( resultD ) ;
static T Add < T > ( T left , T right ) where T : struct
{
unchecked
{
if ( left is short ) return ( T ) ( ValueType ) ( short ) ( ( short ) ( ValueType ) left + ( short ) ( ValueType ) right ) ;
else if ( left is int ) return ( T ) ( ValueType ) ( int ) ( ( int ) ( ValueType ) left + ( int ) ( ValueType ) right ) ;
else if ( left is long ) return ( T ) ( ValueType ) ( long ) ( ( long ) ( ValueType ) left + ( long ) ( ValueType ) right ) ;
else if ( left is ushort ) return ( T ) ( ValueType ) ( ushort ) ( ( ushort ) ( ValueType ) left + ( ushort ) ( ValueType ) right ) ;
else if ( left is uint ) return ( T ) ( ValueType ) ( uint ) ( ( uint ) ( ValueType ) left + ( uint ) ( ValueType ) right ) ;
else if ( left is ulong ) return ( T ) ( ValueType ) ( ulong ) ( ( ulong ) ( ValueType ) left + ( ulong ) ( ValueType ) right ) ;
else if ( left is byte ) return ( T ) ( ValueType ) ( byte ) ( ( byte ) ( ValueType ) left + ( byte ) ( ValueType ) right ) ;
else if ( left is sbyte ) return ( T ) ( ValueType ) ( sbyte ) ( ( sbyte ) ( ValueType ) left + ( sbyte ) ( ValueType ) right ) ;
else if ( left is float ) return ( T ) ( ValueType ) ( float ) ( ( float ) ( ValueType ) left + ( float ) ( ValueType ) right ) ;
else if ( left is double ) return ( T ) ( ValueType ) ( double ) ( ( double ) ( ValueType ) left + ( double ) ( ValueType ) right ) ;
else throw new NotImplementedException ( ) ;
}
}
It crashes with this runtime assert:
* Assertion at /Users/alexander/dev/runtime/src/mono/mono/mini/mini-codegen.c:2306, condition `sp < 8' not met
I saw that x86 is the only platform where we define MONO_ARCH_USE_FPSTACK to true, that's why we only see it there.
Reactions are currently unavailable
Run the following code on x86 Mono, e.g. on Android:
It crashes with this runtime assert:
I saw that x86 is the only platform where we define
MONO_ARCH_USE_FPSTACKto true, that's why we only see it there.