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