summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 9aa6ede)
raw | patch | inline | side by side (parent: 9aa6ede)
author | DeaDDooMER <deaddoomer@deadsoftware.ru> | |
Fri, 18 Aug 2017 14:13:45 +0000 (17:13 +0300) | ||
committer | DeaDDooMER <deaddoomer@deadsoftware.ru> | |
Fri, 18 Aug 2017 14:13:45 +0000 (17:13 +0300) |
src/backends/jvm/generator-jvm.c | patch | blob | history |
index 1281c19426745d43a4982a24e92a26c834445bb7..eb445918fa5e20d462300e1da7cd23defe5824eb 100644 (file)
@@ -1217,12 +1217,27 @@ jvm_generate_hard_cast_type(gen_proc_t * p, oberon_type_t * from, oberon_type_t
if(from -> size <= 4)
{
jvm_generate(p, 1, 1, "invokestatic java/lang/Float/floatToIntBits(F)I");
- jvm_generate_cast_prefix(p, 'I', postfix);
+ jvm_generate_cast_prefix(p, 'i', postfix);
}
else
{
- jvm_generate(p, 2, 2, "invokestatic java/lang/Double/floatToIntBits(D)J");
- jvm_generate_cast_prefix(p, 'J', postfix);
+ jvm_generate(p, 2, 2, "invokestatic java/lang/Double/doubleToIntBits(D)J");
+ jvm_generate_cast_prefix(p, 'l', postfix);
+ }
+ }
+ else if((from -> class == OBERON_TYPE_INTEGER || from -> class == OBERON_TYPE_SYSTEM_BYTE)
+ && to -> class == OBERON_TYPE_REAL)
+ {
+ char prefix = jvm_get_prefix(from);
+ if(to -> size <= 4)
+ {
+ jvm_generate_cast_prefix(p, prefix, 'i');
+ jvm_generate(p, 1, 1, "invokestatic java/lang/Float/intBitsToFloat(I)F");
+ }
+ else
+ {
+ jvm_generate_cast_prefix(p, prefix, 'l');
+ jvm_generate(p, 2, 2, "invokestatic java/lang/Double/longBitsToDouble(J)D");
}
}
else