xref: /openbsd-src/sys/arch/sh/sh/db_disasm.c (revision 949c1c4ec8cc03255798b09f6078e1d0aed70a6a)
1*949c1c4eSmiod /*	$OpenBSD: db_disasm.c,v 1.7 2024/11/07 16:02:29 miod Exp $	*/
295c7671fSmiod /*	$NetBSD: db_disasm.c,v 1.13 2006/01/21 02:09:06 uwe Exp $	*/
395c7671fSmiod 
495c7671fSmiod /*
595c7671fSmiod  * Copyright (c) 1998-2000 Internet Initiative Japan Inc.
695c7671fSmiod  * All rights reserved.
795c7671fSmiod  *
895c7671fSmiod  * Author: Akinori Koketsu
995c7671fSmiod  *
1095c7671fSmiod  * Redistribution and use in source and binary forms, with or without
1195c7671fSmiod  * modification, are permitted provided that the following conditions
1295c7671fSmiod  * are met:
1395c7671fSmiod  * 1. Redistributions of source code must retain the above copyright
1495c7671fSmiod  *    notice, this list of conditions and the following disclaimer.
1595c7671fSmiod  * 2. Redistribution with functional modification must include
1695c7671fSmiod  *    prominent notice stating how and when and by whom it is
1795c7671fSmiod  *    modified.
1895c7671fSmiod  * 3. Redistributions in binary form have to be along with the source
1995c7671fSmiod  *    code or documentation which include above copyright notice, this
2095c7671fSmiod  *    list of conditions and the following disclaimer.
2195c7671fSmiod  * 4. All commercial advertising materials mentioning features or use
2295c7671fSmiod  *    of this software must display the following acknowledgement:
2395c7671fSmiod  *      This product includes software developed by Internet
2495c7671fSmiod  *      Initiative Japan Inc.
2595c7671fSmiod  *
2695c7671fSmiod  * THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY EXPRESS OR IMPLIED
2795c7671fSmiod  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
2895c7671fSmiod  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
2995c7671fSmiod  * DISCLAIMED.
3095c7671fSmiod  */
3195c7671fSmiod 
3295c7671fSmiod #include <sys/param.h>
3395c7671fSmiod #include <sys/systm.h>
3495c7671fSmiod 
3595c7671fSmiod #include <machine/db_machdep.h>
3695c7671fSmiod 
3795c7671fSmiod #include <ddb/db_interface.h>
3895c7671fSmiod #include <ddb/db_output.h>
39f0152d4fSmiod #include <ddb/db_sym.h>
4095c7671fSmiod 
4152de38dfSmpi static void	disasm_branch(char *, size_t, const char *, vaddr_t);
4295c7671fSmiod static void	get_ascii(unsigned char *, char *);
4352de38dfSmpi static void	get_opcode(vaddr_t, char *, size_t);
4452de38dfSmpi static void	f_02(vaddr_t, u_int, char *, size_t);
4552de38dfSmpi static void	f_03(vaddr_t, u_int, char *, size_t);
4652de38dfSmpi static void	f_04(vaddr_t, u_int, char *, size_t);
4752de38dfSmpi static void	f_08(vaddr_t, u_int, char *, size_t);
4852de38dfSmpi static void	f_09(vaddr_t, u_int, char *, size_t);
4952de38dfSmpi static void	f_0a(vaddr_t, u_int, char *, size_t);
5052de38dfSmpi static void	f_0b(vaddr_t, u_int, char *, size_t);
5152de38dfSmpi static void	f_0c(vaddr_t, u_int, char *, size_t);
5252de38dfSmpi static void	f_10(vaddr_t, u_int, char *, size_t);
5352de38dfSmpi static void	f_20(vaddr_t, u_int, char *, size_t);
5452de38dfSmpi static void	f_24(vaddr_t, u_int, char *, size_t);
5552de38dfSmpi static void	f_28(vaddr_t, u_int, char *, size_t);
5652de38dfSmpi static void	f_2c(vaddr_t, u_int, char *, size_t);
5752de38dfSmpi static void	f_30(vaddr_t, u_int, char *, size_t);
5852de38dfSmpi static void	f_34(vaddr_t, u_int, char *, size_t);
5952de38dfSmpi static void	f_38(vaddr_t, u_int, char *, size_t);
6052de38dfSmpi static void	f_3c(vaddr_t, u_int, char *, size_t);
6152de38dfSmpi static void	f_40(vaddr_t, u_int, char *, size_t);
6252de38dfSmpi static void	f_41(vaddr_t, u_int, char *, size_t);
6352de38dfSmpi static void	f_42(vaddr_t, u_int, char *, size_t);
6452de38dfSmpi static void	f_43(vaddr_t, u_int, char *, size_t);
6552de38dfSmpi static void	f_44(vaddr_t, u_int, char *, size_t);
6652de38dfSmpi static void	f_45(vaddr_t, u_int, char *, size_t);
6752de38dfSmpi static void	f_46(vaddr_t, u_int, char *, size_t);
6852de38dfSmpi static void	f_47(vaddr_t, u_int, char *, size_t);
6952de38dfSmpi static void	f_48(vaddr_t, u_int, char *, size_t);
7052de38dfSmpi static void	f_49(vaddr_t, u_int, char *, size_t);
7152de38dfSmpi static void	f_4a(vaddr_t, u_int, char *, size_t);
7252de38dfSmpi static void	f_4b(vaddr_t, u_int, char *, size_t);
7352de38dfSmpi static void	f_4c(vaddr_t, u_int, char *, size_t);
7452de38dfSmpi static void	f_4d(vaddr_t, u_int, char *, size_t);
7552de38dfSmpi static void	f_4e(vaddr_t, u_int, char *, size_t);
7652de38dfSmpi static void	f_4f(vaddr_t, u_int, char *, size_t);
7752de38dfSmpi static void	f_50(vaddr_t, u_int, char *, size_t);
7852de38dfSmpi static void	f_60(vaddr_t, u_int, char *, size_t);
7952de38dfSmpi static void	f_64(vaddr_t, u_int, char *, size_t);
8052de38dfSmpi static void	f_68(vaddr_t, u_int, char *, size_t);
8152de38dfSmpi static void	f_6c(vaddr_t, u_int, char *, size_t);
8252de38dfSmpi static void	f_70(vaddr_t, u_int, char *, size_t);
8352de38dfSmpi static void	f_80(vaddr_t, u_int, char *, size_t);
8452de38dfSmpi static void	f_90(vaddr_t, u_int, char *, size_t);
8552de38dfSmpi static void	f_a0(vaddr_t, u_int, char *, size_t);
8652de38dfSmpi static void	f_b0(vaddr_t, u_int, char *, size_t);
8752de38dfSmpi static void	f_c0(vaddr_t, u_int, char *, size_t);
8852de38dfSmpi static void	f_d0(vaddr_t, u_int, char *, size_t);
8952de38dfSmpi static void	f_e0(vaddr_t, u_int, char *, size_t);
9052de38dfSmpi static void	f_f0(vaddr_t, u_int, char *, size_t);
9152de38dfSmpi static void	f_f4(vaddr_t, u_int, char *, size_t);
9252de38dfSmpi static void	f_f8(vaddr_t, u_int, char *, size_t);
9352de38dfSmpi static void	f_fc(vaddr_t, u_int, char *, size_t);
9452de38dfSmpi static void	f_fd(vaddr_t, u_int, char *, size_t);
9552de38dfSmpi static void	f_fe(vaddr_t, u_int, char *, size_t);
9695c7671fSmiod 
9752de38dfSmpi typedef	void (*rasm_t)(vaddr_t, u_int, char *, size_t);
98f0152d4fSmiod static const rasm_t f[16][16] = {
9995c7671fSmiod 	{ /* [0][0-7] */	NULL, NULL, f_02, f_03, f_04, f_04, f_04, f_04,
10095c7671fSmiod 	  /* [0][8-f] */	f_08, f_09, f_0a, f_0b, f_0c, f_0c, f_0c, f_0c },
10195c7671fSmiod 	{ /* [1][0-7] */	f_10, f_10, f_10, f_10, f_10, f_10, f_10, f_10,
10295c7671fSmiod 	  /* [1][8-f] */	f_10, f_10, f_10, f_10, f_10, f_10, f_10, f_10 },
10395c7671fSmiod 	{ /* [2][0-7] */	f_20, f_20, f_20, f_20, f_24, f_24, f_24, f_24,
10495c7671fSmiod 	  /* [2][8-f] */	f_28, f_28, f_28, f_28, f_2c, f_2c, f_2c, f_2c },
10595c7671fSmiod 	{ /* [3][0-7] */	f_30, f_30, f_30, f_30, f_34, f_34, f_34, f_34,
10695c7671fSmiod 	  /* [3][8-f] */	f_38, f_38, f_38, f_38, f_3c, f_3c, f_3c, f_3c },
10795c7671fSmiod 	{ /* [4][0-7] */	f_40, f_41, f_42, f_43, f_44, f_45, f_46, f_47,
10895c7671fSmiod 	  /* [4][8-f] */	f_48, f_49, f_4a, f_4b, f_4c, f_4d, f_4e, f_4f },
10995c7671fSmiod 	{ /* [5][0-7] */	f_50, f_50, f_50, f_50, f_50, f_50, f_50, f_50,
11095c7671fSmiod 	  /* [5][8-f] */	f_50, f_50, f_50, f_50, f_50, f_50, f_50, f_50 },
11195c7671fSmiod 	{ /* [6][0-7] */	f_60, f_60, f_60, f_60, f_64, f_64, f_64, f_64,
11295c7671fSmiod 	  /* [6][8-f] */	f_68, f_68, f_68, f_68, f_6c, f_6c, f_6c, f_6c },
11395c7671fSmiod 	{ /* [7][0-7] */	f_70, f_70, f_70, f_70, f_70, f_70, f_70, f_70,
11495c7671fSmiod 	  /* [7][8-f] */	f_70, f_70, f_70, f_70, f_70, f_70, f_70, f_70 },
11595c7671fSmiod 	{ /* [8][0-7] */	f_80, f_80, f_80, f_80, f_80, f_80, f_80, f_80,
11695c7671fSmiod 	  /* [8][8-f] */	f_80, f_80, f_80, f_80, f_80, f_80, f_80, f_80 },
11795c7671fSmiod 	{ /* [9][0-7] */	f_90, f_90, f_90, f_90, f_90, f_90, f_90, f_90,
11895c7671fSmiod 	  /* [9][8-f] */	f_90, f_90, f_90, f_90, f_90, f_90, f_90, f_90 },
11995c7671fSmiod 	{ /* [a][0-7] */	f_a0, f_a0, f_a0, f_a0, f_a0, f_a0, f_a0, f_a0,
12095c7671fSmiod 	  /* [a][8-f] */	f_a0, f_a0, f_a0, f_a0, f_a0, f_a0, f_a0, f_a0 },
12195c7671fSmiod 	{ /* [b][0-7] */	f_b0, f_b0, f_b0, f_b0, f_b0, f_b0, f_b0, f_b0,
12295c7671fSmiod 	  /* [b][8-f] */	f_b0, f_b0, f_b0, f_b0, f_b0, f_b0, f_b0, f_b0 },
12395c7671fSmiod 	{ /* [c][0-7] */	f_c0, f_c0, f_c0, f_c0, f_c0, f_c0, f_c0, f_c0,
12495c7671fSmiod 	  /* [c][8-f] */	f_c0, f_c0, f_c0, f_c0, f_c0, f_c0, f_c0, f_c0 },
12595c7671fSmiod 	{ /* [d][0-7] */	f_d0, f_d0, f_d0, f_d0, f_d0, f_d0, f_d0, f_d0,
12695c7671fSmiod 	  /* [d][8-f] */	f_d0, f_d0, f_d0, f_d0, f_d0, f_d0, f_d0, f_d0 },
12795c7671fSmiod 	{ /* [e][0-7] */	f_e0, f_e0, f_e0, f_e0, f_e0, f_e0, f_e0, f_e0,
12895c7671fSmiod 	  /* [e][8-f] */	f_e0, f_e0, f_e0, f_e0, f_e0, f_e0, f_e0, f_e0 },
12995c7671fSmiod 	{ /* [f][0-7] */	f_f0, f_f0, f_f0, f_f0, f_f4, f_f4, f_f4, f_f4,
13095c7671fSmiod 	  /* [f][8-f] */	f_f8, f_f8, f_f8, f_f8, f_fc, f_fd, f_fe, NULL }
13195c7671fSmiod };
13295c7671fSmiod 
13352de38dfSmpi vaddr_t
13452de38dfSmpi db_disasm(vaddr_t loc, int altfmt)
13595c7671fSmiod {
13695c7671fSmiod 	char line[40], ascii[4];
13795c7671fSmiod 	void *pc = (void *)loc;
13895c7671fSmiod 
139f0152d4fSmiod 	get_opcode(loc, line, sizeof line);
14095c7671fSmiod 	if (altfmt) {
14195c7671fSmiod 		get_ascii(pc, ascii);
14295c7671fSmiod 		db_printf("%-32s ! %s\n", line, ascii);
14395c7671fSmiod 	} else
14495c7671fSmiod 		db_printf("%s\n", line);
14595c7671fSmiod 
14695c7671fSmiod 	return (loc + 2);
14795c7671fSmiod }
14895c7671fSmiod 
14995c7671fSmiod static void
15052de38dfSmpi disasm_branch(char *buf, size_t bufsiz, const char *opstr, vaddr_t addr)
151f0152d4fSmiod {
152f0152d4fSmiod 	size_t len;
153f0152d4fSmiod 	db_expr_t d, value;
154*949c1c4eSmiod 	const char *name;
15562781896Smpi 	Elf_Sym *cursym;
156f0152d4fSmiod 	extern unsigned long db_lastsym;
157f0152d4fSmiod 	extern unsigned int db_maxoff;
158f0152d4fSmiod 
159f0152d4fSmiod 	snprintf(buf, bufsiz, "%-8s", opstr);
160f0152d4fSmiod 	len = strlen(buf);
161f0152d4fSmiod 	buf += len;
162f0152d4fSmiod 	bufsiz -= len;
163f0152d4fSmiod 
164f0152d4fSmiod 	if (addr <= db_lastsym) {
165f0152d4fSmiod 		cursym = db_search_symbol(addr, DB_STGY_PROC, &d);
166f0152d4fSmiod 		db_symbol_values(cursym, &name, &value);
167f0152d4fSmiod 		if (name && d < db_maxoff && value) {
168f0152d4fSmiod 			if (d == 0)
169f0152d4fSmiod 				snprintf(buf, bufsiz, "%s", name);
170f0152d4fSmiod 			else {
171f0152d4fSmiod 				snprintf(buf, bufsiz, "%s+", name);
172f0152d4fSmiod 				len = strlen(buf);
173f0152d4fSmiod 				buf += len;
174f0152d4fSmiod 				bufsiz -= len;
175f0152d4fSmiod 				db_format(buf, bufsiz, d, DB_FORMAT_R, 1, 0);
176f0152d4fSmiod 			}
177f0152d4fSmiod 			return;
178f0152d4fSmiod 		}
179f0152d4fSmiod 	}
180f0152d4fSmiod 
181f0152d4fSmiod 	db_format(buf, bufsiz, addr, DB_FORMAT_N, 1, 0);
182f0152d4fSmiod }
183f0152d4fSmiod 
184f0152d4fSmiod static void
18595c7671fSmiod get_ascii(unsigned char *cp, char *str)
18695c7671fSmiod {
18795c7671fSmiod 	*str++ = (0x20 <= *cp && *cp < 0x7f) ? *cp : '.';
18895c7671fSmiod 	cp++;
18995c7671fSmiod 	*str++ = (0x20 <= *cp && *cp < 0x7f) ? *cp : '.';
19095c7671fSmiod 	*str = '\0';
19195c7671fSmiod }
19295c7671fSmiod 
19395c7671fSmiod static void
19452de38dfSmpi get_opcode(vaddr_t loc, char *buf, size_t bufsiz)
19595c7671fSmiod {
19695c7671fSmiod 	int n0, n3;
197f0152d4fSmiod 	u_int insn = *(u_int16_t *)loc;
19895c7671fSmiod 
199c26cea98Smiod 	snprintf(buf, bufsiz, ".word 0x%x", insn);
20095c7671fSmiod 
201f0152d4fSmiod 	n0 = (insn & 0xf000) >> 12;
202f0152d4fSmiod 	n3 = (insn & 0x000f);
20395c7671fSmiod 
204f0152d4fSmiod 	if (f[n0][n3] != NULL)
205f0152d4fSmiod 		(*f[n0][n3])(loc, insn, buf, bufsiz);
20695c7671fSmiod }
20795c7671fSmiod 
20895c7671fSmiod static void
20952de38dfSmpi f_02(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
21095c7671fSmiod {
21195c7671fSmiod 	int	rn, type, md;
21295c7671fSmiod 
213f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
214f0152d4fSmiod 	type = (insn & 0x00c0) >> 6;
215f0152d4fSmiod 	md   = (insn & 0x0030) >> 4;
21695c7671fSmiod 
21795c7671fSmiod 	switch (type) {
21895c7671fSmiod 	case 0:
21995c7671fSmiod 		switch (md) {
22095c7671fSmiod 		case 0:
22195c7671fSmiod 			snprintf(buf, bufsiz, "stc     sr, r%d", rn);
22295c7671fSmiod 			break;
22395c7671fSmiod 		case 1:
22495c7671fSmiod 			snprintf(buf, bufsiz, "stc     gbr, r%d", rn);
22595c7671fSmiod 			break;
22695c7671fSmiod 		case 2:
22795c7671fSmiod 			snprintf(buf, bufsiz, "stc     vbr, r%d", rn);
22895c7671fSmiod 			break;
22995c7671fSmiod 		case 3:
23095c7671fSmiod 			snprintf(buf, bufsiz, "stc     ssr, r%d", rn);
23195c7671fSmiod 			break;
23295c7671fSmiod 		}
23395c7671fSmiod 		break;
23495c7671fSmiod 	case 1:
23595c7671fSmiod 		switch (md) {
23695c7671fSmiod 		case 0:
23795c7671fSmiod 			snprintf(buf, bufsiz, "stc     spc, r%d", rn);
23895c7671fSmiod 			break;
23995c7671fSmiod 		}
24095c7671fSmiod 		break;
24195c7671fSmiod 	case 2:
24295c7671fSmiod 		snprintf(buf, bufsiz, "stc     r%d_bank, r%d", md, rn);
24395c7671fSmiod 		break;
24495c7671fSmiod 	case 3:
24595c7671fSmiod 		snprintf(buf, bufsiz, "stc     r%d_bank, r%d", md + 4, rn);
24695c7671fSmiod 		break;
24795c7671fSmiod 	} /* end of switch (type) */
24895c7671fSmiod }
24995c7671fSmiod 
25095c7671fSmiod static void
25152de38dfSmpi f_03(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
25295c7671fSmiod {
25395c7671fSmiod 	int	rn, type, md;
25495c7671fSmiod 
255f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
256f0152d4fSmiod 	type = (insn & 0x00c0) >> 6;
257f0152d4fSmiod 	md   = (insn & 0x0030) >> 4;
25895c7671fSmiod 
25995c7671fSmiod 	switch (type) {
26095c7671fSmiod 	case 0:
26195c7671fSmiod 		switch (md) {
26295c7671fSmiod 		case 0:
26395c7671fSmiod 			snprintf(buf, bufsiz, "bsrf    r%d", rn);
26495c7671fSmiod 			break;
26595c7671fSmiod 		case 2:
26695c7671fSmiod 			snprintf(buf, bufsiz, "braf    r%d", rn);
26795c7671fSmiod 			break;
26895c7671fSmiod 		}
26995c7671fSmiod 		break;
27095c7671fSmiod 	case 2:
27195c7671fSmiod 		switch (md) {
27295c7671fSmiod 		case 0:
27395c7671fSmiod 			snprintf(buf, bufsiz, "pref    @r%d", rn);
27495c7671fSmiod 			break;
27595c7671fSmiod 		}
27695c7671fSmiod 		break;
27795c7671fSmiod 	} /* end of switch (type) */
27895c7671fSmiod }
27995c7671fSmiod 
28095c7671fSmiod static void
28152de38dfSmpi f_04(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
28295c7671fSmiod {
28395c7671fSmiod 	int	rn, rm, md;
28495c7671fSmiod 
285f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
286f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
287f0152d4fSmiod 	md   = (insn & 0x0003);
28895c7671fSmiod 
28995c7671fSmiod 	switch (md) {
29095c7671fSmiod 	case 0:
29195c7671fSmiod 		snprintf(buf, bufsiz, "mov.b   r%d, @(r0, r%d)", rm, rn);
29295c7671fSmiod 		break;
29395c7671fSmiod 	case 1:
29495c7671fSmiod 		snprintf(buf, bufsiz, "mov.w   r%d, @(r0, r%d)", rm, rn);
29595c7671fSmiod 		break;
29695c7671fSmiod 	case 2:
29795c7671fSmiod 		snprintf(buf, bufsiz, "mov.l   r%d, @(r0, r%d)", rm, rn);
29895c7671fSmiod 		break;
29995c7671fSmiod 	case 3:
300c26cea98Smiod 		snprintf(buf, bufsiz, "mul.l   r%d, r%d", rm, rn);
30195c7671fSmiod 		break;
30295c7671fSmiod 	} /* end of switch (md) */
30395c7671fSmiod }
30495c7671fSmiod 
30595c7671fSmiod static void
30652de38dfSmpi f_08(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
30795c7671fSmiod {
30895c7671fSmiod 	int	n1, type, md;
30995c7671fSmiod 
310f0152d4fSmiod 	n1   = (insn & 0x0f00) >> 8;
311f0152d4fSmiod 	type = (insn & 0x00c0) >> 6;
312f0152d4fSmiod 	md   = (insn & 0x0030) >> 4;
31395c7671fSmiod 
31495c7671fSmiod 	if (n1 != 0)
31595c7671fSmiod 		return;
31695c7671fSmiod 
31795c7671fSmiod 	switch (type) {
31895c7671fSmiod 	case 0:
31995c7671fSmiod 		switch (md) {
32095c7671fSmiod 		case 0:
32195c7671fSmiod 			strlcpy(buf, "clrt", bufsiz);
32295c7671fSmiod 			break;
32395c7671fSmiod 		case 1:
32495c7671fSmiod 			strlcpy(buf, "sett", bufsiz);
32595c7671fSmiod 			break;
32695c7671fSmiod 		case 2:
32795c7671fSmiod 			strlcpy(buf, "clrmac", bufsiz);
32895c7671fSmiod 			break;
32995c7671fSmiod 		case 3:
33095c7671fSmiod 			strlcpy(buf, "ldtlb", bufsiz);
33195c7671fSmiod 			break;
33295c7671fSmiod 		}
33395c7671fSmiod 		break;
33495c7671fSmiod 	case 1:
33595c7671fSmiod 		switch (md) {
33695c7671fSmiod 		case 0:
33795c7671fSmiod 			strlcpy(buf, "clrs", bufsiz);
33895c7671fSmiod 			break;
33995c7671fSmiod 		case 1:
34095c7671fSmiod 			strlcpy(buf, "sets", bufsiz);
34195c7671fSmiod 			break;
34295c7671fSmiod 		}
34395c7671fSmiod 		break;
34495c7671fSmiod 	} /* end of switch (type) */
34595c7671fSmiod }
34695c7671fSmiod 
34795c7671fSmiod static void
34852de38dfSmpi f_09(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
34995c7671fSmiod {
35095c7671fSmiod 	int	rn, fx;
35195c7671fSmiod 
352f0152d4fSmiod 	rn = (insn & 0x0f00) >> 8;
353f0152d4fSmiod 	fx = (insn & 0x00f0) >> 4;
35495c7671fSmiod 
35595c7671fSmiod 	switch (fx) {
35695c7671fSmiod 	case 0:
35795c7671fSmiod 		if (rn != 0)
35895c7671fSmiod 			return;
35995c7671fSmiod 		strlcpy(buf, "nop", bufsiz);
36095c7671fSmiod 		break;
36195c7671fSmiod 	case 1:
36295c7671fSmiod 		if (rn != 0)
36395c7671fSmiod 			return;
36495c7671fSmiod 		strlcpy(buf, "div0u", bufsiz);
36595c7671fSmiod 		break;
36695c7671fSmiod 	case 2:
36795c7671fSmiod 		snprintf(buf, bufsiz, "movt    r%d", rn);
36895c7671fSmiod 		break;
36995c7671fSmiod 	} /* end of switch (fx) */
37095c7671fSmiod }
37195c7671fSmiod 
37295c7671fSmiod static void
37352de38dfSmpi f_0a(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
37495c7671fSmiod {
37595c7671fSmiod 	int	rn, type, md;
37695c7671fSmiod 
377f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
378f0152d4fSmiod 	type = (insn & 0x00c0) >> 6;
379f0152d4fSmiod 	md   = (insn & 0x0030) >> 4;
38095c7671fSmiod 
38195c7671fSmiod 	switch (type) {
38295c7671fSmiod 	case 0:
38395c7671fSmiod 		switch (md) {
38495c7671fSmiod 		case 0:
38595c7671fSmiod 			snprintf(buf, bufsiz, "sts     mach, r%d", rn);
38695c7671fSmiod 			break;
38795c7671fSmiod 		case 1:
38895c7671fSmiod 			snprintf(buf, bufsiz, "sts     macl, r%d", rn);
38995c7671fSmiod 			break;
39095c7671fSmiod 		case 2:
39195c7671fSmiod 			snprintf(buf, bufsiz, "sts     pr, r%d", rn);
39295c7671fSmiod 			break;
39395c7671fSmiod 		}
39495c7671fSmiod 		break;
39595c7671fSmiod 	case 1:
39695c7671fSmiod 		switch (md) {
39795c7671fSmiod 		case 1:
39895c7671fSmiod 			snprintf(buf, bufsiz, "sts     fpul, r%d", rn);
39995c7671fSmiod 			break;
40095c7671fSmiod 		case 2:
40195c7671fSmiod 			snprintf(buf, bufsiz, "sts     fpscr, r%d", rn);
40295c7671fSmiod 			break;
40395c7671fSmiod 		}
40495c7671fSmiod 		break;
40595c7671fSmiod 	} /* end of switch (type) */
40695c7671fSmiod }
40795c7671fSmiod 
40895c7671fSmiod static void
40952de38dfSmpi f_0b(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
41095c7671fSmiod {
41195c7671fSmiod 	int	n1, fx;
41295c7671fSmiod 
413f0152d4fSmiod 	n1 = (insn & 0x0f00) >> 8;
41495c7671fSmiod 	if (n1 != 0)
41595c7671fSmiod 		return;
41695c7671fSmiod 
417f0152d4fSmiod 	fx = (insn & 0x00f0) >> 4;
41895c7671fSmiod 	switch (fx) {
41995c7671fSmiod 	case 0:
42095c7671fSmiod 		strlcpy(buf, "rts", bufsiz);
42195c7671fSmiod 		break;
42295c7671fSmiod 	case 1:
42395c7671fSmiod 		strlcpy(buf, "sleep", bufsiz);
42495c7671fSmiod 		break;
42595c7671fSmiod 	case 2:
42695c7671fSmiod 		strlcpy(buf, "rte", bufsiz);
42795c7671fSmiod 		break;
42895c7671fSmiod 	} /* end of switch (fx) */
42995c7671fSmiod }
43095c7671fSmiod 
43195c7671fSmiod static void
43252de38dfSmpi f_0c(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
43395c7671fSmiod {
43495c7671fSmiod 	int	rn, rm, md;
43595c7671fSmiod 
436f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
437f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
438f0152d4fSmiod 	md   = (insn & 0x0003);
43995c7671fSmiod 
44095c7671fSmiod 	switch (md) {
44195c7671fSmiod 	case 0:
44295c7671fSmiod 		snprintf(buf, bufsiz, "mov.b   @(r0, r%d), r%d", rm, rn);
44395c7671fSmiod 		break;
44495c7671fSmiod 	case 1:
44595c7671fSmiod 		snprintf(buf, bufsiz, "mov.w   @(r0, r%d), r%d", rm, rn);
44695c7671fSmiod 		break;
44795c7671fSmiod 	case 2:
44895c7671fSmiod 		snprintf(buf, bufsiz, "mov.l   @(r0, r%d), r%d", rm, rn);
44995c7671fSmiod 		break;
45095c7671fSmiod 	case 3:
45195c7671fSmiod 		snprintf(buf, bufsiz, "mac.l   @r%d+, r%d+", rm, rn);
45295c7671fSmiod 		break;
45395c7671fSmiod 	} /* end of switch (md) */
45495c7671fSmiod }
45595c7671fSmiod 
45695c7671fSmiod static void
45752de38dfSmpi f_10(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
45895c7671fSmiod {
45995c7671fSmiod 	int	rn, rm, disp;
46095c7671fSmiod 
461f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
462f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
463f0152d4fSmiod 	disp = (insn & 0x000f);
46495c7671fSmiod 	disp *= 4;
46595c7671fSmiod 
46695c7671fSmiod 	snprintf(buf, bufsiz, "mov.l   r%d, @(%d, r%d)", rm, disp, rn);
46795c7671fSmiod }
46895c7671fSmiod 
46995c7671fSmiod static void
47052de38dfSmpi f_20(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
47195c7671fSmiod {
47295c7671fSmiod 	int	rn, rm, md;
47395c7671fSmiod 
474f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
475f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
476f0152d4fSmiod 	md   = (insn & 0x0003);
47795c7671fSmiod 
47895c7671fSmiod 	switch (md) {
47995c7671fSmiod 	case 0:
48095c7671fSmiod 		snprintf(buf, bufsiz, "mov.b   r%d, @r%d", rm, rn);
48195c7671fSmiod 		break;
48295c7671fSmiod 	case 1:
48395c7671fSmiod 		snprintf(buf, bufsiz, "mov.w   r%d, @r%d", rm, rn);
48495c7671fSmiod 		break;
48595c7671fSmiod 	case 2:
48695c7671fSmiod 		snprintf(buf, bufsiz, "mov.l   r%d, @r%d", rm, rn);
48795c7671fSmiod 		break;
48895c7671fSmiod 	} /* end of switch (md) */
48995c7671fSmiod }
49095c7671fSmiod 
49195c7671fSmiod static void
49252de38dfSmpi f_24(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
49395c7671fSmiod {
49495c7671fSmiod 	int	rn, rm, md;
49595c7671fSmiod 
496f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
497f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
498f0152d4fSmiod 	md   = (insn & 0x0003);
49995c7671fSmiod 
50095c7671fSmiod 	switch (md) {
50195c7671fSmiod 	case 0:
50295c7671fSmiod 		snprintf(buf, bufsiz, "mov.b   r%d, @-r%d", rm, rn);
50395c7671fSmiod 		break;
50495c7671fSmiod 	case 1:
50595c7671fSmiod 		snprintf(buf, bufsiz, "mov.w   r%d, @-r%d", rm, rn);
50695c7671fSmiod 		break;
50795c7671fSmiod 	case 2:
50895c7671fSmiod 		snprintf(buf, bufsiz, "mov.l   r%d, @-r%d", rm, rn);
50995c7671fSmiod 		break;
51095c7671fSmiod 	case 3:
511c26cea98Smiod 		snprintf(buf, bufsiz, "div0s   r%d, r%d", rm, rn);
51295c7671fSmiod 		break;
51395c7671fSmiod 	} /* end of switch (md) */
51495c7671fSmiod }
51595c7671fSmiod 
51695c7671fSmiod static void
51752de38dfSmpi f_28(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
51895c7671fSmiod {
51995c7671fSmiod 	int	rn, rm, md;
52095c7671fSmiod 
521f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
522f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
523f0152d4fSmiod 	md   = (insn & 0x0003);
52495c7671fSmiod 
52595c7671fSmiod 	switch (md) {
52695c7671fSmiod 	case 0:
52795c7671fSmiod 		snprintf(buf, bufsiz, "tst     r%d, r%d", rm, rn);
52895c7671fSmiod 		break;
52995c7671fSmiod 	case 1:
53095c7671fSmiod 		snprintf(buf, bufsiz, "and     r%d, r%d", rm, rn);
53195c7671fSmiod 		break;
53295c7671fSmiod 	case 2:
53395c7671fSmiod 		snprintf(buf, bufsiz, "xor     r%d, r%d", rm, rn);
53495c7671fSmiod 		break;
53595c7671fSmiod 	case 3:
53695c7671fSmiod 		snprintf(buf, bufsiz, "or      r%d, r%d", rm, rn);
53795c7671fSmiod 		break;
53895c7671fSmiod 	} /* end of switch (md) */
53995c7671fSmiod }
54095c7671fSmiod 
54195c7671fSmiod static void
54252de38dfSmpi f_2c(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
54395c7671fSmiod {
54495c7671fSmiod 	int	rn, rm, md;
54595c7671fSmiod 
546f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
547f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
548f0152d4fSmiod 	md   = (insn & 0x0003);
54995c7671fSmiod 
55095c7671fSmiod 	switch (md) {
55195c7671fSmiod 	case 0:
55295c7671fSmiod 		snprintf(buf, bufsiz, "cmp/str r%d, r%d", rm, rn);
55395c7671fSmiod 		break;
55495c7671fSmiod 	case 1:
55595c7671fSmiod 		snprintf(buf, bufsiz, "xtrct   r%d, r%d", rm, rn);
55695c7671fSmiod 		break;
55795c7671fSmiod 	case 2:
55895c7671fSmiod 		snprintf(buf, bufsiz, "mulu.w  r%d, r%d", rm, rn);
55995c7671fSmiod 		break;
56095c7671fSmiod 	case 3:
56195c7671fSmiod 		snprintf(buf, bufsiz, "muls.w  r%d, r%d", rm, rn);
56295c7671fSmiod 		break;
56395c7671fSmiod 	} /* end of switch (md) */
56495c7671fSmiod }
56595c7671fSmiod 
56695c7671fSmiod static void
56752de38dfSmpi f_30(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
56895c7671fSmiod {
56995c7671fSmiod 	int	rn, rm, md;
57095c7671fSmiod 
571f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
572f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
573f0152d4fSmiod 	md   = (insn & 0x0003);
57495c7671fSmiod 
57595c7671fSmiod 	switch (md) {
57695c7671fSmiod 	case 0:
57795c7671fSmiod 		snprintf(buf, bufsiz, "cmp/eq  r%d, r%d", rm, rn);
57895c7671fSmiod 		break;
57995c7671fSmiod 	case 2:
58095c7671fSmiod 		snprintf(buf, bufsiz, "cmp/hs  r%d, r%d", rm, rn);
58195c7671fSmiod 		break;
58295c7671fSmiod 	case 3:
58395c7671fSmiod 		snprintf(buf, bufsiz, "cmp/ge  r%d, r%d", rm, rn);
58495c7671fSmiod 		break;
58595c7671fSmiod 	} /* end of switch (md) */
58695c7671fSmiod }
58795c7671fSmiod 
58895c7671fSmiod static void
58952de38dfSmpi f_34(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
59095c7671fSmiod {
59195c7671fSmiod 	int	rn, rm, md;
59295c7671fSmiod 
593f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
594f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
595f0152d4fSmiod 	md   = (insn & 0x0003);
59695c7671fSmiod 
59795c7671fSmiod 	switch (md) {
59895c7671fSmiod 	case 0:
59995c7671fSmiod 		snprintf(buf, bufsiz, "div1    r%d, r%d", rm, rn);
60095c7671fSmiod 		break;
60195c7671fSmiod 	case 1:
60295c7671fSmiod 		snprintf(buf, bufsiz, "dmulu.l r%d, r%d", rm, rn);
60395c7671fSmiod 		break;
60495c7671fSmiod 	case 2:
60595c7671fSmiod 		snprintf(buf, bufsiz, "cmp/hi  r%d, r%d", rm, rn);
60695c7671fSmiod 		break;
60795c7671fSmiod 	case 3:
60895c7671fSmiod 		snprintf(buf, bufsiz, "cmp/gt  r%d, r%d", rm, rn);
60995c7671fSmiod 		break;
61095c7671fSmiod 	} /* end of switch (md) */
61195c7671fSmiod }
61295c7671fSmiod 
61395c7671fSmiod static void
61452de38dfSmpi f_38(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
61595c7671fSmiod {
61695c7671fSmiod 	int	rn, rm, md;
61795c7671fSmiod 
618f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
619f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
620f0152d4fSmiod 	md   = (insn & 0x0003);
62195c7671fSmiod 
62295c7671fSmiod 	switch (md) {
62395c7671fSmiod 	case 0:
62495c7671fSmiod 		snprintf(buf, bufsiz, "sub     r%d, r%d", rm, rn);
62595c7671fSmiod 		break;
62695c7671fSmiod 	case 2:
62795c7671fSmiod 		snprintf(buf, bufsiz, "subc    r%d, r%d", rm, rn);
62895c7671fSmiod 		break;
62995c7671fSmiod 	case 3:
63095c7671fSmiod 		snprintf(buf, bufsiz, "subv    r%d, r%d", rm, rn);
63195c7671fSmiod 		break;
63295c7671fSmiod 	} /* end of switch (md) */
63395c7671fSmiod }
63495c7671fSmiod 
63595c7671fSmiod static void
63652de38dfSmpi f_3c(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
63795c7671fSmiod {
63895c7671fSmiod 	int	rn, rm, md;
63995c7671fSmiod 
640f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
641f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
642f0152d4fSmiod 	md   = (insn & 0x0003);
64395c7671fSmiod 
64495c7671fSmiod 	switch (md) {
64595c7671fSmiod 	case 0:
64695c7671fSmiod 		snprintf(buf, bufsiz, "add     r%d, r%d", rm, rn);
64795c7671fSmiod 		break;
64895c7671fSmiod 	case 1:
64995c7671fSmiod 		snprintf(buf, bufsiz, "dmulu.l r%d, r%d", rm, rn);
65095c7671fSmiod 		break;
65195c7671fSmiod 	case 2:
65295c7671fSmiod 		snprintf(buf, bufsiz, "addc    r%d, r%d", rm, rn);
65395c7671fSmiod 		break;
65495c7671fSmiod 	case 3:
65595c7671fSmiod 		snprintf(buf, bufsiz, "addv    r%d, r%d", rm, rn);
65695c7671fSmiod 		break;
65795c7671fSmiod 	} /* end of switch (md) */
65895c7671fSmiod }
65995c7671fSmiod 
66095c7671fSmiod static void
66152de38dfSmpi f_40(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
66295c7671fSmiod {
66395c7671fSmiod 	int	rn, fx;
66495c7671fSmiod 
665f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
666f0152d4fSmiod 	fx   = (insn & 0x00f0) >> 4;
66795c7671fSmiod 
66895c7671fSmiod 	switch (fx) {
66995c7671fSmiod 	case 0:
67095c7671fSmiod 		snprintf(buf, bufsiz, "shll    r%d", rn);
67195c7671fSmiod 		break;
67295c7671fSmiod 	case 1:
67395c7671fSmiod 		snprintf(buf, bufsiz, "dt      r%d", rn);
67495c7671fSmiod 		break;
67595c7671fSmiod 	case 2:
67695c7671fSmiod 		snprintf(buf, bufsiz, "shal    r%d", rn);
67795c7671fSmiod 		break;
67895c7671fSmiod 	} /* end of switch (fx) */
67995c7671fSmiod }
68095c7671fSmiod 
68195c7671fSmiod static void
68252de38dfSmpi f_41(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
68395c7671fSmiod {
68495c7671fSmiod 	int	rn, fx;
68595c7671fSmiod 
686f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
687f0152d4fSmiod 	fx   = (insn & 0x00f0) >> 4;
68895c7671fSmiod 
68995c7671fSmiod 	switch (fx) {
69095c7671fSmiod 	case 0:
69195c7671fSmiod 		snprintf(buf, bufsiz, "shlr    r%d", rn);
69295c7671fSmiod 		break;
69395c7671fSmiod 	case 1:
69495c7671fSmiod 		snprintf(buf, bufsiz, "cmp/pz  r%d", rn);
69595c7671fSmiod 		break;
69695c7671fSmiod 	case 2:
69795c7671fSmiod 		snprintf(buf, bufsiz, "shar    r%d", rn);
69895c7671fSmiod 		break;
69995c7671fSmiod 	} /* end of switch (fx) */
70095c7671fSmiod }
70195c7671fSmiod 
70295c7671fSmiod static void
70352de38dfSmpi f_42(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
70495c7671fSmiod {
70595c7671fSmiod 	int	rn, type, md;
70695c7671fSmiod 
707f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
708f0152d4fSmiod 	type = (insn & 0x00c0) >> 6;
709f0152d4fSmiod 	md   = (insn & 0x0030) >> 4;
71095c7671fSmiod 
71195c7671fSmiod 	switch (type) {
71295c7671fSmiod 	case 0:
71395c7671fSmiod 		switch (md) {
71495c7671fSmiod 		case 0:
71595c7671fSmiod 			snprintf(buf, bufsiz, "sts.l   mach, @-r%d", rn);
71695c7671fSmiod 			break;
71795c7671fSmiod 		case 1:
71895c7671fSmiod 			snprintf(buf, bufsiz, "sts.l   macl, @-r%d", rn);
71995c7671fSmiod 			break;
72095c7671fSmiod 		case 2:
72195c7671fSmiod 			snprintf(buf, bufsiz, "sts.l   pr, @-r%d", rn);
72295c7671fSmiod 			break;
72395c7671fSmiod 		}
72495c7671fSmiod 		break;
72595c7671fSmiod 	case 1:
72695c7671fSmiod 		switch (md) {
72795c7671fSmiod 		case 1:
72895c7671fSmiod 			snprintf(buf, bufsiz, "sts.l   fpul, @-r%d", rn);
72995c7671fSmiod 			break;
73095c7671fSmiod 		case 2:
73195c7671fSmiod 			snprintf(buf, bufsiz, "sts.l   fpscr, @-r%d", rn);
73295c7671fSmiod 			break;
73395c7671fSmiod 		}
73495c7671fSmiod 		break;
73595c7671fSmiod 	} /* end of switch (type) */
73695c7671fSmiod }
73795c7671fSmiod 
73895c7671fSmiod static void
73952de38dfSmpi f_43(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
74095c7671fSmiod {
74195c7671fSmiod 	int	rn, type, md;
74295c7671fSmiod 
743f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
744f0152d4fSmiod 	type = (insn & 0x00c0) >> 6;
745f0152d4fSmiod 	md   = (insn & 0x0030) >> 4;
74695c7671fSmiod 
74795c7671fSmiod 	switch (type) {
74895c7671fSmiod 	case 0:
74995c7671fSmiod 		switch (md) {
75095c7671fSmiod 		case 0:
75195c7671fSmiod 			snprintf(buf, bufsiz, "stc.l   sr, @-r%d", rn);
75295c7671fSmiod 			break;
75395c7671fSmiod 		case 1:
75495c7671fSmiod 			snprintf(buf, bufsiz, "stc.l   gbr, @-r%d", rn);
75595c7671fSmiod 			break;
75695c7671fSmiod 		case 2:
75795c7671fSmiod 			snprintf(buf, bufsiz, "stc.l   vbr, @-r%d", rn);
75895c7671fSmiod 			break;
75995c7671fSmiod 		case 3:
76095c7671fSmiod 			snprintf(buf, bufsiz, "stc.l   ssr, @-r%d", rn);
76195c7671fSmiod 			break;
76295c7671fSmiod 		}
76395c7671fSmiod 		break;
76495c7671fSmiod 	case 1:
76595c7671fSmiod 		switch (md) {
76695c7671fSmiod 		case 0:
76795c7671fSmiod 			snprintf(buf, bufsiz, "stc.l   spc, @-r%d", rn);
76895c7671fSmiod 			break;
76995c7671fSmiod 		}
77095c7671fSmiod 		break;
77195c7671fSmiod 	case 2:
77295c7671fSmiod 		snprintf(buf, bufsiz, "stc.l   r%d_bank, @-r%d", md, rn);
77395c7671fSmiod 		break;
77495c7671fSmiod 	case 3:
77595c7671fSmiod 		snprintf(buf, bufsiz, "stc.l   r%d_bank, @-r%d", md + 4, rn);
77695c7671fSmiod 		break;
77795c7671fSmiod 	} /* end of switch (type) */
77895c7671fSmiod }
77995c7671fSmiod 
78095c7671fSmiod static void
78152de38dfSmpi f_44(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
78295c7671fSmiod {
78395c7671fSmiod 	int	rn, fx;
78495c7671fSmiod 
785f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
786f0152d4fSmiod 	fx   = (insn & 0x00f0) >> 4;
78795c7671fSmiod 
78895c7671fSmiod 	switch (fx) {
78995c7671fSmiod 	case 0:
79095c7671fSmiod 		snprintf(buf, bufsiz, "rotl    r%d", rn);
79195c7671fSmiod 		break;
79295c7671fSmiod 	case 2:
79395c7671fSmiod 		snprintf(buf, bufsiz, "rotcl   r%d", rn);
79495c7671fSmiod 		break;
79595c7671fSmiod 	} /* end of switch (fx) */
79695c7671fSmiod }
79795c7671fSmiod 
79895c7671fSmiod static void
79952de38dfSmpi f_45(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
80095c7671fSmiod {
80195c7671fSmiod 	int	rn, fx;
80295c7671fSmiod 
803f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
804f0152d4fSmiod 	fx   = (insn & 0x00f0) >> 4;
80595c7671fSmiod 
80695c7671fSmiod 	switch (fx) {
80795c7671fSmiod 	case 0:
80895c7671fSmiod 		snprintf(buf, bufsiz, "rotr    r%d", rn);
80995c7671fSmiod 		break;
81095c7671fSmiod 	case 1:
81195c7671fSmiod 		snprintf(buf, bufsiz, "cmp/pl  r%d", rn);
81295c7671fSmiod 		break;
81395c7671fSmiod 	case 2:
81495c7671fSmiod 		snprintf(buf, bufsiz, "rotcr   r%d", rn);
81595c7671fSmiod 		break;
81695c7671fSmiod 	} /* end of switch (fx) */
81795c7671fSmiod }
81895c7671fSmiod 
81995c7671fSmiod static void
82052de38dfSmpi f_46(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
82195c7671fSmiod {
82295c7671fSmiod 	int	rm, type, md;
82395c7671fSmiod 
824f0152d4fSmiod 	rm   = (insn & 0x0f00) >> 8;
825f0152d4fSmiod 	type = (insn & 0x00c0) >> 6;
826f0152d4fSmiod 	md   = (insn & 0x0030) >> 4;
82795c7671fSmiod 
82895c7671fSmiod 	switch (type) {
82995c7671fSmiod 	case 0:
83095c7671fSmiod 		switch (md) {
83195c7671fSmiod 		case 0:
83295c7671fSmiod 			snprintf(buf, bufsiz, "lds.l   @r%d+, mach", rm);
83395c7671fSmiod 			break;
83495c7671fSmiod 		case 1:
83595c7671fSmiod 			snprintf(buf, bufsiz, "lds.l   @r%d+, macl", rm);
83695c7671fSmiod 			break;
83795c7671fSmiod 		case 2:
83895c7671fSmiod 			snprintf(buf, bufsiz, "lds.l   @r%d+, pr", rm);
83995c7671fSmiod 			break;
84095c7671fSmiod 		}
84195c7671fSmiod 		break;
84295c7671fSmiod 	case 1:
84395c7671fSmiod 		switch (md) {
84495c7671fSmiod 		case 1:
84595c7671fSmiod 			snprintf(buf, bufsiz, "lds.l   @r%d+, fpul", rm);
84695c7671fSmiod 			break;
84795c7671fSmiod 		case 2:
84895c7671fSmiod 			snprintf(buf, bufsiz, "lds.l   @r%d+, fpscr", rm);
84995c7671fSmiod 			break;
85095c7671fSmiod 		}
85195c7671fSmiod 		break;
85295c7671fSmiod 	} /* end of switch (type) */
85395c7671fSmiod }
85495c7671fSmiod 
85595c7671fSmiod static void
85652de38dfSmpi f_47(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
85795c7671fSmiod {
85895c7671fSmiod 	int	rm, type, md;
85995c7671fSmiod 
860f0152d4fSmiod 	rm   = (insn & 0x0f00) >> 8;
861f0152d4fSmiod 	type = (insn & 0x00c0) >> 6;
862f0152d4fSmiod 	md   = (insn & 0x0030) >> 4;
86395c7671fSmiod 
86495c7671fSmiod 	switch (type) {
86595c7671fSmiod 	case 0:
86695c7671fSmiod 		switch (md) {
86795c7671fSmiod 		case 0:
86895c7671fSmiod 			snprintf(buf, bufsiz, "ldc.l   @r%d+, sr", rm);
86995c7671fSmiod 			break;
87095c7671fSmiod 		case 1:
87195c7671fSmiod 			snprintf(buf, bufsiz, "ldc.l   @r%d+, gbr", rm);
87295c7671fSmiod 			break;
87395c7671fSmiod 		case 2:
87495c7671fSmiod 			snprintf(buf, bufsiz, "ldc.l   @r%d+, vbr", rm);
87595c7671fSmiod 			break;
87695c7671fSmiod 		case 3:
87795c7671fSmiod 			snprintf(buf, bufsiz, "ldc.l   @r%d+, ssr", rm);
87895c7671fSmiod 			break;
87995c7671fSmiod 		}
88095c7671fSmiod 		break;
88195c7671fSmiod 	case 1:
88295c7671fSmiod 		switch (md) {
88395c7671fSmiod 		case 0:
88495c7671fSmiod 			snprintf(buf, bufsiz, "ldc.l   @r%d+, spc", rm);
88595c7671fSmiod 			break;
88695c7671fSmiod 		}
88795c7671fSmiod 		break;
88895c7671fSmiod 	case 2:
88995c7671fSmiod 		snprintf(buf, bufsiz, "ldc.l   @r%d+, r%d_bank", rm, md);
89095c7671fSmiod 		break;
89195c7671fSmiod 	case 3:
89295c7671fSmiod 		snprintf(buf, bufsiz, "ldc.l   @r%d+, r%d_bank", rm, md + 4);
89395c7671fSmiod 		break;
89495c7671fSmiod 	} /* end of switch (type) */
89595c7671fSmiod }
89695c7671fSmiod 
89795c7671fSmiod static void
89852de38dfSmpi f_48(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
89995c7671fSmiod {
90095c7671fSmiod 	int	rn, fx;
90195c7671fSmiod 
902f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
903f0152d4fSmiod 	fx   = (insn & 0x00f0) >> 4;
90495c7671fSmiod 
90595c7671fSmiod 	switch (fx) {
90695c7671fSmiod 	case 0:
90795c7671fSmiod 		snprintf(buf, bufsiz, "shll2   r%d", rn);
90895c7671fSmiod 		break;
90995c7671fSmiod 	case 1:
91095c7671fSmiod 		snprintf(buf, bufsiz, "shll8   r%d", rn);
91195c7671fSmiod 		break;
91295c7671fSmiod 	case 2:
91395c7671fSmiod 		snprintf(buf, bufsiz, "shll16  r%d", rn);
91495c7671fSmiod 		break;
91595c7671fSmiod 	} /* end of switch (fx) */
91695c7671fSmiod }
91795c7671fSmiod 
91895c7671fSmiod static void
91952de38dfSmpi f_49(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
92095c7671fSmiod {
92195c7671fSmiod 	int	rn, fx;
92295c7671fSmiod 
923f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
924f0152d4fSmiod 	fx   = (insn & 0x00f0) >> 4;
92595c7671fSmiod 
92695c7671fSmiod 	switch (fx) {
92795c7671fSmiod 	case 0:
92895c7671fSmiod 		snprintf(buf, bufsiz, "shlr2   r%d", rn);
92995c7671fSmiod 		break;
93095c7671fSmiod 	case 1:
93195c7671fSmiod 		snprintf(buf, bufsiz, "shlr8   r%d", rn);
93295c7671fSmiod 		break;
93395c7671fSmiod 	case 2:
93495c7671fSmiod 		snprintf(buf, bufsiz, "shlr16  r%d", rn);
93595c7671fSmiod 		break;
93695c7671fSmiod 	} /* end of switch (fx) */
93795c7671fSmiod }
93895c7671fSmiod 
93995c7671fSmiod static void
94052de38dfSmpi f_4a(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
94195c7671fSmiod {
94295c7671fSmiod 	int	rm, type, md;
94395c7671fSmiod 
944f0152d4fSmiod 	rm   = (insn & 0x0f00) >> 8;
945f0152d4fSmiod 	type = (insn & 0x00c0) >> 6;
946f0152d4fSmiod 	md   = (insn & 0x0030) >> 4;
94795c7671fSmiod 
94895c7671fSmiod 	switch (type) {
94995c7671fSmiod 	case 0:
95095c7671fSmiod 		switch (md) {
95195c7671fSmiod 		case 0:
95295c7671fSmiod 			snprintf(buf, bufsiz, "lds     r%d, mach", rm);
95395c7671fSmiod 			break;
95495c7671fSmiod 		case 1:
95595c7671fSmiod 			snprintf(buf, bufsiz, "lds     r%d, macl", rm);
95695c7671fSmiod 			break;
95795c7671fSmiod 		case 2:
95895c7671fSmiod 			snprintf(buf, bufsiz, "lds     r%d, pr", rm);
95995c7671fSmiod 			break;
96095c7671fSmiod 		}
96195c7671fSmiod 		break;
96295c7671fSmiod 	case 1:
96395c7671fSmiod 		switch (md) {
96495c7671fSmiod 		case 1:
96595c7671fSmiod 			snprintf(buf, bufsiz, "lds     r%d, fpul", rm);
96695c7671fSmiod 			break;
96795c7671fSmiod 		case 2:
96895c7671fSmiod 			snprintf(buf, bufsiz, "lds     r%d, fpscr", rm);
96995c7671fSmiod 			break;
97095c7671fSmiod 		}
97195c7671fSmiod 		break;
97295c7671fSmiod 	} /* end of switch (type) */
97395c7671fSmiod }
97495c7671fSmiod 
97595c7671fSmiod static void
97652de38dfSmpi f_4b(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
97795c7671fSmiod {
97895c7671fSmiod 	int	rm, fx;
97995c7671fSmiod 
980f0152d4fSmiod 	rm   = (insn & 0x0f00) >> 8;
981f0152d4fSmiod 	fx   = (insn & 0x00f0) >> 4;
98295c7671fSmiod 
98395c7671fSmiod 	switch (fx) {
98495c7671fSmiod 	case 0:
98595c7671fSmiod 		snprintf(buf, bufsiz, "jsr     @r%d", rm);
98695c7671fSmiod 		break;
98795c7671fSmiod 	case 1:
98895c7671fSmiod 		snprintf(buf, bufsiz, "tas.b   @r%d", rm);
98995c7671fSmiod 		break;
99095c7671fSmiod 	case 2:
99195c7671fSmiod 		snprintf(buf, bufsiz, "jmp     @r%d", rm);
99295c7671fSmiod 		break;
99395c7671fSmiod 	} /* end of switch (fx) */
99495c7671fSmiod }
99595c7671fSmiod 
99695c7671fSmiod static void
99752de38dfSmpi f_4c(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
99895c7671fSmiod {
99995c7671fSmiod 	int	rn, rm;
100095c7671fSmiod 
1001f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
1002f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
100395c7671fSmiod 	snprintf(buf, bufsiz, "shad    r%d, r%d", rm, rn);
100495c7671fSmiod }
100595c7671fSmiod 
100695c7671fSmiod static void
100752de38dfSmpi f_4d(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
100895c7671fSmiod {
100995c7671fSmiod 	int	rn, rm;
101095c7671fSmiod 
1011f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
1012f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
101395c7671fSmiod 	snprintf(buf, bufsiz, "shld    r%d, r%d", rm, rn);
101495c7671fSmiod }
101595c7671fSmiod 
101695c7671fSmiod static void
101752de38dfSmpi f_4e(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
101895c7671fSmiod {
101995c7671fSmiod 	int	rm, type, md;
102095c7671fSmiod 
1021f0152d4fSmiod 	rm   = (insn & 0x0f00) >> 8;
1022f0152d4fSmiod 	type = (insn & 0x00c0) >> 6;
1023f0152d4fSmiod 	md   = (insn & 0x0030) >> 4;
102495c7671fSmiod 
102595c7671fSmiod 	switch (type) {
102695c7671fSmiod 	case 0:
102795c7671fSmiod 		switch (md) {
102895c7671fSmiod 		case 0:
102995c7671fSmiod 			snprintf(buf, bufsiz, "ldc     r%d, sr", rm);
103095c7671fSmiod 			break;
103195c7671fSmiod 		case 1:
103295c7671fSmiod 			snprintf(buf, bufsiz, "ldc     r%d, gbr", rm);
103395c7671fSmiod 			break;
103495c7671fSmiod 		case 2:
103595c7671fSmiod 			snprintf(buf, bufsiz, "ldc     r%d, vbr", rm);
103695c7671fSmiod 			break;
103795c7671fSmiod 		case 3:
103895c7671fSmiod 			snprintf(buf, bufsiz, "ldc     r%d, ssr", rm);
103995c7671fSmiod 			break;
104095c7671fSmiod 		}
104195c7671fSmiod 		break;
104295c7671fSmiod 	case 1:
104395c7671fSmiod 		switch (md) {
104495c7671fSmiod 		case 0:
104595c7671fSmiod 			snprintf(buf, bufsiz, "ldc     r%d, spc", rm);
104695c7671fSmiod 			break;
104795c7671fSmiod 		}
104895c7671fSmiod 		break;
104995c7671fSmiod 	case 2:
105095c7671fSmiod 		snprintf(buf, bufsiz, "ldc     r%d, r%d_bank", rm, md);
105195c7671fSmiod 		break;
105295c7671fSmiod 	case 3:
105395c7671fSmiod 		snprintf(buf, bufsiz, "ldc     r%d, r%d_bank", rm, md + 4);
105495c7671fSmiod 		break;
105595c7671fSmiod 	} /* end of switch (type) */
105695c7671fSmiod }
105795c7671fSmiod 
105895c7671fSmiod static void
105952de38dfSmpi f_4f(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
106095c7671fSmiod {
106195c7671fSmiod 	int	rn, rm;
106295c7671fSmiod 
1063f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
1064f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
106595c7671fSmiod 	snprintf(buf, bufsiz, "mac.w   @r%d+, @r%d+", rm, rn);
106695c7671fSmiod }
106795c7671fSmiod 
106895c7671fSmiod static void
106952de38dfSmpi f_50(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
107095c7671fSmiod {
107195c7671fSmiod 	int	rn, rm, disp;
107295c7671fSmiod 
1073f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
1074f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
1075f0152d4fSmiod 	disp = (insn & 0x000f);
107695c7671fSmiod 	disp *= 4;
107795c7671fSmiod 
107895c7671fSmiod 	snprintf(buf, bufsiz, "mov.l   @(%d, r%d), r%d", disp, rm, rn);
107995c7671fSmiod }
108095c7671fSmiod 
108195c7671fSmiod static void
108252de38dfSmpi f_60(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
108395c7671fSmiod {
108495c7671fSmiod 	int	rn, rm, md;
108595c7671fSmiod 
1086f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
1087f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
1088f0152d4fSmiod 	md   = (insn & 0x0003);
108995c7671fSmiod 
109095c7671fSmiod 	switch (md) {
109195c7671fSmiod 	case 0:
109295c7671fSmiod 		snprintf(buf, bufsiz, "mov.b   @r%d, r%d", rm, rn);
109395c7671fSmiod 		break;
109495c7671fSmiod 	case 1:
109595c7671fSmiod 		snprintf(buf, bufsiz, "mov.w   @r%d, r%d", rm, rn);
109695c7671fSmiod 		break;
109795c7671fSmiod 	case 2:
109895c7671fSmiod 		snprintf(buf, bufsiz, "mov.l   @r%d, r%d", rm, rn);
109995c7671fSmiod 		break;
110095c7671fSmiod 	case 3:
110195c7671fSmiod 		snprintf(buf, bufsiz, "mov     r%d, r%d", rm, rn);
110295c7671fSmiod 		break;
110395c7671fSmiod 	} /* end of switch (md) */
110495c7671fSmiod }
110595c7671fSmiod 
110695c7671fSmiod static void
110752de38dfSmpi f_64(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
110895c7671fSmiod {
110995c7671fSmiod 	int	rn, rm, md;
111095c7671fSmiod 
1111f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
1112f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
1113f0152d4fSmiod 	md   = (insn & 0x0003);
111495c7671fSmiod 
111595c7671fSmiod 	switch (md) {
111695c7671fSmiod 	case 0:
111795c7671fSmiod 		snprintf(buf, bufsiz, "mov.b   @r%d+, r%d", rm, rn);
111895c7671fSmiod 		break;
111995c7671fSmiod 	case 1:
112095c7671fSmiod 		snprintf(buf, bufsiz, "mov.w   @r%d+, r%d", rm, rn);
112195c7671fSmiod 		break;
112295c7671fSmiod 	case 2:
112395c7671fSmiod 		snprintf(buf, bufsiz, "mov.l   @r%d+, r%d", rm, rn);
112495c7671fSmiod 		break;
112595c7671fSmiod 	case 3:
112695c7671fSmiod 		snprintf(buf, bufsiz, "not     r%d, r%d", rm, rn);
112795c7671fSmiod 		break;
112895c7671fSmiod 	} /* end of switch (md) */
112995c7671fSmiod }
113095c7671fSmiod 
113195c7671fSmiod static void
113252de38dfSmpi f_68(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
113395c7671fSmiod {
113495c7671fSmiod 	int	rn, rm, md;
113595c7671fSmiod 
1136f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
1137f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
1138f0152d4fSmiod 	md   = (insn & 0x0003);
113995c7671fSmiod 
114095c7671fSmiod 	switch (md) {
114195c7671fSmiod 	case 0:
114295c7671fSmiod 		snprintf(buf, bufsiz, "swap.b  r%d, r%d", rm, rn);
114395c7671fSmiod 		break;
114495c7671fSmiod 	case 1:
114595c7671fSmiod 		snprintf(buf, bufsiz, "swap.w  r%d, r%d", rm, rn);
114695c7671fSmiod 		break;
114795c7671fSmiod 	case 2:
114895c7671fSmiod 		snprintf(buf, bufsiz, "negc    r%d, r%d", rm, rn);
114995c7671fSmiod 		break;
115095c7671fSmiod 	case 3:
115195c7671fSmiod 		snprintf(buf, bufsiz, "neg     r%d, r%d", rm, rn);
115295c7671fSmiod 		break;
115395c7671fSmiod 	} /* end of switch (md) */
115495c7671fSmiod }
115595c7671fSmiod 
115695c7671fSmiod static void
115752de38dfSmpi f_6c(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
115895c7671fSmiod {
115995c7671fSmiod 	int	rn, rm, md;
116095c7671fSmiod 
1161f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
1162f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
1163f0152d4fSmiod 	md   = (insn & 0x0003);
116495c7671fSmiod 
116595c7671fSmiod 	switch (md) {
116695c7671fSmiod 	case 0:
116795c7671fSmiod 		snprintf(buf, bufsiz, "extu.b  r%d, r%d", rm, rn);
116895c7671fSmiod 		break;
116995c7671fSmiod 	case 1:
117095c7671fSmiod 		snprintf(buf, bufsiz, "extu.w  r%d, r%d", rm, rn);
117195c7671fSmiod 		break;
117295c7671fSmiod 	case 2:
117395c7671fSmiod 		snprintf(buf, bufsiz, "exts.b  r%d, r%d", rm, rn);
117495c7671fSmiod 		break;
117595c7671fSmiod 	case 3:
117695c7671fSmiod 		snprintf(buf, bufsiz, "exts.w  r%d, r%d", rm, rn);
117795c7671fSmiod 		break;
117895c7671fSmiod 	} /* end of switch (md) */
117995c7671fSmiod }
118095c7671fSmiod 
118195c7671fSmiod static void
118252de38dfSmpi f_70(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
118395c7671fSmiod {
118495c7671fSmiod 	int	rn, imm;
118595c7671fSmiod 
1186f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
1187f0152d4fSmiod 	imm  = (int) ((char) (insn & 0x00ff));
118895c7671fSmiod 
118995c7671fSmiod 	snprintf(buf, bufsiz, "add     #0x%x, r%d", imm, rn);
119095c7671fSmiod }
119195c7671fSmiod 
119295c7671fSmiod static void
119352de38dfSmpi f_80(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
119495c7671fSmiod {
119595c7671fSmiod 	int	type, md, rn, disp;
119695c7671fSmiod 
1197f0152d4fSmiod 	type = (insn & 0x0c00) >> 10;
1198f0152d4fSmiod 	md   = (insn & 0x0300) >> 8;
119995c7671fSmiod 
120095c7671fSmiod 	switch (type) {
120195c7671fSmiod 	case 0:
1202f0152d4fSmiod 		rn   = (insn & 0x00f0) >> 4;
1203f0152d4fSmiod 		disp = (insn & 0x000f);
120495c7671fSmiod 
120595c7671fSmiod 		switch (md) {
120695c7671fSmiod 		case 0:
120795c7671fSmiod 			snprintf(buf, bufsiz, "mov.b   r0, @(%d, r%d)",
120895c7671fSmiod 			    disp, rn);
120995c7671fSmiod 			break;
121095c7671fSmiod 		case 1:
121195c7671fSmiod 			disp *= 2;
121295c7671fSmiod 			snprintf(buf, bufsiz, "mov.w   r0, @(%d, r%d)",
121395c7671fSmiod 			    disp, rn);
121495c7671fSmiod 			break;
121595c7671fSmiod 		}
121695c7671fSmiod 		break;
121795c7671fSmiod 	case 1:
1218f0152d4fSmiod 		rn   = (insn & 0x00f0) >> 4;
1219f0152d4fSmiod 		disp = (insn & 0x000f);
122095c7671fSmiod 
122195c7671fSmiod 		switch (md) {
122295c7671fSmiod 		case 0:
122395c7671fSmiod 			snprintf(buf, bufsiz, "mov.b   @(%d, r%d), r0",
122495c7671fSmiod 			    disp, rn);
122595c7671fSmiod 			break;
122695c7671fSmiod 		case 1:
122795c7671fSmiod 			disp *= 2;
122895c7671fSmiod 			snprintf(buf, bufsiz, "mov.w   @(%d, r%d), r0",
122995c7671fSmiod 			    disp, rn);
123095c7671fSmiod 			break;
123195c7671fSmiod 		}
123295c7671fSmiod 		break;
123395c7671fSmiod 	case 2:
1234f0152d4fSmiod 		disp = (insn & 0x00ff);
123595c7671fSmiod 
123695c7671fSmiod 		switch (md) {
123795c7671fSmiod 		case 0:
123895c7671fSmiod 			snprintf(buf, bufsiz, "cmp/eq  #%d, r0", disp);
123995c7671fSmiod 			break;
124095c7671fSmiod 		case 1:
124195c7671fSmiod 			disp = (int) ((char) disp);
124295c7671fSmiod 			disp *= 2;
1243f0152d4fSmiod 			disasm_branch(buf, bufsiz, "bt", loc + 4 + disp);
124495c7671fSmiod 			break;
124595c7671fSmiod 		case 3:
124695c7671fSmiod 			disp = (int) ((char) disp);
124795c7671fSmiod 			disp *= 2;
1248f0152d4fSmiod 			disasm_branch(buf, bufsiz, "bf", loc + 4 + disp);
124995c7671fSmiod 			break;
125095c7671fSmiod 		}
125195c7671fSmiod 		break;
125295c7671fSmiod 	case 3:
1253f0152d4fSmiod 		disp = (int) ((char) (insn & 0x00ff));
125495c7671fSmiod 		disp *= 2;
125595c7671fSmiod 
125695c7671fSmiod 		switch (md) {
125795c7671fSmiod 		case 1:
1258f0152d4fSmiod 			disasm_branch(buf, bufsiz, "bt/s", loc + 4 + disp);
125995c7671fSmiod 			break;
126095c7671fSmiod 		case 3:
1261f0152d4fSmiod 			disasm_branch(buf, bufsiz, "bf/s", loc + 4 + disp);
126295c7671fSmiod 			break;
126395c7671fSmiod 		}
126495c7671fSmiod 		break;
126595c7671fSmiod 	} /* end of switch (type) */
126695c7671fSmiod }
126795c7671fSmiod 
126895c7671fSmiod static void
126952de38dfSmpi f_90(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
127095c7671fSmiod {
127195c7671fSmiod 	int	rn, disp;
127295c7671fSmiod 
1273f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
1274f0152d4fSmiod 	disp = (insn & 0x00ff);
127595c7671fSmiod 	disp *= 2;
127695c7671fSmiod 
127795c7671fSmiod 	snprintf(buf, bufsiz, "mov.w   @(%d, pc), r%d", disp, rn);
127895c7671fSmiod }
127995c7671fSmiod 
128095c7671fSmiod static void
128152de38dfSmpi f_a0(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
128295c7671fSmiod {
128395c7671fSmiod 	int	disp;
128495c7671fSmiod 
1285f0152d4fSmiod 	disp = (insn & 0x0fff);
128695c7671fSmiod 	if (disp & 0x0800)	/* negative displacement? */
128795c7671fSmiod 		disp |= 0xfffff000; /* sign extend */
128895c7671fSmiod 	disp *= 2;
128995c7671fSmiod 
1290f0152d4fSmiod 	disasm_branch(buf, bufsiz, "bra", loc + 4 + disp);
129195c7671fSmiod }
129295c7671fSmiod 
129395c7671fSmiod static void
129452de38dfSmpi f_b0(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
129595c7671fSmiod {
129695c7671fSmiod 	int	disp;
129795c7671fSmiod 
1298f0152d4fSmiod 	disp = (insn & 0x0fff);
129995c7671fSmiod 	if (disp & 0x0800)	/* negative displacement? */
130095c7671fSmiod 		disp |= 0xfffff000; /* sign extend */
130195c7671fSmiod 	disp *= 2;
130295c7671fSmiod 
1303f0152d4fSmiod 	disasm_branch(buf, bufsiz, "bsr", loc + 4 + disp);
130495c7671fSmiod }
130595c7671fSmiod 
130695c7671fSmiod static void
130752de38dfSmpi f_c0(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
130895c7671fSmiod {
130995c7671fSmiod 	int	type, md, imm;
131095c7671fSmiod 
1311f0152d4fSmiod 	type = (insn & 0x0c00) >> 10;
1312f0152d4fSmiod 	md   = (insn & 0x0300) >> 8;
1313f0152d4fSmiod 	imm  = (insn & 0x00ff);
131495c7671fSmiod 
131595c7671fSmiod 	switch (type) {
131695c7671fSmiod 	case 0:
131795c7671fSmiod 		switch (md) {
131895c7671fSmiod 		case 0:
131995c7671fSmiod 			snprintf(buf, bufsiz, "mov.b   r0, @(%d, gbr)", imm);
132095c7671fSmiod 			break;
132195c7671fSmiod 		case 1:
132295c7671fSmiod 			imm *= 2;
132395c7671fSmiod 			snprintf(buf, bufsiz, "mov.w   r0, @(%d, gbr)", imm);
132495c7671fSmiod 			break;
132595c7671fSmiod 		case 2:
132695c7671fSmiod 			imm *= 4;
132795c7671fSmiod 			snprintf(buf, bufsiz, "mov.l   r0, @(%d, gbr)", imm);
132895c7671fSmiod 			break;
132995c7671fSmiod 		case 3:
133095c7671fSmiod 			snprintf(buf, bufsiz, "trapa   #%d", imm);
133195c7671fSmiod 			break;
133295c7671fSmiod 		}
133395c7671fSmiod 		break;
133495c7671fSmiod 	case 1:
133595c7671fSmiod 		switch (md) {
133695c7671fSmiod 		case 0:
133795c7671fSmiod 			snprintf(buf, bufsiz, "mov.b   @(%d, gbr), r0", imm);
133895c7671fSmiod 			break;
133995c7671fSmiod 		case 1:
134095c7671fSmiod 			imm *= 2;
134195c7671fSmiod 			snprintf(buf, bufsiz, "mov.w   @(%d, gbr), r0", imm);
134295c7671fSmiod 			break;
134395c7671fSmiod 		case 2:
134495c7671fSmiod 			imm *= 4;
134595c7671fSmiod 			snprintf(buf, bufsiz, "mov.l   @(%d, gbr), r0", imm);
134695c7671fSmiod 			break;
134795c7671fSmiod 		case 3:
134895c7671fSmiod 			imm *= 4;
134995c7671fSmiod 			snprintf(buf, bufsiz, "mova    @(%d, pc), r0", imm);
135095c7671fSmiod 			break;
135195c7671fSmiod 		}
135295c7671fSmiod 		break;
135395c7671fSmiod 	case 2:
135495c7671fSmiod 		switch (md) {
135595c7671fSmiod 		case 0:
135695c7671fSmiod 			snprintf(buf, bufsiz, "tst     #%d, r0", imm);
135795c7671fSmiod 			break;
135895c7671fSmiod 		case 1:
135995c7671fSmiod 			snprintf(buf, bufsiz, "and     #%d, r0", imm);
136095c7671fSmiod 			break;
136195c7671fSmiod 		case 2:
136295c7671fSmiod 			snprintf(buf, bufsiz, "xor     #%d, r0", imm);
136395c7671fSmiod 			break;
136495c7671fSmiod 		case 3:
136595c7671fSmiod 			snprintf(buf, bufsiz, "or      #%d, r0", imm);
136695c7671fSmiod 			break;
136795c7671fSmiod 		}
136895c7671fSmiod 		break;
136995c7671fSmiod 	case 3:
137095c7671fSmiod 		switch (md) {
137195c7671fSmiod 		case 0:
137295c7671fSmiod 			snprintf(buf, bufsiz, "tst.b   #%d, @(r0, gbr)", imm);
137395c7671fSmiod 			break;
137495c7671fSmiod 		case 1:
137595c7671fSmiod 			snprintf(buf, bufsiz, "and.b   #%d, @(r0, gbr)", imm);
137695c7671fSmiod 			break;
137795c7671fSmiod 		case 2:
137895c7671fSmiod 			snprintf(buf, bufsiz, "xor.b   #%d, @(r0, gbr)", imm);
137995c7671fSmiod 			break;
138095c7671fSmiod 		case 3:
138195c7671fSmiod 			snprintf(buf, bufsiz, "or.b    #%d, @(r0, gbr)", imm);
138295c7671fSmiod 			break;
138395c7671fSmiod 		}
138495c7671fSmiod 		break;
138595c7671fSmiod 	} /* end of switch (type) */
138695c7671fSmiod }
138795c7671fSmiod 
138895c7671fSmiod static void
138952de38dfSmpi f_d0(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
139095c7671fSmiod {
139195c7671fSmiod 	int	rn, disp;
139295c7671fSmiod 
1393f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
1394f0152d4fSmiod 	disp = (insn & 0x00ff);
139595c7671fSmiod 	disp *= 4;
139695c7671fSmiod 
139795c7671fSmiod 	snprintf(buf, bufsiz, "mov.l   @(%d, pc), r%d", disp, rn);
139895c7671fSmiod }
139995c7671fSmiod 
140095c7671fSmiod static void
140152de38dfSmpi f_e0(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
140295c7671fSmiod {
140395c7671fSmiod 	int	rn, imm;
140495c7671fSmiod 
1405f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
1406f0152d4fSmiod 	imm  = (int) ((char) (insn & 0x00ff));
140795c7671fSmiod 
140895c7671fSmiod 	snprintf(buf, bufsiz, "mov     #0x%x, r%d", imm, rn);
140995c7671fSmiod }
141095c7671fSmiod 
141195c7671fSmiod static void
141252de38dfSmpi f_f0(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
141395c7671fSmiod {
141495c7671fSmiod 	int	rn, rm, md;
141595c7671fSmiod 
1416f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
1417f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
1418f0152d4fSmiod 	md   = (insn & 0x0003);
141995c7671fSmiod 
142095c7671fSmiod 	switch (md) {
142195c7671fSmiod 	case 0:
142295c7671fSmiod 		snprintf(buf, bufsiz, "fadd    fr%d, fr%d", rm, rn);
142395c7671fSmiod 		break;
142495c7671fSmiod 	case 1:
142595c7671fSmiod 		snprintf(buf, bufsiz, "fsub    fr%d, fr%d", rm, rn);
142695c7671fSmiod 		break;
142795c7671fSmiod 	case 2:
142895c7671fSmiod 		snprintf(buf, bufsiz, "fmul    fr%d, fr%d", rm, rn);
142995c7671fSmiod 		break;
143095c7671fSmiod 	case 3:
143195c7671fSmiod 		snprintf(buf, bufsiz, "fdiv    fr%d, fr%d", rm, rn);
143295c7671fSmiod 		break;
143395c7671fSmiod 	} /* end of switch (md) */
143495c7671fSmiod }
143595c7671fSmiod 
143695c7671fSmiod static void
143752de38dfSmpi f_f4(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
143895c7671fSmiod {
143995c7671fSmiod 	int	rn, rm, md;
144095c7671fSmiod 
1441f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
1442f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
1443f0152d4fSmiod 	md   = (insn & 0x0003);
144495c7671fSmiod 
144595c7671fSmiod 	switch (md) {
144695c7671fSmiod 	case 0:
144795c7671fSmiod 		snprintf(buf, bufsiz, "fcmp/eq fr%d, fr%d", rm, rn);
144895c7671fSmiod 		break;
144995c7671fSmiod 	case 1:
145095c7671fSmiod 		snprintf(buf, bufsiz, "fcmp/gt fr%d, fr%d", rm, rn);
145195c7671fSmiod 		break;
145295c7671fSmiod 	case 2:
145395c7671fSmiod 		snprintf(buf, bufsiz, "fmov.s  @(r0, r%d), fr%d", rm, rn);
145495c7671fSmiod 		break;
145595c7671fSmiod 	case 3:
145695c7671fSmiod 		snprintf(buf, bufsiz, "fmov.s  fr%d, @(r0, r%d)", rm, rn);
145795c7671fSmiod 		break;
145895c7671fSmiod 	} /* end of switch (md) */
145995c7671fSmiod }
146095c7671fSmiod 
146195c7671fSmiod static void
146252de38dfSmpi f_f8(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
146395c7671fSmiod {
146495c7671fSmiod 	int	rn, rm, md;
146595c7671fSmiod 
1466f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
1467f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
1468f0152d4fSmiod 	md   = (insn & 0x0003);
146995c7671fSmiod 
147095c7671fSmiod 	switch (md) {
147195c7671fSmiod 	case 0:
147295c7671fSmiod 		snprintf(buf, bufsiz, "fmov.s  @r%d, fr%d", rm, rn);
147395c7671fSmiod 		break;
147495c7671fSmiod 	case 1:
147595c7671fSmiod 		snprintf(buf, bufsiz, "fmov.s  @r%d+, fr%d", rm, rn);
147695c7671fSmiod 		break;
147795c7671fSmiod 	case 2:
147895c7671fSmiod 		snprintf(buf, bufsiz, "fmov.s  fr%d, @r%d", rm, rn);
147995c7671fSmiod 		break;
148095c7671fSmiod 	case 3:
148195c7671fSmiod 		snprintf(buf, bufsiz, "fmov.s  fr%d, @-r%d", rm, rn);
148295c7671fSmiod 		break;
148395c7671fSmiod 	} /* end of switch (md) */
148495c7671fSmiod }
148595c7671fSmiod 
148695c7671fSmiod static void
148752de38dfSmpi f_fc(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
148895c7671fSmiod {
148995c7671fSmiod 	int	rn, rm;
149095c7671fSmiod 
1491f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
1492f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
149395c7671fSmiod 
149495c7671fSmiod 	snprintf(buf, bufsiz, "fmov    fr%d, fr%d", rm, rn);
149595c7671fSmiod }
149695c7671fSmiod 
149795c7671fSmiod static void
149852de38dfSmpi f_fd(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
149995c7671fSmiod {
150095c7671fSmiod 	int	rn, type, md;
150195c7671fSmiod 
1502f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
1503f0152d4fSmiod 	type = (insn & 0x00c0) >> 6;
1504f0152d4fSmiod 	md   = (insn & 0x0030) >> 4;
150595c7671fSmiod 
150695c7671fSmiod 	switch (type) {
150795c7671fSmiod 	case 0:
150895c7671fSmiod 		switch (md) {
150995c7671fSmiod 		case 0:
151095c7671fSmiod 			snprintf(buf, bufsiz, "fsts    fpul, fr%d", rn);
151195c7671fSmiod 			break;
151295c7671fSmiod 		case 1:
151395c7671fSmiod 			snprintf(buf, bufsiz, "flds    fr%d, fpul", rn);
151495c7671fSmiod 			break;
151595c7671fSmiod 		case 2:
151695c7671fSmiod 			snprintf(buf, bufsiz, "float   fpul, fr%d", rn);
151795c7671fSmiod 			break;
151895c7671fSmiod 		case 3:
151995c7671fSmiod 			snprintf(buf, bufsiz, "ftrc    fr%d, fpul", rn);
152095c7671fSmiod 			break;
152195c7671fSmiod 		}
152295c7671fSmiod 		break;
152395c7671fSmiod 	case 1:
152495c7671fSmiod 		switch (md) {
152595c7671fSmiod 		case 0:
152695c7671fSmiod 			snprintf(buf, bufsiz, "fneg    fr%d", rn);
152795c7671fSmiod 			break;
152895c7671fSmiod 		case 1:
152995c7671fSmiod 			snprintf(buf, bufsiz, "fabs    fr%d", rn);
153095c7671fSmiod 			break;
153195c7671fSmiod 		case 2:
153295c7671fSmiod 			snprintf(buf, bufsiz, "fsqrt   fr%d", rn);
153395c7671fSmiod 			break;
153495c7671fSmiod 		}
153595c7671fSmiod 		break;
153695c7671fSmiod 	case 2:
153795c7671fSmiod 		switch (md) {
153895c7671fSmiod 		case 0:
153995c7671fSmiod 		case 1:
154095c7671fSmiod 			snprintf(buf, bufsiz, "fldi%d   fr%d", md, rn);
154195c7671fSmiod 			break;
154295c7671fSmiod 		}
154395c7671fSmiod 		break;
154495c7671fSmiod 	} /* end of switch (type) */
154595c7671fSmiod }
154695c7671fSmiod 
154795c7671fSmiod static void
154852de38dfSmpi f_fe(vaddr_t loc, u_int insn, char *buf, size_t bufsiz)
154995c7671fSmiod {
155095c7671fSmiod 	int	rn, rm;
155195c7671fSmiod 
1552f0152d4fSmiod 	rn   = (insn & 0x0f00) >> 8;
1553f0152d4fSmiod 	rm   = (insn & 0x00f0) >> 4;
155495c7671fSmiod 
155595c7671fSmiod 	snprintf(buf, bufsiz, "fmac    fr0, fr%d, fr%d", rm, rn);
155695c7671fSmiod }
1557