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