diff lwasm/instab.c @ 116:7b0716264251

Pragma autobranchlength implementation completed
author lost@l-w.ca
date Tue, 09 Aug 2011 18:08:55 -0600
parents 344cfc25afec
children 4cf44ff89b08
line wrap: on
line diff
--- a/lwasm/instab.c	Mon Aug 08 23:00:27 2011 -0600
+++ b/lwasm/instab.c	Tue Aug 09 18:08:55 2011 -0600
@@ -97,6 +97,11 @@
 #define insn_resolve_rel16 NULL
 extern EMITFUNC(insn_emit_rel16);
 
+// generic 8/16 bit relative
+extern PARSEFUNC(insn_parse_relgen);
+extern RESOLVEFUNC(insn_resolve_relgen);
+extern EMITFUNC(insn_emit_relgen);
+
 // MACRO pseudo op
 extern PARSEFUNC(pseudo_parse_macro);
 #define pseudo_resolve_macro	NULL
@@ -338,14 +343,14 @@
 	{ "asrd",		{	0x1047,	-1,		-1,		-1	},	insn_parse_inh,			insn_resolve_inh,				insn_emit_inh,				lwasm_insn_is6309},
 
 	{ "band",		{	0x1130,	-1,		-1,		-1	},	insn_parse_bitbit,		insn_resolve_bitbit,			insn_emit_bitbit,			lwasm_insn_is6309},
-	{ "bcc",		{	0x24,	-1,		0x24,	0x1024},insn_parse_rel8,		insn_resolve_rel8,				insn_emit_rel8,				lwasm_insn_normal},
-	{ "bcs",		{	0x25,	-1,		0x25,	0x1025},insn_parse_rel8,		insn_resolve_rel8,				insn_emit_rel8,				lwasm_insn_normal},
+	{ "bcc",		{	0x24,	8,		0x24,	0x1024},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,				lwasm_insn_normal},
+	{ "bcs",		{	0x25,	8,		0x25,	0x1025},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,				lwasm_insn_normal},
 	{ "beor",		{	0x1134,	-1,		-1,		-1	},	insn_parse_bitbit,		insn_resolve_bitbit,			insn_emit_bitbit,			lwasm_insn_is6309},
-	{ "beq",		{	0x27,	-1,		0x27,	0x1027},insn_parse_rel8,		insn_resolve_rel8,				insn_emit_rel8,				lwasm_insn_normal},
-	{ "bge",		{	0x2c,	-1,		0x2c,	0x102c},insn_parse_rel8,		insn_resolve_rel8,				insn_emit_rel8,				lwasm_insn_normal},
-	{ "bgt",		{	0x2e,	-1,		0x2e,	0x102e},insn_parse_rel8,		insn_resolve_rel8,				insn_emit_rel8,				lwasm_insn_normal},
-	{ "bhi",		{	0x22,	-1,		0x22,	0x1022},insn_parse_rel8,		insn_resolve_rel8,				insn_emit_rel8,				lwasm_insn_normal},
-	{ "bhs",		{	0x24,	-1,		0x24,	0x1024},insn_parse_rel8,		insn_resolve_rel8,				insn_emit_rel8,				lwasm_insn_normal},
+	{ "beq",		{	0x27,	8,		0x27,	0x1027},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,				lwasm_insn_normal},
+	{ "bge",		{	0x2c,	8,		0x2c,	0x102c},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,				lwasm_insn_normal},
+	{ "bgt",		{	0x2e,	8,		0x2e,	0x102e},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,				lwasm_insn_normal},
+	{ "bhi",		{	0x22,	8,		0x22,	0x1022},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,				lwasm_insn_normal},
+	{ "bhs",		{	0x24,	8,		0x24,	0x1024},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,				lwasm_insn_normal},
 	{ "biand",		{	0x1131,	-1,		-1,		-1	},	insn_parse_bitbit,		insn_resolve_bitbit,			insn_emit_bitbit,			lwasm_insn_is6309},
 	{ "bieor",		{	0x1135,	-1,		-1,		-1	},	insn_parse_bitbit,		insn_resolve_bitbit,			insn_emit_bitbit,			lwasm_insn_is6309},
 	{ "bior",		{	0x1133, -1,		-1,		-1	},	insn_parse_bitbit,		insn_resolve_bitbit,			insn_emit_bitbit,			lwasm_insn_is6309},
