Home | History | Annotate | Line # | Download | only in opcodes
rl78-decode.opc revision 1.3
      1  1.1  christos /* -*- c -*- */
      2  1.3  christos /* Copyright (C) 2012-2015 Free Software Foundation, Inc.
      3  1.1  christos    Contributed by Red Hat.
      4  1.1  christos    Written by DJ Delorie.
      5  1.1  christos 
      6  1.1  christos    This file is part of the GNU opcodes library.
      7  1.1  christos 
      8  1.1  christos    This library is free software; you can redistribute it and/or modify
      9  1.1  christos    it under the terms of the GNU General Public License as published by
     10  1.1  christos    the Free Software Foundation; either version 3, or (at your option)
     11  1.1  christos    any later version.
     12  1.1  christos 
     13  1.1  christos    It is distributed in the hope that it will be useful, but WITHOUT
     14  1.1  christos    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     15  1.1  christos    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
     16  1.1  christos    License for more details.
     17  1.1  christos 
     18  1.1  christos    You should have received a copy of the GNU General Public License
     19  1.1  christos    along with this program; if not, write to the Free Software
     20  1.1  christos    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     21  1.1  christos    MA 02110-1301, USA.  */
     22  1.1  christos 
     23  1.1  christos #include "sysdep.h"
     24  1.1  christos #include <stdio.h>
     25  1.1  christos #include <stdlib.h>
     26  1.1  christos #include <string.h>
     27  1.1  christos #include "ansidecl.h"
     28  1.1  christos #include "opcode/rl78.h"
     29  1.1  christos 
     30  1.1  christos static int trace = 0;
     31  1.1  christos 
     32  1.1  christos typedef struct
     33  1.1  christos {
     34  1.1  christos   RL78_Opcode_Decoded * rl78;
     35  1.1  christos   int (* getbyte)(void *);
     36  1.1  christos   void * ptr;
     37  1.1  christos   unsigned char * op;
     38  1.1  christos } LocalData;
     39  1.1  christos 
     40  1.1  christos #define ID(x) rl78->id = RLO_##x, rl78->lineno = __LINE__
     41  1.1  christos #define OP(n,t,r,a) (rl78->op[n].type = t, \
     42  1.1  christos 		     rl78->op[n].reg = r,	     \
     43  1.1  christos 		     rl78->op[n].addend = a )
     44  1.1  christos #define OPX(n,t,r1,r2,a) \
     45  1.1  christos 	(rl78->op[n].type = t, \
     46  1.1  christos 	rl78->op[n].reg = r1, \
     47  1.1  christos 	rl78->op[n].reg2 = r2, \
     48  1.1  christos 	rl78->op[n].addend = a )
     49  1.1  christos 
     50  1.1  christos #define W() rl78->size = RL78_Word
     51  1.1  christos 
     52  1.1  christos #define AU ATTRIBUTE_UNUSED
     53  1.1  christos #define GETBYTE() (ld->op [ld->rl78->n_bytes++] = ld->getbyte (ld->ptr))
     54  1.1  christos #define B ((unsigned long) GETBYTE())
     55  1.1  christos 
     56  1.1  christos #define SYNTAX(x) rl78->syntax = x
     57  1.1  christos 
     58  1.1  christos #define UNSUPPORTED() \
     59  1.1  christos   rl78->syntax = "*unknown*"
     60  1.1  christos 
     61  1.1  christos #define RB(x) ((x)+RL78_Reg_X)
     62  1.1  christos #define RW(x) ((x)+RL78_Reg_AX)
     63  1.1  christos 
     64  1.1  christos #define Fz	rl78->flags = RL78_PSW_Z
     65  1.1  christos #define Fza	rl78->flags = RL78_PSW_Z | RL78_PSW_AC
     66  1.1  christos #define Fzc	rl78->flags = RL78_PSW_Z | RL78_PSW_CY
     67  1.1  christos #define Fzac	rl78->flags = RL78_PSW_Z | RL78_PSW_AC | RL78_PSW_CY
     68  1.1  christos #define Fa	rl78->flags = RL78_PSW_AC
     69  1.1  christos #define Fc	rl78->flags = RL78_PSW_CY
     70  1.1  christos #define Fac	rl78->flags = RL78_PSW_AC | RL78_PSW_CY
     71  1.1  christos 
     72  1.1  christos #define IMMU(bytes)   immediate (bytes, 0, ld)
     73  1.1  christos #define IMMS(bytes)   immediate (bytes, 1, ld)
     74  1.1  christos 
     75  1.1  christos static int
     76  1.1  christos immediate (int bytes, int sign_extend, LocalData * ld)
     77  1.1  christos {
     78  1.1  christos   unsigned long i = 0;
     79  1.1  christos 
     80  1.1  christos   switch (bytes)
     81  1.1  christos     {
     82  1.1  christos     case 1:
     83  1.1  christos       i |= B;
     84  1.1  christos       if (sign_extend && (i & 0x80))
     85  1.1  christos 	i -= 0x100;
     86  1.1  christos       break;
     87  1.1  christos     case 2:
     88  1.1  christos       i |= B;
     89  1.1  christos       i |= B << 8;
     90  1.1  christos       if (sign_extend && (i & 0x8000))
     91  1.1  christos 	i -= 0x10000;
     92  1.1  christos       break;
     93  1.1  christos     case 3:
     94  1.1  christos       i |= B;
     95  1.1  christos       i |= B << 8;
     96  1.1  christos       i |= B << 16;
     97  1.1  christos       if (sign_extend && (i & 0x800000))
     98  1.1  christos 	i -= 0x1000000;
     99  1.1  christos       break;
    100  1.1  christos     default:
    101  1.1  christos       fprintf (stderr, "Programmer error: immediate() called with invalid byte count %d\n", bytes);
    102  1.1  christos       abort();
    103  1.1  christos     }
    104  1.1  christos   return i;
    105  1.1  christos }
    106  1.1  christos 
    107  1.1  christos #define DC(c)		OP (0, RL78_Operand_Immediate, 0, c)
    108  1.1  christos #define DR(r)		OP (0, RL78_Operand_Register, RL78_Reg_##r, 0)
    109  1.1  christos #define DRB(r)		OP (0, RL78_Operand_Register, RB(r), 0)
    110  1.1  christos #define DRW(r)		OP (0, RL78_Operand_Register, RW(r), 0)
    111  1.1  christos #define DM(r,a)		OP (0, RL78_Operand_Indirect, RL78_Reg_##r, a)
    112  1.1  christos #define DM2(r1,r2,a)	OPX (0, RL78_Operand_Indirect, RL78_Reg_##r1, RL78_Reg_##r2, a)
    113  1.1  christos #define DE()		rl78->op[0].use_es = 1
    114  1.1  christos #define DB(b)		set_bit (rl78->op, b)
    115  1.1  christos #define DCY()		DR(PSW); DB(0)
    116  1.1  christos #define DPUSH()		OP (0, RL78_Operand_PreDec, RL78_Reg_SP, 0);
    117  1.1  christos 
    118  1.1  christos #define SC(c)		OP (1, RL78_Operand_Immediate, 0, c)
    119  1.1  christos #define SR(r)		OP (1, RL78_Operand_Register, RL78_Reg_##r, 0)
    120  1.1  christos #define SRB(r)		OP (1, RL78_Operand_Register, RB(r), 0)
    121  1.1  christos #define SRW(r)		OP (1, RL78_Operand_Register, RW(r), 0)
    122  1.1  christos #define SM(r,a)		OP (1, RL78_Operand_Indirect, RL78_Reg_##r, a)
    123  1.1  christos #define SM2(r1,r2,a)	OPX (1, RL78_Operand_Indirect, RL78_Reg_##r1, RL78_Reg_##r2, a)
    124  1.1  christos #define SE()		rl78->op[1].use_es = 1
    125  1.1  christos #define SB(b)		set_bit (rl78->op+1, b)
    126  1.1  christos #define SCY()		SR(PSW); SB(0)
    127  1.1  christos #define COND(c)		rl78->op[1].condition = RL78_Condition_##c
    128  1.1  christos #define SPOP()		OP (1, RL78_Operand_PostInc, RL78_Reg_SP, 0);
    129  1.1  christos 
    130  1.1  christos static void
    131  1.1  christos set_bit (RL78_Opcode_Operand *op, int bit)
    132  1.1  christos {
    133  1.1  christos   op->bit_number = bit;
    134  1.1  christos   switch (op->type) {
    135  1.1  christos   case RL78_Operand_Register:
    136  1.1  christos     op->type = RL78_Operand_Bit;
    137  1.1  christos     break;
    138  1.1  christos   case RL78_Operand_Indirect:
    139  1.1  christos     op->type = RL78_Operand_BitIndirect;
    140  1.1  christos     break;
    141  1.1  christos   default:
    142  1.1  christos     break;
    143  1.1  christos   }
    144  1.1  christos }
    145  1.1  christos 
    146  1.1  christos static int
    147  1.1  christos saddr (int x)
    148  1.1  christos {
    149  1.1  christos   if (x < 0x20)
    150  1.1  christos     return 0xfff00 + x;
    151  1.1  christos   return 0xffe00 + x;
    152  1.1  christos }
    153  1.1  christos 
    154  1.1  christos static int
    155  1.1  christos sfr (int x)
    156  1.1  christos {
    157  1.1  christos   return 0xfff00 + x;
    158  1.1  christos }
    159  1.1  christos 
    160  1.1  christos #define SADDR saddr (IMMU (1))
    161  1.1  christos #define SFR sfr (IMMU (1))
    162  1.1  christos 
    163  1.1  christos int
    164  1.1  christos rl78_decode_opcode (unsigned long pc AU,
    165  1.1  christos 		  RL78_Opcode_Decoded * rl78,
    166  1.1  christos 		  int (* getbyte)(void *),
    167  1.1  christos 		  void * ptr)
    168  1.1  christos {
    169  1.1  christos   LocalData lds, * ld = &lds;
    170  1.1  christos   unsigned char op_buf[20] = {0};
    171  1.1  christos   unsigned char *op = op_buf;
    172  1.1  christos   int op0, op1;
    173  1.1  christos 
    174  1.1  christos   lds.rl78 = rl78;
    175  1.1  christos   lds.getbyte = getbyte;
    176  1.1  christos   lds.ptr = ptr;
    177  1.1  christos   lds.op = op;
    178  1.1  christos 
    179  1.1  christos   memset (rl78, 0, sizeof (*rl78));
    180  1.1  christos 
    181  1.1  christos  start_again:
    182  1.1  christos 
    183  1.1  christos /* Byte registers, not including A.  */
    184  1.1  christos /** VARY rba 000 010 011 100 101 110 111 */
    185  1.1  christos /* Word registers, not including AX.  */
    186  1.1  christos /** VARY ra 01 10 11 */
    187  1.1  christos 
    188  1.1  christos /*----------------------------------------------------------------------*/
    189  1.1  christos /* ES: prefix								*/
    190  1.1  christos 
    191  1.1  christos /** 0001 0001			es:					*/
    192  1.1  christos   DE(); SE();
    193  1.1  christos   op ++;
    194  1.1  christos   pc ++;
    195  1.1  christos   goto start_again;
    196  1.1  christos 
    197  1.1  christos /*----------------------------------------------------------------------*/
    198  1.1  christos 
    199  1.1  christos /** 0000 1111			add	%0, %e!1			*/
    200  1.1  christos   ID(add); DR(A); SM(None, IMMU(2)); Fzac;
    201  1.1  christos 
    202  1.1  christos /** 0000 1101			add	%0, %e1				*/
    203  1.1  christos   ID(add); DR(A); SM(HL, 0); Fzac;
    204  1.1  christos 
    205  1.1  christos /** 0110 0001 1000 000		add	%0, %e1				*/
    206  1.1  christos   ID(add); DR(A); SM2(HL, B, 0); Fzac;
    207  1.1  christos 
    208  1.1  christos /** 0000 1110			add	%0, %e1				*/
    209  1.1  christos   ID(add); DR(A); SM(HL, IMMU(1)); Fzac;
    210  1.1  christos 
    211  1.1  christos /** 0110 0001 1000 0010		add	%0, %e1				*/
    212  1.1  christos   ID(add); DR(A); SM2(HL, C, 0); Fzac;
    213  1.1  christos 
    214  1.1  christos /** 0000 1100			add	%0, #%1				*/
    215  1.1  christos   ID(add); DR(A); SC(IMMU(1)); Fzac;
    216  1.1  christos 
    217  1.1  christos /** 0110 0001 0000 1rba		add	%0, %1				*/
    218  1.1  christos   ID(add); DR(A); SRB(rba); Fzac;
    219  1.1  christos 
    220  1.1  christos /** 0000 1011			add	%0, %1				*/
    221  1.1  christos   ID(add); DR(A); SM(None, SADDR); Fzac;
    222  1.1  christos 
    223  1.1  christos /** 0110 0001 0000 0reg		add	%0, %1				*/
    224  1.1  christos   ID(add); DRB(reg); SR(A); Fzac;
    225  1.1  christos 
    226  1.1  christos /** 0000 1010			add	%0, #%1				*/
    227  1.1  christos   ID(add); DM(None, SADDR); SC(IMMU(1)); Fzac;
    228  1.1  christos 
    229  1.1  christos /*----------------------------------------------------------------------*/
    230  1.1  christos 
    231  1.1  christos /** 0001 1111			addc	%0, %e!1			*/
    232  1.1  christos   ID(addc); DR(A); SM(None, IMMU(2)); Fzac;
    233  1.1  christos 
    234  1.1  christos /** 0001 1101			addc	%0, %e1				*/
    235  1.1  christos   ID(addc); DR(A); SM(HL, 0); Fzac;
    236  1.1  christos 
    237  1.1  christos /** 0110 0001 1001 0000		addc	%0, %e1				*/
    238  1.1  christos   ID(addc); DR(A); SM2(HL, B, 0); Fzac;
    239  1.1  christos 
    240  1.1  christos /** 0110 0001 1001 0010		addc	%0, %e1				*/
    241  1.1  christos   ID(addc); DR(A); SM2(HL, C, 0); Fzac;
    242  1.1  christos 
    243  1.1  christos /** 0001 1110			addc	%0, %e1				*/
    244  1.1  christos   ID(addc); DR(A); SM(HL, IMMU(1)); Fzac;
    245  1.1  christos 
    246  1.1  christos /** 0001 1100			addc	%0, #%1				*/
    247  1.1  christos   ID(addc); DR(A); SC(IMMU(1)); Fzac;
    248  1.1  christos 
    249  1.1  christos /** 0110 0001 0001 1rba		addc	%0, %1				*/
    250  1.1  christos   ID(addc); DR(A); SRB(rba); Fzac;
    251  1.1  christos 
    252  1.1  christos /** 0110 0001 0001 0reg		addc	%0, %1				*/
    253  1.1  christos   ID(addc); DRB(reg); SR(A); Fzac;
    254  1.1  christos 
    255  1.1  christos /** 0001 1011			addc	%0, %1				*/
    256  1.1  christos   ID(addc); DR(A); SM(None, SADDR); Fzac;
    257  1.1  christos 
    258  1.1  christos /** 0001 1010			addc	%0, #%1				*/
    259  1.1  christos   ID(addc); DM(None, SADDR); SC(IMMU(1)); Fzac;
    260  1.1  christos 
    261  1.1  christos /*----------------------------------------------------------------------*/
    262  1.1  christos 
    263  1.1  christos /** 0000 0010			addw	%0, %e!1			*/
    264  1.1  christos   ID(add); W(); DR(AX); SM(None, IMMU(2)); Fzac;
    265  1.1  christos 
    266  1.1  christos /** 0110 0001 0000 1001		addw	%0, %e1			*/
    267  1.1  christos   ID(add); W(); DR(AX); SM(HL, IMMU(1)); Fzac;
    268  1.1  christos 
    269  1.1  christos /** 0000 0100			addw	%0, #%1				*/
    270  1.1  christos   ID(add); W(); DR(AX); SC(IMMU(2)); Fzac;
    271  1.1  christos 
    272  1.1  christos /** 0000 0rw1			addw	%0, %1				*/
    273  1.1  christos   ID(add); W(); DR(AX); SRW(rw); Fzac;
    274  1.1  christos 
    275  1.1  christos /** 0000 0110			addw	%0, %1				*/
    276  1.1  christos   ID(add); W(); DR(AX); SM(None, SADDR); Fzac;
    277  1.1  christos 
    278  1.1  christos /** 0001 0000			addw	%0, #%1				*/
    279  1.1  christos   ID(add); W(); DR(SP); SC(IMMU(1)); Fzac;
    280  1.1  christos 
    281  1.1  christos /*----------------------------------------------------------------------*/
    282  1.1  christos 
    283  1.1  christos /** 0101 1111			and	%0, %e!1			*/
    284  1.1  christos   ID(and); DR(A); SM(None, IMMU(2)); Fz;
    285  1.1  christos 
    286  1.1  christos /** 0101 1101			and	%0, %e1			*/
    287  1.1  christos   ID(and); DR(A); SM(HL, 0); Fz;
    288  1.1  christos 
    289  1.1  christos /** 0110 0001 1101 0000		and	%0, %e1			*/
    290  1.1  christos   ID(and); DR(A); SM2(HL, B, 0); Fz;
    291  1.1  christos 
    292  1.1  christos /** 0101 1110			and	%0, %e1			*/
    293  1.1  christos   ID(and); DR(A); SM(HL, IMMU(1)); Fz;
    294  1.1  christos 
    295  1.1  christos /** 0110 0001 1101 0010		and	%0, %e1			*/
    296  1.1  christos   ID(and); DR(A); SM2(HL, C, 0); Fz;
    297  1.1  christos 
    298  1.1  christos /** 0101 1100	       		and	%0, #%1				*/
    299  1.1  christos   ID(and); DR(A); SC(IMMU(1)); Fz;
    300  1.1  christos 
    301  1.1  christos /** 0110 0001 0101 1rba		and	%0, %1				*/
    302  1.1  christos   ID(and); DR(A); SRB(rba); Fz;
    303  1.1  christos 
    304  1.1  christos /** 0110 0001 0101 0reg		and	%0, %1				*/
    305  1.1  christos   ID(and); DRB(reg); SR(A); Fz;
    306  1.1  christos 
    307  1.1  christos /** 0101 1011	       		and	%0, %1				*/
    308  1.1  christos   ID(and); DR(A); SM(None, SADDR); Fz;
    309  1.1  christos 
    310  1.1  christos /** 0101 1010	       		and	%0, #%1				*/
    311  1.1  christos   ID(and); DM(None, SADDR); SC(IMMU(1)); Fz;
    312  1.1  christos 
    313  1.1  christos /*----------------------------------------------------------------------*/
    314  1.1  christos 
    315  1.1  christos /** 0111 0001 1bit 0101		and1	cy, %e1			*/
    316  1.1  christos   ID(and); DCY(); SM(HL, 0); SB(bit);
    317  1.1  christos 
    318  1.1  christos /** 0111 0001 1bit 1101		and1	cy, %1				*/
    319  1.1  christos   ID(and); DCY(); SR(A); SB(bit);
    320  1.1  christos 
    321  1.1  christos /** 0111 0001 0bit 1101		and1	cy, %s1				*/
    322  1.1  christos   ID(and); DCY(); SM(None, SFR); SB(bit);
    323  1.1  christos 
    324  1.1  christos /** 0111 0001 0bit 0101		and1	cy, %s1				*/
    325  1.1  christos   ID(and); DCY(); SM(None, SADDR); SB(bit);
    326  1.1  christos 
    327  1.1  christos /*----------------------------------------------------------------------*/
    328  1.1  christos 
    329  1.1  christos /* Note that the branch insns need to be listed before the shift
    330  1.1  christos    ones, as "shift count of zero" means "branch insn" */
    331  1.1  christos 
    332  1.1  christos /** 1101 1100			bc	$%a0				*/
    333  1.1  christos   ID(branch_cond); DC(pc+IMMS(1)+2); SR(None); COND(C);
    334  1.1  christos 
    335  1.1  christos /** 1101 1110			bnc	$%a0				*/
    336  1.1  christos   ID(branch_cond); DC(pc+IMMS(1)+2); SR(None); COND(NC);
    337  1.1  christos 
    338  1.1  christos /** 0110 0001 1100 0011		bh	$%a0				*/
    339  1.1  christos   ID(branch_cond); DC(pc+IMMS(1)+3); SR(None); COND(H);
    340  1.1  christos 
    341  1.1  christos /** 0110 0001 1101 0011		bnh	$%a0				*/
    342  1.1  christos   ID(branch_cond); DC(pc+IMMS(1)+3); SR(None); COND(NH);
    343  1.1  christos 
    344  1.1  christos /** 1101 1101			bz	$%a0				*/
    345  1.1  christos   ID(branch_cond); DC(pc+IMMS(1)+2); SR(None); COND(Z);
    346  1.1  christos 
    347  1.1  christos /** 1101 1111			bnz	$%a0				*/
    348  1.1  christos   ID(branch_cond); DC(pc+IMMS(1)+2); SR(None); COND(NZ);
    349  1.1  christos 
    350  1.1  christos /*----------------------------------------------------------------------*/
    351  1.1  christos 
    352  1.1  christos /** 0011 0001 1bit 0101		bf	%e1, $%a0			*/
    353  1.1  christos   ID(branch_cond); DC(pc+IMMS(1)+3); SM(HL,0); SB(bit); COND(F);
    354  1.1  christos 
    355  1.1  christos /** 0011 0001 0bit 0101		bf	%1, $%a0			*/
    356  1.1  christos   ID(branch_cond); DC(pc+IMMS(1)+3); SR(A); SB(bit); COND(F);
    357  1.1  christos 
    358  1.1  christos /** 0011 0001 1bit 0100		bf	%s1, $%a0			*/
    359  1.1  christos   ID(branch_cond); SM(None, SFR); SB(bit); DC(pc+IMMS(1)+4); COND(F);
    360  1.1  christos 
    361  1.1  christos /** 0011 0001 0bit 0100		bf	%s1, $%a0			*/
    362  1.1  christos   ID(branch_cond); SM(None, SADDR); SB(bit); DC(pc+IMMS(1)+4); COND(F);
    363  1.1  christos 
    364  1.1  christos /*----------------------------------------------------------------------*/
    365  1.1  christos 
    366  1.1  christos /** 1110 1100			br	!%!a0				*/
    367  1.1  christos   ID(branch); DC(IMMU(3));
    368  1.1  christos 
    369  1.1  christos /** 1110 1101			br	%!a0				*/
    370  1.1  christos   ID(branch); DC(IMMU(2));
    371  1.1  christos 
    372  1.1  christos /** 1110 1110			br	$%!a0				*/
    373  1.1  christos   ID(branch); DC(pc+IMMS(2)+3);
    374  1.1  christos 
    375  1.1  christos /** 1110 1111			br	$%a0				*/
    376  1.1  christos   ID(branch); DC(pc+IMMS(1)+2);
    377  1.1  christos 
    378  1.1  christos /** 0110 0001 1100 1011		br	ax				*/
    379  1.1  christos   ID(branch); DR(AX);
    380  1.1  christos 
    381  1.1  christos /*----------------------------------------------------------------------*/
    382  1.1  christos 
    383  1.1  christos /** 1111 1111			brk1					*/
    384  1.1  christos   ID(break);
    385  1.1  christos 
    386  1.1  christos /** 0110 0001 1100 1100		brk					*/
    387  1.1  christos   ID(break);
    388  1.1  christos 
    389  1.1  christos /*----------------------------------------------------------------------*/
    390  1.1  christos 
    391  1.1  christos /** 0011 0001 1bit 0011		bt	%e1, $%a0			*/
    392  1.1  christos   ID(branch_cond); DC(pc+IMMS(1)+3); SM(HL,0); SB(bit); COND(T);
    393  1.1  christos 
    394  1.1  christos /** 0011 0001 0bit 0011		bt	%1, $%a0			*/
    395  1.1  christos   ID(branch_cond); DC(pc+IMMS(1)+3); SR(A); SB(bit); COND(T);
    396  1.1  christos 
    397  1.1  christos /** 0011 0001 1bit 0010		bt	%s1, $%a0			*/
    398  1.1  christos   ID(branch_cond); SM(None, SFR); SB(bit); DC(pc+IMMS(1)+4); COND(T);
    399  1.1  christos 
    400  1.1  christos /** 0011 0001 0bit 0010		bt	%s1, $%a0			*/
    401  1.1  christos   ID(branch_cond); SM(None, SADDR); SB(bit); DC(pc+IMMS(1)+4); COND(T);
    402  1.1  christos 
    403  1.1  christos /*----------------------------------------------------------------------*/
    404  1.1  christos 
    405  1.1  christos /** 0011 0001 1bit 0001		btclr	%e1, $%a0			*/
    406  1.1  christos   ID(branch_cond_clear); DC(pc+IMMS(1)+3); SM(HL,0); SB(bit); COND(T);
    407  1.1  christos 
    408  1.1  christos /** 0011 0001 0bit 0001		btclr	%1, $%a0			*/
    409  1.1  christos   ID(branch_cond_clear); DC(pc+IMMS(1)+3); SR(A); SB(bit); COND(T);
    410  1.1  christos 
    411  1.1  christos /** 0011 0001 1bit 0000		btclr	%s1, $%a0			*/
    412  1.1  christos   ID(branch_cond_clear); SM(None, SFR); SB(bit); DC(pc+IMMS(1)+4); COND(T);
    413  1.1  christos 
    414  1.1  christos /** 0011 0001 0bit 0000		btclr	%s1, $%a0			*/
    415  1.1  christos   ID(branch_cond_clear); SM(None, SADDR); SB(bit); DC(pc+IMMS(1)+4); COND(T);
    416  1.1  christos 
    417  1.1  christos /*----------------------------------------------------------------------*/
    418  1.1  christos 
    419  1.1  christos /** 1111 1100			call	!%!a0				*/
    420  1.1  christos   ID(call); DC(IMMU(3));
    421  1.1  christos 
    422  1.1  christos /** 1111 1101			call	%!a0				*/
    423  1.1  christos   ID(call); DC(IMMU(2));
    424  1.1  christos 
    425  1.1  christos /** 1111 1110			call	$%!a0				*/
    426  1.1  christos   ID(call); DC(pc+IMMS(2)+3);
    427  1.1  christos 
    428  1.1  christos /** 0110 0001 11rg 1010		call	%0				*/
    429  1.1  christos   ID(call); DRW(rg);
    430  1.1  christos 
    431  1.1  christos /** 0110 0001 1nnn 01mm		callt	[%x0]				*/
    432  1.1  christos   ID(call); DM(None, 0x80 + mm*16 + nnn*2);
    433  1.1  christos 
    434  1.1  christos /*----------------------------------------------------------------------*/
    435  1.1  christos 
    436  1.1  christos /** 0111 0001 0bit 1000		clr1	%e!0				*/
    437  1.1  christos   ID(mov); DM(None, IMMU(2)); DB(bit); SC(0);
    438  1.1  christos 
    439  1.1  christos /** 0111 0001 1bit 0011		clr1	%e0				*/
    440  1.1  christos   ID(mov); DM(HL, 0); DB(bit); SC(0);
    441  1.1  christos 
    442  1.1  christos /** 0111 0001 1bit 1011		clr1	%0				*/
    443  1.1  christos   ID(mov); DR(A); DB(bit); SC(0);
    444  1.1  christos 
    445  1.1  christos /** 0111 0001 1000 1000		clr1	cy				*/
    446  1.1  christos   ID(mov); DCY(); SC(0);
    447  1.1  christos 
    448  1.1  christos /** 0111 0001 0bit 1011		clr1	%s0				*/
    449  1.1  christos   op0 = SFR;
    450  1.1  christos   ID(mov); DM(None, op0); DB(bit); SC(0);
    451  1.1  christos   if (op0 == RL78_SFR_PSW && bit == 7)
    452  1.1  christos     rl78->syntax = "di";
    453  1.1  christos 
    454  1.1  christos /** 0111 0001 0bit 0011		clr1	%0				*/
    455  1.1  christos   ID(mov); DM(None, SADDR); DB(bit); SC(0);
    456  1.1  christos 
    457  1.1  christos /*----------------------------------------------------------------------*/
    458  1.1  christos 
    459  1.1  christos /** 1111 0101			clrb	%e!0				*/
    460  1.1  christos   ID(mov); DM(None, IMMU(2)); SC(0);
    461  1.1  christos 
    462  1.1  christos /** 1111 00rg			clrb	%0				*/
    463  1.1  christos   ID(mov); DRB(rg); SC(0);
    464  1.1  christos 
    465  1.1  christos /** 1111 0100			clrb	%0				*/
    466  1.1  christos   ID(mov); DM(None, SADDR); SC(0);
    467  1.1  christos 
    468  1.1  christos /*----------------------------------------------------------------------*/
    469  1.1  christos 
    470  1.1  christos /** 1111 0110			clrw	%0				*/
    471  1.1  christos   ID(mov); DR(AX); SC(0);
    472  1.1  christos 
    473  1.1  christos /** 1111 0111			clrw	%0				*/
    474  1.1  christos   ID(mov); DR(BC); SC(0);
    475  1.1  christos 
    476  1.1  christos /*----------------------------------------------------------------------*/
    477  1.1  christos 
    478  1.1  christos /** 0100 0000			cmp	%e!0, #%1			*/
    479  1.1  christos   ID(cmp); DM(None, IMMU(2)); SC(IMMU(1)); Fzac;
    480  1.1  christos 
    481  1.1  christos /** 0100 1010			cmp	%0, #%1				*/
    482  1.1  christos   ID(cmp); DM(None, SADDR); SC(IMMU(1)); Fzac;
    483  1.1  christos 
    484  1.1  christos /** 0100 1111			cmp	%0, %e!1			*/
    485  1.1  christos   ID(cmp); DR(A); SM(None, IMMU(2)); Fzac;
    486  1.1  christos 
    487  1.1  christos /** 0100 1101			cmp	%0, %e1				*/
    488  1.1  christos   ID(cmp); DR(A); SM(HL, 0); Fzac;
    489  1.1  christos 
    490  1.1  christos /** 0110 0001 1100 0000		cmp	%0, %e1				*/
    491  1.1  christos   ID(cmp); DR(A); SM2(HL, B, 0); Fzac;
    492  1.1  christos 
    493  1.1  christos /** 0110 0001 1100 0010		cmp	%0, %e1				*/
    494  1.1  christos   ID(cmp); DR(A); SM2(HL, C, 0); Fzac;
    495  1.1  christos 
    496  1.1  christos /** 0100 1110			cmp	%0, %e1				*/
    497  1.1  christos   ID(cmp); DR(A); SM(HL, IMMU(1)); Fzac;
    498  1.1  christos 
    499  1.1  christos /** 0100 1100			cmp	%0, #%1				*/
    500  1.1  christos   ID(cmp); DR(A); SC(IMMU(1)); Fzac;
    501  1.1  christos 
    502  1.1  christos /** 0110 0001 0100 1rba		cmp	%0, %1				*/
    503  1.1  christos   ID(cmp); DR(A); SRB(rba); Fzac;
    504  1.1  christos 
    505  1.1  christos /** 0110 0001 0100 0reg		cmp	%0, %1				*/
    506  1.1  christos   ID(cmp); DRB(reg); SR(A); Fzac;
    507  1.1  christos 
    508  1.1  christos /** 0100 1011			cmp	%0, %1				*/
    509  1.1  christos   ID(cmp); DR(A); SM(None, SADDR); Fzac;
    510  1.1  christos 
    511  1.1  christos /*----------------------------------------------------------------------*/
    512  1.1  christos 
    513  1.1  christos /** 1101 0101			cmp0	%e!0				*/
    514  1.1  christos   ID(cmp); DM(None, IMMU(2)); SC(0); Fzac;
    515  1.1  christos 
    516  1.1  christos /** 1101 00rg			cmp0	%0				*/
    517  1.1  christos   ID(cmp); DRB(rg); SC(0); Fzac;
    518  1.1  christos 
    519  1.1  christos /** 1101 0100			cmp0	%0				*/
    520  1.1  christos   ID(cmp); DM(None, SADDR); SC(0); Fzac;
    521  1.1  christos 
    522  1.1  christos /*----------------------------------------------------------------------*/
    523  1.1  christos 
    524  1.1  christos /** 0110 0001 1101 1110		cmps	%0, %e1				*/
    525  1.1  christos   ID(cmp); DR(X); SM(HL, IMMU(1)); Fzac;
    526  1.1  christos 
    527  1.1  christos /*----------------------------------------------------------------------*/
    528  1.1  christos 
    529  1.1  christos /** 0100 0010			cmpw	%0, %e!1			*/
    530  1.1  christos   ID(cmp); W(); DR(AX); SM(None, IMMU(2)); Fzac;
    531  1.1  christos 
    532  1.1  christos /** 0110 0001 0100 1001		cmpw	%0, %e1				*/
    533  1.1  christos   ID(cmp); W(); DR(AX); SM(HL, IMMU(1)); Fzac;
    534  1.1  christos 
    535  1.1  christos /** 0100 0100			cmpw	%0, #%1				*/
    536  1.1  christos   ID(cmp); W(); DR(AX); SC(IMMU(2)); Fzac;
    537  1.1  christos 
    538  1.1  christos /** 0100 0ra1			cmpw	%0, %1				*/
    539  1.1  christos   ID(cmp); W(); DR(AX); SRW(ra); Fzac;
    540  1.1  christos 
    541  1.1  christos /** 0100 0110			cmpw	%0, %1				*/
    542  1.1  christos   ID(cmp); W(); DR(AX); SM(None, SADDR); Fzac;
    543  1.1  christos 
    544  1.1  christos /*----------------------------------------------------------------------*/
    545  1.1  christos 
    546  1.1  christos /** 1011 0000			dec	%e!0				*/
    547  1.1  christos   ID(sub); DM(None, IMMU(2)); SC(1); Fza;
    548  1.1  christos 
    549  1.1  christos /** 0110 0001 0110 1001		dec	%e0				*/
    550  1.1  christos   ID(sub); DM(HL, IMMU(1)); SC(1); Fza;
    551  1.1  christos 
    552  1.1  christos /** 1001 0reg			dec	%0				*/
    553  1.1  christos   ID(sub); DRB(reg); SC(1); Fza;
    554  1.1  christos 
    555  1.1  christos /** 1011 0100			dec	%0				*/
    556  1.1  christos   ID(sub); DM(None, SADDR); SC(1); Fza;
    557  1.1  christos 
    558  1.1  christos /*----------------------------------------------------------------------*/
    559  1.1  christos 
    560  1.1  christos /** 1011 0010			decw	%e!0				*/
    561  1.1  christos   ID(sub); W(); DM(None, IMMU(2)); SC(1);
    562  1.1  christos 
    563  1.1  christos /** 0110 0001 1000 1001		decw	%e0				*/
    564  1.1  christos   ID(sub); W(); DM(HL, IMMU(1)); SC(1);
    565  1.1  christos 
    566  1.1  christos /** 1011 0rg1 			decw	%0				*/
    567  1.1  christos   ID(sub); W(); DRW(rg); SC(1);
    568  1.1  christos 
    569  1.1  christos /** 1011 0110			decw	%0				*/
    570  1.1  christos   ID(sub); W(); DM(None, SADDR); SC(1);
    571  1.1  christos 
    572  1.1  christos /*----------------------------------------------------------------------*/
    573  1.1  christos 
    574  1.1  christos /** 0110 0001 1110 1101		halt					*/
    575  1.1  christos   ID(halt);
    576  1.1  christos 
    577  1.1  christos /*----------------------------------------------------------------------*/
    578  1.1  christos 
    579  1.1  christos /** 1010 0000			inc	%e!0				*/
    580  1.1  christos   ID(add); DM(None, IMMU(2)); SC(1); Fza;
    581  1.1  christos 
    582  1.1  christos /** 0110 0001 0101 1001		inc	%e0				*/
    583  1.1  christos   ID(add); DM(HL, IMMU(1)); SC(1); Fza;
    584  1.1  christos 
    585  1.1  christos /** 1000 0reg			inc	%0				*/
    586  1.1  christos   ID(add); DRB(reg); SC(1); Fza;
    587  1.1  christos 
    588  1.1  christos /** 1010 0100			inc	%0				*/
    589  1.1  christos   ID(add); DM(None, SADDR); SC(1); Fza;
    590  1.1  christos 
    591  1.1  christos /*----------------------------------------------------------------------*/
    592  1.1  christos 
    593  1.1  christos /** 1010 0010			incw	%e!0				*/
    594  1.1  christos   ID(add); W(); DM(None, IMMU(2)); SC(1);
    595  1.1  christos 
    596  1.1  christos /** 0110 0001 0111 1001		incw	%e0				*/
    597  1.1  christos   ID(add); W(); DM(HL, IMMU(1)); SC(1);
    598  1.1  christos 
    599  1.1  christos /** 1010 0rg1			incw	%0				*/
    600  1.1  christos   ID(add); W(); DRW(rg); SC(1);
    601  1.1  christos 
    602  1.1  christos /** 1010 0110			incw	%0				*/
    603  1.1  christos   ID(add); W(); DM(None, SADDR); SC(1);
    604  1.1  christos 
    605  1.1  christos /*----------------------------------------------------------------------*/
    606  1.1  christos 
    607  1.1  christos /** 1100 1111			mov	%e!0, #%1			*/
    608  1.1  christos   ID(mov); DM(None, IMMU(2)); SC(IMMU(1));
    609  1.1  christos 
    610  1.1  christos /** 1001 1111			mov	%e!0, %1			*/
    611  1.1  christos   ID(mov); DM(None, IMMU(2)); SR(A);
    612  1.1  christos 
    613  1.1  christos /** 1001 1001			mov	%e0,%1				*/
    614  1.1  christos   ID(mov); DM(DE, 0); SR(A);
    615  1.1  christos 
    616  1.1  christos /** 1100 1010			mov	%e0, #%1			*/
    617  1.1  christos   ID(mov); DM(DE, IMMU(1)); SC(IMMU(1));
    618  1.1  christos 
    619  1.1  christos /** 1001 1010			mov	%e0, %1				*/
    620  1.1  christos   ID(mov); DM(DE, IMMU(1)); SR(A);
    621  1.1  christos 
    622  1.1  christos /** 1001 1011			mov	%e0,%1				*/
    623  1.1  christos   ID(mov); DM(HL, 0); SR(A);
    624  1.1  christos 
    625  1.1  christos /** 0110 0001 1101 1001		mov	%e0, %1				*/
    626  1.1  christos   ID(mov); DM2(HL, B, 0); SR(A);
    627  1.1  christos 
    628  1.1  christos /** 1100 1100			mov	%e0, #%1			*/
    629  1.1  christos   ID(mov); DM(HL, IMMU(1)); SC(IMMU(1));
    630  1.1  christos 
    631  1.1  christos /** 1001 1100			mov	%e0, %1				*/
    632  1.1  christos   ID(mov); DM(HL, IMMU(1)); SR(A);
    633  1.1  christos 
    634  1.1  christos /** 0110 0001 1111 1001		mov	%e0, %1				*/
    635  1.1  christos   ID(mov); DM2(HL, C, 0); SR(A);
    636  1.1  christos 
    637  1.1  christos /** 1100 1000			mov	%0, #%1				*/
    638  1.1  christos   ID(mov); DM(SP, IMMU(1)); SC(IMMU(1));
    639  1.1  christos 
    640  1.1  christos /** 1001 1000			mov	%0, %1				*/
    641  1.1  christos   ID(mov); DM(SP, IMMU(1)); SR(A);
    642  1.1  christos 
    643  1.1  christos /** 1000 1111			mov	%0, %e!1			*/
    644  1.1  christos   ID(mov); DR(A); SM(None, IMMU(2));
    645  1.1  christos 
    646  1.1  christos /** 1000 1001			mov	%0, %e1				*/
    647  1.1  christos   ID(mov); DR(A); SM(DE, 0);
    648  1.1  christos 
    649  1.1  christos /** 1000 1010			mov	%0, %e1				*/
    650  1.1  christos   ID(mov); DR(A); SM(DE, IMMU(1));
    651  1.1  christos 
    652  1.1  christos /** 1000 1011			mov	%0, %e1				*/
    653  1.1  christos   ID(mov); DR(A); SM(HL, 0);
    654  1.1  christos 
    655  1.1  christos /** 1000 1100			mov	%0, %e1				*/
    656  1.1  christos   ID(mov); DR(A); SM(HL, IMMU(1));
    657  1.1  christos 
    658  1.1  christos /** 0110 0001 1100 1001		mov	%0, %e1				*/
    659  1.1  christos   ID(mov); DR(A); SM2(HL, B, 0);
    660  1.1  christos 
    661  1.1  christos /** 0110 0001 1110 1001		mov	%0, %e1				*/
    662  1.1  christos   ID(mov); DR(A); SM2(HL, C, 0);
    663  1.1  christos 
    664  1.1  christos /** 1000 1000			mov	%0, %e1				*/
    665  1.1  christos   ID(mov); DR(A); SM(SP, IMMU(1));
    666  1.1  christos 
    667  1.1  christos /** 0101 0reg			mov	%0, #%1				*/
    668  1.1  christos   ID(mov); DRB(reg); SC(IMMU(1));
    669  1.1  christos 
    670  1.1  christos /** 0110 0rba			mov	%0, %1				*/
    671  1.1  christos   ID(mov); DR(A); SRB(rba);
    672  1.1  christos 
    673  1.1  christos /** 1000 1110 1111 1101		mov	%0, %1				*/
    674  1.1  christos   ID(mov); DR(A); SR(ES);
    675  1.1  christos 
    676  1.1  christos /** 0000 1001			mov	%0, %e1				*/
    677  1.1  christos   ID(mov); DR(A); SM(B, IMMU(2));
    678  1.1  christos 
    679  1.1  christos /** 0100 1001			mov	%0, %e1				*/
    680  1.1  christos   ID(mov); DR(A); SM(BC, IMMU(2));
    681  1.1  christos 
    682  1.1  christos /** 0010 1001			mov	%0, %e1				*/
    683  1.1  christos   ID(mov); DR(A); SM(C, IMMU(2));
    684  1.1  christos 
    685  1.1  christos /** 1000 1110			mov	%0, %s1				*/
    686  1.1  christos   ID(mov); DR(A); SM(None, SFR);
    687  1.1  christos 
    688  1.1  christos /** 1000 1101			mov	%0, %1				*/
    689  1.1  christos   ID(mov); DR(A); SM(None, SADDR);
    690  1.1  christos 
    691  1.1  christos /** 1110 1001			mov	%0, %e!1			*/
    692  1.1  christos   ID(mov); DR(B); SM(None, IMMU(2));
    693  1.1  christos 
    694  1.1  christos /** 0111 0rba			mov	%0, %1				*/
    695  1.1  christos   ID(mov); DRB(rba); SR(A);
    696  1.1  christos 
    697  1.1  christos /** 1110 1000			mov	%0, %1				*/
    698  1.1  christos   ID(mov); DR(B); SM(None, SADDR);
    699  1.1  christos 
    700  1.1  christos /** 1111 1001			mov	%0, %e!1			*/
    701  1.1  christos   ID(mov); DR(C); SM(None, IMMU(2));
    702  1.1  christos 
    703  1.1  christos /** 1111 1000			mov	%0, %1				*/
    704  1.1  christos   ID(mov); DR(C); SM(None, SADDR);
    705  1.1  christos 
    706  1.1  christos /** 1101 1001			mov	%0, %e!1			*/
    707  1.1  christos   ID(mov); DR(X); SM(None, IMMU(2));
    708  1.1  christos 
    709  1.1  christos /** 1101 1000			mov	%0, %1				*/
    710  1.1  christos   ID(mov); DR(X); SM(None, SADDR);
    711  1.1  christos 
    712  1.1  christos /** 1001 1110 1111 1100		mov	%0, %1				*/
    713  1.1  christos   ID(mov); DR(CS); SR(A);
    714  1.1  christos 
    715  1.1  christos /** 0100 0001			mov	%0, #%1				*/
    716  1.1  christos   ID(mov); DR(ES); SC(IMMU(1));
    717  1.1  christos 
    718  1.1  christos /** 1001 1110 1111 1101		mov	%0, %1				*/
    719  1.1  christos   ID(mov); DR(ES); SR(A);
    720  1.1  christos 
    721  1.1  christos /** 0110 0001 1011 1000		mov	%0, %1				*/
    722  1.1  christos   ID(mov); DR(ES); SM(None, SADDR);
    723  1.1  christos 
    724  1.1  christos /** 0001 1001			mov	%e0, #%1			*/
    725  1.1  christos   ID(mov); DM(B, IMMU(2)); SC(IMMU(1));
    726  1.1  christos 
    727  1.1  christos /** 0001 1000			mov	%e0, %1				*/
    728  1.1  christos   ID(mov); DM(B, IMMU(2)); SR(A);
    729  1.1  christos 
    730  1.1  christos /** 0011 1001			mov	%e0, #%1			*/
    731  1.1  christos   ID(mov); DM(BC, IMMU(2)); SC(IMMU(1));
    732  1.1  christos 
    733  1.1  christos /** 0100 1000			mov	%e0, %1				*/
    734  1.1  christos   ID(mov); DM(BC, IMMU(2)); SR(A);
    735  1.1  christos 
    736  1.1  christos /** 0011 1000			mov	%e0, #%1			*/
    737  1.1  christos   ID(mov); DM(C, IMMU(2)); SC(IMMU(1));
    738  1.1  christos 
    739  1.1  christos /** 0010 1000			mov	%e0, %1				*/
    740  1.1  christos   ID(mov); DM(C, IMMU(2)); SR(A);
    741  1.1  christos 
    742  1.1  christos /** 1100 1101			mov	%0, #%1				*/
    743  1.1  christos   ID(mov); DM(None, SADDR); SC(IMMU(1));
    744  1.1  christos 
    745  1.1  christos /** 1001 1101			mov	%0, %1				*/
    746  1.1  christos   ID(mov); DM(None, SADDR); SR(A);
    747  1.1  christos 
    748  1.1  christos /** 1100 1110			mov	%s0, #%1			*/
    749  1.1  christos   op0 = SFR;
    750  1.1  christos   op1 = IMMU(1);
    751  1.1  christos   ID(mov); DM(None, op0); SC(op1);
    752  1.1  christos   if (op0 == 0xffffb)
    753  1.1  christos     switch (op1)
    754  1.1  christos       {
    755  1.1  christos       case 0x01:
    756  1.1  christos 	rl78->syntax = "mulhu"; ID(mulhu);
    757  1.1  christos 	break;
    758  1.1  christos       case 0x02:
    759  1.1  christos 	rl78->syntax = "mulh"; ID(mulh);
    760  1.1  christos 	break;
    761  1.1  christos       case 0x03:
    762  1.1  christos 	rl78->syntax = "divhu"; ID(divhu);
    763  1.1  christos 	break;
    764  1.1  christos       case 0x04:
    765  1.1  christos 	rl78->syntax = "divwu <old-encoding>"; ID(divwu);
    766  1.1  christos 	break;
    767  1.1  christos       case 0x05:
    768  1.1  christos 	rl78->syntax = "machu"; ID(machu);
    769  1.1  christos 	break;
    770  1.1  christos       case 0x06:
    771  1.1  christos 	rl78->syntax = "mach"; ID(mach);
    772  1.1  christos 	break;
    773  1.1  christos       case 0x0b:
    774  1.1  christos 	rl78->syntax = "divwu"; ID(divwu);
    775  1.1  christos 	break;
    776  1.1  christos       }
    777  1.1  christos 
    778  1.1  christos /** 1001 1110			mov	%0, %1				*/
    779  1.1  christos   ID(mov); DM(None, SFR); SR(A);
    780  1.1  christos 
    781  1.1  christos /*----------------------------------------------------------------------*/
    782  1.1  christos 
    783  1.1  christos /** 0111 0001 1bit 0001		mov1	%e0, cy				*/
    784  1.1  christos   ID(mov); DM(HL, 0); DB(bit); SCY();
    785  1.1  christos 
    786  1.1  christos /** 0111 0001 1bit 1001		mov1	%e0, cy				*/
    787  1.1  christos   ID(mov); DR(A); DB(bit); SCY();
    788  1.1  christos 
    789  1.1  christos /** 0111 0001 1bit 0100		mov1	cy, %e1				*/
    790  1.1  christos   ID(mov); DCY(); SM(HL, 0); SB(bit);
    791  1.1  christos 
    792  1.1  christos /** 0111 0001 1bit 1100		mov1	cy, %e1				*/
    793  1.1  christos   ID(mov); DCY(); SR(A); SB(bit);
    794  1.1  christos 
    795  1.1  christos /** 0111 0001 0bit 0100		mov1	cy, %1				*/
    796  1.1  christos   ID(mov); DCY(); SM(None, SADDR); SB(bit);
    797  1.1  christos 
    798  1.1  christos /** 0111 0001 0bit 1100		mov1	cy, %s1				*/
    799  1.1  christos   ID(mov); DCY(); SM(None, SFR); SB(bit);
    800  1.1  christos 
    801  1.1  christos /** 0111 0001 0bit 0001		mov1	%0, cy				*/
    802  1.1  christos   ID(mov); DM(None, SADDR); DB(bit); SCY();
    803  1.1  christos 
    804  1.1  christos /** 0111 0001 0bit 1001		mov1	%s0, cy				*/
    805  1.1  christos   ID(mov); DM(None, SFR); DB(bit); SCY();
    806  1.1  christos 
    807  1.1  christos /*----------------------------------------------------------------------*/
    808  1.1  christos 
    809  1.1  christos /** 0110 0001 1100 1110		movs	%e0, %1				*/
    810  1.1  christos   ID(mov); DM(HL, IMMU(1)); SR(X); Fzc;
    811  1.1  christos 
    812  1.1  christos /*----------------------------------------------------------------------*/
    813  1.1  christos 
    814  1.1  christos /** 1011 1111			movw	%e!0, %1			*/
    815  1.1  christos   ID(mov); W(); DM(None, IMMU(2)); SR(AX);
    816  1.1  christos 
    817  1.1  christos /** 1011 1001			movw	%e0, %1				*/
    818  1.1  christos   ID(mov); W(); DM(DE, 0); SR(AX);
    819  1.1  christos 
    820  1.1  christos /** 1011 1010			movw	%e0, %1				*/
    821  1.1  christos   ID(mov); W(); DM(DE, IMMU(1)); SR(AX);
    822  1.1  christos 
    823  1.1  christos /** 1011 1011			movw	%e0, %1				*/
    824  1.1  christos   ID(mov); W(); DM(HL, 0); SR(AX);
    825  1.1  christos 
    826  1.1  christos /** 1011 1100			movw	%e0, %1				*/
    827  1.1  christos   ID(mov); W(); DM(HL, IMMU(1)); SR(AX);
    828  1.1  christos 
    829  1.1  christos /** 1011 1000			movw	%0, %1				*/
    830  1.1  christos   ID(mov); W(); DM(SP, IMMU(1)); SR(AX);
    831  1.1  christos 
    832  1.1  christos /** 1010 1111			movw	%0, %e!1			*/
    833  1.1  christos   ID(mov); W(); DR(AX); SM(None, IMMU(2));
    834  1.1  christos 
    835  1.1  christos 
    836  1.1  christos /** 1010 1001			movw	%0, %e1				*/
    837  1.1  christos   ID(mov); W(); DR(AX); SM(DE, 0);
    838  1.1  christos 
    839  1.1  christos /** 1010 1010			movw	%0, %e1				*/
    840  1.1  christos   ID(mov); W(); DR(AX); SM(DE, IMMU(1));
    841  1.1  christos 
    842  1.1  christos /** 1010 1011			movw	%0, %e1				*/
    843  1.1  christos   ID(mov); W(); DR(AX); SM(HL, 0);
    844  1.1  christos 
    845  1.1  christos /** 1010 1100			movw	%0, %e1				*/
    846  1.1  christos   ID(mov); W(); DR(AX); SM(HL, IMMU(1));
    847  1.1  christos 
    848  1.1  christos /** 1010 1000			movw	%0, %1				*/
    849  1.1  christos   ID(mov); W(); DR(AX); SM(SP, IMMU(1));
    850  1.1  christos 
    851  1.1  christos /** 0011 0rg0			movw	%0, #%1				*/
    852  1.1  christos   ID(mov); W(); DRW(rg); SC(IMMU(2));
    853  1.1  christos 
    854  1.1  christos /** 0001 0ra1			movw	%0, %1				*/
    855  1.1  christos   ID(mov); W(); DR(AX); SRW(ra);
    856  1.1  christos 
    857  1.1  christos /** 0001 0ra0			movw	%0, %1				*/
    858  1.1  christos   ID(mov); W(); DRW(ra); SR(AX);
    859  1.1  christos 
    860  1.1  christos /** 0101 1001			movw	%0, %e1				*/
    861  1.1  christos   ID(mov); W(); DR(AX); SM(B, IMMU(2));
    862  1.1  christos 
    863  1.1  christos /** 0110 1001			movw	%0, %e1				*/
    864  1.1  christos   ID(mov); W(); DR(AX); SM(C, IMMU(2));
    865  1.1  christos 
    866  1.1  christos /** 0111 1001			movw	%0, %e1				*/
    867  1.1  christos   ID(mov); W(); DR(AX); SM(BC, IMMU(2));
    868  1.1  christos 
    869  1.1  christos /** 0101 1000			movw	%e0, %1				*/
    870  1.1  christos   ID(mov); W(); DM(B, IMMU(2)); SR(AX);
    871  1.1  christos 
    872  1.1  christos /** 0110 1000			movw	%e0, %1				*/
    873  1.1  christos   ID(mov); W(); DM(C, IMMU(2)); SR(AX);
    874  1.1  christos 
    875  1.1  christos /** 0111 1000			movw	%e0, %1				*/
    876  1.1  christos   ID(mov); W(); DM(BC, IMMU(2)); SR(AX);
    877  1.1  christos 
    878  1.1  christos /** 1010 1101			movw	%0, %1				*/
    879  1.1  christos   ID(mov); W(); DR(AX); SM(None, SADDR);
    880  1.1  christos 
    881  1.1  christos /** 1010 1110			movw	%0, %s1				*/
    882  1.1  christos   ID(mov); W(); DR(AX); SM(None, SFR);
    883  1.1  christos 
    884  1.1  christos /** 11ra 1011			movw	%0, %e!1			*/
    885  1.1  christos   ID(mov); W(); DRW(ra); SM(None, IMMU(2));
    886  1.1  christos 
    887  1.1  christos /** 11ra 1010			movw	%0, %1				*/
    888  1.1  christos   ID(mov); W(); DRW(ra); SM(None, SADDR);
    889  1.1  christos 
    890  1.1  christos /** 1100 1001			movw	%0, #%1				*/
    891  1.1  christos   ID(mov); W(); DM(None, SADDR); SC(IMMU(2));
    892  1.1  christos 
    893  1.1  christos /** 1011 1101			movw	%0, %1				*/
    894  1.1  christos   ID(mov); W(); DM(None, SADDR); SR(AX);
    895  1.1  christos 
    896  1.1  christos /** 1100 1011			movw	%0, #%1				*/
    897  1.1  christos   ID(mov); W(); DM(None, SFR); SC(IMMU(2));
    898  1.1  christos 
    899  1.1  christos /** 1011 1110			movw	%0, %1				*/
    900  1.1  christos   ID(mov); W(); DM(None, SFR); SR(AX);
    901  1.1  christos 
    902  1.1  christos /*----------------------------------------------------------------------*/
    903  1.1  christos 
    904  1.1  christos /** 1101 0110			mulu	x				*/
    905  1.1  christos   ID(mulu);
    906  1.1  christos 
    907  1.1  christos /*----------------------------------------------------------------------*/
    908  1.1  christos 
    909  1.1  christos /** 0000 0000			nop					*/
    910  1.1  christos   ID(nop);
    911  1.1  christos 
    912  1.1  christos /*----------------------------------------------------------------------*/
    913  1.1  christos 
    914  1.1  christos /** 0111 0001 1100 0000		not1	cy				*/
    915  1.1  christos   ID(xor); DCY(); SC(1);
    916  1.1  christos 
    917  1.1  christos /*----------------------------------------------------------------------*/
    918  1.1  christos 
    919  1.1  christos /** 1110 0101			oneb	%e!0				*/
    920  1.1  christos   ID(mov); DM(None, IMMU(2)); SC(1);
    921  1.1  christos 
    922  1.1  christos /** 1110 00rg			oneb	%0				*/
    923  1.1  christos   ID(mov); DRB(rg); SC(1);
    924  1.1  christos 
    925  1.1  christos /** 1110 0100			oneb	%0				*/
    926  1.1  christos   ID(mov); DM(None, SADDR); SC(1);
    927  1.1  christos 
    928  1.1  christos /*----------------------------------------------------------------------*/
    929  1.1  christos 
    930  1.1  christos /** 1110 0110			onew	%0				*/
    931  1.1  christos   ID(mov); DR(AX); SC(1);
    932  1.1  christos 
    933  1.1  christos /** 1110 0111			onew	%0				*/
    934  1.1  christos   ID(mov); DR(BC); SC(1);
    935  1.1  christos 
    936  1.1  christos /*----------------------------------------------------------------------*/
    937  1.1  christos 
    938  1.1  christos /** 0110 1111			or	%0, %e!1			*/
    939  1.1  christos   ID(or); DR(A); SM(None, IMMU(2)); Fz;
    940  1.1  christos 
    941  1.1  christos /** 0110 1101			or	%0, %e1				*/
    942  1.1  christos   ID(or); DR(A); SM(HL, 0); Fz;
    943  1.1  christos 
    944  1.1  christos /** 0110 0001 1110 0000		or	%0, %e1				*/
    945  1.1  christos   ID(or); DR(A); SM2(HL, B, 0); Fz;
    946  1.1  christos 
    947  1.1  christos /** 0110 1110			or	%0, %e1				*/
    948  1.1  christos   ID(or); DR(A); SM(HL, IMMU(1)); Fz;
    949  1.1  christos 
    950  1.1  christos /** 0110 0001 1110 0010		or	%0, %e1				*/
    951  1.1  christos   ID(or); DR(A); SM2(HL, C, 0); Fz;
    952  1.1  christos 
    953  1.1  christos /** 0110 1100	       		or	%0, #%1				*/
    954  1.1  christos   ID(or); DR(A); SC(IMMU(1)); Fz;
    955  1.1  christos 
    956  1.1  christos /** 0110 0001 0110 1rba		or	%0, %1				*/
    957  1.1  christos   ID(or); DR(A); SRB(rba); Fz;
    958  1.1  christos 
    959  1.1  christos /** 0110 0001 0110 0reg		or	%0, %1				*/
    960  1.1  christos   ID(or); DRB(reg); SR(A); Fz;
    961  1.1  christos 
    962  1.1  christos /** 0110 1011	       		or	%0, %1				*/
    963  1.1  christos   ID(or); DR(A); SM(None, SADDR); Fz;
    964  1.1  christos 
    965  1.1  christos /** 0110 1010	       		or	%0, #%1				*/
    966  1.1  christos   ID(or); DM(None, SADDR); SC(IMMU(1)); Fz;
    967  1.1  christos 
    968  1.1  christos /*----------------------------------------------------------------------*/
    969  1.1  christos 
    970  1.1  christos /** 0111 0001 1bit 0110		or1	cy, %e1				*/
    971  1.1  christos   ID(or); DCY(); SM(HL, 0); SB(bit);
    972  1.1  christos 
    973  1.1  christos /** 0111 0001 1bit 1110		or1	cy, %1				*/
    974  1.1  christos   ID(or); DCY(); SR(A); SB(bit);
    975  1.1  christos 
    976  1.1  christos /** 0111 0001 0bit 1110		or1	cy, %s1				*/
    977  1.1  christos   ID(or); DCY(); SM(None, SFR); SB(bit);
    978  1.1  christos 
    979  1.1  christos /** 0111 0001 0bit 0110		or1	cy, %s1				*/
    980  1.1  christos   ID(or); DCY(); SM(None, SADDR); SB(bit);
    981  1.1  christos 
    982  1.1  christos /*----------------------------------------------------------------------*/
    983  1.1  christos 
    984  1.1  christos /** 1100 0rg0			pop	%0				*/
    985  1.1  christos   ID(mov); W(); DRW(rg); SPOP();
    986  1.1  christos 
    987  1.1  christos /** 0110 0001 1100 1101		pop	%s0				*/
    988  1.1  christos   ID(mov); W(); DR(PSW); SPOP();
    989  1.1  christos 
    990  1.1  christos /*----------------------------------------------------------------------*/
    991  1.1  christos 
    992  1.1  christos /** 1100 0rg1			push	%1				*/
    993  1.1  christos   ID(mov); W(); DPUSH(); SRW(rg);
    994  1.1  christos 
    995  1.1  christos /** 0110 0001 1101 1101		push	%s1				*/
    996  1.1  christos   ID(mov); W(); DPUSH(); SR(PSW);
    997  1.1  christos 
    998  1.1  christos /*----------------------------------------------------------------------*/
    999  1.1  christos 
   1000  1.1  christos /** 1101 0111			ret					*/
   1001  1.1  christos   ID(ret);
   1002  1.1  christos 
   1003  1.1  christos /** 0110 0001 1111 1100		reti					*/
   1004  1.1  christos   ID(reti);
   1005  1.1  christos 
   1006  1.1  christos /** 0110 0001 1110 1100		retb					*/
   1007  1.1  christos   ID(reti);
   1008  1.1  christos 
   1009  1.1  christos /*----------------------------------------------------------------------*/
   1010  1.1  christos 
   1011  1.1  christos /** 0110 0001 1110 1011		rol	%0, %1				*/
   1012  1.1  christos   ID(rol); DR(A); SC(1);
   1013  1.1  christos 
   1014  1.1  christos /** 0110 0001 1101 1100		rolc	%0, %1				*/
   1015  1.1  christos   ID(rolc); DR(A); SC(1);
   1016  1.1  christos 
   1017  1.1  christos /** 0110 0001 111r 1110		rolwc	%0, %1				*/
   1018  1.1  christos   ID(rolc); W(); DRW(r); SC(1);
   1019  1.1  christos 
   1020  1.1  christos /** 0110 0001 1101 1011		ror	%0, %1				*/
   1021  1.1  christos   ID(ror); DR(A); SC(1);
   1022  1.1  christos 
   1023  1.1  christos /** 0110 0001 1111 1011		rorc	%0, %1				*/
   1024  1.1  christos   ID(rorc); DR(A); SC(1);
   1025  1.1  christos 
   1026  1.1  christos /*----------------------------------------------------------------------*/
   1027  1.1  christos 
   1028  1.1  christos /* Note that the branch insns need to be listed before the shift
   1029  1.1  christos    ones, as "shift count of zero" means "branch insn" */
   1030  1.1  christos 
   1031  1.1  christos /** 0011 0001 0cnt 1011		sar	%0, %1				*/
   1032  1.1  christos   ID(sar); DR(A); SC(cnt);
   1033  1.1  christos 
   1034  1.1  christos /** 0011 0001 wcnt 1111		sarw	%0, %1				*/
   1035  1.1  christos   ID(sar); W(); DR(AX); SC(wcnt);
   1036  1.1  christos 
   1037  1.1  christos /*----------------------------------------------------------------------*/
   1038  1.1  christos 
   1039  1.1  christos /** 0110 0001 11rb 1111		sel	rb%1				*/
   1040  1.1  christos   ID(sel); SC(rb);
   1041  1.1  christos 
   1042  1.1  christos /*----------------------------------------------------------------------*/
   1043  1.1  christos 
   1044  1.1  christos /** 0111 0001 0bit 0000		set1	%e!0				*/
   1045  1.1  christos   ID(mov); DM(None, IMMU(2)); DB(bit); SC(1);
   1046  1.1  christos 
   1047  1.1  christos /** 0111 0001 1bit 0010		set1	%e0				*/
   1048  1.1  christos   ID(mov); DM(HL, 0); DB(bit); SC(1);
   1049  1.1  christos 
   1050  1.1  christos /** 0111 0001 1bit 1010		set1	%0				*/
   1051  1.1  christos   ID(mov); DR(A); DB(bit); SC(1);
   1052  1.1  christos 
   1053  1.1  christos /** 0111 0001 1000 0000		set1	cy				*/
   1054  1.1  christos   ID(mov); DCY(); SC(1);
   1055  1.1  christos 
   1056  1.1  christos /** 0111 0001 0bit 1010		set1	%s0				*/
   1057  1.1  christos   op0 = SFR;
   1058  1.1  christos   ID(mov); DM(None, op0); DB(bit); SC(1);
   1059  1.1  christos   if (op0 == RL78_SFR_PSW && bit == 7)
   1060  1.1  christos     rl78->syntax = "ei";
   1061  1.1  christos 
   1062  1.1  christos /** 0111 0001 0bit 0010		set1	%0				*/
   1063  1.1  christos   ID(mov); DM(None, SADDR); DB(bit); SC(1);
   1064  1.1  christos 
   1065  1.1  christos /*----------------------------------------------------------------------*/
   1066  1.1  christos 
   1067  1.1  christos /** 0011 0001 0cnt 1001		shl	%0, %1				*/
   1068  1.1  christos   ID(shl); DR(A); SC(cnt);
   1069  1.1  christos 
   1070  1.1  christos /** 0011 0001 0cnt 1000		shl	%0, %1				*/
   1071  1.1  christos   ID(shl); DR(B); SC(cnt);
   1072  1.1  christos 
   1073  1.1  christos /** 0011 0001 0cnt 0111		shl	%0, %1				*/
   1074  1.1  christos   ID(shl); DR(C); SC(cnt);
   1075  1.1  christos 
   1076  1.1  christos /** 0011 0001 wcnt 1101		shlw	%0, %1				*/
   1077  1.1  christos   ID(shl); W(); DR(AX); SC(wcnt);
   1078  1.1  christos 
   1079  1.1  christos /** 0011 0001 wcnt 1100		shlw	%0, %1				*/
   1080  1.1  christos   ID(shl); W(); DR(BC); SC(wcnt);
   1081  1.1  christos 
   1082  1.1  christos /*----------------------------------------------------------------------*/
   1083  1.1  christos 
   1084  1.1  christos /** 0011 0001 0cnt 1010		shr	%0, %1				*/
   1085  1.1  christos   ID(shr); DR(A); SC(cnt);
   1086  1.1  christos 
   1087  1.1  christos /** 0011 0001 wcnt 1110		shrw	%0, %1				*/
   1088  1.1  christos   ID(shr); W(); DR(AX); SC(wcnt);
   1089  1.1  christos 
   1090  1.1  christos /*----------------------------------------------------------------------*/
   1091  1.1  christos 
   1092  1.1  christos /** 0110 0001 1100 1000		sk%c1					*/
   1093  1.1  christos   ID(skip); COND(C);
   1094  1.1  christos 
   1095  1.1  christos /** 0110 0001 1110 0011		sk%c1					*/
   1096  1.1  christos   ID(skip); COND(H);
   1097  1.1  christos 
   1098  1.1  christos /** 0110 0001 1101 1000		sk%c1					*/
   1099  1.1  christos   ID(skip); COND(NC);
   1100  1.1  christos 
   1101  1.1  christos /** 0110 0001 1111 0011		sk%c1					*/
   1102  1.1  christos   ID(skip); COND(NH);
   1103  1.1  christos 
   1104  1.1  christos /** 0110 0001 1111 1000		sk%c1					*/
   1105  1.1  christos   ID(skip); COND(NZ);
   1106  1.1  christos 
   1107  1.1  christos /** 0110 0001 1110 1000		sk%c1					*/
   1108  1.1  christos   ID(skip); COND(Z);
   1109  1.1  christos 
   1110  1.1  christos /*----------------------------------------------------------------------*/
   1111  1.1  christos 
   1112  1.1  christos /** 0110 0001 1111 1101	stop						*/
   1113  1.1  christos   ID(stop);
   1114  1.1  christos 
   1115  1.1  christos /*----------------------------------------------------------------------*/
   1116  1.1  christos 
   1117  1.1  christos /** 0010 1111			sub	%0, %e!1			*/
   1118  1.1  christos   ID(sub); DR(A); SM(None, IMMU(2)); Fzac;
   1119  1.1  christos 
   1120  1.1  christos /** 0010 1101			sub	%0, %e1				*/
   1121  1.1  christos   ID(sub); DR(A); SM(HL, 0); Fzac;
   1122  1.1  christos 
   1123  1.1  christos /** 0110 0001 1010 000		sub	%0, %e1				*/
   1124  1.1  christos   ID(sub); DR(A); SM2(HL, B, 0); Fzac;
   1125  1.1  christos 
   1126  1.1  christos /** 0010 1110			sub	%0, %e1				*/
   1127  1.1  christos   ID(sub); DR(A); SM(HL, IMMU(1)); Fzac;
   1128  1.1  christos 
   1129  1.1  christos /** 0110 0001 1010 0010		sub	%0, %e1				*/
   1130  1.1  christos   ID(sub); DR(A); SM2(HL, C, 0); Fzac;
   1131  1.1  christos 
   1132  1.1  christos /** 0010 1100			sub	%0, #%1				*/
   1133  1.1  christos   ID(sub); DR(A); SC(IMMU(1)); Fzac;
   1134  1.1  christos 
   1135  1.1  christos /** 0110 0001 0010 1rba		sub	%0, %1				*/
   1136  1.1  christos   ID(sub); DR(A); SRB(rba); Fzac;
   1137  1.1  christos 
   1138  1.1  christos /** 0010 1011			sub	%0, %1				*/
   1139  1.1  christos   ID(sub); DR(A); SM(None, SADDR); Fzac;
   1140  1.1  christos 
   1141  1.1  christos /** 0110 0001 0010 0reg		sub	%0, %1				*/
   1142  1.1  christos   ID(sub); DRB(reg); SR(A); Fzac;
   1143  1.1  christos 
   1144  1.1  christos /** 0010 1010			sub	%0, #%1				*/
   1145  1.1  christos   ID(sub); DM(None, SADDR); SC(IMMU(1)); Fzac;
   1146  1.1  christos 
   1147  1.1  christos /*----------------------------------------------------------------------*/
   1148  1.1  christos 
   1149  1.1  christos /** 0011 1111			subc	%0, %e!1			*/
   1150  1.1  christos   ID(subc); DR(A); SM(None, IMMU(2)); Fzac;
   1151  1.1  christos 
   1152  1.1  christos /** 0011 1101			subc	%0, %e1				*/
   1153  1.1  christos   ID(subc); DR(A); SM(HL, 0); Fzac;
   1154  1.1  christos 
   1155  1.1  christos /** 0110 0001 1011 0000		subc	%0, %e1				*/
   1156  1.1  christos   ID(subc); DR(A); SM2(HL, B, 0); Fzac;
   1157  1.1  christos 
   1158  1.1  christos /** 0110 0001 1011 0010		subc	%0, %e1				*/
   1159  1.1  christos   ID(subc); DR(A); SM2(HL, C, 0); Fzac;
   1160  1.1  christos 
   1161  1.1  christos /** 0011 1110			subc	%0, %e1				*/
   1162  1.1  christos   ID(subc); DR(A); SM(HL, IMMU(1)); Fzac;
   1163  1.1  christos 
   1164  1.1  christos /** 0011 1100			subc	%0, #%1				*/
   1165  1.1  christos   ID(subc); DR(A); SC(IMMU(1)); Fzac;
   1166  1.1  christos 
   1167  1.1  christos /** 0110 0001 0011 1rba		subc	%0, %1				*/
   1168  1.1  christos   ID(subc); DR(A); SRB(rba); Fzac;
   1169  1.1  christos 
   1170  1.1  christos /** 0110 0001 0011 0reg		subc	%0, %1				*/
   1171  1.1  christos   ID(subc); DRB(reg); SR(A); Fzac;
   1172  1.1  christos 
   1173  1.1  christos /** 0011 1011			subc	%0, %1				*/
   1174  1.1  christos   ID(subc); DR(A); SM(None, SADDR); Fzac;
   1175  1.1  christos 
   1176  1.1  christos /** 0011 1010			subc	%0, #%1				*/
   1177  1.1  christos   ID(subc); DM(None, SADDR); SC(IMMU(1)); Fzac;
   1178  1.1  christos 
   1179  1.1  christos /*----------------------------------------------------------------------*/
   1180  1.1  christos 
   1181  1.1  christos /** 0010 0010			subw	%0, %e!1			*/
   1182  1.1  christos   ID(sub); W(); DR(AX); SM(None, IMMU(2)); Fzac;
   1183  1.1  christos 
   1184  1.1  christos /** 0110 0001 0010 1001		subw	%0, %e1				*/
   1185  1.1  christos   ID(sub); W(); DR(AX); SM(HL, IMMU(1)); Fzac;
   1186  1.1  christos 
   1187  1.1  christos /** 0010 0100			subw	%0, #%1				*/
   1188  1.1  christos   ID(sub); W(); DR(AX); SC(IMMU(2)); Fzac;
   1189  1.1  christos 
   1190  1.1  christos /** 0010 0rw1			subw	%0, %1				*/
   1191  1.1  christos   ID(sub); W(); DR(AX); SRW(rw); Fzac;
   1192  1.1  christos 
   1193  1.1  christos /** 0010 0110			subw	%0, %1				*/
   1194  1.1  christos   ID(sub); W(); DR(AX); SM(None, SADDR); Fzac;
   1195  1.1  christos 
   1196  1.1  christos /** 0010 0000			subw	%0, #%1				*/
   1197  1.1  christos   ID(sub); W(); DR(SP); SC(IMMU(1)); Fzac;
   1198  1.1  christos 
   1199  1.1  christos /*----------------------------------------------------------------------*/
   1200  1.1  christos 
   1201  1.1  christos /** 0110 0001 1010 1010		xch	%0, %e!1			*/
   1202  1.1  christos   ID(xch); DR(A); SM(None, IMMU(2));
   1203  1.1  christos 
   1204  1.1  christos /** 0110 0001 1010 1110		xch	%0, %e1				*/
   1205  1.1  christos   ID(xch); DR(A); SM(DE, 0);
   1206  1.1  christos 
   1207  1.1  christos /** 0110 0001 1010 1111		xch	%0, %e1				*/
   1208  1.1  christos   ID(xch); DR(A); SM(DE, IMMU(1));
   1209  1.1  christos 
   1210  1.1  christos /** 0110 0001 1010 1100		xch	%0, %e1				*/
   1211  1.1  christos   ID(xch); DR(A); SM(HL, 0);
   1212  1.1  christos 
   1213  1.1  christos /** 0110 0001 1011 1001		xch	%0, %e1				*/
   1214  1.1  christos   ID(xch); DR(A); SM2(HL, B, 0);
   1215  1.1  christos 
   1216  1.1  christos /** 0110 0001 1010 1101		xch	%0, %e1				*/
   1217  1.1  christos   ID(xch); DR(A); SM(HL, IMMU(1));
   1218  1.1  christos 
   1219  1.1  christos /** 0110 0001 1010 1001		xch	%0, %e1				*/
   1220  1.1  christos   ID(xch); DR(A); SM2(HL, C, 0);
   1221  1.1  christos 
   1222  1.1  christos /** 0110 0001 1000 1reg		xch	%0, %1				*/
   1223  1.1  christos   /* Note: DECW uses reg == X, so this must follow DECW */
   1224  1.1  christos   ID(xch); DR(A); SRB(reg);
   1225  1.1  christos 
   1226  1.1  christos /** 0110 0001 1010 1000	       	xch	%0, %1				*/
   1227  1.1  christos   ID(xch); DR(A); SM(None, SADDR);
   1228  1.1  christos 
   1229  1.1  christos /** 0110 0001 1010 1011	       	xch	%0, %1				*/
   1230  1.1  christos   ID(xch); DR(A); SM(None, SFR);
   1231  1.1  christos 
   1232  1.1  christos /** 0000 1000			xch	a, x				*/
   1233  1.1  christos   ID(xch); DR(A); SR(X);
   1234  1.1  christos 
   1235  1.1  christos /*----------------------------------------------------------------------*/
   1236  1.1  christos 
   1237  1.1  christos /** 0011 0ra1			xchw	%0, %1				*/
   1238  1.1  christos   ID(xch); W(); DR(AX); SRW(ra);
   1239  1.1  christos 
   1240  1.1  christos /*----------------------------------------------------------------------*/
   1241  1.1  christos 
   1242  1.1  christos /** 0111 1111			xor	%0, %e!1			*/
   1243  1.1  christos   ID(xor); DR(A); SM(None, IMMU(2)); Fz;
   1244  1.1  christos 
   1245  1.1  christos /** 0111 1101			xor	%0, %e1				*/
   1246  1.1  christos   ID(xor); DR(A); SM(HL, 0); Fz;
   1247  1.1  christos 
   1248  1.1  christos /** 0110 0001 1111 0000		xor	%0, %e1				*/
   1249  1.1  christos   ID(xor); DR(A); SM2(HL, B, 0); Fz;
   1250  1.1  christos 
   1251  1.1  christos /** 0111 1110			xor	%0, %e1				*/
   1252  1.1  christos   ID(xor); DR(A); SM(HL, IMMU(1)); Fz;
   1253  1.1  christos 
   1254  1.1  christos /** 0110 0001 1111 0010		xor	%0, %e1				*/
   1255  1.1  christos   ID(xor); DR(A); SM2(HL, C, 0); Fz;
   1256  1.1  christos 
   1257  1.1  christos /** 0111 1100	       		xor	%0, #%1				*/
   1258  1.1  christos   ID(xor); DR(A); SC(IMMU(1)); Fz;
   1259  1.1  christos 
   1260  1.1  christos /** 0110 0001 0111 1rba		xor	%0, %1				*/
   1261  1.1  christos   ID(xor); DR(A); SRB(rba); Fz;
   1262  1.1  christos 
   1263  1.1  christos /** 0110 0001 0111 0reg		xor	%0, %1				*/
   1264  1.1  christos   ID(xor); DRB(reg); SR(A); Fz;
   1265  1.1  christos 
   1266  1.1  christos /** 0111 1011	       		xor	%0, %1				*/
   1267  1.1  christos   ID(xor); DR(A); SM(None, SADDR); Fz;
   1268  1.1  christos 
   1269  1.1  christos /** 0111 1010	       		xor	%0, #%1				*/
   1270  1.1  christos   ID(xor); DM(None, SADDR); SC(IMMU(1)); Fz;
   1271  1.1  christos 
   1272  1.1  christos /*----------------------------------------------------------------------*/
   1273  1.1  christos 
   1274  1.1  christos /** 0111 0001 1bit 0111		xor1	cy, %e1				*/
   1275  1.1  christos   ID(xor); DCY(); SM(HL, 0); SB(bit);
   1276  1.1  christos 
   1277  1.1  christos /** 0111 0001 1bit 1111		xor1	cy, %1				*/
   1278  1.1  christos   ID(xor); DCY(); SR(A); SB(bit);
   1279  1.1  christos 
   1280  1.1  christos /** 0111 0001 0bit 1111		xor1	cy, %s1				*/
   1281  1.1  christos   ID(xor); DCY(); SM(None, SFR); SB(bit);
   1282  1.1  christos 
   1283  1.1  christos /** 0111 0001 0bit 0111		xor1	cy, %s1				*/
   1284  1.1  christos   ID(xor); DCY(); SM(None, SADDR); SB(bit);
   1285  1.1  christos 
   1286  1.1  christos /*----------------------------------------------------------------------*/
   1287  1.1  christos 
   1288  1.1  christos /** */
   1289  1.1  christos 
   1290  1.1  christos   return rl78->n_bytes;
   1291  1.1  christos }
   1292