int MR_get_register_number_short(MR_ShortLval locn) { if (MR_SHORT_LVAL_TYPE(locn) == MR_SHORT_LVAL_TYPE_R) { return locn >> MR_SHORT_LVAL_TAGBITS; } else { return -1;
static void MR_dump_short_value(MR_ShortLval locn, MR_MemoryZone *heap_zone, MR_Word *stack_pointer, MR_Word *current_frame, MR_bool do_regs) { int locn_num; MR_Word value; int difference; MR_bool have_value; value = 0; have_value = MR_FALSE; locn_num = (int) locn >> MR_SHORT_LVAL_TAGBITS; switch (MR_SHORT_LVAL_TYPE(locn)) { case MR_SHORT_LVAL_TYPE_R: if (do_regs) { value = MR_virtual_reg_value(locn_num); have_value = MR_TRUE; fprintf(stderr, "r%d\t", locn_num); } else { fprintf(stderr, "r%d (invalid)\t", locn_num); } break; case MR_SHORT_LVAL_TYPE_STACKVAR: value = MR_based_stackvar(stack_pointer, locn_num); have_value = MR_TRUE; fprintf(stderr, "stackvar%d", locn_num); break; case MR_SHORT_LVAL_TYPE_FRAMEVAR: value = MR_based_framevar(current_frame, locn_num); have_value = MR_TRUE; fprintf(stderr, "framevar%d", locn_num); break; case MR_SHORT_LVAL_TYPE_SPECIAL: switch (locn_num) { case MR_LONG_LVAL_TYPE_SUCCIP: fprintf(stderr, "succip"); break; case MR_LONG_LVAL_TYPE_MAXFR: fprintf(stderr, "succip"); break; case MR_LONG_LVAL_TYPE_CURFR: fprintf(stderr, "curfr"); break; case MR_LONG_LVAL_TYPE_HP: fprintf(stderr, "hp"); break; case MR_LONG_LVAL_TYPE_SP: fprintf(stderr, "sp"); break; default: fprintf(stderr, "SPECIAL DEFAULT"); break; } break; default: fprintf(stderr, "SHORT DEFAULT"); break; } if (have_value) { if (value >= (MR_Word) heap_zone->MR_zone_min && value < (MR_Word) heap_zone->MR_zone_hardmax) { difference = (MR_Word *) value - (MR_Word *) heap_zone->MR_zone_min; fprintf(stderr, "\thp[%d]\t(%lx)", difference, (long) value); } else { fprintf(stderr, "\t \t(%lx)", (long) value); } } }