diff --git a/MODIFIED b/MODIFIED new file mode 100644 index 00000000..f7626f35 --- /dev/null +++ b/MODIFIED @@ -0,0 +1,18 @@ +This is a modified version of NASM, modified and released by H. Peter +Anvin ; it is not the original form released by the +NASM authors. + +The changes include: + +1. Merged nasm098p3.zip with nasm-0.97.tar.gz to create a fully + buildable version for Unix systems (Makefile.in updates, etc.) + +2. Changed insns.pl to create the instruction tables in nasm.h and + names.c, so that a new instruction can be added by adding it *only* + to insns.dat. + +3. Added the following new instructions: SYSENTER, SYSEXIT, FXSAVE, + FXRSTOR, UD1, UD2 (the latter two are two opcodes that Intel + guarantee will never be used; one of them is documented as UD2 in + Intel documentation, the other one just as "Undefined Opcode" -- + calling it UD1 seemed to make sense.) diff --git a/Makefile.in b/Makefile.in index 5b8acebc..063e492e 100644 --- a/Makefile.in +++ b/Makefile.in @@ -25,8 +25,8 @@ INSTALL_DATA = @INSTALL_DATA@ NASM = nasm.o nasmlib.o float.o insnsa.o assemble.o labels.o \ parser.o outform.o outbin.o outaout.o outcoff.o outelf.o \ - outobj.o outas86.o outrdf.o outdbg.o preproc.o listing.o \ - eval.o + outobj.o outas86.o outrdf.o outrdf2.o outdbg.o zoutieee.o \ + preproc.o listing.o eval.o NDISASM = ndisasm.o disasm.o sync.o nasmlib.o insnsd.o @@ -38,37 +38,39 @@ nasm: $(NASM) ndisasm: $(NDISASM) $(CC) -o ndisasm $(NDISASM) -assemble.o: assemble.c nasm.h nasmlib.h assemble.h insns.h -disasm.o: disasm.c nasm.h disasm.h sync.h insns.h names.c -eval.o: eval.c eval.h nasm.h nasmlib.h -float.o: float.c nasm.h -insnsa.o: insnsa.c nasm.h insns.h -insnsd.o: insnsd.c nasm.h insns.h -labels.o: labels.c nasm.h nasmlib.h -listing.o: listing.c nasm.h nasmlib.h listing.h -nasm.o: nasm.c nasm.h nasmlib.h preproc.h parser.h assemble.h labels.h \ +assemble.o: assemble.c nasm.h insnsi.h nasmlib.h assemble.h insns.h +disasm.o: disasm.c nasm.h insnsi.h disasm.h sync.h insns.h names.c insnsn.c +eval.o: eval.c eval.h nasm.h insnsi.h nasmlib.h +float.o: float.c nasm.h insnsi.h +insnsa.o: insnsa.c nasm.h insnsi.h insns.h +insnsd.o: insnsd.c nasm.h insnsi.h insns.h +labels.o: labels.c nasm.h insnsi.h nasmlib.h +listing.o: listing.c nasm.h insnsi.h nasmlib.h listing.h +nasm.o: nasm.c nasm.h insnsi.h nasmlib.h preproc.h parser.h assemble.h labels.h \ outform.h listing.h -nasmlib.o: nasmlib.c nasm.h nasmlib.h -ndisasm.o: ndisasm.c nasm.h nasmlib.h sync.h disasm.h -outaout.o: outaout.c nasm.h nasmlib.h outform.h -outas86.o: outas86.c nasm.h nasmlib.h outform.h -outbin.o: outbin.c nasm.h nasmlib.h outform.h -outcoff.o: outcoff.c nasm.h nasmlib.h outform.h -outdbg.o: outdbg.c nasm.h nasmlib.h outform.h -outelf.o: outelf.c nasm.h nasmlib.h outform.h -outform.o: outform.c outform.h nasm.h -outobj.o: outobj.c nasm.h nasmlib.h outform.h -outrdf.o: outrdf.c nasm.h nasmlib.h outform.h -parser.o: parser.c nasm.h nasmlib.h parser.h float.h names.c -preproc.o: preproc.c nasm.h nasmlib.h macros.c +nasmlib.o: nasmlib.c nasm.h insnsi.h nasmlib.h +ndisasm.o: ndisasm.c nasm.h insnsi.h nasmlib.h sync.h disasm.h +outaout.o: outaout.c nasm.h insnsi.h nasmlib.h outform.h +outas86.o: outas86.c nasm.h insnsi.h nasmlib.h outform.h +outbin.o: outbin.c nasm.h insnsi.h nasmlib.h outform.h +outcoff.o: outcoff.c nasm.h insnsi.h nasmlib.h outform.h +outdbg.o: outdbg.c nasm.h insnsi.h nasmlib.h outform.h +outelf.o: outelf.c nasm.h insnsi.h nasmlib.h outform.h +outform.o: outform.c outform.h nasm.h insnsi.h +outobj.o: outobj.c nasm.h insnsi.h nasmlib.h outform.h +outrdf.o: outrdf.c nasm.h insnsi.h nasmlib.h outform.h +outrdf2.o: outrdf2.c nasm.h insnsi.h nasmlib.h outform.h +parser.o: parser.c nasm.h insnsi.h nasmlib.h parser.h float.h names.c insnsn.c +preproc.o: preproc.c nasm.h insnsi.h nasmlib.h macros.c sync.o: sync.c sync.h +zoutieee.o: zoutieee.c nasm.h insnsi.h nasmlib.h outform.h -# These two source files are automagically generated from a single +# These source files are automagically generated from a single # instruction-table file by a Perl script. They're distributed, # though, so it isn't necessary to have Perl just to recompile NASM # from the distribution. -insnsa.c insnsd.c: insns.dat insns.pl +insnsa.c insnsd.c insnsi.h insnsn.c: insns.dat insns.pl perl $(srcdir)/insns.pl $(srcdir)/insns.dat # This source file is generated from the standard macros file @@ -89,7 +91,7 @@ clean: cd rdoff; $(MAKE) clean spotless: clean - rm -f config.* Makefile + rm -f config.* Makefile *~ cd rdoff; $(MAKE) spotless rdf: diff --git a/insns.bas b/insns.bas index 36dc3e12..5178aa63 100644 --- a/insns.bas +++ b/insns.bas @@ -5,11 +5,16 @@ ' FIDO: Mark Junker@2:2437/47.21 ' ' COMMENT: While I wrote this program I often asked me, if it isn't easier -' to write an interpreter for pearl-scripts :] +' to write an interpreter for Perl-scripts :] ' ' COMMENT: To start the program press SHIFT+F5 within the QBasic IDE ' or start it from the command-line with QBASIC /RUN MACROS ' +' +' THIS PROGRAM NEEDS TO BE UPDATED -- it doesn't create insnsi.h +' and insnsn.c. However, Perl interpreters are now available for both +' DOS and Windows, so it seems pointless to spend the effort. +' DEFINT A-Z diff --git a/insns.dat b/insns.dat index 4113a07c..1659422a 100644 --- a/insns.dat +++ b/insns.dat @@ -8,9 +8,7 @@ ; Format of file: all four fields must be present on every functional ; line. Hence `void' for no-operand instructions, and `\0' for such ; as EQU. If the last three fields are all `ignore', no action is -; taken except to register the opcode as being present. _ALL_ opcodes -; listed in the `enum' in nasm.h must be present in here, in the -; same order. This is to build the main instruction table for NASM. +; taken except to register the opcode as being present. AAA void \1\x37 8086 AAD void \2\xD5\x0A 8086 @@ -389,6 +387,8 @@ FXCH void \2\xD9\xC9 8086,FPU FXCH fpureg \1\xD9\10\xC8 8086,FPU FXCH fpureg,fpu0 \1\xD9\10\xC8 8086,FPU FXCH fpu0,fpureg \1\xD9\11\xC8 8086,FPU +FXRSTOR mem \300\2\x0F\xAE\202 P6,FPU +FXSAVE mem \300\2\x0F\xAE\200 P6,FPU FXTRACT void \2\xD9\xF4 8086,FPU FYL2X void \2\xD9\xF1 8086,FPU FYL2XP1 void \2\xD9\xF9 8086,FPU @@ -985,6 +985,8 @@ SUB rm32,imm \321\300\1\x81\205\41 386,SM SUB mem,imm8 \300\1\x80\205\21 8086,SM SUB mem,imm16 \320\300\1\x81\205\31 8086,SM SUB mem,imm32 \321\300\1\x81\205\41 386,SM +SYSENTER void \2\x0F\x34 P6 +SYSEXIT void \2\x0F\x36 P6,PRIV TEST mem,reg8 \300\1\x84\101 8086,SM TEST reg8,reg8 \300\1\x84\101 8086 TEST mem,reg16 \320\300\1\x85\101 8086,SM @@ -1003,6 +1005,8 @@ TEST rm32,imm \321\300\1\xF7\200\41 386,SM TEST mem,imm8 \300\1\xF6\200\21 8086,SM TEST mem,imm16 \320\300\1\xF7\200\31 8086,SM TEST mem,imm32 \321\300\1\xF7\200\41 386,SM +UD1 void \2\x0F\xB9 286 +UD2 void \2\x0F\x0B 286 UMOV mem,reg8 \300\2\x0F\x10\101 386,UNDOC,SM UMOV reg8,reg8 \300\2\x0F\x10\101 386,UNDOC UMOV mem,reg16 \320\300\2\x0F\x11\101 386,UNDOC,SM diff --git a/insns.pl b/insns.pl index 9dc4dd45..8e2ac1e0 100644 --- a/insns.pl +++ b/insns.pl @@ -1,6 +1,6 @@ #!/usr/bin/perl # -# insns.pl produce insnsa.c and insnsd.c from insns.dat +# insns.pl produce insnsa.c, insnsd.c, insnsi.h, insnsn.c from insns.dat # # The Netwide Assembler is copyright (C) 1996 Simon Tatham and # Julian Hall. All rights reserved. The software is @@ -102,6 +102,85 @@ print D "};\n"; close D; +print STDERR "Writing insnsi.h...\n"; + +open I, ">insnsi.h"; + +print I "/* This file is auto-generated from insns.dat by insns.pl" . + " - don't exit it */\n\n"; +print I "/* This file in included by nasm.h */\n\n"; + +print I "/* Instruction names */\n"; +print I "enum {"; +$first = 1; +$maxlen = 0; +foreach $i (@opcodes) { + print I "," if ( !$first ); + $first = 0; + print I "\n\tI_${i}"; + $len = length($i); + $len++ if ( $i =~ /cc$/ ); # Condition codes can be 3 characters long + $maxlen = $len if ( $len > $maxlen ); +} +print I "\n};\n\n"; +print I "#define MAX_INSLEN ", $maxlen, "\n"; + +close I; + +print STDERR "Writing insnsn.c...\n"; + +open N, ">insnsn.c"; + +print N "/* This file is auto-generated from insns.dat by insns.pl" . + " - don't exit it */\n\n"; +print N "/* This file in included by names.c */\n\n"; + +print N "static char *insn_names[] = {"; +$first = 1; +foreach $i (@opcodes) { + # Don't include conditional instructions + if ( $i !~ /cc$/ ) { + print N "," if ( !$first ); + $first = 0; + $ilower = $i; + $ilower =~ tr/A-Z/a-z/; + print N "\n\t\"${ilower}\""; + } +} +print N "\n};\n\n"; +print N "/* Conditional instructions */\n"; +print N "static char *icn[] = {"; +$first = 1; +foreach $i (@opcodes) { + # Only conditional instructions + if ( $i =~ /cc$/ ) { + $ins = $`; # Skip cc suffix + print N "," if ( !$first ); + $first = 0; + $ilower = $i; + $ilower =~ tr/A-Z/a-z/; + print N "\n\t\"${ilower}\""; + } +} + +print N "\n};\n\n"; +print N "/* and the corresponding opcodes */\n"; +print N "static int ico[] = {"; +$first = 1; +foreach $i (@opcodes) { + # Only conditional instructions + if ( $i =~ /cc$/ ) { + $ins = $`; # Skip cc suffix + print N "," if ( !$first ); + $first = 0; + print N "\n\tI_$i"; + } +} + +print N "\n};\n"; + +close N; + printf STDERR "Done: %d instructions\n", $insns; sub format { diff --git a/names.c b/names.c index cc168452..1a462ecf 100644 --- a/names.c +++ b/names.c @@ -17,76 +17,11 @@ static char *reg_names[] = { /* register names, as strings */ "st7", "tr3", "tr4", "tr5", "tr6", "tr7" }; -static char *insn_names[] = { /* instruction names, as strings */ - "aaa", "aad", "aam", "aas", "adc", "add", "and", "arpl", - "bound", "bsf", "bsr", "bswap", "bt", "btc", "btr", "bts", - "call", "cbw", "cdq", "clc", "cld", "cli", "clts", "cmc", "cmp", - "cmpsb", "cmpsd", "cmpsw", "cmpxchg", "cmpxchg486", "cmpxchg8b", - "cpuid", "cwd", "cwde", "daa", "das", "db", "dd", "dec", "div", - "dq", "dt", "dw", "emms", "enter", "equ", "f2xm1", "fabs", - "fadd", "faddp", "fbld", "fbstp", "fchs", "fclex", "fcmovb", - "fcmovbe", "fcmove", "fcmovnb", "fcmovnbe", "fcmovne", - "fcmovnu", "fcmovu", "fcom", "fcomi", "fcomip", "fcomp", - "fcompp", "fcos", "fdecstp", "fdisi", "fdiv", "fdivp", "fdivr", - "fdivrp", - "femms", - "feni", "ffree", "fiadd", "ficom", "ficomp", "fidiv", - "fidivr", "fild", "fimul", "fincstp", "finit", "fist", "fistp", - "fisub", "fisubr", "fld", "fld1", "fldcw", "fldenv", "fldl2e", - "fldl2t", "fldlg2", "fldln2", "fldpi", "fldz", "fmul", "fmulp", - "fnclex", "fndisi", "fneni", "fninit", "fnop", "fnsave", - "fnstcw", "fnstenv", "fnstsw", "fpatan", "fprem", "fprem1", - "fptan", "frndint", "frstor", "fsave", "fscale", "fsetpm", - "fsin", "fsincos", "fsqrt", "fst", "fstcw", "fstenv", "fstp", - "fstsw", "fsub", "fsubp", "fsubr", "fsubrp", "ftst", "fucom", - "fucomi", "fucomip", "fucomp", "fucompp", "fxam", "fxch", - "fxtract", "fyl2x", "fyl2xp1", "hlt", "ibts", "icebp", "idiv", - "imul", "in", "inc", "incbin", "insb", "insd", "insw", "int", - "int01", "int1", "int3", "into", "invd", "invlpg", "iret", - "iretd", "iretw", "jcxz", "jecxz", "jmp", "lahf", "lar", "lds", - "lea", "leave", "les", "lfs", "lgdt", "lgs", "lidt", "lldt", - "lmsw", "loadall", "loadall286", "lodsb", "lodsd", "lodsw", - "loop", "loope", "loopne", "loopnz", "loopz", "lsl", "lss", - "ltr", "mov", "movd", "movq", "movsb", "movsd", "movsw", - "movsx", "movzx", "mul", "neg", "nop", "not", "or", "out", - "outsb", "outsd", "outsw", "packssdw", "packsswb", "packuswb", - "paddb", "paddd", "paddsb", "paddsiw", "paddsw", "paddusb", - "paddusw", "paddw", "pand", "pandn", "paveb", - "pavgusb", "pcmpeqb", - "pcmpeqd", "pcmpeqw", "pcmpgtb", "pcmpgtd", "pcmpgtw", - "pdistib", - "pf2id", "pfacc", "pfadd", "pfcmpeq", "pfcmpge", "pfcmpgt", - "pfmax", "pfmin", "pfmul", "pfrcp", "pfrcpit1", "pfrcpit2", - "pfrsqit1", "pfrsqrt", "pfsub", "pfsubr", "pi2fd", - "pmachriw", "pmaddwd", "pmagw", "pmulhriw", "pmulhrwa", "pmulhrwc", - "pmulhw", "pmullw", "pmvgezb", "pmvlzb", "pmvnzb", - "pmvzb", "pop", "popa", "popad", "popaw", "popf", "popfd", - "popfw", "por", - "prefetch", "prefetchw", "pslld", "psllq", "psllw", "psrad", "psraw", - "psrld", "psrlq", "psrlw", "psubb", "psubd", "psubsb", - "psubsiw", "psubsw", "psubusb", "psubusw", "psubw", "punpckhbw", - "punpckhdq", "punpckhwd", "punpcklbw", "punpckldq", "punpcklwd", - "push", "pusha", "pushad", "pushaw", "pushf", "pushfd", - "pushfw", "pxor", "rcl", "rcr", "rdmsr", "rdpmc", "rdtsc", - "resb", "resd", "resq", "rest", "resw", "ret", "retf", "retn", - "rol", "ror", "rsm", "sahf", "sal", "salc", "sar", "sbb", - "scasb", "scasd", "scasw", "sgdt", "shl", "shld", "shr", "shrd", - "sidt", "sldt", "smi", "smsw", "stc", "std", "sti", "stosb", - "stosd", "stosw", "str", "sub", "test", "umov", "verr", "verw", - "wait", "wbinvd", "wrmsr", "xadd", "xbts", "xchg", "xlatb", - "xor" -}; - -static char *icn[] = { /* conditional instructions */ - "cmov", "j", "set" -}; - -static int ico[] = { /* and the corresponding opcodes */ - I_CMOVcc, I_Jcc, I_SETcc -}; - static char *conditions[] = { /* condition code names */ "a", "ae", "b", "be", "c", "e", "g", "ge", "l", "le", "na", "nae", "nb", "nbe", "nc", "ne", "ng", "nge", "nl", "nle", "no", "np", "ns", "nz", "o", "p", "pe", "po", "s", "z" }; + +/* Instruction names automatically generated from insns.dat */ +#include "insnsn.c" diff --git a/nasm.h b/nasm.h index aabe5687..3ea75f2e 100644 --- a/nasm.h +++ b/nasm.h @@ -426,67 +426,15 @@ enum { /* register names */ R_ST6, R_ST7, R_TR3, R_TR4, R_TR5, R_TR6, R_TR7, REG_ENUM_LIMIT }; -enum { /* instruction names */ - I_AAA, I_AAD, I_AAM, I_AAS, I_ADC, I_ADD, I_AND, I_ARPL, - I_BOUND, I_BSF, I_BSR, I_BSWAP, I_BT, I_BTC, I_BTR, I_BTS, - I_CALL, I_CBW, I_CDQ, I_CLC, I_CLD, I_CLI, I_CLTS, I_CMC, I_CMP, - I_CMPSB, I_CMPSD, I_CMPSW, I_CMPXCHG, I_CMPXCHG486, I_CMPXCHG8B, - I_CPUID, I_CWD, I_CWDE, I_DAA, I_DAS, I_DB, I_DD, I_DEC, I_DIV, - I_DQ, I_DT, I_DW, I_EMMS, I_ENTER, I_EQU, I_F2XM1, I_FABS, - I_FADD, I_FADDP, I_FBLD, I_FBSTP, I_FCHS, I_FCLEX, I_FCMOVB, - I_FCMOVBE, I_FCMOVE, I_FCMOVNB, I_FCMOVNBE, I_FCMOVNE, - I_FCMOVNU, I_FCMOVU, I_FCOM, I_FCOMI, I_FCOMIP, I_FCOMP, - I_FCOMPP, I_FCOS, I_FDECSTP, I_FDISI, I_FDIV, I_FDIVP, I_FDIVR, - I_FDIVRP, - I_FEMMS, - I_FENI, I_FFREE, I_FIADD, I_FICOM, I_FICOMP, I_FIDIV, - I_FIDIVR, I_FILD, I_FIMUL, I_FINCSTP, I_FINIT, I_FIST, I_FISTP, - I_FISUB, I_FISUBR, I_FLD, I_FLD1, I_FLDCW, I_FLDENV, I_FLDL2E, - I_FLDL2T, I_FLDLG2, I_FLDLN2, I_FLDPI, I_FLDZ, I_FMUL, I_FMULP, - I_FNCLEX, I_FNDISI, I_FNENI, I_FNINIT, I_FNOP, I_FNSAVE, - I_FNSTCW, I_FNSTENV, I_FNSTSW, I_FPATAN, I_FPREM, I_FPREM1, - I_FPTAN, I_FRNDINT, I_FRSTOR, I_FSAVE, I_FSCALE, I_FSETPM, - I_FSIN, I_FSINCOS, I_FSQRT, I_FST, I_FSTCW, I_FSTENV, I_FSTP, - I_FSTSW, I_FSUB, I_FSUBP, I_FSUBR, I_FSUBRP, I_FTST, I_FUCOM, - I_FUCOMI, I_FUCOMIP, I_FUCOMP, I_FUCOMPP, I_FXAM, I_FXCH, - I_FXTRACT, I_FYL2X, I_FYL2XP1, I_HLT, I_IBTS, I_ICEBP, I_IDIV, - I_IMUL, I_IN, I_INC, I_INCBIN, I_INSB, I_INSD, I_INSW, I_INT, - I_INT01, I_INT1, I_INT3, I_INTO, I_INVD, I_INVLPG, I_IRET, - I_IRETD, I_IRETW, I_JCXZ, I_JECXZ, I_JMP, I_LAHF, I_LAR, I_LDS, - I_LEA, I_LEAVE, I_LES, I_LFS, I_LGDT, I_LGS, I_LIDT, I_LLDT, - I_LMSW, I_LOADALL, I_LOADALL286, I_LODSB, I_LODSD, I_LODSW, - I_LOOP, I_LOOPE, I_LOOPNE, I_LOOPNZ, I_LOOPZ, I_LSL, I_LSS, - I_LTR, I_MOV, I_MOVD, I_MOVQ, I_MOVSB, I_MOVSD, I_MOVSW, - I_MOVSX, I_MOVZX, I_MUL, I_NEG, I_NOP, I_NOT, I_OR, I_OUT, - I_OUTSB, I_OUTSD, I_OUTSW, I_PACKSSDW, I_PACKSSWB, I_PACKUSWB, - I_PADDB, I_PADDD, I_PADDSB, I_PADDSIW, I_PADDSW, I_PADDUSB, - I_PADDUSW, I_PADDW, I_PAND, I_PANDN, I_PAVEB, - I_PAVGUSB, I_PCMPEQB, - I_PCMPEQD, I_PCMPEQW, I_PCMPGTB, I_PCMPGTD, I_PCMPGTW, - I_PDISTIB, - I_PF2ID, I_PFACC, I_PFADD, I_PFCMPEQ, I_PFCMPGE, I_PFCMPGT, - I_PFMAX, I_PFMIN, I_PFMUL, I_PFRCP, I_PFRCPIT1, I_PFRCPIT2, - I_PFRSQIT1, I_PFRSQRT, I_PFSUB, I_PFSUBR, I_PI2FD, - I_PMACHRIW, I_PMADDWD, I_PMAGW, I_PMULHRIW, I_PMULHRWA, - I_PMULHRWC, I_PMULHW, I_PMULLW, I_PMVGEZB, I_PMVLZB, I_PMVNZB, - I_PMVZB, I_POP, I_POPA, I_POPAD, I_POPAW, I_POPF, I_POPFD, - I_POPFW, I_POR, I_PREFETCH, I_PREFETCHW, - I_PSLLD, I_PSLLQ, I_PSLLW, I_PSRAD, I_PSRAW, - I_PSRLD, I_PSRLQ, I_PSRLW, I_PSUBB, I_PSUBD, I_PSUBSB, - I_PSUBSIW, I_PSUBSW, I_PSUBUSB, I_PSUBUSW, I_PSUBW, I_PUNPCKHBW, - I_PUNPCKHDQ, I_PUNPCKHWD, I_PUNPCKLBW, I_PUNPCKLDQ, I_PUNPCKLWD, - I_PUSH, I_PUSHA, I_PUSHAD, I_PUSHAW, I_PUSHF, I_PUSHFD, - I_PUSHFW, I_PXOR, I_RCL, I_RCR, I_RDMSR, I_RDPMC, I_RDTSC, - I_RESB, I_RESD, I_RESQ, I_REST, I_RESW, I_RET, I_RETF, I_RETN, - I_ROL, I_ROR, I_RSM, I_SAHF, I_SAL, I_SALC, I_SAR, I_SBB, - I_SCASB, I_SCASD, I_SCASW, I_SGDT, I_SHL, I_SHLD, I_SHR, I_SHRD, - I_SIDT, I_SLDT, I_SMI, I_SMSW, I_STC, I_STD, I_STI, I_STOSB, - I_STOSD, I_STOSW, I_STR, I_SUB, I_TEST, I_UMOV, I_VERR, I_VERW, - I_WAIT, I_WBINVD, I_WRMSR, I_XADD, I_XBTS, I_XCHG, I_XLATB, - I_XOR, I_CMOVcc, I_Jcc, I_SETcc -}; +/* Instruction names automatically generated from insns.dat */ +#include "insnsi.h" -#define MAX_KEYWORD 9 /* max length of any instruction, register name etc. */ +/* max length of any instruction, register name etc. */ +#if MAX_INSLEN > 9 +#define MAX_KEYWORD MAX_INSLEN +#else +#define MAX_KEYWORD 9 +#endif enum { /* condition code names */ C_A, C_AE, C_B, C_BE, C_C, C_E, C_G, C_GE, C_L, C_LE, C_NA, C_NAE,