-/* $Id: bytecode.h,v 1.1 2001/05/15 05:28:06 peter Exp $
+/* $Id: bytecode.h,v 1.2 2001/05/18 21:42:31 peter Exp $
* Bytecode utility functions header file
*
* Copyright (C) 2001 Peter Johnson
typedef struct immval_s {
unsigned long val;
- unsigned char len; /* length of val (in bytes) */
+ unsigned char len; /* length of val (in bytes), 0 if none */
+ unsigned char isrel;
+ unsigned char isneg; /* the value has been explicitly negated */
} immval;
-typedef struct relval_s {
- unsigned long val;
- unsigned char len; /* length of val (in bytes) */
-} relval;
-
typedef struct bytecode_s {
struct bytecode_s *next;
union {
struct {
effaddr ea; /* effective address */
- union {
- immval im; /* immediate value */
- relval rel;
- } imm;
+
+ immval imm; /* immediate or relative value */
+ unsigned char f_len_imm; /* final imm length */
+ unsigned char f_rel_imm; /* 1 if final imm should be rel */
+ unsigned char f_sign_imm; /* 1 if final imm should be signed */
+
unsigned char opcode[2]; /* opcode */
unsigned char opcode_len;
+
unsigned char opersize; /* 0 indicates no override */
unsigned char lockrep_pre; /* 0 indicates no prefix */
- unsigned char isrel;
} insn;
struct {
unsigned char *data;
immval *ConvertIntToImm(immval *ptr, unsigned long int_val);
-relval *ConvertImmToRel(relval *ptr, immval *im_ptr,
- unsigned char rel_forcelen);
-
void BuildBC_Insn(bytecode *bc, unsigned char opersize,
unsigned char opcode_len, unsigned char op0, unsigned char op1,
effaddr *ea_ptr, unsigned char spare, immval *im_ptr,
- unsigned char im_forcelen);
-
-void BuildBC_Insn_Rel(bytecode *bc, unsigned char opersize,
- unsigned char opcode_len, unsigned char op0, unsigned char op1,
- effaddr *ea_ptr, unsigned char spare, relval *rel_ptr);
+ unsigned char im_len, unsigned char im_sign, unsigned char im_rel);
unsigned char *ConvertBCInsnToBytes(unsigned char *ptr, bytecode *bc, int *len);
-/* $Id: bytecode.c,v 1.1 2001/05/15 05:23:23 peter Exp $
+/* $Id: bytecode.c,v 1.2 2001/05/18 21:42:32 peter Exp $
* Bytecode utility functions
*
* Copyright (C) 2001 Peter Johnson
#include "globals.h"
#include "bytecode.h"
-static void buildbc_insn_common(bytecode *bc, unsigned char opersize,
- unsigned char opcode_len, unsigned char op0, unsigned char op1,
- effaddr *ea_ptr, unsigned char spare);
-
static effaddr eff_static;
static immval im_static;
-static relval rel_static;
unsigned char bytes_static[16];
/* FIXME: converting int to EA, but we don't know addrsize yet?
else
ptr->len = 4;
- return ptr;
-}
-
-/* FIXME: This actually doesn't do anything useful yet :) */
-relval *ConvertImmToRel(relval *ptr, immval *im_ptr,
- unsigned char rel_forcelen)
-{
- if(!ptr)
- ptr = &rel_static;
-
- if(im_ptr) {
- ptr->val = im_ptr->val;
- ptr->len = im_ptr->len;
- } else {
- ptr->len = 0;
- }
+ ptr->isrel = 0;
+ ptr->isneg = 0;
return ptr;
}
-static void buildbc_insn_common(bytecode *bc, unsigned char opersize,
+void BuildBC_Insn(bytecode *bc, unsigned char opersize,
unsigned char opcode_len, unsigned char op0, unsigned char op1,
- effaddr *ea_ptr, unsigned char spare)
+ effaddr *ea_ptr, unsigned char spare, immval *im_ptr,
+ unsigned char im_len, unsigned char im_sign, unsigned char im_rel)
{
bc->next = (bytecode *)NULL;
bc->type = BC_INSN;
bc->data.insn.ea.need_sib = 0;
}
+ if(im_ptr) {
+ bc->data.insn.imm = *im_ptr;
+ } else {
+ bc->data.insn.imm.len = 0;
+ }
+ bc->data.insn.f_rel_imm = im_rel;
+ bc->data.insn.f_sign_imm = im_sign;
+ bc->data.insn.f_len_imm = im_len;
+
bc->data.insn.opcode[0] = op0;
bc->data.insn.opcode[1] = op1;
bc->data.insn.opcode_len = opcode_len;
bc->mode_bits = mode_bits;
}
-
-void BuildBC_Insn(bytecode *bc, unsigned char opersize,
- unsigned char opcode_len, unsigned char op0, unsigned char op1,
- effaddr *ea_ptr, unsigned char spare, immval *im_ptr,
- unsigned char im_forcelen)
-{
- buildbc_insn_common(bc, opersize, opcode_len, op0, op1, ea_ptr, spare);
-
- if(im_ptr) {
- bc->data.insn.imm.im = *im_ptr;
- bc->data.insn.imm.im.len = im_forcelen; /* TODO: Add Warning */
- } else {
- bc->data.insn.imm.im.len = 0;
- }
- bc->data.insn.isrel = 0;
-}
-
-void BuildBC_Insn_Rel(bytecode *bc, unsigned char opersize,
- unsigned char opcode_len, unsigned char op0, unsigned char op1,
- effaddr *ea_ptr, unsigned char spare, relval *rel_ptr)
-{
- buildbc_insn_common(bc, opersize, opcode_len, op0, op1, ea_ptr, spare);
-
- if(rel_ptr) {
- bc->data.insn.imm.rel = *rel_ptr;
- } else {
- bc->data.insn.imm.rel.len = 0;
- }
- bc->data.insn.isrel = 1;
-}
-
/* TODO: implement. Shouldn't be difficult. */
unsigned char *ConvertBCInsnToBytes(unsigned char *ptr, bytecode *bc, int *len)
{
(unsigned int)bc->data.insn.ea.modrm,
(unsigned int)bc->data.insn.ea.sib,
(unsigned int)bc->data.insn.ea.need_sib);
- if(bc->data.insn.isrel) {
- printf("Relative Offset:\n");
- printf(" Val=%lx Len=%u\n", bc->data.insn.imm.rel.val,
- (unsigned int)bc->data.insn.imm.rel.len);
- } else {
- printf("Immediate Value:\n");
- printf(" Val=%lx Len=%u\n", bc->data.insn.imm.im.val,
- (unsigned int)bc->data.insn.imm.im.len);
- }
+ printf("Immediate/Relative Value:\n");
+ printf(" Val=%lx Len=%u, IsRel=%u\n", bc->data.insn.imm.val,
+ (unsigned int)bc->data.insn.imm.len,
+ (unsigned int)bc->data.insn.imm.isrel);
+ printf(" FLen=%u, FRel=%u, FSign=%u\n",
+ (unsigned int)bc->data.insn.f_len_imm,
+ (unsigned int)bc->data.insn.f_rel_imm,
+ (unsigned int)bc->data.insn.f_sign_imm);
printf("Opcode: %2x %2x OpLen=%u\n",
(unsigned int)bc->data.insn.opcode[0],
(unsigned int)bc->data.insn.opcode[1],
-/* $Id: bytecode.h,v 1.1 2001/05/15 05:28:06 peter Exp $
+/* $Id: bytecode.h,v 1.2 2001/05/18 21:42:31 peter Exp $
* Bytecode utility functions header file
*
* Copyright (C) 2001 Peter Johnson
typedef struct immval_s {
unsigned long val;
- unsigned char len; /* length of val (in bytes) */
+ unsigned char len; /* length of val (in bytes), 0 if none */
+ unsigned char isrel;
+ unsigned char isneg; /* the value has been explicitly negated */
} immval;
-typedef struct relval_s {
- unsigned long val;
- unsigned char len; /* length of val (in bytes) */
-} relval;
-
typedef struct bytecode_s {
struct bytecode_s *next;
union {
struct {
effaddr ea; /* effective address */
- union {
- immval im; /* immediate value */
- relval rel;
- } imm;
+
+ immval imm; /* immediate or relative value */
+ unsigned char f_len_imm; /* final imm length */
+ unsigned char f_rel_imm; /* 1 if final imm should be rel */
+ unsigned char f_sign_imm; /* 1 if final imm should be signed */
+
unsigned char opcode[2]; /* opcode */
unsigned char opcode_len;
+
unsigned char opersize; /* 0 indicates no override */
unsigned char lockrep_pre; /* 0 indicates no prefix */
- unsigned char isrel;
} insn;
struct {
unsigned char *data;
immval *ConvertIntToImm(immval *ptr, unsigned long int_val);
-relval *ConvertImmToRel(relval *ptr, immval *im_ptr,
- unsigned char rel_forcelen);
-
void BuildBC_Insn(bytecode *bc, unsigned char opersize,
unsigned char opcode_len, unsigned char op0, unsigned char op1,
effaddr *ea_ptr, unsigned char spare, immval *im_ptr,
- unsigned char im_forcelen);
-
-void BuildBC_Insn_Rel(bytecode *bc, unsigned char opersize,
- unsigned char opcode_len, unsigned char op0, unsigned char op1,
- effaddr *ea_ptr, unsigned char spare, relval *rel_ptr);
+ unsigned char im_len, unsigned char im_sign, unsigned char im_rel);
unsigned char *ConvertBCInsnToBytes(unsigned char *ptr, bytecode *bc, int *len);
-/* $Id: bison.y.in,v 1.1 2001/05/15 05:20:39 peter Exp $
+/* $Id: bison.y.in,v 1.2 2001/05/18 21:42:31 peter Exp $
* Main bison parser
*
* Copyright (C) 2001 Peter Johnson
;
aaa: INS_AAA {
- BuildBC_Insn(&$$, 0, 1, 0x37, 0, (effaddr *)NULL, 0, (immval *)NULL, 0);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ BuildBC_Insn(&$$, 32, 1, 0xED, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0);
}
;
loopz: INS_LOOPZ imm1632 {
- BuildBC_Insn_Rel(&$$, 0, 1, 0xE1, 0, (effaddr *)NULL, 0, ConvertImmToRel((relval *)NULL, &$2, 1));
+ BuildBC_Insn(&$$, 0, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1);
}
| INS_LOOPZ imm1632 ',' REG_CX {
- BuildBC_Insn_Rel(&$$, 16, 1, 0xE1, 0, (effaddr *)NULL, 0, ConvertImmToRel((relval *)NULL, &$2, 1));
+ BuildBC_Insn(&$$, 16, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1);
}
| INS_LOOPZ imm1632 ',' REG_ECX {
- BuildBC_Insn_Rel(&$$, 32, 1, 0xE1, 0, (effaddr *)NULL, 0, ConvertImmToRel((relval *)NULL, &$2, 1));
+ 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);
+ 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);
+ BuildBC_Insn(&$$, 32, 2, 0x0F, 0x03, &$4, $2, (immval *)NULL, 0, 0, 0);
}
;
-/* $Id: nasm-bison.y,v 1.1 2001/05/15 05:20:39 peter Exp $
+/* $Id: nasm-bison.y,v 1.2 2001/05/18 21:42:31 peter Exp $
* Main bison parser
*
* Copyright (C) 2001 Peter Johnson
;
aaa: INS_AAA {
- BuildBC_Insn(&$$, 0, 1, 0x37, 0, (effaddr *)NULL, 0, (immval *)NULL, 0);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ BuildBC_Insn(&$$, 32, 1, 0xED, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0);
}
;
loopz: INS_LOOPZ imm1632 {
- BuildBC_Insn_Rel(&$$, 0, 1, 0xE1, 0, (effaddr *)NULL, 0, ConvertImmToRel((relval *)NULL, &$2, 1));
+ BuildBC_Insn(&$$, 0, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1);
}
| INS_LOOPZ imm1632 ',' REG_CX {
- BuildBC_Insn_Rel(&$$, 16, 1, 0xE1, 0, (effaddr *)NULL, 0, ConvertImmToRel((relval *)NULL, &$2, 1));
+ BuildBC_Insn(&$$, 16, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1);
}
| INS_LOOPZ imm1632 ',' REG_ECX {
- BuildBC_Insn_Rel(&$$, 32, 1, 0xE1, 0, (effaddr *)NULL, 0, ConvertImmToRel((relval *)NULL, &$2, 1));
+ 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);
+ 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);
+ BuildBC_Insn(&$$, 32, 2, 0x0F, 0x03, &$4, $2, (immval *)NULL, 0, 0, 0);
}
;
-/* $Id: bison.y,v 1.1 2001/05/15 05:20:39 peter Exp $
+/* $Id: bison.y,v 1.2 2001/05/18 21:42:31 peter Exp $
* Main bison parser
*
* Copyright (C) 2001 Peter Johnson
;
aaa: INS_AAA {
- BuildBC_Insn(&$$, 0, 1, 0x37, 0, (effaddr *)NULL, 0, (immval *)NULL, 0);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ BuildBC_Insn(&$$, 32, 1, 0xED, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0);
}
;
loopz: INS_LOOPZ imm1632 {
- BuildBC_Insn_Rel(&$$, 0, 1, 0xE1, 0, (effaddr *)NULL, 0, ConvertImmToRel((relval *)NULL, &$2, 1));
+ BuildBC_Insn(&$$, 0, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1);
}
| INS_LOOPZ imm1632 ',' REG_CX {
- BuildBC_Insn_Rel(&$$, 16, 1, 0xE1, 0, (effaddr *)NULL, 0, ConvertImmToRel((relval *)NULL, &$2, 1));
+ BuildBC_Insn(&$$, 16, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1);
}
| INS_LOOPZ imm1632 ',' REG_ECX {
- BuildBC_Insn_Rel(&$$, 32, 1, 0xE1, 0, (effaddr *)NULL, 0, ConvertImmToRel((relval *)NULL, &$2, 1));
+ 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);
+ 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);
+ BuildBC_Insn(&$$, 32, 2, 0x0F, 0x03, &$4, $2, (immval *)NULL, 0, 0, 0);
}
;
-/* $Id: bison.y.in,v 1.1 2001/05/15 05:20:39 peter Exp $
+/* $Id: bison.y.in,v 1.2 2001/05/18 21:42:31 peter Exp $
* Main bison parser
*
* Copyright (C) 2001 Peter Johnson
;
aaa: INS_AAA {
- BuildBC_Insn(&$$, 0, 1, 0x37, 0, (effaddr *)NULL, 0, (immval *)NULL, 0);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ BuildBC_Insn(&$$, 32, 1, 0xED, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0);
}
;
loopz: INS_LOOPZ imm1632 {
- BuildBC_Insn_Rel(&$$, 0, 1, 0xE1, 0, (effaddr *)NULL, 0, ConvertImmToRel((relval *)NULL, &$2, 1));
+ BuildBC_Insn(&$$, 0, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1);
}
| INS_LOOPZ imm1632 ',' REG_CX {
- BuildBC_Insn_Rel(&$$, 16, 1, 0xE1, 0, (effaddr *)NULL, 0, ConvertImmToRel((relval *)NULL, &$2, 1));
+ BuildBC_Insn(&$$, 16, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1);
}
| INS_LOOPZ imm1632 ',' REG_ECX {
- BuildBC_Insn_Rel(&$$, 32, 1, 0xE1, 0, (effaddr *)NULL, 0, ConvertImmToRel((relval *)NULL, &$2, 1));
+ 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);
+ 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);
+ BuildBC_Insn(&$$, 32, 2, 0x0F, 0x03, &$4, $2, (immval *)NULL, 0, 0, 0);
}
;
-/* $Id: bytecode.c,v 1.1 2001/05/15 05:23:23 peter Exp $
+/* $Id: bytecode.c,v 1.2 2001/05/18 21:42:32 peter Exp $
* Bytecode utility functions
*
* Copyright (C) 2001 Peter Johnson
#include "globals.h"
#include "bytecode.h"
-static void buildbc_insn_common(bytecode *bc, unsigned char opersize,
- unsigned char opcode_len, unsigned char op0, unsigned char op1,
- effaddr *ea_ptr, unsigned char spare);
-
static effaddr eff_static;
static immval im_static;
-static relval rel_static;
unsigned char bytes_static[16];
/* FIXME: converting int to EA, but we don't know addrsize yet?
else
ptr->len = 4;
- return ptr;
-}
-
-/* FIXME: This actually doesn't do anything useful yet :) */
-relval *ConvertImmToRel(relval *ptr, immval *im_ptr,
- unsigned char rel_forcelen)
-{
- if(!ptr)
- ptr = &rel_static;
-
- if(im_ptr) {
- ptr->val = im_ptr->val;
- ptr->len = im_ptr->len;
- } else {
- ptr->len = 0;
- }
+ ptr->isrel = 0;
+ ptr->isneg = 0;
return ptr;
}
-static void buildbc_insn_common(bytecode *bc, unsigned char opersize,
+void BuildBC_Insn(bytecode *bc, unsigned char opersize,
unsigned char opcode_len, unsigned char op0, unsigned char op1,
- effaddr *ea_ptr, unsigned char spare)
+ effaddr *ea_ptr, unsigned char spare, immval *im_ptr,
+ unsigned char im_len, unsigned char im_sign, unsigned char im_rel)
{
bc->next = (bytecode *)NULL;
bc->type = BC_INSN;
bc->data.insn.ea.need_sib = 0;
}
+ if(im_ptr) {
+ bc->data.insn.imm = *im_ptr;
+ } else {
+ bc->data.insn.imm.len = 0;
+ }
+ bc->data.insn.f_rel_imm = im_rel;
+ bc->data.insn.f_sign_imm = im_sign;
+ bc->data.insn.f_len_imm = im_len;
+
bc->data.insn.opcode[0] = op0;
bc->data.insn.opcode[1] = op1;
bc->data.insn.opcode_len = opcode_len;
bc->mode_bits = mode_bits;
}
-
-void BuildBC_Insn(bytecode *bc, unsigned char opersize,
- unsigned char opcode_len, unsigned char op0, unsigned char op1,
- effaddr *ea_ptr, unsigned char spare, immval *im_ptr,
- unsigned char im_forcelen)
-{
- buildbc_insn_common(bc, opersize, opcode_len, op0, op1, ea_ptr, spare);
-
- if(im_ptr) {
- bc->data.insn.imm.im = *im_ptr;
- bc->data.insn.imm.im.len = im_forcelen; /* TODO: Add Warning */
- } else {
- bc->data.insn.imm.im.len = 0;
- }
- bc->data.insn.isrel = 0;
-}
-
-void BuildBC_Insn_Rel(bytecode *bc, unsigned char opersize,
- unsigned char opcode_len, unsigned char op0, unsigned char op1,
- effaddr *ea_ptr, unsigned char spare, relval *rel_ptr)
-{
- buildbc_insn_common(bc, opersize, opcode_len, op0, op1, ea_ptr, spare);
-
- if(rel_ptr) {
- bc->data.insn.imm.rel = *rel_ptr;
- } else {
- bc->data.insn.imm.rel.len = 0;
- }
- bc->data.insn.isrel = 1;
-}
-
/* TODO: implement. Shouldn't be difficult. */
unsigned char *ConvertBCInsnToBytes(unsigned char *ptr, bytecode *bc, int *len)
{
(unsigned int)bc->data.insn.ea.modrm,
(unsigned int)bc->data.insn.ea.sib,
(unsigned int)bc->data.insn.ea.need_sib);
- if(bc->data.insn.isrel) {
- printf("Relative Offset:\n");
- printf(" Val=%lx Len=%u\n", bc->data.insn.imm.rel.val,
- (unsigned int)bc->data.insn.imm.rel.len);
- } else {
- printf("Immediate Value:\n");
- printf(" Val=%lx Len=%u\n", bc->data.insn.imm.im.val,
- (unsigned int)bc->data.insn.imm.im.len);
- }
+ printf("Immediate/Relative Value:\n");
+ printf(" Val=%lx Len=%u, IsRel=%u\n", bc->data.insn.imm.val,
+ (unsigned int)bc->data.insn.imm.len,
+ (unsigned int)bc->data.insn.imm.isrel);
+ printf(" FLen=%u, FRel=%u, FSign=%u\n",
+ (unsigned int)bc->data.insn.f_len_imm,
+ (unsigned int)bc->data.insn.f_rel_imm,
+ (unsigned int)bc->data.insn.f_sign_imm);
printf("Opcode: %2x %2x OpLen=%u\n",
(unsigned int)bc->data.insn.opcode[0],
(unsigned int)bc->data.insn.opcode[1],
-/* $Id: bytecode.h,v 1.1 2001/05/15 05:28:06 peter Exp $
+/* $Id: bytecode.h,v 1.2 2001/05/18 21:42:31 peter Exp $
* Bytecode utility functions header file
*
* Copyright (C) 2001 Peter Johnson
typedef struct immval_s {
unsigned long val;
- unsigned char len; /* length of val (in bytes) */
+ unsigned char len; /* length of val (in bytes), 0 if none */
+ unsigned char isrel;
+ unsigned char isneg; /* the value has been explicitly negated */
} immval;
-typedef struct relval_s {
- unsigned long val;
- unsigned char len; /* length of val (in bytes) */
-} relval;
-
typedef struct bytecode_s {
struct bytecode_s *next;
union {
struct {
effaddr ea; /* effective address */
- union {
- immval im; /* immediate value */
- relval rel;
- } imm;
+
+ immval imm; /* immediate or relative value */
+ unsigned char f_len_imm; /* final imm length */
+ unsigned char f_rel_imm; /* 1 if final imm should be rel */
+ unsigned char f_sign_imm; /* 1 if final imm should be signed */
+
unsigned char opcode[2]; /* opcode */
unsigned char opcode_len;
+
unsigned char opersize; /* 0 indicates no override */
unsigned char lockrep_pre; /* 0 indicates no prefix */
- unsigned char isrel;
} insn;
struct {
unsigned char *data;
immval *ConvertIntToImm(immval *ptr, unsigned long int_val);
-relval *ConvertImmToRel(relval *ptr, immval *im_ptr,
- unsigned char rel_forcelen);
-
void BuildBC_Insn(bytecode *bc, unsigned char opersize,
unsigned char opcode_len, unsigned char op0, unsigned char op1,
effaddr *ea_ptr, unsigned char spare, immval *im_ptr,
- unsigned char im_forcelen);
-
-void BuildBC_Insn_Rel(bytecode *bc, unsigned char opersize,
- unsigned char opcode_len, unsigned char op0, unsigned char op1,
- effaddr *ea_ptr, unsigned char spare, relval *rel_ptr);
+ unsigned char im_len, unsigned char im_sign, unsigned char im_rel);
unsigned char *ConvertBCInsnToBytes(unsigned char *ptr, bytecode *bc, int *len);
-/* $Id: bison.y.in,v 1.1 2001/05/15 05:20:39 peter Exp $
+/* $Id: bison.y.in,v 1.2 2001/05/18 21:42:31 peter Exp $
* Main bison parser
*
* Copyright (C) 2001 Peter Johnson
;
aaa: INS_AAA {
- BuildBC_Insn(&$$, 0, 1, 0x37, 0, (effaddr *)NULL, 0, (immval *)NULL, 0);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ BuildBC_Insn(&$$, 32, 1, 0xED, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0);
}
;
loopz: INS_LOOPZ imm1632 {
- BuildBC_Insn_Rel(&$$, 0, 1, 0xE1, 0, (effaddr *)NULL, 0, ConvertImmToRel((relval *)NULL, &$2, 1));
+ BuildBC_Insn(&$$, 0, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1);
}
| INS_LOOPZ imm1632 ',' REG_CX {
- BuildBC_Insn_Rel(&$$, 16, 1, 0xE1, 0, (effaddr *)NULL, 0, ConvertImmToRel((relval *)NULL, &$2, 1));
+ BuildBC_Insn(&$$, 16, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1);
}
| INS_LOOPZ imm1632 ',' REG_ECX {
- BuildBC_Insn_Rel(&$$, 32, 1, 0xE1, 0, (effaddr *)NULL, 0, ConvertImmToRel((relval *)NULL, &$2, 1));
+ 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);
+ 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);
+ BuildBC_Insn(&$$, 32, 2, 0x0F, 0x03, &$4, $2, (immval *)NULL, 0, 0, 0);
}
;
-/* $Id: nasm-bison.y,v 1.1 2001/05/15 05:20:39 peter Exp $
+/* $Id: nasm-bison.y,v 1.2 2001/05/18 21:42:31 peter Exp $
* Main bison parser
*
* Copyright (C) 2001 Peter Johnson
;
aaa: INS_AAA {
- BuildBC_Insn(&$$, 0, 1, 0x37, 0, (effaddr *)NULL, 0, (immval *)NULL, 0);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ BuildBC_Insn(&$$, 32, 1, 0xED, 0, (effaddr *)NULL, 0, (immval *)NULL, 0, 0, 0);
}
;
loopz: INS_LOOPZ imm1632 {
- BuildBC_Insn_Rel(&$$, 0, 1, 0xE1, 0, (effaddr *)NULL, 0, ConvertImmToRel((relval *)NULL, &$2, 1));
+ BuildBC_Insn(&$$, 0, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1);
}
| INS_LOOPZ imm1632 ',' REG_CX {
- BuildBC_Insn_Rel(&$$, 16, 1, 0xE1, 0, (effaddr *)NULL, 0, ConvertImmToRel((relval *)NULL, &$2, 1));
+ BuildBC_Insn(&$$, 16, 1, 0xE1, 0, (effaddr *)NULL, 0, &$2, 1, 1, 1);
}
| INS_LOOPZ imm1632 ',' REG_ECX {
- BuildBC_Insn_Rel(&$$, 32, 1, 0xE1, 0, (effaddr *)NULL, 0, ConvertImmToRel((relval *)NULL, &$2, 1));
+ 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);
+ 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);
+ BuildBC_Insn(&$$, 32, 2, 0x0F, 0x03, &$4, $2, (immval *)NULL, 0, 0, 0);
}
;