[libcpu] [424] x86: Fix instruction assembly mnemonics

5 views
Skip to first unread message

lib...@gh11.de

unread,
Apr 26, 2010, 12:16:20 PM4/26/10
to lib...@googlegroups.com
Revision
424
Author
penberg
Date
2010-04-26 09:16:14 -0700 (Mon, 26 Apr 2010)

Log Message

x86: Fix instruction assembly mnemonics

As pointed out by James Abbatiello:

  Mechanical sorting seems to have let you down.

  From x86_disasm.cpp:

      /* [INSTR_CMPSB] */     "cmpsb",
      /* [INSTR_CMPSW] */     "cmpsw",
      /* [INSTR_CMP] */     "cmp",

  From x86_isa.h:
      INSTR_CMP,
      INSTR_CMPSB,
      INSTR_CMPSW,

  The problem here is that ASCII ',' comes before A-Z but ASCII ']' comes after.

Fix that up by introducing a single list of instructions in x86_instr.h header
file.

Suggested-by: James Abbatiello <abb...@gmail.com>
Signed-off-by: Pekka Enberg <pen...@cs.helsinki.fi>

Modified Paths

Added Paths

Diff

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


--- trunk/arch/x86/x86_disasm.cpp	2010-04-25 13:20:27 UTC (rev 423)
+++ trunk/arch/x86/x86_disasm.cpp	2010-04-26 16:16:14 UTC (rev 424)
@@ -12,122 +12,9 @@
 #include "x86_decode.h"
 
 static const char* mnemo[] = {
-	/* [INSTR_AAA] */	 "aaa",
-	/* [INSTR_AAD] */	 "aad",
-	/* [INSTR_AAM] */	 "aam",
-	/* [INSTR_AAS] */	 "aas",
-	/* [INSTR_ADC] */	 "adc",
-	/* [INSTR_ADD] */	 "add",
-	/* [INSTR_AND] */	 "and",
-	/* [INSTR_CALL] */	 "call",
-	/* [INSTR_CBW] */	 "cbw",
-	/* [INSTR_CLC] */	 "clc",
-	/* [INSTR_CLD] */	 "cld",
-	/* [INSTR_CLI] */	 "cli",
-	/* [INSTR_CMC] */	 "cmc",
-	/* [INSTR_CMPSB] */	 "cmpsb",
-	/* [INSTR_CMPSW] */	 "cmpsw",
-	/* [INSTR_CMP] */	 "cmp",
-	/* [INSTR_CWD] */	 "cwd",
-	/* [INSTR_DAA] */	 "daa",
-	/* [INSTR_DAS] */	 "das",
-	/* [INSTR_DEC] */	 "dec",
-	/* [INSTR_DIV] */	 "div",
-	/* [INSTR_HLT] */	 "hlt",
-	/* [INSTR_IDIV] */	 "idiv",
-	/* [INSTR_IMUL] */	 "imul",
-	/* [INSTR_INC] */	 "inc",
-	/* [INSTR_INTO] */	 "into",
-	/* [INSTR_INT] */	 "int",
-	/* [INSTR_IN] */	 "in",
-	/* [INSTR_IRET] */	 "iret",
-	/* [INSTR_JAE] */	 "jae",
-	/* [INSTR_JA] */	 "ja",
-	/* [INSTR_JBE] */	 "jbe",
-	/* [INSTR_JB] */	 "jb",
-	/* [INSTR_JCXZ] */	 "jcxz",
-	/* [INSTR_JC] */	 "jc",
-	/* [INSTR_JE] */	 "je",
-	/* [INSTR_JGE] */	 "jge",
-	/* [INSTR_JG] */	 "jg",
-	/* [INSTR_JLE] */	 "jle",
-	/* [INSTR_JL] */	 "jl",
-	/* [INSTR_JMP] */	 "jmp",
-	/* [INSTR_JNAE] */	 "jnae",
-	/* [INSTR_JNA] */	 "jna",
-	/* [INSTR_JNBE] */	 "jnbe",
-	/* [INSTR_JNB] */	 "jnb",
-	/* [INSTR_JNC] */	 "jnc",
-	/* [INSTR_JNE] */	 "jne",
-	/* [INSTR_JNGE] */	 "jnge",
-	/* [INSTR_JNG] */	 "jng",
-	/* [INSTR_JNLE] */	 "jnle",
-	/* [INSTR_JNL] */	 "jnl",
-	/* [INSTR_JNO] */	 "jno",
-	/* [INSTR_JNP] */	 "jnp",
-	/* [INSTR_JNS] */	 "jns",
-	/* [INSTR_JNZ] */	 "jnz",
-	/* [INSTR_JO] */	 "jo",
-	/* [INSTR_JPE] */	 "jpe",
-	/* [INSTR_JPO] */	 "jpo",
-	/* [INSTR_JP] */	 "jp",
-	/* [INSTR_JS] */	 "js",
-	/* [INSTR_JZ] */	 "jz",
-	/* [INSTR_LAHF] */	 "lahf",
-	/* [INSTR_LDS] */	 "lds",
-	/* [INSTR_LEA] */	 "lea",
-	/* [INSTR_LES] */	 "les",
-	/* [INSTR_LODSB] */	 "lodsb",
-	/* [INSTR_LODSW] */	 "lodsw",
-	/* [INSTR_LOOPE] */	 "loope",
-	/* [INSTR_LOOPNE] */	 "loopne",
-	/* [INSTR_LOOPNZ] */	 "loopnz",
-	/* [INSTR_LOOPZ] */	 "loopz",
-	/* [INSTR_LOOP] */	 "loop",
-	/* [INSTR_MOVSB] */	 "movsb",
-	/* [INSTR_MOVSW] */	 "movsw",
-	/* [INSTR_MOV] */	 "mov",
-	/* [INSTR_MUL] */	 "mul",
-	/* [INSTR_NEG] */	 "neg",
-	/* [INSTR_NOP] */	 "nop",
-	/* [INSTR_NOT] */	 "not",
-	/* [INSTR_OR] */	 "or",
-	/* [INSTR_OUT] */	 "out",
-	/* [INSTR_POPA] */	 "popa",
-	/* [INSTR_POPF] */	 "popf",
-	/* [INSTR_POP] */	 "pop",
-	/* [INSTR_PUSHA] */	 "pusha",
-	/* [INSTR_PUSHF] */	 "pushf",
-	/* [INSTR_PUSH] */	 "push",
-	/* [INSTR_RCL] */	 "rcl",
-	/* [INSTR_RCR] */	 "rcr",
-	/* [INSTR_REPE] */	 "repe",
-	/* [INSTR_REPNE] */	 "repne",
-	/* [INSTR_REPNZ] */	 "repnz",
-	/* [INSTR_REPZ] */	 "repz",
-	/* [INSTR_REP] */	 "rep",
-	/* [INSTR_RETF] */	 "retf",
-	/* [INSTR_RET] */	 "ret",
-	/* [INSTR_ROL] */	 "rol",
-	/* [INSTR_ROR] */	 "ror",
-	/* [INSTR_SAHF] */	 "sahf",
-	/* [INSTR_SAL] */	 "sal",
-	/* [INSTR_SAR] */	 "sar",
-	/* [INSTR_SBB] */	 "sbb",
-	/* [INSTR_SCASB] */	 "scasb",
-	/* [INSTR_SCASW] */	 "scasw",
-	/* [INSTR_SHL] */	 "shl",
-	/* [INSTR_SHR] */	 "shr",
-	/* [INSTR_STC] */	 "stc",
-	/* [INSTR_STD] */	 "std",
-	/* [INSTR_STI] */	 "sti",
-	/* [INSTR_STOSB] */	 "stosb",
-	/* [INSTR_STOSW] */	 "stosw",
-	/* [INSTR_SUB] */	 "sub",
-	/* [INSTR_TEST] */	 "test",
-	/* [INSTR_XCHG] */	 "xchg",
-	/* [INSTR_XLATB] */	 "xlatb",
-	/* [INSTR_XOR] */	 "xor",
+#define DECLARE_INSTR(name,str) str,
+#include "x86_instr.h"
+#undef DECLARE_INSTR
 };
 
 static const char *to_mnemonic(struct x86_instr *instr)