@@ -353,19 +358,19 @@
 	{ "bitb",		{	0xd5,	0xe5,	0xf5,	0xc5},	insn_parse_gen8,		insn_resolve_gen8,				insn_emit_gen8,				lwasm_insn_normal},
 	{ "bitd",		{	0x1095,	0x10a5,	0x10b5,	0x1085},insn_parse_gen16,		insn_resolve_gen16,				insn_emit_gen16,			lwasm_insn_is6309},
 	{ "bitmd",		{	0x113c, -1,		-1,		0x113c},insn_parse_imm8,		insn_resolve_imm8,				insn_emit_imm8,				lwasm_insn_is6309},
-	{ "ble",		{	0x2f,	-1,		0x2f,	0x102f},insn_parse_rel8,		insn_resolve_rel8,				insn_emit_rel8,				lwasm_insn_normal},
-	{ "blo",		{	0x25,	-1,		0x25,	0x1025},insn_parse_rel8,		insn_resolve_rel8,				insn_emit_rel8,				lwasm_insn_normal},
-	{ "bls",		{	0x23,	-1,		0x23,	0x1023},insn_parse_rel8,		insn_resolve_rel8,				insn_emit_rel8,				lwasm_insn_normal},
-	{ "blt",		{	0x2d,	-1,		0x2d,	0x102d},insn_parse_rel8,		insn_resolve_rel8,				insn_emit_rel8,				lwasm_insn_normal},
-	{ "bmi",		{	0x2b,	-1,		0x2b,	0x102b},insn_parse_rel8,		insn_resolve_rel8,				insn_emit_rel8,				lwasm_insn_normal},
-	{ "bne",		{	0x26, 	-1,		0x26,	0x1026},insn_parse_rel8,		insn_resolve_rel8,				insn_emit_rel8,				lwasm_insn_normal},
+	{ "ble",		{	0x2f,	8,		0x2f,	0x102f},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,				lwasm_insn_normal},
+	{ "blo",		{	0x25,	8,		0x25,	0x1025},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,				lwasm_insn_normal},
+	{ "bls",		{	0x23,	8,		0x23,	0x1023},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,				lwasm_insn_normal},
+	{ "blt",		{	0x2d,	8,		0x2d,	0x102d},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,				lwasm_insn_normal},
+	{ "bmi",		{	0x2b,	8,		0x2b,	0x102b},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,				lwasm_insn_normal},
+	{ "bne",		{	0x26, 	8,		0x26,	0x1026},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,				lwasm_insn_normal},
 	{ "bor",		{	0x1132,	-1,		-1,		-1	},	insn_parse_bitbit,		insn_resolve_bitbit,			insn_emit_bitbit,			lwasm_insn_is6309},
-	{ "bpl",		{	0x2a,	-1,		0x2a,	0x102a},insn_parse_rel8,		insn_resolve_rel8,				insn_emit_rel8,				lwasm_insn_normal},
-	{ "bra",		{	0x20,	-1,		0x20,	0x16},	insn_parse_rel8,		insn_resolve_rel8,				insn_emit_rel8,				lwasm_insn_normal},
-	{ "brn",		{	0x21,	-1,		0x21,	0x1021},insn_parse_rel8,		insn_resolve_rel8,				insn_emit_rel8,				lwasm_insn_normal},
-	{ "bsr",		{	0x8d,	-1,		0x8d,	0x17},	insn_parse_rel8,		insn_resolve_rel8,				insn_emit_rel8,				lwasm_insn_normal},
-	{ "bvc",		{	0x28,	-1,		0x28,	0x1028},insn_parse_rel8,		insn_resolve_rel8,				insn_emit_rel8,				lwasm_insn_normal},
-	{ "bvs",		{	0x29,	-1,		0x29,	0x1029},	insn_parse_rel8,		insn_resolve_rel8,				insn_emit_rel8,				lwasm_insn_normal},
+	{ "bpl",		{	0x2a,	8,		0x2a,	0x102a},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,				lwasm_insn_normal},
+	{ "bra",		{	0x20,	8,		0x20,	0x16},	insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,				lwasm_insn_normal},
+	{ "brn",		{	0x21,	8,		0x21,	0x1021},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,				lwasm_insn_normal},
+	{ "bsr",		{	0x8d,	8,		0x8d,	0x17},	insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,				lwasm_insn_normal},
+	{ "bvc",		{	0x28,	8,		0x28,	0x1028},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,				lwasm_insn_normal},
+	{ "bvs",		{	0x29,	8,		0x29,	0x1029},	insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,				lwasm_insn_normal},
 
 	{ "clr",		{	0x0f,	0x6f,	0x7f,	-1	},	insn_parse_gen0,		insn_resolve_gen0,				insn_emit_gen0,				lwasm_insn_normal},
 	{ "clra",		{	0x4f,	-1,		-1,		-1	},	insn_parse_inh,			insn_resolve_inh,				insn_emit_inh,				lwasm_insn_normal},
