From: Michael Urman Date: Mon, 21 May 2001 21:44:47 +0000 (-0000) Subject: Inserted /* @FOO@ */ markers for dynamic generation via gen_instr.pl. X-Git-Tag: v0.1.0~484 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2d861960374e6c540f356c19068d66d82a9c8f97;p=yasm Inserted /* @FOO@ */ markers for dynamic generation via gen_instr.pl. svn path=/trunk/yasm/; revision=27 --- diff --git a/modules/parsers/nasm/bison.y.in b/modules/parsers/nasm/bison.y.in index 2ebe4bcc..f852b1fa 100644 --- a/modules/parsers/nasm/bison.y.in +++ b/modules/parsers/nasm/bison.y.in @@ -1,4 +1,4 @@ -/* $Id: bison.y.in,v 1.4 2001/05/21 18:31:42 peter Exp $ +/* $Id: bison.y.in,v 1.5 2001/05/21 21:44:47 mu Exp $ * Main bison parser * * Copyright (C) 2001 Peter Johnson @@ -64,10 +64,10 @@ extern void yyerror(char *); %token START_SECTION_OFFSET ENTRY_POINT %token ID -/* TODO: dynamically generate instruction tokens: */ -%token INS_AAA INS_AAD INS_IDIV INS_IMUL INS_IN INS_LOOPZ INS_LSL +/* instruction tokens (dynamically generated) */ +/* @TOKENS@ */ -%type aaa aad idiv imul in loopz lsl +/* @TYPES@ */ %type line exp instr instrbase @@ -309,118 +309,6 @@ instr: instrbase | REPZ instr { $$ = $2; $$.data.insn.lockrep_pre = 0xF4; } ; -/* instructions */ -/* TODO: dynamically generate */ -instrbase: aaa - | aad - | idiv - | imul - | in - | loopz - | lsl -; - -aaa: INS_AAA { - BuildBC_Insn(&$$, 0, 1, 0x37, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } -; - -aad: INS_AAD { - BuildBC_Insn(&$$, 0, 2, 0xD5, 0x0A, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } - | INS_AAD imm8 { - BuildBC_Insn(&$$, 0, 1, 0xD5, 0, (effaddr *)NULL, 0, &$2, 1, 0, 0); - } -; - -idiv: INS_IDIV rm8x { - BuildBC_Insn(&$$, 0, 1, 0xF6, 0, &$2, 7, (immval *)NULL, 0, 0, 0); - } - | INS_IDIV rm16x { - BuildBC_Insn(&$$, 16, 1, 0xF7, 0, &$2, 7, (immval *)NULL, 0, 0, 0); - } - | INS_IDIV rm32x { - BuildBC_Insn(&$$, 32, 1, 0xF7, 0, &$2, 7, (immval *)NULL, 0, 0, 0); - } -; - -imul: INS_IMUL rm8x { - BuildBC_Insn(&$$, 0, 1, 0xF6, 0, &$2, 5, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL rm16x { - BuildBC_Insn(&$$, 16, 1, 0xF7, 0, &$2, 5, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL rm32x { - BuildBC_Insn(&$$, 32, 1, 0xF7, 0, &$2, 5, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL reg16 ',' rm16 { - BuildBC_Insn(&$$, 16, 2, 0x0F, 0xAF, &$4, $2, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL reg32 ',' rm32 { - BuildBC_Insn(&$$, 32, 2, 0x0F, 0xAF, &$4, $2, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL reg16 ',' rm16 ',' imm8x { - BuildBC_Insn(&$$, 16, 1, 0x6B, 0, &$4, $2, &$6, 1, 1, 0); - } - | INS_IMUL reg32 ',' rm32 ',' imm8x { - BuildBC_Insn(&$$, 32, 1, 0x6B, 0, &$4, $2, &$6, 1, 1, 0); - } - | INS_IMUL reg16 ',' rm16 ',' imm16 { - BuildBC_Insn(&$$, 16, 1, 0x69, 0, &$4, $2, &$6, 2, 1, 0); - } - | INS_IMUL reg32 ',' rm32 ',' imm32 { - BuildBC_Insn(&$$, 32, 1, 0x69, 0, &$4, $2, &$6, 4, 1, 0); - } - | INS_IMUL reg16 ',' imm8x { - BuildBC_Insn(&$$, 16, 1, 0x6B, 0, ConvertRegToEA((effaddr *)NULL, $2), $2, &$4, 1, 1, 0); - } - | INS_IMUL reg32 ',' imm8x { - BuildBC_Insn(&$$, 32, 1, 0x6B, 0, ConvertRegToEA((effaddr *)NULL, $2), $2, &$4, 1, 1, 0); - } - | INS_IMUL reg16 ',' imm16 { - BuildBC_Insn(&$$, 16, 1, 0x69, 0, ConvertRegToEA((effaddr *)NULL, $2), $2, &$4, 2, 1, 0); - } - | INS_IMUL reg32 ',' imm32 { - BuildBC_Insn(&$$, 32, 1, 0x69, 0, ConvertRegToEA((effaddr *)NULL, $2), $2, &$4, 4, 1, 0); - } -; - -in: INS_IN REG_AL ',' imm8 { - BuildBC_Insn(&$$, 0, 1, 0xE4, 0, (effaddr *)NULL, 0, &$4, 1, 0, 0); - } - | INS_IN REG_AX ',' imm8 { - BuildBC_Insn(&$$, 16, 1, 0xE5, 0, (effaddr *)NULL, 0, &$4, 1, 0, 0); - } - | INS_IN REG_EAX ',' imm8 { - BuildBC_Insn(&$$, 32, 1, 0xE5, 0, (effaddr *)NULL, 0, &$4, 1, 0, 0); - } - | INS_IN REG_AL ',' REG_DX { - BuildBC_Insn(&$$, 0, 1, 0xEC, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } - | INS_IN REG_AX ',' REG_DX { - BuildBC_Insn(&$$, 16, 1, 0xED, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } - | INS_IN REG_EAX ',' REG_DX { - BuildBC_Insn(&$$, 32, 1, 0xED, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } -; - -loopz: INS_LOOPZ imm1632 { - BuildBC_Insn(&$$, 0, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1); - } - | INS_LOOPZ imm1632 ',' REG_CX { - BuildBC_Insn(&$$, 16, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1); - } - | INS_LOOPZ imm1632 ',' REG_ECX { - BuildBC_Insn(&$$, 32, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1); - } -; - -lsl: INS_LSL reg16 ',' rm16 { - BuildBC_Insn(&$$, 16, 2, 0x0F, 0x03, &$4, $2, (immval *)NULL, 0, 0, 0); - } - | INS_LSL reg32 ',' rm32 { - BuildBC_Insn(&$$, 32, 2, 0x0F, 0x03, &$4, $2, (immval *)NULL, 0, 0, 0); - } -; +/* instruction grammars (dynamically generated) */ +/* @INSTRUCTIONS@ */ diff --git a/modules/parsers/nasm/nasm-bison.y b/modules/parsers/nasm/nasm-bison.y index f7576f1e..dcf37620 100644 --- a/modules/parsers/nasm/nasm-bison.y +++ b/modules/parsers/nasm/nasm-bison.y @@ -1,4 +1,4 @@ -/* $Id: nasm-bison.y,v 1.4 2001/05/21 18:31:42 peter Exp $ +/* $Id: nasm-bison.y,v 1.5 2001/05/21 21:44:47 mu Exp $ * Main bison parser * * Copyright (C) 2001 Peter Johnson @@ -64,10 +64,10 @@ extern void yyerror(char *); %token START_SECTION_OFFSET ENTRY_POINT %token ID -/* TODO: dynamically generate instruction tokens: */ -%token INS_AAA INS_AAD INS_IDIV INS_IMUL INS_IN INS_LOOPZ INS_LSL +/* instruction tokens (dynamically generated) */ +/* @TOKENS@ */ -%type aaa aad idiv imul in loopz lsl +/* @TYPES@ */ %type line exp instr instrbase @@ -309,118 +309,6 @@ instr: instrbase | REPZ instr { $$ = $2; $$.data.insn.lockrep_pre = 0xF4; } ; -/* instructions */ -/* TODO: dynamically generate */ -instrbase: aaa - | aad - | idiv - | imul - | in - | loopz - | lsl -; - -aaa: INS_AAA { - BuildBC_Insn(&$$, 0, 1, 0x37, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } -; - -aad: INS_AAD { - BuildBC_Insn(&$$, 0, 2, 0xD5, 0x0A, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } - | INS_AAD imm8 { - BuildBC_Insn(&$$, 0, 1, 0xD5, 0, (effaddr *)NULL, 0, &$2, 1, 0, 0); - } -; - -idiv: INS_IDIV rm8x { - BuildBC_Insn(&$$, 0, 1, 0xF6, 0, &$2, 7, (immval *)NULL, 0, 0, 0); - } - | INS_IDIV rm16x { - BuildBC_Insn(&$$, 16, 1, 0xF7, 0, &$2, 7, (immval *)NULL, 0, 0, 0); - } - | INS_IDIV rm32x { - BuildBC_Insn(&$$, 32, 1, 0xF7, 0, &$2, 7, (immval *)NULL, 0, 0, 0); - } -; - -imul: INS_IMUL rm8x { - BuildBC_Insn(&$$, 0, 1, 0xF6, 0, &$2, 5, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL rm16x { - BuildBC_Insn(&$$, 16, 1, 0xF7, 0, &$2, 5, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL rm32x { - BuildBC_Insn(&$$, 32, 1, 0xF7, 0, &$2, 5, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL reg16 ',' rm16 { - BuildBC_Insn(&$$, 16, 2, 0x0F, 0xAF, &$4, $2, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL reg32 ',' rm32 { - BuildBC_Insn(&$$, 32, 2, 0x0F, 0xAF, &$4, $2, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL reg16 ',' rm16 ',' imm8x { - BuildBC_Insn(&$$, 16, 1, 0x6B, 0, &$4, $2, &$6, 1, 1, 0); - } - | INS_IMUL reg32 ',' rm32 ',' imm8x { - BuildBC_Insn(&$$, 32, 1, 0x6B, 0, &$4, $2, &$6, 1, 1, 0); - } - | INS_IMUL reg16 ',' rm16 ',' imm16 { - BuildBC_Insn(&$$, 16, 1, 0x69, 0, &$4, $2, &$6, 2, 1, 0); - } - | INS_IMUL reg32 ',' rm32 ',' imm32 { - BuildBC_Insn(&$$, 32, 1, 0x69, 0, &$4, $2, &$6, 4, 1, 0); - } - | INS_IMUL reg16 ',' imm8x { - BuildBC_Insn(&$$, 16, 1, 0x6B, 0, ConvertRegToEA((effaddr *)NULL, $2), $2, &$4, 1, 1, 0); - } - | INS_IMUL reg32 ',' imm8x { - BuildBC_Insn(&$$, 32, 1, 0x6B, 0, ConvertRegToEA((effaddr *)NULL, $2), $2, &$4, 1, 1, 0); - } - | INS_IMUL reg16 ',' imm16 { - BuildBC_Insn(&$$, 16, 1, 0x69, 0, ConvertRegToEA((effaddr *)NULL, $2), $2, &$4, 2, 1, 0); - } - | INS_IMUL reg32 ',' imm32 { - BuildBC_Insn(&$$, 32, 1, 0x69, 0, ConvertRegToEA((effaddr *)NULL, $2), $2, &$4, 4, 1, 0); - } -; - -in: INS_IN REG_AL ',' imm8 { - BuildBC_Insn(&$$, 0, 1, 0xE4, 0, (effaddr *)NULL, 0, &$4, 1, 0, 0); - } - | INS_IN REG_AX ',' imm8 { - BuildBC_Insn(&$$, 16, 1, 0xE5, 0, (effaddr *)NULL, 0, &$4, 1, 0, 0); - } - | INS_IN REG_EAX ',' imm8 { - BuildBC_Insn(&$$, 32, 1, 0xE5, 0, (effaddr *)NULL, 0, &$4, 1, 0, 0); - } - | INS_IN REG_AL ',' REG_DX { - BuildBC_Insn(&$$, 0, 1, 0xEC, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } - | INS_IN REG_AX ',' REG_DX { - BuildBC_Insn(&$$, 16, 1, 0xED, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } - | INS_IN REG_EAX ',' REG_DX { - BuildBC_Insn(&$$, 32, 1, 0xED, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } -; - -loopz: INS_LOOPZ imm1632 { - BuildBC_Insn(&$$, 0, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1); - } - | INS_LOOPZ imm1632 ',' REG_CX { - BuildBC_Insn(&$$, 16, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1); - } - | INS_LOOPZ imm1632 ',' REG_ECX { - BuildBC_Insn(&$$, 32, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1); - } -; - -lsl: INS_LSL reg16 ',' rm16 { - BuildBC_Insn(&$$, 16, 2, 0x0F, 0x03, &$4, $2, (immval *)NULL, 0, 0, 0); - } - | INS_LSL reg32 ',' rm32 { - BuildBC_Insn(&$$, 32, 2, 0x0F, 0x03, &$4, $2, (immval *)NULL, 0, 0, 0); - } -; +/* instruction grammars (dynamically generated) */ +/* @INSTRUCTIONS@ */ diff --git a/modules/parsers/nasm/token.l.in b/modules/parsers/nasm/token.l.in index 0ab8de9d..47278dc4 100644 --- a/modules/parsers/nasm/token.l.in +++ b/modules/parsers/nasm/token.l.in @@ -1,4 +1,4 @@ -/* $Id: token.l.in,v 1.3 2001/05/20 08:39:48 peter Exp $ +/* $Id: token.l.in,v 1.4 2001/05/21 21:44:47 mu Exp $ * Main lexer * * Copyright (C) 2001 Peter Johnson @@ -236,15 +236,7 @@ gs { yylval.int_val = 5; return REG_GS; } } /* instructions */ - /* TODO: dynamically generate */ -aaa { return INS_AAA; } -aad { return INS_AAD; } -idiv { return INS_IDIV; } -imul { return INS_IMUL; } -in { return INS_IN; } -loope { return INS_LOOPZ; } -loopz { return INS_LOOPZ; } -lsl { return INS_LSL; } + /* @INSTRUCTIONS@ */ /* label */ [a-z_?][a-z0-9_$#@~.?]* { diff --git a/src/bison.y.in b/src/bison.y.in index 2ebe4bcc..f852b1fa 100644 --- a/src/bison.y.in +++ b/src/bison.y.in @@ -1,4 +1,4 @@ -/* $Id: bison.y.in,v 1.4 2001/05/21 18:31:42 peter Exp $ +/* $Id: bison.y.in,v 1.5 2001/05/21 21:44:47 mu Exp $ * Main bison parser * * Copyright (C) 2001 Peter Johnson @@ -64,10 +64,10 @@ extern void yyerror(char *); %token START_SECTION_OFFSET ENTRY_POINT %token ID -/* TODO: dynamically generate instruction tokens: */ -%token INS_AAA INS_AAD INS_IDIV INS_IMUL INS_IN INS_LOOPZ INS_LSL +/* instruction tokens (dynamically generated) */ +/* @TOKENS@ */ -%type aaa aad idiv imul in loopz lsl +/* @TYPES@ */ %type line exp instr instrbase @@ -309,118 +309,6 @@ instr: instrbase | REPZ instr { $$ = $2; $$.data.insn.lockrep_pre = 0xF4; } ; -/* instructions */ -/* TODO: dynamically generate */ -instrbase: aaa - | aad - | idiv - | imul - | in - | loopz - | lsl -; - -aaa: INS_AAA { - BuildBC_Insn(&$$, 0, 1, 0x37, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } -; - -aad: INS_AAD { - BuildBC_Insn(&$$, 0, 2, 0xD5, 0x0A, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } - | INS_AAD imm8 { - BuildBC_Insn(&$$, 0, 1, 0xD5, 0, (effaddr *)NULL, 0, &$2, 1, 0, 0); - } -; - -idiv: INS_IDIV rm8x { - BuildBC_Insn(&$$, 0, 1, 0xF6, 0, &$2, 7, (immval *)NULL, 0, 0, 0); - } - | INS_IDIV rm16x { - BuildBC_Insn(&$$, 16, 1, 0xF7, 0, &$2, 7, (immval *)NULL, 0, 0, 0); - } - | INS_IDIV rm32x { - BuildBC_Insn(&$$, 32, 1, 0xF7, 0, &$2, 7, (immval *)NULL, 0, 0, 0); - } -; - -imul: INS_IMUL rm8x { - BuildBC_Insn(&$$, 0, 1, 0xF6, 0, &$2, 5, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL rm16x { - BuildBC_Insn(&$$, 16, 1, 0xF7, 0, &$2, 5, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL rm32x { - BuildBC_Insn(&$$, 32, 1, 0xF7, 0, &$2, 5, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL reg16 ',' rm16 { - BuildBC_Insn(&$$, 16, 2, 0x0F, 0xAF, &$4, $2, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL reg32 ',' rm32 { - BuildBC_Insn(&$$, 32, 2, 0x0F, 0xAF, &$4, $2, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL reg16 ',' rm16 ',' imm8x { - BuildBC_Insn(&$$, 16, 1, 0x6B, 0, &$4, $2, &$6, 1, 1, 0); - } - | INS_IMUL reg32 ',' rm32 ',' imm8x { - BuildBC_Insn(&$$, 32, 1, 0x6B, 0, &$4, $2, &$6, 1, 1, 0); - } - | INS_IMUL reg16 ',' rm16 ',' imm16 { - BuildBC_Insn(&$$, 16, 1, 0x69, 0, &$4, $2, &$6, 2, 1, 0); - } - | INS_IMUL reg32 ',' rm32 ',' imm32 { - BuildBC_Insn(&$$, 32, 1, 0x69, 0, &$4, $2, &$6, 4, 1, 0); - } - | INS_IMUL reg16 ',' imm8x { - BuildBC_Insn(&$$, 16, 1, 0x6B, 0, ConvertRegToEA((effaddr *)NULL, $2), $2, &$4, 1, 1, 0); - } - | INS_IMUL reg32 ',' imm8x { - BuildBC_Insn(&$$, 32, 1, 0x6B, 0, ConvertRegToEA((effaddr *)NULL, $2), $2, &$4, 1, 1, 0); - } - | INS_IMUL reg16 ',' imm16 { - BuildBC_Insn(&$$, 16, 1, 0x69, 0, ConvertRegToEA((effaddr *)NULL, $2), $2, &$4, 2, 1, 0); - } - | INS_IMUL reg32 ',' imm32 { - BuildBC_Insn(&$$, 32, 1, 0x69, 0, ConvertRegToEA((effaddr *)NULL, $2), $2, &$4, 4, 1, 0); - } -; - -in: INS_IN REG_AL ',' imm8 { - BuildBC_Insn(&$$, 0, 1, 0xE4, 0, (effaddr *)NULL, 0, &$4, 1, 0, 0); - } - | INS_IN REG_AX ',' imm8 { - BuildBC_Insn(&$$, 16, 1, 0xE5, 0, (effaddr *)NULL, 0, &$4, 1, 0, 0); - } - | INS_IN REG_EAX ',' imm8 { - BuildBC_Insn(&$$, 32, 1, 0xE5, 0, (effaddr *)NULL, 0, &$4, 1, 0, 0); - } - | INS_IN REG_AL ',' REG_DX { - BuildBC_Insn(&$$, 0, 1, 0xEC, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } - | INS_IN REG_AX ',' REG_DX { - BuildBC_Insn(&$$, 16, 1, 0xED, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } - | INS_IN REG_EAX ',' REG_DX { - BuildBC_Insn(&$$, 32, 1, 0xED, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } -; - -loopz: INS_LOOPZ imm1632 { - BuildBC_Insn(&$$, 0, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1); - } - | INS_LOOPZ imm1632 ',' REG_CX { - BuildBC_Insn(&$$, 16, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1); - } - | INS_LOOPZ imm1632 ',' REG_ECX { - BuildBC_Insn(&$$, 32, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1); - } -; - -lsl: INS_LSL reg16 ',' rm16 { - BuildBC_Insn(&$$, 16, 2, 0x0F, 0x03, &$4, $2, (immval *)NULL, 0, 0, 0); - } - | INS_LSL reg32 ',' rm32 { - BuildBC_Insn(&$$, 32, 2, 0x0F, 0x03, &$4, $2, (immval *)NULL, 0, 0, 0); - } -; +/* instruction grammars (dynamically generated) */ +/* @INSTRUCTIONS@ */ diff --git a/src/parsers/nasm/bison.y.in b/src/parsers/nasm/bison.y.in index 2ebe4bcc..f852b1fa 100644 --- a/src/parsers/nasm/bison.y.in +++ b/src/parsers/nasm/bison.y.in @@ -1,4 +1,4 @@ -/* $Id: bison.y.in,v 1.4 2001/05/21 18:31:42 peter Exp $ +/* $Id: bison.y.in,v 1.5 2001/05/21 21:44:47 mu Exp $ * Main bison parser * * Copyright (C) 2001 Peter Johnson @@ -64,10 +64,10 @@ extern void yyerror(char *); %token START_SECTION_OFFSET ENTRY_POINT %token ID -/* TODO: dynamically generate instruction tokens: */ -%token INS_AAA INS_AAD INS_IDIV INS_IMUL INS_IN INS_LOOPZ INS_LSL +/* instruction tokens (dynamically generated) */ +/* @TOKENS@ */ -%type aaa aad idiv imul in loopz lsl +/* @TYPES@ */ %type line exp instr instrbase @@ -309,118 +309,6 @@ instr: instrbase | REPZ instr { $$ = $2; $$.data.insn.lockrep_pre = 0xF4; } ; -/* instructions */ -/* TODO: dynamically generate */ -instrbase: aaa - | aad - | idiv - | imul - | in - | loopz - | lsl -; - -aaa: INS_AAA { - BuildBC_Insn(&$$, 0, 1, 0x37, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } -; - -aad: INS_AAD { - BuildBC_Insn(&$$, 0, 2, 0xD5, 0x0A, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } - | INS_AAD imm8 { - BuildBC_Insn(&$$, 0, 1, 0xD5, 0, (effaddr *)NULL, 0, &$2, 1, 0, 0); - } -; - -idiv: INS_IDIV rm8x { - BuildBC_Insn(&$$, 0, 1, 0xF6, 0, &$2, 7, (immval *)NULL, 0, 0, 0); - } - | INS_IDIV rm16x { - BuildBC_Insn(&$$, 16, 1, 0xF7, 0, &$2, 7, (immval *)NULL, 0, 0, 0); - } - | INS_IDIV rm32x { - BuildBC_Insn(&$$, 32, 1, 0xF7, 0, &$2, 7, (immval *)NULL, 0, 0, 0); - } -; - -imul: INS_IMUL rm8x { - BuildBC_Insn(&$$, 0, 1, 0xF6, 0, &$2, 5, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL rm16x { - BuildBC_Insn(&$$, 16, 1, 0xF7, 0, &$2, 5, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL rm32x { - BuildBC_Insn(&$$, 32, 1, 0xF7, 0, &$2, 5, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL reg16 ',' rm16 { - BuildBC_Insn(&$$, 16, 2, 0x0F, 0xAF, &$4, $2, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL reg32 ',' rm32 { - BuildBC_Insn(&$$, 32, 2, 0x0F, 0xAF, &$4, $2, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL reg16 ',' rm16 ',' imm8x { - BuildBC_Insn(&$$, 16, 1, 0x6B, 0, &$4, $2, &$6, 1, 1, 0); - } - | INS_IMUL reg32 ',' rm32 ',' imm8x { - BuildBC_Insn(&$$, 32, 1, 0x6B, 0, &$4, $2, &$6, 1, 1, 0); - } - | INS_IMUL reg16 ',' rm16 ',' imm16 { - BuildBC_Insn(&$$, 16, 1, 0x69, 0, &$4, $2, &$6, 2, 1, 0); - } - | INS_IMUL reg32 ',' rm32 ',' imm32 { - BuildBC_Insn(&$$, 32, 1, 0x69, 0, &$4, $2, &$6, 4, 1, 0); - } - | INS_IMUL reg16 ',' imm8x { - BuildBC_Insn(&$$, 16, 1, 0x6B, 0, ConvertRegToEA((effaddr *)NULL, $2), $2, &$4, 1, 1, 0); - } - | INS_IMUL reg32 ',' imm8x { - BuildBC_Insn(&$$, 32, 1, 0x6B, 0, ConvertRegToEA((effaddr *)NULL, $2), $2, &$4, 1, 1, 0); - } - | INS_IMUL reg16 ',' imm16 { - BuildBC_Insn(&$$, 16, 1, 0x69, 0, ConvertRegToEA((effaddr *)NULL, $2), $2, &$4, 2, 1, 0); - } - | INS_IMUL reg32 ',' imm32 { - BuildBC_Insn(&$$, 32, 1, 0x69, 0, ConvertRegToEA((effaddr *)NULL, $2), $2, &$4, 4, 1, 0); - } -; - -in: INS_IN REG_AL ',' imm8 { - BuildBC_Insn(&$$, 0, 1, 0xE4, 0, (effaddr *)NULL, 0, &$4, 1, 0, 0); - } - | INS_IN REG_AX ',' imm8 { - BuildBC_Insn(&$$, 16, 1, 0xE5, 0, (effaddr *)NULL, 0, &$4, 1, 0, 0); - } - | INS_IN REG_EAX ',' imm8 { - BuildBC_Insn(&$$, 32, 1, 0xE5, 0, (effaddr *)NULL, 0, &$4, 1, 0, 0); - } - | INS_IN REG_AL ',' REG_DX { - BuildBC_Insn(&$$, 0, 1, 0xEC, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } - | INS_IN REG_AX ',' REG_DX { - BuildBC_Insn(&$$, 16, 1, 0xED, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } - | INS_IN REG_EAX ',' REG_DX { - BuildBC_Insn(&$$, 32, 1, 0xED, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } -; - -loopz: INS_LOOPZ imm1632 { - BuildBC_Insn(&$$, 0, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1); - } - | INS_LOOPZ imm1632 ',' REG_CX { - BuildBC_Insn(&$$, 16, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1); - } - | INS_LOOPZ imm1632 ',' REG_ECX { - BuildBC_Insn(&$$, 32, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1); - } -; - -lsl: INS_LSL reg16 ',' rm16 { - BuildBC_Insn(&$$, 16, 2, 0x0F, 0x03, &$4, $2, (immval *)NULL, 0, 0, 0); - } - | INS_LSL reg32 ',' rm32 { - BuildBC_Insn(&$$, 32, 2, 0x0F, 0x03, &$4, $2, (immval *)NULL, 0, 0, 0); - } -; +/* instruction grammars (dynamically generated) */ +/* @INSTRUCTIONS@ */ diff --git a/src/parsers/nasm/nasm-bison.y b/src/parsers/nasm/nasm-bison.y index f7576f1e..dcf37620 100644 --- a/src/parsers/nasm/nasm-bison.y +++ b/src/parsers/nasm/nasm-bison.y @@ -1,4 +1,4 @@ -/* $Id: nasm-bison.y,v 1.4 2001/05/21 18:31:42 peter Exp $ +/* $Id: nasm-bison.y,v 1.5 2001/05/21 21:44:47 mu Exp $ * Main bison parser * * Copyright (C) 2001 Peter Johnson @@ -64,10 +64,10 @@ extern void yyerror(char *); %token START_SECTION_OFFSET ENTRY_POINT %token ID -/* TODO: dynamically generate instruction tokens: */ -%token INS_AAA INS_AAD INS_IDIV INS_IMUL INS_IN INS_LOOPZ INS_LSL +/* instruction tokens (dynamically generated) */ +/* @TOKENS@ */ -%type aaa aad idiv imul in loopz lsl +/* @TYPES@ */ %type line exp instr instrbase @@ -309,118 +309,6 @@ instr: instrbase | REPZ instr { $$ = $2; $$.data.insn.lockrep_pre = 0xF4; } ; -/* instructions */ -/* TODO: dynamically generate */ -instrbase: aaa - | aad - | idiv - | imul - | in - | loopz - | lsl -; - -aaa: INS_AAA { - BuildBC_Insn(&$$, 0, 1, 0x37, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } -; - -aad: INS_AAD { - BuildBC_Insn(&$$, 0, 2, 0xD5, 0x0A, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } - | INS_AAD imm8 { - BuildBC_Insn(&$$, 0, 1, 0xD5, 0, (effaddr *)NULL, 0, &$2, 1, 0, 0); - } -; - -idiv: INS_IDIV rm8x { - BuildBC_Insn(&$$, 0, 1, 0xF6, 0, &$2, 7, (immval *)NULL, 0, 0, 0); - } - | INS_IDIV rm16x { - BuildBC_Insn(&$$, 16, 1, 0xF7, 0, &$2, 7, (immval *)NULL, 0, 0, 0); - } - | INS_IDIV rm32x { - BuildBC_Insn(&$$, 32, 1, 0xF7, 0, &$2, 7, (immval *)NULL, 0, 0, 0); - } -; - -imul: INS_IMUL rm8x { - BuildBC_Insn(&$$, 0, 1, 0xF6, 0, &$2, 5, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL rm16x { - BuildBC_Insn(&$$, 16, 1, 0xF7, 0, &$2, 5, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL rm32x { - BuildBC_Insn(&$$, 32, 1, 0xF7, 0, &$2, 5, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL reg16 ',' rm16 { - BuildBC_Insn(&$$, 16, 2, 0x0F, 0xAF, &$4, $2, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL reg32 ',' rm32 { - BuildBC_Insn(&$$, 32, 2, 0x0F, 0xAF, &$4, $2, (immval *)NULL, 0, 0, 0); - } - | INS_IMUL reg16 ',' rm16 ',' imm8x { - BuildBC_Insn(&$$, 16, 1, 0x6B, 0, &$4, $2, &$6, 1, 1, 0); - } - | INS_IMUL reg32 ',' rm32 ',' imm8x { - BuildBC_Insn(&$$, 32, 1, 0x6B, 0, &$4, $2, &$6, 1, 1, 0); - } - | INS_IMUL reg16 ',' rm16 ',' imm16 { - BuildBC_Insn(&$$, 16, 1, 0x69, 0, &$4, $2, &$6, 2, 1, 0); - } - | INS_IMUL reg32 ',' rm32 ',' imm32 { - BuildBC_Insn(&$$, 32, 1, 0x69, 0, &$4, $2, &$6, 4, 1, 0); - } - | INS_IMUL reg16 ',' imm8x { - BuildBC_Insn(&$$, 16, 1, 0x6B, 0, ConvertRegToEA((effaddr *)NULL, $2), $2, &$4, 1, 1, 0); - } - | INS_IMUL reg32 ',' imm8x { - BuildBC_Insn(&$$, 32, 1, 0x6B, 0, ConvertRegToEA((effaddr *)NULL, $2), $2, &$4, 1, 1, 0); - } - | INS_IMUL reg16 ',' imm16 { - BuildBC_Insn(&$$, 16, 1, 0x69, 0, ConvertRegToEA((effaddr *)NULL, $2), $2, &$4, 2, 1, 0); - } - | INS_IMUL reg32 ',' imm32 { - BuildBC_Insn(&$$, 32, 1, 0x69, 0, ConvertRegToEA((effaddr *)NULL, $2), $2, &$4, 4, 1, 0); - } -; - -in: INS_IN REG_AL ',' imm8 { - BuildBC_Insn(&$$, 0, 1, 0xE4, 0, (effaddr *)NULL, 0, &$4, 1, 0, 0); - } - | INS_IN REG_AX ',' imm8 { - BuildBC_Insn(&$$, 16, 1, 0xE5, 0, (effaddr *)NULL, 0, &$4, 1, 0, 0); - } - | INS_IN REG_EAX ',' imm8 { - BuildBC_Insn(&$$, 32, 1, 0xE5, 0, (effaddr *)NULL, 0, &$4, 1, 0, 0); - } - | INS_IN REG_AL ',' REG_DX { - BuildBC_Insn(&$$, 0, 1, 0xEC, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } - | INS_IN REG_AX ',' REG_DX { - BuildBC_Insn(&$$, 16, 1, 0xED, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } - | INS_IN REG_EAX ',' REG_DX { - BuildBC_Insn(&$$, 32, 1, 0xED, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0); - } -; - -loopz: INS_LOOPZ imm1632 { - BuildBC_Insn(&$$, 0, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1); - } - | INS_LOOPZ imm1632 ',' REG_CX { - BuildBC_Insn(&$$, 16, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1); - } - | INS_LOOPZ imm1632 ',' REG_ECX { - BuildBC_Insn(&$$, 32, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1); - } -; - -lsl: INS_LSL reg16 ',' rm16 { - BuildBC_Insn(&$$, 16, 2, 0x0F, 0x03, &$4, $2, (immval *)NULL, 0, 0, 0); - } - | INS_LSL reg32 ',' rm32 { - BuildBC_Insn(&$$, 32, 2, 0x0F, 0x03, &$4, $2, (immval *)NULL, 0, 0, 0); - } -; +/* instruction grammars (dynamically generated) */ +/* @INSTRUCTIONS@ */ diff --git a/src/parsers/nasm/token.l.in b/src/parsers/nasm/token.l.in index 0ab8de9d..47278dc4 100644 --- a/src/parsers/nasm/token.l.in +++ b/src/parsers/nasm/token.l.in @@ -1,4 +1,4 @@ -/* $Id: token.l.in,v 1.3 2001/05/20 08:39:48 peter Exp $ +/* $Id: token.l.in,v 1.4 2001/05/21 21:44:47 mu Exp $ * Main lexer * * Copyright (C) 2001 Peter Johnson @@ -236,15 +236,7 @@ gs { yylval.int_val = 5; return REG_GS; } } /* instructions */ - /* TODO: dynamically generate */ -aaa { return INS_AAA; } -aad { return INS_AAD; } -idiv { return INS_IDIV; } -imul { return INS_IMUL; } -in { return INS_IN; } -loope { return INS_LOOPZ; } -loopz { return INS_LOOPZ; } -lsl { return INS_LSL; } + /* @INSTRUCTIONS@ */ /* label */ [a-z_?][a-z0-9_$#@~.?]* { diff --git a/src/token.l.in b/src/token.l.in index 0ab8de9d..47278dc4 100644 --- a/src/token.l.in +++ b/src/token.l.in @@ -1,4 +1,4 @@ -/* $Id: token.l.in,v 1.3 2001/05/20 08:39:48 peter Exp $ +/* $Id: token.l.in,v 1.4 2001/05/21 21:44:47 mu Exp $ * Main lexer * * Copyright (C) 2001 Peter Johnson @@ -236,15 +236,7 @@ gs { yylval.int_val = 5; return REG_GS; } } /* instructions */ - /* TODO: dynamically generate */ -aaa { return INS_AAA; } -aad { return INS_AAD; } -idiv { return INS_IDIV; } -imul { return INS_IMUL; } -in { return INS_IN; } -loope { return INS_LOOPZ; } -loopz { return INS_LOOPZ; } -lsl { return INS_LSL; } + /* @INSTRUCTIONS@ */ /* label */ [a-z_?][a-z0-9_$#@~.?]* {