Added: trunk/arch/x86/x86_instr.h (0 => 424)


--- trunk/arch/x86/x86_instr.h	                        (rev 0)
+++ trunk/arch/x86/x86_instr.h	2010-04-26 16:16:14 UTC (rev 424)
@@ -0,0 +1,116 @@
+DECLARE_INSTR(INSTR_AAA, "aaa")
+DECLARE_INSTR(INSTR_AAD, "aad")
+DECLARE_INSTR(INSTR_AAM, "aam")
+DECLARE_INSTR(INSTR_AAS, "aas")
+DECLARE_INSTR(INSTR_ADC, "adc")
+DECLARE_INSTR(INSTR_ADD, "add")
+DECLARE_INSTR(INSTR_AND, "and")
+DECLARE_INSTR(INSTR_CALL, "call")
+DECLARE_INSTR(INSTR_CBW, "cbw")
+DECLARE_INSTR(INSTR_CLC, "clc")
+DECLARE_INSTR(INSTR_CLD, "cld")
+DECLARE_INSTR(INSTR_CLI, "cli")
+DECLARE_INSTR(INSTR_CMC, "cmc")
+DECLARE_INSTR(INSTR_CMP, "cmp")
+DECLARE_INSTR(INSTR_CMPSB, "cmpsb")
+DECLARE_INSTR(INSTR_CMPSW, "cmpsw")
+DECLARE_INSTR(INSTR_CWD, "cwd")
+DECLARE_INSTR(INSTR_DAA, "daa")
+DECLARE_INSTR(INSTR_DAS, "das")
+DECLARE_INSTR(INSTR_DEC, "dec")
+DECLARE_INSTR(INSTR_DIV, "div")
+DECLARE_INSTR(INSTR_HLT, "hlt")
+DECLARE_INSTR(INSTR_IDIV, "idiv")
+DECLARE_INSTR(INSTR_IMUL, "imul")
+DECLARE_INSTR(INSTR_IN, "in")
+DECLARE_INSTR(INSTR_INC, "inc")
+DECLARE_INSTR(INSTR_INT, "int")
+DECLARE_INSTR(INSTR_INTO, "into")
+DECLARE_INSTR(INSTR_IRET, "iret")
+DECLARE_INSTR(INSTR_JA, "ja")
+DECLARE_INSTR(INSTR_JAE, "jae")
+DECLARE_INSTR(INSTR_JB, "jb")
+DECLARE_INSTR(INSTR_JBE, "jbe")
+DECLARE_INSTR(INSTR_JC, "jc")
+DECLARE_INSTR(INSTR_JCXZ, "jcxz")
+DECLARE_INSTR(INSTR_JE, "je")
+DECLARE_INSTR(INSTR_JG, "jg")
+DECLARE_INSTR(INSTR_JGE, "jge")
+DECLARE_INSTR(INSTR_JL, "jl")
+DECLARE_INSTR(INSTR_JLE, "jle")
+DECLARE_INSTR(INSTR_JMP, "jmp")
+DECLARE_INSTR(INSTR_JNA, "jna")
+DECLARE_INSTR(INSTR_JNAE, "jnae")
+DECLARE_INSTR(INSTR_JNB, "jnb")
+DECLARE_INSTR(INSTR_JNBE, "jnbe")
+DECLARE_INSTR(INSTR_JNC, "jnc")
+DECLARE_INSTR(INSTR_JNE, "jne")
+DECLARE_INSTR(INSTR_JNG, "jng")
+DECLARE_INSTR(INSTR_JNGE, "jnge")
+DECLARE_INSTR(INSTR_JNL, "jnl")
+DECLARE_INSTR(INSTR_JNLE, "jnle")
+DECLARE_INSTR(INSTR_JNO, "jno")
+DECLARE_INSTR(INSTR_JNP, "jnp")
+DECLARE_INSTR(INSTR_JNS, "jns")
+DECLARE_INSTR(INSTR_JNZ, "jnz")
+DECLARE_INSTR(INSTR_JO, "jo")
+DECLARE_INSTR(INSTR_JP, "jp")
+DECLARE_INSTR(INSTR_JPE, "jpe")
+DECLARE_INSTR(INSTR_JPO, "jpo")
+DECLARE_INSTR(INSTR_JS, "js")
+DECLARE_INSTR(INSTR_JZ, "jz")
+DECLARE_INSTR(INSTR_LAHF, "lahf")
+DECLARE_INSTR(INSTR_LDS, "lds")
+DECLARE_INSTR(INSTR_LEA, "lea")
+DECLARE_INSTR(INSTR_LES, "les")
+DECLARE_INSTR(INSTR_LODSB, "lodsb")
+DECLARE_INSTR(INSTR_LODSW, "lodsw")
+DECLARE_INSTR(INSTR_LOOP, "loop")
+DECLARE_INSTR(INSTR_LOOPE, "loope")
+DECLARE_INSTR(INSTR_LOOPNE, "loopne")
+DECLARE_INSTR(INSTR_LOOPNZ, "loopnz")
+DECLARE_INSTR(INSTR_LOOPZ, "loopz")
+DECLARE_INSTR(INSTR_MOV, "mov")
+DECLARE_INSTR(INSTR_MOVSB, "movsb")
+DECLARE_INSTR(INSTR_MOVSW, "movsw")
+DECLARE_INSTR(INSTR_MUL, "mul")
+DECLARE_INSTR(INSTR_NEG, "neg")
+DECLARE_INSTR(INSTR_NOP, "nop")
+DECLARE_INSTR(INSTR_NOT, "not")
+DECLARE_INSTR(INSTR_OR, "or")
+DECLARE_INSTR(INSTR_OUT, "out")
+DECLARE_INSTR(INSTR_POP, "pop")
+DECLARE_INSTR(INSTR_POPA, "popa")
+DECLARE_INSTR(INSTR_POPF, "popf")
+DECLARE_INSTR(INSTR_PUSH, "push")
+DECLARE_INSTR(INSTR_PUSHA, "pusha")
+DECLARE_INSTR(INSTR_PUSHF, "pushf")
+DECLARE_INSTR(INSTR_RCL, "rcl")
+DECLARE_INSTR(INSTR_RCR, "rcr")
+DECLARE_INSTR(INSTR_REP, "rep")
+DECLARE_INSTR(INSTR_REPE, "repe")
+DECLARE_INSTR(INSTR_REPNE, "repne")
+DECLARE_INSTR(INSTR_REPNZ, "repnz")
+DECLARE_INSTR(INSTR_REPZ, "repz")
+DECLARE_INSTR(INSTR_RET, "ret")
+DECLARE_INSTR(INSTR_RETF, "retf")
+DECLARE_INSTR(INSTR_ROL, "rol")
+DECLARE_INSTR(INSTR_ROR, "ror")
+DECLARE_INSTR(INSTR_SAHF, "sahf")
+DECLARE_INSTR(INSTR_SAL, "sal")
+DECLARE_INSTR(INSTR_SAR, "sar")
+DECLARE_INSTR(INSTR_SBB, "sbb")
+DECLARE_INSTR(INSTR_SCASB, "scasb")
+DECLARE_INSTR(INSTR_SCASW, "scasw")
+DECLARE_INSTR(INSTR_SHL, "shl")
+DECLARE_INSTR(INSTR_SHR, "shr")
+DECLARE_INSTR(INSTR_STC, "stc")
+DECLARE_INSTR(INSTR_STD, "std")
+DECLARE_INSTR(INSTR_STI, "sti")
+DECLARE_INSTR(INSTR_STOSB, "stosb")
+DECLARE_INSTR(INSTR_STOSW, "stosw")
+DECLARE_INSTR(INSTR_SUB, "sub")
+DECLARE_INSTR(INSTR_TEST, "test")
+DECLARE_INSTR(INSTR_XCHG, "xchg")
+DECLARE_INSTR(INSTR_XLATB, "xlatb")
+DECLARE_INSTR(INSTR_XOR, "xor")

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