@@ -423,25 +428,25 @@
 	{ "jmp",		{	0x0e,	0x6e,	0x7e,	-1	},	insn_parse_gen0,		insn_resolve_gen0,				insn_emit_gen0,				lwasm_insn_normal},
 	{ "jsr",		{	0x9d,	0xad,	0xbd,	-1	}, 	insn_parse_gen0,		insn_resolve_gen0,				insn_emit_gen0,				lwasm_insn_normal},
 	
-	{ "lbcc",		{	0x1024,	-1,		0x24,	0x1024},insn_parse_rel16,		insn_resolve_rel16,				insn_emit_rel16,			lwasm_insn_normal},
-	{ "lbcs",		{	0x1025,	-1,		0x25,	0x1025},insn_parse_rel16,		insn_resolve_rel16,				insn_emit_rel16,			lwasm_insn_normal},
-	{ "lbeq",		{	0x1027,	-1,		0x27,	0x1027},insn_parse_rel16,		insn_resolve_rel16,				insn_emit_rel16,			lwasm_insn_normal},
-	{ "lbge",		{	0x102c,	-1,		0x2c,	0x102c},insn_parse_rel16,		insn_resolve_rel16,				insn_emit_rel16,			lwasm_insn_normal},
-	{ "lbgt",		{	0x102e,	-1,		0x2e,	0x102e},insn_parse_rel16,		insn_resolve_rel16,				insn_emit_rel16,			lwasm_insn_normal},
-	{ "lbhi",		{	0x1022,	-1,		0x22,	0x1022},insn_parse_rel16,		insn_resolve_rel16,				insn_emit_rel16,			lwasm_insn_normal},
-	{ "lbhs",		{	0x1024,	-1,		0x24,	0x1024},insn_parse_rel16,		insn_resolve_rel16,				insn_emit_rel16,			lwasm_insn_normal},
-	{ "lble",		{	0x102f,	-1,		0x2f,	0x102f},insn_parse_rel16,		insn_resolve_rel16,				insn_emit_rel16,			lwasm_insn_normal},
-	{ "lblo",		{	0x1025,	-1,		0x25,	0x1025},insn_parse_rel16,		insn_resolve_rel16,				insn_emit_rel16,			lwasm_insn_normal},
-	{ "lbls",		{	0x1023,	-1,		0x23,	0x1023},insn_parse_rel16,		insn_resolve_rel16,				insn_emit_rel16,			lwasm_insn_normal},
-	{ "lblt",		{	0x102d, -1,		0x2d,	0x102d},insn_parse_rel16,		insn_resolve_rel16,				insn_emit_rel16,			lwasm_insn_normal},
-	{ "lbmi",		{	0x102b,	-1,		0x2b,	0x102b},insn_parse_rel16,		insn_resolve_rel16,				insn_emit_rel16,			lwasm_insn_normal},
-	{ "lbne",		{	0x1026,	-1,		0x26,	0x1026},insn_parse_rel16,		insn_resolve_rel16,				insn_emit_rel16,			lwasm_insn_normal},
-	{ "lbpl",		{	0x102a,	-1,		0x2a,	0x102a},insn_parse_rel16,		insn_resolve_rel16,				insn_emit_rel16,			lwasm_insn_normal},
-	{ "lbra",		{	0x16,	-1,		0x20,	0x16},	insn_parse_rel16,		insn_resolve_rel16,				insn_emit_rel16,			lwasm_insn_normal},
-	{ "lbrn",		{	0x1021,	-1,		0x21,	0x1021},insn_parse_rel16,		insn_resolve_rel16,				insn_emit_rel16,			lwasm_insn_normal},
-	{ "lbsr",		{	0x17,	-1,		0x8d,	0x17},	insn_parse_rel16,		insn_resolve_rel16,				insn_emit_rel16,			lwasm_insn_normal},
-	{ "lbvc",		{	0x1028,	-1,		0x28,	0x1028},insn_parse_rel16,		insn_resolve_rel16,				insn_emit_rel16,			lwasm_insn_normal},
-	{ "lbvs",		{	0x1029,	-1,		0x29,	0x1029},insn_parse_rel16,		insn_resolve_rel16,				insn_emit_rel16,			lwasm_insn_normal},
+	{ "lbcc",		{	0x1024,	16,		0x24,	0x1024},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,			lwasm_insn_normal},
+	{ "lbcs",		{	0x1025,	16,		0x25,	0x1025},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,			lwasm_insn_normal},
+	{ "lbeq",		{	0x1027,	16,		0x27,	0x1027},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,			lwasm_insn_normal},
+	{ "lbge",		{	0x102c,	16,		0x2c,	0x102c},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,			lwasm_insn_normal},
+	{ "lbgt",		{	0x102e,	16,		0x2e,	0x102e},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,			lwasm_insn_normal},
+	{ "lbhi",		{	0x1022,	16,		0x22,	0x1022},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,			lwasm_insn_normal},
+	{ "lbhs",		{	0x1024,	16,		0x24,	0x1024},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,			lwasm_insn_normal},
+	{ "lble",		{	0x102f,	16,		0x2f,	0x102f},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,			lwasm_insn_normal},
+	{ "lblo",		{	0x1025,	16,		0x25,	0x1025},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,			lwasm_insn_normal},
+	{ "lbls",		{	0x1023,	16,		0x23,	0x1023},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,			lwasm_insn_normal},
+	{ "lblt",		{	0x102d, 16,		0x2d,	0x102d},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,			lwasm_insn_normal},
+	{ "lbmi",		{	0x102b,	16,		0x2b,	0x102b},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,			lwasm_insn_normal},
+	{ "lbne",		{	0x1026,	16,		0x26,	0x1026},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,			lwasm_insn_normal},
+	{ "lbpl",		{	0x102a,	16,		0x2a,	0x102a},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,			lwasm_insn_normal},
+	{ "lbra",		{	0x16,	16,		0x20,	0x16},	insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,			lwasm_insn_normal},
+	{ "lbrn",		{	0x1021,	16,		0x21,	0x1021},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,			lwasm_insn_normal},
+	{ "lbsr",		{	0x17,	16,		0x8d,	0x17},	insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,			lwasm_insn_normal},
+	{ "lbvc",		{	0x1028,	16,		0x28,	0x1028},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,			lwasm_insn_normal},
+	{ "lbvs",		{	0x1029,	16,		0x29,	0x1029},insn_parse_relgen,		insn_resolve_relgen,				insn_emit_relgen,			lwasm_insn_normal},
 	{ "lda",		{	0x96,	0xa6,	0xb6,	0x86},	insn_parse_gen8,		insn_resolve_gen8,				insn_emit_gen8,				lwasm_insn_normal},
 	{ "ldb",		{	0xd6,	0xe6,	0xf6,	0xc6},	insn_parse_gen8,		insn_resolve_gen8,				insn_emit_gen8,				lwasm_insn_normal},
 	{ "ldbt",		{	0x1136,	-1,		-1,		-1	},	insn_parse_bitbit,		insn_resolve_bitbit,			insn_emit_bitbit,			lwasm_insn_is6309},