char buf[MAXSTR];
char buf2[MAXSTR];
const char *name;
+ const char *cp;
struc_t *frame;
func_t *func;
ea_t ui_ea_block = 0, ea_size;
if (cmd.Operands[o].type == o_mem) {
tmp_ea = cmd.Operands[o].addr;
- flags_t tmp_ea_flags = get_flags_novalue(tmp_ea);
- // ..but base float is ok..
- int is_flt = isDwrd(tmp_ea_flags) || isFloat(tmp_ea_flags);
- if (!is_flt && !isUnknown(tmp_ea_flags))
+ flags_t tmp_flg = get_flags_novalue(tmp_ea);
+ buf[0] = 0;
+ if (isDouble(tmp_flg))
{
- buf[0] = 0;
get_name(ea, tmp_ea, buf, sizeof(buf));
- msg("%x: undefining %x '%s'\n", ea, tmp_ea, buf);
+ msg("%x: converting dbl %x '%s'\n", ea, tmp_ea, buf);
+ doQwrd(tmp_ea, 8);
+ }
+ if (isOwrd(tmp_flg) || isYwrd(tmp_flg) || isTbyt(tmp_flg))
+ {
+ get_name(ea, tmp_ea, buf, sizeof(buf));
+ msg("%x: undefining lrg %x '%s'\n", ea, tmp_ea, buf);
do_unknown(tmp_ea, DOUNK_EXPAND);
}
}
}
// IDA vs masm float/mmx/xmm type incompatibility
- if (isDouble(ea_flags) || isTbyt(ea_flags)
- || isPackReal(ea_flags))
+ if (isDouble(ea_flags))
+ {
+ msg("%x: converting double\n", ea);
+ doQwrd(ea, 8);
+ }
+ else if (isTbyt(ea_flags) || isPackReal(ea_flags))
{
do_undef = 1;
}
// rename vars with '?@' (funcs are ok)
int change_qat = 0;
ea_flags = get_flags_novalue(ea);
- if (!isCode(ea_flags) && strpbrk(name, "?@"))
- change_qat = 1;
+ if (!isCode(ea_flags)) {
+ if (strchr(name, '?'))
+ change_qat = 1;
+ else if ((cp = strchr(name, '@'))) {
+ char *endp = NULL;
+ strtol(cp + 1, &endp, 10);
+ if (endp == NULL || *endp != 0)
+ change_qat = 1;
+ }
+ }
if (need_rename || change_qat) {
msg("%x: renaming name '%s'\n", ea, name);