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