blob: e96c2f0b40d6f50c818e129a0009f88ec87ad07c [file] [log] [blame]
<
#line 1 "rx-decode.opc"
/* -*- c -*- */
/* Copyright (C) 2012-2016 Free Software Foundation, Inc.
Contributed by Red Hat.
Written by DJ Delorie.
This file is part of the GNU opcodes library.
This library is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
It is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
#include "sysdep.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ansidecl.h"
#include "opcode/rx.h"
#define RX_OPCODE_BIG_ENDIAN 0
typedef struct
{
RX_Opcode_Decoded * rx;
int (* getbyte)(void *);
void * ptr;
unsigned char * op;
} LocalData;
static int trace = 0;
#define BSIZE 0
#define WSIZE 1
#define LSIZE 2
/* These are for when the upper bits are "don't care" or "undefined". */
static int bwl[] =
{
RX_Byte,
RX_Word,
RX_Long,
RX_Bad_Size /* Bogus instructions can have a size field set to 3. */
};
static int sbwl[] =
{
RX_SByte,
RX_SWord,
RX_Long,
RX_Bad_Size /* Bogus instructions can have a size field set to 3. */
};
static int ubw[] =
{
RX_UByte,
RX_UWord,
RX_Bad_Size,/* Bogus instructions can have a size field set to 2. */
RX_Bad_Size /* Bogus instructions can have a size field set to 3. */
};
static int memex[] =
{
RX_SByte,
RX_SWord,
RX_Long,
RX_UWord
};
#define ID(x) rx->id = RXO_##x
#define OP(n,t,r,a) (rx->op[n].type = t, \
rx->op[n].reg = r, \
rx->op[n].addend = a )
#define OPs(n,t,r,a,s) (OP (n,t,r,a), \
rx->op[n].size = s )
/* This is for the BWL and BW bitfields. */
static int SCALE[] = { 1, 2, 4, 0 };
/* This is for the prefix size enum. */
static int PSCALE[] = { 4, 1, 1, 1, 2, 2, 2, 3, 4 };
static int flagmap[] = {0, 1, 2, 3, 0, 0, 0, 0,
16, 17, 0, 0, 0, 0, 0, 0 };
static int dsp3map[] = { 8, 9, 10, 3, 4, 5, 6, 7 };
/*
*C a constant (immediate) c
*R A register
*I Register indirect, no offset
*Is Register indirect, with offset
*D standard displacement: type (r,[r],dsp8,dsp16 code), register, BWL code
*P standard displacement: type (r,[r]), reg, assumes UByte
*Pm memex displacement: type (r,[r]), reg, memex code
*cc condition code. */
#define DC(c) OP (0, RX_Operand_Immediate, 0, c)
#define DR(r) OP (0, RX_Operand_Register, r, 0)
#define DI(r,a) OP (0, RX_Operand_Indirect, r, a)
#define DIs(r,a,s) OP (0, RX_Operand_Indirect, r, (a) * SCALE[s])
#define DD(t,r,s) rx_disp (0, t, r, bwl[s], ld);
#define DF(r) OP (0, RX_Operand_Flag, flagmap[r], 0)
#define SC(i) OP (1, RX_Operand_Immediate, 0, i)
#define SR(r) OP (1, RX_Operand_Register, r, 0)
#define SRR(r) OP (1, RX_Operand_TwoReg, r, 0)
#define SI(r,a) OP (1, RX_Operand_Indirect, r, a)
#define SIs(r,a,s) OP (1, RX_Operand_Indirect, r, (a) * SCALE[s])
#define SD(t,r,s) rx_disp (1, t, r, bwl[s], ld);
#define SP(t,r) rx_disp (1, t, r, (t!=3) ? RX_UByte : RX_Long, ld); P(t, 1);
#define SPm(t,r,m) rx_disp (1, t, r, memex[m], ld); rx->op[1].size = memex[m];
#define Scc(cc) OP (1, RX_Operand_Condition, cc, 0)
#define S2C(i) OP (2, RX_Operand_Immediate, 0, i)
#define S2R(r) OP (2, RX_Operand_Register, r, 0)
#define S2I(r,a) OP (2, RX_Operand_Indirect, r, a)
#define S2Is(r,a,s) OP (2, RX_Operand_Indirect, r, (a) * SCALE[s])
#define S2D(t,r,s) rx_disp (2, t, r, bwl[s], ld);
#define S2P(t,r) rx_disp (2, t, r, (t!=3) ? RX_UByte : RX_Long, ld); P(t, 2);
#define S2Pm(t,r,m) rx_disp (2, t, r, memex[m], ld); rx->op[2].size = memex[m];
#define S2cc(cc) OP (2, RX_Operand_Condition, cc, 0)
#define BWL(sz) rx->op[0].size = rx->op[1].size = rx->op[2].size = rx->size = bwl[sz]
#define sBWL(sz) rx->op[0].size = rx->op[1].size = rx->op[2].size = rx->size = sbwl[sz]
#define uBW(sz) rx->op[0].size = rx->op[1].size = rx->op[2].size = rx->size = ubw[sz]
#define P(t, n) rx->op[n].size = (t!=3) ? RX_UByte : RX_Long;
#define F(f) store_flags(rx, f)
#define AU ATTRIBUTE_UNUSED
#define GETBYTE() (ld->op [ld->rx->n_bytes++] = ld->getbyte (ld->ptr))
#define SYNTAX(x) rx->syntax = x
#define UNSUPPORTED() \
rx->syntax = "*unknown*"
#define IMM(sf) immediate (sf, 0, ld)
#define IMMex(sf) immediate (sf, 1, ld)
static int
immediate (int sfield, int ex, LocalData * ld)
{
unsigned long i = 0, j;
switch (sfield)
{
#define B ((unsigned long) GETBYTE())
case 0:
#if RX_OPCODE_BIG_ENDIAN
i = B;
if (ex && (i & 0x80))
i -= 0x100;
i <<= 24;
i |= B << 16;
i |= B << 8;
i |= B;
#else
i = B;
i |= B << 8;
i |= B << 16;
j = B;
if (ex && (j & 0x80))
j -= 0x100;
i |= j << 24;
#endif
break;
case 3:
#if RX_OPCODE_BIG_ENDIAN
i = B << 16;
i |= B << 8;
i |= B;
#else
i = B;
i |= B << 8;
i |= B << 16;
#endif
if (ex && (i & 0x800000))
i -= 0x1000000;
break;
case 2:
#if RX_OPCODE_BIG_ENDIAN
i |= B << 8;
i |= B;
#else
i |= B;
i |= B << 8;
#endif
if (ex && (i & 0x8000))
i -= 0x10000;
break;
case 1:
i |= B;
if (ex && (i & 0x80))
i -= 0x100;
break;
default:
abort();
}
return i;
}
static void
rx_disp (int n, int type, int reg, int size, LocalData * ld)
{
int disp;
ld->rx->op[n].reg = reg;
switch (type)
{
case 3:
ld->rx->op[n].type = RX_Operand_Register;
break;
case 0:
ld->rx->op[n].type = RX_Operand_Zero_Indirect;
ld->rx->op[n].addend = 0;
break;
case 1:
ld->rx->op[n].type = RX_Operand_Indirect;
disp = GETBYTE ();
ld->rx->op[n].addend = disp * PSCALE[size];
break;
case 2:
ld->rx->op[n].type = RX_Operand_Indirect;
disp = GETBYTE ();
#if RX_OPCODE_BIG_ENDIAN
disp = disp * 256 + GETBYTE ();
#else
disp = disp + GETBYTE () * 256;
#endif
ld->rx->op[n].addend = disp * PSCALE[size];
break;
default:
abort ();
}
}
#define xO 8
#define xS 4
#define xZ 2
#define xC 1
#define F_____
#define F___ZC rx->flags_0 = rx->flags_s = xZ|xC;
#define F__SZ_ rx->flags_0 = rx->flags_s = xS|xZ;
#define F__SZC rx->flags_0 = rx->flags_s = xS|xZ|xC;
#define F_0SZC rx->flags_0 = xO|xS|xZ|xC; rx->flags_s = xS|xZ|xC;
#define F_O___ rx->flags_0 = rx->flags_s = xO;
#define F_OS__ rx->flags_0 = rx->flags_s = xO|xS;
#define F_OSZ_ rx->flags_0 = rx->flags_s = xO|xS|xZ;
#define F_OSZC rx->flags_0 = rx->flags_s = xO|xS|xZ|xC;
int
rx_decode_opcode (unsigned long pc AU,
RX_Opcode_Decoded * rx,
int (* getbyte)(void *),
void * ptr)
{
LocalData lds, * ld = &lds;
unsigned char op[20] = {0};
lds.rx = rx;
lds.getbyte = getbyte;
lds.ptr = ptr;
lds.op = op;
memset (rx, 0, sizeof (*rx));
BWL(LSIZE);
/*----------------------------------------------------------------------*/
/* MOV */
GETBYTE ();
switch (op[0] & 0xff)
{
case 0x00:
{
/** 0000 0000 brk */
if (trace)
{
printf ("\033[33m%s\033[0m %02x\n",
"/** 0000 0000 brk */",
op[0]);
}
SYNTAX("brk");
#line 1025 "rx-decode.opc"
ID(brk);
}
break;
case 0x01:
{
/** 0000 0001 dbt */
if (trace)
{
printf ("\033[33m%s\033[0m %02x\n",
"/** 0000 0001 dbt */",
op[0]);
}
SYNTAX("dbt");
#line 1028 "rx-decode.opc"
ID(dbt);
}
break;
case 0x02:
{
/** 0000 0010 rts */
if (trace)
{
printf ("\033[33m%s\033[0m %02x\n",
"/** 0000 0010 rts */",
op[0]);
}
SYNTAX("rts");
#line 806 "rx-decode.opc"
ID(rts);
/*----------------------------------------------------------------------*/
/* NOP */
}
break;
case 0x03:
{
/** 0000 0011 nop */
if (trace)
{
printf ("\033[33m%s\033[0m %02x\n",
"/** 0000 0011 nop */",
op[0]);
}
SYNTAX("nop");
#line 812 "rx-decode.opc"
ID(nop);
/*----------------------------------------------------------------------*/
/* STRING FUNCTIONS */
}
break;
case 0x04:
{
/** 0000 0100 bra.a %a0 */
if (trace)
{
printf ("\033[33m%s\033[0m %02x\n",
"/** 0000 0100 bra.a %a0 */",
op[0]);
}
SYNTAX("bra.a %a0");
#line 784 "rx-decode.opc"
ID(branch); DC(pc + IMMex(3));
}
break;
case 0x05:
{
/** 0000 0101 bsr.a %a0 */
if (trace)
{
printf ("\033[33m%s\033[0m %02x\n",
"/** 0000 0101 bsr.a %a0 */",
op[0]);
}
SYNTAX("bsr.a %a0");
#line 800 "rx-decode.opc"
ID(jsr); DC(pc + IMMex(3));
}
break;
case 0x06:
GETBYTE ();
switch (op[1] & 0xff)
{
case 0x00:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
op_semantics_1:
{
/** 0000 0110 mx00 00ss rsrc rdst sub %2%S2, %1 */
#line 542 "rx-decode.opc"
int mx AU = (op[1] >> 6) & 0x03;
#line 542 "rx-decode.opc"
int ss AU = op[1] & 0x03;
#line 542 "rx-decode.opc"
int rsrc AU = (op[2] >> 4) & 0x0f;
#line 542 "rx-decode.opc"
int rdst AU = op[2] & 0x0f;
if (trace)
{
printf ("\033[33m%s\033[0m %02x %02x %02x\n",
"/** 0000 0110 mx00 00ss rsrc rdst sub %2%S2, %1 */",
op[0], op[1], op[2]);
printf (" mx = 0x%x,", mx);
printf (" ss = 0x%x,", ss);
printf (" rsrc = 0x%x,", rsrc);
printf (" rdst = 0x%x\n", rdst);
}
SYNTAX("sub %2%S2, %1");
#line 542 "rx-decode.opc"
ID(sub); S2Pm(ss, rsrc, mx); SR(rdst); DR(rdst); F_OSZC;
}
break;
}
break;
case 0x01:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_1;
break;
}
break;
case 0x02:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_1;
break;
}
break;
case 0x03:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_1;
break;
}
break;
case 0x04:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
op_semantics_2:
{
/** 0000 0110 mx00 01ss rsrc rdst cmp %2%S2, %1 */
#line 530 "rx-decode.opc"
int mx AU = (op[1] >> 6) & 0x03;
#line 530 "rx-decode.opc"
int ss AU = op[1] & 0x03;
#line 530 "rx-decode.opc"
int rsrc AU = (op[2] >> 4) & 0x0f;
#line 530 "rx-decode.opc"
int rdst AU = op[2] & 0x0f;
if (trace)
{
printf ("\033[33m%s\033[0m %02x %02x %02x\n",
"/** 0000 0110 mx00 01ss rsrc rdst cmp %2%S2, %1 */",
op[0], op[1], op[2]);
printf (" mx = 0x%x,", mx);
printf (" ss = 0x%x,", ss);
printf (" rsrc = 0x%x,", rsrc);
printf (" rdst = 0x%x\n", rdst);
}
SYNTAX("cmp %2%S2, %1");
#line 530 "rx-decode.opc"
ID(sub); S2Pm(ss, rsrc, mx); SR(rdst); F_OSZC;
/*----------------------------------------------------------------------*/
/* SUB */
}
break;
}
break;
case 0x05:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_2;
break;
}
break;
case 0x06:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_2;
break;
}
break;
case 0x07:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_2;
break;
}
break;
case 0x08:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
op_semantics_3:
{
/** 0000 0110 mx00 10ss rsrc rdst add %1%S1, %0 */
#line 506 "rx-decode.opc"
int mx AU = (op[1] >> 6) & 0x03;
#line 506 "rx-decode.opc"
int ss AU = op[1] & 0x03;
#line 506 "rx-decode.opc"
int rsrc AU = (op[2] >> 4) & 0x0f;
#line 506 "rx-decode.opc"
int rdst AU = op[2] & 0x0f;
if (trace)
{
printf ("\033[33m%s\033[0m %02x %02x %02x\n",
"/** 0000 0110 mx00 10ss rsrc rdst add %1%S1, %0 */",
op[0], op[1], op[2]);
printf (" mx = 0x%x,", mx);
printf (" ss = 0x%x,", ss);
printf (" rsrc = 0x%x,", rsrc);
printf (" rdst = 0x%x\n", rdst);
}
SYNTAX("add %1%S1, %0");
#line 506 "rx-decode.opc"
ID(add); SPm(ss, rsrc, mx); DR(rdst); F_OSZC;
}
break;
}
break;
case 0x09:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_3;
break;
}
break;
case 0x0a:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_3;
break;
}
break;
case 0x0b:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_3;
break;
}
break;
case 0x0c:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
op_semantics_4:
{
/** 0000 0110 mx00 11ss rsrc rdst mul %1%S1, %0 */
#line 649 "rx-decode.opc"
int mx AU = (op[1] >> 6) & 0x03;
#line 649 "rx-decode.opc"
int ss AU = op[1] & 0x03;
#line 649 "rx-decode.opc"
int rsrc AU = (op[2] >> 4) & 0x0f;
#line 649 "rx-decode.opc"
int rdst AU = op[2] & 0x0f;
if (trace)
{
printf ("\033[33m%s\033[0m %02x %02x %02x\n",
"/** 0000 0110 mx00 11ss rsrc rdst mul %1%S1, %0 */",
op[0], op[1], op[2]);
printf (" mx = 0x%x,", mx);
printf (" ss = 0x%x,", ss);
printf (" rsrc = 0x%x,", rsrc);
printf (" rdst = 0x%x\n", rdst);
}
SYNTAX("mul %1%S1, %0");
#line 649 "rx-decode.opc"
ID(mul); SPm(ss, rsrc, mx); DR(rdst); F_____;
}
break;
}
break;
case 0x0d:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_4;
break;
}
break;
case 0x0e:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_4;
break;
}
break;
case 0x0f:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_4;
break;
}
break;
case 0x10:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
op_semantics_5:
{
/** 0000 0110 mx01 00ss rsrc rdst and %1%S1, %0 */
#line 419 "rx-decode.opc"
int mx AU = (op[1] >> 6) & 0x03;
#line 419 "rx-decode.opc"
int ss AU = op[1] & 0x03;
#line 419 "rx-decode.opc"
int rsrc AU = (op[2] >> 4) & 0x0f;
#line 419 "rx-decode.opc"
int rdst AU = op[2] & 0x0f;
if (trace)
{
printf ("\033[33m%s\033[0m %02x %02x %02x\n",
"/** 0000 0110 mx01 00ss rsrc rdst and %1%S1, %0 */",
op[0], op[1], op[2]);
printf (" mx = 0x%x,", mx);
printf (" ss = 0x%x,", ss);
printf (" rsrc = 0x%x,", rsrc);
printf (" rdst = 0x%x\n", rdst);
}
SYNTAX("and %1%S1, %0");
#line 419 "rx-decode.opc"
ID(and); SPm(ss, rsrc, mx); DR(rdst); F__SZ_;
}
break;
}
break;
case 0x11:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_5;
break;
}
break;
case 0x12:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_5;
break;
}
break;
case 0x13:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_5;
break;
}
break;
case 0x14:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
op_semantics_6:
{
/** 0000 0110 mx01 01ss rsrc rdst or %1%S1, %0 */
#line 437 "rx-decode.opc"
int mx AU = (op[1] >> 6) & 0x03;
#line 437 "rx-decode.opc"
int ss AU = op[1] & 0x03;
#line 437 "rx-decode.opc"
int rsrc AU = (op[2] >> 4) & 0x0f;
#line 437 "rx-decode.opc"
int rdst AU = op[2] & 0x0f;
if (trace)
{
printf ("\033[33m%s\033[0m %02x %02x %02x\n",
"/** 0000 0110 mx01 01ss rsrc rdst or %1%S1, %0 */",
op[0], op[1], op[2]);
printf (" mx = 0x%x,", mx);
printf (" ss = 0x%x,", ss);
printf (" rsrc = 0x%x,", rsrc);
printf (" rdst = 0x%x\n", rdst);
}
SYNTAX("or %1%S1, %0");
#line 437 "rx-decode.opc"
ID(or); SPm(ss, rsrc, mx); DR(rdst); F__SZ_;
}
break;
}
break;
case 0x15:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_6;
break;
}
break;
case 0x16:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_6;
break;
}
break;
case 0x17:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_6;
break;
}
break;
case 0x20:
GETBYTE ();
switch (op[2] & 0xff)
{
case 0x00:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
op_semantics_7:
{
/** 0000 0110 mx10 00sp 0000 0000 rsrc rdst sbb %1%S1, %0 */
#line 555 "rx-decode.opc"
int mx AU = (op[1] >> 6) & 0x03;
#line 555 "rx-decode.opc"
int sp AU = op[1] & 0x03;
#line 555 "rx-decode.opc"
int rsrc AU = (op[3] >> 4) & 0x0f;
#line 555 "rx-decode.opc"
int rdst AU = op[3] & 0x0f;
if (trace)
{
printf ("\033[33m%s\033[0m %02x %02x %02x %02x\n",
"/** 0000 0110 mx10 00sp 0000 0000 rsrc rdst sbb %1%S1, %0 */",
op[0], op[1], op[2], op[3]);
printf (" mx = 0x%x,", mx);
printf (" sp = 0x%x,", sp);
printf (" rsrc = 0x%x,", rsrc);
printf (" rdst = 0x%x\n", rdst);
}
SYNTAX("sbb %1%S1, %0");
#line 555 "rx-decode.opc"
ID(sbb); SPm(sp, rsrc, mx); DR(rdst); F_OSZC;
/*----------------------------------------------------------------------*/
/* ABS */
}
break;
}
break;
case 0x04:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
op_semantics_8:
{
/** 0000 0110 mx10 00ss 0000 0100 rsrc rdst max %1%S1, %0 */
#line 594 "rx-decode.opc"
int mx AU = (op[1] >> 6) & 0x03;
#line 594 "rx-decode.opc"
int ss AU = op[1] & 0x03;
#line 594 "rx-decode.opc"
int rsrc AU = (op[3] >> 4) & 0x0f;
#line 594 "rx-decode.opc"
int rdst AU = op[3] & 0x0f;
if (trace)
{
printf ("\033[33m%s\033[0m %02x %02x %02x %02x\n",
"/** 0000 0110 mx10 00ss 0000 0100 rsrc rdst max %1%S1, %0 */",
op[0], op[1], op[2], op[3]);
printf (" mx = 0x%x,", mx);
printf (" ss = 0x%x,", ss);
printf (" rsrc = 0x%x,", rsrc);
printf (" rdst = 0x%x\n", rdst);
}
SYNTAX("max %1%S1, %0");
#line 594 "rx-decode.opc"
ID(max); SPm(ss, rsrc, mx); DR(rdst);
/*----------------------------------------------------------------------*/
/* MIN */
}
break;
}
break;
case 0x05:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
op_semantics_9:
{
/** 0000 0110 mx10 00ss 0000 0101 rsrc rdst min %1%S1, %0 */
#line 606 "rx-decode.opc"
int mx AU = (op[1] >> 6) & 0x03;
#line 606 "rx-decode.opc"
int ss AU = op[1] & 0x03;
#line 606 "rx-decode.opc"
int rsrc AU = (op[3] >> 4) & 0x0f;
#line 606 "rx-decode.opc"
int rdst AU = op[3] & 0x0f;
if (trace)
{
printf ("\033[33m%s\033[0m %02x %02x %02x %02x\n",
"/** 0000 0110 mx10 00ss 0000 0101 rsrc rdst min %1%S1, %0 */",
op[0], op[1], op[2], op[3]);
printf (" mx = 0x%x,", mx);
printf (" ss = 0x%x,", ss);
printf (" rsrc = 0x%x,", rsrc);
printf (" rdst = 0x%x\n", rdst);
}
SYNTAX("min %1%S1, %0");
#line 606 "rx-decode.opc"
ID(min); SPm(ss, rsrc, mx); DR(rdst);
/*----------------------------------------------------------------------*/
/* MUL */
}
break;
}
break;
case 0x06:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
op_semantics_10:
{
/** 0000 0110 mx10 00ss 0000 0110 rsrc rdst emul %1%S1, %0 */
#line 664 "rx-decode.opc"
int mx AU = (op[1] >> 6) & 0x03;
#line 664 "rx-decode.opc"
int ss AU = op[1] & 0x03;
#line 664 "rx-decode.opc"
int rsrc AU = (op[3] >> 4) & 0x0f;
#line 664 "rx-decode.opc"
int rdst AU = op[3] & 0x0f;
if (trace)
{
printf ("\033[33m%s\033[0m %02x %02x %02x %02x\n",
"/** 0000 0110 mx10 00ss 0000 0110 rsrc rdst emul %1%S1, %0 */",
op[0], op[1], op[2], op[3]);
printf (" mx = 0x%x,", mx);
printf (" ss = 0x%x,", ss);
printf (" rsrc = 0x%x,", rsrc);
printf (" rdst = 0x%x\n", rdst);
}
SYNTAX("emul %1%S1, %0");
#line 664 "rx-decode.opc"
ID(emul); SPm(ss, rsrc, mx); DR(rdst);
/*----------------------------------------------------------------------*/
/* EMULU */
}
break;
}
break;
case 0x07:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
op_semantics_11:
{
/** 0000 0110 mx10 00ss 0000 0111 rsrc rdst emulu %1%S1, %0 */
#line 676 "rx-decode.opc"
int mx AU = (op[1] >> 6) & 0x03;
#line 676 "rx-decode.opc"
int ss AU = op[1] & 0x03;
#line 676 "rx-decode.opc"
int rsrc AU = (op[3] >> 4) & 0x0f;
#line 676 "rx-decode.opc"
int rdst AU = op[3] & 0x0f;
if (trace)
{
printf ("\033[33m%s\033[0m %02x %02x %02x %02x\n",
"/** 0000 0110 mx10 00ss 0000 0111 rsrc rdst emulu %1%S1, %0 */",
op[0], op[1], op[2], op[3]);
printf (" mx = 0x%x,", mx);
printf (" ss = 0x%x,", ss);
printf (" rsrc = 0x%x,", rsrc);
printf (" rdst = 0x%x\n", rdst);
}
SYNTAX("emulu %1%S1, %0");
#line 676 "rx-decode.opc"
ID(emulu); SPm(ss, rsrc, mx); DR(rdst);
/*----------------------------------------------------------------------*/
/* DIV */
}
break;
}
break;
case 0x08:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
op_semantics_12:
{
/** 0000 0110 mx10 00ss 0000 1000 rsrc rdst div %1%S1, %0 */
#line 688 "rx-decode.opc"
int mx AU = (op[1] >> 6) & 0x03;
#line 688 "rx-decode.opc"
int ss AU = op[1] & 0x03;
#line 688 "rx-decode.opc"
int rsrc AU = (op[3] >> 4) & 0x0f;
#line 688 "rx-decode.opc"
int rdst AU = op[3] & 0x0f;
if (trace)
{
printf ("\033[33m%s\033[0m %02x %02x %02x %02x\n",
"/** 0000 0110 mx10 00ss 0000 1000 rsrc rdst div %1%S1, %0 */",
op[0], op[1], op[2], op[3]);
printf (" mx = 0x%x,", mx);
printf (" ss = 0x%x,", ss);
printf (" rsrc = 0x%x,", rsrc);
printf (" rdst = 0x%x\n", rdst);
}
SYNTAX("div %1%S1, %0");
#line 688 "rx-decode.opc"
ID(div); SPm(ss, rsrc, mx); DR(rdst); F_O___;
/*----------------------------------------------------------------------*/
/* DIVU */
}
break;
}
break;
case 0x09:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
op_semantics_13:
{
/** 0000 0110 mx10 00ss 0000 1001 rsrc rdst divu %1%S1, %0 */
#line 700 "rx-decode.opc"
int mx AU = (op[1] >> 6) & 0x03;
#line 700 "rx-decode.opc"
int ss AU = op[1] & 0x03;
#line 700 "rx-decode.opc"
int rsrc AU = (op[3] >> 4) & 0x0f;
#line 700 "rx-decode.opc"
int rdst AU = op[3] & 0x0f;
if (trace)
{
printf ("\033[33m%s\033[0m %02x %02x %02x %02x\n",
"/** 0000 0110 mx10 00ss 0000 1001 rsrc rdst divu %1%S1, %0 */",
op[0], op[1], op[2], op[3]);
printf (" mx = 0x%x,", mx);
printf (" ss = 0x%x,", ss);
printf (" rsrc = 0x%x,", rsrc);
printf (" rdst = 0x%x\n", rdst);
}
SYNTAX("divu %1%S1, %0");
#line 700 "rx-decode.opc"
ID(divu); SPm(ss, rsrc, mx); DR(rdst); F_O___;
/*----------------------------------------------------------------------*/
/* SHIFT */
}
break;
}
break;
case 0x0c:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
op_semantics_14:
{
/** 0000 0110 mx10 00ss 0000 1100 rsrc rdst tst %1%S1, %2 */
#line 473 "rx-decode.opc"
int mx AU = (op[1] >> 6) & 0x03;
#line 473 "rx-decode.opc"
int ss AU = op[1] & 0x03;
#line 473 "rx-decode.opc"
int rsrc AU = (op[3] >> 4) & 0x0f;
#line 473 "rx-decode.opc"
int rdst AU = op[3] & 0x0f;
if (trace)
{
printf ("\033[33m%s\033[0m %02x %02x %02x %02x\n",
"/** 0000 0110 mx10 00ss 0000 1100 rsrc rdst tst %1%S1, %2 */",
op[0], op[1], op[2], op[3]);
printf (" mx = 0x%x,", mx);
printf (" ss = 0x%x,", ss);
printf (" rsrc = 0x%x,", rsrc);
printf (" rdst = 0x%x\n", rdst);
}
SYNTAX("tst %1%S1, %2");
#line 473 "rx-decode.opc"
ID(and); SPm(ss, rsrc, mx); S2R(rdst); F__SZ_;
/*----------------------------------------------------------------------*/
/* NEG */
}
break;
}
break;
case 0x0d:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
op_semantics_15:
{
/** 0000 0110 mx10 00ss 0000 1101 rsrc rdst xor %1%S1, %0 */
#line 452 "rx-decode.opc"
int mx AU = (op[1] >> 6) & 0x03;
#line 452 "rx-decode.opc"
int ss AU = op[1] & 0x03;
#line 452 "rx-decode.opc"
int rsrc AU = (op[3] >> 4) & 0x0f;
#line 452 "rx-decode.opc"
int rdst AU = op[3] & 0x0f;
if (trace)
{
printf ("\033[33m%s\033[0m %02x %02x %02x %02x\n",
"/** 0000 0110 mx10 00ss 0000 1101 rsrc rdst xor %1%S1, %0 */",
op[0], op[1], op[2], op[3]);
printf (" mx = 0x%x,", mx);
printf (" ss = 0x%x,", ss);
printf (" rsrc = 0x%x,", rsrc);
printf (" rdst = 0x%x\n", rdst);
}
SYNTAX("xor %1%S1, %0");
#line 452 "rx-decode.opc"
ID(xor); SPm(ss, rsrc, mx); DR(rdst); F__SZ_;
/*----------------------------------------------------------------------*/
/* NOT */
}
break;
}
break;
case 0x10:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
op_semantics_16:
{
/** 0000 0110 mx10 00ss 0001 0000 rsrc rdst xchg %1%S1, %0 */
#line 386 "rx-decode.opc"
int mx AU = (op[1] >> 6) & 0x03;
#line 386 "rx-decode.opc"
int ss AU = op[1] & 0x03;
#line 386 "rx-decode.opc"
int rsrc AU = (op[3] >> 4) & 0x0f;
#line 386 "rx-decode.opc"
int rdst AU = op[3] & 0x0f;
if (trace)
{
printf ("\033[33m%s\033[0m %02x %02x %02x %02x\n",
"/** 0000 0110 mx10 00ss 0001 0000 rsrc rdst xchg %1%S1, %0 */",
op[0], op[1], op[2], op[3]);
printf (" mx = 0x%x,", mx);
printf (" ss = 0x%x,", ss);
printf (" rsrc = 0x%x,", rsrc);
printf (" rdst = 0x%x\n", rdst);
}
SYNTAX("xchg %1%S1, %0");
#line 386 "rx-decode.opc"
ID(xchg); DR(rdst); SPm(ss, rsrc, mx);
/*----------------------------------------------------------------------*/
/* STZ/STNZ */
}
break;
}
break;
case 0x11:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
op_semantics_17:
{
/** 0000 0110 mx10 00sd 0001 0001 rsrc rdst itof %1%S1, %0 */
#line 929 "rx-decode.opc"
int mx AU = (op[1] >> 6) & 0x03;
#line 929 "rx-decode.opc"
int sd AU = op[1] & 0x03;
#line 929 "rx-decode.opc"
int rsrc AU = (op[3] >> 4) & 0x0f;
#line 929 "rx-decode.opc"
int rdst AU = op[3] & 0x0f;
if (trace)
{
printf ("\033[33m%s\033[0m %02x %02x %02x %02x\n",
"/** 0000 0110 mx10 00sd 0001 0001 rsrc rdst itof %1%S1, %0 */",
op[0], op[1], op[2], op[3]);
printf (" mx = 0x%x,", mx);
printf (" sd = 0x%x,", sd);
printf (" rsrc = 0x%x,", rsrc);
printf (" rdst = 0x%x\n", rdst);
}
SYNTAX("itof %1%S1, %0");
#line 929 "rx-decode.opc"
ID(itof); DR (rdst); SPm(sd, rsrc, mx); F__SZ_;
/*----------------------------------------------------------------------*/
/* BIT OPS */
}
break;
}
break;
case 0x15:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
op_semantics_18:
{
/** 0000 0110 mx10 00sd 0001 0101 rsrc rdst utof %1%S1, %0 */
#line 1115 "rx-decode.opc"
int mx AU = (op[1] >> 6) & 0x03;
#line 1115 "rx-decode.opc"
int sd AU = op[1] & 0x03;
#line 1115 "rx-decode.opc"
int rsrc AU = (op[3] >> 4) & 0x0f;
#line 1115 "rx-decode.opc"
int rdst AU = op[3] & 0x0f;
if (trace)
{
printf ("\033[33m%s\033[0m %02x %02x %02x %02x\n",
"/** 0000 0110 mx10 00sd 0001 0101 rsrc rdst utof %1%S1, %0 */",
op[0], op[1], op[2], op[3]);
printf (" mx = 0x%x,", mx);
printf (" sd = 0x%x,", sd);
printf (" rsrc = 0x%x,", rsrc);
printf (" rdst = 0x%x\n", rdst);
}
SYNTAX("utof %1%S1, %0");
#line 1115 "rx-decode.opc"
ID(utof); DR (rdst); SPm(sd, rsrc, mx); F__SZ_;
}
break;
}
break;
default: UNSUPPORTED(); break;
}
break;
case 0x21:
GETBYTE ();
switch (op[2] & 0xff)
{
case 0x00:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_7;
break;
}
break;
case 0x04:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_8;
break;
}
break;
case 0x05:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_9;
break;
}
break;
case 0x06:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_10;
break;
}
break;
case 0x07:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_11;
break;
}
break;
case 0x08:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_12;
break;
}
break;
case 0x09:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_13;
break;
}
break;
case 0x0c:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_14;
break;
}
break;
case 0x0d:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_15;
break;
}
break;
case 0x10:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_16;
break;
}
break;
case 0x11:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_17;
break;
}
break;
case 0x15:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_18;
break;
}
break;
default: UNSUPPORTED(); break;
}
break;
case 0x22:
GETBYTE ();
switch (op[2] & 0xff)
{
case 0x00:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_7;
break;
}
break;
case 0x04:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_8;
break;
}
break;
case 0x05:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_9;
break;
}
break;
case 0x06:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_10;
break;
}
break;
case 0x07:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_11;
break;
}
break;
case 0x08:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_12;
break;
}
break;
case 0x09:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_13;
break;
}
break;
case 0x0c:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_14;
break;
}
break;
case 0x0d:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_15;
break;
}
break;
case 0x10:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_16;
break;
}
break;
case 0x11:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_17;
break;
}
break;
case 0x15:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_18;
break;
}
break;
default: UNSUPPORTED(); break;
}
break;
case 0x23:
GETBYTE ();
switch (op[2] & 0xff)
{
case 0x00:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_7;
break;
}
break;
case 0x04:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_8;
break;
}
break;
case 0x05:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_9;
break;
}
break;
case 0x06:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_10;
break;
}
break;
case 0x07:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_11;
break;
}
break;
case 0x08:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_12;
break;
}
break;
case 0x09:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_13;
break;
}
break;
case 0x0c:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_14;
break;
}
break;
case 0x0d:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_15;
break;
}
break;
case 0x10:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_16;
break;
}
break;
case 0x11:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_17;
break;
}
break;
case 0x15:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_18;
break;
}
break;
default: UNSUPPORTED(); break;
}
break;
case 0x40:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_1;
break;
}
break;
case 0x41:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_1;
break;
}
break;
case 0x42:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_1;
break;
}
break;
case 0x43:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_1;
break;
}
break;
case 0x44:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_2;
break;
}
break;
case 0x45:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_2;
break;
}
break;
case 0x46:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_2;
break;
}
break;
case 0x47:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_2;
break;
}
break;
case 0x48:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_3;
break;
}
break;
case 0x49:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_3;
break;
}
break;
case 0x4a:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_3;
break;
}
break;
case 0x4b:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_3;
break;
}
break;
case 0x4c:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_4;
break;
}
break;
case 0x4d:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_4;
break;
}
break;
case 0x4e:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_4;
break;
}
break;
case 0x4f:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_4;
break;
}
break;
case 0x50:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_5;
break;
}
break;
case 0x51:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_5;
break;
}
break;
case 0x52:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_5;
break;
}
break;
case 0x53:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_5;
break;
}
break;
case 0x54:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_6;
break;
}
break;
case 0x55:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_6;
break;
}
break;
case 0x56:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_6;
break;
}
break;
case 0x57:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_6;
break;
}
break;
case 0x60:
GETBYTE ();
switch (op[2] & 0xff)
{
case 0x00:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_7;
break;
}
break;
case 0x04:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_8;
break;
}
break;
case 0x05:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_9;
break;
}
break;
case 0x06:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_10;
break;
}
break;
case 0x07:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_11;
break;
}
break;
case 0x08:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_12;
break;
}
break;
case 0x09:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_13;
break;
}
break;
case 0x0c:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_14;
break;
}
break;
case 0x0d:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_15;
break;
}
break;
case 0x10:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_16;
break;
}
break;
case 0x11:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_17;
break;
}
break;
case 0x15:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_18;
break;
}
break;
default: UNSUPPORTED(); break;
}
break;
case 0x61:
GETBYTE ();
switch (op[2] & 0xff)
{
case 0x00:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_7;
break;
}
break;
case 0x04:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_8;
break;
}
break;
case 0x05:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_9;
break;
}
break;
case 0x06:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_10;
break;
}
break;
case 0x07:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_11;
break;
}
break;
case 0x08:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_12;
break;
}
break;
case 0x09:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_13;
break;
}
break;
case 0x0c:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_14;
break;
}
break;
case 0x0d:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_15;
break;
}
break;
case 0x10:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_16;
break;
}
break;
case 0x11:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_17;
break;
}
break;
case 0x15:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_18;
break;
}
break;
default: UNSUPPORTED(); break;
}
break;
case 0x62:
GETBYTE ();
switch (op[2] & 0xff)
{
case 0x00:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_7;
break;
}
break;
case 0x04:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_8;
break;
}
break;
case 0x05:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_9;
break;
}
break;
case 0x06:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_10;
break;
}
break;
case 0x07:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_11;
break;
}
break;
case 0x08:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_12;
break;
}
break;
case 0x09:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_13;
break;
}
break;
case 0x0c:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_14;
break;
}
break;
case 0x0d:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_15;
break;
}
break;
case 0x10:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_16;
break;
}
break;
case 0x11:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_17;
break;
}
break;
case 0x15:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_18;
break;
}
break;
default: UNSUPPORTED(); break;
}
break;
case 0x63:
GETBYTE ();
switch (op[2] & 0xff)
{
case 0x00:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_7;
break;
}
break;
case 0x04:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_8;
break;
}
break;
case 0x05:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_9;
break;
}
break;
case 0x06:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_10;
break;
}
break;
case 0x07:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_11;
break;
}
break;
case 0x08:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_12;
break;
}
break;
case 0x09:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_13;
break;
}
break;
case 0x0c:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_14;
break;
}
break;
case 0x0d:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_15;
break;
}
break;
case 0x10:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_16;
break;
}
break;
case 0x11:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_17;
break;
}
break;
case 0x15:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_18;
break;
}
break;
default: UNSUPPORTED(); break;
}
break;
case 0x80:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_1;
break;
}
break;
case 0x81:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_1;
break;
}
break;
case 0x82:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_1;
break;
}
break;
case 0x83:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_1;
break;
}
break;
case 0x84:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_2;
break;
}
break;
case 0x85:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_2;
break;
}
break;
case 0x86:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_2;
break;
}
break;
case 0x87:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_2;
break;
}
break;
case 0x88:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_3;
break;
}
break;
case 0x89:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_3;
break;
}
break;
case 0x8a:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_3;
break;
}
break;
case 0x8b:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_3;
break;
}
break;
case 0x8c:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_4;
break;
}
break;
case 0x8d:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_4;
break;
}
break;
case 0x8e:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_4;
break;
}
break;
case 0x8f:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_4;
break;
}
break;
case 0x90:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_5;
break;
}
break;
case 0x91:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_5;
break;
}
break;
case 0x92:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_5;
break;
}
break;
case 0x93:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_5;
break;
}
break;
case 0x94:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_6;
break;
}
break;
case 0x95:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_6;
break;
}
break;
case 0x96:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_6;
break;
}
break;
case 0x97:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_6;
break;
}
break;
case 0xa0:
GETBYTE ();
switch (op[2] & 0xff)
{
case 0x00:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_7;
break;
}
break;
case 0x02:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
op_semantics_19:
{
/** 0000 0110 1010 00ss 0000 0010 rsrc rdst adc %1%S1, %0 */
#line 494 "rx-decode.opc"
int ss AU = op[1] & 0x03;
#line 494 "rx-decode.opc"
int rsrc AU = (op[3] >> 4) & 0x0f;
#line 494 "rx-decode.opc"
int rdst AU = op[3] & 0x0f;
if (trace)
{
printf ("\033[33m%s\033[0m %02x %02x %02x %02x\n",
"/** 0000 0110 1010 00ss 0000 0010 rsrc rdst adc %1%S1, %0 */",
op[0], op[1], op[2], op[3]);
printf (" ss = 0x%x,", ss);
printf (" rsrc = 0x%x,", rsrc);
printf (" rdst = 0x%x\n", rdst);
}
SYNTAX("adc %1%S1, %0");
#line 494 "rx-decode.opc"
ID(adc); SPm(ss, rsrc, 2); DR(rdst); F_OSZC;
/*----------------------------------------------------------------------*/
/* ADD */
}
break;
}
break;
case 0x04:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_8;
break;
}
break;
case 0x05:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_9;
break;
}
break;
case 0x06:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_10;
break;
}
break;
case 0x07:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_11;
break;
}
break;
case 0x08:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_12;
break;
}
break;
case 0x09:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_13;
break;
}
break;
case 0x0c:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_14;
break;
}
break;
case 0x0d:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_15;
break;
}
break;
case 0x10:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_16;
break;
}
break;
case 0x11:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_17;
break;
}
break;
case 0x15:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_18;
break;
}
break;
default: UNSUPPORTED(); break;
}
break;
case 0xa1:
GETBYTE ();
switch (op[2] & 0xff)
{
case 0x00:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_7;
break;
}
break;
case 0x02:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_19;
break;
}
break;
case 0x04:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_8;
break;
}
break;
case 0x05:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_9;
break;
}
break;
case 0x06:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_10;
break;
}
break;
case 0x07:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_11;
break;
}
break;
case 0x08:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_12;
break;
}
break;
case 0x09:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_13;
break;
}
break;
case 0x0c:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_14;
break;
}
break;
case 0x0d:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_15;
break;
}
break;
case 0x10:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_16;
break;
}
break;
case 0x11:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_17;
break;
}
break;
case 0x15:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_18;
break;
}
break;
default: UNSUPPORTED(); break;
}
break;
case 0xa2:
GETBYTE ();
switch (op[2] & 0xff)
{
case 0x00:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_7;
break;
}
break;
case 0x02:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_19;
break;
}
break;
case 0x04:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_8;
break;
}
break;
case 0x05:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_9;
break;
}
break;
case 0x06:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_10;
break;
}
break;
case 0x07:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_11;
break;
}
break;
case 0x08:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_12;
break;
}
break;
case 0x09:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_13;
break;
}
break;
case 0x0c:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_14;
break;
}
break;
case 0x0d:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_15;
break;
}
break;
case 0x10:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_16;
break;
}
break;
case 0x11:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_17;
break;
}
break;
case 0x15:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_18;
break;
}
break;
default: UNSUPPORTED(); break;
}
break;
case 0xa3:
GETBYTE ();
switch (op[2] & 0xff)
{
case 0x00:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_7;
break;
}
break;
case 0x02:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_19;
break;
}
break;
case 0x04:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_8;
break;
}
break;
case 0x05:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_9;
break;
}
break;
case 0x06:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_10;
break;
}
break;
case 0x07:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_11;
break;
}
break;
case 0x08:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_12;
break;
}
break;
case 0x09:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_13;
break;
}
break;
case 0x0c:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_14;
break;
}
break;
case 0x0d:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_15;
break;
}
break;
case 0x10:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_16;
break;
}
break;
case 0x11:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_17;
break;
}
break;
case 0x15:
GETBYTE ();
switch (op[3] & 0x00)
{
case 0x00:
goto op_semantics_18;
break;
}
break;
default: UNSUPPORTED(); break;
}
break;
case 0xc0:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_1;
break;
}
break;
case 0xc1:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_1;
break;
}
break;
case 0xc2:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_1;
break;
}
break;
case 0xc3:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_1;
break;
}
break;
case 0xc4:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_2;
break;
}
break;
case 0xc5:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_2;
break;
}
break;
case 0xc6:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_2;
break;
}
break;
case 0xc7:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_2;
break;
}
break;
case 0xc8:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_3;
break;
}
break;
case 0xc9:
GETBYTE ();
switch (op[2] & 0x00)
{
case 0x00:
goto op_semantics_3;
break;
}
break;
case 0xca: