bits 24:32 - slot count
*/
#define SRC_DESCRIPTOR_MARSHAL_SHIFT 16
-#define SRC_DESCRIPTOR_MARSHAL_MASK 0x0Ff
+#define SRC_DESCRIPTOR_MARSHAL_MASK 0x0ff
#define SLOT_COUNT_SHIFT 24
#define SLOT_COUNT_MASK 0xff
default:
g_error ("Gsharedvt can't handle dest arg type %d", (int)dst_info->storage); // See above
}
+
+ if (arg_marshal == GSHAREDVT_ARG_BYREF_TO_BYVAL && dst_info->byte_arg_size) {
+ /* Have to load less than 4 bytes */
+ // FIXME: Signed types
+ switch (dst_info->byte_arg_size) {
+ case 1:
+ arg_marshal = GSHAREDVT_ARG_BYREF_TO_BYVAL_U1;
+ break;
+ case 2:
+ arg_marshal = GSHAREDVT_ARG_BYREF_TO_BYVAL_U2;
+ break;
+ default:
+ arg_marshal = GSHAREDVT_ARG_BYREF_TO_BYVAL_U4;
+ break;
+ }
+ }
+
if (nsrc)
src [0] |= (arg_marshal << SRC_DESCRIPTOR_MARSHAL_SHIFT) | (arg_slots << SLOT_COUNT_SHIFT);