--- trunk/arch/x86/x86_isa.h	2010-04-25 13:20:27 UTC (rev 423)
+++ trunk/arch/x86/x86_isa.h	2010-04-26 16:16:14 UTC (rev 424)
@@ -7,128 +7,10 @@
 #ifndef X86_ISA_H
 #define X86_ISA_H
 
-/*
- * 8086 instruction set. See the following URL for further information:
-
- * http://www.emu8086.com/assembly_language_tutorial_assembler_reference/8086_instruction_set.html
- */
 enum x86_instr_types {
-	INSTR_AAA,
-	INSTR_AAD,
-	INSTR_AAM,
-	INSTR_AAS,
-	INSTR_ADC,
-	INSTR_ADD,
-	INSTR_AND,
-	INSTR_CALL,
-	INSTR_CBW,
-	INSTR_CLC,
-	INSTR_CLD,
-	INSTR_CLI,
-	INSTR_CMC,
-	INSTR_CMP,
-	INSTR_CMPSB,
-	INSTR_CMPSW,
-	INSTR_CWD,
-	INSTR_DAA,
-	INSTR_DAS,
-	INSTR_DEC,
-	INSTR_DIV,
-	INSTR_HLT,
-	INSTR_IDIV,
-	INSTR_IMUL,
-	INSTR_IN,
-	INSTR_INC,
-	INSTR_INT,
-	INSTR_INTO,
-	INSTR_IRET,
-	INSTR_JA,
-	INSTR_JAE,
-	INSTR_JB,
-	INSTR_JBE,
-	INSTR_JC,
-	INSTR_JCXZ,
-	INSTR_JE,
-	INSTR_JG,
-	INSTR_JGE,
-	INSTR_JL,
-	INSTR_JLE,
-	INSTR_JMP,
-	INSTR_JNA,
-	INSTR_JNAE,
-	INSTR_JNB,
-	INSTR_JNBE,
-	INSTR_JNC,
-	INSTR_JNE,
-	INSTR_JNG,
-	INSTR_JNGE,
-	INSTR_JNL,
-	INSTR_JNLE,
-	INSTR_JNO,
-	INSTR_JNP,
-	INSTR_JNS,
-	INSTR_JNZ,
-	INSTR_JO,
-	INSTR_JP,
-	INSTR_JPE,
-	INSTR_JPO,
-	INSTR_JS,
-	INSTR_JZ,
-	INSTR_LAHF,
-	INSTR_LDS,
-	INSTR_LEA,
-	INSTR_LES,
-	INSTR_LODSB,
-	INSTR_LODSW,
-	INSTR_LOOP,
-	INSTR_LOOPE,
-	INSTR_LOOPNE,
-	INSTR_LOOPNZ,
-	INSTR_LOOPZ,
-	INSTR_MOV,
-	INSTR_MOVSB,
-	INSTR_MOVSW,
-	INSTR_MUL,
-	INSTR_NEG,
-	INSTR_NOP,
-	INSTR_NOT,
-	INSTR_OR,
-	INSTR_OUT,
-	INSTR_POP,
-	INSTR_POPA,
-	INSTR_POPF,
-	INSTR_PUSH,
-	INSTR_PUSHA,
-	INSTR_PUSHF,
-	INSTR_RCL,
-	INSTR_RCR,
-	INSTR_REP,
-	INSTR_REPE,
-	INSTR_REPNE,
-	INSTR_REPNZ,
-	INSTR_REPZ,
-	INSTR_RET,
-	INSTR_RETF,
-	INSTR_ROL,
-	INSTR_ROR,
-	INSTR_SAHF,
-	INSTR_SAL,
-	INSTR_SAR,
-	INSTR_SBB,
-	INSTR_SCASB,
-	INSTR_SCASW,
-	INSTR_SHL,
-	INSTR_SHR,
-	INSTR_STC,
-	INSTR_STD,
-	INSTR_STI,
-	INSTR_STOSB,
-	INSTR_STOSW,
-	INSTR_SUB,
-	INSTR_TEST,
-	INSTR_XCHG,
-	INSTR_XLATB,
-	INSTR_XOR,
+#define DECLARE_INSTR(name,str) name,
+#include "x86_instr.h"
+#undef DECLARE_INSTR
 };
 
 #endif /* X86_ISA_H */


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