[Top][All Lists]
[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))
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [dotgnu-pnet-commits] libjit ChangeLog jit/jit-insn.c,
Aleksey Demakov <=