Merge pull request #1542 from ninjarobot/UriTemplateMatchException
[mono.git] / mono / metadata / icall.c
index 3210bd0240112439f8677bc6384683b0698fd883..545d7608c14d0d1aa478f39ff372554dd7e21625 100644 (file)
@@ -95,7 +95,7 @@
 #include <windows.h>
 #include <shlobj.h>
 #endif
-#include "decimal.h"
+#include "decimal-ms.h"
 
 extern MonoString* ves_icall_System_Environment_GetOSVersionString (void) MONO_INTERNAL;
 
@@ -126,8 +126,6 @@ mono_double_ParseImpl (char *ptr, double *result)
        gchar *endptr = NULL;
        *result = 0.0;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (*ptr){
                /* mono_strtod () is not thread-safe */
                mono_mutex_lock (&mono_strtod_mutex);
@@ -149,8 +147,6 @@ ves_icall_System_Array_GetValueImpl (MonoObject *this, guint32 pos)
        gint32 esize;
        gpointer *ea;
 
-       MONO_ARCH_SAVE_REGS;
-
        ao = (MonoArray *)this;
        ac = (MonoClass *)ao->obj.vtable->klass;
 
@@ -170,8 +166,6 @@ ves_icall_System_Array_GetValue (MonoObject *this, MonoObject *idxs)
        MonoArray *ao, *io;
        gint32 i, pos, *ind;
 
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (idxs);
 
        io = (MonoArray *)idxs;
@@ -218,8 +212,6 @@ ves_icall_System_Array_SetValueImpl (MonoArray *this, MonoObject *value, guint32
        gint64 i64 = 0;
        gdouble r64 = 0;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (value)
                vc = value->vtable->klass;
        else
@@ -491,8 +483,6 @@ ves_icall_System_Array_SetValue (MonoArray *this, MonoObject *value,
        MonoClass *ac, *ic;
        gint32 i, pos, *ind;
 
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (idxs);
 
        ic = idxs->obj.vtable->klass;
@@ -533,8 +523,6 @@ ves_icall_System_Array_CreateInstanceImpl (MonoReflectionType *type, MonoArray *
        uintptr_t *sizes, i;
        gboolean bounded = FALSE;
 
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (type);
        MONO_CHECK_ARG_NULL (lengths);
 
@@ -579,8 +567,6 @@ ves_icall_System_Array_CreateInstanceImpl64 (MonoReflectionType *type, MonoArray
        uintptr_t *sizes, i;
        gboolean bounded = FALSE;
 
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (type);
        MONO_CHECK_ARG_NULL (lengths);
 
@@ -621,8 +607,6 @@ ves_icall_System_Array_CreateInstanceImpl64 (MonoReflectionType *type, MonoArray
 ICALL_EXPORT gint32 
 ves_icall_System_Array_GetRank (MonoObject *this)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return this->vtable->klass->rank;
 }
 
@@ -632,8 +616,6 @@ ves_icall_System_Array_GetLength (MonoArray *this, gint32 dimension)
        gint32 rank = ((MonoObject *)this)->vtable->klass->rank;
        uintptr_t length;
 
-       MONO_ARCH_SAVE_REGS;
-
        if ((dimension < 0) || (dimension >= rank))
                mono_raise_exception (mono_get_exception_index_out_of_range ());
        
@@ -654,8 +636,6 @@ ves_icall_System_Array_GetLongLength (MonoArray *this, gint32 dimension)
 {
        gint32 rank = ((MonoObject *)this)->vtable->klass->rank;
 
-       MONO_ARCH_SAVE_REGS;
-
        if ((dimension < 0) || (dimension >= rank))
                mono_raise_exception (mono_get_exception_index_out_of_range ());
        
@@ -670,8 +650,6 @@ ves_icall_System_Array_GetLowerBound (MonoArray *this, gint32 dimension)
 {
        gint32 rank = ((MonoObject *)this)->vtable->klass->rank;
 
-       MONO_ARCH_SAVE_REGS;
-
        if ((dimension < 0) || (dimension >= rank))
                mono_raise_exception (mono_get_exception_index_out_of_range ());
        
@@ -760,8 +738,6 @@ ves_icall_System_Array_GetGenericValueImpl (MonoObject *this, guint32 pos, gpoin
        gint32 esize;
        gpointer *ea;
 
-       MONO_ARCH_SAVE_REGS;
-
        ao = (MonoArray *)this;
        ac = (MonoClass *)ao->obj.vtable->klass;
 
@@ -779,8 +755,6 @@ ves_icall_System_Array_SetGenericValueImpl (MonoObject *this, guint32 pos, gpoin
        gint32 esize;
        gpointer *ea;
 
-       MONO_ARCH_SAVE_REGS;
-
        ao = (MonoArray *)this;
        ac = (MonoClass *)ao->obj.vtable->klass;
        ec = ac->element_class;
@@ -872,16 +846,12 @@ ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_InitializeArray (MonoAr
 ICALL_EXPORT gint
 ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_GetOffsetToStringData (void)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return offsetof (MonoString, chars);
 }
 
 ICALL_EXPORT MonoObject *
 ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_GetObjectValue (MonoObject *obj)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if ((obj == NULL) || (! (obj->vtable->klass->valuetype)))
                return obj;
        else
@@ -950,8 +920,6 @@ ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_SufficientExecutionStac
 ICALL_EXPORT MonoObject *
 ves_icall_System_Object_MemberwiseClone (MonoObject *this)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return mono_object_clone (this);
 }
 
@@ -966,8 +934,6 @@ ves_icall_System_ValueType_InternalGetHashCode (MonoObject *this, MonoArray **fi
        MonoClassField* field;
        gpointer iter;
 
-       MONO_ARCH_SAVE_REGS;
-
        klass = mono_object_class (this);
 
        if (mono_class_num_fields (klass) == 0)
@@ -1025,8 +991,6 @@ ves_icall_System_ValueType_Equals (MonoObject *this, MonoObject *that, MonoArray
        gpointer iter;
        int count = 0;
 
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (that);
 
        if (this->vtable != that->vtable)
@@ -1130,8 +1094,6 @@ ves_icall_System_ValueType_Equals (MonoObject *this, MonoObject *that, MonoArray
 ICALL_EXPORT MonoReflectionType *
 ves_icall_System_Object_GetType (MonoObject *obj)
 {
-       MONO_ARCH_SAVE_REGS;
-
 #ifndef DISABLE_REMOTING
        if (obj->vtable->klass == mono_defaults.transparent_proxy_class)
                return mono_type_get_object (mono_object_domain (obj), &((MonoTransparentProxy*)obj)->remote_class->proxy_class->byval_arg);
@@ -1143,8 +1105,6 @@ ves_icall_System_Object_GetType (MonoObject *obj)
 ICALL_EXPORT void
 mono_type_type_from_obj (MonoReflectionType *mtype, MonoObject *obj)
 {
-       MONO_ARCH_SAVE_REGS;
-
        mtype->type = &obj->vtable->klass->byval_arg;
        g_assert (mtype->type->type);
 }
@@ -1152,8 +1112,6 @@ mono_type_type_from_obj (MonoReflectionType *mtype, MonoObject *obj)
 ICALL_EXPORT gint32
 ves_icall_ModuleBuilder_getToken (MonoReflectionModuleBuilder *mb, MonoObject *obj, gboolean create_open_instance)
 {
-       MONO_ARCH_SAVE_REGS;
-       
        MONO_CHECK_ARG_NULL (obj);
        
        return mono_image_create_token (mb->dynamic_image, obj, create_open_instance, TRUE);
@@ -1164,8 +1122,6 @@ ves_icall_ModuleBuilder_getMethodToken (MonoReflectionModuleBuilder *mb,
                                        MonoReflectionMethod *method,
                                        MonoArray *opt_param_types)
 {
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (method);
        
        return mono_image_create_method_token (
@@ -1175,24 +1131,18 @@ ves_icall_ModuleBuilder_getMethodToken (MonoReflectionModuleBuilder *mb,
 ICALL_EXPORT void
 ves_icall_ModuleBuilder_WriteToFile (MonoReflectionModuleBuilder *mb, HANDLE file)
 {
-       MONO_ARCH_SAVE_REGS;
-
        mono_image_create_pefile (mb, file);
 }
 
 ICALL_EXPORT void
 ves_icall_ModuleBuilder_build_metadata (MonoReflectionModuleBuilder *mb)
 {
-       MONO_ARCH_SAVE_REGS;
-
        mono_image_build_metadata (mb);
 }
 
 ICALL_EXPORT void
 ves_icall_ModuleBuilder_RegisterToken (MonoReflectionModuleBuilder *mb, MonoObject *obj, guint32 token)
 {
-       MONO_ARCH_SAVE_REGS;
-
        mono_image_register_token (mb->dynamic_image, token, obj);
 }
 
@@ -1271,8 +1221,6 @@ type_from_name (const char *str, MonoBoolean ignoreCase)
        char *temp_str = g_strdup (str);
        gboolean type_resolve = FALSE;
 
-       MONO_ARCH_SAVE_REGS;
-
        /* mono_reflection_parse_type() mangles the string */
        if (!mono_reflection_parse_type (temp_str, &info)) {
                mono_reflection_free_type_info (&info);
@@ -1376,16 +1324,12 @@ ves_icall_type_from_handle (MonoType *handle)
 {
        MonoDomain *domain = mono_domain_get (); 
 
-       MONO_ARCH_SAVE_REGS;
-
        return mono_type_get_object (domain, handle);
 }
 
 ICALL_EXPORT MonoBoolean
 ves_icall_System_Type_EqualsInternal (MonoReflectionType *type, MonoReflectionType *c)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if (c && type->type && c->type)
                return mono_metadata_type_equal (type->type, c->type);
        else
@@ -1419,8 +1363,6 @@ ves_icall_type_GetTypeCodeInternal (MonoReflectionType *type)
 {
        int t = type->type->type;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (type->type->byref)
                return TYPECODE_OBJECT;
 
@@ -1505,8 +1447,6 @@ ves_icall_type_is_subtype_of (MonoReflectionType *type, MonoReflectionType *c, M
        MonoClass *klass;
        MonoClass *klassc;
 
-       MONO_ARCH_SAVE_REGS;
-
        g_assert (type != NULL);
        
        domain = ((MonoObject *)type)->vtable->domain;
@@ -1558,8 +1498,6 @@ ves_icall_type_is_assignable_from (MonoReflectionType *type, MonoReflectionType
        MonoClass *klass;
        MonoClass *klassc;
 
-       MONO_ARCH_SAVE_REGS;
-
        g_assert (type != NULL);
        
        domain = ((MonoObject *)type)->vtable->domain;
@@ -1692,7 +1630,6 @@ ves_icall_get_method_info (MonoMethod *method, MonoMethodInfo *info)
        MonoError error;
        MonoDomain *domain = mono_domain_get ();
        MonoMethodSignature* sig;
-       MONO_ARCH_SAVE_REGS;
 
        sig = mono_method_signature_checked (method, &error);
        if (!mono_error_ok (&error))
@@ -1759,7 +1696,6 @@ ICALL_EXPORT MonoReflectionType*
 ves_icall_MonoField_GetParentType (MonoReflectionField *field, MonoBoolean declaring)
 {
        MonoClass *parent;
-       MONO_ARCH_SAVE_REGS;
 
        parent = declaring? field->field->parent: field->klass;
 
@@ -1791,8 +1727,6 @@ ves_icall_MonoField_SetValueInternal (MonoReflectionField *field, MonoObject *ob
        MonoType *type;
        gchar *v;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (field->klass->image->assembly->ref_only)
                mono_raise_exception (mono_get_exception_invalid_operation (
                                        "It is illegal to set the value on a field on a type loaded using the ReflectionOnly methods."));
@@ -1887,8 +1821,6 @@ ves_icall_MonoField_GetRawConstantValue (MonoReflectionField *this)
        MonoType *t;
        MonoError error;
 
-       MONO_ARCH_SAVE_REGS;
-       
        mono_class_init (field->parent);
 
        t = mono_field_get_type_checked (field, &error);
@@ -1989,8 +1921,6 @@ ves_icall_get_property_info (MonoReflectionProperty *property, MonoPropertyInfo
 {
        MonoDomain *domain = mono_object_domain (property); 
 
-       MONO_ARCH_SAVE_REGS;
-
        if ((req_info & PInfo_ReflectedType) != 0)
                MONO_STRUCT_SETREF (info, parent, mono_type_get_object (domain, &property->klass->byval_arg));
        if ((req_info & PInfo_DeclaringType) != 0)
@@ -2020,8 +1950,6 @@ ves_icall_get_event_info (MonoReflectionMonoEvent *event, MonoEventInfo *info)
 {
        MonoDomain *domain = mono_object_domain (event); 
 
-       MONO_ARCH_SAVE_REGS;
-
        MONO_STRUCT_SETREF (info, reflected_type, mono_type_get_object (domain, &event->klass->byval_arg));
        MONO_STRUCT_SETREF (info, declaring_type, mono_type_get_object (domain, &event->event->parent->byval_arg));
 
@@ -2156,7 +2084,6 @@ ves_icall_Type_GetInterfaceMapData (MonoReflectionType *type, MonoReflectionType
        int i = 0, len, ioffset;
        MonoDomain *domain;
 
-       MONO_ARCH_SAVE_REGS;
        mono_class_init_or_throw (class);
        mono_class_init_or_throw (iclass);
 
@@ -2201,8 +2128,6 @@ ves_icall_MonoType_GetElementType (MonoReflectionType *type)
 {
        MonoClass *class;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (!type->type->byref && type->type->type == MONO_TYPE_SZARRAY)
                return mono_type_get_object (mono_object_domain (type), &type->type->data.klass->byval_arg);
 
@@ -2231,24 +2156,18 @@ ves_icall_get_type_parent (MonoReflectionType *type)
 ICALL_EXPORT MonoBoolean
 ves_icall_type_ispointer (MonoReflectionType *type)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return type->type->type == MONO_TYPE_PTR;
 }
 
 ICALL_EXPORT MonoBoolean
 ves_icall_type_isprimitive (MonoReflectionType *type)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return (!type->type->byref && (((type->type->type >= MONO_TYPE_BOOLEAN) && (type->type->type <= MONO_TYPE_R8)) || (type->type->type == MONO_TYPE_I) || (type->type->type == MONO_TYPE_U)));
 }
 
 ICALL_EXPORT MonoBoolean
 ves_icall_type_isbyref (MonoReflectionType *type)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return type->type->byref;
 }
 
@@ -2282,8 +2201,6 @@ ves_icall_MonoType_get_DeclaringType (MonoReflectionType *type)
        MonoDomain *domain = mono_domain_get ();
        MonoClass *class;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (type->type->byref)
                return NULL;
        if (type->type->type == MONO_TYPE_VAR) {
@@ -2353,7 +2270,6 @@ ves_icall_MonoType_GetGenericArguments (MonoReflectionType *type)
        MonoDomain *domain = mono_object_domain (type);
        MonoVTable *array_vtable = mono_class_vtable_full (domain, mono_array_class_get_cached (mono_defaults.systemtype_class, 1), TRUE);
        int i;
-       MONO_ARCH_SAVE_REGS;
 
        klass = mono_class_from_mono_type (type->type);
 
@@ -2379,7 +2295,6 @@ ICALL_EXPORT gboolean
 ves_icall_Type_get_IsGenericTypeDefinition (MonoReflectionType *type)
 {
        MonoClass *klass;
-       MONO_ARCH_SAVE_REGS;
 
        if (!IS_MONOTYPE (type))
                return FALSE;
@@ -2395,7 +2310,6 @@ ICALL_EXPORT MonoReflectionType*
 ves_icall_Type_GetGenericTypeDefinition_impl (MonoReflectionType *type)
 {
        MonoClass *klass;
-       MONO_ARCH_SAVE_REGS;
 
        if (type->type->byref)
                return NULL;
@@ -2455,7 +2369,6 @@ ICALL_EXPORT gboolean
 ves_icall_Type_get_IsGenericInstance (MonoReflectionType *type)
 {
        MonoClass *klass;
-       MONO_ARCH_SAVE_REGS;
 
        if (type->type->byref)
                return FALSE;
@@ -2469,7 +2382,6 @@ ICALL_EXPORT gboolean
 ves_icall_Type_get_IsGenericType (MonoReflectionType *type)
 {
        MonoClass *klass;
-       MONO_ARCH_SAVE_REGS;
 
        if (!IS_MONOTYPE (type))
                return FALSE;
@@ -2484,8 +2396,6 @@ ves_icall_Type_get_IsGenericType (MonoReflectionType *type)
 ICALL_EXPORT gint32
 ves_icall_Type_GetGenericParameterPosition (MonoReflectionType *type)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if (!IS_MONOTYPE (type))
                return -1;
 
@@ -2497,8 +2407,6 @@ ves_icall_Type_GetGenericParameterPosition (MonoReflectionType *type)
 ICALL_EXPORT GenericParameterAttributes
 ves_icall_Type_GetGenericParameterAttributes (MonoReflectionType *type)
 {
-       MONO_ARCH_SAVE_REGS;
-
        g_assert (IS_MONOTYPE (type));
        g_assert (is_generic_parameter (type->type));
        return mono_generic_param_info (type->type->data.generic_param)->flags;
@@ -2513,8 +2421,6 @@ ves_icall_Type_GetGenericParameterConstraints (MonoReflectionType *type)
        MonoArray *res;
        int i, count;
 
-       MONO_ARCH_SAVE_REGS;
-
        g_assert (IS_MONOTYPE (type));
 
        domain = mono_object_domain (type);
@@ -2533,14 +2439,12 @@ ves_icall_Type_GetGenericParameterConstraints (MonoReflectionType *type)
 ICALL_EXPORT MonoBoolean
 ves_icall_MonoType_get_IsGenericParameter (MonoReflectionType *type)
 {
-       MONO_ARCH_SAVE_REGS;
        return is_generic_parameter (type->type);
 }
 
 ICALL_EXPORT MonoBoolean
 ves_icall_TypeBuilder_get_IsGenericParameter (MonoReflectionTypeBuilder *tb)
 {
-       MONO_ARCH_SAVE_REGS;
        return is_generic_parameter (tb->type.type);
 }
 
@@ -2560,8 +2464,6 @@ ves_icall_MonoType_GetCorrespondingInflatedMethod (MonoReflectionType *type,
        MonoMethod *method;
        gpointer iter;
                
-       MONO_ARCH_SAVE_REGS;
-
        domain = ((MonoObject *)type)->vtable->domain;
 
        klass = mono_class_from_mono_type (type->type);
@@ -2584,8 +2486,6 @@ ves_icall_MonoType_get_DeclaringMethod (MonoReflectionType *ref_type)
        MonoMethod *method;
        MonoType *type = ref_type->type;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (type->byref || (type->type != MONO_TYPE_MVAR && type->type != MONO_TYPE_VAR))
                mono_raise_exception (mono_get_exception_invalid_operation ("DeclaringMethod can only be used on generic arguments"));
        if (type->type == MONO_TYPE_VAR)
@@ -2672,8 +2572,6 @@ ves_icall_MonoMethod_GetGenericMethodDefinition (MonoReflectionMethod *method)
        MonoMethodInflated *imethod;
        MonoMethod *result;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (method->method->is_generic)
                return method;
 
@@ -2719,16 +2617,12 @@ ves_icall_MonoMethod_GetGenericMethodDefinition (MonoReflectionMethod *method)
 ICALL_EXPORT gboolean
 ves_icall_MonoMethod_get_IsGenericMethod (MonoReflectionMethod *method)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return mono_method_signature (method->method)->generic_param_count != 0;
 }
 
 ICALL_EXPORT gboolean
 ves_icall_MonoMethod_get_IsGenericMethodDefinition (MonoReflectionMethod *method)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return method->method->is_generic;
 }
 
@@ -2738,7 +2632,6 @@ ves_icall_MonoMethod_GetGenericArguments (MonoReflectionMethod *method)
        MonoArray *res;
        MonoDomain *domain;
        int count, i;
-       MONO_ARCH_SAVE_REGS;
 
        domain = mono_object_domain (method);
 
@@ -2785,8 +2678,6 @@ ves_icall_InternalInvoke (MonoReflectionMethod *method, MonoObject *this, MonoAr
        int pcount;
        void *obj = this;
 
-       MONO_ARCH_SAVE_REGS;
-
        *exc = NULL;
 
        if (mono_security_core_clr_enabled ())
@@ -2894,10 +2785,7 @@ ves_icall_InternalExecute (MonoReflectionMethod *method, MonoObject *this, MonoA
        MonoObject *result;
        int i, j, outarg_count = 0;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (m->klass == mono_defaults.object_class) {
-
                if (!strcmp (m->name, "FieldGetter")) {
                        MonoClass *k = this->vtable->klass;
                        MonoString *name;
@@ -3084,8 +2972,6 @@ ves_icall_System_Enum_ToObject (MonoReflectionType *enumType, MonoObject *value)
        MonoType *etype;
        guint64 val;
        
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (enumType);
        MONO_CHECK_ARG_NULL (value);
 
@@ -3134,8 +3020,6 @@ ves_icall_System_Enum_get_value (MonoObject *this)
        gpointer src;
        int size;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (!this)
                return NULL;
 
@@ -3158,8 +3042,6 @@ ves_icall_System_Enum_get_underlying_type (MonoReflectionType *type)
        MonoType *etype;
        MonoClass *klass;
 
-       MONO_ARCH_SAVE_REGS;
-
        klass = mono_class_from_mono_type (type->type);
        mono_class_init_or_throw (klass);
 
@@ -3254,8 +3136,6 @@ ves_icall_get_enum_info (MonoReflectionType *type, MonoEnumInfo *info)
        gpointer iter;
        MonoClassField *field;
 
-       MONO_ARCH_SAVE_REGS;
-
        mono_class_init_or_throw (enumc);
 
        MONO_STRUCT_SETREF (info, utype, mono_type_get_object (domain, mono_class_enum_basetype (enumc)));
@@ -3406,8 +3286,6 @@ ves_icall_Type_GetFields_internal (MonoReflectionType *type, guint32 bflags, Mon
        MonoClassField *field;
        MonoPtrArray tmp_array;
 
-       MONO_ARCH_SAVE_REGS;
-
        domain = ((MonoObject *)type)->vtable->domain;
        if (type->type->byref)
                return mono_array_new (domain, mono_defaults.field_info_class, 0);
@@ -3655,8 +3533,6 @@ ves_icall_Type_GetConstructors_internal (MonoReflectionType *type, guint32 bflag
        gpointer iter = NULL;
        MonoPtrArray tmp_array;
        
-       MONO_ARCH_SAVE_REGS;
-
        mono_ptr_array_init (tmp_array, 4); /*FIXME, guestimating*/
 
        domain = ((MonoObject *)type)->vtable->domain;
@@ -3764,8 +3640,6 @@ ves_icall_Type_GetPropertiesByName (MonoReflectionType *type, MonoString *name,
        GHashTable *properties = NULL;
        MonoPtrArray tmp_array;
 
-       MONO_ARCH_SAVE_REGS;
-
        mono_ptr_array_init (tmp_array, 8); /*This the average for ASP.NET types*/
 
        if (!System_Reflection_PropertyInfo)
@@ -3879,8 +3753,6 @@ ves_icall_MonoType_GetEvent (MonoReflectionType *type, MonoString *name, guint32
        gchar *event_name;
        int (*compare_func) (const char *s1, const char *s2);
 
-       MONO_ARCH_SAVE_REGS;
-
        event_name = mono_string_to_utf8 (name);
        if (type->type->byref)
                return NULL;
@@ -3969,8 +3841,6 @@ ves_icall_Type_GetEvents_internal (MonoReflectionType *type, guint32 bflags, Mon
        GHashTable *events = NULL;
        MonoPtrArray tmp_array;
 
-       MONO_ARCH_SAVE_REGS;
-
        mono_ptr_array_init (tmp_array, 4);
 
        if (!System_Reflection_EventInfo)
@@ -4070,8 +3940,6 @@ ves_icall_Type_GetNestedType (MonoReflectionType *type, MonoString *name, guint3
        char *str;
        gpointer iter;
        
-       MONO_ARCH_SAVE_REGS;
-
        if (name == NULL)
                mono_raise_exception (mono_get_exception_argument_null ("name"));
        
@@ -4133,8 +4001,6 @@ ves_icall_Type_GetNestedTypes (MonoReflectionType *type, guint32 bflags)
        gpointer iter;
        MonoPtrArray tmp_array;
 
-       MONO_ARCH_SAVE_REGS;
-
        domain = ((MonoObject *)type)->vtable->domain;
        if (type->type->byref)
                return mono_array_new (domain, mono_defaults.monotype_class, 0);
@@ -4187,8 +4053,6 @@ ves_icall_System_Reflection_Assembly_InternalGetType (MonoReflectionAssembly *as
        MonoTypeNameParse info;
        gboolean type_resolve;
 
-       MONO_ARCH_SAVE_REGS;
-
        /* On MS.NET, this does not fire a TypeResolve event */
        type_resolve = TRUE;
        str = mono_string_to_utf8 (name);
@@ -4332,8 +4196,6 @@ ves_icall_System_Reflection_Assembly_get_code_base (MonoReflectionAssembly *asse
        gchar *absolute;
        gchar *dirname;
        
-       MONO_ARCH_SAVE_REGS;
-
        if (g_path_is_absolute (mass->image->name)) {
                absolute = g_strdup (mass->image->name);
                dirname = g_path_get_dirname (absolute);
@@ -4379,8 +4241,6 @@ ves_icall_System_Reflection_Assembly_get_global_assembly_cache (MonoReflectionAs
 {
        MonoAssembly *mass = assembly->assembly;
 
-       MONO_ARCH_SAVE_REGS;
-
        return mass->in_gac;
 }
 
@@ -4391,8 +4251,6 @@ ves_icall_System_Reflection_Assembly_load_with_partial_name (MonoString *mname,
        MonoAssembly *res;
        MonoImageOpenStatus status;
        
-       MONO_ARCH_SAVE_REGS;
-
        name = mono_string_to_utf8 (mname);
        res = mono_assembly_load_with_partial_name (name, &status);
 
@@ -4409,8 +4267,6 @@ ves_icall_System_Reflection_Assembly_get_location (MonoReflectionAssembly *assem
        MonoDomain *domain = mono_object_domain (assembly); 
        MonoString *res;
 
-       MONO_ARCH_SAVE_REGS;
-
        res = mono_string_new (domain, mono_image_get_filename (assembly->assembly->image));
 
        return res;
@@ -4419,8 +4275,6 @@ ves_icall_System_Reflection_Assembly_get_location (MonoReflectionAssembly *assem
 ICALL_EXPORT MonoBoolean
 ves_icall_System_Reflection_Assembly_get_ReflectionOnly (MonoReflectionAssembly *assembly)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return assembly->assembly->ref_only;
 }
 
@@ -4429,8 +4283,6 @@ ves_icall_System_Reflection_Assembly_InternalImageRuntimeVersion (MonoReflection
 {
        MonoDomain *domain = mono_object_domain (assembly); 
 
-       MONO_ARCH_SAVE_REGS;
-
        return mono_string_new (domain, assembly->assembly->image->version);
 }
 
@@ -4441,8 +4293,6 @@ ves_icall_System_Reflection_Assembly_get_EntryPoint (MonoReflectionAssembly *ass
        MonoMethod *method;
        guint32 token = mono_image_get_entry_point (assembly->assembly->image);
 
-       MONO_ARCH_SAVE_REGS;
-
        if (!token)
                return NULL;
        method = mono_get_method_checked (assembly->assembly->image, token, NULL, NULL, &error);
@@ -4465,8 +4315,6 @@ ves_icall_System_Reflection_Assembly_GetManifestResourceNames (MonoReflectionAss
        int i;
        const char *val;
 
-       MONO_ARCH_SAVE_REGS;
-
        for (i = 0; i < table->rows; ++i) {
                val = mono_metadata_string_heap (assembly->assembly->image, mono_metadata_decode_row_col (table, i, MONO_MANIFEST_NAME));
                mono_array_setref (result, i, mono_string_new (mono_object_domain (assembly), val));
@@ -4515,8 +4363,6 @@ ves_icall_System_Reflection_Assembly_GetReferencedAssemblies (MonoReflectionAsse
        MonoImage *image = assembly->assembly->image;
        MonoTableInfo *t;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (!System_Reflection_AssemblyName)
                System_Reflection_AssemblyName = mono_class_from_name (
                        mono_defaults.corlib, "System.Reflection", "AssemblyName");
@@ -4615,8 +4461,6 @@ ves_icall_System_Reflection_Assembly_GetManifestResourceInternal (MonoReflection
        const char *val;
        MonoImage *module;
 
-       MONO_ARCH_SAVE_REGS;
-
        for (i = 0; i < table->rows; ++i) {
                mono_metadata_decode_row (table, i, cols, MONO_MANIFEST_SIZE);
                val = mono_metadata_string_heap (assembly->assembly->image, cols [MONO_MANIFEST_NAME]);
@@ -4658,8 +4502,6 @@ ves_icall_System_Reflection_Assembly_GetManifestResourceInfoInternal (MonoReflec
        const char *val;
        char *n;
 
-       MONO_ARCH_SAVE_REGS;
-
        n = mono_string_to_utf8 (name);
        for (i = 0; i < table->rows; ++i) {
                mono_metadata_decode_row (table, i, cols, MONO_MANIFEST_SIZE);
@@ -4722,8 +4564,6 @@ ves_icall_System_Reflection_Assembly_GetFilesInternal (MonoReflectionAssembly *a
        const char *val;
        char *n;
 
-       MONO_ARCH_SAVE_REGS;
-
        /* check hash if needed */
        if (name) {
                n = mono_string_to_utf8 (name);
@@ -4902,8 +4742,6 @@ ves_icall_System_Reflection_Assembly_GetExecutingAssembly (void)
 {
        MonoMethod *dest = NULL;
 
-       MONO_ARCH_SAVE_REGS;
-
        mono_stack_walk_no_il (get_executing, &dest);
        g_assert (dest);
        return mono_assembly_get_object (mono_domain_get (), dest->klass->image->assembly);
@@ -4915,8 +4753,6 @@ ves_icall_System_Reflection_Assembly_GetEntryAssembly (void)
 {
        MonoDomain* domain = mono_domain_get ();
 
-       MONO_ARCH_SAVE_REGS;
-
        if (!domain->entry_assembly)
                return NULL;
 
@@ -4929,8 +4765,6 @@ ves_icall_System_Reflection_Assembly_GetCallingAssembly (void)
        MonoMethod *m;
        MonoMethod *dest;
 
-       MONO_ARCH_SAVE_REGS;
-
        dest = NULL;
        mono_stack_walk_no_il (get_executing, &dest);
        m = dest;
@@ -4989,8 +4823,6 @@ fill_reflection_assembly_name (MonoDomain *domain, MonoReflectionAssemblyName *a
        gchar *codebase;
        MonoBoolean assembly_ref = 0;
 
-       MONO_ARCH_SAVE_REGS;
-
        MONO_OBJECT_SETREF (aname, name, mono_string_new (domain, name->name));
        aname->major = name->major;
        aname->minor = name->minor;
@@ -5099,8 +4931,6 @@ ves_icall_System_Reflection_Assembly_FillName (MonoReflectionAssembly *assembly,
        gchar *absolute;
        MonoAssembly *mass = assembly->assembly;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (g_path_is_absolute (mass->image->name)) {
                fill_reflection_assembly_name (mono_object_domain (assembly),
                        aname, &mass->aname, mass->image->name, TRUE,
@@ -5124,9 +4954,7 @@ ves_icall_System_Reflection_Assembly_InternalGetAssemblyName (MonoString *fname,
        gboolean res;
        MonoImage *image;
        MonoAssemblyName name;
-       char *dirname
-
-       MONO_ARCH_SAVE_REGS;
+       char *dirname;
 
        filename = mono_string_to_utf8 (fname);
 
@@ -5246,8 +5074,6 @@ ves_icall_System_Reflection_Assembly_GetTypes (MonoReflectionAssembly *assembly,
        GList *list = NULL;
        int i, len, ex_count;
 
-       MONO_ARCH_SAVE_REGS;
-
        domain = mono_object_domain (assembly);
 
        g_assert (!assembly_is_dynamic (assembly->assembly));
@@ -5377,8 +5203,6 @@ ves_icall_System_Reflection_Module_GetGlobalType (MonoReflectionModule *module)
        MonoDomain *domain = mono_object_domain (module); 
        MonoClass *klass;
 
-       MONO_ARCH_SAVE_REGS;
-
        g_assert (module->image);
 
        if (image_is_dynamic (module->image) && ((MonoDynamicImage*)(module->image))->initial_image)
@@ -5402,8 +5226,6 @@ ves_icall_System_Reflection_Module_GetGuidInternal (MonoReflectionModule *module
 {
        MonoDomain *domain = mono_object_domain (module); 
 
-       MONO_ARCH_SAVE_REGS;
-
        g_assert (module->image);
        return mono_string_new (domain, module->image->guid);
 }
@@ -5445,8 +5267,6 @@ ves_icall_System_Reflection_Module_InternalGetTypes (MonoReflectionModule *modul
        MonoArray *exceptions;
        int i;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (!module->image)
                return mono_array_new (mono_object_domain (module), mono_defaults.monotype_class, 0);
        else {
@@ -5758,8 +5578,6 @@ ves_icall_ModuleBuilder_create_modified_type (MonoReflectionTypeBuilder *tb, Mon
        char *str = mono_string_to_utf8 (smodifiers);
        char *p;
 
-       MONO_ARCH_SAVE_REGS;
-
        klass = mono_class_from_mono_type (tb->type.type);
        p = str;
        /* logic taken from mono_reflection_parse_type(): keep in sync */
@@ -5816,8 +5634,6 @@ ves_icall_Type_IsArrayImpl (MonoReflectionType *t)
        MonoType *type;
        MonoBoolean res;
 
-       MONO_ARCH_SAVE_REGS;
-
        type = t->type;
        res = !type->byref && (type->type == MONO_TYPE_ARRAY || type->type == MONO_TYPE_SZARRAY);
 
@@ -5843,8 +5659,6 @@ ves_icall_Type_make_array_type (MonoReflectionType *type, int rank)
 {
        MonoClass *klass, *aklass;
 
-       MONO_ARCH_SAVE_REGS;
-
        klass = mono_class_from_mono_type (type->type);
        check_for_invalid_type (klass);
 
@@ -5861,8 +5675,6 @@ ves_icall_Type_make_byref_type (MonoReflectionType *type)
 {
        MonoClass *klass;
 
-       MONO_ARCH_SAVE_REGS;
-
        klass = mono_class_from_mono_type (type->type);
        mono_class_init_or_throw (klass);
        check_for_invalid_type (klass);
@@ -5893,8 +5705,6 @@ ves_icall_System_Delegate_CreateDelegate_internal (MonoReflectionType *type, Mon
        gpointer func;
        MonoMethod *method = info->method;
 
-       MONO_ARCH_SAVE_REGS;
-
        mono_class_init_or_throw (delegate_class);
 
        mono_assert (delegate_class->parent == mono_defaults.multicastdelegate_class);
@@ -6020,8 +5830,6 @@ ves_icall_System_CurrentSystemTimeZone_GetTimeZoneData (guint32 year, MonoArray
 
        gmtoff_st = gmtoff_ds = transitioned = 0;
 
-       MONO_ARCH_SAVE_REGS;
-
        MONO_CHECK_ARG_NULL (data);
        MONO_CHECK_ARG_NULL (names);
 
@@ -6231,24 +6039,18 @@ mono_array_get_byte_length (MonoArray *array)
 ICALL_EXPORT gint32 
 ves_icall_System_Buffer_ByteLengthInternal (MonoArray *array) 
 {
-       MONO_ARCH_SAVE_REGS;
-
        return mono_array_get_byte_length (array);
 }
 
 ICALL_EXPORT gint8 
 ves_icall_System_Buffer_GetByteInternal (MonoArray *array, gint32 idx) 
 {
-       MONO_ARCH_SAVE_REGS;
-
        return mono_array_get (array, gint8, idx);
 }
 
 ICALL_EXPORT void 
 ves_icall_System_Buffer_SetByteInternal (MonoArray *array, gint32 idx, gint8 value) 
 {
-       MONO_ARCH_SAVE_REGS;
-
        mono_array_set (array, gint8, idx, value);
 }
 
@@ -6257,8 +6059,6 @@ ves_icall_System_Buffer_BlockCopyInternal (MonoArray *src, gint32 src_offset, Mo
 {
        guint8 *src_buf, *dest_buf;
 
-       MONO_ARCH_SAVE_REGS;
-
        /* This is called directly from the class libraries without going through the managed wrapper */
        MONO_CHECK_ARG_NULL (src);
        MONO_CHECK_ARG_NULL (dest);
@@ -6289,8 +6089,6 @@ ves_icall_Remoting_RealProxy_GetTransparentProxy (MonoObject *this, MonoString *
        MonoType *type;
        MonoClass *klass;
 
-       MONO_ARCH_SAVE_REGS;
-
        res = mono_object_new (domain, mono_defaults.transparent_proxy_class);
        tp = (MonoTransparentProxy*) res;
        
@@ -6317,8 +6115,6 @@ ves_icall_Remoting_RealProxy_InternalGetProxyType (MonoTransparentProxy *tp)
 MonoString*
 ves_icall_System_Environment_get_UserName (void)
 {
-       MONO_ARCH_SAVE_REGS;
-
        /* using glib is more portable */
        return mono_string_new (mono_domain_get (), g_get_user_name ());
 }
@@ -6381,8 +6177,6 @@ ves_icall_System_Environment_get_Platform (void)
 ICALL_EXPORT MonoString *
 ves_icall_System_Environment_get_NewLine (void)
 {
-       MONO_ARCH_SAVE_REGS;
-
 #if defined (HOST_WIN32)
        return mono_string_new (mono_domain_get (), "\r\n");
 #else
@@ -6396,8 +6190,6 @@ ves_icall_System_Environment_GetEnvironmentVariable (MonoString *name)
        const gchar *value;
        gchar *utf8_name;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (name == NULL)
                return NULL;
 
@@ -6489,8 +6281,6 @@ ves_icall_System_Environment_GetEnvironmentVariableNames (void)
        gchar **e, **parts;
        int n;
 
-       MONO_ARCH_SAVE_REGS;
-
        n = 0;
        for (e = environ; *e != 0; ++ e)
                ++ n;
@@ -6533,8 +6323,6 @@ ves_icall_System_Environment_InternalSetEnvironmentVariable (MonoString *name, M
        MonoError error;
 #endif
 
-       MONO_ARCH_SAVE_REGS;
-       
 #ifdef HOST_WIN32
        utf16_name = mono_string_to_utf16 (name);
        if ((value == NULL) || (mono_string_length (value) == 0) || (mono_string_chars (value)[0] == 0)) {
@@ -6573,8 +6361,6 @@ ves_icall_System_Environment_InternalSetEnvironmentVariable (MonoString *name, M
 ICALL_EXPORT void
 ves_icall_System_Environment_Exit (int result)
 {
-       MONO_ARCH_SAVE_REGS;
-
        mono_environment_exitcode_set (result);
 
 /* FIXME: There are some cleanup hangs that should be worked out, but
@@ -6635,9 +6421,7 @@ ves_icall_System_Environment_GetLogicalDrives (void)
        MonoDomain *domain = mono_domain_get ();
        gint len;
 
-       MONO_ARCH_SAVE_REGS;
-
-        buf [0] = '\0';
+       buf [0] = '\0';
        ptr = buf;
 
        while (size > initial_size) {
@@ -6690,8 +6474,6 @@ ves_icall_System_IO_DriveInfo_GetDriveFormat (MonoString *path)
 ICALL_EXPORT MonoString *
 ves_icall_System_Environment_InternalGetHome (void)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return mono_string_new (mono_domain_get (), g_get_home_dir ());
 }
 
@@ -6723,7 +6505,7 @@ static const char *encodings [] = {
  * returns the code page as a string
  */
 ICALL_EXPORT MonoString*
-ves_icall_System_Text_Encoding_InternalCodePage (gint32 *int_code_page) 
+ves_icall_System_Text_EncodingHelper_InternalCodePage (gint32 *int_code_page) 
 {
        const char *cset;
        const char *p;
@@ -6734,7 +6516,6 @@ ves_icall_System_Text_Encoding_InternalCodePage (gint32 *int_code_page)
        int i;
        
        *int_code_page = -1;
-       MONO_ARCH_SAVE_REGS;
 
        g_get_charset (&cset);
        c = codepage = strdup (cset);
@@ -6797,8 +6578,6 @@ ves_icall_MonoMethodMessage_InitMessage (MonoMethodMessage *this,
                                         MonoReflectionMethod *method,
                                         MonoArray *out_args)
 {
-       MONO_ARCH_SAVE_REGS;
-
        mono_message_init (mono_object_domain (this), this, method, out_args);
 }
 
@@ -6806,8 +6585,6 @@ ves_icall_MonoMethodMessage_InitMessage (MonoMethodMessage *this,
 ICALL_EXPORT MonoBoolean
 ves_icall_IsTransparentProxy (MonoObject *proxy)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if (!proxy)
                return 0;
 
@@ -6875,8 +6652,6 @@ ves_icall_System_Runtime_Activation_ActivationServices_EnableProxyActivation (Mo
        MonoClass *klass;
        MonoVTable* vtable;
 
-       MONO_ARCH_SAVE_REGS;
-
        klass = mono_class_from_mono_type (type->type);
        vtable = mono_class_vtable_full (mono_domain_get (), klass, TRUE);
 
@@ -6899,8 +6674,6 @@ ves_icall_System_Runtime_Activation_ActivationServices_AllocateUninitializedClas
        MonoClass *klass;
        MonoDomain *domain;
        
-       MONO_ARCH_SAVE_REGS;
-
        domain = mono_object_domain (type);
        klass = mono_class_from_mono_type (type->type);
        mono_class_init_or_throw (klass);
@@ -6920,8 +6693,6 @@ ves_icall_System_Runtime_Activation_ActivationServices_AllocateUninitializedClas
 ICALL_EXPORT MonoString *
 ves_icall_System_IO_get_temp_path (void)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return mono_string_new (mono_domain_get (), g_get_tmp_dir ());
 }
 
@@ -6936,8 +6707,6 @@ ves_icall_System_IO_DriveInfo_GetDiskFreeSpace (MonoString *path_name, guint64 *
        ULARGE_INTEGER wapi_total_number_of_bytes;
        ULARGE_INTEGER wapi_total_number_of_free_bytes;
 
-       MONO_ARCH_SAVE_REGS;
-
        *error = ERROR_SUCCESS;
        result = GetDiskFreeSpaceEx (mono_string_chars (path_name), &wapi_free_bytes_avail, &wapi_total_number_of_bytes,
                                     &wapi_total_number_of_free_bytes);
@@ -6959,8 +6728,6 @@ ves_icall_System_IO_DriveInfo_GetDiskFreeSpace (MonoString *path_name, guint64 *
 ICALL_EXPORT guint32
 ves_icall_System_IO_DriveInfo_GetDriveType (MonoString *root_path_name)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return GetDriveType (mono_string_chars (root_path_name));
 }
 #endif
@@ -6968,8 +6735,6 @@ ves_icall_System_IO_DriveInfo_GetDriveType (MonoString *root_path_name)
 ICALL_EXPORT gpointer
 ves_icall_RuntimeMethod_GetFunctionPointer (MonoMethod *method)
 {
-       MONO_ARCH_SAVE_REGS;
-
        return mono_compile_method (method);
 }
 
@@ -6979,8 +6744,6 @@ ves_icall_System_Configuration_DefaultConfig_get_machine_config_path (void)
        MonoString *mcpath;
        gchar *path;
 
-       MONO_ARCH_SAVE_REGS;
-
        path = g_build_path (G_DIR_SEPARATOR_S, mono_get_config_dir (), "mono", mono_get_runtime_info ()->framework_version, "machine.config", NULL);
 
 #if defined (HOST_WIN32)
@@ -7008,8 +6771,6 @@ get_bundled_app_config (void)
        gsize len;
        gchar *module;
 
-       MONO_ARCH_SAVE_REGS;
-
        domain = mono_domain_get ();
        file = domain->setup->configuration_file;
        if (!file)
@@ -7042,8 +6803,6 @@ get_bundled_machine_config (void)
 {
        const gchar *machine_config;
 
-       MONO_ARCH_SAVE_REGS;
-
        machine_config = mono_get_machine_config ();
 
        if (!machine_config)
@@ -7058,8 +6817,6 @@ ves_icall_System_Web_Util_ICalls_get_machine_install_dir (void)
        MonoString *ipath;
        gchar *path;
 
-       MONO_ARCH_SAVE_REGS;
-
        path = g_path_get_dirname (mono_get_config_dir ());
 
 #if defined (HOST_WIN32)
@@ -7083,8 +6840,6 @@ ves_icall_get_resources_ptr (MonoReflectionAssembly *assembly, gpointer *result,
        MonoPEResourceDataEntry *entry;
        MonoImage *image;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (!assembly || !result || !size)
                return FALSE;
 
@@ -7144,8 +6899,6 @@ ves_icall_System_Activator_CreateInstanceInternal (MonoReflectionType *type)
        MonoClass *klass;
        MonoDomain *domain;
        
-       MONO_ARCH_SAVE_REGS;
-
        domain = mono_object_domain (type);
        klass = mono_class_from_mono_type (type->type);
        mono_class_init_or_throw (klass);
@@ -7165,8 +6918,6 @@ ves_icall_MonoMethod_get_base_method (MonoReflectionMethod *m, gboolean definiti
        MonoMethod *result = NULL;
        int slot;
 
-       MONO_ARCH_SAVE_REGS;
-
        if (method->klass == NULL)
                return m;
 
@@ -7235,8 +6986,6 @@ ves_icall_MonoMethod_get_name (MonoReflectionMethod *m)
 ICALL_EXPORT void
 mono_ArgIterator_Setup (MonoArgIterator *iter, char* argsp, char* start)
 {
-       MONO_ARCH_SAVE_REGS;
-
        iter->sig = *(MonoMethodSignature**)argsp;
        
        g_assert (iter->sig->sentinelpos <= iter->sig->param_count);
@@ -7260,7 +7009,6 @@ mono_ArgIterator_IntGetNextArg (MonoArgIterator *iter)
        guint32 i, arg_size;
        gint32 align;
        MonoTypedRef res;
-       MONO_ARCH_SAVE_REGS;
 
        i = iter->sig->sentinelpos + iter->next_arg;
 
@@ -7300,7 +7048,6 @@ mono_ArgIterator_IntGetNextArgT (MonoArgIterator *iter, MonoType *type)
        guint32 i, arg_size;
        gint32 align;
        MonoTypedRef res;
-       MONO_ARCH_SAVE_REGS;
 
        i = iter->sig->sentinelpos + iter->next_arg;
 
@@ -7334,7 +7081,6 @@ ICALL_EXPORT MonoType*
 mono_ArgIterator_IntGetNextArgType (MonoArgIterator *iter)
 {
        gint i;
-       MONO_ARCH_SAVE_REGS;
        
        i = iter->sig->sentinelpos + iter->next_arg;
 
@@ -7346,8 +7092,6 @@ mono_ArgIterator_IntGetNextArgType (MonoArgIterator *iter)
 ICALL_EXPORT MonoObject*
 mono_TypedReference_ToObject (MonoTypedRef tref)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if (MONO_TYPE_IS_REFERENCE (tref.type)) {
                MonoObject** objp = tref.value;
                return *objp;
@@ -7359,8 +7103,6 @@ mono_TypedReference_ToObject (MonoTypedRef tref)
 ICALL_EXPORT MonoObject*
 mono_TypedReference_ToObjectInternal (MonoType *type, gpointer value, MonoClass *klass)
 {
-       MONO_ARCH_SAVE_REGS;
-
        if (MONO_TYPE_IS_REFERENCE (type)) {
                MonoObject** objp = value;
                return *objp;
@@ -7386,7 +7128,6 @@ prelink_method (MonoMethod *method)
 ICALL_EXPORT void
 ves_icall_System_Runtime_InteropServices_Marshal_Prelink (MonoReflectionMethod *method)
 {
-       MONO_ARCH_SAVE_REGS;
        prelink_method (method->method);
 }
 
@@ -7396,7 +7137,6 @@ ves_icall_System_Runtime_InteropServices_Marshal_PrelinkAll (MonoReflectionType
        MonoClass *klass = mono_class_from_mono_type (type->type);
        MonoMethod* m;
        gpointer iter = NULL;
-       MONO_ARCH_SAVE_REGS;
 
        mono_class_init_or_throw (klass);
 
@@ -7421,44 +7161,14 @@ ves_icall_System_NumberFormatter_GetFormatterTables (guint64 const **mantissas,
        *decHexDigits = Formatter_DecHexDigits;
 }
 
+/* These parameters are "readonly" in corlib/System/Globalization/TextInfo.cs */
 ICALL_EXPORT void
-get_category_data (int version,
-                  guint8 const **category_data,
-                  guint16 const **category_astral_index)
-{
-       *category_astral_index = NULL;
-
-#ifndef DISABLE_NET_4_0
-       if (version == 4) {
-               *category_data = CategoryData_v4;
-#ifndef DISABLE_ASTRAL
-               *category_astral_index = CategoryData_v4_astral_index;
-#endif
-               return;
-       }
-#endif
-
-       *category_data = CategoryData_v2;
-#ifndef DISABLE_ASTRAL
-       *category_astral_index = CategoryData_v2_astral_index;
-#endif
-}
-
-/* These parameters are "readonly" in corlib/System/Globalization/CharUnicodeInfo.cs */
-ICALL_EXPORT void
-ves_icall_System_Globalization_CharUnicodeInfo_GetDataTablePointers (int category_data_version,
-                                           guint8 const **category_data,
-                                           guint16 const **category_astral_index,
-                                           guint8 const **numeric_data,
-                                           gdouble const **numeric_data_values,
+ves_icall_System_Globalization_TextInfo_GetDataTablePointersLite (
                                            guint16 const **to_lower_data_low,
                                            guint16 const **to_lower_data_high,
                                            guint16 const **to_upper_data_low,
                                            guint16 const **to_upper_data_high)
 {
-       get_category_data (category_data_version, category_data, category_astral_index);
-       *numeric_data = NumericData;
-       *numeric_data_values = NumericDataValues;
        *to_lower_data_low = ToLowerDataLow;
        *to_lower_data_high = ToLowerDataHigh;
        *to_upper_data_low = ToUpperDataLow;