[libcpu] [423] x86: Clean up opcode group decoding

5 views
Skip to first unread message

lib...@gh11.de

unread,
Apr 25, 2010, 9:20:30 AM4/25/10
to lib...@googlegroups.com
Revision
423
Author
penberg
Date
2010-04-25 06:20:27 -0700 (Sun, 25 Apr 2010)

Log Message

x86: Clean up opcode group decoding

This patch removes INSTR_SHIFT_GRP2 and introduces GROUP_2 instruction flag to
clean up opcode group decoding and disassembly code.

Signed-off-by: Pekka Enberg <pen...@cs.helsinki.fi>

Modified Paths

Diff

Modified: trunk/arch/x86/x86_decode.cpp (422 => 423)


--- trunk/arch/x86/x86_decode.cpp	2010-04-25 12:54:16 UTC (rev 422)
+++ trunk/arch/x86/x86_decode.cpp	2010-04-25 13:20:27 UTC (rev 423)
@@ -206,8 +206,8 @@
 	/*[0xBD]*/	INSTR_MOV | ADDMODE_IMM_REG | WIDTH_FULL,
 	/*[0xBE]*/	INSTR_MOV | ADDMODE_IMM_REG | WIDTH_FULL,
 	/*[0xBF]*/	INSTR_MOV | ADDMODE_IMM_REG | WIDTH_FULL,
-	/*[0xC0]*/	INSTR_SHIFT_GRP2 | ADDMODE_IMM8_RM | WIDTH_BYTE,
-	/*[0xC0]*/	INSTR_SHIFT_GRP2 | ADDMODE_IMM8_RM | WIDTH_FULL,
+	/*[0xC0]*/	GROUP_2 | ADDMODE_IMM8_RM | WIDTH_BYTE,
+	/*[0xC1]*/	GROUP_2 | ADDMODE_IMM8_RM | WIDTH_FULL,
 	/*[0xC2]*/	0,
 	/*[0xC3]*/	INSTR_RET | ADDMODE_IMPLIED,
 	/*[0xC4]*/	0,
@@ -540,15 +540,15 @@
 	instr->type	= decode & X86_INSTR_TYPE_MASK;
 	instr->flags	= decode & ~X86_INSTR_TYPE_MASK;
 
-	if (instr->flags == 0)	/* Unrecognized? */
+	if (instr->flags == 0) /* Unrecognized? */
 		return -1;
 
 	if (instr->flags & MOD_RM)
 		decode_modrm_byte(instr, RAM[pc++]);
 
 	/* Opcode groups */
-	switch (instr->type) {
-	case INSTR_SHIFT_GRP2:
+	switch (instr->flags) {
+	case GROUP_2:
 		instr->type	= shift_grp2_decode_table[instr->reg_opc];
 		break;
 	default:

Modified: trunk/arch/x86/x86_decode.h (422 => 423)


--- trunk/arch/x86/x86_decode.h	2010-04-25 12:54:16 UTC (rev 422)
+++ trunk/arch/x86/x86_decode.h	2010-04-25 13:20:27 UTC (rev 423)
@@ -79,6 +79,8 @@
 	DST_MASK		= DST_NONE|DST_REG|DST_ACC|DST_MEM|DST_MEM_DISP_BYTE|DST_MEM_DISP_FULL,
 
 	MEM_DISP_MASK		= SRC_MEM_DISP_BYTE|SRC_MEM_DISP_FULL|DST_MEM_DISP_BYTE|DST_MEM_DISP_FULL,
+
+	GROUP_2			= (1U << 27),
 };
 
 /*

Modified: trunk/arch/x86/x86_disasm.cpp (422 => 423)


--- trunk/arch/x86/x86_disasm.cpp	2010-04-25 12:54:16 UTC (rev 422)
+++ trunk/arch/x86/x86_disasm.cpp	2010-04-25 13:20:27 UTC (rev 423)
@@ -116,7 +116,6 @@
 	/* [INSTR_SBB] */	 "sbb",
 	/* [INSTR_SCASB] */	 "scasb",
 	/* [INSTR_SCASW] */	 "scasw",
-	/* [INSTR_SHIFT_GRP2] */ "<grp2>",
 	/* [INSTR_SHL] */	 "shl",
 	/* [INSTR_SHR] */	 "shr",
 	/* [INSTR_STC] */	 "stc",

Modified: trunk/arch/x86/x86_isa.h (422 => 423)


--- trunk/arch/x86/x86_isa.h	2010-04-25 12:54:16 UTC (rev 422)
+++ trunk/arch/x86/x86_isa.h	2010-04-25 13:20:27 UTC (rev 423)
@@ -117,7 +117,6 @@
 	INSTR_SBB,
 	INSTR_SCASB,
 	INSTR_SCASW,
-	INSTR_SHIFT_GRP2,
 	INSTR_SHL,
 	INSTR_SHR,
 	INSTR_STC,


 
--
Subscription settings: http://groups.google.com/group/libcpu/subscribe?hl=en
Reply all
Reply to author
Forward
0 new messages