#endif
#endif
-#define DEBUG(x)
+#define DEBUG(x) x
/* gpointer
fake_func (gpointer (*callme)(gpointer), stackval *retval, void *this_obj, stackval *arguments)
simpletype = sig->ret->data.klass->enum_basetype->type;
goto enum_retvalue;
}
- NOT_IMPLEMENTED ("valuetype");
+ *code_size += 2*4;
break;
case MONO_TYPE_VOID:
break;
ppc_lwz (p, ppc_r15, stack_size - 20, ppc_r31); /* restore r15 */
}
+ if (sig->ret->type == MONO_TYPE_VALUETYPE && !sig->ret->byref) {
+ MonoClass *klass = sig->ret->data.klass;
+ if (!klass->enumtype) {
+ gint size = mono_class_native_size (klass, NULL);
+
+ DEBUG(printf ("retval value type size: %d\n", size));
+ if (size > 8) {
+ ppc_lwz (p, ppc_r3, stack_size - 12, ppc_r31);
+ ppc_lwz (p, ppc_r3, 0, ppc_r3);
+ gr ++;
+ } else {
+ NOT_IMPLEMENTED ("retval valuetype <= 8 bytes");
+ }
+ }
+ }
+
for (i = 0; i < sig->param_count; ++i) {
if (sig->params [i]->byref) {
SAVE_4_IN_GENERIC_REGISTER;
simpletype = sig->ret->data.klass->enum_basetype->type;
goto enum_retvalue;
}
- NOT_IMPLEMENTED ("retval valuetype");
break;
case MONO_TYPE_VOID:
break;