- else if (looking_for == (op_type) E)
- {
- outfn (stream, "%s\t", q->name);
-
- /* Gross. Disgusting. */
- if (strcmp (q->name, "ldm.l") == 0)
- {
- int count, high;
-
- count = (data[1] / 16) & 0x3;
- high = regno[1];
-
- outfn (stream, "@sp+,er%d-er%d", high - count, high);
- return qi->length;
- }
-
- if (strcmp (q->name, "stm.l") == 0)
- {
- int count, low;
-
- count = (data[1] / 16) & 0x3;
- low = regno[0];
-
- outfn (stream, "er%d-er%d,@-sp", low, low + count);
- return qi->length;
- }
- if (strcmp (q->name, "rte/l") == 0
- || strcmp (q->name, "rts/l") == 0)
- {
- if (regno[0] == 0)
- outfn (stream, "er%d", regno[1]);
- else
- outfn (stream, "er%d-er%d", regno[1] - regno[0],
- regno[1]);
- return qi->length;
- }
- if (CONST_STRNEQ (q->name, "mova"))
- {
- op_type *args = q->args.nib;
-
- if (args[1] == (op_type) E)
- {
- /* Short form. */
- print_one_arg (info, addr, args[0], cst[0],
- cstlen[0], dispregno[0], regno[0],
- pregnames, qi->length);
- outfn (stream, ",er%d", dispregno[0]);
- }
- else
- {
- outfn (stream, "@(0x%x:%d,", cst[0], cstlen[0]);
- print_one_arg (info, addr, args[1], cst[1],
- cstlen[1], dispregno[1], regno[1],
- pregnames, qi->length);
- outfn (stream, ".%c),",
- (args[0] & MODE) == INDEXB ? 'b' : 'w');
- print_one_arg (info, addr, args[2], cst[2],
- cstlen[2], dispregno[2], regno[2],
- pregnames, qi->length);
- }
- return qi->length;
- }
- /* Fill in the args. */
- {
- op_type *args = q->args.nib;
- int hadone = 0;
- int nargs;
-
- /* Special case handling for the adds and subs instructions
- since in H8 mode thay can only take the r0-r7 registers
- but in other (higher) modes they can take the er0-er7
- registers as well. */
- if (strcmp (qi->opcode->name, "adds") == 0
- || strcmp (qi->opcode->name, "subs") == 0)
- {
- outfn (stream, "#%d,%s", cst[0], pregnames[regno[1] & 0x7]);
- return qi->length;
- }
-
- for (nargs = 0;
- nargs < 3 && args[nargs] != (op_type) E;
- nargs++)
- {
- int x = args[nargs];
-
- if (hadone)
- outfn (stream, ",");
-
- print_one_arg (info, addr, x,
- cst[nargs], cstlen[nargs],
- dispregno[nargs], regno[nargs],
- pregnames, qi->length);
-
- hadone = 1;
- }
- }
-
- return qi->length;
- }