+ switch (lmod)
+ {
+ case OPLM_BYTE:
+ if (is_src && (offset & 3) == 0)
+ snprintf(buf, buf_size, "(u8)a%d", i + 1);
+ else
+ snprintf(buf, buf_size, "BYTE%d(a%d)", offset & 3, i + 1);
+ break;
+
+ case OPLM_WORD:
+ if (offset & 1)
+ ferr(po, "unaligned arg access\n");
+ if (is_src && (offset & 2) == 0)
+ snprintf(buf, buf_size, "(u16)a%d", i + 1);
+ else
+ snprintf(buf, buf_size, "%sWORD(a%d)",
+ (offset & 2) ? "HI" : "LO", i + 1);
+ break;
+
+ case OPLM_DWORD:
+ if (offset & 3)
+ ferr(po, "unaligned arg access\n");
+ snprintf(buf, buf_size, "%sa%d", is_src ? "(u32)" : "", i + 1);
+ break;
+
+ default:
+ ferr(po, "bp_arg bad lmod: %d\n", lmod);
+ }
+
+ // common problem
+ if ((offset & 3)
+ && (strstr(g_func_pp.arg[i].type, "int8")
+ || strstr(g_func_pp.arg[i].type, "int16")))
+ {
+ ferr(po, "bp_arg arg/w offset %d and type '%s'\n",
+ offset, g_func_pp.arg[i].type);
+ }