X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini-s390x.c;h=a1094afa173fbe0baeb75c2ff221e0e9b73ae7e9;hb=3fd54893bc792eee42164bfb605b418105a92f92;hp=e593e3b350102a00c7a020e36042b5fbdce771ed;hpb=4428d538123e48267b4ced413e1be2fdc4011b9a;p=mono.git diff --git a/mono/mini/mini-s390x.c b/mono/mini/mini-s390x.c index e593e3b3501..a1094afa173 100644 --- a/mono/mini/mini-s390x.c +++ b/mono/mini/mini-s390x.c @@ -264,9 +264,11 @@ if (ins->inst_target_bb->native_offset) { \ #include #include #include +#include +#include #include #include -#include +#include #include #include "mini-s390x.h" @@ -397,8 +399,6 @@ pthread_key_t lmf_addr_key; gboolean lmf_addr_key_inited = FALSE; -facilityList_t facs; - /* * The code generated for sequence points reads from this location, * which is made read-only when single stepping is enabled. @@ -765,6 +765,20 @@ cvtMonoType(MonoTypeEnum t) /* */ /*------------------------------------------------------------------*/ +static void +decodeParmString (MonoString *s) +{ + MonoError error; + char *str = mono_string_to_utf8_checked(s, &error); + if (is_ok (&error)) { + printf("[STRING:%p:%s], ", s, str); + g_free (str); + } else { + mono_error_cleanup (&error); + printf("[STRING:%p:], ", s); + } +} + static void decodeParm(MonoType *type, void *curParm, int size) { @@ -813,7 +827,7 @@ enum_parmtype: MonoString *s = *((MonoString **) curParm); if (s) { g_assert (((MonoObject *) s)->vtable->klass == mono_defaults.string_class); - printf("[STRING:%p:%s], ", s, mono_string_to_utf8(s)); + decodeParmString (s); } else { printf("[STRING:null], "); } @@ -828,8 +842,7 @@ enum_parmtype: klass = obj->vtable->klass; printf("%p [%p] ",obj,curParm); if (klass == mono_defaults.string_class) { - printf("[STRING:%p:%s]", - obj, mono_string_to_utf8 ((MonoString *) obj)); + decodeParmString ((MonoString *)obj); } else if (klass == mono_defaults.int32_class) { printf("[INT32:%p:%d]", obj, *(gint32 *)((char *)obj + sizeof (MonoObject))); @@ -969,8 +982,8 @@ enter_method (MonoMethod *method, RegParm *rParm, char *sp) if (obj->vtable) { klass = obj->vtable->klass; if (klass == mono_defaults.string_class) { - printf ("this:[STRING:%p:%s], ", - obj, mono_string_to_utf8 ((MonoString *)obj)); + printf ("this:"); + decodeParmString((MonoString *)obj); } else { printf ("this:%p[%s.%s], ", obj, klass->name_space, klass->name); @@ -1126,7 +1139,7 @@ handle_enum: ; if (s) { g_assert (((MonoObject *)s)->vtable->klass == mono_defaults.string_class); - printf ("[STRING:%p:%s]", s, mono_string_to_utf8 (s)); + decodeParmString (s); } else printf ("[STRING:null], "); break; @@ -4355,7 +4368,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) } break; case OP_ICONV_TO_R_UN: { - if (facs.fpe) { + if (mono_hwcap_s390x_has_fpe) { s390_cdlfbr (code, ins->dreg, 5, ins->sreg1, 0); } else { s390_llgfr (code, s390_r0, ins->sreg1); @@ -4364,7 +4377,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) } break; case OP_LCONV_TO_R_UN: { - if (facs.fpe) { + if (mono_hwcap_s390x_has_fpe) { s390_cdlgbr (code, ins->dreg, 5, ins->sreg1, 0); } else { short int *jump; @@ -4401,7 +4414,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) s390_ngr (code, ins->dreg, s390_r0); break; case OP_FCONV_TO_U1: - if (facs.fpe) { + if (mono_hwcap_s390x_has_fpe) { s390_clgdbr (code, ins->dreg, 5, ins->sreg1, 0); s390_lghi (code, s390_r0, 0xff); s390_ngr (code, ins->dreg, s390_r0); @@ -4418,7 +4431,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) s390_ngr (code, ins->dreg, s390_r0); break; case OP_FCONV_TO_U2: - if (facs.fpe) { + if (mono_hwcap_s390x_has_fpe) { s390_clgdbr (code, ins->dreg, 5, ins->sreg1, 0); s390_llill (code, s390_r0, 0xffff); s390_ngr (code, ins->dreg, s390_r0); @@ -4432,7 +4445,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) break; case OP_FCONV_TO_U4: case OP_FCONV_TO_U: - if (facs.fpe) { + if (mono_hwcap_s390x_has_fpe) { s390_clfdbr (code, ins->dreg, 5, ins->sreg1, 0); } else { code = emit_float_to_int (cfg, code, ins->dreg, ins->sreg1, 4, FALSE); @@ -4442,7 +4455,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) s390_cgdbr (code, ins->dreg, 5, ins->sreg1); break; case OP_FCONV_TO_U8: - if (facs.fpe) { + if (mono_hwcap_s390x_has_fpe) { s390_clgdbr (code, ins->dreg, 5, ins->sreg1, 0); } else { code = emit_float_to_int (cfg, code, ins->dreg, ins->sreg1, 8, FALSE); @@ -5386,18 +5399,20 @@ mono_arch_register_lowlevel_calls (void) void mono_arch_patch_code (MonoCompile *cfg, MonoMethod *method, MonoDomain *domain, - guint8 *code, MonoJumpInfo *ji, gboolean run_cctors) + guint8 *code, MonoJumpInfo *ji, gboolean run_cctors, + MonoError *error) { MonoJumpInfo *patch_info; - MonoError error; + + mono_error_init (error); for (patch_info = ji; patch_info; patch_info = patch_info->next) { unsigned char *ip = patch_info->ip.i + code; gconstpointer target = NULL; target = mono_resolve_patch_target (method, domain, code, - patch_info, run_cctors, &error); - mono_error_raise_exception (&error); /* FIXME: don't raise here */ + patch_info, run_cctors, error); + return_if_nok (error); switch (patch_info->type) { case MONO_PATCH_INFO_IP: @@ -7060,7 +7075,7 @@ mono_arch_cpu_enumerate_simd_versions (void) { guint32 sseOpts = 0; - if (facs.vec != 0) + if (mono_hwcap_s390x_has_vec) sseOpts = (SIMD_VERSION_SSE1 | SIMD_VERSION_SSE2 | SIMD_VERSION_SSE3 | SIMD_VERSION_SSSE3 | SIMD_VERSION_SSE41 | SIMD_VERSION_SSE42 |