dotgnu-pnet-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dotgnu-pnet-commits] libjit ChangeLog jit/jit-insn.c


From: Aleksey Demakov
Subject: [dotgnu-pnet-commits] libjit ChangeLog jit/jit-insn.c
Date: Wed, 10 Dec 2008 20:44:24 +0000

CVSROOT:        /sources/dotgnu-pnet
Module name:    libjit
Changes by:     Aleksey Demakov <avd>   08/12/10 20:44:24

Modified files:
        .              : ChangeLog 
        jit            : jit-insn.c 

Log message:
        extend small int values returned from native calls

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/libjit/ChangeLog?cvsroot=dotgnu-pnet&r1=1.396&r2=1.397
http://cvs.savannah.gnu.org/viewcvs/libjit/jit/jit-insn.c?cvsroot=dotgnu-pnet&r1=1.64&r2=1.65

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/ChangeLog,v
retrieving revision 1.396
retrieving revision 1.397
diff -u -b -r1.396 -r1.397
--- ChangeLog   10 Dec 2008 20:40:06 -0000      1.396
+++ ChangeLog   10 Dec 2008 20:44:24 -0000      1.397
@@ -1,3 +1,9 @@
+2008-12-11  Juan Jesus Garcia de Soria  <address@hidden>
+
+       * jit/jit-insn.c (jit_insn_call_native): extend small int return
+       values to full ints as native calls sometimes return garbage in MSB
+       of the return rigister.
+
 2008-12-11  Aleksey Demakov  <address@hidden>
 
        * configure.ac: bump version to 0.1.3

Index: jit/jit-insn.c
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/jit/jit-insn.c,v
retrieving revision 1.64
retrieving revision 1.65
diff -u -b -r1.64 -r1.65
--- jit/jit-insn.c      7 Aug 2008 12:51:48 -0000       1.64
+++ jit/jit-insn.c      10 Dec 2008 20:44:24 -0000      1.65
@@ -5898,6 +5898,7 @@
        jit_value_t *new_args;
        jit_value_t return_value;
        jit_insn_t insn;
+       jit_type_t return_type;
 
        /* Bail out if there is something wrong with the parameters */
        if(!_jit_function_ensure_builder(func) || !native_func || !signature)
@@ -6014,6 +6015,32 @@
                }
        }
 
+       /* Make sure that returned byte / short values get zero / sign extended 
*/
+       return_type = jit_type_normalize(return_value->type);
+       switch(return_type->kind)
+       {
+       case JIT_TYPE_SBYTE:
+               /* Force sbyte sign extension to int */
+               return_value = apply_unary_conversion(func, JIT_OP_TRUNC_SBYTE,
+                                                     return_value, 
return_type);
+               break;
+       case JIT_TYPE_UBYTE:
+               /* Force ubyte zero extension to uint */
+               return_value = apply_unary_conversion(func, JIT_OP_TRUNC_UBYTE,
+                                                     return_value, 
return_type);
+               break;
+       case JIT_TYPE_SHORT:
+               /* Force short sign extension to int */
+               return_value = apply_unary_conversion(func, JIT_OP_TRUNC_SHORT,
+                                                     return_value, 
return_type);
+               break;
+       case JIT_TYPE_USHORT:
+               /* Force ushort zero extension to uint */
+               return_value = apply_unary_conversion(func, JIT_OP_TRUNC_USHORT,
+                                                     return_value, 
return_type);
+               break;
+       }
+
        /* Restore exception frame information after the call */
        if(!restore_eh_frame_after_call(func, flags))
        {




reply via email to

[Prev in Thread] Current Thread [Next in Thread]