OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [binutils-2.18.50/] [cpu/] [m32c.cpu] - Diff between revs 156 and 816

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 156 Rev 816
; Renesas M32C CPU description.  -*- Scheme -*-
; Renesas M32C CPU description.  -*- Scheme -*-
;
;
; Copyright 2005, 2006, 2007 Free Software Foundation, Inc.
; Copyright 2005, 2006, 2007 Free Software Foundation, Inc.
;
;
; Contributed by Red Hat Inc; developed under contract from Renesas.
; Contributed by Red Hat Inc; developed under contract from Renesas.
;
;
; This file is part of the GNU Binutils.
; This file is part of the GNU Binutils.
;
;
; This program is free software; you can redistribute it and/or modify
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 3 of the License, or
; the Free Software Foundation; either version 3 of the License, or
; (at your option) any later version.
; (at your option) any later version.
;
;
; This program is distributed in the hope that it will be useful,
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
; GNU General Public License for more details.
; GNU General Public License for more details.
;
;
; You should have received a copy of the GNU General Public License
; You should have received a copy of the GNU General Public License
; along with this program; if not, write to the Free Software
; along with this program; if not, write to the Free Software
; Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
; Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
; MA 02110-1301, USA.
; MA 02110-1301, USA.
(include "simplify.inc")
(include "simplify.inc")
(define-arch
(define-arch
  (name m32c)
  (name m32c)
  (comment "Renesas M32C")
  (comment "Renesas M32C")
  (default-alignment forced)
  (default-alignment forced)
  (insn-lsb0? #f)
  (insn-lsb0? #f)
  (machs m16c m32c)
  (machs m16c m32c)
  (isas m16c m32c)
  (isas m16c m32c)
)
)
(define-isa
(define-isa
  (name m16c)
  (name m16c)
  (default-insn-bitsize 32)
  (default-insn-bitsize 32)
  ; Number of bytes of insn we can initially fetch.
  ; Number of bytes of insn we can initially fetch.
  (base-insn-bitsize 32)
  (base-insn-bitsize 32)
  ; Used in computing bit numbers.
  ; Used in computing bit numbers.
  (default-insn-word-bitsize 32)
  (default-insn-word-bitsize 32)
  (decode-assist (0 1 2 3 4 5 6 7)) ; Initial bitnumbers to decode insns by.
  (decode-assist (0 1 2 3 4 5 6 7)) ; Initial bitnumbers to decode insns by.
  ; fetches 1 insn at a time.
  ; fetches 1 insn at a time.
  (liw-insns 1)
  (liw-insns 1)
  ; executes 1 insn at a time.
  ; executes 1 insn at a time.
  (parallel-insns 1)
  (parallel-insns 1)
  )
  )
(define-isa
(define-isa
  (name m32c)
  (name m32c)
  (default-insn-bitsize 32)
  (default-insn-bitsize 32)
  ; Number of bytes of insn we can initially fetch.
  ; Number of bytes of insn we can initially fetch.
  (base-insn-bitsize 32)
  (base-insn-bitsize 32)
  ; Used in computing bit numbers.
  ; Used in computing bit numbers.
  (default-insn-word-bitsize 32)
  (default-insn-word-bitsize 32)
  (decode-assist (0 1 2 3 4 5 6 7)) ; Initial bitnumbers to decode insns by.
  (decode-assist (0 1 2 3 4 5 6 7)) ; Initial bitnumbers to decode insns by.
  ; fetches 1 insn at a time.
  ; fetches 1 insn at a time.
  (liw-insns 1)
  (liw-insns 1)
  ; executes 1 insn at a time.
  ; executes 1 insn at a time.
  (parallel-insns 1)
  (parallel-insns 1)
  )
  )
(define-cpu
(define-cpu
  ; cpu names must be distinct from the architecture name and machine names.
  ; cpu names must be distinct from the architecture name and machine names.
  ; The "b" suffix stands for "base" and is the convention.
  ; The "b" suffix stands for "base" and is the convention.
  ; The "f" suffix stands for "family" and is the convention.
  ; The "f" suffix stands for "family" and is the convention.
  (name m16cbf)
  (name m16cbf)
  (comment "Renesas M16C base family")
  (comment "Renesas M16C base family")
  (insn-endian big)
  (insn-endian big)
  (data-endian little)
  (data-endian little)
  (word-bitsize 16)
  (word-bitsize 16)
)
)
(define-cpu
(define-cpu
  ; cpu names must be distinct from the architecture name and machine names.
  ; cpu names must be distinct from the architecture name and machine names.
  ; The "b" suffix stands for "base" and is the convention.
  ; The "b" suffix stands for "base" and is the convention.
  ; The "f" suffix stands for "family" and is the convention.
  ; The "f" suffix stands for "family" and is the convention.
  (name m32cbf)
  (name m32cbf)
  (comment "Renesas M32C base family")
  (comment "Renesas M32C base family")
  (insn-endian big)
  (insn-endian big)
  (data-endian little)
  (data-endian little)
  (word-bitsize 16)
  (word-bitsize 16)
)
)
(define-mach
(define-mach
  (name m16c)
  (name m16c)
  (comment "Generic M16C cpu")
  (comment "Generic M16C cpu")
  (cpu m32cbf)
  (cpu m32cbf)
)
)
(define-mach
(define-mach
  (name m32c)
  (name m32c)
  (comment "Generic M32C cpu")
  (comment "Generic M32C cpu")
  (cpu m32cbf)
  (cpu m32cbf)
)
)
; Model descriptions.
; Model descriptions.
(define-model
(define-model
  (name m16c)
  (name m16c)
  (comment "m16c") (attrs)
  (comment "m16c") (attrs)
  (mach m16c)
  (mach m16c)
  ; `state' is a list of variables for recording model state
  ; `state' is a list of variables for recording model state
  ; (state)
  ; (state)
  (unit u-exec "Execution Unit" ()
  (unit u-exec "Execution Unit" ()
        1 1 ; issue done
        1 1 ; issue done
        () ; state
        () ; state
        () ; inputs
        () ; inputs
        () ; outputs
        () ; outputs
        () ; profile action (default)
        () ; profile action (default)
        )
        )
)
)
(define-model
(define-model
  (name m32c)
  (name m32c)
  (comment "m32c") (attrs)
  (comment "m32c") (attrs)
  (mach m32c)
  (mach m32c)
  ; `state' is a list of variables for recording model state
  ; `state' is a list of variables for recording model state
  ; (state)
  ; (state)
  (unit u-exec "Execution Unit" ()
  (unit u-exec "Execution Unit" ()
        1 1 ; issue done
        1 1 ; issue done
        () ; state
        () ; state
        () ; inputs
        () ; inputs
        () ; outputs
        () ; outputs
        () ; profile action (default)
        () ; profile action (default)
        )
        )
)
)
(define-attr
(define-attr
  (type enum)
  (type enum)
  (name RL_TYPE)
  (name RL_TYPE)
  (values NONE JUMP 1ADDR 2ADDR)
  (values NONE JUMP 1ADDR 2ADDR)
  (default NONE)
  (default NONE)
  )
  )
; Macros to simplify MACH attribute specification.
; Macros to simplify MACH attribute specification.
(define-pmacro all-isas () (ISA m16c,m32c))
(define-pmacro all-isas () (ISA m16c,m32c))
(define-pmacro m16c-isa () (ISA m16c))
(define-pmacro m16c-isa () (ISA m16c))
(define-pmacro m32c-isa () (ISA m32c))
(define-pmacro m32c-isa () (ISA m32c))
(define-pmacro MACH16 (MACH m16c))
(define-pmacro MACH16 (MACH m16c))
(define-pmacro MACH32 (MACH m32c))
(define-pmacro MACH32 (MACH m32c))
(define-pmacro (machine size)
(define-pmacro (machine size)
  (MACH (.sym m size c)) (ISA (.sym m size c)))
  (MACH (.sym m size c)) (ISA (.sym m size c)))
(define-pmacro RL_JUMP  (RL_TYPE JUMP))
(define-pmacro RL_JUMP  (RL_TYPE JUMP))
(define-pmacro RL_1ADDR (RL_TYPE 1ADDR))
(define-pmacro RL_1ADDR (RL_TYPE 1ADDR))
(define-pmacro RL_2ADDR (RL_TYPE 2ADDR))
(define-pmacro RL_2ADDR (RL_TYPE 2ADDR))


;=============================================================
;=============================================================
; Fields
; Fields
;-------------------------------------------------------------
;-------------------------------------------------------------
; Main opcodes
; Main opcodes
;
;
(dnf f-0-1  "opcode"                      (all-isas)   0 1)
(dnf f-0-1  "opcode"                      (all-isas)   0 1)
(dnf f-0-2  "opcode"                      (all-isas)   0 2)
(dnf f-0-2  "opcode"                      (all-isas)   0 2)
(dnf f-0-3  "opcode"                      (all-isas)   0 3)
(dnf f-0-3  "opcode"                      (all-isas)   0 3)
(dnf f-0-4  "opcode"                      (all-isas)   0 4)
(dnf f-0-4  "opcode"                      (all-isas)   0 4)
(dnf f-1-3  "opcode"                      (all-isas)   1 3)
(dnf f-1-3  "opcode"                      (all-isas)   1 3)
(dnf f-2-2  "opcode"                      (all-isas)   2 2)
(dnf f-2-2  "opcode"                      (all-isas)   2 2)
(dnf f-3-4  "opcode"                      (all-isas)   3 4)
(dnf f-3-4  "opcode"                      (all-isas)   3 4)
(dnf f-3-1  "opcode"                      (all-isas)   3 1)
(dnf f-3-1  "opcode"                      (all-isas)   3 1)
(dnf f-4-1  "opcode"                      (all-isas)   4 1)
(dnf f-4-1  "opcode"                      (all-isas)   4 1)
(dnf f-4-3  "opcode"                      (all-isas)   4 3)
(dnf f-4-3  "opcode"                      (all-isas)   4 3)
(dnf f-4-4  "opcode"                      (all-isas)   4 4)
(dnf f-4-4  "opcode"                      (all-isas)   4 4)
(dnf f-4-6  "opcode"                      (all-isas)   4 6)
(dnf f-4-6  "opcode"                      (all-isas)   4 6)
(dnf f-5-1  "opcode"                      (all-isas)   5 1)
(dnf f-5-1  "opcode"                      (all-isas)   5 1)
(dnf f-5-3  "opcode"                      (all-isas)   5 3)
(dnf f-5-3  "opcode"                      (all-isas)   5 3)
(dnf f-6-2  "opcode"                      (all-isas)   6 2)
(dnf f-6-2  "opcode"                      (all-isas)   6 2)
(dnf f-7-1  "opcode"                      (all-isas)   7 1)
(dnf f-7-1  "opcode"                      (all-isas)   7 1)
(dnf f-8-1  "opcode"                      (all-isas)   8 1)
(dnf f-8-1  "opcode"                      (all-isas)   8 1)
(dnf f-8-2  "opcode"                      (all-isas)   8 2)
(dnf f-8-2  "opcode"                      (all-isas)   8 2)
(dnf f-8-3  "opcode"                      (all-isas)   8 3)
(dnf f-8-3  "opcode"                      (all-isas)   8 3)
(dnf f-8-4  "opcode"                      (all-isas)   8 4)
(dnf f-8-4  "opcode"                      (all-isas)   8 4)
(dnf f-8-8  "opcode"                      (all-isas)   8 8)
(dnf f-8-8  "opcode"                      (all-isas)   8 8)
(dnf f-9-3  "opcode"                      (all-isas)   9 3)
(dnf f-9-3  "opcode"                      (all-isas)   9 3)
(dnf f-9-1  "opcode"                      (all-isas)   9 1)
(dnf f-9-1  "opcode"                      (all-isas)   9 1)
(dnf f-10-1 "opcode"                      (all-isas)  10 1)
(dnf f-10-1 "opcode"                      (all-isas)  10 1)
(dnf f-10-2 "opcode"                      (all-isas)  10 2)
(dnf f-10-2 "opcode"                      (all-isas)  10 2)
(dnf f-10-3 "opcode"                      (all-isas)  10 3)
(dnf f-10-3 "opcode"                      (all-isas)  10 3)
(dnf f-11-1 "opcode"                      (all-isas)  11 1)
(dnf f-11-1 "opcode"                      (all-isas)  11 1)
(dnf f-12-1 "opcode"                      (all-isas)  12 1)
(dnf f-12-1 "opcode"                      (all-isas)  12 1)
(dnf f-12-2 "opcode"                      (all-isas)  12 2)
(dnf f-12-2 "opcode"                      (all-isas)  12 2)
(dnf f-12-3 "opcode"                      (all-isas)  12 3)
(dnf f-12-3 "opcode"                      (all-isas)  12 3)
(dnf f-12-4 "opcode"                      (all-isas)  12 4)
(dnf f-12-4 "opcode"                      (all-isas)  12 4)
(dnf f-12-6 "opcode"                      (all-isas)  12 6)
(dnf f-12-6 "opcode"                      (all-isas)  12 6)
(dnf f-13-3 "opcode"                      (all-isas)  13 3)
(dnf f-13-3 "opcode"                      (all-isas)  13 3)
(dnf f-14-1 "opcode"                      (all-isas)  14 1)
(dnf f-14-1 "opcode"                      (all-isas)  14 1)
(dnf f-14-2 "opcode"                      (all-isas)  14 2)
(dnf f-14-2 "opcode"                      (all-isas)  14 2)
(dnf f-15-1 "opcode"                      (all-isas)  15 1)
(dnf f-15-1 "opcode"                      (all-isas)  15 1)
(dnf f-16-1 "opcode"                      (all-isas)  16 1)
(dnf f-16-1 "opcode"                      (all-isas)  16 1)
(dnf f-16-2 "opcode"                      (all-isas)  16 2)
(dnf f-16-2 "opcode"                      (all-isas)  16 2)
(dnf f-16-4 "opcode"                      (all-isas)  16 4)
(dnf f-16-4 "opcode"                      (all-isas)  16 4)
(dnf f-16-8 "opcode"                      (all-isas)  16 8)
(dnf f-16-8 "opcode"                      (all-isas)  16 8)
(dnf f-18-1 "opcode"                      (all-isas)  18 1)
(dnf f-18-1 "opcode"                      (all-isas)  18 1)
(dnf f-18-2 "opcode"                      (all-isas)  18 2)
(dnf f-18-2 "opcode"                      (all-isas)  18 2)
(dnf f-18-3 "opcode"                      (all-isas)  18 3)
(dnf f-18-3 "opcode"                      (all-isas)  18 3)
(dnf f-20-1 "opcode"                      (all-isas)  20 1)
(dnf f-20-1 "opcode"                      (all-isas)  20 1)
(dnf f-20-3 "opcode"                      (all-isas)  20 3)
(dnf f-20-3 "opcode"                      (all-isas)  20 3)
(dnf f-20-2 "opcode"                      (all-isas)  20 2)
(dnf f-20-2 "opcode"                      (all-isas)  20 2)
(dnf f-20-4 "opcode"                      (all-isas)  20 4)
(dnf f-20-4 "opcode"                      (all-isas)  20 4)
(dnf f-21-3 "opcode"                      (all-isas)  21 3)
(dnf f-21-3 "opcode"                      (all-isas)  21 3)
(dnf f-24-2 "opcode"                      (all-isas)  24 2)
(dnf f-24-2 "opcode"                      (all-isas)  24 2)
(dnf f-24-8 "opcode"                      (all-isas)  24 8)
(dnf f-24-8 "opcode"                      (all-isas)  24 8)
(dnf f-32-16 "opcode"                     (all-isas)  32 16)
(dnf f-32-16 "opcode"                     (all-isas)  32 16)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Registers
; Registers
;-------------------------------------------------------------
;-------------------------------------------------------------
(dnf f-src16-rn "source Rn for m16c" (MACH16 m16c-isa) 10 2)
(dnf f-src16-rn "source Rn for m16c" (MACH16 m16c-isa) 10 2)
(dnf f-src16-an "source An for m16c" (MACH16 m16c-isa) 11 1)
(dnf f-src16-an "source An for m16c" (MACH16 m16c-isa) 11 1)
(dnf f-src32-an-unprefixed "destination An for m32c" (MACH32 m32c-isa) 11 1)
(dnf f-src32-an-unprefixed "destination An for m32c" (MACH32 m32c-isa) 11 1)
(dnf f-src32-an-prefixed   "destination An for m32c" (MACH32 m32c-isa) 19 1)
(dnf f-src32-an-prefixed   "destination An for m32c" (MACH32 m32c-isa) 19 1)
; QI mode gr encoding for m32c is different than for m16c. The hardware
; QI mode gr encoding for m32c is different than for m16c. The hardware
; is indexed using the m16c encoding, so perform the transformation here.
; is indexed using the m16c encoding, so perform the transformation here.
;  register  m16c    m32c
;  register  m16c    m32c
;  ----------------------
;  ----------------------
;   r0l      00'b    10'b
;   r0l      00'b    10'b
;   r0h      01'b    00'b
;   r0h      01'b    00'b
;   r1l      10'b    11'b
;   r1l      10'b    11'b
;   r1h      11'b    01'b
;   r1h      11'b    01'b
(df  f-src32-rn-unprefixed-QI "source Rn QI for m32c" (MACH32 m32c-isa) 10 2 UINT
(df  f-src32-rn-unprefixed-QI "source Rn QI for m32c" (MACH32 m32c-isa) 10 2 UINT
     ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert
     ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert
     ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract
     ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract
)
)
; QI mode gr encoding for m32c is different than for m16c. The hardware
; QI mode gr encoding for m32c is different than for m16c. The hardware
; is indexed using the m16c encoding, so perform the transformation here.
; is indexed using the m16c encoding, so perform the transformation here.
;  register  m16c    m32c
;  register  m16c    m32c
;  ----------------------
;  ----------------------
;   r0l      00'b    10'b
;   r0l      00'b    10'b
;   r0h      01'b    00'b
;   r0h      01'b    00'b
;   r1l      10'b    11'b
;   r1l      10'b    11'b
;   r1h      11'b    01'b
;   r1h      11'b    01'b
(df  f-src32-rn-prefixed-QI "source Rn QI for m32c" (MACH32 m32c-isa) 18 2 UINT
(df  f-src32-rn-prefixed-QI "source Rn QI for m32c" (MACH32 m32c-isa) 18 2 UINT
     ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert
     ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert
     ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract
     ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract
)
)
; HI mode gr encoding for m32c is different than for m16c. The hardware
; HI mode gr encoding for m32c is different than for m16c. The hardware
; is indexed using the m16c encoding, so perform the transformation here.
; is indexed using the m16c encoding, so perform the transformation here.
;  register  m16c    m32c
;  register  m16c    m32c
;  ----------------------
;  ----------------------
;   r0       00'b    10'b
;   r0       00'b    10'b
;   r1       01'b    11'b
;   r1       01'b    11'b
;   r2       10'b    00'b
;   r2       10'b    00'b
;   r3       11'b    01'b
;   r3       11'b    01'b
(df  f-src32-rn-unprefixed-HI "source Rn HI for m32c" (MACH32 m32c-isa) 10 2 UINT
(df  f-src32-rn-unprefixed-HI "source Rn HI for m32c" (MACH32 m32c-isa) 10 2 UINT
     ((value pc) (mod USI (add value 2) 4)) ; insert
     ((value pc) (mod USI (add value 2) 4)) ; insert
     ((value pc) (mod USI (add value 2) 4)) ; extract
     ((value pc) (mod USI (add value 2) 4)) ; extract
)
)
; HI mode gr encoding for m32c is different than for m16c. The hardware
; HI mode gr encoding for m32c is different than for m16c. The hardware
; is indexed using the m16c encoding, so perform the transformation here.
; is indexed using the m16c encoding, so perform the transformation here.
;  register  m16c    m32c
;  register  m16c    m32c
;  ----------------------
;  ----------------------
;   r0       00'b    10'b
;   r0       00'b    10'b
;   r1       01'b    11'b
;   r1       01'b    11'b
;   r2       10'b    00'b
;   r2       10'b    00'b
;   r3       11'b    01'b
;   r3       11'b    01'b
(df  f-src32-rn-prefixed-HI "source Rn HI for m32c" (MACH32 m32c-isa) 18 2 UINT
(df  f-src32-rn-prefixed-HI "source Rn HI for m32c" (MACH32 m32c-isa) 18 2 UINT
     ((value pc) (mod USI (add value 2) 4)) ; insert
     ((value pc) (mod USI (add value 2) 4)) ; insert
     ((value pc) (mod USI (add value 2) 4)) ; extract
     ((value pc) (mod USI (add value 2) 4)) ; extract
)
)
; SI mode gr encoding for m32c is as follows:
; SI mode gr encoding for m32c is as follows:
;  register  encoding  index
;  register  encoding  index
;  -------------------------
;  -------------------------
;   r2r0       10'b     0
;   r2r0       10'b     0
;   r3r1       11'b     1
;   r3r1       11'b     1
(df  f-src32-rn-unprefixed-SI "source Rn SI for m32c" (MACH32 m32c-isa) 10 2 UINT
(df  f-src32-rn-unprefixed-SI "source Rn SI for m32c" (MACH32 m32c-isa) 10 2 UINT
     ((value pc) (add USI value 2)) ; insert
     ((value pc) (add USI value 2)) ; insert
     ((value pc) (sub USI value 2)) ; extract
     ((value pc) (sub USI value 2)) ; extract
)
)
(df  f-src32-rn-prefixed-SI "source Rn SI for m32c" (MACH32 m32c-isa) 18 2 UINT
(df  f-src32-rn-prefixed-SI "source Rn SI for m32c" (MACH32 m32c-isa) 18 2 UINT
     ((value pc) (add USI value 2)) ; insert
     ((value pc) (add USI value 2)) ; insert
     ((value pc) (sub USI value 2)) ; extract
     ((value pc) (sub USI value 2)) ; extract
)
)
(dnf f-dst32-rn-ext-unprefixed "destination Rn for m32c" (MACH32 m32c-isa) 9 1)
(dnf f-dst32-rn-ext-unprefixed "destination Rn for m32c" (MACH32 m32c-isa) 9 1)
(dnf f-dst16-rn      "destination Rn for m16c" (MACH16 m16c-isa) 14 2)
(dnf f-dst16-rn      "destination Rn for m16c" (MACH16 m16c-isa) 14 2)
(dnf f-dst16-rn-ext  "destination Rn for m16c" (MACH16 m16c-isa) 14 1)
(dnf f-dst16-rn-ext  "destination Rn for m16c" (MACH16 m16c-isa) 14 1)
(dnf f-dst16-rn-QI-s "destination Rn for m16c" (MACH16 m16c-isa)  5 1)
(dnf f-dst16-rn-QI-s "destination Rn for m16c" (MACH16 m16c-isa)  5 1)
(dnf f-dst16-an   "destination An for m16c" (MACH16 m16c-isa) 15 1)
(dnf f-dst16-an   "destination An for m16c" (MACH16 m16c-isa) 15 1)
(dnf f-dst16-an-s "destination An for m16c" (MACH16 m16c-isa)  4 1)
(dnf f-dst16-an-s "destination An for m16c" (MACH16 m16c-isa)  4 1)
(dnf f-dst32-an-unprefixed "destination An for m32c" (MACH32 m32c-isa)  9 1)
(dnf f-dst32-an-unprefixed "destination An for m32c" (MACH32 m32c-isa)  9 1)
(dnf f-dst32-an-prefixed   "destination An for m32c" (MACH32 m32c-isa) 17 1)
(dnf f-dst32-an-prefixed   "destination An for m32c" (MACH32 m32c-isa) 17 1)
; QI mode gr encoding for m32c is different than for m16c. The hardware
; QI mode gr encoding for m32c is different than for m16c. The hardware
; is indexed using the m16c encoding, so perform the transformation here.
; is indexed using the m16c encoding, so perform the transformation here.
;  register  m16c    m32c
;  register  m16c    m32c
;  ----------------------
;  ----------------------
;   r0l      00'b    10'b
;   r0l      00'b    10'b
;   r0h      01'b    00'b
;   r0h      01'b    00'b
;   r1l      10'b    11'b
;   r1l      10'b    11'b
;   r1h      11'b    01'b
;   r1h      11'b    01'b
(df  f-dst32-rn-unprefixed-QI "destination Rn QI for m32c" (MACH32 m32c-isa) 8 2 UINT
(df  f-dst32-rn-unprefixed-QI "destination Rn QI for m32c" (MACH32 m32c-isa) 8 2 UINT
     ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert
     ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert
     ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract
     ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract
)
)
(df  f-dst32-rn-prefixed-QI "destination Rn QI for m32c" (MACH32 m32c-isa) 16 2 UINT
(df  f-dst32-rn-prefixed-QI "destination Rn QI for m32c" (MACH32 m32c-isa) 16 2 UINT
     ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert
     ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert
     ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract
     ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract
)
)
; HI mode gr encoding for m32c is different than for m16c. The hardware
; HI mode gr encoding for m32c is different than for m16c. The hardware
; is indexed using the m16c encoding, so perform the transformation here.
; is indexed using the m16c encoding, so perform the transformation here.
;  register  m16c    m32c
;  register  m16c    m32c
;  ----------------------
;  ----------------------
;   r0       00'b    10'b
;   r0       00'b    10'b
;   r1       01'b    11'b
;   r1       01'b    11'b
;   r2       10'b    00'b
;   r2       10'b    00'b
;   r3       11'b    01'b
;   r3       11'b    01'b
(df  f-dst32-rn-unprefixed-HI "destination Rn HI for m32c" (MACH32 m32c-isa) 8 2 UINT
(df  f-dst32-rn-unprefixed-HI "destination Rn HI for m32c" (MACH32 m32c-isa) 8 2 UINT
     ((value pc) (mod USI (add value 2) 4)) ; insert
     ((value pc) (mod USI (add value 2) 4)) ; insert
     ((value pc) (mod USI (add value 2) 4)) ; extract
     ((value pc) (mod USI (add value 2) 4)) ; extract
)
)
(df  f-dst32-rn-prefixed-HI "destination Rn HI for m32c" (MACH32 m32c-isa) 16 2 UINT
(df  f-dst32-rn-prefixed-HI "destination Rn HI for m32c" (MACH32 m32c-isa) 16 2 UINT
     ((value pc) (mod USI (add value 2) 4)) ; insert
     ((value pc) (mod USI (add value 2) 4)) ; insert
     ((value pc) (mod USI (add value 2) 4)) ; extract
     ((value pc) (mod USI (add value 2) 4)) ; extract
)
)
; SI mode gr encoding for m32c is as follows:
; SI mode gr encoding for m32c is as follows:
;  register  encoding  index
;  register  encoding  index
;  -------------------------
;  -------------------------
;   r2r0       10'b     0
;   r2r0       10'b     0
;   r3r1       11'b     1
;   r3r1       11'b     1
(df  f-dst32-rn-unprefixed-SI "destination Rn SI for m32c" (MACH32 m32c-isa) 8 2 UINT
(df  f-dst32-rn-unprefixed-SI "destination Rn SI for m32c" (MACH32 m32c-isa) 8 2 UINT
     ((value pc) (add USI value 2)) ; insert
     ((value pc) (add USI value 2)) ; insert
     ((value pc) (sub USI value 2)) ; extract
     ((value pc) (sub USI value 2)) ; extract
)
)
(df  f-dst32-rn-prefixed-SI "destination Rn SI for m32c" (MACH32 m32c-isa) 16 2 UINT
(df  f-dst32-rn-prefixed-SI "destination Rn SI for m32c" (MACH32 m32c-isa) 16 2 UINT
     ((value pc) (add USI value 2)) ; insert
     ((value pc) (add USI value 2)) ; insert
     ((value pc) (sub USI value 2)) ; extract
     ((value pc) (sub USI value 2)) ; extract
)
)
(dnf f-dst16-1-S "destination R0[hl] for m16c" (MACH16 m16c-isa) 5 1)
(dnf f-dst16-1-S "destination R0[hl] for m16c" (MACH16 m16c-isa) 5 1)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Immediates embedded in the base insn
; Immediates embedded in the base insn
;-------------------------------------------------------------
;-------------------------------------------------------------
(df f-imm-8-s4   "4  bit   signed" (all-isas)  8  4  INT #f #f)
(df f-imm-8-s4   "4  bit   signed" (all-isas)  8  4  INT #f #f)
(df f-imm-12-s4  "4  bit   signed" (all-isas) 12  4  INT #f #f)
(df f-imm-12-s4  "4  bit   signed" (all-isas) 12  4  INT #f #f)
(df f-imm-13-u3  "3  bit unsigned" (all-isas) 13  3 UINT #f #f)
(df f-imm-13-u3  "3  bit unsigned" (all-isas) 13  3 UINT #f #f)
(df f-imm-20-s4  "4  bit   signed" (all-isas) 20  4  INT #f #f)
(df f-imm-20-s4  "4  bit   signed" (all-isas) 20  4  INT #f #f)
(df  f-imm1-S "1 bit immediate for short format binary insns" (MACH32 m32c-isa) 2 1 UINT
(df  f-imm1-S "1 bit immediate for short format binary insns" (MACH32 m32c-isa) 2 1 UINT
     ((value pc) (sub USI value 1)) ; insert
     ((value pc) (sub USI value 1)) ; insert
     ((value pc) (add USI value 1)) ; extract
     ((value pc) (add USI value 1)) ; extract
)
)
(dnmf f-imm3-S "3 bit unsigned for short format insns" (all-isas) UINT
(dnmf f-imm3-S "3 bit unsigned for short format insns" (all-isas) UINT
      (f-2-2 f-7-1)
      (f-2-2 f-7-1)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-7-1) (and (sub (ifield f-imm3-S) 1) 1))
                (set (ifield f-7-1) (and (sub (ifield f-imm3-S) 1) 1))
                (set (ifield f-2-2) (and (srl (sub (ifield f-imm3-S) 1) 1) #x3))
                (set (ifield f-2-2) (and (srl (sub (ifield f-imm3-S) 1) 1) #x3))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-imm3-S) (add (or (sll (ifield f-2-2) 1)
                (set (ifield f-imm3-S) (add (or (sll (ifield f-2-2) 1)
                                                (ifield f-7-1))
                                                (ifield f-7-1))
                                            1))
                                            1))
                )
                )
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Immediates and displacements beyond the base insn
; Immediates and displacements beyond the base insn
;-------------------------------------------------------------
;-------------------------------------------------------------
(df f-dsp-8-u6   "6  bit unsigned" (all-isas)  8  6 UINT #f #f)
(df f-dsp-8-u6   "6  bit unsigned" (all-isas)  8  6 UINT #f #f)
(df f-dsp-8-u8   "8  bit unsigned" (all-isas)  8  8 UINT #f #f)
(df f-dsp-8-u8   "8  bit unsigned" (all-isas)  8  8 UINT #f #f)
(df f-dsp-8-s8   "8  bit   signed" (all-isas)  8  8  INT #f #f)
(df f-dsp-8-s8   "8  bit   signed" (all-isas)  8  8  INT #f #f)
(df f-dsp-10-u6  "6  bit unsigned" (all-isas) 10  6 UINT #f #f)
(df f-dsp-10-u6  "6  bit unsigned" (all-isas) 10  6 UINT #f #f)
(df f-dsp-16-u8  "8  bit unsigned" (all-isas) 16  8 UINT #f #f)
(df f-dsp-16-u8  "8  bit unsigned" (all-isas) 16  8 UINT #f #f)
(df f-dsp-16-s8  "8  bit   signed" (all-isas) 16  8  INT #f #f)
(df f-dsp-16-s8  "8  bit   signed" (all-isas) 16  8  INT #f #f)
(df f-dsp-24-u8  "8  bit unsigned" (all-isas) 24  8 UINT #f #f)
(df f-dsp-24-u8  "8  bit unsigned" (all-isas) 24  8 UINT #f #f)
(df f-dsp-24-s8  "8  bit   signed" (all-isas) 24  8  INT #f #f)
(df f-dsp-24-s8  "8  bit   signed" (all-isas) 24  8  INT #f #f)
(df f-dsp-32-u8  "8  bit unsigned" (all-isas) 32  8 UINT #f #f)
(df f-dsp-32-u8  "8  bit unsigned" (all-isas) 32  8 UINT #f #f)
(df f-dsp-32-s8  "8  bit   signed" (all-isas) 32  8  INT #f #f)
(df f-dsp-32-s8  "8  bit   signed" (all-isas) 32  8  INT #f #f)
(df f-dsp-40-u8  "8  bit unsigned" (all-isas) 40  8 UINT #f #f)
(df f-dsp-40-u8  "8  bit unsigned" (all-isas) 40  8 UINT #f #f)
(df f-dsp-40-s8  "8  bit   signed" (all-isas) 40  8  INT #f #f)
(df f-dsp-40-s8  "8  bit   signed" (all-isas) 40  8  INT #f #f)
(df f-dsp-48-u8  "8  bit unsigned" (all-isas) 48  8 UINT #f #f)
(df f-dsp-48-u8  "8  bit unsigned" (all-isas) 48  8 UINT #f #f)
(df f-dsp-48-s8  "8  bit   signed" (all-isas) 48  8  INT #f #f)
(df f-dsp-48-s8  "8  bit   signed" (all-isas) 48  8  INT #f #f)
(df f-dsp-56-u8  "8  bit unsigned" (all-isas) 56  8 UINT #f #f)
(df f-dsp-56-u8  "8  bit unsigned" (all-isas) 56  8 UINT #f #f)
(df f-dsp-56-s8  "8  bit   signed" (all-isas) 56  8  INT #f #f)
(df f-dsp-56-s8  "8  bit   signed" (all-isas) 56  8  INT #f #f)
(df f-dsp-64-u8  "8  bit unsigned" (all-isas) 64  8 UINT #f #f)
(df f-dsp-64-u8  "8  bit unsigned" (all-isas) 64  8 UINT #f #f)
(df f-dsp-64-s8  "8  bit   signed" (all-isas) 64  8  INT #f #f)
(df f-dsp-64-s8  "8  bit   signed" (all-isas) 64  8  INT #f #f)
; Insn opcode endianness is big, but the immediate fields are stored
; Insn opcode endianness is big, but the immediate fields are stored
; in little endian. Handle this here at the field level for all immediate
; in little endian. Handle this here at the field level for all immediate
; fields longer that 1 byte.
; fields longer that 1 byte.
;
;
; CGEN can't handle a field which spans a 32 bit word boundary, so
; CGEN can't handle a field which spans a 32 bit word boundary, so
; handle those as multi ifields.
; handle those as multi ifields.
;
;
; Take care in expressions using 'srl' or 'sll' as part of some larger
; Take care in expressions using 'srl' or 'sll' as part of some larger
; expression meant to yield sign-extended values.  CGEN translates
; expression meant to yield sign-extended values.  CGEN translates
; uses of those operators into C expressions whose type is 'unsigned
; uses of those operators into C expressions whose type is 'unsigned
; int', which tends to make the whole expression 'unsigned int'.
; int', which tends to make the whole expression 'unsigned int'.
; Expressions like (set (ifield foo) X), however, just take X and
; Expressions like (set (ifield foo) X), however, just take X and
; store it in some member of 'struct cgen_fields', all of whose
; store it in some member of 'struct cgen_fields', all of whose
; members are 'long'.  On machines where 'long' is larger than
; members are 'long'.  On machines where 'long' is larger than
; 'unsigned int', assigning a "sign-extended" unsigned int to a long
; 'unsigned int', assigning a "sign-extended" unsigned int to a long
; just produces a very large positive value.  insert_normal will
; just produces a very large positive value.  insert_normal will
; range-check the field's value and produce odd error messages like
; range-check the field's value and produce odd error messages like
; this:
; this:
;
;
; Error: operand out of range (4160684031 not between -2147483648 and 2147483647) `add.l #-265,-270[fb]'
; Error: operand out of range (4160684031 not between -2147483648 and 2147483647) `add.l #-265,-270[fb]'
;
;
; Annoyingly, the code will work fine on machines where 'long' and
; Annoyingly, the code will work fine on machines where 'long' and
; 'unsigned int' are the same size: the assignment will produce a
; 'unsigned int' are the same size: the assignment will produce a
; negative number.
; negative number.
;
;
; Just tell yourself over and over: overflow detection is expensive,
; Just tell yourself over and over: overflow detection is expensive,
; and you're glad C doesn't do it, because it never happens in real
; and you're glad C doesn't do it, because it never happens in real
; life.
; life.
(df f-dsp-8-u16 "16 bit unsigned" (all-isas) 8 16 UINT
(df f-dsp-8-u16 "16 bit unsigned" (all-isas) 8 16 UINT
     ((value pc) (or UHI
     ((value pc) (or UHI
                     (and (srl value 8) #x00ff)
                     (and (srl value 8) #x00ff)
                     (and (sll value 8) #xff00))) ; insert
                     (and (sll value 8) #xff00))) ; insert
     ((value pc) (or UHI
     ((value pc) (or UHI
                     (and UHI (srl UHI value 8) #x00ff)
                     (and UHI (srl UHI value 8) #x00ff)
                     (and UHI (sll UHI value 8) #xff00))) ; extract
                     (and UHI (sll UHI value 8) #xff00))) ; extract
)
)
(df f-dsp-8-s16 "8 bit   signed" (all-isas) 8 16 INT
(df f-dsp-8-s16 "8 bit   signed" (all-isas) 8 16 INT
     ((value pc) (ext INT
     ((value pc) (ext INT
                      (trunc HI
                      (trunc HI
                             (or (and (srl value 8) #x00ff)
                             (or (and (srl value 8) #x00ff)
                                 (and (sll value 8) #xff00))))) ; insert
                                 (and (sll value 8) #xff00))))) ; insert
     ((value pc) (ext INT
     ((value pc) (ext INT
                      (trunc HI
                      (trunc HI
                             (or (and (srl value 8) #x00ff)
                             (or (and (srl value 8) #x00ff)
                                 (and (sll value 8) #xff00))))) ; extract
                                 (and (sll value 8) #xff00))))) ; extract
)
)
(df f-dsp-16-u16 "16 bit unsigned" (all-isas) 16 16 UINT
(df f-dsp-16-u16 "16 bit unsigned" (all-isas) 16 16 UINT
     ((value pc) (or UHI
     ((value pc) (or UHI
                     (and (srl value 8) #x00ff)
                     (and (srl value 8) #x00ff)
                     (and (sll value 8) #xff00))) ; insert
                     (and (sll value 8) #xff00))) ; insert
     ((value pc) (or UHI
     ((value pc) (or UHI
                     (and UHI (srl UHI value 8) #x00ff)
                     (and UHI (srl UHI value 8) #x00ff)
                     (and UHI (sll UHI value 8) #xff00))) ; extract
                     (and UHI (sll UHI value 8) #xff00))) ; extract
)
)
(df f-dsp-16-s16 "16 bit   signed" (all-isas) 16 16 INT
(df f-dsp-16-s16 "16 bit   signed" (all-isas) 16 16 INT
     ((value pc) (ext INT
     ((value pc) (ext INT
                      (trunc HI
                      (trunc HI
                             (or (and (srl value 8) #x00ff)
                             (or (and (srl value 8) #x00ff)
                                 (and (sll value 8) #xff00))))) ; insert
                                 (and (sll value 8) #xff00))))) ; insert
     ((value pc) (ext INT
     ((value pc) (ext INT
                      (trunc HI
                      (trunc HI
                             (or (and (srl value 8) #x00ff)
                             (or (and (srl value 8) #x00ff)
                                 (and (sll value 8) #xff00))))) ; extract
                                 (and (sll value 8) #xff00))))) ; extract
)
)
(dnmf f-dsp-24-u16 "16 bit unsigned" (all-isas) UINT
(dnmf f-dsp-24-u16 "16 bit unsigned" (all-isas) UINT
      (f-dsp-24-u8 f-dsp-32-u8)
      (f-dsp-24-u8 f-dsp-32-u8)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-dsp-24-u8) (and (ifield f-dsp-24-u16) #xff))
                (set (ifield f-dsp-24-u8) (and (ifield f-dsp-24-u16) #xff))
                (set (ifield f-dsp-32-u8) (and (srl (ifield f-dsp-24-u16) 8) #xff))
                (set (ifield f-dsp-32-u8) (and (srl (ifield f-dsp-24-u16) 8) #xff))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-dsp-24-u16) (or (sll (ifield f-dsp-32-u8) 8)
                (set (ifield f-dsp-24-u16) (or (sll (ifield f-dsp-32-u8) 8)
                                               (ifield f-dsp-24-u8)))
                                               (ifield f-dsp-24-u8)))
                )
                )
)
)
(dnmf f-dsp-24-s16 "16 bit signed" (all-isas) INT
(dnmf f-dsp-24-s16 "16 bit signed" (all-isas) INT
      (f-dsp-24-u8 f-dsp-32-u8)
      (f-dsp-24-u8 f-dsp-32-u8)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-dsp-24-u8)
                (set (ifield f-dsp-24-u8)
                     (and (ifield f-dsp-24-s16) #xff))
                     (and (ifield f-dsp-24-s16) #xff))
                (set (ifield f-dsp-32-u8)
                (set (ifield f-dsp-32-u8)
                     (and (srl (ifield f-dsp-24-s16) 8) #xff))
                     (and (srl (ifield f-dsp-24-s16) 8) #xff))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-dsp-24-s16)
                (set (ifield f-dsp-24-s16)
                     (ext INT
                     (ext INT
                          (trunc HI (or (sll (ifield f-dsp-32-u8) 8)
                          (trunc HI (or (sll (ifield f-dsp-32-u8) 8)
                                        (ifield f-dsp-24-u8)))))
                                        (ifield f-dsp-24-u8)))))
                )
                )
)
)
(df f-dsp-32-u16 "16 bit unsigned" (all-isas) 32 16 UINT
(df f-dsp-32-u16 "16 bit unsigned" (all-isas) 32 16 UINT
     ((value pc) (or UHI
     ((value pc) (or UHI
                     (and (srl value 8) #x00ff)
                     (and (srl value 8) #x00ff)
                     (and (sll value 8) #xff00))) ; insert
                     (and (sll value 8) #xff00))) ; insert
     ((value pc) (or UHI
     ((value pc) (or UHI
                     (and UHI (srl UHI value 8) #x00ff)
                     (and UHI (srl UHI value 8) #x00ff)
                     (and UHI (sll UHI value 8) #xff00))) ; extract
                     (and UHI (sll UHI value 8) #xff00))) ; extract
)
)
(df f-dsp-32-s16 "16 bit   signed" (all-isas) 32 16 INT
(df f-dsp-32-s16 "16 bit   signed" (all-isas) 32 16 INT
     ((value pc) (ext INT
     ((value pc) (ext INT
                      (trunc HI
                      (trunc HI
                             (or (and (srl value 8) #x00ff)
                             (or (and (srl value 8) #x00ff)
                                 (and (sll value 8) #xff00))))) ; insert
                                 (and (sll value 8) #xff00))))) ; insert
     ((value pc) (ext INT
     ((value pc) (ext INT
                      (trunc HI
                      (trunc HI
                             (or (and (srl value 8) #x00ff)
                             (or (and (srl value 8) #x00ff)
                                 (and (sll value 8) #xff00))))) ; extract
                                 (and (sll value 8) #xff00))))) ; extract
)
)
(df f-dsp-40-u16 "16 bit unsigned" (all-isas) 40 16 UINT
(df f-dsp-40-u16 "16 bit unsigned" (all-isas) 40 16 UINT
     ((value pc) (or UHI
     ((value pc) (or UHI
                     (and (srl value 8) #x00ff)
                     (and (srl value 8) #x00ff)
                     (and (sll value 8) #xff00))) ; insert
                     (and (sll value 8) #xff00))) ; insert
     ((value pc) (or UHI
     ((value pc) (or UHI
                     (and UHI (srl UHI value 8) #x00ff)
                     (and UHI (srl UHI value 8) #x00ff)
                     (and UHI (sll UHI value 8) #xff00))) ; extract
                     (and UHI (sll UHI value 8) #xff00))) ; extract
)
)
(df f-dsp-40-s16 "16 bit   signed" (all-isas) 40 16 INT
(df f-dsp-40-s16 "16 bit   signed" (all-isas) 40 16 INT
     ((value pc) (ext INT
     ((value pc) (ext INT
                      (trunc HI
                      (trunc HI
                             (or (and (srl value 8) #x00ff)
                             (or (and (srl value 8) #x00ff)
                                 (and (sll value 8) #xff00))))) ; insert
                                 (and (sll value 8) #xff00))))) ; insert
     ((value pc) (ext INT
     ((value pc) (ext INT
                      (trunc HI
                      (trunc HI
                             (or (and (srl value 8) #x00ff)
                             (or (and (srl value 8) #x00ff)
                                 (and (sll value 8) #xff00))))) ; extract
                                 (and (sll value 8) #xff00))))) ; extract
)
)
(df f-dsp-48-u16 "16 bit unsigned" (all-isas) 48 16 UINT
(df f-dsp-48-u16 "16 bit unsigned" (all-isas) 48 16 UINT
     ((value pc) (or UHI
     ((value pc) (or UHI
                     (and (srl value 8) #x00ff)
                     (and (srl value 8) #x00ff)
                     (and (sll value 8) #xff00))) ; insert
                     (and (sll value 8) #xff00))) ; insert
     ((value pc) (or UHI
     ((value pc) (or UHI
                     (and UHI (srl UHI value 8) #x00ff)
                     (and UHI (srl UHI value 8) #x00ff)
                     (and UHI (sll UHI value 8) #xff00))) ; extract
                     (and UHI (sll UHI value 8) #xff00))) ; extract
)
)
(df f-dsp-48-s16 "16 bit   signed" (all-isas) 48 16 INT
(df f-dsp-48-s16 "16 bit   signed" (all-isas) 48 16 INT
     ((value pc) (ext INT
     ((value pc) (ext INT
                      (trunc HI
                      (trunc HI
                             (or (and (srl value 8) #x00ff)
                             (or (and (srl value 8) #x00ff)
                                 (and (sll value 8) #xff00))))) ; insert
                                 (and (sll value 8) #xff00))))) ; insert
     ((value pc) (ext INT
     ((value pc) (ext INT
                      (trunc HI
                      (trunc HI
                             (or (and (srl value 8) #x00ff)
                             (or (and (srl value 8) #x00ff)
                                 (and (sll value 8) #xff00))))) ; extract
                                 (and (sll value 8) #xff00))))) ; extract
)
)
(df f-dsp-64-u16 "16 bit unsigned" (all-isas) 64 16 UINT
(df f-dsp-64-u16 "16 bit unsigned" (all-isas) 64 16 UINT
     ((value pc) (or UHI
     ((value pc) (or UHI
                     (and (srl value 8) #x00ff)
                     (and (srl value 8) #x00ff)
                     (and (sll value 8) #xff00))) ; insert
                     (and (sll value 8) #xff00))) ; insert
     ((value pc) (or UHI
     ((value pc) (or UHI
                     (and UHI (srl UHI value 8) #x00ff)
                     (and UHI (srl UHI value 8) #x00ff)
                     (and UHI (sll UHI value 8) #xff00))) ; extract
                     (and UHI (sll UHI value 8) #xff00))) ; extract
)
)
(df  f-dsp-8-s24 "24 bit signed" (all-isas) 8 24 INT
(df  f-dsp-8-s24 "24 bit signed" (all-isas) 8 24 INT
     ((value pc) (or SI
     ((value pc) (or SI
                     (or (srl value 16) (and value #xff00))
                     (or (srl value 16) (and value #xff00))
                     (sll (ext INT (trunc QI (and value #xff))) 16)))
                     (sll (ext INT (trunc QI (and value #xff))) 16)))
     ((value pc) (or SI
     ((value pc) (or SI
                     (or (srl value 16) (and value #xff00))
                     (or (srl value 16) (and value #xff00))
                     (sll (ext INT (trunc QI (and value #xff))) 16)))
                     (sll (ext INT (trunc QI (and value #xff))) 16)))
 )
 )
(df  f-dsp-8-u24 "24 bit unsigned" (all-isas) 8 24 UINT
(df  f-dsp-8-u24 "24 bit unsigned" (all-isas) 8 24 UINT
     ((value pc) (or SI
     ((value pc) (or SI
                     (or (srl value 16) (and value #xff00))
                     (or (srl value 16) (and value #xff00))
                     (sll (and value #xff) 16)))
                     (sll (and value #xff) 16)))
     ((value pc) (or SI
     ((value pc) (or SI
                     (or (srl value 16) (and value #xff00))
                     (or (srl value 16) (and value #xff00))
                     (sll (and value #xff) 16)))
                     (sll (and value #xff) 16)))
 )
 )
(dnmf f-dsp-16-u24 "24 bit unsigned" (all-isas) UINT
(dnmf f-dsp-16-u24 "24 bit unsigned" (all-isas) UINT
      (f-dsp-16-u16 f-dsp-32-u8)
      (f-dsp-16-u16 f-dsp-32-u8)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-dsp-16-u16) (and (ifield f-dsp-16-u24) #xffff))
                (set (ifield f-dsp-16-u16) (and (ifield f-dsp-16-u24) #xffff))
                (set (ifield f-dsp-32-u8) (and (srl (ifield f-dsp-16-u24) 16) #xff))
                (set (ifield f-dsp-32-u8) (and (srl (ifield f-dsp-16-u24) 16) #xff))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-dsp-16-u24) (or (sll (ifield f-dsp-32-u8) 16)
                (set (ifield f-dsp-16-u24) (or (sll (ifield f-dsp-32-u8) 16)
                                               (ifield f-dsp-16-u16)))
                                               (ifield f-dsp-16-u16)))
                )
                )
)
)
(dnmf f-dsp-24-u24 "24 bit unsigned" (all-isas) UINT
(dnmf f-dsp-24-u24 "24 bit unsigned" (all-isas) UINT
      (f-dsp-24-u8 f-dsp-32-u16)
      (f-dsp-24-u8 f-dsp-32-u16)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-dsp-24-u8) (and (ifield f-dsp-24-u24) #xff))
                (set (ifield f-dsp-24-u8) (and (ifield f-dsp-24-u24) #xff))
                (set (ifield f-dsp-32-u16) (and (srl (ifield f-dsp-24-u24) 8) #xffff))
                (set (ifield f-dsp-32-u16) (and (srl (ifield f-dsp-24-u24) 8) #xffff))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-dsp-24-u24) (or (sll (ifield f-dsp-32-u16) 8)
                (set (ifield f-dsp-24-u24) (or (sll (ifield f-dsp-32-u16) 8)
                                               (ifield f-dsp-24-u8)))
                                               (ifield f-dsp-24-u8)))
                )
                )
)
)
(df f-dsp-32-u24 "24 bit unsigned" (all-isas) 32 24 UINT
(df f-dsp-32-u24 "24 bit unsigned" (all-isas) 32 24 UINT
     ((value pc) (or USI
     ((value pc) (or USI
                     (or USI
                     (or USI
                         (and (srl value 16) #x0000ff)
                         (and (srl value 16) #x0000ff)
                         (and value          #x00ff00))
                         (and value          #x00ff00))
                     (and (sll value 16) #xff0000))) ; insert
                     (and (sll value 16) #xff0000))) ; insert
     ((value pc) (or USI
     ((value pc) (or USI
                     (or USI
                     (or USI
                         (and USI (srl UHI value 16) #x0000ff)
                         (and USI (srl UHI value 16) #x0000ff)
                         (and USI value              #x00ff00))
                         (and USI value              #x00ff00))
                     (and USI (sll UHI value 16) #xff0000))) ; extract
                     (and USI (sll UHI value 16) #xff0000))) ; extract
)
)
(df f-dsp-40-u20 "20 bit unsigned" (all-isas) 40 20 UINT
(df f-dsp-40-u20 "20 bit unsigned" (all-isas) 40 20 UINT
     ((value pc) (or USI
     ((value pc) (or USI
                     (or USI
                     (or USI
                         (and (srl value 16) #x0000ff)
                         (and (srl value 16) #x0000ff)
                         (and value          #x00ff00))
                         (and value          #x00ff00))
                     (and (sll value 16) #x0f0000))) ; insert
                     (and (sll value 16) #x0f0000))) ; insert
     ((value pc) (or USI
     ((value pc) (or USI
                     (or USI
                     (or USI
                         (and USI (srl UHI value 16) #x0000ff)
                         (and USI (srl UHI value 16) #x0000ff)
                         (and USI value              #x00ff00))
                         (and USI value              #x00ff00))
                     (and USI (sll UHI value 16) #x0f0000))) ; extract
                     (and USI (sll UHI value 16) #x0f0000))) ; extract
)
)
(df f-dsp-40-u24 "24 bit unsigned" (all-isas) 40 24 UINT
(df f-dsp-40-u24 "24 bit unsigned" (all-isas) 40 24 UINT
     ((value pc) (or USI
     ((value pc) (or USI
                     (or USI
                     (or USI
                         (and (srl value 16) #x0000ff)
                         (and (srl value 16) #x0000ff)
                         (and value          #x00ff00))
                         (and value          #x00ff00))
                     (and (sll value 16) #xff0000))) ; insert
                     (and (sll value 16) #xff0000))) ; insert
     ((value pc) (or USI
     ((value pc) (or USI
                     (or USI
                     (or USI
                         (and USI (srl UHI value 16) #x0000ff)
                         (and USI (srl UHI value 16) #x0000ff)
                         (and USI value              #x00ff00))
                         (and USI value              #x00ff00))
                     (and USI (sll UHI value 16) #xff0000))) ; extract
                     (and USI (sll UHI value 16) #xff0000))) ; extract
)
)
(dnmf f-dsp-40-s32 "32 bit signed" (all-isas) INT
(dnmf f-dsp-40-s32 "32 bit signed" (all-isas) INT
      (f-dsp-40-u24 f-dsp-64-u8)
      (f-dsp-40-u24 f-dsp-64-u8)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-dsp-64-u8) (and (srl (ifield f-dsp-40-s32) 24) #xff))
                (set (ifield f-dsp-64-u8) (and (srl (ifield f-dsp-40-s32) 24) #xff))
                (set (ifield f-dsp-40-u24) (and (ifield f-dsp-40-s32) #xffffff))
                (set (ifield f-dsp-40-u24) (and (ifield f-dsp-40-s32) #xffffff))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-dsp-40-s32) (or (and (ifield f-dsp-40-u24) #xffffff)
                (set (ifield f-dsp-40-s32) (or (and (ifield f-dsp-40-u24) #xffffff)
                                               (and (sll (ifield f-dsp-64-u8) 24) #xff000000)))
                                               (and (sll (ifield f-dsp-64-u8) 24) #xff000000)))
                )
                )
)
)
(dnmf f-dsp-48-u20 "20 bit unsigned" (all-isas) UINT
(dnmf f-dsp-48-u20 "20 bit unsigned" (all-isas) UINT
      (f-dsp-48-u16 f-dsp-64-u8)
      (f-dsp-48-u16 f-dsp-64-u8)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-dsp-64-u8) (and (srl (ifield f-dsp-48-u20) 16) #x0f))
                (set (ifield f-dsp-64-u8) (and (srl (ifield f-dsp-48-u20) 16) #x0f))
                (set (ifield f-dsp-48-u16) (and (ifield f-dsp-48-u20) #xffff))
                (set (ifield f-dsp-48-u16) (and (ifield f-dsp-48-u20) #xffff))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-dsp-48-u20) (or (and (ifield f-dsp-48-u16) #xffff)
                (set (ifield f-dsp-48-u20) (or (and (ifield f-dsp-48-u16) #xffff)
                                               (and (sll (ifield f-dsp-64-u8) 16) #x0f0000)))
                                               (and (sll (ifield f-dsp-64-u8) 16) #x0f0000)))
                )
                )
)
)
(dnmf f-dsp-48-u24 "24 bit unsigned" (all-isas) UINT
(dnmf f-dsp-48-u24 "24 bit unsigned" (all-isas) UINT
      (f-dsp-48-u16 f-dsp-64-u8)
      (f-dsp-48-u16 f-dsp-64-u8)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-dsp-64-u8) (and (srl (ifield f-dsp-48-u24) 16) #xff))
                (set (ifield f-dsp-64-u8) (and (srl (ifield f-dsp-48-u24) 16) #xff))
                (set (ifield f-dsp-48-u16) (and (ifield f-dsp-48-u24) #xffff))
                (set (ifield f-dsp-48-u16) (and (ifield f-dsp-48-u24) #xffff))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-dsp-48-u24) (or (and (ifield f-dsp-48-u16) #xffff)
                (set (ifield f-dsp-48-u24) (or (and (ifield f-dsp-48-u16) #xffff)
                                               (and (sll (ifield f-dsp-64-u8) 16) #xff0000)))
                                               (and (sll (ifield f-dsp-64-u8) 16) #xff0000)))
                )
                )
)
)
(dnmf f-dsp-16-s32 "32 bit signed" (all-isas) INT
(dnmf f-dsp-16-s32 "32 bit signed" (all-isas) INT
      (f-dsp-16-u16 f-dsp-32-u16)
      (f-dsp-16-u16 f-dsp-32-u16)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-dsp-32-u16) (and (srl (ifield f-dsp-16-s32) 16) #xffff))
                (set (ifield f-dsp-32-u16) (and (srl (ifield f-dsp-16-s32) 16) #xffff))
                (set (ifield f-dsp-16-u16) (and (ifield f-dsp-16-s32) #xffff))
                (set (ifield f-dsp-16-u16) (and (ifield f-dsp-16-s32) #xffff))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-dsp-16-s32) (or (and (ifield f-dsp-16-u16) #xffff)
                (set (ifield f-dsp-16-s32) (or (and (ifield f-dsp-16-u16) #xffff)
                                               (and (sll (ifield f-dsp-32-u16) 16) #xffff0000)))
                                               (and (sll (ifield f-dsp-32-u16) 16) #xffff0000)))
                )
                )
)
)
(dnmf f-dsp-24-s32 "32 bit signed" (all-isas) INT
(dnmf f-dsp-24-s32 "32 bit signed" (all-isas) INT
      (f-dsp-24-u8 f-dsp-32-u24)
      (f-dsp-24-u8 f-dsp-32-u24)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-dsp-32-u24) (and (srl (ifield f-dsp-24-s32) 8) #xffffff))
                (set (ifield f-dsp-32-u24) (and (srl (ifield f-dsp-24-s32) 8) #xffffff))
                (set (ifield f-dsp-24-u8) (and (ifield f-dsp-24-s32) #xff))
                (set (ifield f-dsp-24-u8) (and (ifield f-dsp-24-s32) #xff))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-dsp-24-s32) (or (and (ifield f-dsp-24-u8) #xff)
                (set (ifield f-dsp-24-s32) (or (and (ifield f-dsp-24-u8) #xff)
                                               (and (sll (ifield f-dsp-32-u24) 8) #xffffff00)))
                                               (and (sll (ifield f-dsp-32-u24) 8) #xffffff00)))
                )
                )
)
)
(df f-dsp-32-s32 "32 bit   signed" (all-isas) 32 32 INT
(df f-dsp-32-s32 "32 bit   signed" (all-isas) 32 32 INT
     ((value pc)
     ((value pc)
      ;; insert
      ;; insert
      (ext INT
      (ext INT
           (or SI
           (or SI
               (or SI
               (or SI
                   (and (srl value 24) #x000000ff)
                   (and (srl value 24) #x000000ff)
                   (and (srl value 8)  #x0000ff00))
                   (and (srl value 8)  #x0000ff00))
               (or SI
               (or SI
                   (and (sll value 8)  #x00ff0000)
                   (and (sll value 8)  #x00ff0000)
                   (and (sll value 24) #xff000000)))))
                   (and (sll value 24) #xff000000)))))
     ;; extract
     ;; extract
     ((value pc)
     ((value pc)
      (ext INT
      (ext INT
           (or SI
           (or SI
               (or SI
               (or SI
                   (and (srl value 24) #x000000ff)
                   (and (srl value 24) #x000000ff)
                   (and (srl value 8)  #x0000ff00))
                   (and (srl value 8)  #x0000ff00))
               (or SI
               (or SI
                   (and (sll value 8)  #x00ff0000)
                   (and (sll value 8)  #x00ff0000)
                   (and (sll value 24) #xff000000)))))
                   (and (sll value 24) #xff000000)))))
)
)
(dnmf f-dsp-48-u32 "32 bit unsigned" (all-isas) UINT
(dnmf f-dsp-48-u32 "32 bit unsigned" (all-isas) UINT
      (f-dsp-48-u16 f-dsp-64-u16)
      (f-dsp-48-u16 f-dsp-64-u16)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-dsp-64-u16) (and (srl (ifield f-dsp-48-u32) 16) #xffff))
                (set (ifield f-dsp-64-u16) (and (srl (ifield f-dsp-48-u32) 16) #xffff))
                (set (ifield f-dsp-48-u16) (and (ifield f-dsp-48-u32) #xffff))
                (set (ifield f-dsp-48-u16) (and (ifield f-dsp-48-u32) #xffff))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-dsp-48-u32) (or (and (ifield f-dsp-48-u16) #xffff)
                (set (ifield f-dsp-48-u32) (or (and (ifield f-dsp-48-u16) #xffff)
                                               (and (sll (ifield f-dsp-64-u16) 16) #xffff0000)))
                                               (and (sll (ifield f-dsp-64-u16) 16) #xffff0000)))
                )
                )
)
)
(dnmf f-dsp-48-s32 "32 bit signed" (all-isas) INT
(dnmf f-dsp-48-s32 "32 bit signed" (all-isas) INT
      (f-dsp-48-u16 f-dsp-64-u16)
      (f-dsp-48-u16 f-dsp-64-u16)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-dsp-64-u16) (and (srl (ifield f-dsp-48-s32) 16) #xffff))
                (set (ifield f-dsp-64-u16) (and (srl (ifield f-dsp-48-s32) 16) #xffff))
                (set (ifield f-dsp-48-u16) (and (ifield f-dsp-48-s32) #xffff))
                (set (ifield f-dsp-48-u16) (and (ifield f-dsp-48-s32) #xffff))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-dsp-48-s32) (or (and (ifield f-dsp-48-u16) #xffff)
                (set (ifield f-dsp-48-s32) (or (and (ifield f-dsp-48-u16) #xffff)
                                               (and (sll (ifield f-dsp-64-u16) 16) #xffff0000)))
                                               (and (sll (ifield f-dsp-64-u16) 16) #xffff0000)))
                )
                )
)
)
(dnmf f-dsp-56-s16 "16 bit signed" (all-isas) INT
(dnmf f-dsp-56-s16 "16 bit signed" (all-isas) INT
      (f-dsp-56-u8 f-dsp-64-u8)
      (f-dsp-56-u8 f-dsp-64-u8)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-dsp-56-u8)
                (set (ifield f-dsp-56-u8)
                     (and (ifield f-dsp-56-s16) #xff))
                     (and (ifield f-dsp-56-s16) #xff))
                (set (ifield f-dsp-64-u8)
                (set (ifield f-dsp-64-u8)
                     (and (srl (ifield f-dsp-56-s16) 8) #xff))
                     (and (srl (ifield f-dsp-56-s16) 8) #xff))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-dsp-56-s16)
                (set (ifield f-dsp-56-s16)
                     (ext INT
                     (ext INT
                          (trunc HI (or (sll (ifield f-dsp-64-u8) 8)
                          (trunc HI (or (sll (ifield f-dsp-64-u8) 8)
                                        (ifield f-dsp-56-u8)))))
                                        (ifield f-dsp-56-u8)))))
                )
                )
)
)
(df f-dsp-64-s16 " 16 bit signed" (all-isas) 64 16 INT
(df f-dsp-64-s16 " 16 bit signed" (all-isas) 64 16 INT
     ((value pc) (ext INT
     ((value pc) (ext INT
                      (trunc HI
                      (trunc HI
                             (or (and (srl value 8) #x00ff)
                             (or (and (srl value 8) #x00ff)
                                 (and (sll value 8) #xff00))))) ; insert
                                 (and (sll value 8) #xff00))))) ; insert
     ((value pc) (ext INT
     ((value pc) (ext INT
                      (trunc HI
                      (trunc HI
                             (or (and (srl value 8) #x00ff)
                             (or (and (srl value 8) #x00ff)
                                 (and (sll value 8) #xff00))))) ; extract
                                 (and (sll value 8) #xff00))))) ; extract
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Bit indices
; Bit indices
;-------------------------------------------------------------
;-------------------------------------------------------------
(dnf f-bitno16-S "bit index for m16c" (all-isas) 5 3)
(dnf f-bitno16-S "bit index for m16c" (all-isas) 5 3)
(dnf f-bitno32-prefixed "bit index for m32c" (all-isas) 21 3)
(dnf f-bitno32-prefixed "bit index for m32c" (all-isas) 21 3)
(dnf f-bitno32-unprefixed "bit index for m32c" (all-isas) 13 3)
(dnf f-bitno32-unprefixed "bit index for m32c" (all-isas) 13 3)
(dnmf f-bitbase16-u11-S "unsigned bit,base:11" (all-isas) UINT
(dnmf f-bitbase16-u11-S "unsigned bit,base:11" (all-isas) UINT
      (f-bitno16-S f-dsp-8-u8)
      (f-bitno16-S f-dsp-8-u8)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-bitno16-S) (and f-bitbase16-u11-S #x7))
                (set (ifield f-bitno16-S) (and f-bitbase16-u11-S #x7))
                (set (ifield f-dsp-8-u8) (and (srl (ifield f-bitbase16-u11-S) 3) #xff))
                (set (ifield f-dsp-8-u8) (and (srl (ifield f-bitbase16-u11-S) 3) #xff))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-bitbase16-u11-S) (or (sll (ifield f-dsp-8-u8) 3)
                (set (ifield f-bitbase16-u11-S) (or (sll (ifield f-dsp-8-u8) 3)
                                                    (ifield f-bitno16-S)))
                                                    (ifield f-bitno16-S)))
                )
                )
)
)
(dnmf f-bitbase32-16-u11-unprefixed "unsigned bit,base:11" (all-isas) UINT
(dnmf f-bitbase32-16-u11-unprefixed "unsigned bit,base:11" (all-isas) UINT
      (f-bitno32-unprefixed f-dsp-16-u8)
      (f-bitno32-unprefixed f-dsp-16-u8)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-bitno32-unprefixed) (and f-bitbase32-16-u11-unprefixed #x7))
                (set (ifield f-bitno32-unprefixed) (and f-bitbase32-16-u11-unprefixed #x7))
                (set (ifield f-dsp-16-u8) (and (srl (ifield f-bitbase32-16-u11-unprefixed) 3) #xff))
                (set (ifield f-dsp-16-u8) (and (srl (ifield f-bitbase32-16-u11-unprefixed) 3) #xff))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-bitbase32-16-u11-unprefixed) (or (sll (ifield f-dsp-16-u8) 3)
                (set (ifield f-bitbase32-16-u11-unprefixed) (or (sll (ifield f-dsp-16-u8) 3)
                                                              (ifield f-bitno32-unprefixed)))
                                                              (ifield f-bitno32-unprefixed)))
                )
                )
)
)
(dnmf f-bitbase32-16-s11-unprefixed "signed bit,base:11" (all-isas) INT
(dnmf f-bitbase32-16-s11-unprefixed "signed bit,base:11" (all-isas) INT
      (f-bitno32-unprefixed f-dsp-16-s8)
      (f-bitno32-unprefixed f-dsp-16-s8)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-bitno32-unprefixed) (and f-bitbase32-16-s11-unprefixed #x7))
                (set (ifield f-bitno32-unprefixed) (and f-bitbase32-16-s11-unprefixed #x7))
                (set (ifield f-dsp-16-s8) (sra INT (ifield f-bitbase32-16-s11-unprefixed) 3))
                (set (ifield f-dsp-16-s8) (sra INT (ifield f-bitbase32-16-s11-unprefixed) 3))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-bitbase32-16-s11-unprefixed) (or (sll (ifield f-dsp-16-s8) 3)
                (set (ifield f-bitbase32-16-s11-unprefixed) (or (sll (ifield f-dsp-16-s8) 3)
                                                                (ifield f-bitno32-unprefixed)))
                                                                (ifield f-bitno32-unprefixed)))
                )
                )
)
)
(dnmf f-bitbase32-16-u19-unprefixed "unsigned bit,base:19" (all-isas) UINT
(dnmf f-bitbase32-16-u19-unprefixed "unsigned bit,base:19" (all-isas) UINT
      (f-bitno32-unprefixed f-dsp-16-u16)
      (f-bitno32-unprefixed f-dsp-16-u16)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-bitno32-unprefixed) (and f-bitbase32-16-u19-unprefixed #x7))
                (set (ifield f-bitno32-unprefixed) (and f-bitbase32-16-u19-unprefixed #x7))
                (set (ifield f-dsp-16-u16) (and (srl (ifield f-bitbase32-16-u19-unprefixed) 3) #xffff))
                (set (ifield f-dsp-16-u16) (and (srl (ifield f-bitbase32-16-u19-unprefixed) 3) #xffff))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-bitbase32-16-u19-unprefixed) (or (sll (ifield f-dsp-16-u16) 3)
                (set (ifield f-bitbase32-16-u19-unprefixed) (or (sll (ifield f-dsp-16-u16) 3)
                                                                (ifield f-bitno32-unprefixed)))
                                                                (ifield f-bitno32-unprefixed)))
                )
                )
)
)
(dnmf f-bitbase32-16-s19-unprefixed "signed bit,base:11" (all-isas) INT
(dnmf f-bitbase32-16-s19-unprefixed "signed bit,base:11" (all-isas) INT
      (f-bitno32-unprefixed f-dsp-16-s16)
      (f-bitno32-unprefixed f-dsp-16-s16)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-bitno32-unprefixed) (and f-bitbase32-16-s19-unprefixed #x7))
                (set (ifield f-bitno32-unprefixed) (and f-bitbase32-16-s19-unprefixed #x7))
                (set (ifield f-dsp-16-s16) (sra INT (ifield f-bitbase32-16-s19-unprefixed) 3))
                (set (ifield f-dsp-16-s16) (sra INT (ifield f-bitbase32-16-s19-unprefixed) 3))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-bitbase32-16-s19-unprefixed) (or (sll (ifield f-dsp-16-s16) 3)
                (set (ifield f-bitbase32-16-s19-unprefixed) (or (sll (ifield f-dsp-16-s16) 3)
                                                                (ifield f-bitno32-unprefixed)))
                                                                (ifield f-bitno32-unprefixed)))
                )
                )
)
)
; SID decoder doesn't handle multi-ifield referencing another multi-ifield  :-(
; SID decoder doesn't handle multi-ifield referencing another multi-ifield  :-(
(dnmf f-bitbase32-16-u27-unprefixed "unsigned bit,base:27" (all-isas) UINT
(dnmf f-bitbase32-16-u27-unprefixed "unsigned bit,base:27" (all-isas) UINT
      (f-bitno32-unprefixed f-dsp-16-u16 f-dsp-32-u8)
      (f-bitno32-unprefixed f-dsp-16-u16 f-dsp-32-u8)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-bitno32-unprefixed) (and f-bitbase32-16-u27-unprefixed #x7))
                (set (ifield f-bitno32-unprefixed) (and f-bitbase32-16-u27-unprefixed #x7))
                (set (ifield f-dsp-16-u16) (and (srl (ifield f-bitbase32-16-u27-unprefixed) 3) #xffff))
                (set (ifield f-dsp-16-u16) (and (srl (ifield f-bitbase32-16-u27-unprefixed) 3) #xffff))
                (set (ifield f-dsp-32-u8) (and (srl (ifield f-bitbase32-16-u27-unprefixed) 19) #xff))
                (set (ifield f-dsp-32-u8) (and (srl (ifield f-bitbase32-16-u27-unprefixed) 19) #xff))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-bitbase32-16-u27-unprefixed) (or (sll (ifield f-dsp-16-u16) 3)
                (set (ifield f-bitbase32-16-u27-unprefixed) (or (sll (ifield f-dsp-16-u16) 3)
                                                              (or (sll (ifield f-dsp-32-u8) 19)
                                                              (or (sll (ifield f-dsp-32-u8) 19)
                                                                  (ifield f-bitno32-unprefixed))))
                                                                  (ifield f-bitno32-unprefixed))))
                )
                )
)
)
(dnmf f-bitbase32-24-u11-prefixed "unsigned bit,base:11" (all-isas) UINT
(dnmf f-bitbase32-24-u11-prefixed "unsigned bit,base:11" (all-isas) UINT
      (f-bitno32-prefixed f-dsp-24-u8)
      (f-bitno32-prefixed f-dsp-24-u8)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-bitno32-prefixed) (and f-bitbase32-24-u11-prefixed #x7))
                (set (ifield f-bitno32-prefixed) (and f-bitbase32-24-u11-prefixed #x7))
                (set (ifield f-dsp-24-u8) (and (srl (ifield f-bitbase32-24-u11-prefixed) 3) #xff))
                (set (ifield f-dsp-24-u8) (and (srl (ifield f-bitbase32-24-u11-prefixed) 3) #xff))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-bitbase32-24-u11-prefixed) (or (sll (ifield f-dsp-24-u8) 3)
                (set (ifield f-bitbase32-24-u11-prefixed) (or (sll (ifield f-dsp-24-u8) 3)
                                                              (ifield f-bitno32-prefixed)))
                                                              (ifield f-bitno32-prefixed)))
                )
                )
)
)
(dnmf f-bitbase32-24-s11-prefixed "signed bit,base:11" (all-isas) INT
(dnmf f-bitbase32-24-s11-prefixed "signed bit,base:11" (all-isas) INT
      (f-bitno32-prefixed f-dsp-24-s8)
      (f-bitno32-prefixed f-dsp-24-s8)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-bitno32-prefixed) (and f-bitbase32-24-s11-prefixed #x7))
                (set (ifield f-bitno32-prefixed) (and f-bitbase32-24-s11-prefixed #x7))
                (set (ifield f-dsp-24-s8) (sra INT (ifield f-bitbase32-24-s11-prefixed) 3))
                (set (ifield f-dsp-24-s8) (sra INT (ifield f-bitbase32-24-s11-prefixed) 3))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-bitbase32-24-s11-prefixed) (or (sll (ifield f-dsp-24-s8) 3)
                (set (ifield f-bitbase32-24-s11-prefixed) (or (sll (ifield f-dsp-24-s8) 3)
                                                              (ifield f-bitno32-prefixed)))
                                                              (ifield f-bitno32-prefixed)))
                )
                )
)
)
; SID decoder doesn't handle multi-ifield referencing another multi-ifield  :-(
; SID decoder doesn't handle multi-ifield referencing another multi-ifield  :-(
(dnmf f-bitbase32-24-u19-prefixed "unsigned bit,base:19" (all-isas) UINT
(dnmf f-bitbase32-24-u19-prefixed "unsigned bit,base:19" (all-isas) UINT
      (f-bitno32-prefixed f-dsp-24-u8 f-dsp-32-u8)
      (f-bitno32-prefixed f-dsp-24-u8 f-dsp-32-u8)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-bitno32-prefixed) (and f-bitbase32-24-u19-prefixed #x7))
                (set (ifield f-bitno32-prefixed) (and f-bitbase32-24-u19-prefixed #x7))
                (set (ifield f-dsp-24-u8) (and (srl (ifield f-bitbase32-24-u19-prefixed)  3) #xff))
                (set (ifield f-dsp-24-u8) (and (srl (ifield f-bitbase32-24-u19-prefixed)  3) #xff))
                (set (ifield f-dsp-32-u8) (and (srl (ifield f-bitbase32-24-u19-prefixed) 11) #xff))
                (set (ifield f-dsp-32-u8) (and (srl (ifield f-bitbase32-24-u19-prefixed) 11) #xff))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-bitbase32-24-u19-prefixed) (or (sll (ifield f-dsp-24-u8) 3)
                (set (ifield f-bitbase32-24-u19-prefixed) (or (sll (ifield f-dsp-24-u8) 3)
                                                              (or (sll (ifield f-dsp-32-u8) 11)
                                                              (or (sll (ifield f-dsp-32-u8) 11)
                                                                  (ifield f-bitno32-prefixed))))
                                                                  (ifield f-bitno32-prefixed))))
                )
                )
)
)
; SID decoder doesn't handle multi-ifield referencing another multi-ifield  :-(
; SID decoder doesn't handle multi-ifield referencing another multi-ifield  :-(
(dnmf f-bitbase32-24-s19-prefixed "signed bit,base:11" (all-isas) INT
(dnmf f-bitbase32-24-s19-prefixed "signed bit,base:11" (all-isas) INT
      (f-bitno32-prefixed f-dsp-24-u8 f-dsp-32-s8)
      (f-bitno32-prefixed f-dsp-24-u8 f-dsp-32-s8)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-bitno32-prefixed) (and f-bitbase32-24-s19-prefixed #x7))
                (set (ifield f-bitno32-prefixed) (and f-bitbase32-24-s19-prefixed #x7))
                (set (ifield f-dsp-24-u8) (and (srl (ifield f-bitbase32-24-s19-prefixed) 3) #xff))
                (set (ifield f-dsp-24-u8) (and (srl (ifield f-bitbase32-24-s19-prefixed) 3) #xff))
                (set (ifield f-dsp-32-s8) (sra INT (ifield f-bitbase32-24-s19-prefixed) 11))
                (set (ifield f-dsp-32-s8) (sra INT (ifield f-bitbase32-24-s19-prefixed) 11))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-bitbase32-24-s19-prefixed) (or (sll (ifield f-dsp-24-u8) 3)
                (set (ifield f-bitbase32-24-s19-prefixed) (or (sll (ifield f-dsp-24-u8) 3)
                                                              (or (sll (ifield f-dsp-32-s8) 11)
                                                              (or (sll (ifield f-dsp-32-s8) 11)
                                                                  (ifield f-bitno32-prefixed))))
                                                                  (ifield f-bitno32-prefixed))))
                )
                )
)
)
; SID decoder doesn't handle multi-ifield referencing another multi-ifield  :-(
; SID decoder doesn't handle multi-ifield referencing another multi-ifield  :-(
(dnmf f-bitbase32-24-u27-prefixed "unsigned bit,base:27" (all-isas) UINT
(dnmf f-bitbase32-24-u27-prefixed "unsigned bit,base:27" (all-isas) UINT
      (f-bitno32-prefixed f-dsp-24-u8 f-dsp-32-u16)
      (f-bitno32-prefixed f-dsp-24-u8 f-dsp-32-u16)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-bitno32-prefixed) (and f-bitbase32-24-u27-prefixed #x7))
                (set (ifield f-bitno32-prefixed) (and f-bitbase32-24-u27-prefixed #x7))
                (set (ifield f-dsp-24-u8) (and (srl (ifield f-bitbase32-24-u27-prefixed) 3) #xff))
                (set (ifield f-dsp-24-u8) (and (srl (ifield f-bitbase32-24-u27-prefixed) 3) #xff))
                (set (ifield f-dsp-32-u16) (and (srl (ifield f-bitbase32-24-u27-prefixed) 11) #xffff))
                (set (ifield f-dsp-32-u16) (and (srl (ifield f-bitbase32-24-u27-prefixed) 11) #xffff))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-bitbase32-24-u27-prefixed) (or (sll (ifield f-dsp-24-u8) 3)
                (set (ifield f-bitbase32-24-u27-prefixed) (or (sll (ifield f-dsp-24-u8) 3)
                                                              (or (sll (ifield f-dsp-32-u16) 11)
                                                              (or (sll (ifield f-dsp-32-u16) 11)
                                                                  (ifield f-bitno32-prefixed))))
                                                                  (ifield f-bitno32-prefixed))))
                )
                )
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Labels
; Labels
;-------------------------------------------------------------
;-------------------------------------------------------------
(df  f-lab-5-3 "3 bit pc relative unsigned offset" (PCREL-ADDR all-isas) 5 3 UINT
(df  f-lab-5-3 "3 bit pc relative unsigned offset" (PCREL-ADDR all-isas) 5 3 UINT
     ((value pc) (sub SI value (add SI pc 2))) ; insert
     ((value pc) (sub SI value (add SI pc 2))) ; insert
     ((value pc) (add SI value (add SI pc 2))) ; extract
     ((value pc) (add SI value (add SI pc 2))) ; extract
)
)
(dnmf f-lab32-jmp-s "unsigned 3 bit pc relative offset" (PCREL-ADDR all-isas) UINT
(dnmf f-lab32-jmp-s "unsigned 3 bit pc relative offset" (PCREL-ADDR all-isas) UINT
      (f-2-2 f-7-1)
      (f-2-2 f-7-1)
      (sequence ((SI val)) ; insert
      (sequence ((SI val)) ; insert
                (set val (sub (sub (ifield f-lab32-jmp-s) pc) 2))
                (set val (sub (sub (ifield f-lab32-jmp-s) pc) 2))
                (set (ifield f-7-1) (and val #x1))
                (set (ifield f-7-1) (and val #x1))
                (set (ifield f-2-2) (srl val 1))
                (set (ifield f-2-2) (srl val 1))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-lab32-jmp-s) (add pc (add (or (sll (ifield f-2-2) 1)
                (set (ifield f-lab32-jmp-s) (add pc (add (or (sll (ifield f-2-2) 1)
                                                             (ifield f-7-1))
                                                             (ifield f-7-1))
                                                         2)))
                                                         2)))
                )
                )
)
)
(df  f-lab-8-8 "8 bit pc relative signed offset" (PCREL-ADDR all-isas) 8 8 INT
(df  f-lab-8-8 "8 bit pc relative signed offset" (PCREL-ADDR all-isas) 8 8 INT
     ((value pc) (sub SI value (add SI pc 1))) ; insert
     ((value pc) (sub SI value (add SI pc 1))) ; insert
     ((value pc) (add SI value (add SI pc 1))) ; extract
     ((value pc) (add SI value (add SI pc 1))) ; extract
)
)
(df  f-lab-8-16 "16 bit pc relative signed offset" (PCREL-ADDR SIGN-OPT all-isas) 8 16 UINT
(df  f-lab-8-16 "16 bit pc relative signed offset" (PCREL-ADDR SIGN-OPT all-isas) 8 16 UINT
     ((value pc) (or SI (sll (and (sub value (add pc 1)) #xff) 8)
     ((value pc) (or SI (sll (and (sub value (add pc 1)) #xff) 8)
                     (srl (and (sub value (add pc 1)) #xffff) 8)))
                     (srl (and (sub value (add pc 1)) #xffff) 8)))
     ((value pc) (add SI (or (srl (and value #xffff) 8)
     ((value pc) (add SI (or (srl (and value #xffff) 8)
                             (sra (sll (and value #xff) 24) 16)) (add pc 1)))
                             (sra (sll (and value #xff) 24) 16)) (add pc 1)))
 )
 )
(df  f-lab-8-24 "24 bit absolute" (all-isas ABS-ADDR) 8 24 UINT
(df  f-lab-8-24 "24 bit absolute" (all-isas ABS-ADDR) 8 24 UINT
     ((value pc) (or SI
     ((value pc) (or SI
                     (or (srl value 16) (and value #xff00))
                     (or (srl value 16) (and value #xff00))
                     (sll (and value #xff) 16)))
                     (sll (and value #xff) 16)))
     ((value pc) (or SI
     ((value pc) (or SI
                     (or (srl value 16) (and value #xff00))
                     (or (srl value 16) (and value #xff00))
                     (sll (and value #xff) 16)))
                     (sll (and value #xff) 16)))
 )
 )
(df  f-lab-16-8 "8 bit pc relative signed offset" (PCREL-ADDR all-isas) 16 8 INT
(df  f-lab-16-8 "8 bit pc relative signed offset" (PCREL-ADDR all-isas) 16 8 INT
     ((value pc) (sub SI value (add SI pc 2))) ; insert
     ((value pc) (sub SI value (add SI pc 2))) ; insert
     ((value pc) (add SI value (add SI pc 2))) ; extract
     ((value pc) (add SI value (add SI pc 2))) ; extract
)
)
(df  f-lab-24-8 "8 bit pc relative signed offset" (PCREL-ADDR all-isas) 24 8 INT
(df  f-lab-24-8 "8 bit pc relative signed offset" (PCREL-ADDR all-isas) 24 8 INT
     ((value pc) (sub SI value (add SI pc 2))) ; insert
     ((value pc) (sub SI value (add SI pc 2))) ; insert
     ((value pc) (add SI value (add SI pc 2))) ; extract
     ((value pc) (add SI value (add SI pc 2))) ; extract
)
)
(df  f-lab-32-8 "8 bit pc relative signed offset" (PCREL-ADDR all-isas) 32 8 INT
(df  f-lab-32-8 "8 bit pc relative signed offset" (PCREL-ADDR all-isas) 32 8 INT
     ((value pc) (sub SI value (add SI pc 2))) ; insert
     ((value pc) (sub SI value (add SI pc 2))) ; insert
     ((value pc) (add SI value (add SI pc 2))) ; extract
     ((value pc) (add SI value (add SI pc 2))) ; extract
)
)
(df  f-lab-40-8 "8 bit pc relative signed offset" (PCREL-ADDR all-isas) 40 8 INT
(df  f-lab-40-8 "8 bit pc relative signed offset" (PCREL-ADDR all-isas) 40 8 INT
     ((value pc) (sub SI value (add SI pc 2))) ; insert
     ((value pc) (sub SI value (add SI pc 2))) ; insert
     ((value pc) (add SI value (add SI pc 2))) ; extract
     ((value pc) (add SI value (add SI pc 2))) ; extract
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Condition codes
; Condition codes
;-------------------------------------------------------------
;-------------------------------------------------------------
(dnf f-cond16    "condition code" (all-isas) 12 4)
(dnf f-cond16    "condition code" (all-isas) 12 4)
(dnf f-cond16j-5 "condition code" (all-isas)  5 3)
(dnf f-cond16j-5 "condition code" (all-isas)  5 3)
(dnmf f-cond32 "condition code" (all-isas) UINT
(dnmf f-cond32 "condition code" (all-isas) UINT
      (f-9-1 f-13-3)
      (f-9-1 f-13-3)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-9-1) (and (srl (ifield f-cond32) 3) 1))
                (set (ifield f-9-1) (and (srl (ifield f-cond32) 3) 1))
                (set (ifield f-13-3) (and (ifield f-cond32) #x7))
                (set (ifield f-13-3) (and (ifield f-cond32) #x7))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-cond32) (or (sll (ifield f-9-1) 3)
                (set (ifield f-cond32) (or (sll (ifield f-9-1) 3)
                                           (ifield f-13-3)))
                                           (ifield f-13-3)))
                )
                )
)
)
(dnmf f-cond32j "condition code" (all-isas) UINT
(dnmf f-cond32j "condition code" (all-isas) UINT
      (f-1-3 f-7-1)
      (f-1-3 f-7-1)
      (sequence () ; insert
      (sequence () ; insert
                (set (ifield f-1-3) (and (srl (ifield f-cond32j) 1) #x7))
                (set (ifield f-1-3) (and (srl (ifield f-cond32j) 1) #x7))
                (set (ifield f-7-1) (and (ifield f-cond32j) #x1))
                (set (ifield f-7-1) (and (ifield f-cond32j) #x1))
                )
                )
      (sequence () ; extract
      (sequence () ; extract
                (set (ifield f-cond32j) (or (sll (ifield f-1-3) 1)
                (set (ifield f-cond32j) (or (sll (ifield f-1-3) 1)
                                            (ifield f-7-1)))
                                            (ifield f-7-1)))
                )
                )
)
)


;=============================================================
;=============================================================
; Hardware
; Hardware
;
;
(dnh h-pc "program counter" (PC all-isas) (pc USI) () () ())
(dnh h-pc "program counter" (PC all-isas) (pc USI) () () ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; General registers
; General registers
; The actual registers are 16 bits
; The actual registers are 16 bits
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-hardware
(define-hardware
  (name h-gr)
  (name h-gr)
  (comment "general 16 bit registers")
  (comment "general 16 bit registers")
  (attrs all-isas CACHE-ADDR)
  (attrs all-isas CACHE-ADDR)
  (type register HI (4))
  (type register HI (4))
  (indices keyword "" (("r0" 0) ("r1" 1) ("r2" 2) ("r3" 3))))
  (indices keyword "" (("r0" 0) ("r1" 1) ("r2" 2) ("r3" 3))))
; Define different views of the grs as VIRTUAL with getter/setter specs
; Define different views of the grs as VIRTUAL with getter/setter specs
;
;
(define-hardware
(define-hardware
  (name h-gr-QI)
  (name h-gr-QI)
  (comment "general 8 bit registers")
  (comment "general 8 bit registers")
  (attrs all-isas VIRTUAL)
  (attrs all-isas VIRTUAL)
  (type register QI (4))
  (type register QI (4))
  (indices keyword "" (("r0l" 0) ("r0h" 1) ("r1l" 2) ("r1h" 3)))
  (indices keyword "" (("r0l" 0) ("r0h" 1) ("r1l" 2) ("r1h" 3)))
  (get (index) (and (if SI (mod index 2)
  (get (index) (and (if SI (mod index 2)
                        (srl (reg h-gr (div index 2)) 8)
                        (srl (reg h-gr (div index 2)) 8)
                        (reg h-gr (div index 2)))
                        (reg h-gr (div index 2)))
                    #xff))
                    #xff))
  (set (index newval) (set (reg h-gr (div index 2))
  (set (index newval) (set (reg h-gr (div index 2))
                           (if SI (mod index 2)
                           (if SI (mod index 2)
                               (or (and (reg h-gr (div index 2)) #xff)
                               (or (and (reg h-gr (div index 2)) #xff)
                                   (sll (and newval #xff) 8))
                                   (sll (and newval #xff) 8))
                               (or (and (reg h-gr (div index 2)) #xff00)
                               (or (and (reg h-gr (div index 2)) #xff00)
                                   (and newval #xff))))))
                                   (and newval #xff))))))
(define-hardware
(define-hardware
  (name h-gr-HI)
  (name h-gr-HI)
  (comment "general 16 bit registers")
  (comment "general 16 bit registers")
  (attrs all-isas VIRTUAL)
  (attrs all-isas VIRTUAL)
  (type register HI (4))
  (type register HI (4))
  (indices keyword "" (("r0" 0) ("r1" 1) ("r2" 2) ("r3" 3)))
  (indices keyword "" (("r0" 0) ("r1" 1) ("r2" 2) ("r3" 3)))
  (get (index) (reg h-gr index))
  (get (index) (reg h-gr index))
  (set (index newval) (set (reg h-gr index) newval)))
  (set (index newval) (set (reg h-gr index) newval)))
(define-hardware
(define-hardware
  (name h-gr-SI)
  (name h-gr-SI)
  (comment "general 32 bit registers")
  (comment "general 32 bit registers")
  (attrs all-isas VIRTUAL)
  (attrs all-isas VIRTUAL)
  (type register SI (2))
  (type register SI (2))
  (indices keyword "" (("r2r0" 0) ("r3r1" 1)))
  (indices keyword "" (("r2r0" 0) ("r3r1" 1)))
  (get (index) (or SI
  (get (index) (or SI
                   (and (reg h-gr index) #xffff)
                   (and (reg h-gr index) #xffff)
                   (and (sll (reg h-gr (add index 2)) 16) #xffff0000)))
                   (and (sll (reg h-gr (add index 2)) 16) #xffff0000)))
  (set (index newval) (sequence ()
  (set (index newval) (sequence ()
                                (set (reg h-gr index) (and newval #xffff))
                                (set (reg h-gr index) (and newval #xffff))
                                (set (reg h-gr (add index 2)) (srl newval 16)))))
                                (set (reg h-gr (add index 2)) (srl newval 16)))))
(define-hardware
(define-hardware
  (name h-gr-ext-QI)
  (name h-gr-ext-QI)
  (comment "general 16 bit registers")
  (comment "general 16 bit registers")
  (attrs all-isas VIRTUAL)
  (attrs all-isas VIRTUAL)
  (type register HI (2))
  (type register HI (2))
  (indices keyword "" (("r0l" 0) ("r1l" 1)))
  (indices keyword "" (("r0l" 0) ("r1l" 1)))
  (get (index) (reg h-gr-QI (mul index 2)))
  (get (index) (reg h-gr-QI (mul index 2)))
  (set (index newval) (set (reg h-gr (mul index 2)) newval)))
  (set (index newval) (set (reg h-gr (mul index 2)) newval)))
(define-hardware
(define-hardware
  (name h-gr-ext-HI)
  (name h-gr-ext-HI)
  (comment "general 16 bit registers")
  (comment "general 16 bit registers")
  (attrs all-isas VIRTUAL)
  (attrs all-isas VIRTUAL)
  (type register SI (2))
  (type register SI (2))
  (indices keyword "" (("r0" 0) ("r1" 1)))
  (indices keyword "" (("r0" 0) ("r1" 1)))
  (get (index) (reg h-gr (mul index 2)))
  (get (index) (reg h-gr (mul index 2)))
  (set (index newval) (set (reg h-gr-SI index) newval)))
  (set (index newval) (set (reg h-gr-SI index) newval)))
(define-hardware
(define-hardware
  (name h-r0l)
  (name h-r0l)
  (comment "r0l register")
  (comment "r0l register")
  (attrs all-isas VIRTUAL)
  (attrs all-isas VIRTUAL)
  (type register QI)
  (type register QI)
  (indices keyword "" (("r0l" 0)))
  (indices keyword "" (("r0l" 0)))
  (get () (reg h-gr-QI 0))
  (get () (reg h-gr-QI 0))
  (set (newval) (set (reg h-gr-QI 0) newval)))
  (set (newval) (set (reg h-gr-QI 0) newval)))
(define-hardware
(define-hardware
  (name h-r0h)
  (name h-r0h)
  (comment "r0h register")
  (comment "r0h register")
  (attrs all-isas VIRTUAL)
  (attrs all-isas VIRTUAL)
  (type register QI)
  (type register QI)
  (indices keyword "" (("r0h" 0)))
  (indices keyword "" (("r0h" 0)))
  (get () (reg h-gr-QI 1))
  (get () (reg h-gr-QI 1))
  (set (newval) (set (reg h-gr-QI 1) newval)))
  (set (newval) (set (reg h-gr-QI 1) newval)))
(define-hardware
(define-hardware
  (name h-r1l)
  (name h-r1l)
  (comment "r1l register")
  (comment "r1l register")
  (attrs all-isas VIRTUAL)
  (attrs all-isas VIRTUAL)
  (type register QI)
  (type register QI)
  (indices keyword "" (("r1l" 0)))
  (indices keyword "" (("r1l" 0)))
  (get () (reg h-gr-QI 2))
  (get () (reg h-gr-QI 2))
  (set (newval) (set (reg h-gr-QI 2) newval)))
  (set (newval) (set (reg h-gr-QI 2) newval)))
(define-hardware
(define-hardware
  (name h-r1h)
  (name h-r1h)
  (comment "r1h register")
  (comment "r1h register")
  (attrs all-isas VIRTUAL)
  (attrs all-isas VIRTUAL)
  (type register QI)
  (type register QI)
  (indices keyword "" (("r1h" 0)))
  (indices keyword "" (("r1h" 0)))
  (get () (reg h-gr-QI 3))
  (get () (reg h-gr-QI 3))
  (set (newval) (set (reg h-gr-QI 3) newval)))
  (set (newval) (set (reg h-gr-QI 3) newval)))
(define-hardware
(define-hardware
  (name h-r0)
  (name h-r0)
  (comment "r0 register")
  (comment "r0 register")
  (attrs all-isas VIRTUAL)
  (attrs all-isas VIRTUAL)
  (type register HI)
  (type register HI)
  (indices keyword "" (("r0" 0)))
  (indices keyword "" (("r0" 0)))
  (get () (reg h-gr 0))
  (get () (reg h-gr 0))
  (set (newval) (set (reg h-gr 0) newval)))
  (set (newval) (set (reg h-gr 0) newval)))
(define-hardware
(define-hardware
  (name h-r1)
  (name h-r1)
  (comment "r1 register")
  (comment "r1 register")
  (attrs all-isas VIRTUAL)
  (attrs all-isas VIRTUAL)
  (type register HI)
  (type register HI)
  (indices keyword "" (("r1" 0)))
  (indices keyword "" (("r1" 0)))
  (get () (reg h-gr 1))
  (get () (reg h-gr 1))
  (set (newval) (set (reg h-gr 1) newval)))
  (set (newval) (set (reg h-gr 1) newval)))
(define-hardware
(define-hardware
  (name h-r2)
  (name h-r2)
  (comment "r2 register")
  (comment "r2 register")
  (attrs all-isas VIRTUAL)
  (attrs all-isas VIRTUAL)
  (type register HI)
  (type register HI)
  (indices keyword "" (("r2" 0)))
  (indices keyword "" (("r2" 0)))
  (get () (reg h-gr 2))
  (get () (reg h-gr 2))
  (set (newval) (set (reg h-gr 2) newval)))
  (set (newval) (set (reg h-gr 2) newval)))
(define-hardware
(define-hardware
  (name h-r3)
  (name h-r3)
  (comment "r3 register")
  (comment "r3 register")
  (attrs all-isas VIRTUAL)
  (attrs all-isas VIRTUAL)
  (type register HI)
  (type register HI)
  (indices keyword "" (("r3" 0)))
  (indices keyword "" (("r3" 0)))
  (get () (reg h-gr 3))
  (get () (reg h-gr 3))
  (set (newval) (set (reg h-gr 3) newval)))
  (set (newval) (set (reg h-gr 3) newval)))
(define-hardware
(define-hardware
  (name h-r0l-r0h)
  (name h-r0l-r0h)
  (comment "r0l or r0h")
  (comment "r0l or r0h")
  (attrs all-isas VIRTUAL)
  (attrs all-isas VIRTUAL)
  (type register QI (2))
  (type register QI (2))
  (indices keyword "" (("r0l" 0) ("r0h" 1)))
  (indices keyword "" (("r0l" 0) ("r0h" 1)))
  (get (index) (reg h-gr-QI index))
  (get (index) (reg h-gr-QI index))
  (set (index newval) (set (reg h-gr-QI index) newval)))
  (set (index newval) (set (reg h-gr-QI index) newval)))
(define-hardware
(define-hardware
  (name h-r2r0)
  (name h-r2r0)
  (comment "r2r0 register")
  (comment "r2r0 register")
  (attrs all-isas VIRTUAL)
  (attrs all-isas VIRTUAL)
  (type register SI)
  (type register SI)
  (indices keyword "" (("r2r0" 0)))
  (indices keyword "" (("r2r0" 0)))
  (get () (or (sll (reg h-gr 2) 16) (reg h-gr 0)))
  (get () (or (sll (reg h-gr 2) 16) (reg h-gr 0)))
  (set (newval)
  (set (newval)
       (sequence ()
       (sequence ()
                 (set (reg h-gr 0) newval)
                 (set (reg h-gr 0) newval)
                 (set (reg h-gr 2) (sra newval 16)))))
                 (set (reg h-gr 2) (sra newval 16)))))
(define-hardware
(define-hardware
  (name h-r3r1)
  (name h-r3r1)
  (comment "r3r1 register")
  (comment "r3r1 register")
  (attrs all-isas VIRTUAL)
  (attrs all-isas VIRTUAL)
  (type register SI)
  (type register SI)
  (indices keyword "" (("r3r1" 0)))
  (indices keyword "" (("r3r1" 0)))
  (get () (or (sll (reg h-gr 3) 16) (reg h-gr 1)))
  (get () (or (sll (reg h-gr 3) 16) (reg h-gr 1)))
  (set (newval)
  (set (newval)
       (sequence ()
       (sequence ()
                 (set (reg h-gr 1) newval)
                 (set (reg h-gr 1) newval)
                 (set (reg h-gr 3) (sra newval 16)))))
                 (set (reg h-gr 3) (sra newval 16)))))
(define-hardware
(define-hardware
  (name h-r1r2r0)
  (name h-r1r2r0)
  (comment "r1r2r0 register")
  (comment "r1r2r0 register")
  (attrs all-isas VIRTUAL)
  (attrs all-isas VIRTUAL)
  (type register DI)
  (type register DI)
  (indices keyword "" (("r1r2r0" 0)))
  (indices keyword "" (("r1r2r0" 0)))
  (get () (or DI (sll DI (reg h-gr 1) 32) (or (sll (reg h-gr 2) 16) (reg h-gr 0))))
  (get () (or DI (sll DI (reg h-gr 1) 32) (or (sll (reg h-gr 2) 16) (reg h-gr 0))))
  (set (newval)
  (set (newval)
       (sequence ()
       (sequence ()
                 (set (reg h-gr 0) newval)
                 (set (reg h-gr 0) newval)
                 (set (reg h-gr 2) (sra newval 16))
                 (set (reg h-gr 2) (sra newval 16))
                 (set (reg h-gr 1) (sra newval 32)))))
                 (set (reg h-gr 1) (sra newval 32)))))
;-------------------------------------------------------------
;-------------------------------------------------------------
; Address registers
; Address registers
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-hardware
(define-hardware
  (name h-ar)
  (name h-ar)
  (comment "address registers")
  (comment "address registers")
  (attrs all-isas)
  (attrs all-isas)
  (type register USI (2))
  (type register USI (2))
  (indices keyword "" (("a0" 0) ("a1" 1)))
  (indices keyword "" (("a0" 0) ("a1" 1)))
  (get (index) (c-call USI "h_ar_get_handler" index))
  (get (index) (c-call USI "h_ar_get_handler" index))
  (set (index newval) (c-call VOID "h_ar_set_handler" index newval)))
  (set (index newval) (c-call VOID "h_ar_set_handler" index newval)))
; Define different views of the ars as VIRTUAL with getter/setter specs
; Define different views of the ars as VIRTUAL with getter/setter specs
(define-hardware
(define-hardware
  (name h-ar-QI)
  (name h-ar-QI)
  (comment "8 bit view of address register")
  (comment "8 bit view of address register")
  (attrs all-isas VIRTUAL)
  (attrs all-isas VIRTUAL)
  (type register QI (2))
  (type register QI (2))
  (indices keyword "" (("a0" 0) ("a1" 1)))
  (indices keyword "" (("a0" 0) ("a1" 1)))
  (get (index) (reg h-ar index))
  (get (index) (reg h-ar index))
  (set (index newval) (set (reg h-ar index) newval)))
  (set (index newval) (set (reg h-ar index) newval)))
(define-hardware
(define-hardware
  (name h-ar-HI)
  (name h-ar-HI)
  (comment "16 bit view of address register")
  (comment "16 bit view of address register")
  (attrs all-isas VIRTUAL)
  (attrs all-isas VIRTUAL)
  (type register HI (2))
  (type register HI (2))
  (indices keyword "" (("a0" 0) ("a1" 1)))
  (indices keyword "" (("a0" 0) ("a1" 1)))
  (get (index) (reg h-ar index))
  (get (index) (reg h-ar index))
  (set (index newval) (set (reg h-ar index) newval)))
  (set (index newval) (set (reg h-ar index) newval)))
(define-hardware
(define-hardware
  (name h-ar-SI)
  (name h-ar-SI)
  (comment "32 bit view of address register")
  (comment "32 bit view of address register")
  (attrs all-isas VIRTUAL)
  (attrs all-isas VIRTUAL)
  (type register SI)
  (type register SI)
  (indices keyword "" (("a1a0" 0)))
  (indices keyword "" (("a1a0" 0)))
  (get () (or SI (sll SI (ext SI (reg h-ar 1)) 16) (ext SI (reg h-ar 0))))
  (get () (or SI (sll SI (ext SI (reg h-ar 1)) 16) (ext SI (reg h-ar 0))))
  (set (newval) (sequence ()
  (set (newval) (sequence ()
                          (set (reg h-ar 0) (and newval #xffff))
                          (set (reg h-ar 0) (and newval #xffff))
                          (set (reg h-ar 1) (and (srl newval 16) #xffff)))))
                          (set (reg h-ar 1) (and (srl newval 16) #xffff)))))
(define-hardware
(define-hardware
  (name h-a0)
  (name h-a0)
  (comment "16 bit view of address register")
  (comment "16 bit view of address register")
  (attrs all-isas VIRTUAL)
  (attrs all-isas VIRTUAL)
  (type register HI)
  (type register HI)
  (indices keyword "" (("a0" 0)))
  (indices keyword "" (("a0" 0)))
  (get () (reg h-ar 0))
  (get () (reg h-ar 0))
  (set (newval) (set (reg h-ar 0) newval)))
  (set (newval) (set (reg h-ar 0) newval)))
(define-hardware
(define-hardware
  (name h-a1)
  (name h-a1)
  (comment "16 bit view of address register")
  (comment "16 bit view of address register")
  (attrs all-isas VIRTUAL)
  (attrs all-isas VIRTUAL)
  (type register HI)
  (type register HI)
  (indices keyword "" (("a1" 1)))
  (indices keyword "" (("a1" 1)))
  (get () (reg h-ar 1))
  (get () (reg h-ar 1))
  (set (newval) (set (reg h-ar 1) newval)))
  (set (newval) (set (reg h-ar 1) newval)))
; SB Register
; SB Register
(define-hardware
(define-hardware
  (name h-sb)
  (name h-sb)
  (comment "SB register")
  (comment "SB register")
  (attrs all-isas)
  (attrs all-isas)
  (type register USI)
  (type register USI)
  (get () (c-call USI "h_sb_get_handler"))
  (get () (c-call USI "h_sb_get_handler"))
  (set (newval) (c-call VOID "h_sb_set_handler" newval))
  (set (newval) (c-call VOID "h_sb_set_handler" newval))
)
)
; FB Register
; FB Register
(define-hardware
(define-hardware
  (name h-fb)
  (name h-fb)
  (comment "FB register")
  (comment "FB register")
  (attrs all-isas)
  (attrs all-isas)
  (type register USI)
  (type register USI)
  (get () (c-call USI "h_fb_get_handler"))
  (get () (c-call USI "h_fb_get_handler"))
  (set (newval) (c-call VOID "h_fb_set_handler" newval))
  (set (newval) (c-call VOID "h_fb_set_handler" newval))
)
)
; SP Register
; SP Register
(define-hardware
(define-hardware
  (name h-sp)
  (name h-sp)
  (comment "SP register")
  (comment "SP register")
  (attrs all-isas)
  (attrs all-isas)
  (type register USI)
  (type register USI)
  (get () (c-call USI "h_sp_get_handler"))
  (get () (c-call USI "h_sp_get_handler"))
  (set (newval) (c-call VOID "h_sp_set_handler" newval))
  (set (newval) (c-call VOID "h_sp_set_handler" newval))
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
; condition-code bits
; condition-code bits
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-hardware
(define-hardware
  (name h-sbit)
  (name h-sbit)
  (comment "sign bit")
  (comment "sign bit")
  (attrs all-isas)
  (attrs all-isas)
  (type register BI)
  (type register BI)
)
)
(define-hardware
(define-hardware
  (name h-zbit)
  (name h-zbit)
  (comment "zero bit")
  (comment "zero bit")
  (attrs all-isas)
  (attrs all-isas)
  (type register BI)
  (type register BI)
)
)
(define-hardware
(define-hardware
  (name h-obit)
  (name h-obit)
  (comment "overflow bit")
  (comment "overflow bit")
  (attrs all-isas)
  (attrs all-isas)
  (type register BI)
  (type register BI)
)
)
(define-hardware
(define-hardware
  (name h-cbit)
  (name h-cbit)
  (comment "carry bit")
  (comment "carry bit")
  (attrs all-isas)
  (attrs all-isas)
  (type register BI)
  (type register BI)
)
)
(define-hardware
(define-hardware
  (name h-ubit)
  (name h-ubit)
  (comment "stack pointer select bit")
  (comment "stack pointer select bit")
  (attrs all-isas)
  (attrs all-isas)
  (type register BI)
  (type register BI)
)
)
(define-hardware
(define-hardware
  (name h-ibit)
  (name h-ibit)
  (comment "interrupt enable bit")
  (comment "interrupt enable bit")
  (attrs all-isas)
  (attrs all-isas)
  (type register BI)
  (type register BI)
)
)
(define-hardware
(define-hardware
  (name h-bbit)
  (name h-bbit)
  (comment "register bank select bit")
  (comment "register bank select bit")
  (attrs all-isas)
  (attrs all-isas)
  (type register BI)
  (type register BI)
)
)
(define-hardware
(define-hardware
  (name h-dbit)
  (name h-dbit)
  (comment "debug bit")
  (comment "debug bit")
  (attrs all-isas)
  (attrs all-isas)
  (type register BI)
  (type register BI)
)
)
(define-hardware
(define-hardware
  (name h-dct0)
  (name h-dct0)
  (comment "dma transfer count 000")
  (comment "dma transfer count 000")
  (attrs all-isas)
  (attrs all-isas)
  (type register UHI)
  (type register UHI)
)
)
(define-hardware
(define-hardware
  (name h-dct1)
  (name h-dct1)
  (comment "dma transfer count 001")
  (comment "dma transfer count 001")
  (attrs all-isas)
  (attrs all-isas)
  (type register UHI)
  (type register UHI)
)
)
(define-hardware
(define-hardware
  (name h-svf)
  (name h-svf)
  (comment "save flag 011")
  (comment "save flag 011")
  (attrs all-isas)
  (attrs all-isas)
  (type register UHI)
  (type register UHI)
)
)
(define-hardware
(define-hardware
  (name h-drc0)
  (name h-drc0)
  (comment "dma transfer count reload 100")
  (comment "dma transfer count reload 100")
  (attrs all-isas)
  (attrs all-isas)
  (type register UHI)
  (type register UHI)
)
)
(define-hardware
(define-hardware
  (name h-drc1)
  (name h-drc1)
  (comment "dma transfer count reload 101")
  (comment "dma transfer count reload 101")
  (attrs all-isas)
  (attrs all-isas)
  (type register UHI)
  (type register UHI)
)
)
(define-hardware
(define-hardware
  (name h-dmd0)
  (name h-dmd0)
  (comment "dma mode 110")
  (comment "dma mode 110")
  (attrs all-isas)
  (attrs all-isas)
  (type register UQI)
  (type register UQI)
)
)
(define-hardware
(define-hardware
  (name h-dmd1)
  (name h-dmd1)
  (comment "dma mode 111")
  (comment "dma mode 111")
  (attrs all-isas)
  (attrs all-isas)
  (type register UQI)
  (type register UQI)
)
)
(define-hardware
(define-hardware
  (name h-intb)
  (name h-intb)
  (comment "interrupt table 000")
  (comment "interrupt table 000")
  (attrs all-isas)
  (attrs all-isas)
  (type register USI)
  (type register USI)
)
)
(define-hardware
(define-hardware
  (name h-svp)
  (name h-svp)
  (comment "save pc 100")
  (comment "save pc 100")
  (attrs all-isas)
  (attrs all-isas)
  (type register UHI)
  (type register UHI)
)
)
(define-hardware
(define-hardware
  (name h-vct)
  (name h-vct)
  (comment "vector 101")
  (comment "vector 101")
  (attrs all-isas)
  (attrs all-isas)
  (type register USI)
  (type register USI)
)
)
(define-hardware
(define-hardware
  (name h-isp)
  (name h-isp)
  (comment "interrupt stack ptr 111")
  (comment "interrupt stack ptr 111")
  (attrs all-isas)
  (attrs all-isas)
  (type register USI)
  (type register USI)
)
)
(define-hardware
(define-hardware
  (name h-dma0)
  (name h-dma0)
  (comment "dma mem addr 010")
  (comment "dma mem addr 010")
  (attrs all-isas)
  (attrs all-isas)
  (type register USI)
  (type register USI)
)
)
(define-hardware
(define-hardware
  (name h-dma1)
  (name h-dma1)
  (comment "dma mem addr 011")
  (comment "dma mem addr 011")
  (attrs all-isas)
  (attrs all-isas)
  (type register USI)
  (type register USI)
)
)
(define-hardware
(define-hardware
  (name h-dra0)
  (name h-dra0)
  (comment "dma mem addr reload 100")
  (comment "dma mem addr reload 100")
  (attrs all-isas)
  (attrs all-isas)
  (type register USI)
  (type register USI)
)
)
(define-hardware
(define-hardware
  (name h-dra1)
  (name h-dra1)
  (comment "dma mem addr reload 101")
  (comment "dma mem addr reload 101")
  (attrs all-isas)
  (attrs all-isas)
  (type register USI)
  (type register USI)
)
)
(define-hardware
(define-hardware
  (name h-dsa0)
  (name h-dsa0)
  (comment "dma sfr addr 110")
  (comment "dma sfr addr 110")
  (attrs all-isas)
  (attrs all-isas)
  (type register USI)
  (type register USI)
)
)
(define-hardware
(define-hardware
  (name h-dsa1)
  (name h-dsa1)
  (comment "dma sfr addr 111")
  (comment "dma sfr addr 111")
  (attrs all-isas)
  (attrs all-isas)
  (type register USI)
  (type register USI)
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Condition code operand hardware
; Condition code operand hardware
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-hardware
(define-hardware
  (name h-cond16)
  (name h-cond16)
  (comment "condition code hardware for m16c")
  (comment "condition code hardware for m16c")
  (attrs m16c-isa MACH16)
  (attrs m16c-isa MACH16)
  (type immediate UQI)
  (type immediate UQI)
  (values keyword ""
  (values keyword ""
          (("geu" #x00) ("c"  #x00)
          (("geu" #x00) ("c"  #x00)
           ("gtu" #x01)
           ("gtu" #x01)
           ("eq"  #x02) ("z"  #x02)
           ("eq"  #x02) ("z"  #x02)
           ("n"   #x03)
           ("n"   #x03)
           ("le"  #x04)
           ("le"  #x04)
           ("o"   #x05)
           ("o"   #x05)
           ("ge"  #x06)
           ("ge"  #x06)
           ("ltu" #xf8) ("nc" #xf8)
           ("ltu" #xf8) ("nc" #xf8)
           ("leu" #xf9)
           ("leu" #xf9)
           ("ne"  #xfa) ("nz" #xfa)
           ("ne"  #xfa) ("nz" #xfa)
           ("pz"  #xfb)
           ("pz"  #xfb)
           ("gt"  #xfc)
           ("gt"  #xfc)
           ("no"  #xfd)
           ("no"  #xfd)
           ("lt"  #xfe)
           ("lt"  #xfe)
          )
          )
  )
  )
)
)
(define-hardware
(define-hardware
  (name h-cond16c)
  (name h-cond16c)
  (comment "condition code hardware for m16c")
  (comment "condition code hardware for m16c")
  (attrs m16c-isa MACH16)
  (attrs m16c-isa MACH16)
  (type immediate UQI)
  (type immediate UQI)
  (values keyword ""
  (values keyword ""
          (("geu" #x00) ("c"  #x00)
          (("geu" #x00) ("c"  #x00)
           ("gtu" #x01)
           ("gtu" #x01)
           ("eq"  #x02) ("z"  #x02)
           ("eq"  #x02) ("z"  #x02)
           ("n"   #x03)
           ("n"   #x03)
           ("ltu" #x04) ("nc" #x04)
           ("ltu" #x04) ("nc" #x04)
           ("leu" #x05)
           ("leu" #x05)
           ("ne"  #x06) ("nz" #x06)
           ("ne"  #x06) ("nz" #x06)
           ("pz"  #x07)
           ("pz"  #x07)
           ("le"  #x08)
           ("le"  #x08)
           ("o"   #x09)
           ("o"   #x09)
           ("ge"  #x0a)
           ("ge"  #x0a)
           ("gt"  #x0c)
           ("gt"  #x0c)
           ("no"  #x0d)
           ("no"  #x0d)
           ("lt"  #x0e)
           ("lt"  #x0e)
          )
          )
  )
  )
)
)
(define-hardware
(define-hardware
  (name h-cond16j)
  (name h-cond16j)
  (comment "condition code hardware for m16c")
  (comment "condition code hardware for m16c")
  (attrs m16c-isa MACH16)
  (attrs m16c-isa MACH16)
  (type immediate UQI)
  (type immediate UQI)
  (values keyword ""
  (values keyword ""
          (("le"  #x08)
          (("le"  #x08)
           ("o"   #x09)
           ("o"   #x09)
           ("ge"  #x0a)
           ("ge"  #x0a)
           ("gt"  #x0c)
           ("gt"  #x0c)
           ("no"  #x0d)
           ("no"  #x0d)
           ("lt"  #x0e)
           ("lt"  #x0e)
          )
          )
  )
  )
)
)
(define-hardware
(define-hardware
  (name h-cond16j-5)
  (name h-cond16j-5)
  (comment "condition code hardware for m16c")
  (comment "condition code hardware for m16c")
  (attrs m16c-isa MACH16)
  (attrs m16c-isa MACH16)
  (type immediate UQI)
  (type immediate UQI)
  (values keyword ""
  (values keyword ""
          (("geu" #x00) ("c"  #x00)
          (("geu" #x00) ("c"  #x00)
           ("gtu" #x01)
           ("gtu" #x01)
           ("eq"  #x02) ("z"  #x02)
           ("eq"  #x02) ("z"  #x02)
           ("n"   #x03)
           ("n"   #x03)
           ("ltu" #x04) ("nc" #x04)
           ("ltu" #x04) ("nc" #x04)
           ("leu" #x05)
           ("leu" #x05)
           ("ne"  #x06) ("nz" #x06)
           ("ne"  #x06) ("nz" #x06)
           ("pz"  #x07)
           ("pz"  #x07)
          )
          )
  )
  )
)
)
(define-hardware
(define-hardware
  (name h-cond32)
  (name h-cond32)
  (comment "condition code hardware for m32c")
  (comment "condition code hardware for m32c")
  (attrs m32c-isa MACH32)
  (attrs m32c-isa MACH32)
  (type immediate UQI)
  (type immediate UQI)
  (values keyword ""
  (values keyword ""
          (("ltu" #x00) ("nc" #x00)
          (("ltu" #x00) ("nc" #x00)
           ("leu" #x01)
           ("leu" #x01)
           ("ne"  #x02) ("nz" #x02)
           ("ne"  #x02) ("nz" #x02)
           ("pz"  #x03)
           ("pz"  #x03)
           ("no"  #x04)
           ("no"  #x04)
           ("gt"  #x05)
           ("gt"  #x05)
           ("ge"  #x06)
           ("ge"  #x06)
           ("geu" #x08) ("c"  #x08)
           ("geu" #x08) ("c"  #x08)
           ("gtu" #x09)
           ("gtu" #x09)
           ("eq"  #x0a) ("z"  #x0a)
           ("eq"  #x0a) ("z"  #x0a)
           ("n"   #x0b)
           ("n"   #x0b)
           ("o"   #x0c)
           ("o"   #x0c)
           ("le"  #x0d)
           ("le"  #x0d)
           ("lt"  #x0e)
           ("lt"  #x0e)
          )
          )
  )
  )
)
)
(define-hardware
(define-hardware
  (name h-cr1-32)
  (name h-cr1-32)
  (comment "control registers")
  (comment "control registers")
  (attrs m32c-isa MACH32)
  (attrs m32c-isa MACH32)
  (type immediate UQI)
  (type immediate UQI)
  (values keyword "" (("dct0" 0) ("dct1" 1) ("flg" 2) ("svf" 3) ("drc0" 4)
  (values keyword "" (("dct0" 0) ("dct1" 1) ("flg" 2) ("svf" 3) ("drc0" 4)
                       ("drc1" 5) ("dmd0" 6) ("dmd1" 7))))
                       ("drc1" 5) ("dmd0" 6) ("dmd1" 7))))
(define-hardware
(define-hardware
  (name h-cr2-32)
  (name h-cr2-32)
  (comment "control registers")
  (comment "control registers")
  (attrs m32c-isa MACH32)
  (attrs m32c-isa MACH32)
  (type immediate UQI)
  (type immediate UQI)
  (values keyword "" (("intb" 0) ("sp" 1) ("sb" 2) ("fb" 3) ("svp" 4)
  (values keyword "" (("intb" 0) ("sp" 1) ("sb" 2) ("fb" 3) ("svp" 4)
                       ("vct" 5) ("isp" 7))))
                       ("vct" 5) ("isp" 7))))
(define-hardware
(define-hardware
  (name h-cr3-32)
  (name h-cr3-32)
  (comment "control registers")
  (comment "control registers")
  (attrs m32c-isa MACH32)
  (attrs m32c-isa MACH32)
  (type immediate UQI)
  (type immediate UQI)
  (values keyword "" (("dma0" 2) ("dma1" 3) ("dra0" 4)
  (values keyword "" (("dma0" 2) ("dma1" 3) ("dra0" 4)
                       ("dra1" 5) ("dsa0" 6) ("dsa1" 7))))
                       ("dra1" 5) ("dsa0" 6) ("dsa1" 7))))
(define-hardware
(define-hardware
  (name h-cr-16)
  (name h-cr-16)
  (comment "control registers")
  (comment "control registers")
  (attrs m16c-isa MACH16)
  (attrs m16c-isa MACH16)
  (type immediate UQI)
  (type immediate UQI)
  (values keyword "" (("intbl" 1) ("intbh" 2) ("flg" 3) ("isp" 4)
  (values keyword "" (("intbl" 1) ("intbh" 2) ("flg" 3) ("isp" 4)
                       ("sp" 5) ("sb" 6) ("fb" 7))))
                       ("sp" 5) ("sb" 6) ("fb" 7))))
(define-hardware
(define-hardware
  (name h-flags)
  (name h-flags)
  (comment "flag hardware for m32c")
  (comment "flag hardware for m32c")
  (attrs all-isas)
  (attrs all-isas)
  (type immediate UQI)
  (type immediate UQI)
  (values keyword ""
  (values keyword ""
          (("c" #x0)
          (("c" #x0)
           ("d" #x1)
           ("d" #x1)
           ("z"  #x2)
           ("z"  #x2)
           ("s"  #x3)
           ("s"  #x3)
           ("b"  #x4)
           ("b"  #x4)
           ("o"  #x5)
           ("o"  #x5)
           ("i"  #x6)
           ("i"  #x6)
           ("u"  #x7)
           ("u"  #x7)
          )
          )
  )
  )
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Misc helper hardware
; Misc helper hardware
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-hardware
(define-hardware
  (name h-shimm)
  (name h-shimm)
  (comment "shift immediate")
  (comment "shift immediate")
  (attrs all-isas)
  (attrs all-isas)
  (type immediate (INT 4))
  (type immediate (INT 4))
  (values keyword "" (("1" 0) ("2" 1) ("3" 2) ("4" 3) ("5" 4) ("6" 5) ("7" 6)
  (values keyword "" (("1" 0) ("2" 1) ("3" 2) ("4" 3) ("5" 4) ("6" 5) ("7" 6)
                      ("8" 7) ("-1" -8) ("-2" -7) ("-3" -6) ("-4" -5) ("-5" -4)
                      ("8" 7) ("-1" -8) ("-2" -7) ("-3" -6) ("-4" -5) ("-5" -4)
                      ("-6" -3) ("-7" -2) ("-8" -1)
                      ("-6" -3) ("-7" -2) ("-8" -1)
                      )))
                      )))
(define-hardware
(define-hardware
  (name h-bit-index)
  (name h-bit-index)
  (comment "bit index for the next insn")
  (comment "bit index for the next insn")
  (attrs m32c-isa MACH32)
  (attrs m32c-isa MACH32)
  (type register UHI)
  (type register UHI)
)
)
(define-hardware
(define-hardware
  (name h-src-index)
  (name h-src-index)
  (comment "source index for the next insn")
  (comment "source index for the next insn")
  (attrs m32c-isa MACH32)
  (attrs m32c-isa MACH32)
  (type register UHI)
  (type register UHI)
)
)
(define-hardware
(define-hardware
  (name h-dst-index)
  (name h-dst-index)
  (comment "destination index for the next insn")
  (comment "destination index for the next insn")
  (attrs m32c-isa MACH32)
  (attrs m32c-isa MACH32)
  (type register UHI)
  (type register UHI)
)
)
(define-hardware
(define-hardware
  (name h-src-indirect)
  (name h-src-indirect)
  (comment "indirect src for the next insn")
  (comment "indirect src for the next insn")
  (attrs all-isas)
  (attrs all-isas)
  (type register UHI)
  (type register UHI)
)
)
(define-hardware
(define-hardware
  (name h-dst-indirect)
  (name h-dst-indirect)
  (comment "indirect dst for the next insn")
  (comment "indirect dst for the next insn")
  (attrs all-isas)
  (attrs all-isas)
  (type register UHI)
  (type register UHI)
)
)
(define-hardware
(define-hardware
  (name h-none)
  (name h-none)
  (comment "for storing unused values")
  (comment "for storing unused values")
  (attrs m32c-isa MACH32)
  (attrs m32c-isa MACH32)
  (type register SI)
  (type register SI)
)
)


;=============================================================
;=============================================================
; Operands
; Operands
;-------------------------------------------------------------
;-------------------------------------------------------------
; Source Registers
; Source Registers
;-------------------------------------------------------------
;-------------------------------------------------------------
(dnop Src16RnQI  "general register QI view" (MACH16 m16c-isa) h-gr-QI f-src16-rn)
(dnop Src16RnQI  "general register QI view" (MACH16 m16c-isa) h-gr-QI f-src16-rn)
(dnop Src16RnHI  "general register QH view" (MACH16 m16c-isa) h-gr-HI f-src16-rn)
(dnop Src16RnHI  "general register QH view" (MACH16 m16c-isa) h-gr-HI f-src16-rn)
(dnop Src32RnUnprefixedQI  "general register QI view" (MACH32 m32c-isa) h-gr-QI f-src32-rn-unprefixed-QI)
(dnop Src32RnUnprefixedQI  "general register QI view" (MACH32 m32c-isa) h-gr-QI f-src32-rn-unprefixed-QI)
(dnop Src32RnUnprefixedHI  "general register HI view" (MACH32 m32c-isa) h-gr-HI f-src32-rn-unprefixed-HI)
(dnop Src32RnUnprefixedHI  "general register HI view" (MACH32 m32c-isa) h-gr-HI f-src32-rn-unprefixed-HI)
(dnop Src32RnUnprefixedSI  "general register SI view" (MACH32 m32c-isa) h-gr-SI f-src32-rn-unprefixed-SI)
(dnop Src32RnUnprefixedSI  "general register SI view" (MACH32 m32c-isa) h-gr-SI f-src32-rn-unprefixed-SI)
(dnop Src32RnPrefixedQI  "general register QI view" (MACH32 m32c-isa) h-gr-QI f-src32-rn-prefixed-QI)
(dnop Src32RnPrefixedQI  "general register QI view" (MACH32 m32c-isa) h-gr-QI f-src32-rn-prefixed-QI)
(dnop Src32RnPrefixedHI  "general register HI view" (MACH32 m32c-isa) h-gr-HI f-src32-rn-prefixed-HI)
(dnop Src32RnPrefixedHI  "general register HI view" (MACH32 m32c-isa) h-gr-HI f-src32-rn-prefixed-HI)
(dnop Src32RnPrefixedSI  "general register SI view" (MACH32 m32c-isa) h-gr-SI f-src32-rn-prefixed-SI)
(dnop Src32RnPrefixedSI  "general register SI view" (MACH32 m32c-isa) h-gr-SI f-src32-rn-prefixed-SI)
(dnop Src16An    "address register"         (MACH16 m16c-isa) h-ar    f-src16-an)
(dnop Src16An    "address register"         (MACH16 m16c-isa) h-ar    f-src16-an)
(dnop Src16AnQI  "address register QI view" (MACH16 m16c-isa) h-ar-QI f-src16-an)
(dnop Src16AnQI  "address register QI view" (MACH16 m16c-isa) h-ar-QI f-src16-an)
(dnop Src16AnHI  "address register HI view" (MACH16 m16c-isa) h-ar-HI f-src16-an)
(dnop Src16AnHI  "address register HI view" (MACH16 m16c-isa) h-ar-HI f-src16-an)
(dnop Src32AnUnprefixed    "address register"         (MACH32 m32c-isa) h-ar    f-src32-an-unprefixed)
(dnop Src32AnUnprefixed    "address register"         (MACH32 m32c-isa) h-ar    f-src32-an-unprefixed)
(dnop Src32AnUnprefixedQI  "address register QI view" (MACH32 m32c-isa) h-ar-QI f-src32-an-unprefixed)
(dnop Src32AnUnprefixedQI  "address register QI view" (MACH32 m32c-isa) h-ar-QI f-src32-an-unprefixed)
(dnop Src32AnUnprefixedHI  "address register HI view" (MACH32 m32c-isa) h-ar-HI f-src32-an-unprefixed)
(dnop Src32AnUnprefixedHI  "address register HI view" (MACH32 m32c-isa) h-ar-HI f-src32-an-unprefixed)
(dnop Src32AnUnprefixedSI  "address register SI view" (MACH32 m32c-isa) h-ar    f-src32-an-unprefixed)
(dnop Src32AnUnprefixedSI  "address register SI view" (MACH32 m32c-isa) h-ar    f-src32-an-unprefixed)
(dnop Src32AnPrefixed    "address register"         (MACH32 m32c-isa) h-ar    f-src32-an-prefixed)
(dnop Src32AnPrefixed    "address register"         (MACH32 m32c-isa) h-ar    f-src32-an-prefixed)
(dnop Src32AnPrefixedQI  "address register QI view" (MACH32 m32c-isa) h-ar-QI f-src32-an-prefixed)
(dnop Src32AnPrefixedQI  "address register QI view" (MACH32 m32c-isa) h-ar-QI f-src32-an-prefixed)
(dnop Src32AnPrefixedHI  "address register HI view" (MACH32 m32c-isa) h-ar-HI f-src32-an-prefixed)
(dnop Src32AnPrefixedHI  "address register HI view" (MACH32 m32c-isa) h-ar-HI f-src32-an-prefixed)
(dnop Src32AnPrefixedSI  "address register SI view" (MACH32 m32c-isa) h-ar    f-src32-an-prefixed)
(dnop Src32AnPrefixedSI  "address register SI view" (MACH32 m32c-isa) h-ar    f-src32-an-prefixed)
; Destination Registers
; Destination Registers
;
;
(dnop Dst16RnQI  "general register QI view" (MACH16 m16c-isa) h-gr-QI f-dst16-rn)
(dnop Dst16RnQI  "general register QI view" (MACH16 m16c-isa) h-gr-QI f-dst16-rn)
(dnop Dst16RnHI  "general register HI view" (MACH16 m16c-isa) h-gr-HI f-dst16-rn)
(dnop Dst16RnHI  "general register HI view" (MACH16 m16c-isa) h-gr-HI f-dst16-rn)
(dnop Dst16RnSI  "general register SI view" (MACH16 m16c-isa) h-gr-SI f-dst16-rn)
(dnop Dst16RnSI  "general register SI view" (MACH16 m16c-isa) h-gr-SI f-dst16-rn)
(dnop Dst16RnExtQI "general register QI/HI view for 'ext' insns" (MACH16 m16c-isa) h-gr-ext-QI f-dst16-rn-ext)
(dnop Dst16RnExtQI "general register QI/HI view for 'ext' insns" (MACH16 m16c-isa) h-gr-ext-QI f-dst16-rn-ext)
(dnop Dst32R0QI-S "general register QI view" (MACH32 m32c-isa) h-r0l f-nil)
(dnop Dst32R0QI-S "general register QI view" (MACH32 m32c-isa) h-r0l f-nil)
(dnop Dst32R0HI-S "general register HI view" (MACH32 m32c-isa) h-r0  f-nil)
(dnop Dst32R0HI-S "general register HI view" (MACH32 m32c-isa) h-r0  f-nil)
(dnop Dst32RnUnprefixedQI  "general register QI view" (MACH32 m32c-isa) h-gr-QI f-dst32-rn-unprefixed-QI)
(dnop Dst32RnUnprefixedQI  "general register QI view" (MACH32 m32c-isa) h-gr-QI f-dst32-rn-unprefixed-QI)
(dnop Dst32RnUnprefixedHI  "general register HI view" (MACH32 m32c-isa) h-gr-HI f-dst32-rn-unprefixed-HI)
(dnop Dst32RnUnprefixedHI  "general register HI view" (MACH32 m32c-isa) h-gr-HI f-dst32-rn-unprefixed-HI)
(dnop Dst32RnUnprefixedSI  "general register SI view" (MACH32 m32c-isa) h-gr-SI f-dst32-rn-unprefixed-SI)
(dnop Dst32RnUnprefixedSI  "general register SI view" (MACH32 m32c-isa) h-gr-SI f-dst32-rn-unprefixed-SI)
(dnop Dst32RnExtUnprefixedQI "general register QI view" (MACH32 m32c-isa) h-gr-ext-QI f-dst32-rn-ext-unprefixed)
(dnop Dst32RnExtUnprefixedQI "general register QI view" (MACH32 m32c-isa) h-gr-ext-QI f-dst32-rn-ext-unprefixed)
(dnop Dst32RnExtUnprefixedHI "general register HI view" (MACH32 m32c-isa) h-gr-ext-HI f-dst32-rn-ext-unprefixed)
(dnop Dst32RnExtUnprefixedHI "general register HI view" (MACH32 m32c-isa) h-gr-ext-HI f-dst32-rn-ext-unprefixed)
(dnop Dst32RnPrefixedQI    "general register QI view" (MACH32 m32c-isa) h-gr-QI f-dst32-rn-prefixed-QI)
(dnop Dst32RnPrefixedQI    "general register QI view" (MACH32 m32c-isa) h-gr-QI f-dst32-rn-prefixed-QI)
(dnop Dst32RnPrefixedHI    "general register HI view" (MACH32 m32c-isa) h-gr-HI f-dst32-rn-prefixed-HI)
(dnop Dst32RnPrefixedHI    "general register HI view" (MACH32 m32c-isa) h-gr-HI f-dst32-rn-prefixed-HI)
(dnop Dst32RnPrefixedSI    "general register SI view" (MACH32 m32c-isa) h-gr-SI f-dst32-rn-prefixed-SI)
(dnop Dst32RnPrefixedSI    "general register SI view" (MACH32 m32c-isa) h-gr-SI f-dst32-rn-prefixed-SI)
(dnop Dst16RnQI-S "general register QI view" (MACH16 m16c-isa) h-r0l-r0h f-dst16-rn-QI-s)
(dnop Dst16RnQI-S "general register QI view" (MACH16 m16c-isa) h-r0l-r0h f-dst16-rn-QI-s)
(dnop Dst16AnQI-S "address register QI view" (MACH16 m16c-isa) h-ar-QI f-dst16-rn-QI-s)
(dnop Dst16AnQI-S "address register QI view" (MACH16 m16c-isa) h-ar-QI f-dst16-rn-QI-s)
(dnop Bit16Rn  "general register bit view" (MACH16 m16c-isa) h-gr-HI f-dst16-rn)
(dnop Bit16Rn  "general register bit view" (MACH16 m16c-isa) h-gr-HI f-dst16-rn)
(dnop Bit32RnPrefixed "general register bit view" (MACH32 m32c-isa) h-gr-QI f-dst32-rn-prefixed-QI)
(dnop Bit32RnPrefixed "general register bit view" (MACH32 m32c-isa) h-gr-QI f-dst32-rn-prefixed-QI)
(dnop Bit32RnUnprefixed "general register bit view" (MACH32 m32c-isa) h-gr-QI f-dst32-rn-unprefixed-QI)
(dnop Bit32RnUnprefixed "general register bit view" (MACH32 m32c-isa) h-gr-QI f-dst32-rn-unprefixed-QI)
(dnop R0   "r0"   (all-isas) h-r0   f-nil)
(dnop R0   "r0"   (all-isas) h-r0   f-nil)
(dnop R1   "r1"   (all-isas) h-r1   f-nil)
(dnop R1   "r1"   (all-isas) h-r1   f-nil)
(dnop R2   "r2"   (all-isas) h-r2   f-nil)
(dnop R2   "r2"   (all-isas) h-r2   f-nil)
(dnop R3   "r3"   (all-isas) h-r3   f-nil)
(dnop R3   "r3"   (all-isas) h-r3   f-nil)
(dnop R0l  "r0l"  (all-isas) h-r0l  f-nil)
(dnop R0l  "r0l"  (all-isas) h-r0l  f-nil)
(dnop R0h  "r0h"  (all-isas) h-r0h  f-nil)
(dnop R0h  "r0h"  (all-isas) h-r0h  f-nil)
(dnop R2R0 "r2r0" (all-isas) h-r2r0 f-nil)
(dnop R2R0 "r2r0" (all-isas) h-r2r0 f-nil)
(dnop R3R1 "r3r1" (all-isas) h-r3r1 f-nil)
(dnop R3R1 "r3r1" (all-isas) h-r3r1 f-nil)
(dnop R1R2R0 "r1r2r0" (all-isas) h-r1r2r0 f-nil)
(dnop R1R2R0 "r1r2r0" (all-isas) h-r1r2r0 f-nil)
(dnop Dst16An    "address register"         (MACH16 m16c-isa) h-ar    f-dst16-an)
(dnop Dst16An    "address register"         (MACH16 m16c-isa) h-ar    f-dst16-an)
(dnop Dst16AnQI  "address register QI view" (MACH16 m16c-isa) h-ar-QI f-dst16-an)
(dnop Dst16AnQI  "address register QI view" (MACH16 m16c-isa) h-ar-QI f-dst16-an)
(dnop Dst16AnHI  "address register HI view" (MACH16 m16c-isa) h-ar-HI f-dst16-an)
(dnop Dst16AnHI  "address register HI view" (MACH16 m16c-isa) h-ar-HI f-dst16-an)
(dnop Dst16AnSI  "address register SI view" (MACH16 m16c-isa) h-ar-SI f-dst16-an)
(dnop Dst16AnSI  "address register SI view" (MACH16 m16c-isa) h-ar-SI f-dst16-an)
(dnop Dst16An-S  "address register HI view" (MACH16 m16c-isa) h-ar-HI f-dst16-an-s)
(dnop Dst16An-S  "address register HI view" (MACH16 m16c-isa) h-ar-HI f-dst16-an-s)
(dnop Dst32AnUnprefixed   "address register"         (MACH32 m32c-isa) h-ar    f-dst32-an-unprefixed)
(dnop Dst32AnUnprefixed   "address register"         (MACH32 m32c-isa) h-ar    f-dst32-an-unprefixed)
(dnop Dst32AnUnprefixedQI "address register QI view" (MACH32 m32c-isa) h-ar-QI f-dst32-an-unprefixed)
(dnop Dst32AnUnprefixedQI "address register QI view" (MACH32 m32c-isa) h-ar-QI f-dst32-an-unprefixed)
(dnop Dst32AnUnprefixedHI "address register HI view" (MACH32 m32c-isa) h-ar-HI f-dst32-an-unprefixed)
(dnop Dst32AnUnprefixedHI "address register HI view" (MACH32 m32c-isa) h-ar-HI f-dst32-an-unprefixed)
(dnop Dst32AnUnprefixedSI "address register SI view" (MACH32 m32c-isa) h-ar    f-dst32-an-unprefixed)
(dnop Dst32AnUnprefixedSI "address register SI view" (MACH32 m32c-isa) h-ar    f-dst32-an-unprefixed)
(dnop Dst32AnExtUnprefixed "address register"        (MACH32 m32c-isa) h-ar    f-dst32-an-unprefixed)
(dnop Dst32AnExtUnprefixed "address register"        (MACH32 m32c-isa) h-ar    f-dst32-an-unprefixed)
(dnop Dst32AnPrefixed     "address register"         (MACH32 m32c-isa) h-ar    f-dst32-an-prefixed)
(dnop Dst32AnPrefixed     "address register"         (MACH32 m32c-isa) h-ar    f-dst32-an-prefixed)
(dnop Dst32AnPrefixedQI   "address register QI view" (MACH32 m32c-isa) h-ar-QI f-dst32-an-prefixed)
(dnop Dst32AnPrefixedQI   "address register QI view" (MACH32 m32c-isa) h-ar-QI f-dst32-an-prefixed)
(dnop Dst32AnPrefixedHI   "address register HI view" (MACH32 m32c-isa) h-ar-HI f-dst32-an-prefixed)
(dnop Dst32AnPrefixedHI   "address register HI view" (MACH32 m32c-isa) h-ar-HI f-dst32-an-prefixed)
(dnop Dst32AnPrefixedSI   "address register SI view" (MACH32 m32c-isa) h-ar    f-dst32-an-prefixed)
(dnop Dst32AnPrefixedSI   "address register SI view" (MACH32 m32c-isa) h-ar    f-dst32-an-prefixed)
(dnop Bit16An  "address register bit view" (MACH16 m16c-isa) h-ar f-dst16-an)
(dnop Bit16An  "address register bit view" (MACH16 m16c-isa) h-ar f-dst16-an)
(dnop Bit32AnPrefixed "address register bit" (MACH32 m32c-isa) h-ar f-dst32-an-prefixed)
(dnop Bit32AnPrefixed "address register bit" (MACH32 m32c-isa) h-ar f-dst32-an-prefixed)
(dnop Bit32AnUnprefixed "address register bit" (MACH32 m32c-isa) h-ar f-dst32-an-unprefixed)
(dnop Bit32AnUnprefixed "address register bit" (MACH32 m32c-isa) h-ar f-dst32-an-unprefixed)
(dnop A0  "a0"   (all-isas) h-a0  f-nil)
(dnop A0  "a0"   (all-isas) h-a0  f-nil)
(dnop A1  "a1"   (all-isas) h-a1  f-nil)
(dnop A1  "a1"   (all-isas) h-a1  f-nil)
(dnop sb  "SB register" (all-isas SEM-ONLY) h-sb f-nil)
(dnop sb  "SB register" (all-isas SEM-ONLY) h-sb f-nil)
(dnop fb  "FB register" (all-isas SEM-ONLY) h-fb f-nil)
(dnop fb  "FB register" (all-isas SEM-ONLY) h-fb f-nil)
(dnop sp  "SP register" (all-isas SEM-ONLY) h-sp f-nil)
(dnop sp  "SP register" (all-isas SEM-ONLY) h-sp f-nil)
(define-full-operand SrcDst16-r0l-r0h-S-normal "r0l/r0h pair" (MACH16 m16c-isa)
(define-full-operand SrcDst16-r0l-r0h-S-normal "r0l/r0h pair" (MACH16 m16c-isa)
  h-sint DFLT f-5-1
  h-sint DFLT f-5-1
  ((parse "r0l_r0h") (print "r0l_r0h")) () ()
  ((parse "r0l_r0h") (print "r0l_r0h")) () ()
)
)
(define-full-operand Regsetpop "popm regset" (all-isas) h-uint
(define-full-operand Regsetpop "popm regset" (all-isas) h-uint
   DFLT f-8-8 ((parse "pop_regset") (print "pop_regset")) () ())
   DFLT f-8-8 ((parse "pop_regset") (print "pop_regset")) () ())
(define-full-operand Regsetpush "pushm regset" (all-isas) h-uint
(define-full-operand Regsetpush "pushm regset" (all-isas) h-uint
   DFLT f-8-8 ((parse "push_regset") (print "push_regset")) () ())
   DFLT f-8-8 ((parse "push_regset") (print "push_regset")) () ())
(dnop Rn16-push-S "r0[lh]" (MACH16 m16c-isa) h-gr-QI f-4-1)
(dnop Rn16-push-S "r0[lh]" (MACH16 m16c-isa) h-gr-QI f-4-1)
(dnop An16-push-S "a[01]"  (MACH16 m16c-isa) h-ar-HI f-4-1)
(dnop An16-push-S "a[01]"  (MACH16 m16c-isa) h-ar-HI f-4-1)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Offsets and absolutes
; Offsets and absolutes
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-full-operand Dsp-8-u6 "unsigned 6 bit displacement at offset 8 bits" (all-isas)
(define-full-operand Dsp-8-u6 "unsigned 6 bit displacement at offset 8 bits" (all-isas)
  h-uint DFLT f-dsp-8-u6
  h-uint DFLT f-dsp-8-u6
  ((parse "unsigned6")) () ()
  ((parse "unsigned6")) () ()
)
)
(define-full-operand Dsp-8-u8 "unsigned 8 bit displacement at offset 8 bits" (all-isas)
(define-full-operand Dsp-8-u8 "unsigned 8 bit displacement at offset 8 bits" (all-isas)
  h-uint DFLT f-dsp-8-u8
  h-uint DFLT f-dsp-8-u8
  ((parse "unsigned8")) () ()
  ((parse "unsigned8")) () ()
)
)
(define-full-operand Dsp-8-u16 "unsigned 16 bit displacement at offset 8 bits" (all-isas)
(define-full-operand Dsp-8-u16 "unsigned 16 bit displacement at offset 8 bits" (all-isas)
  h-uint DFLT f-dsp-8-u16
  h-uint DFLT f-dsp-8-u16
  ((parse "unsigned16")) () ()
  ((parse "unsigned16")) () ()
)
)
(define-full-operand Dsp-8-s8 "signed 8 bit displacement at offset 8 bits" (all-isas)
(define-full-operand Dsp-8-s8 "signed 8 bit displacement at offset 8 bits" (all-isas)
  h-sint DFLT f-dsp-8-s8
  h-sint DFLT f-dsp-8-s8
  ((parse "signed8")) () ()
  ((parse "signed8")) () ()
)
)
(define-full-operand Dsp-8-s24 "signed 24 bit displacement at offset 8 bits" (all-isas)
(define-full-operand Dsp-8-s24 "signed 24 bit displacement at offset 8 bits" (all-isas)
  h-sint DFLT f-dsp-8-s24
  h-sint DFLT f-dsp-8-s24
  ((parse "signed24")) () ()
  ((parse "signed24")) () ()
)
)
(define-full-operand Dsp-8-u24 "unsigned 24 bit displacement at offset 8 bits" (all-isas)
(define-full-operand Dsp-8-u24 "unsigned 24 bit displacement at offset 8 bits" (all-isas)
  h-uint DFLT f-dsp-8-u24
  h-uint DFLT f-dsp-8-u24
  ((parse "unsigned24")) () ()
  ((parse "unsigned24")) () ()
)
)
(define-full-operand Dsp-10-u6 "unsigned 6 bit displacement at offset 10 bits" (all-isas)
(define-full-operand Dsp-10-u6 "unsigned 6 bit displacement at offset 10 bits" (all-isas)
  h-uint DFLT f-dsp-10-u6
  h-uint DFLT f-dsp-10-u6
  ((parse "unsigned6")) () ()
  ((parse "unsigned6")) () ()
)
)
(define-full-operand Dsp-16-u8 "unsigned 8 bit displacement at offset 16 bits" (all-isas)
(define-full-operand Dsp-16-u8 "unsigned 8 bit displacement at offset 16 bits" (all-isas)
  h-uint DFLT f-dsp-16-u8
  h-uint DFLT f-dsp-16-u8
  ((parse "unsigned8")) () ()
  ((parse "unsigned8")) () ()
)
)
(define-full-operand Dsp-16-u16 "unsigned 16 bit displacement at offset 16 bits" (all-isas)
(define-full-operand Dsp-16-u16 "unsigned 16 bit displacement at offset 16 bits" (all-isas)
  h-uint DFLT f-dsp-16-u16
  h-uint DFLT f-dsp-16-u16
  ((parse "unsigned16")) () ()
  ((parse "unsigned16")) () ()
)
)
(define-full-operand Dsp-16-u20 "unsigned 20 bit displacement at offset 16 bits" (all-isas)
(define-full-operand Dsp-16-u20 "unsigned 20 bit displacement at offset 16 bits" (all-isas)
  h-uint DFLT f-dsp-16-u24
  h-uint DFLT f-dsp-16-u24
  ((parse "unsigned20")) () ()
  ((parse "unsigned20")) () ()
)
)
(define-full-operand Dsp-16-u24 "unsigned 24 bit displacement at offset 16 bits" (all-isas)
(define-full-operand Dsp-16-u24 "unsigned 24 bit displacement at offset 16 bits" (all-isas)
  h-uint DFLT f-dsp-16-u24
  h-uint DFLT f-dsp-16-u24
  ((parse "unsigned24")) () ()
  ((parse "unsigned24")) () ()
)
)
(define-full-operand Dsp-16-s8 "signed 8 bit displacement at offset 16 bits" (all-isas)
(define-full-operand Dsp-16-s8 "signed 8 bit displacement at offset 16 bits" (all-isas)
  h-sint DFLT f-dsp-16-s8
  h-sint DFLT f-dsp-16-s8
  ((parse "signed8")) () ()
  ((parse "signed8")) () ()
)
)
(define-full-operand Dsp-16-s16 "signed 16 bit displacement at offset 16 bits" (all-isas)
(define-full-operand Dsp-16-s16 "signed 16 bit displacement at offset 16 bits" (all-isas)
  h-sint DFLT f-dsp-16-s16
  h-sint DFLT f-dsp-16-s16
  ((parse "signed16")) () ()
  ((parse "signed16")) () ()
)
)
(define-full-operand Dsp-24-u8 "unsigned 8 bit displacement at offset 24 bits" (all-isas)
(define-full-operand Dsp-24-u8 "unsigned 8 bit displacement at offset 24 bits" (all-isas)
  h-uint DFLT f-dsp-24-u8
  h-uint DFLT f-dsp-24-u8
  ((parse "unsigned8")) () ()
  ((parse "unsigned8")) () ()
)
)
(define-full-operand Dsp-24-u16 "unsigned 16 bit displacement at offset 24 bits" (all-isas)
(define-full-operand Dsp-24-u16 "unsigned 16 bit displacement at offset 24 bits" (all-isas)
  h-uint DFLT f-dsp-24-u16
  h-uint DFLT f-dsp-24-u16
  ((parse "unsigned16")) () ()
  ((parse "unsigned16")) () ()
)
)
(define-full-operand Dsp-24-u20 "unsigned 20 bit displacement at offset 24 bits" (all-isas)
(define-full-operand Dsp-24-u20 "unsigned 20 bit displacement at offset 24 bits" (all-isas)
  h-uint DFLT f-dsp-24-u24
  h-uint DFLT f-dsp-24-u24
  ((parse "unsigned20")) () ()
  ((parse "unsigned20")) () ()
)
)
(define-full-operand Dsp-24-u24 "unsigned 24 bit displacement at offset 24 bits" (all-isas)
(define-full-operand Dsp-24-u24 "unsigned 24 bit displacement at offset 24 bits" (all-isas)
  h-uint DFLT f-dsp-24-u24
  h-uint DFLT f-dsp-24-u24
  ((parse "unsigned24")) () ()
  ((parse "unsigned24")) () ()
)
)
(define-full-operand Dsp-24-s8 "signed 8 bit displacement at offset 24 bits" (all-isas)
(define-full-operand Dsp-24-s8 "signed 8 bit displacement at offset 24 bits" (all-isas)
  h-sint DFLT f-dsp-24-s8
  h-sint DFLT f-dsp-24-s8
  ((parse "signed8")) () ()
  ((parse "signed8")) () ()
)
)
(define-full-operand Dsp-24-s16 "signed 16 bit displacement at offset 24 bits" (all-isas)
(define-full-operand Dsp-24-s16 "signed 16 bit displacement at offset 24 bits" (all-isas)
  h-sint DFLT f-dsp-24-s16
  h-sint DFLT f-dsp-24-s16
  ((parse "signed16")) () ()
  ((parse "signed16")) () ()
)
)
(define-full-operand Dsp-32-u8 "unsigned 8 bit displacement at offset 32 bits" (all-isas)
(define-full-operand Dsp-32-u8 "unsigned 8 bit displacement at offset 32 bits" (all-isas)
  h-uint DFLT f-dsp-32-u8
  h-uint DFLT f-dsp-32-u8
  ((parse "unsigned8")) () ()
  ((parse "unsigned8")) () ()
)
)
(define-full-operand Dsp-32-u16 "unsigned 16 bit displacement at offset 32 bits" (all-isas)
(define-full-operand Dsp-32-u16 "unsigned 16 bit displacement at offset 32 bits" (all-isas)
  h-uint DFLT f-dsp-32-u16
  h-uint DFLT f-dsp-32-u16
  ((parse "unsigned16")) () ()
  ((parse "unsigned16")) () ()
)
)
(define-full-operand Dsp-32-u24 "unsigned 24 bit displacement at offset 32 bits" (all-isas)
(define-full-operand Dsp-32-u24 "unsigned 24 bit displacement at offset 32 bits" (all-isas)
  h-uint DFLT f-dsp-32-u24
  h-uint DFLT f-dsp-32-u24
  ((parse "unsigned24")) () ()
  ((parse "unsigned24")) () ()
)
)
(define-full-operand Dsp-32-u20 "unsigned 20 bit displacement at offset 32 bits" (all-isas)
(define-full-operand Dsp-32-u20 "unsigned 20 bit displacement at offset 32 bits" (all-isas)
  h-uint DFLT f-dsp-32-u24
  h-uint DFLT f-dsp-32-u24
  ((parse "unsigned20")) () ()
  ((parse "unsigned20")) () ()
)
)
(define-full-operand Dsp-32-s8 "signed 8 bit displacement at offset 32 bits" (all-isas)
(define-full-operand Dsp-32-s8 "signed 8 bit displacement at offset 32 bits" (all-isas)
  h-sint DFLT f-dsp-32-s8
  h-sint DFLT f-dsp-32-s8
  ((parse "signed8")) () ()
  ((parse "signed8")) () ()
)
)
(define-full-operand Dsp-32-s16 "signed 16 bit displacement at offset 32 bits" (all-isas)
(define-full-operand Dsp-32-s16 "signed 16 bit displacement at offset 32 bits" (all-isas)
  h-sint DFLT f-dsp-32-s16
  h-sint DFLT f-dsp-32-s16
  ((parse "signed16")) () ()
  ((parse "signed16")) () ()
)
)
(define-full-operand Dsp-40-u8 "unsigned 8 bit displacement at offset 40 bits" (all-isas)
(define-full-operand Dsp-40-u8 "unsigned 8 bit displacement at offset 40 bits" (all-isas)
  h-uint DFLT f-dsp-40-u8
  h-uint DFLT f-dsp-40-u8
  ((parse "unsigned8")) () ()
  ((parse "unsigned8")) () ()
)
)
(define-full-operand Dsp-40-s8 "signed 8 bit displacement at offset 40 bits" (all-isas)
(define-full-operand Dsp-40-s8 "signed 8 bit displacement at offset 40 bits" (all-isas)
  h-sint DFLT f-dsp-40-s8
  h-sint DFLT f-dsp-40-s8
  ((parse "signed8")) () ()
  ((parse "signed8")) () ()
)
)
(define-full-operand Dsp-40-u16 "unsigned 16 bit displacement at offset 40 bits" (all-isas)
(define-full-operand Dsp-40-u16 "unsigned 16 bit displacement at offset 40 bits" (all-isas)
  h-uint DFLT f-dsp-40-u16
  h-uint DFLT f-dsp-40-u16
  ((parse "unsigned16")) () ()
  ((parse "unsigned16")) () ()
)
)
(define-full-operand Dsp-40-s16 "signed 16 bit displacement at offset 40 bits" (all-isas)
(define-full-operand Dsp-40-s16 "signed 16 bit displacement at offset 40 bits" (all-isas)
  h-sint DFLT f-dsp-40-s16
  h-sint DFLT f-dsp-40-s16
  ((parse "signed16")) () ()
  ((parse "signed16")) () ()
)
)
(define-full-operand Dsp-40-u20 "unsigned 20 bit displacement at offset 40 bits" (all-isas)
(define-full-operand Dsp-40-u20 "unsigned 20 bit displacement at offset 40 bits" (all-isas)
  h-uint DFLT f-dsp-40-u20
  h-uint DFLT f-dsp-40-u20
  ((parse "unsigned20")) () ()
  ((parse "unsigned20")) () ()
)
)
(define-full-operand Dsp-40-u24 "unsigned 24 bit displacement at offset 40 bits" (all-isas)
(define-full-operand Dsp-40-u24 "unsigned 24 bit displacement at offset 40 bits" (all-isas)
  h-uint DFLT f-dsp-40-u24
  h-uint DFLT f-dsp-40-u24
  ((parse "unsigned24")) () ()
  ((parse "unsigned24")) () ()
)
)
(define-full-operand Dsp-48-u8 "unsigned 8 bit displacement at offset 48 bits" (all-isas)
(define-full-operand Dsp-48-u8 "unsigned 8 bit displacement at offset 48 bits" (all-isas)
  h-uint DFLT f-dsp-48-u8
  h-uint DFLT f-dsp-48-u8
  ((parse "unsigned8")) () ()
  ((parse "unsigned8")) () ()
)
)
(define-full-operand Dsp-48-s8 "signed 8 bit displacement at offset 48 bits" (all-isas)
(define-full-operand Dsp-48-s8 "signed 8 bit displacement at offset 48 bits" (all-isas)
  h-sint DFLT f-dsp-48-s8
  h-sint DFLT f-dsp-48-s8
  ((parse "signed8")) () ()
  ((parse "signed8")) () ()
)
)
(define-full-operand Dsp-48-u16 "unsigned 16 bit displacement at offset 48 bits" (all-isas)
(define-full-operand Dsp-48-u16 "unsigned 16 bit displacement at offset 48 bits" (all-isas)
  h-uint DFLT f-dsp-48-u16
  h-uint DFLT f-dsp-48-u16
  ((parse "unsigned16")) () ()
  ((parse "unsigned16")) () ()
)
)
(define-full-operand Dsp-48-s16 "signed 16 bit displacement at offset 48 bits" (all-isas)
(define-full-operand Dsp-48-s16 "signed 16 bit displacement at offset 48 bits" (all-isas)
  h-sint DFLT f-dsp-48-s16
  h-sint DFLT f-dsp-48-s16
  ((parse "signed16")) () ()
  ((parse "signed16")) () ()
)
)
(define-full-operand Dsp-48-u20 "unsigned 24 bit displacement at offset 40 bits" (all-isas)
(define-full-operand Dsp-48-u20 "unsigned 24 bit displacement at offset 40 bits" (all-isas)
  h-uint DFLT f-dsp-48-u20
  h-uint DFLT f-dsp-48-u20
  ((parse "unsigned24")) () ()
  ((parse "unsigned24")) () ()
)
)
(define-full-operand Dsp-48-u24 "unsigned 24 bit displacement at offset 48 bits" (all-isas)
(define-full-operand Dsp-48-u24 "unsigned 24 bit displacement at offset 48 bits" (all-isas)
  h-uint DFLT f-dsp-48-u24
  h-uint DFLT f-dsp-48-u24
  ((parse "unsigned24")) () ()
  ((parse "unsigned24")) () ()
)
)
(define-full-operand Imm-8-s4 "signed 4 bit immediate at offset 8 bits" (all-isas)
(define-full-operand Imm-8-s4 "signed 4 bit immediate at offset 8 bits" (all-isas)
  h-sint DFLT f-imm-8-s4
  h-sint DFLT f-imm-8-s4
  ((parse "signed4")) () ()
  ((parse "signed4")) () ()
)
)
(define-full-operand Imm-8-s4n "negated 4 bit immediate at offset 8 bits" (all-isas)
(define-full-operand Imm-8-s4n "negated 4 bit immediate at offset 8 bits" (all-isas)
  h-sint DFLT f-imm-8-s4
  h-sint DFLT f-imm-8-s4
  ((parse "signed4n") (print "signed4n")) () ()
  ((parse "signed4n") (print "signed4n")) () ()
)
)
(define-full-operand Imm-sh-8-s4 "signed 4 bit shift immediate at offset 8 bits" (all-isas)
(define-full-operand Imm-sh-8-s4 "signed 4 bit shift immediate at offset 8 bits" (all-isas)
  h-shimm DFLT f-imm-8-s4
  h-shimm DFLT f-imm-8-s4
  () () ()
  () () ()
)
)
(define-full-operand Imm-8-QI "signed 8 bit immediate at offset 8 bits" (all-isas)
(define-full-operand Imm-8-QI "signed 8 bit immediate at offset 8 bits" (all-isas)
  h-sint DFLT f-dsp-8-s8
  h-sint DFLT f-dsp-8-s8
  ((parse "signed8")) () ()
  ((parse "signed8")) () ()
)
)
(define-full-operand Imm-8-HI "signed 16 bit immediate at offset 8 bits" (all-isas)
(define-full-operand Imm-8-HI "signed 16 bit immediate at offset 8 bits" (all-isas)
  h-sint DFLT f-dsp-8-s16
  h-sint DFLT f-dsp-8-s16
  ((parse "signed16")) () ()
  ((parse "signed16")) () ()
)
)
(define-full-operand Imm-12-s4 "signed 4 bit immediate at offset 12 bits" (all-isas)
(define-full-operand Imm-12-s4 "signed 4 bit immediate at offset 12 bits" (all-isas)
  h-sint DFLT f-imm-12-s4
  h-sint DFLT f-imm-12-s4
  ((parse "signed4")) () ()
  ((parse "signed4")) () ()
)
)
(define-full-operand Imm-12-s4n "negated 4 bit immediate at offset 12 bits" (all-isas)
(define-full-operand Imm-12-s4n "negated 4 bit immediate at offset 12 bits" (all-isas)
  h-sint DFLT f-imm-12-s4
  h-sint DFLT f-imm-12-s4
  ((parse "signed4n") (print "signed4n")) () ()
  ((parse "signed4n") (print "signed4n")) () ()
)
)
(define-full-operand Imm-sh-12-s4 "signed 4 bit shift immediate at offset 12 bits" (all-isas)
(define-full-operand Imm-sh-12-s4 "signed 4 bit shift immediate at offset 12 bits" (all-isas)
  h-shimm DFLT f-imm-12-s4
  h-shimm DFLT f-imm-12-s4
  () () ()
  () () ()
)
)
(define-full-operand Imm-13-u3 "signed 3 bit immediate at offset 13 bits" (all-isas)
(define-full-operand Imm-13-u3 "signed 3 bit immediate at offset 13 bits" (all-isas)
  h-sint DFLT f-imm-13-u3
  h-sint DFLT f-imm-13-u3
  ((parse "signed4")) () ()
  ((parse "signed4")) () ()
)
)
(define-full-operand Imm-20-s4 "signed 4 bit immediate at offset 20 bits" (all-isas)
(define-full-operand Imm-20-s4 "signed 4 bit immediate at offset 20 bits" (all-isas)
  h-sint DFLT f-imm-20-s4
  h-sint DFLT f-imm-20-s4
  ((parse "signed4")) () ()
  ((parse "signed4")) () ()
)
)
(define-full-operand Imm-sh-20-s4 "signed 4 bit shift immediate at offset 12 bits" (all-isas)
(define-full-operand Imm-sh-20-s4 "signed 4 bit shift immediate at offset 12 bits" (all-isas)
  h-shimm DFLT f-imm-20-s4
  h-shimm DFLT f-imm-20-s4
  () () ()
  () () ()
)
)
(define-full-operand Imm-16-QI "signed 8 bit immediate at offset 16 bits" (all-isas)
(define-full-operand Imm-16-QI "signed 8 bit immediate at offset 16 bits" (all-isas)
  h-sint DFLT f-dsp-16-s8
  h-sint DFLT f-dsp-16-s8
  ((parse "signed8")) () ()
  ((parse "signed8")) () ()
)
)
(define-full-operand Imm-16-HI "signed 16 bit immediate at offset 16 bits" (all-isas)
(define-full-operand Imm-16-HI "signed 16 bit immediate at offset 16 bits" (all-isas)
  h-sint DFLT f-dsp-16-s16
  h-sint DFLT f-dsp-16-s16
  ((parse "signed16")) () ()
  ((parse "signed16")) () ()
)
)
(define-full-operand Imm-16-SI "signed 32 bit immediate at offset 16 bits" (all-isas)
(define-full-operand Imm-16-SI "signed 32 bit immediate at offset 16 bits" (all-isas)
  h-sint DFLT f-dsp-16-s32
  h-sint DFLT f-dsp-16-s32
  ((parse "signed32")) () ()
  ((parse "signed32")) () ()
)
)
(define-full-operand Imm-24-QI "signed 8 bit immediate at offset 24 bits" (all-isas)
(define-full-operand Imm-24-QI "signed 8 bit immediate at offset 24 bits" (all-isas)
  h-sint DFLT f-dsp-24-s8
  h-sint DFLT f-dsp-24-s8
  ((parse "signed8")) () ()
  ((parse "signed8")) () ()
)
)
(define-full-operand Imm-24-HI "signed 16 bit immediate at offset 24 bits" (all-isas)
(define-full-operand Imm-24-HI "signed 16 bit immediate at offset 24 bits" (all-isas)
  h-sint DFLT f-dsp-24-s16
  h-sint DFLT f-dsp-24-s16
  ((parse "signed16")) () ()
  ((parse "signed16")) () ()
)
)
(define-full-operand Imm-24-SI "signed 32 bit immediate at offset 24 bits" (all-isas)
(define-full-operand Imm-24-SI "signed 32 bit immediate at offset 24 bits" (all-isas)
  h-sint DFLT f-dsp-24-s32
  h-sint DFLT f-dsp-24-s32
  ((parse "signed32")) () ()
  ((parse "signed32")) () ()
)
)
(define-full-operand Imm-32-QI "signed 8 bit immediate at offset 32 bits" (all-isas)
(define-full-operand Imm-32-QI "signed 8 bit immediate at offset 32 bits" (all-isas)
  h-sint DFLT f-dsp-32-s8
  h-sint DFLT f-dsp-32-s8
  ((parse "signed8")) () ()
  ((parse "signed8")) () ()
)
)
(define-full-operand Imm-32-SI "signed 32 bit immediate at offset 32 bits" (all-isas)
(define-full-operand Imm-32-SI "signed 32 bit immediate at offset 32 bits" (all-isas)
  h-sint DFLT f-dsp-32-s32
  h-sint DFLT f-dsp-32-s32
  ((parse "signed32")) () ()
  ((parse "signed32")) () ()
)
)
(define-full-operand Imm-32-HI "signed 16 bit immediate at offset 32 bits" (all-isas)
(define-full-operand Imm-32-HI "signed 16 bit immediate at offset 32 bits" (all-isas)
  h-sint DFLT f-dsp-32-s16
  h-sint DFLT f-dsp-32-s16
  ((parse "signed16")) () ()
  ((parse "signed16")) () ()
)
)
(define-full-operand Imm-40-QI "signed 8 bit immediate at offset 40 bits" (all-isas)
(define-full-operand Imm-40-QI "signed 8 bit immediate at offset 40 bits" (all-isas)
  h-sint DFLT f-dsp-40-s8
  h-sint DFLT f-dsp-40-s8
  ((parse "signed8")) () ()
  ((parse "signed8")) () ()
)
)
(define-full-operand Imm-40-HI "signed 16 bit immediate at offset 40 bits" (all-isas)
(define-full-operand Imm-40-HI "signed 16 bit immediate at offset 40 bits" (all-isas)
  h-sint DFLT f-dsp-40-s16
  h-sint DFLT f-dsp-40-s16
  ((parse "signed16")) () ()
  ((parse "signed16")) () ()
)
)
(define-full-operand Imm-40-SI "signed 32 bit immediate at offset 40 bits" (all-isas)
(define-full-operand Imm-40-SI "signed 32 bit immediate at offset 40 bits" (all-isas)
  h-sint DFLT f-dsp-40-s32
  h-sint DFLT f-dsp-40-s32
  ((parse "signed32")) () ()
  ((parse "signed32")) () ()
)
)
(define-full-operand Imm-48-QI "signed 8 bit immediate at offset 48 bits" (all-isas)
(define-full-operand Imm-48-QI "signed 8 bit immediate at offset 48 bits" (all-isas)
  h-sint DFLT f-dsp-48-s8
  h-sint DFLT f-dsp-48-s8
  ((parse "signed8")) () ()
  ((parse "signed8")) () ()
)
)
(define-full-operand Imm-48-HI "signed 16 bit immediate at offset 48 bits" (all-isas)
(define-full-operand Imm-48-HI "signed 16 bit immediate at offset 48 bits" (all-isas)
  h-sint DFLT f-dsp-48-s16
  h-sint DFLT f-dsp-48-s16
  ((parse "signed16")) () ()
  ((parse "signed16")) () ()
)
)
(define-full-operand Imm-48-SI "signed 32 bit immediate at offset 48 bits" (all-isas)
(define-full-operand Imm-48-SI "signed 32 bit immediate at offset 48 bits" (all-isas)
  h-sint DFLT f-dsp-48-s32
  h-sint DFLT f-dsp-48-s32
  ((parse "signed32")) () ()
  ((parse "signed32")) () ()
)
)
(define-full-operand Imm-56-QI "signed 8 bit immediate at offset 56 bits" (all-isas)
(define-full-operand Imm-56-QI "signed 8 bit immediate at offset 56 bits" (all-isas)
  h-sint DFLT f-dsp-56-s8
  h-sint DFLT f-dsp-56-s8
  ((parse "signed8")) () ()
  ((parse "signed8")) () ()
)
)
(define-full-operand Imm-56-HI "signed 16 bit immediate at offset 56 bits" (all-isas)
(define-full-operand Imm-56-HI "signed 16 bit immediate at offset 56 bits" (all-isas)
  h-sint DFLT f-dsp-56-s16
  h-sint DFLT f-dsp-56-s16
  ((parse "signed16")) () ()
  ((parse "signed16")) () ()
)
)
(define-full-operand Imm-64-HI "signed 16 bit immediate at offset 64 bits" (all-isas)
(define-full-operand Imm-64-HI "signed 16 bit immediate at offset 64 bits" (all-isas)
  h-sint DFLT f-dsp-64-s16
  h-sint DFLT f-dsp-64-s16
  ((parse "signed16")) () ()
  ((parse "signed16")) () ()
)
)
(define-full-operand Imm1-S "signed 1 bit immediate for short format binary insns" (m32c-isa)
(define-full-operand Imm1-S "signed 1 bit immediate for short format binary insns" (m32c-isa)
  h-sint DFLT f-imm1-S
  h-sint DFLT f-imm1-S
  ((parse "imm1_S")) () ()
  ((parse "imm1_S")) () ()
)
)
(define-full-operand Imm3-S "signed 3 bit immediate for short format binary insns" (m32c-isa)
(define-full-operand Imm3-S "signed 3 bit immediate for short format binary insns" (m32c-isa)
  h-sint DFLT f-imm3-S
  h-sint DFLT f-imm3-S
  ((parse "imm3_S")) () ()
  ((parse "imm3_S")) () ()
)
)
(define-full-operand Bit3-S "3 bit bit number" (m32c-isa)
(define-full-operand Bit3-S "3 bit bit number" (m32c-isa)
  h-sint DFLT f-imm3-S
  h-sint DFLT f-imm3-S
  ((parse "bit3_S")) () ()
  ((parse "bit3_S")) () ()
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Bit numbers
; Bit numbers
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-full-operand Bitno16R "bit number for indexing registers" (m16c-isa)
(define-full-operand Bitno16R "bit number for indexing registers" (m16c-isa)
  h-uint DFLT f-dsp-16-u8
  h-uint DFLT f-dsp-16-u8
  ((parse "Bitno16R")) () ()
  ((parse "Bitno16R")) () ()
)
)
(dnop Bitno32Prefixed "bit number for indexing objects" (m32c-isa) h-uint f-bitno32-prefixed)
(dnop Bitno32Prefixed "bit number for indexing objects" (m32c-isa) h-uint f-bitno32-prefixed)
(dnop Bitno32Unprefixed "bit number for indexing objects" (m32c-isa) h-uint f-bitno32-unprefixed)
(dnop Bitno32Unprefixed "bit number for indexing objects" (m32c-isa) h-uint f-bitno32-unprefixed)
(define-full-operand BitBase16-16-u8 "unsigned bit,base:8 at offset 16for m16c" (m16c-isa)
(define-full-operand BitBase16-16-u8 "unsigned bit,base:8 at offset 16for m16c" (m16c-isa)
  h-uint DFLT f-dsp-16-u8
  h-uint DFLT f-dsp-16-u8
  ((parse "unsigned_bitbase8") (print "unsigned_bitbase")) () ()
  ((parse "unsigned_bitbase8") (print "unsigned_bitbase")) () ()
)
)
(define-full-operand BitBase16-16-s8 "signed bit,base:8 at offset 16for m16c" (m16c-isa)
(define-full-operand BitBase16-16-s8 "signed bit,base:8 at offset 16for m16c" (m16c-isa)
  h-sint DFLT f-dsp-16-s8
  h-sint DFLT f-dsp-16-s8
  ((parse "signed_bitbase8") (print "signed_bitbase")) () ()
  ((parse "signed_bitbase8") (print "signed_bitbase")) () ()
)
)
(define-full-operand BitBase16-16-u16 "unsigned bit,base:16 at offset 16 for m16c" (m16c-isa)
(define-full-operand BitBase16-16-u16 "unsigned bit,base:16 at offset 16 for m16c" (m16c-isa)
  h-uint DFLT f-dsp-16-u16
  h-uint DFLT f-dsp-16-u16
  ((parse "unsigned_bitbase16") (print "unsigned_bitbase")) () ()
  ((parse "unsigned_bitbase16") (print "unsigned_bitbase")) () ()
)
)
(define-full-operand BitBase16-8-u11-S "signed bit,base:11 at offset 16 for m16c" (m16c-isa)
(define-full-operand BitBase16-8-u11-S "signed bit,base:11 at offset 16 for m16c" (m16c-isa)
  h-uint DFLT f-bitbase16-u11-S
  h-uint DFLT f-bitbase16-u11-S
  ((parse "unsigned_bitbase11") (print "unsigned_bitbase")) () ()
  ((parse "unsigned_bitbase11") (print "unsigned_bitbase")) () ()
)
)
(define-full-operand BitBase32-16-u11-Unprefixed "unsigned bit,base:11 at offset 16 for m32c" (m32c-isa)
(define-full-operand BitBase32-16-u11-Unprefixed "unsigned bit,base:11 at offset 16 for m32c" (m32c-isa)
  h-uint DFLT f-bitbase32-16-u11-unprefixed
  h-uint DFLT f-bitbase32-16-u11-unprefixed
  ((parse "unsigned_bitbase11") (print "unsigned_bitbase")) () ()
  ((parse "unsigned_bitbase11") (print "unsigned_bitbase")) () ()
)
)
(define-full-operand BitBase32-16-s11-Unprefixed "signed bit,base:11 at offset 16 for m32c" (m32c-isa)
(define-full-operand BitBase32-16-s11-Unprefixed "signed bit,base:11 at offset 16 for m32c" (m32c-isa)
  h-sint DFLT f-bitbase32-16-s11-unprefixed
  h-sint DFLT f-bitbase32-16-s11-unprefixed
  ((parse "signed_bitbase11") (print "signed_bitbase")) () ()
  ((parse "signed_bitbase11") (print "signed_bitbase")) () ()
)
)
(define-full-operand BitBase32-16-u19-Unprefixed "unsigned bit,base:19 at offset 16 for m32c" (m32c-isa)
(define-full-operand BitBase32-16-u19-Unprefixed "unsigned bit,base:19 at offset 16 for m32c" (m32c-isa)
  h-uint DFLT f-bitbase32-16-u19-unprefixed
  h-uint DFLT f-bitbase32-16-u19-unprefixed
  ((parse "unsigned_bitbase19") (print "unsigned_bitbase")) () ()
  ((parse "unsigned_bitbase19") (print "unsigned_bitbase")) () ()
)
)
(define-full-operand BitBase32-16-s19-Unprefixed "signed bit,base:19 at offset 16 for m32c" (m32c-isa)
(define-full-operand BitBase32-16-s19-Unprefixed "signed bit,base:19 at offset 16 for m32c" (m32c-isa)
  h-sint DFLT f-bitbase32-16-s19-unprefixed
  h-sint DFLT f-bitbase32-16-s19-unprefixed
  ((parse "signed_bitbase19") (print "signed_bitbase")) () ()
  ((parse "signed_bitbase19") (print "signed_bitbase")) () ()
)
)
(define-full-operand BitBase32-16-u27-Unprefixed "unsigned bit,base:27 at offset 16 for m32c" (m32c-isa)
(define-full-operand BitBase32-16-u27-Unprefixed "unsigned bit,base:27 at offset 16 for m32c" (m32c-isa)
  h-uint DFLT f-bitbase32-16-u27-unprefixed
  h-uint DFLT f-bitbase32-16-u27-unprefixed
  ((parse "unsigned_bitbase27") (print "unsigned_bitbase")) () ()
  ((parse "unsigned_bitbase27") (print "unsigned_bitbase")) () ()
)
)
(define-full-operand BitBase32-24-u11-Prefixed "unsigned bit,base:11 at offset 24 for m32c" (m32c-isa)
(define-full-operand BitBase32-24-u11-Prefixed "unsigned bit,base:11 at offset 24 for m32c" (m32c-isa)
  h-uint DFLT f-bitbase32-24-u11-prefixed
  h-uint DFLT f-bitbase32-24-u11-prefixed
  ((parse "unsigned_bitbase11") (print "unsigned_bitbase")) () ()
  ((parse "unsigned_bitbase11") (print "unsigned_bitbase")) () ()
)
)
(define-full-operand BitBase32-24-s11-Prefixed "signed bit,base:11 at offset 24 for m32c" (m32c-isa)
(define-full-operand BitBase32-24-s11-Prefixed "signed bit,base:11 at offset 24 for m32c" (m32c-isa)
  h-sint DFLT f-bitbase32-24-s11-prefixed
  h-sint DFLT f-bitbase32-24-s11-prefixed
  ((parse "signed_bitbase11") (print "signed_bitbase")) () ()
  ((parse "signed_bitbase11") (print "signed_bitbase")) () ()
)
)
(define-full-operand BitBase32-24-u19-Prefixed "unsigned bit,base:19 at offset 24 for m32c" (m32c-isa)
(define-full-operand BitBase32-24-u19-Prefixed "unsigned bit,base:19 at offset 24 for m32c" (m32c-isa)
  h-uint DFLT f-bitbase32-24-u19-prefixed
  h-uint DFLT f-bitbase32-24-u19-prefixed
  ((parse "unsigned_bitbase19") (print "unsigned_bitbase")) () ()
  ((parse "unsigned_bitbase19") (print "unsigned_bitbase")) () ()
)
)
(define-full-operand BitBase32-24-s19-Prefixed "signed bit,base:19 at offset 24 for m32c" (m32c-isa)
(define-full-operand BitBase32-24-s19-Prefixed "signed bit,base:19 at offset 24 for m32c" (m32c-isa)
  h-sint DFLT f-bitbase32-24-s19-prefixed
  h-sint DFLT f-bitbase32-24-s19-prefixed
  ((parse "signed_bitbase19") (print "signed_bitbase")) () ()
  ((parse "signed_bitbase19") (print "signed_bitbase")) () ()
)
)
(define-full-operand BitBase32-24-u27-Prefixed "unsigned bit,base:27 at offset 24 for m32c" (m32c-isa)
(define-full-operand BitBase32-24-u27-Prefixed "unsigned bit,base:27 at offset 24 for m32c" (m32c-isa)
  h-uint DFLT f-bitbase32-24-u27-prefixed
  h-uint DFLT f-bitbase32-24-u27-prefixed
  ((parse "unsigned_bitbase27") (print "unsigned_bitbase")) () ()
  ((parse "unsigned_bitbase27") (print "unsigned_bitbase")) () ()
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Labels
; Labels
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-full-operand Lab-5-3 "3 bit label" (all-isas RELAX)
(define-full-operand Lab-5-3 "3 bit label" (all-isas RELAX)
  h-iaddr DFLT f-lab-5-3
  h-iaddr DFLT f-lab-5-3
  ((parse "lab_5_3")) () () )
  ((parse "lab_5_3")) () () )
(define-full-operand Lab32-jmp-s "3 bit label" (all-isas RELAX)
(define-full-operand Lab32-jmp-s "3 bit label" (all-isas RELAX)
  h-iaddr DFLT f-lab32-jmp-s
  h-iaddr DFLT f-lab32-jmp-s
  ((parse "lab_5_3")) () () )
  ((parse "lab_5_3")) () () )
(dnop Lab-8-8     "8 bit label"  (all-isas RELAX) h-iaddr f-lab-8-8)
(dnop Lab-8-8     "8 bit label"  (all-isas RELAX) h-iaddr f-lab-8-8)
(dnop Lab-8-16    "16 bit label" (all-isas RELAX) h-iaddr f-lab-8-16)
(dnop Lab-8-16    "16 bit label" (all-isas RELAX) h-iaddr f-lab-8-16)
(dnop Lab-8-24    "24 bit label" (all-isas RELAX) h-iaddr f-lab-8-24)
(dnop Lab-8-24    "24 bit label" (all-isas RELAX) h-iaddr f-lab-8-24)
(dnop Lab-16-8    "8 bit label"  (all-isas RELAX) h-iaddr f-lab-16-8)
(dnop Lab-16-8    "8 bit label"  (all-isas RELAX) h-iaddr f-lab-16-8)
(dnop Lab-24-8    "8 bit label"  (all-isas RELAX) h-iaddr f-lab-24-8)
(dnop Lab-24-8    "8 bit label"  (all-isas RELAX) h-iaddr f-lab-24-8)
(dnop Lab-32-8    "8 bit label"  (all-isas RELAX) h-iaddr f-lab-32-8)
(dnop Lab-32-8    "8 bit label"  (all-isas RELAX) h-iaddr f-lab-32-8)
(dnop Lab-40-8    "8 bit label"  (all-isas RELAX) h-iaddr f-lab-40-8)
(dnop Lab-40-8    "8 bit label"  (all-isas RELAX) h-iaddr f-lab-40-8)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Condition code bits
; Condition code bits
;-------------------------------------------------------------
;-------------------------------------------------------------
(dnop sbit "negative    bit"      (SEM-ONLY all-isas) h-sbit f-nil)
(dnop sbit "negative    bit"      (SEM-ONLY all-isas) h-sbit f-nil)
(dnop obit "overflow    bit"      (SEM-ONLY all-isas) h-obit f-nil)
(dnop obit "overflow    bit"      (SEM-ONLY all-isas) h-obit f-nil)
(dnop zbit "zero        bit"      (SEM-ONLY all-isas) h-zbit f-nil)
(dnop zbit "zero        bit"      (SEM-ONLY all-isas) h-zbit f-nil)
(dnop cbit "carry       bit"      (SEM-ONLY all-isas) h-cbit f-nil)
(dnop cbit "carry       bit"      (SEM-ONLY all-isas) h-cbit f-nil)
(dnop ubit "stack ptr select bit" (SEM-ONLY all-isas) h-ubit f-nil)
(dnop ubit "stack ptr select bit" (SEM-ONLY all-isas) h-ubit f-nil)
(dnop ibit "interrupt enable bit" (SEM-ONLY all-isas) h-ibit f-nil)
(dnop ibit "interrupt enable bit" (SEM-ONLY all-isas) h-ibit f-nil)
(dnop bbit "reg bank select bit"  (SEM-ONLY all-isas) h-bbit f-nil)
(dnop bbit "reg bank select bit"  (SEM-ONLY all-isas) h-bbit f-nil)
(dnop dbit "debug       bit"      (SEM-ONLY all-isas) h-dbit f-nil)
(dnop dbit "debug       bit"      (SEM-ONLY all-isas) h-dbit f-nil)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Condition operands
; Condition operands
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (cond-operand mach offset)
(define-pmacro (cond-operand mach offset)
  (dnop (.sym cond mach - offset) "condition" ((.sym m mach c-isa)) (.sym h-cond mach) (.sym f-dsp- offset -u8))
  (dnop (.sym cond mach - offset) "condition" ((.sym m mach c-isa)) (.sym h-cond mach) (.sym f-dsp- offset -u8))
)
)
(cond-operand 16 16)
(cond-operand 16 16)
(cond-operand 16 24)
(cond-operand 16 24)
(cond-operand 16 32)
(cond-operand 16 32)
(cond-operand 32 16)
(cond-operand 32 16)
(cond-operand 32 24)
(cond-operand 32 24)
(cond-operand 32 32)
(cond-operand 32 32)
(cond-operand 32 40)
(cond-operand 32 40)
(dnop cond16c  "condition" (m16c-isa) h-cond16c f-cond16)
(dnop cond16c  "condition" (m16c-isa) h-cond16c f-cond16)
(dnop cond16j  "condition" (m16c-isa) h-cond16j f-cond16)
(dnop cond16j  "condition" (m16c-isa) h-cond16j f-cond16)
(dnop cond16j5 "condition" (m16c-isa) h-cond16j-5 f-cond16j-5)
(dnop cond16j5 "condition" (m16c-isa) h-cond16j-5 f-cond16j-5)
(dnop cond32   "condition" (m32c-isa) h-cond32  f-cond32)
(dnop cond32   "condition" (m32c-isa) h-cond32  f-cond32)
(dnop cond32j  "condition" (m32c-isa) h-cond32  f-cond32j)
(dnop cond32j  "condition" (m32c-isa) h-cond32  f-cond32j)
(dnop sccond32 "scCND condition" (m32c-isa) h-cond32 f-cond16)
(dnop sccond32 "scCND condition" (m32c-isa) h-cond32 f-cond16)
(dnop flags16  "flags" (m16c-isa) h-flags f-9-3)
(dnop flags16  "flags" (m16c-isa) h-flags f-9-3)
(dnop flags32  "flags" (m32c-isa) h-flags f-13-3)
(dnop flags32  "flags" (m32c-isa) h-flags f-13-3)
(dnop cr16     "control" (m16c-isa) h-cr-16 f-9-3)
(dnop cr16     "control" (m16c-isa) h-cr-16 f-9-3)
(dnop cr1-Unprefixed-32   "control" (m32c-isa) h-cr1-32 f-13-3)
(dnop cr1-Unprefixed-32   "control" (m32c-isa) h-cr1-32 f-13-3)
(dnop cr1-Prefixed-32   "control" (m32c-isa) h-cr1-32 f-21-3)
(dnop cr1-Prefixed-32   "control" (m32c-isa) h-cr1-32 f-21-3)
(dnop cr2-32   "control" (m32c-isa) h-cr2-32 f-13-3)
(dnop cr2-32   "control" (m32c-isa) h-cr2-32 f-13-3)
(dnop cr3-Unprefixed-32   "control" (m32c-isa) h-cr3-32 f-13-3)
(dnop cr3-Unprefixed-32   "control" (m32c-isa) h-cr3-32 f-13-3)
(dnop cr3-Prefixed-32   "control" (m32c-isa) h-cr3-32 f-21-3)
(dnop cr3-Prefixed-32   "control" (m32c-isa) h-cr3-32 f-21-3)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Suffixes
; Suffixes
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-full-operand Z "Suffix for zero format insns" (all-isas)
(define-full-operand Z "Suffix for zero format insns" (all-isas)
  h-sint DFLT f-nil
  h-sint DFLT f-nil
  ((parse "Z") (print "Z")) () ()
  ((parse "Z") (print "Z")) () ()
)
)
(define-full-operand S "Suffix for short format insns" (all-isas)
(define-full-operand S "Suffix for short format insns" (all-isas)
  h-sint DFLT f-nil
  h-sint DFLT f-nil
  ((parse "S") (print "S")) () ()
  ((parse "S") (print "S")) () ()
)
)
(define-full-operand Q "Suffix for quick format insns" (all-isas)
(define-full-operand Q "Suffix for quick format insns" (all-isas)
  h-sint DFLT f-nil
  h-sint DFLT f-nil
  ((parse "Q") (print "Q")) () ()
  ((parse "Q") (print "Q")) () ()
)
)
(define-full-operand G "Suffix for general format insns" (all-isas)
(define-full-operand G "Suffix for general format insns" (all-isas)
  h-sint DFLT f-nil
  h-sint DFLT f-nil
  ((parse "G") (print "G")) () ()
  ((parse "G") (print "G")) () ()
)
)
(define-full-operand X "Empty suffix" (all-isas)
(define-full-operand X "Empty suffix" (all-isas)
  h-sint DFLT f-nil
  h-sint DFLT f-nil
  ((parse "X") (print "X")) () ()
  ((parse "X") (print "X")) () ()
)
)
(define-full-operand size "any size specifier" (all-isas)
(define-full-operand size "any size specifier" (all-isas)
  h-sint DFLT f-nil
  h-sint DFLT f-nil
  ((parse "size") (print "size")) () ()
  ((parse "size") (print "size")) () ()
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Misc
; Misc
;-------------------------------------------------------------
;-------------------------------------------------------------
(dnop BitIndex "Bit Index for the next insn" (SEM-ONLY MACH32 m32c-isa) h-bit-index f-nil)
(dnop BitIndex "Bit Index for the next insn" (SEM-ONLY MACH32 m32c-isa) h-bit-index f-nil)
(dnop SrcIndex "Source Index for the next insn" (SEM-ONLY MACH32 m32c-isa) h-src-index f-nil)
(dnop SrcIndex "Source Index for the next insn" (SEM-ONLY MACH32 m32c-isa) h-src-index f-nil)
(dnop DstIndex "Destination Index for the next insn" (SEM-ONLY MACH32 m32c-isa) h-dst-index f-nil)
(dnop DstIndex "Destination Index for the next insn" (SEM-ONLY MACH32 m32c-isa) h-dst-index f-nil)
(dnop NoRemainder "Place holder for when the remainder is not kept" (SEM-ONLY MACH32 m32c-isa) h-none f-nil)
(dnop NoRemainder "Place holder for when the remainder is not kept" (SEM-ONLY MACH32 m32c-isa) h-none f-nil)


;=============================================================
;=============================================================
; Derived Operands
; Derived Operands
; Memory reference macros that clip addresses appropriately.  Refer to
; Memory reference macros that clip addresses appropriately.  Refer to
; memory at ADDRESS in MODE, clipped appropriately for either the m16c
; memory at ADDRESS in MODE, clipped appropriately for either the m16c
; or m32c.
; or m32c.
(define-pmacro (mem16 mode address)
(define-pmacro (mem16 mode address)
  (mem mode (and #xffff address)))
  (mem mode (and #xffff address)))
(define-pmacro (mem20 mode address)
(define-pmacro (mem20 mode address)
  (mem mode (and #xfffff address)))
  (mem mode (and #xfffff address)))
(define-pmacro (mem32 mode address)
(define-pmacro (mem32 mode address)
  (mem mode (and #xffffff address)))
  (mem mode (and #xffffff address)))
; Like mem16 and mem32, but takes MACH as a parameter.  MACH must be
; Like mem16 and mem32, but takes MACH as a parameter.  MACH must be
; either 16 or 32.
; either 16 or 32.
(define-pmacro (mem-mach mach mode address)
(define-pmacro (mem-mach mach mode address)
  ((.sym mem mach) mode address))
  ((.sym mem mach) mode address))
;-------------------------------------------------------------
;-------------------------------------------------------------
; Source
; Source
;-------------------------------------------------------------
;-------------------------------------------------------------
; Rn direct
; Rn direct
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (src16-Rn-direct-operand xmode)
(define-pmacro (src16-Rn-direct-operand xmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym src16-Rn-direct- xmode))
      (name (.sym src16-Rn-direct- xmode))
      (comment (.str "m16c Rn direct source " xmode))
      (comment (.str "m16c Rn direct source " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (args ((.sym Src16Rn xmode)))
      (args ((.sym Src16Rn xmode)))
      (syntax (.str "$Src16Rn" xmode))
      (syntax (.str "$Src16Rn" xmode))
      (base-ifield f-8-4)
      (base-ifield f-8-4)
      (encoding (+ (f-8-2 0) (.sym Src16Rn xmode)))
      (encoding (+ (f-8-2 0) (.sym Src16Rn xmode)))
      (ifield-assertion (eq f-8-2 0))
      (ifield-assertion (eq f-8-2 0))
      (getter (trunc xmode (.sym Src16Rn xmode)))
      (getter (trunc xmode (.sym Src16Rn xmode)))
      (setter (set (.sym Src16Rn xmode) newval))
      (setter (set (.sym Src16Rn xmode) newval))
    )
    )
  )
  )
)
)
(src16-Rn-direct-operand QI)
(src16-Rn-direct-operand QI)
(src16-Rn-direct-operand HI)
(src16-Rn-direct-operand HI)
(define-pmacro (src32-Rn-direct-operand group base xmode)
(define-pmacro (src32-Rn-direct-operand group base xmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym src32-Rn-direct- group - xmode))
      (name (.sym src32-Rn-direct- group - xmode))
      (comment (.str "m32c Rn direct source " xmode))
      (comment (.str "m32c Rn direct source " xmode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (args ((.sym Src32Rn group xmode)))
      (args ((.sym Src32Rn group xmode)))
      (syntax (.str "$Src32Rn" group xmode))
      (syntax (.str "$Src32Rn" group xmode))
      (base-ifield (.sym f- base -11))
      (base-ifield (.sym f- base -11))
      (encoding (+ ((.sym f- base -3) 4) (.sym Src32Rn group xmode)))
      (encoding (+ ((.sym f- base -3) 4) (.sym Src32Rn group xmode)))
      (ifield-assertion (eq (.sym f- base -3) 4))
      (ifield-assertion (eq (.sym f- base -3) 4))
      (getter (trunc xmode (.sym Src32Rn group xmode)))
      (getter (trunc xmode (.sym Src32Rn group xmode)))
      (setter (set (.sym Src32Rn group xmode) newval))
      (setter (set (.sym Src32Rn group xmode) newval))
    )
    )
  )
  )
)
)
(src32-Rn-direct-operand Unprefixed  1 QI)
(src32-Rn-direct-operand Unprefixed  1 QI)
(src32-Rn-direct-operand   Prefixed  9 QI)
(src32-Rn-direct-operand   Prefixed  9 QI)
(src32-Rn-direct-operand Unprefixed  1 HI)
(src32-Rn-direct-operand Unprefixed  1 HI)
(src32-Rn-direct-operand   Prefixed  9 HI)
(src32-Rn-direct-operand   Prefixed  9 HI)
(src32-Rn-direct-operand Unprefixed  1 SI)
(src32-Rn-direct-operand Unprefixed  1 SI)
(src32-Rn-direct-operand   Prefixed  9 SI)
(src32-Rn-direct-operand   Prefixed  9 SI)
;-------------------------------------------------------------
;-------------------------------------------------------------
; An direct
; An direct
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (src16-An-direct-operand xmode)
(define-pmacro (src16-An-direct-operand xmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym src16-An-direct- xmode))
      (name (.sym src16-An-direct- xmode))
      (comment (.str "m16c An direct destination " xmode))
      (comment (.str "m16c An direct destination " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (args ((.sym Src16An xmode)))
      (args ((.sym Src16An xmode)))
      (syntax (.str "$Src16An" xmode))
      (syntax (.str "$Src16An" xmode))
      (base-ifield f-8-4)
      (base-ifield f-8-4)
      (encoding (+ (f-8-2 1) (f-10-1 0) (.sym Src16An xmode)))
      (encoding (+ (f-8-2 1) (f-10-1 0) (.sym Src16An xmode)))
      (ifield-assertion (andif (eq f-8-2 1) (eq f-10-1 0)))
      (ifield-assertion (andif (eq f-8-2 1) (eq f-10-1 0)))
      (getter (trunc xmode (.sym Src16An xmode)))
      (getter (trunc xmode (.sym Src16An xmode)))
      (setter (set (.sym Src16An xmode) newval))
      (setter (set (.sym Src16An xmode) newval))
    )
    )
  )
  )
)
)
(src16-An-direct-operand QI)
(src16-An-direct-operand QI)
(src16-An-direct-operand HI)
(src16-An-direct-operand HI)
(define-pmacro (src32-An-direct-operand group base1 base2 xmode)
(define-pmacro (src32-An-direct-operand group base1 base2 xmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym src32-An-direct- group - xmode))
      (name (.sym src32-An-direct- group - xmode))
      (comment (.str "m32c An direct destination " xmode))
      (comment (.str "m32c An direct destination " xmode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (args ((.sym Src32An group xmode)))
      (args ((.sym Src32An group xmode)))
      (syntax (.str "$Src32An" group xmode))
      (syntax (.str "$Src32An" group xmode))
      (base-ifield (.sym f- base1 -11))
      (base-ifield (.sym f- base1 -11))
      (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 1) (.sym Src32An group xmode)))
      (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 1) (.sym Src32An group xmode)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 1)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 1)))
      (getter (trunc xmode (.sym Src32An group xmode)))
      (getter (trunc xmode (.sym Src32An group xmode)))
      (setter (set (.sym Src32An group xmode) newval))
      (setter (set (.sym Src32An group xmode) newval))
    )
    )
  )
  )
)
)
(src32-An-direct-operand Unprefixed 1 10 QI)
(src32-An-direct-operand Unprefixed 1 10 QI)
(src32-An-direct-operand Unprefixed 1 10 HI)
(src32-An-direct-operand Unprefixed 1 10 HI)
(src32-An-direct-operand Unprefixed 1 10 SI)
(src32-An-direct-operand Unprefixed 1 10 SI)
(src32-An-direct-operand Prefixed   9 18 QI)
(src32-An-direct-operand Prefixed   9 18 QI)
(src32-An-direct-operand Prefixed   9 18 HI)
(src32-An-direct-operand Prefixed   9 18 HI)
(src32-An-direct-operand Prefixed   9 18 SI)
(src32-An-direct-operand Prefixed   9 18 SI)
;-------------------------------------------------------------
;-------------------------------------------------------------
; An indirect
; An indirect
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (src16-An-indirect-operand xmode)
(define-pmacro (src16-An-indirect-operand xmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym src16-An-indirect- xmode))
      (name (.sym src16-An-indirect- xmode))
      (comment (.str "m16c An indirect destination " xmode))
      (comment (.str "m16c An indirect destination " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (args (Src16An))
      (args (Src16An))
      (syntax "[$Src16An]")
      (syntax "[$Src16An]")
      (base-ifield f-8-4)
      (base-ifield f-8-4)
      (encoding (+ (f-8-2 1) (f-10-1 1) Src16An))
      (encoding (+ (f-8-2 1) (f-10-1 1) Src16An))
      (ifield-assertion (andif (eq f-8-2 1) (eq f-10-1 1)))
      (ifield-assertion (andif (eq f-8-2 1) (eq f-10-1 1)))
      (getter (mem16 xmode Src16An))
      (getter (mem16 xmode Src16An))
      (setter (set (mem16 xmode Src16An) newval))
      (setter (set (mem16 xmode Src16An) newval))
    )
    )
  )
  )
)
)
(src16-An-indirect-operand QI)
(src16-An-indirect-operand QI)
(src16-An-indirect-operand HI)
(src16-An-indirect-operand HI)
(define-pmacro (src32-An-indirect-operand group base1 base2 xmode)
(define-pmacro (src32-An-indirect-operand group base1 base2 xmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym src32-An-indirect- group - xmode))
      (name (.sym src32-An-indirect- group - xmode))
      (comment (.str "m32c An indirect destination " xmode))
      (comment (.str "m32c An indirect destination " xmode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (args ((.sym Src32An group)))
      (args ((.sym Src32An group)))
      (syntax (.str "[$Src32An" group "]"))
      (syntax (.str "[$Src32An" group "]"))
      (base-ifield (.sym f- base1 -11))
      (base-ifield (.sym f- base1 -11))
      (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 0) (.sym Src32An group)))
      (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 0) (.sym Src32An group)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 0)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 0)))
      (getter (c-call xmode (.str "operand_getter_" xmode) (.sym Src32An group)
      (getter (c-call xmode (.str "operand_getter_" xmode) (.sym Src32An group)
                       (const 0)))
                       (const 0)))
      (setter (c-call DFLT (.str "operand_setter_" xmode)  newval
      (setter (c-call DFLT (.str "operand_setter_" xmode)  newval
                      (.sym Src32An group) (const 0)))
                      (.sym Src32An group) (const 0)))
;      (getter (mem32 xmode (.sym Src32An group)))
;      (getter (mem32 xmode (.sym Src32An group)))
;      (setter (set (mem32 xmode (.sym Src32An group)) newval))
;      (setter (set (mem32 xmode (.sym Src32An group)) newval))
    )
    )
  )
  )
)
)
(src32-An-indirect-operand Unprefixed 1 10 QI)
(src32-An-indirect-operand Unprefixed 1 10 QI)
(src32-An-indirect-operand Unprefixed 1 10 HI)
(src32-An-indirect-operand Unprefixed 1 10 HI)
(src32-An-indirect-operand Unprefixed 1 10 SI)
(src32-An-indirect-operand Unprefixed 1 10 SI)
(src32-An-indirect-operand Prefixed   9 18 QI)
(src32-An-indirect-operand Prefixed   9 18 QI)
(src32-An-indirect-operand Prefixed   9 18 HI)
(src32-An-indirect-operand Prefixed   9 18 HI)
(src32-An-indirect-operand Prefixed   9 18 SI)
(src32-An-indirect-operand Prefixed   9 18 SI)
;-------------------------------------------------------------
;-------------------------------------------------------------
; dsp:d[r] relative
; dsp:d[r] relative
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (src16-relative-operand xmode)
(define-pmacro (src16-relative-operand xmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym src16-16-8-SB-relative- xmode))
      (name (.sym src16-16-8-SB-relative- xmode))
      (comment (.str "m16c dsp:8[sb] relative destination " xmode))
      (comment (.str "m16c dsp:8[sb] relative destination " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (args (Dsp-16-u8))
      (args (Dsp-16-u8))
      (syntax "${Dsp-16-u8}[sb]")
      (syntax "${Dsp-16-u8}[sb]")
      (base-ifield f-8-4)
      (base-ifield f-8-4)
      (encoding (+ (f-8-4 #xA) Dsp-16-u8))
      (encoding (+ (f-8-4 #xA) Dsp-16-u8))
      (ifield-assertion (eq f-8-4 #xA))
      (ifield-assertion (eq f-8-4 #xA))
      (getter (mem16 xmode (add Dsp-16-u8 (reg h-sb))))
      (getter (mem16 xmode (add Dsp-16-u8 (reg h-sb))))
      (setter (set (mem16 xmode (add Dsp-16-u8 (reg h-sb))) newval))
      (setter (set (mem16 xmode (add Dsp-16-u8 (reg h-sb))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym src16-16-16-SB-relative- xmode))
      (name (.sym src16-16-16-SB-relative- xmode))
      (comment (.str "m16c dsp:16[sb] relative destination " xmode))
      (comment (.str "m16c dsp:16[sb] relative destination " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (args (Dsp-16-u16))
      (args (Dsp-16-u16))
      (syntax "${Dsp-16-u16}[sb]")
      (syntax "${Dsp-16-u16}[sb]")
      (base-ifield f-8-4)
      (base-ifield f-8-4)
      (encoding (+ (f-8-4 #xE) Dsp-16-u16))
      (encoding (+ (f-8-4 #xE) Dsp-16-u16))
      (ifield-assertion (eq f-8-4 #xE))
      (ifield-assertion (eq f-8-4 #xE))
      (getter (mem16 xmode (add Dsp-16-u16 (reg h-sb))))
      (getter (mem16 xmode (add Dsp-16-u16 (reg h-sb))))
      (setter (set (mem16 xmode (add Dsp-16-u16 (reg h-sb))) newval))
      (setter (set (mem16 xmode (add Dsp-16-u16 (reg h-sb))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym src16-16-8-FB-relative- xmode))
      (name (.sym src16-16-8-FB-relative- xmode))
      (comment (.str "m16c dsp:8[fb] relative destination " xmode))
      (comment (.str "m16c dsp:8[fb] relative destination " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (args (Dsp-16-s8))
      (args (Dsp-16-s8))
      (syntax "${Dsp-16-s8}[fb]")
      (syntax "${Dsp-16-s8}[fb]")
      (base-ifield f-8-4)
      (base-ifield f-8-4)
      (encoding (+ (f-8-4 #xB) Dsp-16-s8))
      (encoding (+ (f-8-4 #xB) Dsp-16-s8))
      (ifield-assertion (eq f-8-4 #xB))
      (ifield-assertion (eq f-8-4 #xB))
      (getter (mem16 xmode (add Dsp-16-s8 (reg h-fb))))
      (getter (mem16 xmode (add Dsp-16-s8 (reg h-fb))))
      (setter (set (mem16 xmode (add Dsp-16-s8 (reg h-fb))) newval))
      (setter (set (mem16 xmode (add Dsp-16-s8 (reg h-fb))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym src16-16-8-An-relative- xmode))
      (name (.sym src16-16-8-An-relative- xmode))
      (comment (.str "m16c dsp:8[An] relative destination " xmode))
      (comment (.str "m16c dsp:8[An] relative destination " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (args (Src16An Dsp-16-u8))
      (args (Src16An Dsp-16-u8))
      (syntax "${Dsp-16-u8}[$Src16An]")
      (syntax "${Dsp-16-u8}[$Src16An]")
      (base-ifield f-8-4)
      (base-ifield f-8-4)
      (encoding (+ (f-8-2 2) (f-10-1 0) Dsp-16-u8 Src16An))
      (encoding (+ (f-8-2 2) (f-10-1 0) Dsp-16-u8 Src16An))
      (ifield-assertion (andif (eq f-8-2 2) (eq f-10-1 0)))
      (ifield-assertion (andif (eq f-8-2 2) (eq f-10-1 0)))
      (getter (mem16 xmode (add Dsp-16-u8 Src16An)))
      (getter (mem16 xmode (add Dsp-16-u8 Src16An)))
      (setter (set (mem16 xmode (add Dsp-16-u8 Src16An)) newval))
      (setter (set (mem16 xmode (add Dsp-16-u8 Src16An)) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym src16-16-16-An-relative- xmode))
      (name (.sym src16-16-16-An-relative- xmode))
      (comment (.str "m16c dsp:16[An] relative destination " xmode))
      (comment (.str "m16c dsp:16[An] relative destination " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (args (Src16An Dsp-16-u16))
      (args (Src16An Dsp-16-u16))
      (syntax "${Dsp-16-u16}[$Src16An]")
      (syntax "${Dsp-16-u16}[$Src16An]")
      (base-ifield f-8-4)
      (base-ifield f-8-4)
      (encoding (+ (f-8-2 3) (f-10-1 0) Dsp-16-u16 Src16An))
      (encoding (+ (f-8-2 3) (f-10-1 0) Dsp-16-u16 Src16An))
      (ifield-assertion (andif (eq f-8-2 3) (eq f-10-1 0)))
      (ifield-assertion (andif (eq f-8-2 3) (eq f-10-1 0)))
      (getter (mem16 xmode (add Dsp-16-u16 Src16An)))
      (getter (mem16 xmode (add Dsp-16-u16 Src16An)))
      (setter (set (mem16 xmode (add Dsp-16-u16 Src16An)) newval))
      (setter (set (mem16 xmode (add Dsp-16-u16 Src16An)) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym src16-16-20-An-relative- xmode))
      (name (.sym src16-16-20-An-relative- xmode))
      (comment (.str "m16c dsp:20[An] relative destination " xmode))
      (comment (.str "m16c dsp:20[An] relative destination " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (args (Src16An Dsp-16-u20))
      (args (Src16An Dsp-16-u20))
      (syntax "${Dsp-16-u20}[$Src16An]")
      (syntax "${Dsp-16-u20}[$Src16An]")
      (base-ifield f-8-4)
      (base-ifield f-8-4)
      (encoding (+ (f-8-2 3) (f-10-1 0) Dsp-16-u20 Src16An))
      (encoding (+ (f-8-2 3) (f-10-1 0) Dsp-16-u20 Src16An))
      (ifield-assertion (andif (eq f-8-2 3) (eq f-10-1 0)))
      (ifield-assertion (andif (eq f-8-2 3) (eq f-10-1 0)))
      (getter (mem20 xmode (add Dsp-16-u20 Src16An)))
      (getter (mem20 xmode (add Dsp-16-u20 Src16An)))
      (setter (set (mem20 xmode (add Dsp-16-u20 Src16An)) newval))
      (setter (set (mem20 xmode (add Dsp-16-u20 Src16An)) newval))
    )
    )
  )
  )
)
)
(src16-relative-operand QI)
(src16-relative-operand QI)
(src16-relative-operand HI)
(src16-relative-operand HI)
(define-pmacro (src32-relative-operand offset group base1 base2 xmode)
(define-pmacro (src32-relative-operand offset group base1 base2 xmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym src32- offset -8-SB-relative- group - xmode))
      (name (.sym src32- offset -8-SB-relative- group - xmode))
      (comment (.str "m32c dsp:8[sb] relative destination " xmode))
      (comment (.str "m32c dsp:8[sb] relative destination " xmode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (args ((.sym Dsp- offset -u8)))
      (args ((.sym Dsp- offset -u8)))
      (syntax (.str "${Dsp-" offset "-u8}[sb]"))
      (syntax (.str "${Dsp-" offset "-u8}[sb]"))
      (base-ifield (.sym f- base1 -11))
      (base-ifield (.sym f- base1 -11))
      (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u8)))
      (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u8)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 2)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 2)))
      (getter (c-call xmode (.str "operand_getter_" xmode) sb (.sym Dsp- offset -u8)))
      (getter (c-call xmode (.str "operand_getter_" xmode) sb (.sym Dsp- offset -u8)))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval sb (.sym Dsp- offset -u8)))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval sb (.sym Dsp- offset -u8)))
;       (getter (mem32 xmode (add (.sym Dsp- offset -u8) (reg h-sb))))
;       (getter (mem32 xmode (add (.sym Dsp- offset -u8) (reg h-sb))))
;       (setter (set (mem32 xmode (add (.sym Dsp- offset -u8) (reg h-sb))) newval))
;       (setter (set (mem32 xmode (add (.sym Dsp- offset -u8) (reg h-sb))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym src32- offset -16-SB-relative- group - xmode))
      (name (.sym src32- offset -16-SB-relative- group - xmode))
      (comment (.str "m32c dsp:16[sb] relative destination " xmode))
      (comment (.str "m32c dsp:16[sb] relative destination " xmode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (args ((.sym Dsp- offset -u16)))
      (args ((.sym Dsp- offset -u16)))
      (syntax (.str "${Dsp-" offset "-u16}[sb]"))
      (syntax (.str "${Dsp-" offset "-u16}[sb]"))
      (base-ifield (.sym f- base1 -11))
      (base-ifield (.sym f- base1 -11))
      (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u16)))
      (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u16)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 2)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 2)))
      (getter (c-call xmode (.str "operand_getter_" xmode) sb (.sym Dsp- offset -u16)))
      (getter (c-call xmode (.str "operand_getter_" xmode) sb (.sym Dsp- offset -u16)))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval sb (.sym Dsp- offset -u16)))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval sb (.sym Dsp- offset -u16)))
;       (getter (mem32 xmode (add (.sym Dsp- offset -u16) (reg h-sb))))
;       (getter (mem32 xmode (add (.sym Dsp- offset -u16) (reg h-sb))))
;       (setter (set (mem32 xmode (add (.sym Dsp- offset -u16) (reg h-sb))) newval))
;       (setter (set (mem32 xmode (add (.sym Dsp- offset -u16) (reg h-sb))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym src32- offset -8-FB-relative- group - xmode))
      (name (.sym src32- offset -8-FB-relative- group - xmode))
      (comment (.str "m32c dsp:8[fb] relative destination " xmode))
      (comment (.str "m32c dsp:8[fb] relative destination " xmode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (args ((.sym Dsp- offset -s8)))
      (args ((.sym Dsp- offset -s8)))
      (syntax (.str "${Dsp-" offset "-s8}[fb]"))
      (syntax (.str "${Dsp-" offset "-s8}[fb]"))
      (base-ifield (.sym f- base1 -11))
      (base-ifield (.sym f- base1 -11))
      (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 3) (.sym Dsp- offset -s8)))
      (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 3) (.sym Dsp- offset -s8)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 3)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 3)))
      (getter (c-call xmode (.str "operand_getter_" xmode) fb (.sym Dsp- offset -s8)))
      (getter (c-call xmode (.str "operand_getter_" xmode) fb (.sym Dsp- offset -s8)))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval fb (.sym Dsp- offset -s8)))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval fb (.sym Dsp- offset -s8)))
;       (getter (mem32 xmode (add (.sym Dsp- offset -s8) (reg h-fb))))
;       (getter (mem32 xmode (add (.sym Dsp- offset -s8) (reg h-fb))))
;       (setter (set (mem32 xmode (add (.sym Dsp- offset -s8) (reg h-fb))) newval))
;       (setter (set (mem32 xmode (add (.sym Dsp- offset -s8) (reg h-fb))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym src32- offset -16-FB-relative- group - xmode))
      (name (.sym src32- offset -16-FB-relative- group - xmode))
      (comment (.str "m32c dsp:16[fb] relative destination " xmode))
      (comment (.str "m32c dsp:16[fb] relative destination " xmode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (args ((.sym Dsp- offset -s16)))
      (args ((.sym Dsp- offset -s16)))
      (syntax (.str "${Dsp-" offset "-s16}[fb]"))
      (syntax (.str "${Dsp-" offset "-s16}[fb]"))
      (base-ifield (.sym f- base1 -11))
      (base-ifield (.sym f- base1 -11))
      (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 3) (.sym Dsp- offset -s16)))
      (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 3) (.sym Dsp- offset -s16)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 3)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 3)))
      (getter (c-call xmode (.str "operand_getter_" xmode) fb (.sym Dsp- offset -s16)))
      (getter (c-call xmode (.str "operand_getter_" xmode) fb (.sym Dsp- offset -s16)))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval fb (.sym Dsp- offset -s16)))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval fb (.sym Dsp- offset -s16)))
;       (getter (mem32 xmode (add (.sym Dsp- offset -s16) (reg h-fb))))
;       (getter (mem32 xmode (add (.sym Dsp- offset -s16) (reg h-fb))))
;       (setter (set (mem32 xmode (add (.sym Dsp- offset -s16) (reg h-fb))) newval))
;       (setter (set (mem32 xmode (add (.sym Dsp- offset -s16) (reg h-fb))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym src32- offset -8-An-relative- group - xmode))
      (name (.sym src32- offset -8-An-relative- group - xmode))
      (comment (.str "m32c dsp:8[An] relative destination " xmode))
      (comment (.str "m32c dsp:8[An] relative destination " xmode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (args ((.sym Src32An group) (.sym Dsp- offset -u8)))
      (args ((.sym Src32An group) (.sym Dsp- offset -u8)))
      (syntax (.str "${Dsp-" offset "-u8}[$Src32An" group "]"))
      (syntax (.str "${Dsp-" offset "-u8}[$Src32An" group "]"))
      (base-ifield (.sym f- base1 -11))
      (base-ifield (.sym f- base1 -11))
      (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u8) (.sym Src32An group)))
      (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u8) (.sym Src32An group)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -1) 0)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -1) 0)))
      (getter (c-call xmode (.str "operand_getter_" xmode) (.sym Src32An group) (.sym Dsp- offset -u8)))
      (getter (c-call xmode (.str "operand_getter_" xmode) (.sym Src32An group) (.sym Dsp- offset -u8)))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval (.sym Src32An group) (.sym Dsp- offset -u8)))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval (.sym Src32An group) (.sym Dsp- offset -u8)))
;       (getter (mem32 xmode (add (.sym Dsp- offset -u8) (.sym Src32An group))))
;       (getter (mem32 xmode (add (.sym Dsp- offset -u8) (.sym Src32An group))))
;       (setter (set (mem32 xmode (add (.sym Dsp- offset -u8) (.sym Src32An group))) newval))
;       (setter (set (mem32 xmode (add (.sym Dsp- offset -u8) (.sym Src32An group))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym src32- offset -16-An-relative- group - xmode))
      (name (.sym src32- offset -16-An-relative- group - xmode))
      (comment (.str "m32c dsp:16[An] relative destination " xmode))
      (comment (.str "m32c dsp:16[An] relative destination " xmode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (args ((.sym Src32An group) (.sym Dsp- offset -u16)))
      (args ((.sym Src32An group) (.sym Dsp- offset -u16)))
      (syntax (.str "${Dsp-" offset "-u16}[$Src32An" group "]"))
      (syntax (.str "${Dsp-" offset "-u16}[$Src32An" group "]"))
      (base-ifield (.sym f- base1 -11))
      (base-ifield (.sym f- base1 -11))
      (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u16) (.sym Src32An group)))
      (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u16) (.sym Src32An group)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -1) 0)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -1) 0)))
      (getter (c-call xmode (.str "operand_getter_" xmode) (.sym Src32An group) (.sym Dsp- offset -u16)))
      (getter (c-call xmode (.str "operand_getter_" xmode) (.sym Src32An group) (.sym Dsp- offset -u16)))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval (.sym Src32An group) (.sym Dsp- offset -u16)))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval (.sym Src32An group) (.sym Dsp- offset -u16)))
;       (getter (mem32 xmode (add (.sym Dsp- offset -u16) (.sym Src32An group))))
;       (getter (mem32 xmode (add (.sym Dsp- offset -u16) (.sym Src32An group))))
;       (setter (set (mem32 xmode (add (.sym Dsp- offset -u16) (.sym Src32An group))) newval))
;       (setter (set (mem32 xmode (add (.sym Dsp- offset -u16) (.sym Src32An group))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym src32- offset -24-An-relative- group - xmode))
      (name (.sym src32- offset -24-An-relative- group - xmode))
      (comment (.str "m32c dsp:16[An] relative destination " xmode))
      (comment (.str "m32c dsp:16[An] relative destination " xmode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (args ((.sym Src32An group) (.sym Dsp- offset -u24)))
      (args ((.sym Src32An group) (.sym Dsp- offset -u24)))
      (syntax (.str "${Dsp-" offset "-u24}[$Src32An" group "]"))
      (syntax (.str "${Dsp-" offset "-u24}[$Src32An" group "]"))
      (base-ifield (.sym f- base1 -11))
      (base-ifield (.sym f- base1 -11))
      (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u24) (.sym Src32An group)))
      (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u24) (.sym Src32An group)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -1) 0)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -1) 0)))
      (getter (c-call xmode (.str "operand_getter_" xmode) (.sym Src32An group) (.sym Dsp- offset -u24) ))
      (getter (c-call xmode (.str "operand_getter_" xmode) (.sym Src32An group) (.sym Dsp- offset -u24) ))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval (.sym Src32An group) (.sym Dsp- offset -u24)))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval (.sym Src32An group) (.sym Dsp- offset -u24)))
;       (getter (mem32 xmode (add (.sym Dsp- offset -u24) (.sym Src32An group))))
;       (getter (mem32 xmode (add (.sym Dsp- offset -u24) (.sym Src32An group))))
;       (setter (set (mem32 xmode (add (.sym Dsp- offset -u24) (.sym Src32An group))) newval))
;       (setter (set (mem32 xmode (add (.sym Dsp- offset -u24) (.sym Src32An group))) newval))
    )
    )
  )
  )
)
)
(src32-relative-operand 16 Unprefixed 1 10 QI)
(src32-relative-operand 16 Unprefixed 1 10 QI)
(src32-relative-operand 16 Unprefixed 1 10 HI)
(src32-relative-operand 16 Unprefixed 1 10 HI)
(src32-relative-operand 16 Unprefixed 1 10 SI)
(src32-relative-operand 16 Unprefixed 1 10 SI)
(src32-relative-operand 24 Prefixed   9 18 QI)
(src32-relative-operand 24 Prefixed   9 18 QI)
(src32-relative-operand 24 Prefixed   9 18 HI)
(src32-relative-operand 24 Prefixed   9 18 HI)
(src32-relative-operand 24 Prefixed   9 18 SI)
(src32-relative-operand 24 Prefixed   9 18 SI)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Absolute address
; Absolute address
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (src16-absolute xmode)
(define-pmacro (src16-absolute xmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym src16-16-16-absolute- xmode))
      (name (.sym src16-16-16-absolute- xmode))
      (comment (.str "m16c absolute address " xmode))
      (comment (.str "m16c absolute address " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (args (Dsp-16-u16))
      (args (Dsp-16-u16))
      (syntax (.str "${Dsp-16-u16}"))
      (syntax (.str "${Dsp-16-u16}"))
      (base-ifield f-8-4)
      (base-ifield f-8-4)
      (encoding (+ (f-8-4 #xF) Dsp-16-u16))
      (encoding (+ (f-8-4 #xF) Dsp-16-u16))
      (ifield-assertion (eq f-8-4 #xF))
      (ifield-assertion (eq f-8-4 #xF))
      (getter (mem16 xmode Dsp-16-u16))
      (getter (mem16 xmode Dsp-16-u16))
      (setter (set (mem16 xmode Dsp-16-u16) newval))
      (setter (set (mem16 xmode Dsp-16-u16) newval))
    )
    )
  )
  )
)
)
(src16-absolute QI)
(src16-absolute QI)
(src16-absolute HI)
(src16-absolute HI)
(define-pmacro (src32-absolute offset group base1 base2 xmode)
(define-pmacro (src32-absolute offset group base1 base2 xmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym src32- offset -16-absolute- group - xmode))
      (name (.sym src32- offset -16-absolute- group - xmode))
      (comment (.str "m32c absolute address " xmode))
      (comment (.str "m32c absolute address " xmode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (args ((.sym Dsp- offset -u16)))
      (args ((.sym Dsp- offset -u16)))
      (syntax (.str "${Dsp-" offset "-u16}"))
      (syntax (.str "${Dsp-" offset "-u16}"))
      (base-ifield (.sym f- base1 -11))
      (base-ifield (.sym f- base1 -11))
      (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 3) (.sym Dsp- offset -u16)))
      (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 3) (.sym Dsp- offset -u16)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 3)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 3)))
      (getter (c-call xmode (.str "operand_getter_" xmode) (const 0) (.sym Dsp- offset -u16)))
      (getter (c-call xmode (.str "operand_getter_" xmode) (const 0) (.sym Dsp- offset -u16)))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval (const 0) (.sym Dsp- offset -u16)))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval (const 0) (.sym Dsp- offset -u16)))
;      (getter (mem32 xmode (.sym Dsp- offset -u16)))
;      (getter (mem32 xmode (.sym Dsp- offset -u16)))
;      (setter (set (mem32 xmode (.sym Dsp- offset -u16)) newval))
;      (setter (set (mem32 xmode (.sym Dsp- offset -u16)) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym src32- offset -24-absolute- group - xmode))
      (name (.sym src32- offset -24-absolute- group - xmode))
      (comment (.str "m32c absolute address " xmode))
      (comment (.str "m32c absolute address " xmode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (args ((.sym Dsp- offset -u24)))
      (args ((.sym Dsp- offset -u24)))
      (syntax (.str "${Dsp-" offset "-u24}"))
      (syntax (.str "${Dsp-" offset "-u24}"))
      (base-ifield (.sym f- base1 -11))
      (base-ifield (.sym f- base1 -11))
      (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u24)))
      (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u24)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 2)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 2)))
      (getter (c-call xmode (.str "operand_getter_" xmode) (const 0) (.sym Dsp- offset -u24)))
      (getter (c-call xmode (.str "operand_getter_" xmode) (const 0) (.sym Dsp- offset -u24)))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval (const 0) (.sym Dsp- offset -u24)))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval (const 0) (.sym Dsp- offset -u24)))
;      (getter (mem32 xmode (.sym Dsp- offset -u24)))
;      (getter (mem32 xmode (.sym Dsp- offset -u24)))
;      (setter (set (mem32 xmode (.sym Dsp- offset -u24)) newval))
;      (setter (set (mem32 xmode (.sym Dsp- offset -u24)) newval))
    )
    )
  )
  )
)
)
(src32-absolute 16 Unprefixed 1 10 QI)
(src32-absolute 16 Unprefixed 1 10 QI)
(src32-absolute 16 Unprefixed 1 10 HI)
(src32-absolute 16 Unprefixed 1 10 HI)
(src32-absolute 16 Unprefixed 1 10 SI)
(src32-absolute 16 Unprefixed 1 10 SI)
(src32-absolute 24 Prefixed   9 18 QI)
(src32-absolute 24 Prefixed   9 18 QI)
(src32-absolute 24 Prefixed   9 18 HI)
(src32-absolute 24 Prefixed   9 18 HI)
(src32-absolute 24 Prefixed   9 18 SI)
(src32-absolute 24 Prefixed   9 18 SI)
;-------------------------------------------------------------
;-------------------------------------------------------------
; An indirect indirect
; An indirect indirect
;
;
; Double indirect addressing uses the lower 3 bytes of the value stored
; Double indirect addressing uses the lower 3 bytes of the value stored
; at the address referenced by 'op' as the effective address.
; at the address referenced by 'op' as the effective address.
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (indirect-addr op) (and USI (mem32 USI op) #x00ffffff))
(define-pmacro (indirect-addr op) (and USI (mem32 USI op) #x00ffffff))
; (define-pmacro (src-An-indirect-indirect-operand xmode)
; (define-pmacro (src-An-indirect-indirect-operand xmode)
;   (define-derived-operand
;   (define-derived-operand
;     (name (.sym src32-An-indirect-indirect- xmode))
;     (name (.sym src32-An-indirect-indirect- xmode))
;     (comment (.str "m32c An indirect indirect destination " xmode))
;     (comment (.str "m32c An indirect indirect destination " xmode))
;     (attrs (machine 32))
;     (attrs (machine 32))
;     (mode xmode)
;     (mode xmode)
;     (args (Src32AnPrefixed))
;     (args (Src32AnPrefixed))
;     (syntax (.str "[[$Src32AnPrefixed]]"))
;     (syntax (.str "[[$Src32AnPrefixed]]"))
;     (base-ifield f-9-11)
;     (base-ifield f-9-11)
;     (encoding (+ (f-9-3 0) (f-18-1 0) Src32AnPrefixed))
;     (encoding (+ (f-9-3 0) (f-18-1 0) Src32AnPrefixed))
;     (ifield-assertion (andif (eq f-9-3 0) (eq f-18-1 0)))
;     (ifield-assertion (andif (eq f-9-3 0) (eq f-18-1 0)))
;     (getter (mem32 xmode (indirect-addr Src32AnPrefixed)))
;     (getter (mem32 xmode (indirect-addr Src32AnPrefixed)))
;     (setter (set (mem32 xmode (indirect-addr Src32AnPrefixed)) newval))
;     (setter (set (mem32 xmode (indirect-addr Src32AnPrefixed)) newval))
;   )
;   )
; )
; )
; (src-An-indirect-indirect-operand QI)
; (src-An-indirect-indirect-operand QI)
; (src-An-indirect-indirect-operand HI)
; (src-An-indirect-indirect-operand HI)
; (src-An-indirect-indirect-operand SI)
; (src-An-indirect-indirect-operand SI)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Relative indirect
; Relative indirect
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (src-relative-indirect-operand xmode)
(define-pmacro (src-relative-indirect-operand xmode)
  (begin
  (begin
;     (define-derived-operand
;     (define-derived-operand
;       (name (.sym src32-24-8-SB-relative-indirect- xmode))
;       (name (.sym src32-24-8-SB-relative-indirect- xmode))
;       (comment (.str "m32c dsp:8[sb] relative source " xmode))
;       (comment (.str "m32c dsp:8[sb] relative source " xmode))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (args (Dsp-24-u8))
;       (args (Dsp-24-u8))
;       (syntax "[${Dsp-24-u8}[sb]]")
;       (syntax "[${Dsp-24-u8}[sb]]")
;       (base-ifield f-9-11)
;       (base-ifield f-9-11)
;       (encoding (+ (f-9-3 1) (f-18-2 2) Dsp-24-u8))
;       (encoding (+ (f-9-3 1) (f-18-2 2) Dsp-24-u8))
;       (ifield-assertion (andif (eq f-9-3 1) (eq f-18-2 2)))
;       (ifield-assertion (andif (eq f-9-3 1) (eq f-18-2 2)))
;       (getter (mem32 xmode (indirect-addr (add Dsp-24-u8 (reg h-sb)))))
;       (getter (mem32 xmode (indirect-addr (add Dsp-24-u8 (reg h-sb)))))
;       (setter (set (mem32 xmode (indirect-addr (add Dsp-24-u8 (reg h-sb)))) newval))
;       (setter (set (mem32 xmode (indirect-addr (add Dsp-24-u8 (reg h-sb)))) newval))
;     )
;     )
;     (define-derived-operand
;     (define-derived-operand
;       (name (.sym src32-24-16-SB-relative-indirect- xmode))
;       (name (.sym src32-24-16-SB-relative-indirect- xmode))
;       (comment (.str "m32c dsp:16[sb] relative source " xmode))
;       (comment (.str "m32c dsp:16[sb] relative source " xmode))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (args (Dsp-24-u16))
;       (args (Dsp-24-u16))
;       (syntax "[${Dsp-24-u16}[sb]]")
;       (syntax "[${Dsp-24-u16}[sb]]")
;       (base-ifield f-9-11)
;       (base-ifield f-9-11)
;       (encoding (+ (f-9-3 2) (f-18-2 2) Dsp-24-u16))
;       (encoding (+ (f-9-3 2) (f-18-2 2) Dsp-24-u16))
;       (ifield-assertion (andif (eq f-9-3 2) (eq f-18-2 2)))
;       (ifield-assertion (andif (eq f-9-3 2) (eq f-18-2 2)))
;       (getter (mem32 xmode (indirect-addr (add Dsp-24-u16 (reg h-sb)))))
;       (getter (mem32 xmode (indirect-addr (add Dsp-24-u16 (reg h-sb)))))
;       (setter (set (mem32 xmode (indirect-addr (add Dsp-24-u16 (reg h-sb)))) newval))
;       (setter (set (mem32 xmode (indirect-addr (add Dsp-24-u16 (reg h-sb)))) newval))
;     )
;     )
;     (define-derived-operand
;     (define-derived-operand
;       (name (.sym src32-24-8-FB-relative-indirect- xmode))
;       (name (.sym src32-24-8-FB-relative-indirect- xmode))
;       (comment (.str "m32c dsp:8[fb] relative source " xmode))
;       (comment (.str "m32c dsp:8[fb] relative source " xmode))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (args (Dsp-24-s8))
;       (args (Dsp-24-s8))
;       (syntax "[${Dsp-24-s8}[fb]]")
;       (syntax "[${Dsp-24-s8}[fb]]")
;       (base-ifield f-9-11)
;       (base-ifield f-9-11)
;       (encoding (+ (f-9-3 1) (f-18-2 3) Dsp-24-s8))
;       (encoding (+ (f-9-3 1) (f-18-2 3) Dsp-24-s8))
;       (ifield-assertion (andif (eq f-9-3 1) (eq f-18-2 3)))
;       (ifield-assertion (andif (eq f-9-3 1) (eq f-18-2 3)))
;       (getter (mem32 xmode (indirect-addr (add Dsp-24-s8 (reg h-fb)))))
;       (getter (mem32 xmode (indirect-addr (add Dsp-24-s8 (reg h-fb)))))
;       (setter (set (mem32 xmode (indirect-addr (add Dsp-24-s8 (reg h-fb)))) newval))
;       (setter (set (mem32 xmode (indirect-addr (add Dsp-24-s8 (reg h-fb)))) newval))
;     )
;     )
;     (define-derived-operand
;     (define-derived-operand
;       (name (.sym src32-24-16-FB-relative-indirect- xmode))
;       (name (.sym src32-24-16-FB-relative-indirect- xmode))
;       (comment (.str "m32c dsp:16[fb] relative source " xmode))
;       (comment (.str "m32c dsp:16[fb] relative source " xmode))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (args (Dsp-24-s16))
;       (args (Dsp-24-s16))
;       (syntax "[${Dsp-24-s16}[fb]]")
;       (syntax "[${Dsp-24-s16}[fb]]")
;       (base-ifield f-9-11)
;       (base-ifield f-9-11)
;       (encoding (+ (f-9-3 2) (f-18-2 3) Dsp-24-s16))
;       (encoding (+ (f-9-3 2) (f-18-2 3) Dsp-24-s16))
;       (ifield-assertion (andif (eq f-9-3 2) (eq f-18-2 3)))
;       (ifield-assertion (andif (eq f-9-3 2) (eq f-18-2 3)))
;       (getter (mem32 xmode (indirect-addr (add Dsp-24-s16 (reg h-fb)))))
;       (getter (mem32 xmode (indirect-addr (add Dsp-24-s16 (reg h-fb)))))
;       (setter (set (mem32 xmode (indirect-addr (add Dsp-24-s16 (reg h-fb)))) newval))
;       (setter (set (mem32 xmode (indirect-addr (add Dsp-24-s16 (reg h-fb)))) newval))
;     )
;     )
;     (define-derived-operand
;     (define-derived-operand
;       (name (.sym src32-24-8-An-relative-indirect- xmode))
;       (name (.sym src32-24-8-An-relative-indirect- xmode))
;       (comment (.str "m32c dsp:8[An] relative indirect source " xmode))
;       (comment (.str "m32c dsp:8[An] relative indirect source " xmode))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (args (Src32AnPrefixed Dsp-24-u8))
;       (args (Src32AnPrefixed Dsp-24-u8))
;       (syntax "[${Dsp-24-u8}[$Src32AnPrefixed]]")
;       (syntax "[${Dsp-24-u8}[$Src32AnPrefixed]]")
;       (base-ifield f-9-11)
;       (base-ifield f-9-11)
;       (encoding (+ (f-9-3 1) (f-18-1 0) Dsp-24-u8 Src32AnPrefixed))
;       (encoding (+ (f-9-3 1) (f-18-1 0) Dsp-24-u8 Src32AnPrefixed))
;       (ifield-assertion (andif (eq f-9-3 1) (eq f-18-1 0)))
;       (ifield-assertion (andif (eq f-9-3 1) (eq f-18-1 0)))
;       (getter (mem32 xmode (indirect-addr (add Dsp-24-u8 Src32AnPrefixed))))
;       (getter (mem32 xmode (indirect-addr (add Dsp-24-u8 Src32AnPrefixed))))
;       (setter (set (mem32 xmode (indirect-addr (add Dsp-24-u8 Src32AnPrefixed))) newval))
;       (setter (set (mem32 xmode (indirect-addr (add Dsp-24-u8 Src32AnPrefixed))) newval))
;     )
;     )
;     (define-derived-operand
;     (define-derived-operand
;       (name (.sym src32-24-16-An-relative-indirect- xmode))
;       (name (.sym src32-24-16-An-relative-indirect- xmode))
;       (comment (.str "m32c dsp:16[An] relative source " xmode))
;       (comment (.str "m32c dsp:16[An] relative source " xmode))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (args (Src32AnPrefixed Dsp-24-u16))
;       (args (Src32AnPrefixed Dsp-24-u16))
;       (syntax "[${Dsp-24-u16}[$Src32AnPrefixed]]")
;       (syntax "[${Dsp-24-u16}[$Src32AnPrefixed]]")
;       (base-ifield f-9-11)
;       (base-ifield f-9-11)
;       (encoding (+ (f-9-3 2) (f-18-1 0) Dsp-24-u16 Src32AnPrefixed))
;       (encoding (+ (f-9-3 2) (f-18-1 0) Dsp-24-u16 Src32AnPrefixed))
;       (ifield-assertion (andif (eq f-9-3 2) (eq f-18-1 0)))
;       (ifield-assertion (andif (eq f-9-3 2) (eq f-18-1 0)))
;       (getter (mem32 xmode (indirect-addr (add Dsp-24-u16 Src32AnPrefixed))))
;       (getter (mem32 xmode (indirect-addr (add Dsp-24-u16 Src32AnPrefixed))))
;       (setter (set (mem32 xmode (indirect-addr (add Dsp-24-u16 Src32AnPrefixed))) newval))
;       (setter (set (mem32 xmode (indirect-addr (add Dsp-24-u16 Src32AnPrefixed))) newval))
;     )
;     )
;     (define-derived-operand
;     (define-derived-operand
;       (name (.sym src32-24-24-An-relative-indirect- xmode))
;       (name (.sym src32-24-24-An-relative-indirect- xmode))
;       (comment (.str "m32c dsp:24[An] relative source " xmode))
;       (comment (.str "m32c dsp:24[An] relative source " xmode))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (args (Src32AnPrefixed Dsp-24-u24))
;       (args (Src32AnPrefixed Dsp-24-u24))
;       (syntax "[${Dsp-24-u24}[$Src32AnPrefixed]]")
;       (syntax "[${Dsp-24-u24}[$Src32AnPrefixed]]")
;       (base-ifield f-9-11)
;       (base-ifield f-9-11)
;       (encoding (+ (f-9-3 3) (f-18-1 0) Dsp-24-u24 Src32AnPrefixed))
;       (encoding (+ (f-9-3 3) (f-18-1 0) Dsp-24-u24 Src32AnPrefixed))
;       (ifield-assertion (andif (eq f-9-3 3) (eq f-18-1 0)))
;       (ifield-assertion (andif (eq f-9-3 3) (eq f-18-1 0)))
;       (getter (mem32 xmode (indirect-addr (add Dsp-24-u24 Src32AnPrefixed))))
;       (getter (mem32 xmode (indirect-addr (add Dsp-24-u24 Src32AnPrefixed))))
;       (setter (set (mem32 xmode (indirect-addr (add Dsp-24-u24 Src32AnPrefixed))) newval))
;       (setter (set (mem32 xmode (indirect-addr (add Dsp-24-u24 Src32AnPrefixed))) newval))
;     )
;     )
  )
  )
)
)
; (src-relative-indirect-operand QI)
; (src-relative-indirect-operand QI)
; (src-relative-indirect-operand HI)
; (src-relative-indirect-operand HI)
; (src-relative-indirect-operand SI)
; (src-relative-indirect-operand SI)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Absolute Indirect address
; Absolute Indirect address
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (src32-absolute-indirect offset base1 base2 xmode)
(define-pmacro (src32-absolute-indirect offset base1 base2 xmode)
  (begin
  (begin
;     (define-derived-operand
;     (define-derived-operand
;       (name (.sym src32- offset -16-absolute-indirect-derived- xmode))
;       (name (.sym src32- offset -16-absolute-indirect-derived- xmode))
;       (comment (.str "m32c absolute indirect address " xmode))
;       (comment (.str "m32c absolute indirect address " xmode))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (args ((.sym Dsp- offset -u16)))
;       (args ((.sym Dsp- offset -u16)))
;       (syntax (.str "[${Dsp-" offset "-u16}]"))
;       (syntax (.str "[${Dsp-" offset "-u16}]"))
;       (base-ifield (.sym f- base1 -11))
;       (base-ifield (.sym f- base1 -11))
;       (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 3) (.sym Dsp- offset -u16)))
;       (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 3) (.sym Dsp- offset -u16)))
;       (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 3)))
;       (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 3)))
;       (getter (mem32 xmode (indirect-addr (.sym Dsp- offset -u16))))
;       (getter (mem32 xmode (indirect-addr (.sym Dsp- offset -u16))))
;       (setter (set (mem32 xmode (indirect-addr (.sym Dsp- offset -u16))) newval))
;       (setter (set (mem32 xmode (indirect-addr (.sym Dsp- offset -u16))) newval))
;     )
;     )
;     (define-derived-operand
;     (define-derived-operand
;       (name (.sym src32- offset -24-absolute-indirect-derived- xmode))
;       (name (.sym src32- offset -24-absolute-indirect-derived- xmode))
;       (comment (.str "m32c absolute indirect address " xmode))
;       (comment (.str "m32c absolute indirect address " xmode))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (args ((.sym Dsp- offset -u24)))
;       (args ((.sym Dsp- offset -u24)))
;       (syntax (.str "[${Dsp-" offset "-u24}]"))
;       (syntax (.str "[${Dsp-" offset "-u24}]"))
;       (base-ifield (.sym f- base1 -11))
;       (base-ifield (.sym f- base1 -11))
;       (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u24)))
;       (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u24)))
;       (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 2)))
;       (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 2)))
;       (getter (mem32 xmode (indirect-addr (.sym Dsp- offset -u24))))
;       (getter (mem32 xmode (indirect-addr (.sym Dsp- offset -u24))))
;       (setter (set (mem32 xmode (indirect-addr (.sym Dsp- offset -u24))) newval))
;       (setter (set (mem32 xmode (indirect-addr (.sym Dsp- offset -u24))) newval))
;     )
;     )
  )
  )
)
)
(src32-absolute-indirect 24 9 18 QI)
(src32-absolute-indirect 24 9 18 QI)
(src32-absolute-indirect 24 9 18 HI)
(src32-absolute-indirect 24 9 18 HI)
(src32-absolute-indirect 24 9 18 SI)
(src32-absolute-indirect 24 9 18 SI)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Register relative source operands for short format insns
; Register relative source operands for short format insns
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (src-2-S-operands mach xmode base opc1 opc2 opc3)
(define-pmacro (src-2-S-operands mach xmode base opc1 opc2 opc3)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym src mach -2-S-8-SB-relative- xmode))
      (name (.sym src mach -2-S-8-SB-relative- xmode))
      (comment (.str "m" mach "c SB relative address"))
      (comment (.str "m" mach "c SB relative address"))
      (attrs (machine mach))
      (attrs (machine mach))
      (mode xmode)
      (mode xmode)
      (args (Dsp-8-u8))
      (args (Dsp-8-u8))
      (syntax "${Dsp-8-u8}[sb]")
      (syntax "${Dsp-8-u8}[sb]")
      (base-ifield (.sym f- base -2))
      (base-ifield (.sym f- base -2))
      (encoding (+ ((.sym f- base -2) opc1) Dsp-8-u8))
      (encoding (+ ((.sym f- base -2) opc1) Dsp-8-u8))
      (ifield-assertion (eq (.sym f- base -2) opc1))
      (ifield-assertion (eq (.sym f- base -2) opc1))
      (getter (c-call xmode (.str "operand_getter_" xmode) sb Dsp-8-u8))
      (getter (c-call xmode (.str "operand_getter_" xmode) sb Dsp-8-u8))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval sb Dsp-8-u8))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval sb Dsp-8-u8))
;       (getter (mem-mach mach xmode (indirect-addr (add (reg h-sb) Dsp-8-u8))))
;       (getter (mem-mach mach xmode (indirect-addr (add (reg h-sb) Dsp-8-u8))))
;       (setter (set (mem-mach mach xmode (indirect-addr (add (reg h-sb) Dsp-8-u8))) newval))
;       (setter (set (mem-mach mach xmode (indirect-addr (add (reg h-sb) Dsp-8-u8))) newval))
      )
      )
    (define-derived-operand
    (define-derived-operand
      (name (.sym src mach -2-S-8-FB-relative- xmode))
      (name (.sym src mach -2-S-8-FB-relative- xmode))
      (comment (.str "m" mach "c FB relative address"))
      (comment (.str "m" mach "c FB relative address"))
      (attrs (machine mach))
      (attrs (machine mach))
      (mode xmode)
      (mode xmode)
      (args (Dsp-8-s8))
      (args (Dsp-8-s8))
      (syntax "${Dsp-8-s8}[fb]")
      (syntax "${Dsp-8-s8}[fb]")
      (base-ifield (.sym f- base -2))
      (base-ifield (.sym f- base -2))
      (encoding (+ ((.sym f- base -2) opc2) Dsp-8-s8))
      (encoding (+ ((.sym f- base -2) opc2) Dsp-8-s8))
      (ifield-assertion (eq (.sym f- base -2) opc2))
      (ifield-assertion (eq (.sym f- base -2) opc2))
      (getter (c-call xmode (.str "operand_getter_" xmode) fb Dsp-8-s8))
      (getter (c-call xmode (.str "operand_getter_" xmode) fb Dsp-8-s8))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval fb Dsp-8-s8))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval fb Dsp-8-s8))
;       (getter (mem-mach mach xmode (indirect-addr (add (reg h-fb) Dsp-8-s8))))
;       (getter (mem-mach mach xmode (indirect-addr (add (reg h-fb) Dsp-8-s8))))
;       (setter (set (mem-mach mach xmode (indirect-addr (add (reg h-fb) Dsp-8-s8))) newval))
;       (setter (set (mem-mach mach xmode (indirect-addr (add (reg h-fb) Dsp-8-s8))) newval))
      )
      )
    (define-derived-operand
    (define-derived-operand
      (name (.sym src mach -2-S-16-absolute- xmode))
      (name (.sym src mach -2-S-16-absolute- xmode))
      (comment (.str "m" mach "c absolute address"))
      (comment (.str "m" mach "c absolute address"))
      (attrs (machine mach))
      (attrs (machine mach))
      (mode xmode)
      (mode xmode)
      (args (Dsp-8-u16))
      (args (Dsp-8-u16))
      (syntax "${Dsp-8-u16}")
      (syntax "${Dsp-8-u16}")
      (base-ifield (.sym f- base -2))
      (base-ifield (.sym f- base -2))
      (encoding (+ ((.sym f- base -2) opc3) Dsp-8-u16))
      (encoding (+ ((.sym f- base -2) opc3) Dsp-8-u16))
      (ifield-assertion (eq (.sym f- base -2) opc3))
      (ifield-assertion (eq (.sym f- base -2) opc3))
      (getter (c-call xmode (.str "operand_getter_" xmode) (const 0) Dsp-8-u16))
      (getter (c-call xmode (.str "operand_getter_" xmode) (const 0) Dsp-8-u16))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval (const 0) Dsp-8-u16))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval (const 0) Dsp-8-u16))
;      (getter (mem-mach mach xmode Dsp-8-u16))
;      (getter (mem-mach mach xmode Dsp-8-u16))
;      (setter (set (mem-mach mach xmode Dsp-8-u16) newval))
;      (setter (set (mem-mach mach xmode Dsp-8-u16) newval))
      )
      )
  )
  )
)
)
(src-2-S-operands 16 QI 6 1 2 3)
(src-2-S-operands 16 QI 6 1 2 3)
(src-2-S-operands 32 QI 2 2 3 1)
(src-2-S-operands 32 QI 2 2 3 1)
(src-2-S-operands 32 HI 2 2 3 1)
(src-2-S-operands 32 HI 2 2 3 1)
;=============================================================
;=============================================================
; Derived Operands
; Derived Operands
;-------------------------------------------------------------
;-------------------------------------------------------------
; Destination
; Destination
;-------------------------------------------------------------
;-------------------------------------------------------------
; Rn direct
; Rn direct
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (dst16-Rn-direct-operand xmode)
(define-pmacro (dst16-Rn-direct-operand xmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst16-Rn-direct- xmode))
      (name (.sym dst16-Rn-direct- xmode))
      (comment (.str "m16c Rn direct destination " xmode))
      (comment (.str "m16c Rn direct destination " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (args ((.sym Dst16Rn xmode)))
      (args ((.sym Dst16Rn xmode)))
      (syntax (.str "$Dst16Rn" xmode))
      (syntax (.str "$Dst16Rn" xmode))
      (base-ifield f-12-4)
      (base-ifield f-12-4)
      (encoding (+ (f-12-2 0) (.sym Dst16Rn xmode)))
      (encoding (+ (f-12-2 0) (.sym Dst16Rn xmode)))
      (ifield-assertion (eq f-12-2 0))
      (ifield-assertion (eq f-12-2 0))
      (getter (trunc xmode (.sym Dst16Rn xmode)))
      (getter (trunc xmode (.sym Dst16Rn xmode)))
      (setter (set (.sym Dst16Rn xmode) newval))
      (setter (set (.sym Dst16Rn xmode) newval))
    )
    )
  )
  )
)
)
(dst16-Rn-direct-operand QI)
(dst16-Rn-direct-operand QI)
(dst16-Rn-direct-operand HI)
(dst16-Rn-direct-operand HI)
(dst16-Rn-direct-operand SI)
(dst16-Rn-direct-operand SI)
(define-derived-operand
(define-derived-operand
  (name dst16-Rn-direct-Ext-QI)
  (name dst16-Rn-direct-Ext-QI)
  (comment "m16c Rn direct destination QI")
  (comment "m16c Rn direct destination QI")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode HI)
  (mode HI)
  (args (Dst16RnExtQI))
  (args (Dst16RnExtQI))
  (syntax "$Dst16RnExtQI")
  (syntax "$Dst16RnExtQI")
  (base-ifield f-12-4)
  (base-ifield f-12-4)
  (encoding (+ (f-12-2 0) Dst16RnExtQI (f-15-1 0)))
  (encoding (+ (f-12-2 0) Dst16RnExtQI (f-15-1 0)))
  (ifield-assertion (andif (eq f-12-2 0) (eq f-15-1 0)))
  (ifield-assertion (andif (eq f-12-2 0) (eq f-15-1 0)))
  (getter (trunc QI (.sym Dst16RnExtQI)))
  (getter (trunc QI (.sym Dst16RnExtQI)))
  (setter (set Dst16RnExtQI newval))
  (setter (set Dst16RnExtQI newval))
)
)
(define-pmacro (dst32-Rn-direct-operand group base xmode)
(define-pmacro (dst32-Rn-direct-operand group base xmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst32-Rn-direct- group - xmode))
      (name (.sym dst32-Rn-direct- group - xmode))
      (comment (.str "m32c Rn direct destination " xmode))
      (comment (.str "m32c Rn direct destination " xmode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (args ((.sym Dst32Rn group xmode)))
      (args ((.sym Dst32Rn group xmode)))
      (syntax (.str "$Dst32Rn" group xmode))
      (syntax (.str "$Dst32Rn" group xmode))
      (base-ifield (.sym f- base -6))
      (base-ifield (.sym f- base -6))
      (encoding (+ ((.sym f- base -3) 4) (.sym Dst32Rn group xmode)))
      (encoding (+ ((.sym f- base -3) 4) (.sym Dst32Rn group xmode)))
      (ifield-assertion (eq (.sym f- base -3) 4))
      (ifield-assertion (eq (.sym f- base -3) 4))
      (getter (trunc xmode (.sym Dst32Rn group xmode)))
      (getter (trunc xmode (.sym Dst32Rn group xmode)))
      (setter (set (.sym Dst32Rn group xmode) newval))
      (setter (set (.sym Dst32Rn group xmode) newval))
    )
    )
  )
  )
)
)
(dst32-Rn-direct-operand   Unprefixed  4 QI)
(dst32-Rn-direct-operand   Unprefixed  4 QI)
(dst32-Rn-direct-operand     Prefixed 12 QI)
(dst32-Rn-direct-operand     Prefixed 12 QI)
(dst32-Rn-direct-operand   Unprefixed  4 HI)
(dst32-Rn-direct-operand   Unprefixed  4 HI)
(dst32-Rn-direct-operand     Prefixed 12 HI)
(dst32-Rn-direct-operand     Prefixed 12 HI)
(dst32-Rn-direct-operand   Unprefixed  4 SI)
(dst32-Rn-direct-operand   Unprefixed  4 SI)
(dst32-Rn-direct-operand     Prefixed 12 SI)
(dst32-Rn-direct-operand     Prefixed 12 SI)
(define-pmacro (dst32-Rn-direct-Ext-operand group base1 base2 smode dmode)
(define-pmacro (dst32-Rn-direct-Ext-operand group base1 base2 smode dmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst32-Rn-direct- group - smode))
      (name (.sym dst32-Rn-direct- group - smode))
      (comment (.str "m32c Rn direct destination " smode))
      (comment (.str "m32c Rn direct destination " smode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode dmode)
      (mode dmode)
      (args ((.sym Dst32Rn group smode)))
      (args ((.sym Dst32Rn group smode)))
      (syntax (.str "$Dst32Rn" group smode))
      (syntax (.str "$Dst32Rn" group smode))
      (base-ifield (.sym f- base1 -6))
      (base-ifield (.sym f- base1 -6))
      (encoding (+ ((.sym f- base1 -3) 4) ((.sym f- base2 -1) 1) (.sym Dst32Rn group smode)))
      (encoding (+ ((.sym f- base1 -3) 4) ((.sym f- base2 -1) 1) (.sym Dst32Rn group smode)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 4) (eq (.sym f- base2 -1) 1)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 4) (eq (.sym f- base2 -1) 1)))
      (getter (trunc smode (.sym Dst32Rn group smode)))
      (getter (trunc smode (.sym Dst32Rn group smode)))
      (setter (set (.sym Dst32Rn group smode) newval))
      (setter (set (.sym Dst32Rn group smode) newval))
    )
    )
  )
  )
)
)
(dst32-Rn-direct-Ext-operand ExtUnprefixed 4 8 QI HI)
(dst32-Rn-direct-Ext-operand ExtUnprefixed 4 8 QI HI)
(dst32-Rn-direct-Ext-operand ExtUnprefixed 4 8 HI SI)
(dst32-Rn-direct-Ext-operand ExtUnprefixed 4 8 HI SI)
(define-derived-operand
(define-derived-operand
  (name dst32-R3-direct-Unprefixed-HI)
  (name dst32-R3-direct-Unprefixed-HI)
  (comment "m32c R3 direct HI")
  (comment "m32c R3 direct HI")
  (attrs (machine 32))
  (attrs (machine 32))
  (mode HI)
  (mode HI)
  (args (R3))
  (args (R3))
  (syntax "$R3")
  (syntax "$R3")
  (base-ifield f-4-6)
  (base-ifield f-4-6)
  (encoding (+ (f-4-3 4) (f-8-2 #x1)))
  (encoding (+ (f-4-3 4) (f-8-2 #x1)))
  (ifield-assertion (andif (eq f-4-3 4) (eq f-8-2 #x1)))
  (ifield-assertion (andif (eq f-4-3 4) (eq f-8-2 #x1)))
  (getter (trunc HI R3))
  (getter (trunc HI R3))
  (setter (set R3 newval))
  (setter (set R3 newval))
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
; An direct
; An direct
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (dst16-An-direct-operand xmode)
(define-pmacro (dst16-An-direct-operand xmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst16-An-direct- xmode))
      (name (.sym dst16-An-direct- xmode))
      (comment (.str "m16c An direct destination " xmode))
      (comment (.str "m16c An direct destination " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (args ((.sym Dst16An xmode)))
      (args ((.sym Dst16An xmode)))
      (syntax (.str "$Dst16An" xmode))
      (syntax (.str "$Dst16An" xmode))
      (base-ifield f-12-4)
      (base-ifield f-12-4)
      (encoding (+ (f-12-2 1) (f-14-1 0) (.sym Dst16An xmode)))
      (encoding (+ (f-12-2 1) (f-14-1 0) (.sym Dst16An xmode)))
      (ifield-assertion (andif (eq f-12-2 1) (eq f-14-1 0)))
      (ifield-assertion (andif (eq f-12-2 1) (eq f-14-1 0)))
      (getter (trunc xmode (.sym Dst16An xmode)))
      (getter (trunc xmode (.sym Dst16An xmode)))
      (setter (set (.sym Dst16An xmode) newval))
      (setter (set (.sym Dst16An xmode) newval))
    )
    )
  )
  )
)
)
(dst16-An-direct-operand QI)
(dst16-An-direct-operand QI)
(dst16-An-direct-operand HI)
(dst16-An-direct-operand HI)
(dst16-An-direct-operand SI)
(dst16-An-direct-operand SI)
(define-pmacro (dst32-An-direct-operand group base1 base2 xmode)
(define-pmacro (dst32-An-direct-operand group base1 base2 xmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst32-An-direct- group - xmode))
      (name (.sym dst32-An-direct- group - xmode))
      (comment (.str "m32c An direct destination " xmode))
      (comment (.str "m32c An direct destination " xmode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (args ((.sym Dst32An group xmode)))
      (args ((.sym Dst32An group xmode)))
      (syntax (.str "$Dst32An" group xmode))
      (syntax (.str "$Dst32An" group xmode))
      (base-ifield (.sym f- base1 -6))
      (base-ifield (.sym f- base1 -6))
      (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 1) (.sym Dst32An group xmode)))
      (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 1) (.sym Dst32An group xmode)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 1)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 1)))
      (getter (trunc xmode (.sym Dst32An group xmode)))
      (getter (trunc xmode (.sym Dst32An group xmode)))
      (setter (set (.sym Dst32An group xmode) newval))
      (setter (set (.sym Dst32An group xmode) newval))
    )
    )
  )
  )
)
)
(dst32-An-direct-operand Unprefixed  4  8 QI)
(dst32-An-direct-operand Unprefixed  4  8 QI)
(dst32-An-direct-operand   Prefixed 12 16 QI)
(dst32-An-direct-operand   Prefixed 12 16 QI)
(dst32-An-direct-operand Unprefixed  4  8 HI)
(dst32-An-direct-operand Unprefixed  4  8 HI)
(dst32-An-direct-operand   Prefixed 12 16 HI)
(dst32-An-direct-operand   Prefixed 12 16 HI)
(dst32-An-direct-operand Unprefixed  4  8 SI)
(dst32-An-direct-operand Unprefixed  4  8 SI)
(dst32-An-direct-operand   Prefixed 12 16 SI)
(dst32-An-direct-operand   Prefixed 12 16 SI)
;-------------------------------------------------------------
;-------------------------------------------------------------
; An indirect
; An indirect
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (dst16-An-indirect-operand xmode)
(define-pmacro (dst16-An-indirect-operand xmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst16-An-indirect- xmode))
      (name (.sym dst16-An-indirect- xmode))
      (comment (.str "m16c An indirect destination " xmode))
      (comment (.str "m16c An indirect destination " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (args (Dst16An))
      (args (Dst16An))
      (syntax "[$Dst16An]")
      (syntax "[$Dst16An]")
      (base-ifield f-12-4)
      (base-ifield f-12-4)
      (encoding (+ (f-12-2 1) (f-14-1 1) Dst16An))
      (encoding (+ (f-12-2 1) (f-14-1 1) Dst16An))
      (ifield-assertion (andif (eq f-12-2 1) (eq f-14-1 1)))
      (ifield-assertion (andif (eq f-12-2 1) (eq f-14-1 1)))
      (getter (mem16 xmode Dst16An))
      (getter (mem16 xmode Dst16An))
      (setter (set (mem16 xmode Dst16An) newval))
      (setter (set (mem16 xmode Dst16An) newval))
    )
    )
  )
  )
)
)
(dst16-An-indirect-operand QI)
(dst16-An-indirect-operand QI)
(dst16-An-indirect-operand HI)
(dst16-An-indirect-operand HI)
(dst16-An-indirect-operand SI)
(dst16-An-indirect-operand SI)
(define-derived-operand
(define-derived-operand
  (name dst16-An-indirect-Ext-QI)
  (name dst16-An-indirect-Ext-QI)
  (comment "m16c An indirect destination QI")
  (comment "m16c An indirect destination QI")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode HI)
  (mode HI)
  (args (Dst16An))
  (args (Dst16An))
  (syntax "[$Dst16An]")
  (syntax "[$Dst16An]")
  (base-ifield f-12-4)
  (base-ifield f-12-4)
  (encoding (+ (f-12-2 1) (f-14-1 1) Dst16An))
  (encoding (+ (f-12-2 1) (f-14-1 1) Dst16An))
  (ifield-assertion (andif (eq f-12-2 1) (eq f-14-1 1)))
  (ifield-assertion (andif (eq f-12-2 1) (eq f-14-1 1)))
  (getter (mem16 QI Dst16An))
  (getter (mem16 QI Dst16An))
  (setter (set (mem16 HI Dst16An) newval))
  (setter (set (mem16 HI Dst16An) newval))
)
)
(define-pmacro (dst32-An-indirect-operand group base1 base2 smode dmode)
(define-pmacro (dst32-An-indirect-operand group base1 base2 smode dmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst32-An-indirect- group - smode))
      (name (.sym dst32-An-indirect- group - smode))
      (comment (.str "m32c An indirect destination " smode))
      (comment (.str "m32c An indirect destination " smode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode dmode)
      (mode dmode)
      (args ((.sym Dst32An group)))
      (args ((.sym Dst32An group)))
      (syntax (.str "[$Dst32An" group "]"))
      (syntax (.str "[$Dst32An" group "]"))
      (base-ifield (.sym f- base1 -6))
      (base-ifield (.sym f- base1 -6))
      (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 0) (.sym Dst32An group)))
      (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 0) (.sym Dst32An group)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 0)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 0)))
      (getter (c-call dmode (.str "operand_getter_" dmode) (.sym Dst32An group)
      (getter (c-call dmode (.str "operand_getter_" dmode) (.sym Dst32An group)
                       (const 0)))
                       (const 0)))
      (setter (c-call DFLT (.str "operand_setter_" dmode)  newval
      (setter (c-call DFLT (.str "operand_setter_" dmode)  newval
                      (.sym Dst32An group) (const 0)))
                      (.sym Dst32An group) (const 0)))
;      (getter (mem32 smode (.sym Dst32An group)))
;      (getter (mem32 smode (.sym Dst32An group)))
;      (setter (set (mem32 dmode (.sym Dst32An group)) newval))
;      (setter (set (mem32 dmode (.sym Dst32An group)) newval))
    )
    )
  )
  )
)
)
(dst32-An-indirect-operand    Unprefixed  4  8 QI QI)
(dst32-An-indirect-operand    Unprefixed  4  8 QI QI)
(dst32-An-indirect-operand      Prefixed 12 16 QI QI)
(dst32-An-indirect-operand      Prefixed 12 16 QI QI)
(dst32-An-indirect-operand    Unprefixed  4  8 HI HI)
(dst32-An-indirect-operand    Unprefixed  4  8 HI HI)
(dst32-An-indirect-operand      Prefixed 12 16 HI HI)
(dst32-An-indirect-operand      Prefixed 12 16 HI HI)
(dst32-An-indirect-operand    Unprefixed  4  8 SI SI)
(dst32-An-indirect-operand    Unprefixed  4  8 SI SI)
(dst32-An-indirect-operand      Prefixed 12 16 SI SI)
(dst32-An-indirect-operand      Prefixed 12 16 SI SI)
(dst32-An-indirect-operand ExtUnprefixed  4  8 QI HI)
(dst32-An-indirect-operand ExtUnprefixed  4  8 QI HI)
(dst32-An-indirect-operand ExtUnprefixed  4  8 HI SI)
(dst32-An-indirect-operand ExtUnprefixed  4  8 HI SI)
;-------------------------------------------------------------
;-------------------------------------------------------------
; dsp:d[r] relative
; dsp:d[r] relative
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (dst16-relative-operand offset xmode)
(define-pmacro (dst16-relative-operand offset xmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst16- offset -8-SB-relative- xmode))
      (name (.sym dst16- offset -8-SB-relative- xmode))
      (comment (.str "m16c dsp:8[sb] relative destination " xmode))
      (comment (.str "m16c dsp:8[sb] relative destination " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (args ((.sym Dsp- offset -u8)))
      (args ((.sym Dsp- offset -u8)))
      (syntax (.str "${Dsp-" offset "-u8}[sb]"))
      (syntax (.str "${Dsp-" offset "-u8}[sb]"))
      (base-ifield f-12-4)
      (base-ifield f-12-4)
      (encoding (+ (f-12-4 #xA) (.sym Dsp- offset -u8)))
      (encoding (+ (f-12-4 #xA) (.sym Dsp- offset -u8)))
      (ifield-assertion (eq f-12-4 #xA))
      (ifield-assertion (eq f-12-4 #xA))
      (getter (mem16 xmode (add (.sym Dsp- offset -u8) (reg h-sb))))
      (getter (mem16 xmode (add (.sym Dsp- offset -u8) (reg h-sb))))
      (setter (set (mem16 xmode (add (.sym Dsp- offset -u8) (reg h-sb))) newval))
      (setter (set (mem16 xmode (add (.sym Dsp- offset -u8) (reg h-sb))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst16- offset -16-SB-relative- xmode))
      (name (.sym dst16- offset -16-SB-relative- xmode))
      (comment (.str "m16c dsp:16[sb] relative destination " xmode))
      (comment (.str "m16c dsp:16[sb] relative destination " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (args ((.sym Dsp- offset -u16)))
      (args ((.sym Dsp- offset -u16)))
      (syntax (.str "${Dsp-" offset "-u16}[sb]"))
      (syntax (.str "${Dsp-" offset "-u16}[sb]"))
      (base-ifield f-12-4)
      (base-ifield f-12-4)
      (encoding (+ (f-12-4 #xE) (.sym Dsp- offset -u16)))
      (encoding (+ (f-12-4 #xE) (.sym Dsp- offset -u16)))
      (ifield-assertion (eq f-12-4 #xE))
      (ifield-assertion (eq f-12-4 #xE))
      (getter (mem16 xmode (add (.sym Dsp- offset -u16) (reg h-sb))))
      (getter (mem16 xmode (add (.sym Dsp- offset -u16) (reg h-sb))))
      (setter (set (mem16 xmode (add (.sym Dsp- offset -u16) (reg h-sb))) newval))
      (setter (set (mem16 xmode (add (.sym Dsp- offset -u16) (reg h-sb))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst16- offset -8-FB-relative- xmode))
      (name (.sym dst16- offset -8-FB-relative- xmode))
      (comment (.str "m16c dsp:8[fb] relative destination " xmode))
      (comment (.str "m16c dsp:8[fb] relative destination " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (args ((.sym Dsp- offset -s8)))
      (args ((.sym Dsp- offset -s8)))
      (syntax (.str "${Dsp-" offset "-s8}[fb]"))
      (syntax (.str "${Dsp-" offset "-s8}[fb]"))
      (base-ifield f-12-4)
      (base-ifield f-12-4)
      (encoding (+ (f-12-4 #xB) (.sym Dsp- offset -s8)))
      (encoding (+ (f-12-4 #xB) (.sym Dsp- offset -s8)))
      (ifield-assertion (eq f-12-4 #xB))
      (ifield-assertion (eq f-12-4 #xB))
      (getter (mem16 xmode (add (.sym Dsp- offset -s8) (reg h-fb))))
      (getter (mem16 xmode (add (.sym Dsp- offset -s8) (reg h-fb))))
      (setter (set (mem16 xmode (add (.sym Dsp- offset -s8) (reg h-fb))) newval))
      (setter (set (mem16 xmode (add (.sym Dsp- offset -s8) (reg h-fb))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst16- offset -8-An-relative- xmode))
      (name (.sym dst16- offset -8-An-relative- xmode))
      (comment (.str "m16c dsp:8[An] relative destination " xmode))
      (comment (.str "m16c dsp:8[An] relative destination " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (args (Dst16An (.sym Dsp- offset -u8)))
      (args (Dst16An (.sym Dsp- offset -u8)))
      (syntax (.str "${Dsp-" offset "-u8}[$Dst16An]"))
      (syntax (.str "${Dsp-" offset "-u8}[$Dst16An]"))
      (base-ifield f-12-4)
      (base-ifield f-12-4)
      (encoding (+ (f-12-2 2) (f-14-1 0) (.sym Dsp- offset -u8) Dst16An))
      (encoding (+ (f-12-2 2) (f-14-1 0) (.sym Dsp- offset -u8) Dst16An))
      (ifield-assertion (andif (eq f-12-2 2) (eq f-14-1 0)))
      (ifield-assertion (andif (eq f-12-2 2) (eq f-14-1 0)))
      (getter (mem16 xmode (add (.sym Dsp- offset -u8) Dst16An)))
      (getter (mem16 xmode (add (.sym Dsp- offset -u8) Dst16An)))
      (setter (set (mem16 xmode (add (.sym Dsp- offset -u8) Dst16An)) newval))
      (setter (set (mem16 xmode (add (.sym Dsp- offset -u8) Dst16An)) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst16- offset -16-An-relative- xmode))
      (name (.sym dst16- offset -16-An-relative- xmode))
      (comment (.str "m16c dsp:16[An] relative destination " xmode))
      (comment (.str "m16c dsp:16[An] relative destination " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (args (Dst16An (.sym Dsp- offset -u16)))
      (args (Dst16An (.sym Dsp- offset -u16)))
      (syntax (.str "${Dsp-" offset "-u16}[$Dst16An]"))
      (syntax (.str "${Dsp-" offset "-u16}[$Dst16An]"))
      (base-ifield f-12-4)
      (base-ifield f-12-4)
      (encoding (+ (f-12-2 3) (f-14-1 0) (.sym Dsp- offset -u16) Dst16An))
      (encoding (+ (f-12-2 3) (f-14-1 0) (.sym Dsp- offset -u16) Dst16An))
      (ifield-assertion (andif (eq f-12-2 3) (eq f-14-1 0)))
      (ifield-assertion (andif (eq f-12-2 3) (eq f-14-1 0)))
      (getter (mem16 xmode (add (.sym Dsp- offset -u16) Dst16An)))
      (getter (mem16 xmode (add (.sym Dsp- offset -u16) Dst16An)))
      (setter (set (mem16 xmode (add (.sym Dsp- offset -u16) Dst16An)) newval))
      (setter (set (mem16 xmode (add (.sym Dsp- offset -u16) Dst16An)) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst16- offset -20-An-relative- xmode))
      (name (.sym dst16- offset -20-An-relative- xmode))
      (comment (.str "m16c dsp:20[An] relative destination " xmode))
      (comment (.str "m16c dsp:20[An] relative destination " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (args (Dst16An (.sym Dsp- offset -u20)))
      (args (Dst16An (.sym Dsp- offset -u20)))
      (syntax (.str "${Dsp-" offset "-u20}[$Dst16An]"))
      (syntax (.str "${Dsp-" offset "-u20}[$Dst16An]"))
      (base-ifield f-12-4)
      (base-ifield f-12-4)
      (encoding (+ (f-12-2 3) (f-14-1 0) (.sym Dsp- offset -u20) Dst16An))
      (encoding (+ (f-12-2 3) (f-14-1 0) (.sym Dsp- offset -u20) Dst16An))
      (ifield-assertion (andif (eq f-12-2 3) (eq f-14-1 0)))
      (ifield-assertion (andif (eq f-12-2 3) (eq f-14-1 0)))
      (getter (mem16 xmode (add (.sym Dsp- offset -u20) Dst16An)))
      (getter (mem16 xmode (add (.sym Dsp- offset -u20) Dst16An)))
      (setter (set (mem16 xmode (add (.sym Dsp- offset -u20) Dst16An)) newval))
      (setter (set (mem16 xmode (add (.sym Dsp- offset -u20) Dst16An)) newval))
    )
    )
  )
  )
)
)
(dst16-relative-operand 16 QI)
(dst16-relative-operand 16 QI)
(dst16-relative-operand 24 QI)
(dst16-relative-operand 24 QI)
(dst16-relative-operand 32 QI)
(dst16-relative-operand 32 QI)
(dst16-relative-operand 40 QI)
(dst16-relative-operand 40 QI)
(dst16-relative-operand 48 QI)
(dst16-relative-operand 48 QI)
(dst16-relative-operand 16 HI)
(dst16-relative-operand 16 HI)
(dst16-relative-operand 24 HI)
(dst16-relative-operand 24 HI)
(dst16-relative-operand 32 HI)
(dst16-relative-operand 32 HI)
(dst16-relative-operand 40 HI)
(dst16-relative-operand 40 HI)
(dst16-relative-operand 48 HI)
(dst16-relative-operand 48 HI)
(dst16-relative-operand 16 SI)
(dst16-relative-operand 16 SI)
(dst16-relative-operand 24 SI)
(dst16-relative-operand 24 SI)
(dst16-relative-operand 32 SI)
(dst16-relative-operand 32 SI)
(dst16-relative-operand 40 SI)
(dst16-relative-operand 40 SI)
(dst16-relative-operand 48 SI)
(dst16-relative-operand 48 SI)
(define-pmacro (dst16-relative-Ext-operand offset smode dmode)
(define-pmacro (dst16-relative-Ext-operand offset smode dmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst16- offset -8-SB-relative-Ext- smode))
      (name (.sym dst16- offset -8-SB-relative-Ext- smode))
      (comment (.str "m16c dsp:8[sb] relative destination " smode))
      (comment (.str "m16c dsp:8[sb] relative destination " smode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode dmode)
      (mode dmode)
      (args ((.sym Dsp- offset -u8)))
      (args ((.sym Dsp- offset -u8)))
      (syntax (.str "${Dsp-" offset "-u8}[sb]"))
      (syntax (.str "${Dsp-" offset "-u8}[sb]"))
      (base-ifield f-12-4)
      (base-ifield f-12-4)
      (encoding (+ (f-12-4 #xA) (.sym Dsp- offset -u8)))
      (encoding (+ (f-12-4 #xA) (.sym Dsp- offset -u8)))
      (ifield-assertion (eq f-12-4 #xA))
      (ifield-assertion (eq f-12-4 #xA))
      (getter (mem16 smode (add (.sym Dsp- offset -u8) (reg h-sb))))
      (getter (mem16 smode (add (.sym Dsp- offset -u8) (reg h-sb))))
      (setter (set (mem16 dmode (add (.sym Dsp- offset -u8) (reg h-sb))) newval))
      (setter (set (mem16 dmode (add (.sym Dsp- offset -u8) (reg h-sb))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst16- offset -16-SB-relative-Ext- smode))
      (name (.sym dst16- offset -16-SB-relative-Ext- smode))
      (comment (.str "m16c dsp:16[sb] relative destination " smode))
      (comment (.str "m16c dsp:16[sb] relative destination " smode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode dmode)
      (mode dmode)
      (args ((.sym Dsp- offset -u16)))
      (args ((.sym Dsp- offset -u16)))
      (syntax (.str "${Dsp-" offset "-u16}[sb]"))
      (syntax (.str "${Dsp-" offset "-u16}[sb]"))
      (base-ifield f-12-4)
      (base-ifield f-12-4)
      (encoding (+ (f-12-4 #xE) (.sym Dsp- offset -u16)))
      (encoding (+ (f-12-4 #xE) (.sym Dsp- offset -u16)))
      (ifield-assertion (eq f-12-4 #xE))
      (ifield-assertion (eq f-12-4 #xE))
      (getter (mem16 smode (add (.sym Dsp- offset -u16) (reg h-sb))))
      (getter (mem16 smode (add (.sym Dsp- offset -u16) (reg h-sb))))
      (setter (set (mem16 dmode (add (.sym Dsp- offset -u16) (reg h-sb))) newval))
      (setter (set (mem16 dmode (add (.sym Dsp- offset -u16) (reg h-sb))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst16- offset -8-FB-relative-Ext- smode))
      (name (.sym dst16- offset -8-FB-relative-Ext- smode))
      (comment (.str "m16c dsp:8[fb] relative destination " smode))
      (comment (.str "m16c dsp:8[fb] relative destination " smode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode dmode)
      (mode dmode)
      (args ((.sym Dsp- offset -s8)))
      (args ((.sym Dsp- offset -s8)))
      (syntax (.str "${Dsp-" offset "-s8}[fb]"))
      (syntax (.str "${Dsp-" offset "-s8}[fb]"))
      (base-ifield f-12-4)
      (base-ifield f-12-4)
      (encoding (+ (f-12-4 #xB) (.sym Dsp- offset -s8)))
      (encoding (+ (f-12-4 #xB) (.sym Dsp- offset -s8)))
      (ifield-assertion (eq f-12-4 #xB))
      (ifield-assertion (eq f-12-4 #xB))
      (getter (mem16 smode (add (.sym Dsp- offset -s8) (reg h-fb))))
      (getter (mem16 smode (add (.sym Dsp- offset -s8) (reg h-fb))))
      (setter (set (mem16 dmode (add (.sym Dsp- offset -s8) (reg h-fb))) newval))
      (setter (set (mem16 dmode (add (.sym Dsp- offset -s8) (reg h-fb))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst16- offset -8-An-relative-Ext- smode))
      (name (.sym dst16- offset -8-An-relative-Ext- smode))
      (comment (.str "m16c dsp:8[An] relative destination " smode))
      (comment (.str "m16c dsp:8[An] relative destination " smode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode dmode)
      (mode dmode)
      (args (Dst16An (.sym Dsp- offset -u8)))
      (args (Dst16An (.sym Dsp- offset -u8)))
      (syntax (.str "${Dsp-" offset "-u8}[$Dst16An]"))
      (syntax (.str "${Dsp-" offset "-u8}[$Dst16An]"))
      (base-ifield f-12-4)
      (base-ifield f-12-4)
      (encoding (+ (f-12-2 2) (f-14-1 0) (.sym Dsp- offset -u8) Dst16An))
      (encoding (+ (f-12-2 2) (f-14-1 0) (.sym Dsp- offset -u8) Dst16An))
      (ifield-assertion (andif (eq f-12-2 2) (eq f-14-1 0)))
      (ifield-assertion (andif (eq f-12-2 2) (eq f-14-1 0)))
      (getter (mem16 smode (add (.sym Dsp- offset -u8) Dst16An)))
      (getter (mem16 smode (add (.sym Dsp- offset -u8) Dst16An)))
      (setter (set (mem16 dmode (add (.sym Dsp- offset -u8) Dst16An)) newval))
      (setter (set (mem16 dmode (add (.sym Dsp- offset -u8) Dst16An)) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst16- offset -16-An-relative-Ext- smode))
      (name (.sym dst16- offset -16-An-relative-Ext- smode))
      (comment (.str "m16c dsp:16[An] relative destination " smode))
      (comment (.str "m16c dsp:16[An] relative destination " smode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode dmode)
      (mode dmode)
      (args (Dst16An (.sym Dsp- offset -u16)))
      (args (Dst16An (.sym Dsp- offset -u16)))
      (syntax (.str "${Dsp-" offset "-u16}[$Dst16An]"))
      (syntax (.str "${Dsp-" offset "-u16}[$Dst16An]"))
      (base-ifield f-12-4)
      (base-ifield f-12-4)
      (encoding (+ (f-12-2 3) (f-14-1 0) (.sym Dsp- offset -u16) Dst16An))
      (encoding (+ (f-12-2 3) (f-14-1 0) (.sym Dsp- offset -u16) Dst16An))
      (ifield-assertion (andif (eq f-12-2 3) (eq f-14-1 0)))
      (ifield-assertion (andif (eq f-12-2 3) (eq f-14-1 0)))
      (getter (mem16 smode (add (.sym Dsp- offset -u16) Dst16An)))
      (getter (mem16 smode (add (.sym Dsp- offset -u16) Dst16An)))
      (setter (set (mem16 dmode (add (.sym Dsp- offset -u16) Dst16An)) newval))
      (setter (set (mem16 dmode (add (.sym Dsp- offset -u16) Dst16An)) newval))
    )
    )
  )
  )
)
)
(dst16-relative-Ext-operand 16 QI HI)
(dst16-relative-Ext-operand 16 QI HI)
(define-pmacro (dst32-relative-operand offset group base1 base2 smode dmode)
(define-pmacro (dst32-relative-operand offset group base1 base2 smode dmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst32- offset -8-SB-relative- group - smode))
      (name (.sym dst32- offset -8-SB-relative- group - smode))
      (comment (.str "m32c dsp:8[sb] relative destination " smode))
      (comment (.str "m32c dsp:8[sb] relative destination " smode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode dmode)
      (mode dmode)
      (args ((.sym Dsp- offset -u8)))
      (args ((.sym Dsp- offset -u8)))
      (syntax (.str "${Dsp-" offset "-u8}[sb]"))
      (syntax (.str "${Dsp-" offset "-u8}[sb]"))
      (base-ifield (.sym f- base1 -6))
      (base-ifield (.sym f- base1 -6))
      (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u8)))
      (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u8)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 2)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 2)))
      (getter (c-call dmode (.str "operand_getter_" dmode) sb (.sym Dsp- offset -u8)))
      (getter (c-call dmode (.str "operand_getter_" dmode) sb (.sym Dsp- offset -u8)))
      (setter (c-call DFLT (.str "operand_setter_" dmode) newval sb (.sym Dsp- offset -u8)))
      (setter (c-call DFLT (.str "operand_setter_" dmode) newval sb (.sym Dsp- offset -u8)))
;       (getter (mem32 smode (add (.sym Dsp- offset -u8) (reg h-sb))))
;       (getter (mem32 smode (add (.sym Dsp- offset -u8) (reg h-sb))))
;       (setter (set (mem32 dmode (add (.sym Dsp- offset -u8) (reg h-sb))) newval))
;       (setter (set (mem32 dmode (add (.sym Dsp- offset -u8) (reg h-sb))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst32- offset -16-SB-relative- group - smode))
      (name (.sym dst32- offset -16-SB-relative- group - smode))
      (comment (.str "m32c dsp:16[sb] relative destination " smode))
      (comment (.str "m32c dsp:16[sb] relative destination " smode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode dmode)
      (mode dmode)
      (args ((.sym Dsp- offset -u16)))
      (args ((.sym Dsp- offset -u16)))
      (syntax (.str "${Dsp-" offset "-u16}[sb]"))
      (syntax (.str "${Dsp-" offset "-u16}[sb]"))
      (base-ifield (.sym f- base1 -6))
      (base-ifield (.sym f- base1 -6))
      (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u16)))
      (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u16)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 2)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 2)))
      (getter (c-call dmode (.str "operand_getter_" dmode) sb (.sym Dsp- offset -u16)))
      (getter (c-call dmode (.str "operand_getter_" dmode) sb (.sym Dsp- offset -u16)))
      (setter (c-call DFLT (.str "operand_setter_" dmode) newval sb (.sym Dsp- offset -u16)))
      (setter (c-call DFLT (.str "operand_setter_" dmode) newval sb (.sym Dsp- offset -u16)))
;       (getter (mem32 smode (add (.sym Dsp- offset -u16) (reg h-sb))))
;       (getter (mem32 smode (add (.sym Dsp- offset -u16) (reg h-sb))))
;       (setter (set (mem32 dmode (add (.sym Dsp- offset -u16) (reg h-sb))) newval))
;       (setter (set (mem32 dmode (add (.sym Dsp- offset -u16) (reg h-sb))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst32- offset -8-FB-relative- group - smode))
      (name (.sym dst32- offset -8-FB-relative- group - smode))
      (comment (.str "m32c dsp:8[fb] relative destination " smode))
      (comment (.str "m32c dsp:8[fb] relative destination " smode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode dmode)
      (mode dmode)
      (args ((.sym Dsp- offset -s8)))
      (args ((.sym Dsp- offset -s8)))
      (syntax (.str "${Dsp-" offset "-s8}[fb]"))
      (syntax (.str "${Dsp-" offset "-s8}[fb]"))
      (base-ifield (.sym f- base1 -6))
      (base-ifield (.sym f- base1 -6))
      (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 3) (.sym Dsp- offset -s8)))
      (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 3) (.sym Dsp- offset -s8)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 3)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 3)))
      (getter (c-call dmode (.str "operand_getter_" dmode) fb (.sym Dsp- offset -s8)))
      (getter (c-call dmode (.str "operand_getter_" dmode) fb (.sym Dsp- offset -s8)))
      (setter (c-call DFLT (.str "operand_setter_" dmode) newval fb (.sym Dsp- offset -s8)))
      (setter (c-call DFLT (.str "operand_setter_" dmode) newval fb (.sym Dsp- offset -s8)))
;       (getter (mem32 smode (add (.sym Dsp- offset -s8) (reg h-fb))))
;       (getter (mem32 smode (add (.sym Dsp- offset -s8) (reg h-fb))))
;       (setter (set (mem32 dmode (add (.sym Dsp- offset -s8) (reg h-fb))) newval))
;       (setter (set (mem32 dmode (add (.sym Dsp- offset -s8) (reg h-fb))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst32- offset -16-FB-relative- group - smode))
      (name (.sym dst32- offset -16-FB-relative- group - smode))
      (comment (.str "m32c dsp:16[fb] relative destination " smode))
      (comment (.str "m32c dsp:16[fb] relative destination " smode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode dmode)
      (mode dmode)
      (args ((.sym Dsp- offset -s16)))
      (args ((.sym Dsp- offset -s16)))
      (syntax (.str "${Dsp-" offset "-s16}[fb]"))
      (syntax (.str "${Dsp-" offset "-s16}[fb]"))
      (base-ifield (.sym f- base1 -6))
      (base-ifield (.sym f- base1 -6))
      (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 3) (.sym Dsp- offset -s16)))
      (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 3) (.sym Dsp- offset -s16)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 3)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 3)))
      (getter (c-call dmode (.str "operand_getter_" dmode) fb (.sym Dsp- offset -s16)))
      (getter (c-call dmode (.str "operand_getter_" dmode) fb (.sym Dsp- offset -s16)))
      (setter (c-call DFLT (.str "operand_setter_" dmode) newval fb (.sym Dsp- offset -s16)))
      (setter (c-call DFLT (.str "operand_setter_" dmode) newval fb (.sym Dsp- offset -s16)))
;       (getter (mem32 smode (add (.sym Dsp- offset -s16) (reg h-fb))))
;       (getter (mem32 smode (add (.sym Dsp- offset -s16) (reg h-fb))))
;       (setter (set (mem32 dmode (add (.sym Dsp- offset -s16) (reg h-fb))) newval))
;       (setter (set (mem32 dmode (add (.sym Dsp- offset -s16) (reg h-fb))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst32- offset -8-An-relative- group - smode))
      (name (.sym dst32- offset -8-An-relative- group - smode))
      (comment (.str "m32c dsp:8[An] relative destination " smode))
      (comment (.str "m32c dsp:8[An] relative destination " smode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode dmode)
      (mode dmode)
      (args ((.sym Dst32An group) (.sym Dsp- offset -u8)))
      (args ((.sym Dst32An group) (.sym Dsp- offset -u8)))
      (syntax (.str "${Dsp-" offset "-u8}[$Dst32An" group "]"))
      (syntax (.str "${Dsp-" offset "-u8}[$Dst32An" group "]"))
      (base-ifield (.sym f- base1 -6))
      (base-ifield (.sym f- base1 -6))
      (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u8) (.sym Dst32An group)))
      (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u8) (.sym Dst32An group)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -1) 0)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -1) 0)))
      (getter (c-call dmode (.str "operand_getter_" dmode) (.sym Dst32An group) (.sym Dsp- offset -u8)))
      (getter (c-call dmode (.str "operand_getter_" dmode) (.sym Dst32An group) (.sym Dsp- offset -u8)))
      (setter (c-call DFLT (.str "operand_setter_" dmode) newval (.sym Dst32An group) (.sym Dsp- offset -u8)))
      (setter (c-call DFLT (.str "operand_setter_" dmode) newval (.sym Dst32An group) (.sym Dsp- offset -u8)))
;       (getter (mem32 smode (add (.sym Dsp- offset -u8) (.sym Dst32An group))))
;       (getter (mem32 smode (add (.sym Dsp- offset -u8) (.sym Dst32An group))))
;       (setter (set (mem32 dmode (add (.sym Dsp- offset -u8) (.sym Dst32An group))) newval))
;       (setter (set (mem32 dmode (add (.sym Dsp- offset -u8) (.sym Dst32An group))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst32- offset -16-An-relative- group - smode))
      (name (.sym dst32- offset -16-An-relative- group - smode))
      (comment (.str "m32c dsp:16[An] relative destination " smode))
      (comment (.str "m32c dsp:16[An] relative destination " smode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode dmode)
      (mode dmode)
      (args ((.sym Dst32An group) (.sym Dsp- offset -u16)))
      (args ((.sym Dst32An group) (.sym Dsp- offset -u16)))
      (syntax (.str "${Dsp-" offset "-u16}[$Dst32An" group "]"))
      (syntax (.str "${Dsp-" offset "-u16}[$Dst32An" group "]"))
      (base-ifield (.sym f- base1 -6))
      (base-ifield (.sym f- base1 -6))
      (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u16) (.sym Dst32An group)))
      (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u16) (.sym Dst32An group)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -1) 0)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -1) 0)))
      (getter (c-call dmode (.str "operand_getter_" dmode) (.sym Dst32An group) (.sym Dsp- offset -u16)))
      (getter (c-call dmode (.str "operand_getter_" dmode) (.sym Dst32An group) (.sym Dsp- offset -u16)))
      (setter (c-call DFLT (.str "operand_setter_" dmode) newval (.sym Dst32An group) (.sym Dsp- offset -u16)))
      (setter (c-call DFLT (.str "operand_setter_" dmode) newval (.sym Dst32An group) (.sym Dsp- offset -u16)))
;       (getter (mem32 smode (add (.sym Dsp- offset -u16) (.sym Dst32An group))))
;       (getter (mem32 smode (add (.sym Dsp- offset -u16) (.sym Dst32An group))))
;       (setter (set (mem32 dmode (add (.sym Dsp- offset -u16) (.sym Dst32An group))) newval))
;       (setter (set (mem32 dmode (add (.sym Dsp- offset -u16) (.sym Dst32An group))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst32- offset -24-An-relative- group - smode))
      (name (.sym dst32- offset -24-An-relative- group - smode))
      (comment (.str "m32c dsp:16[An] relative destination " smode))
      (comment (.str "m32c dsp:16[An] relative destination " smode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode dmode)
      (mode dmode)
      (args ((.sym Dst32An group) (.sym Dsp- offset -u24)))
      (args ((.sym Dst32An group) (.sym Dsp- offset -u24)))
      (syntax (.str "${Dsp-" offset "-u24}[$Dst32An" group "]"))
      (syntax (.str "${Dsp-" offset "-u24}[$Dst32An" group "]"))
      (base-ifield (.sym f- base1 -6))
      (base-ifield (.sym f- base1 -6))
      (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u24) (.sym Dst32An group)))
      (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u24) (.sym Dst32An group)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -1) 0)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -1) 0)))
      (getter (c-call dmode (.str "operand_getter_" dmode) (.sym Dst32An group) (.sym Dsp- offset -u24)))
      (getter (c-call dmode (.str "operand_getter_" dmode) (.sym Dst32An group) (.sym Dsp- offset -u24)))
      (setter (c-call DFLT (.str "operand_setter_" dmode) newval (.sym Dst32An group) (.sym Dsp- offset -u24)))
      (setter (c-call DFLT (.str "operand_setter_" dmode) newval (.sym Dst32An group) (.sym Dsp- offset -u24)))
;       (getter (mem32 smode (add (.sym Dsp- offset -u24) (.sym Dst32An group))))
;       (getter (mem32 smode (add (.sym Dsp- offset -u24) (.sym Dst32An group))))
;       (setter (set (mem32 dmode (add (.sym Dsp- offset -u24) (.sym Dst32An group))) newval))
;       (setter (set (mem32 dmode (add (.sym Dsp- offset -u24) (.sym Dst32An group))) newval))
    )
    )
  )
  )
)
)
(dst32-relative-operand 16 Unprefixed 4 8 QI QI)
(dst32-relative-operand 16 Unprefixed 4 8 QI QI)
(dst32-relative-operand 24 Unprefixed 4 8 QI QI)
(dst32-relative-operand 24 Unprefixed 4 8 QI QI)
(dst32-relative-operand 32 Unprefixed 4 8 QI QI)
(dst32-relative-operand 32 Unprefixed 4 8 QI QI)
(dst32-relative-operand 40 Unprefixed 4 8 QI QI)
(dst32-relative-operand 40 Unprefixed 4 8 QI QI)
(dst32-relative-operand 16 Unprefixed 4 8 HI HI)
(dst32-relative-operand 16 Unprefixed 4 8 HI HI)
(dst32-relative-operand 24 Unprefixed 4 8 HI HI)
(dst32-relative-operand 24 Unprefixed 4 8 HI HI)
(dst32-relative-operand 32 Unprefixed 4 8 HI HI)
(dst32-relative-operand 32 Unprefixed 4 8 HI HI)
(dst32-relative-operand 40 Unprefixed 4 8 HI HI)
(dst32-relative-operand 40 Unprefixed 4 8 HI HI)
(dst32-relative-operand 16 Unprefixed 4 8 SI SI)
(dst32-relative-operand 16 Unprefixed 4 8 SI SI)
(dst32-relative-operand 24 Unprefixed 4 8 SI SI)
(dst32-relative-operand 24 Unprefixed 4 8 SI SI)
(dst32-relative-operand 32 Unprefixed 4 8 SI SI)
(dst32-relative-operand 32 Unprefixed 4 8 SI SI)
(dst32-relative-operand 40 Unprefixed 4 8 SI SI)
(dst32-relative-operand 40 Unprefixed 4 8 SI SI)
(dst32-relative-operand 24 Prefixed 12 16 QI QI)
(dst32-relative-operand 24 Prefixed 12 16 QI QI)
(dst32-relative-operand 32 Prefixed 12 16 QI QI)
(dst32-relative-operand 32 Prefixed 12 16 QI QI)
(dst32-relative-operand 40 Prefixed 12 16 QI QI)
(dst32-relative-operand 40 Prefixed 12 16 QI QI)
(dst32-relative-operand 48 Prefixed 12 16 QI QI)
(dst32-relative-operand 48 Prefixed 12 16 QI QI)
(dst32-relative-operand 24 Prefixed 12 16 HI HI)
(dst32-relative-operand 24 Prefixed 12 16 HI HI)
(dst32-relative-operand 32 Prefixed 12 16 HI HI)
(dst32-relative-operand 32 Prefixed 12 16 HI HI)
(dst32-relative-operand 40 Prefixed 12 16 HI HI)
(dst32-relative-operand 40 Prefixed 12 16 HI HI)
(dst32-relative-operand 48 Prefixed 12 16 HI HI)
(dst32-relative-operand 48 Prefixed 12 16 HI HI)
(dst32-relative-operand 24 Prefixed 12 16 SI SI)
(dst32-relative-operand 24 Prefixed 12 16 SI SI)
(dst32-relative-operand 32 Prefixed 12 16 SI SI)
(dst32-relative-operand 32 Prefixed 12 16 SI SI)
(dst32-relative-operand 40 Prefixed 12 16 SI SI)
(dst32-relative-operand 40 Prefixed 12 16 SI SI)
(dst32-relative-operand 48 Prefixed 12 16 SI SI)
(dst32-relative-operand 48 Prefixed 12 16 SI SI)
(dst32-relative-operand 16 ExtUnprefixed 4 8 QI HI)
(dst32-relative-operand 16 ExtUnprefixed 4 8 QI HI)
(dst32-relative-operand 16 ExtUnprefixed 4 8 HI SI)
(dst32-relative-operand 16 ExtUnprefixed 4 8 HI SI)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Absolute address
; Absolute address
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (dst16-absolute offset xmode)
(define-pmacro (dst16-absolute offset xmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst16- offset -16-absolute- xmode))
      (name (.sym dst16- offset -16-absolute- xmode))
      (comment (.str "m16c absolute address " xmode))
      (comment (.str "m16c absolute address " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (args ((.sym Dsp- offset -u16)))
      (args ((.sym Dsp- offset -u16)))
      (syntax (.str "${Dsp-" offset "-u16}"))
      (syntax (.str "${Dsp-" offset "-u16}"))
      (base-ifield f-12-4)
      (base-ifield f-12-4)
      (encoding (+ (f-12-4 #xF) (.sym Dsp- offset -u16)))
      (encoding (+ (f-12-4 #xF) (.sym Dsp- offset -u16)))
      (ifield-assertion (eq f-12-4 #xF))
      (ifield-assertion (eq f-12-4 #xF))
      (getter (mem16 xmode (.sym Dsp- offset -u16)))
      (getter (mem16 xmode (.sym Dsp- offset -u16)))
      (setter (set (mem16 xmode (.sym Dsp- offset -u16)) newval))
      (setter (set (mem16 xmode (.sym Dsp- offset -u16)) newval))
    )
    )
  )
  )
)
)
(dst16-absolute 16 QI)
(dst16-absolute 16 QI)
(dst16-absolute 24 QI)
(dst16-absolute 24 QI)
(dst16-absolute 32 QI)
(dst16-absolute 32 QI)
(dst16-absolute 40 QI)
(dst16-absolute 40 QI)
(dst16-absolute 48 QI)
(dst16-absolute 48 QI)
(dst16-absolute 16 HI)
(dst16-absolute 16 HI)
(dst16-absolute 24 HI)
(dst16-absolute 24 HI)
(dst16-absolute 32 HI)
(dst16-absolute 32 HI)
(dst16-absolute 40 HI)
(dst16-absolute 40 HI)
(dst16-absolute 48 HI)
(dst16-absolute 48 HI)
(dst16-absolute 16 SI)
(dst16-absolute 16 SI)
(dst16-absolute 24 SI)
(dst16-absolute 24 SI)
(dst16-absolute 32 SI)
(dst16-absolute 32 SI)
(dst16-absolute 40 SI)
(dst16-absolute 40 SI)
(dst16-absolute 48 SI)
(dst16-absolute 48 SI)
(define-derived-operand
(define-derived-operand
  (name dst16-16-16-absolute-Ext-QI)
  (name dst16-16-16-absolute-Ext-QI)
  (comment "m16c absolute address QI")
  (comment "m16c absolute address QI")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode HI)
  (mode HI)
  (args (Dsp-16-u16))
  (args (Dsp-16-u16))
  (syntax "${Dsp-16-u16}")
  (syntax "${Dsp-16-u16}")
  (base-ifield f-12-4)
  (base-ifield f-12-4)
  (encoding (+ (f-12-4 #xF) Dsp-16-u16))
  (encoding (+ (f-12-4 #xF) Dsp-16-u16))
  (ifield-assertion (eq f-12-4 #xF))
  (ifield-assertion (eq f-12-4 #xF))
  (getter (mem16 QI Dsp-16-u16))
  (getter (mem16 QI Dsp-16-u16))
  (setter (set (mem16 HI Dsp-16-u16) newval))
  (setter (set (mem16 HI Dsp-16-u16) newval))
)
)
(define-pmacro (dst32-absolute offset group base1 base2 smode dmode)
(define-pmacro (dst32-absolute offset group base1 base2 smode dmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst32- offset -16-absolute- group - smode))
      (name (.sym dst32- offset -16-absolute- group - smode))
      (comment (.str "m32c absolute address " smode))
      (comment (.str "m32c absolute address " smode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode dmode)
      (mode dmode)
      (args ((.sym Dsp- offset -u16)))
      (args ((.sym Dsp- offset -u16)))
      (syntax (.str "${Dsp-" offset "-u16}"))
      (syntax (.str "${Dsp-" offset "-u16}"))
      (base-ifield (.sym f- base1 -6))
      (base-ifield (.sym f- base1 -6))
      (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 3) (.sym Dsp- offset -u16)))
      (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 3) (.sym Dsp- offset -u16)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 3)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 3)))
      (getter (c-call smode (.str "operand_getter_" smode) (const 0) (.sym Dsp- offset -u16)))
      (getter (c-call smode (.str "operand_getter_" smode) (const 0) (.sym Dsp- offset -u16)))
      (setter (c-call DFLT (.str "operand_setter_" dmode) newval (const 0) (.sym Dsp- offset -u16)))
      (setter (c-call DFLT (.str "operand_setter_" dmode) newval (const 0) (.sym Dsp- offset -u16)))
;      (getter (mem32 smode (.sym Dsp- offset -u16)))
;      (getter (mem32 smode (.sym Dsp- offset -u16)))
;      (setter (set (mem32 dmode (.sym Dsp- offset -u16)) newval))
;      (setter (set (mem32 dmode (.sym Dsp- offset -u16)) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst32- offset -24-absolute- group - smode))
      (name (.sym dst32- offset -24-absolute- group - smode))
      (comment (.str "m32c absolute address " smode))
      (comment (.str "m32c absolute address " smode))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode dmode)
      (mode dmode)
      (args ((.sym Dsp- offset -u24)))
      (args ((.sym Dsp- offset -u24)))
      (syntax (.str "${Dsp-" offset "-u24}"))
      (syntax (.str "${Dsp-" offset "-u24}"))
      (base-ifield (.sym f- base1 -6))
      (base-ifield (.sym f- base1 -6))
      (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u24)))
      (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u24)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 2)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 2)))
      (getter (c-call smode (.str "operand_getter_" smode) (const 0) (.sym Dsp- offset -u24)))
      (getter (c-call smode (.str "operand_getter_" smode) (const 0) (.sym Dsp- offset -u24)))
      (setter (c-call DFLT (.str "operand_setter_" dmode) newval (const 0) (.sym Dsp- offset -u24)))
      (setter (c-call DFLT (.str "operand_setter_" dmode) newval (const 0) (.sym Dsp- offset -u24)))
;      (getter (mem32 smode (.sym Dsp- offset -u24)))
;      (getter (mem32 smode (.sym Dsp- offset -u24)))
;      (setter (set (mem32 dmode (.sym Dsp- offset -u24)) newval))
;      (setter (set (mem32 dmode (.sym Dsp- offset -u24)) newval))
    )
    )
  )
  )
)
)
(dst32-absolute 16 Unprefixed 4 8 QI QI)
(dst32-absolute 16 Unprefixed 4 8 QI QI)
(dst32-absolute 24 Unprefixed 4 8 QI QI)
(dst32-absolute 24 Unprefixed 4 8 QI QI)
(dst32-absolute 32 Unprefixed 4 8 QI QI)
(dst32-absolute 32 Unprefixed 4 8 QI QI)
(dst32-absolute 40 Unprefixed 4 8 QI QI)
(dst32-absolute 40 Unprefixed 4 8 QI QI)
(dst32-absolute 16 Unprefixed 4 8 HI HI)
(dst32-absolute 16 Unprefixed 4 8 HI HI)
(dst32-absolute 24 Unprefixed 4 8 HI HI)
(dst32-absolute 24 Unprefixed 4 8 HI HI)
(dst32-absolute 32 Unprefixed 4 8 HI HI)
(dst32-absolute 32 Unprefixed 4 8 HI HI)
(dst32-absolute 40 Unprefixed 4 8 HI HI)
(dst32-absolute 40 Unprefixed 4 8 HI HI)
(dst32-absolute 16 Unprefixed 4 8 SI SI)
(dst32-absolute 16 Unprefixed 4 8 SI SI)
(dst32-absolute 24 Unprefixed 4 8 SI SI)
(dst32-absolute 24 Unprefixed 4 8 SI SI)
(dst32-absolute 32 Unprefixed 4 8 SI SI)
(dst32-absolute 32 Unprefixed 4 8 SI SI)
(dst32-absolute 40 Unprefixed 4 8 SI SI)
(dst32-absolute 40 Unprefixed 4 8 SI SI)
(dst32-absolute 24 Prefixed 12 16 QI QI)
(dst32-absolute 24 Prefixed 12 16 QI QI)
(dst32-absolute 32 Prefixed 12 16 QI QI)
(dst32-absolute 32 Prefixed 12 16 QI QI)
(dst32-absolute 40 Prefixed 12 16 QI QI)
(dst32-absolute 40 Prefixed 12 16 QI QI)
(dst32-absolute 48 Prefixed 12 16 QI QI)
(dst32-absolute 48 Prefixed 12 16 QI QI)
(dst32-absolute 24 Prefixed 12 16 HI HI)
(dst32-absolute 24 Prefixed 12 16 HI HI)
(dst32-absolute 32 Prefixed 12 16 HI HI)
(dst32-absolute 32 Prefixed 12 16 HI HI)
(dst32-absolute 40 Prefixed 12 16 HI HI)
(dst32-absolute 40 Prefixed 12 16 HI HI)
(dst32-absolute 48 Prefixed 12 16 HI HI)
(dst32-absolute 48 Prefixed 12 16 HI HI)
(dst32-absolute 24 Prefixed 12 16 SI SI)
(dst32-absolute 24 Prefixed 12 16 SI SI)
(dst32-absolute 32 Prefixed 12 16 SI SI)
(dst32-absolute 32 Prefixed 12 16 SI SI)
(dst32-absolute 40 Prefixed 12 16 SI SI)
(dst32-absolute 40 Prefixed 12 16 SI SI)
(dst32-absolute 48 Prefixed 12 16 SI SI)
(dst32-absolute 48 Prefixed 12 16 SI SI)
(dst32-absolute 16 ExtUnprefixed 4 8 QI HI)
(dst32-absolute 16 ExtUnprefixed 4 8 QI HI)
(dst32-absolute 16 ExtUnprefixed 4 8 HI SI)
(dst32-absolute 16 ExtUnprefixed 4 8 HI SI)
;-------------------------------------------------------------
;-------------------------------------------------------------
; An indirect indirect
; An indirect indirect
;-------------------------------------------------------------
;-------------------------------------------------------------
;(define-pmacro (dst-An-indirect-indirect-operand xmode)
;(define-pmacro (dst-An-indirect-indirect-operand xmode)
;   (define-derived-operand
;   (define-derived-operand
;     (name (.sym dst32-An-indirect-indirect- xmode))
;     (name (.sym dst32-An-indirect-indirect- xmode))
;     (comment (.str "m32c An indirect indirect destination " xmode))
;     (comment (.str "m32c An indirect indirect destination " xmode))
;     (attrs (machine 32))
;     (attrs (machine 32))
;     (mode xmode)
;     (mode xmode)
;     (args (Dst32AnPrefixed))
;     (args (Dst32AnPrefixed))
;     (syntax (.str "[[$Dst32AnPrefixed]]"))
;     (syntax (.str "[[$Dst32AnPrefixed]]"))
;     (base-ifield f-12-6)
;     (base-ifield f-12-6)
;     (encoding (+ (f-12-3 0) (f-16-1 0) Dst32AnPrefixed))
;     (encoding (+ (f-12-3 0) (f-16-1 0) Dst32AnPrefixed))
;     (ifield-assertion (andif (eq f-12-3 0) (eq f-16-1 0)))
;     (ifield-assertion (andif (eq f-12-3 0) (eq f-16-1 0)))
;     (getter (mem32 xmode (indirect-addr Dst32AnPrefixed)))
;     (getter (mem32 xmode (indirect-addr Dst32AnPrefixed)))
;     (setter (set (mem32 xmode (indirect-addr Dst32AnPrefixed)) newval))
;     (setter (set (mem32 xmode (indirect-addr Dst32AnPrefixed)) newval))
;   )
;   )
;)
;)
; (dst-An-indirect-indirect-operand QI)
; (dst-An-indirect-indirect-operand QI)
; (dst-An-indirect-indirect-operand HI)
; (dst-An-indirect-indirect-operand HI)
; (dst-An-indirect-indirect-operand SI)
; (dst-An-indirect-indirect-operand SI)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Relative indirect
; Relative indirect
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (dst-relative-indirect-operand offset xmode)
(define-pmacro (dst-relative-indirect-operand offset xmode)
  (begin
  (begin
;     (define-derived-operand
;     (define-derived-operand
;       (name (.sym dst32- offset -8-SB-relative-indirect- xmode))
;       (name (.sym dst32- offset -8-SB-relative-indirect- xmode))
;       (comment (.str "m32c dsp:8[sb] relative destination " xmode))
;       (comment (.str "m32c dsp:8[sb] relative destination " xmode))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (args ((.sym Dsp- offset -u8)))
;       (args ((.sym Dsp- offset -u8)))
;       (syntax (.str "[${Dsp-" offset "-u8}[sb]]"))
;       (syntax (.str "[${Dsp-" offset "-u8}[sb]]"))
;       (base-ifield f-12-6)
;       (base-ifield f-12-6)
;       (encoding (+ (f-12-3 1) (f-16-2 2) (.sym Dsp- offset -u8)))
;       (encoding (+ (f-12-3 1) (f-16-2 2) (.sym Dsp- offset -u8)))
;       (ifield-assertion (andif (eq f-12-3 1) (eq f-16-2 2)))
;       (ifield-assertion (andif (eq f-12-3 1) (eq f-16-2 2)))
;       (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u8) (reg h-sb)))))
;       (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u8) (reg h-sb)))))
;       (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u8) (reg h-sb)))) newval))
;       (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u8) (reg h-sb)))) newval))
;     )
;     )
;     (define-derived-operand
;     (define-derived-operand
;       (name (.sym dst32- offset -16-SB-relative-indirect- xmode))
;       (name (.sym dst32- offset -16-SB-relative-indirect- xmode))
;       (comment (.str "m32c dsp:16[sb] relative destination " xmode))
;       (comment (.str "m32c dsp:16[sb] relative destination " xmode))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (args ((.sym Dsp- offset -u16)))
;       (args ((.sym Dsp- offset -u16)))
;       (syntax (.str "[${Dsp-" offset "-u16}[sb]]"))
;       (syntax (.str "[${Dsp-" offset "-u16}[sb]]"))
;       (base-ifield f-12-6)
;       (base-ifield f-12-6)
;       (encoding (+ (f-12-3 2) (f-16-2 2) (.sym Dsp- offset -u16)))
;       (encoding (+ (f-12-3 2) (f-16-2 2) (.sym Dsp- offset -u16)))
;       (ifield-assertion (andif (eq f-12-3 2) (eq f-16-2 2)))
;       (ifield-assertion (andif (eq f-12-3 2) (eq f-16-2 2)))
;       (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u16) (reg h-sb)))))
;       (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u16) (reg h-sb)))))
;       (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u16) (reg h-sb)))) newval))
;       (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u16) (reg h-sb)))) newval))
;     )
;     )
;     (define-derived-operand
;     (define-derived-operand
;       (name (.sym dst32- offset -8-FB-relative-indirect- xmode))
;       (name (.sym dst32- offset -8-FB-relative-indirect- xmode))
;       (comment (.str "m32c dsp:8[fb] relative destination " xmode))
;       (comment (.str "m32c dsp:8[fb] relative destination " xmode))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (args ((.sym Dsp- offset -s8)))
;       (args ((.sym Dsp- offset -s8)))
;       (syntax (.str "[${Dsp-" offset "-s8}[fb]]"))
;       (syntax (.str "[${Dsp-" offset "-s8}[fb]]"))
;       (base-ifield f-12-6)
;       (base-ifield f-12-6)
;       (encoding (+ (f-12-3 1) (f-16-2 3) (.sym Dsp- offset -s8)))
;       (encoding (+ (f-12-3 1) (f-16-2 3) (.sym Dsp- offset -s8)))
;       (ifield-assertion (andif (eq f-12-3 1) (eq f-16-2 3)))
;       (ifield-assertion (andif (eq f-12-3 1) (eq f-16-2 3)))
;       (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -s8) (reg h-fb)))))
;       (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -s8) (reg h-fb)))))
;       (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -s8) (reg h-fb)))) newval))
;       (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -s8) (reg h-fb)))) newval))
;     )
;     )
;     (define-derived-operand
;     (define-derived-operand
;       (name (.sym dst32- offset -16-FB-relative-indirect- xmode))
;       (name (.sym dst32- offset -16-FB-relative-indirect- xmode))
;       (comment (.str "m32c dsp:16[fb] relative destination " xmode))
;       (comment (.str "m32c dsp:16[fb] relative destination " xmode))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (args ((.sym Dsp- offset -s16)))
;       (args ((.sym Dsp- offset -s16)))
;       (syntax (.str "[${Dsp-" offset "-s16}[fb]]"))
;       (syntax (.str "[${Dsp-" offset "-s16}[fb]]"))
;       (base-ifield f-12-6)
;       (base-ifield f-12-6)
;       (encoding (+ (f-12-3 2) (f-16-2 3) (.sym Dsp- offset -s16)))
;       (encoding (+ (f-12-3 2) (f-16-2 3) (.sym Dsp- offset -s16)))
;       (ifield-assertion (andif (eq f-12-3 2) (eq f-16-2 3)))
;       (ifield-assertion (andif (eq f-12-3 2) (eq f-16-2 3)))
;       (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -s16) (reg h-fb)))))
;       (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -s16) (reg h-fb)))))
;       (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -s16) (reg h-fb)))) newval))
;       (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -s16) (reg h-fb)))) newval))
;     )
;     )
;     (define-derived-operand
;     (define-derived-operand
;       (name (.sym dst32- offset -8-An-relative-indirect- xmode))
;       (name (.sym dst32- offset -8-An-relative-indirect- xmode))
;       (comment (.str "m32c dsp:8[An] relative indirect destination " xmode))
;       (comment (.str "m32c dsp:8[An] relative indirect destination " xmode))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (args (Dst32AnPrefixed (.sym Dsp- offset -u8)))
;       (args (Dst32AnPrefixed (.sym Dsp- offset -u8)))
;       (syntax (.str "[${Dsp-" offset "-u8}[$Dst32AnPrefixed]]"))
;       (syntax (.str "[${Dsp-" offset "-u8}[$Dst32AnPrefixed]]"))
;       (base-ifield f-12-6)
;       (base-ifield f-12-6)
;       (encoding (+ (f-12-3 1) (f-16-1 0) (.sym Dsp- offset -u8) Dst32AnPrefixed))
;       (encoding (+ (f-12-3 1) (f-16-1 0) (.sym Dsp- offset -u8) Dst32AnPrefixed))
;       (ifield-assertion (andif (eq f-12-3 1) (eq f-16-1 0)))
;       (ifield-assertion (andif (eq f-12-3 1) (eq f-16-1 0)))
;       (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u8) Dst32AnPrefixed))))
;       (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u8) Dst32AnPrefixed))))
;       (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u8) Dst32AnPrefixed))) newval))
;       (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u8) Dst32AnPrefixed))) newval))
;     )
;     )
;     (define-derived-operand
;     (define-derived-operand
;       (name (.sym dst32- offset -16-An-relative-indirect- xmode))
;       (name (.sym dst32- offset -16-An-relative-indirect- xmode))
;       (comment (.str "m32c dsp:16[An] relative destination " xmode))
;       (comment (.str "m32c dsp:16[An] relative destination " xmode))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (args (Dst32AnPrefixed (.sym Dsp- offset -u16)))
;       (args (Dst32AnPrefixed (.sym Dsp- offset -u16)))
;       (syntax (.str "[${Dsp-" offset "-u16}[$Dst32AnPrefixed]]"))
;       (syntax (.str "[${Dsp-" offset "-u16}[$Dst32AnPrefixed]]"))
;       (base-ifield f-12-6)
;       (base-ifield f-12-6)
;       (encoding (+ (f-12-3 2) (f-16-1 0) (.sym Dsp- offset -u16) Dst32AnPrefixed))
;       (encoding (+ (f-12-3 2) (f-16-1 0) (.sym Dsp- offset -u16) Dst32AnPrefixed))
;       (ifield-assertion (andif (eq f-12-3 2) (eq f-16-1 0)))
;       (ifield-assertion (andif (eq f-12-3 2) (eq f-16-1 0)))
;       (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u16) Dst32AnPrefixed))))
;       (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u16) Dst32AnPrefixed))))
;       (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u16) Dst32AnPrefixed))) newval))
;       (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u16) Dst32AnPrefixed))) newval))
;     )
;     )
;     (define-derived-operand
;     (define-derived-operand
;       (name (.sym dst32- offset -24-An-relative-indirect- xmode))
;       (name (.sym dst32- offset -24-An-relative-indirect- xmode))
;       (comment (.str "m32c dsp:24[An] relative destination " xmode))
;       (comment (.str "m32c dsp:24[An] relative destination " xmode))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (args (Dst32AnPrefixed (.sym Dsp- offset -u24)))
;       (args (Dst32AnPrefixed (.sym Dsp- offset -u24)))
;       (syntax (.str "[${Dsp-" offset "-u24}[$Dst32AnPrefixed]]"))
;       (syntax (.str "[${Dsp-" offset "-u24}[$Dst32AnPrefixed]]"))
;       (base-ifield f-12-6)
;       (base-ifield f-12-6)
;       (encoding (+ (f-12-3 3) (f-16-1 0) (.sym Dsp- offset -u24) Dst32AnPrefixed))
;       (encoding (+ (f-12-3 3) (f-16-1 0) (.sym Dsp- offset -u24) Dst32AnPrefixed))
;       (ifield-assertion (andif (eq f-12-3 3) (eq f-16-1 0)))
;       (ifield-assertion (andif (eq f-12-3 3) (eq f-16-1 0)))
;       (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u24) Dst32AnPrefixed))))
;       (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u24) Dst32AnPrefixed))))
;       (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u24) Dst32AnPrefixed))) newval))
;       (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u24) Dst32AnPrefixed))) newval))
;     )
;     )
  )
  )
)
)
; (dst-relative-indirect-operand 24 QI)
; (dst-relative-indirect-operand 24 QI)
; (dst-relative-indirect-operand 32 QI)
; (dst-relative-indirect-operand 32 QI)
; (dst-relative-indirect-operand 40 QI)
; (dst-relative-indirect-operand 40 QI)
; (dst-relative-indirect-operand 48 QI)
; (dst-relative-indirect-operand 48 QI)
; (dst-relative-indirect-operand 24 HI)
; (dst-relative-indirect-operand 24 HI)
; (dst-relative-indirect-operand 32 HI)
; (dst-relative-indirect-operand 32 HI)
; (dst-relative-indirect-operand 40 HI)
; (dst-relative-indirect-operand 40 HI)
; (dst-relative-indirect-operand 48 HI)
; (dst-relative-indirect-operand 48 HI)
; (dst-relative-indirect-operand 24 SI)
; (dst-relative-indirect-operand 24 SI)
; (dst-relative-indirect-operand 32 SI)
; (dst-relative-indirect-operand 32 SI)
; (dst-relative-indirect-operand 40 SI)
; (dst-relative-indirect-operand 40 SI)
; (dst-relative-indirect-operand 48 SI)
; (dst-relative-indirect-operand 48 SI)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Absolute indirect
; Absolute indirect
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (dst-absolute-indirect offset xmode)
(define-pmacro (dst-absolute-indirect offset xmode)
  (begin
  (begin
;     (define-derived-operand
;     (define-derived-operand
;       (name (.sym dst32- offset -16-absolute-indirect-derived- xmode))
;       (name (.sym dst32- offset -16-absolute-indirect-derived- xmode))
;       (comment (.str "m32c absolute indirect address " xmode))
;       (comment (.str "m32c absolute indirect address " xmode))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (args ((.sym Dsp- offset -u16)))
;       (args ((.sym Dsp- offset -u16)))
;       (syntax (.str "[${Dsp-" offset "-u16}]"))
;       (syntax (.str "[${Dsp-" offset "-u16}]"))
;       (base-ifield f-12-6)
;       (base-ifield f-12-6)
;       (encoding (+ (f-12-3 3) (f-16-2 3) (.sym Dsp- offset -u16)))
;       (encoding (+ (f-12-3 3) (f-16-2 3) (.sym Dsp- offset -u16)))
;       (ifield-assertion (andif (eq f-12-3 3) (eq f-16-2 3)))
;       (ifield-assertion (andif (eq f-12-3 3) (eq f-16-2 3)))
;       (getter (mem32 xmode (indirect-addr (.sym Dsp- offset -u16))))
;       (getter (mem32 xmode (indirect-addr (.sym Dsp- offset -u16))))
;       (setter (set (mem32 xmode (indirect-addr (.sym Dsp- offset -u16))) newval))
;       (setter (set (mem32 xmode (indirect-addr (.sym Dsp- offset -u16))) newval))
;     )
;     )
;     (define-derived-operand
;     (define-derived-operand
;       (name (.sym dst32- offset -24-absolute-indirect-derived- xmode))
;       (name (.sym dst32- offset -24-absolute-indirect-derived- xmode))
;       (comment (.str "m32c absolute indirect address " xmode))
;       (comment (.str "m32c absolute indirect address " xmode))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (args ((.sym Dsp- offset -u24)))
;       (args ((.sym Dsp- offset -u24)))
;       (syntax (.str "[${Dsp-" offset "-u24}]"))
;       (syntax (.str "[${Dsp-" offset "-u24}]"))
;       (base-ifield f-12-6)
;       (base-ifield f-12-6)
;       (encoding (+ (f-12-3 3) (f-16-2 2) (.sym Dsp- offset -u24)))
;       (encoding (+ (f-12-3 3) (f-16-2 2) (.sym Dsp- offset -u24)))
;       (ifield-assertion (andif (eq f-12-3 3) (eq f-16-2 2)))
;       (ifield-assertion (andif (eq f-12-3 3) (eq f-16-2 2)))
;       (getter (mem32 xmode (indirect-addr (.sym Dsp- offset -u24))))
;       (getter (mem32 xmode (indirect-addr (.sym Dsp- offset -u24))))
;       (setter (set (mem32 xmode (indirect-addr (.sym Dsp- offset -u24))) newval))
;       (setter (set (mem32 xmode (indirect-addr (.sym Dsp- offset -u24))) newval))
;     )
;     )
  )
  )
)
)
(dst-absolute-indirect 24 QI)
(dst-absolute-indirect 24 QI)
(dst-absolute-indirect 32 QI)
(dst-absolute-indirect 32 QI)
(dst-absolute-indirect 40 QI)
(dst-absolute-indirect 40 QI)
(dst-absolute-indirect 48 QI)
(dst-absolute-indirect 48 QI)
(dst-absolute-indirect 24 HI)
(dst-absolute-indirect 24 HI)
(dst-absolute-indirect 32 HI)
(dst-absolute-indirect 32 HI)
(dst-absolute-indirect 40 HI)
(dst-absolute-indirect 40 HI)
(dst-absolute-indirect 48 HI)
(dst-absolute-indirect 48 HI)
(dst-absolute-indirect 24 SI)
(dst-absolute-indirect 24 SI)
(dst-absolute-indirect 32 SI)
(dst-absolute-indirect 32 SI)
(dst-absolute-indirect 40 SI)
(dst-absolute-indirect 40 SI)
(dst-absolute-indirect 48 SI)
(dst-absolute-indirect 48 SI)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Bit operands
; Bit operands
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (get-register-bit reg bitno)
(define-pmacro (get-register-bit reg bitno)
  (and (srl reg bitno) 1)
  (and (srl reg bitno) 1)
)
)
(define-pmacro (set-register-bit reg bitno value)
(define-pmacro (set-register-bit reg bitno value)
  (set reg (or (and reg (inv (sll 1 bitno)))
  (set reg (or (and reg (inv (sll 1 bitno)))
               (sll (and QI value 1) bitno)))
               (sll (and QI value 1) bitno)))
)
)
(define-pmacro (get-memory-bit mach base bitno)
(define-pmacro (get-memory-bit mach base bitno)
  (and (srl (mem-mach mach QI (add base (div bitno 8)))
  (and (srl (mem-mach mach QI (add base (div bitno 8)))
            (mod bitno 8))
            (mod bitno 8))
       1)
       1)
)
)
(define-pmacro (set-memory-bit mach base bitno value)
(define-pmacro (set-memory-bit mach base bitno value)
  (sequence ((USI addr))
  (sequence ((USI addr))
            (set addr (add base (div bitno 8)))
            (set addr (add base (div bitno 8)))
            (set (mem-mach mach QI addr)
            (set (mem-mach mach QI addr)
                 (or (and (mem-mach mach QI addr)
                 (or (and (mem-mach mach QI addr)
                          (inv (sll 1 (mod bitno 8))))
                          (inv (sll 1 (mod bitno 8))))
                     (sll (and QI value 1) (mod bitno 8)))))
                     (sll (and QI value 1) (mod bitno 8)))))
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Rn direct
; Rn direct
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-derived-operand
(define-derived-operand
  (name bit16-Rn-direct)
  (name bit16-Rn-direct)
  (comment "m16c Rn direct bit")
  (comment "m16c Rn direct bit")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode BI)
  (mode BI)
  (args (Bitno16R Bit16Rn))
  (args (Bitno16R Bit16Rn))
  (syntax "$Bitno16R,$Bit16Rn")
  (syntax "$Bitno16R,$Bit16Rn")
  (base-ifield f-12-4)
  (base-ifield f-12-4)
  (encoding (+ (f-12-2 0) Bit16Rn Bitno16R))
  (encoding (+ (f-12-2 0) Bit16Rn Bitno16R))
  (ifield-assertion (eq f-12-2 0))
  (ifield-assertion (eq f-12-2 0))
  (getter (get-register-bit Bit16Rn Bitno16R))
  (getter (get-register-bit Bit16Rn Bitno16R))
  (setter (set-register-bit Bit16Rn Bitno16R newval))
  (setter (set-register-bit Bit16Rn Bitno16R newval))
)
)
(define-pmacro (bit32-Rn-direct-operand group base)
(define-pmacro (bit32-Rn-direct-operand group base)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym bit32-Rn-direct- group))
      (name (.sym bit32-Rn-direct- group))
      (comment "m32c Rn direct bit")
      (comment "m32c Rn direct bit")
      (attrs (machine 32))
      (attrs (machine 32))
      (mode BI)
      (mode BI)
      (args ((.sym Bitno32 group) (.sym Bit32Rn group)))
      (args ((.sym Bitno32 group) (.sym Bit32Rn group)))
      (syntax (.str "$Bitno32" group ",$Bit32Rn" group))
      (syntax (.str "$Bitno32" group ",$Bit32Rn" group))
      (base-ifield (.sym f- base -6))
      (base-ifield (.sym f- base -6))
      (encoding (+ ((.sym f- base -3) 4) (.sym Bit32Rn group) (.sym Bitno32 group)))
      (encoding (+ ((.sym f- base -3) 4) (.sym Bit32Rn group) (.sym Bitno32 group)))
      (ifield-assertion (eq (.sym f- base -3) 4))
      (ifield-assertion (eq (.sym f- base -3) 4))
      (getter (get-register-bit (.sym Bit32Rn group) (.sym Bitno32 group)))
      (getter (get-register-bit (.sym Bit32Rn group) (.sym Bitno32 group)))
      (setter (set-register-bit (.sym Bit32Rn group) (.sym Bitno32 group) newval))
      (setter (set-register-bit (.sym Bit32Rn group) (.sym Bitno32 group) newval))
    )
    )
  )
  )
)
)
(bit32-Rn-direct-operand Unprefixed  4)
(bit32-Rn-direct-operand Unprefixed  4)
(bit32-Rn-direct-operand   Prefixed 12)
(bit32-Rn-direct-operand   Prefixed 12)
;-------------------------------------------------------------
;-------------------------------------------------------------
; An direct
; An direct
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-derived-operand
(define-derived-operand
  (name bit16-An-direct)
  (name bit16-An-direct)
  (comment "m16c An direct bit")
  (comment "m16c An direct bit")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode BI)
  (mode BI)
  (args (Bitno16R Bit16An))
  (args (Bitno16R Bit16An))
  (syntax "$Bitno16R,$Bit16An")
  (syntax "$Bitno16R,$Bit16An")
  (base-ifield f-12-4)
  (base-ifield f-12-4)
  (encoding (+ (f-12-2 1) (f-14-1 0) Bit16An Bitno16R))
  (encoding (+ (f-12-2 1) (f-14-1 0) Bit16An Bitno16R))
  (ifield-assertion (andif (eq f-12-2 1) (eq f-14-1 0)))
  (ifield-assertion (andif (eq f-12-2 1) (eq f-14-1 0)))
  (getter (get-register-bit Bit16An Bitno16R))
  (getter (get-register-bit Bit16An Bitno16R))
  (setter (set-register-bit Bit16An Bitno16R newval))
  (setter (set-register-bit Bit16An Bitno16R newval))
)
)
(define-pmacro (bit32-An-direct-operand group base1 base2)
(define-pmacro (bit32-An-direct-operand group base1 base2)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym bit32-An-direct- group))
      (name (.sym bit32-An-direct- group))
      (comment "m32c An direct bit")
      (comment "m32c An direct bit")
      (attrs (machine 32))
      (attrs (machine 32))
      (mode BI)
      (mode BI)
      (args ((.sym Bitno32 group) (.sym Bit32An group)))
      (args ((.sym Bitno32 group) (.sym Bit32An group)))
      (syntax (.str "$Bitno32" group ",$Bit32An" group))
      (syntax (.str "$Bitno32" group ",$Bit32An" group))
      (base-ifield (.sym f- base1 -6))
      (base-ifield (.sym f- base1 -6))
      (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 1) (.sym Bit32An group) (.sym Bitno32 group)))
      (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 1) (.sym Bit32An group) (.sym Bitno32 group)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 1)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 1)))
      (getter (get-register-bit (.sym Bit32An group) (.sym Bitno32 group)))
      (getter (get-register-bit (.sym Bit32An group) (.sym Bitno32 group)))
      (setter (set-register-bit (.sym Bit32An group) (.sym Bitno32 group) newval))
      (setter (set-register-bit (.sym Bit32An group) (.sym Bitno32 group) newval))
    )
    )
  )
  )
)
)
(bit32-An-direct-operand Unprefixed  4  8)
(bit32-An-direct-operand Unprefixed  4  8)
(bit32-An-direct-operand   Prefixed 12 16)
(bit32-An-direct-operand   Prefixed 12 16)
;-------------------------------------------------------------
;-------------------------------------------------------------
; An indirect
; An indirect
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-derived-operand
(define-derived-operand
  (name bit16-An-indirect)
  (name bit16-An-indirect)
  (comment "m16c An indirect bit")
  (comment "m16c An indirect bit")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode BI)
  (mode BI)
  (args (Bit16An))
  (args (Bit16An))
  (syntax "[$Bit16An]")
  (syntax "[$Bit16An]")
  (base-ifield f-12-4)
  (base-ifield f-12-4)
  (encoding (+ (f-12-2 1) (f-14-1 1) Bit16An))
  (encoding (+ (f-12-2 1) (f-14-1 1) Bit16An))
  (ifield-assertion (andif (eq f-12-2 1) (eq f-14-1 1)))
  (ifield-assertion (andif (eq f-12-2 1) (eq f-14-1 1)))
  (getter (get-memory-bit 16 0 Bit16An))
  (getter (get-memory-bit 16 0 Bit16An))
  (setter (set-memory-bit 16 0 Bit16An newval))
  (setter (set-memory-bit 16 0 Bit16An newval))
)
)
(define-pmacro (bit32-An-indirect-operand group base1 base2)
(define-pmacro (bit32-An-indirect-operand group base1 base2)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym bit32-An-indirect- group))
      (name (.sym bit32-An-indirect- group))
      (comment "m32c An indirect destination ")
      (comment "m32c An indirect destination ")
      (attrs (machine 32))
      (attrs (machine 32))
      (mode BI)
      (mode BI)
      (args ((.sym Bitno32 group) (.sym Bit32An group)))
      (args ((.sym Bitno32 group) (.sym Bit32An group)))
      (syntax (.str "$Bitno32" group ",[$Bit32An" group "]"))
      (syntax (.str "$Bitno32" group ",[$Bit32An" group "]"))
      (base-ifield (.sym f- base1 -6))
      (base-ifield (.sym f- base1 -6))
      (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 0) (.sym Bit32An group) (.sym Bitno32 group)))
      (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 0) (.sym Bit32An group) (.sym Bitno32 group)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 0)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 0)))
      (getter (get-memory-bit 32 (.sym Bit32An group) (.sym Bitno32 group)))
      (getter (get-memory-bit 32 (.sym Bit32An group) (.sym Bitno32 group)))
      (setter (set-memory-bit 32 (.sym Bit32An group) (.sym Bitno32 group) newval))
      (setter (set-memory-bit 32 (.sym Bit32An group) (.sym Bitno32 group) newval))
    )
    )
  )
  )
)
)
(bit32-An-indirect-operand Unprefixed  4  8)
(bit32-An-indirect-operand Unprefixed  4  8)
(bit32-An-indirect-operand   Prefixed 12 16)
(bit32-An-indirect-operand   Prefixed 12 16)
;-------------------------------------------------------------
;-------------------------------------------------------------
; dsp:d[r] relative
; dsp:d[r] relative
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (bit16-relative-operand offset)
(define-pmacro (bit16-relative-operand offset)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym bit16- offset -8-SB-relative))
      (name (.sym bit16- offset -8-SB-relative))
      (comment (.str "m16c dsp:8[sb] relative bit " xmode))
      (comment (.str "m16c dsp:8[sb] relative bit " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode BI)
      (mode BI)
      (args ((.sym BitBase16- offset -u8)))
      (args ((.sym BitBase16- offset -u8)))
      (syntax (.str "${BitBase16-" offset "-u8}[sb]"))
      (syntax (.str "${BitBase16-" offset "-u8}[sb]"))
      (base-ifield f-12-4)
      (base-ifield f-12-4)
      (encoding (+ (f-12-4 #xA) (.sym BitBase16- offset -u8)))
      (encoding (+ (f-12-4 #xA) (.sym BitBase16- offset -u8)))
      (ifield-assertion (eq f-12-4 #xA))
      (ifield-assertion (eq f-12-4 #xA))
      (getter (get-memory-bit 16 (reg h-sb) (.sym BitBase16- offset -u8)))
      (getter (get-memory-bit 16 (reg h-sb) (.sym BitBase16- offset -u8)))
      (setter (set-memory-bit 16 (reg h-sb) (.sym BitBase16- offset -u8) newval))
      (setter (set-memory-bit 16 (reg h-sb) (.sym BitBase16- offset -u8) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym bit16- offset -16-SB-relative))
      (name (.sym bit16- offset -16-SB-relative))
      (comment (.str "m16c dsp:16[sb] relative bit " xmode))
      (comment (.str "m16c dsp:16[sb] relative bit " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode BI)
      (mode BI)
      (args ((.sym BitBase16- offset -u16)))
      (args ((.sym BitBase16- offset -u16)))
      (syntax (.str "${BitBase16-" offset "-u16}[sb]"))
      (syntax (.str "${BitBase16-" offset "-u16}[sb]"))
      (base-ifield f-12-4)
      (base-ifield f-12-4)
      (encoding (+ (f-12-4 #xE) (.sym BitBase16- offset -u16)))
      (encoding (+ (f-12-4 #xE) (.sym BitBase16- offset -u16)))
      (ifield-assertion (eq f-12-4 #xE))
      (ifield-assertion (eq f-12-4 #xE))
      (getter (get-memory-bit 16 (reg h-sb) (.sym BitBase16- offset -u16)))
      (getter (get-memory-bit 16 (reg h-sb) (.sym BitBase16- offset -u16)))
      (setter (set-memory-bit 16 (reg h-sb) (.sym BitBase16- offset -u16) newval))
      (setter (set-memory-bit 16 (reg h-sb) (.sym BitBase16- offset -u16) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym bit16- offset -8-FB-relative))
      (name (.sym bit16- offset -8-FB-relative))
      (comment (.str "m16c dsp:8[fb] relative bit " xmode))
      (comment (.str "m16c dsp:8[fb] relative bit " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode BI)
      (mode BI)
      (args ((.sym BitBase16- offset -s8)))
      (args ((.sym BitBase16- offset -s8)))
      (syntax (.str "${BitBase16-" offset "-s8}[fb]"))
      (syntax (.str "${BitBase16-" offset "-s8}[fb]"))
      (base-ifield f-12-4)
      (base-ifield f-12-4)
      (encoding (+ (f-12-4 #xB) (.sym BitBase16- offset -s8)))
      (encoding (+ (f-12-4 #xB) (.sym BitBase16- offset -s8)))
      (ifield-assertion (eq f-12-4 #xB))
      (ifield-assertion (eq f-12-4 #xB))
      (getter (get-memory-bit 16 (reg h-fb) (.sym BitBase16- offset -s8)))
      (getter (get-memory-bit 16 (reg h-fb) (.sym BitBase16- offset -s8)))
      (setter (set-memory-bit 16 (reg h-fb) (.sym BitBase16- offset -s8) newval))
      (setter (set-memory-bit 16 (reg h-fb) (.sym BitBase16- offset -s8) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym bit16- offset -8-An-relative))
      (name (.sym bit16- offset -8-An-relative))
      (comment (.str "m16c dsp:8[An] relative bit " xmode))
      (comment (.str "m16c dsp:8[An] relative bit " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode BI)
      (mode BI)
      (args (Bit16An (.sym Dsp- offset -u8)))
      (args (Bit16An (.sym Dsp- offset -u8)))
      (syntax (.str "${Dsp-" offset "-u8}[$Bit16An]"))
      (syntax (.str "${Dsp-" offset "-u8}[$Bit16An]"))
      (base-ifield f-12-4)
      (base-ifield f-12-4)
      (encoding (+ (f-12-2 2) (f-14-1 0) (.sym Dsp- offset -u8) Bit16An))
      (encoding (+ (f-12-2 2) (f-14-1 0) (.sym Dsp- offset -u8) Bit16An))
      (ifield-assertion (andif (eq f-12-2 2) (eq f-14-1 0)))
      (ifield-assertion (andif (eq f-12-2 2) (eq f-14-1 0)))
      (getter (get-memory-bit 16 (.sym Dsp- offset -u8) Bit16An))
      (getter (get-memory-bit 16 (.sym Dsp- offset -u8) Bit16An))
      (setter (set-memory-bit 16 (.sym Dsp- offset -u8) Bit16An newval))
      (setter (set-memory-bit 16 (.sym Dsp- offset -u8) Bit16An newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym bit16- offset -16-An-relative))
      (name (.sym bit16- offset -16-An-relative))
      (comment (.str "m16c dsp:16[An] relative bit " xmode))
      (comment (.str "m16c dsp:16[An] relative bit " xmode))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode BI)
      (mode BI)
      (args (Bit16An (.sym Dsp- offset -u16)))
      (args (Bit16An (.sym Dsp- offset -u16)))
      (syntax (.str "${Dsp-" offset "-u16}[$Bit16An]"))
      (syntax (.str "${Dsp-" offset "-u16}[$Bit16An]"))
      (base-ifield f-12-4)
      (base-ifield f-12-4)
      (encoding (+ (f-12-2 3) (f-14-1 0) (.sym Dsp- offset -u16) Bit16An))
      (encoding (+ (f-12-2 3) (f-14-1 0) (.sym Dsp- offset -u16) Bit16An))
      (ifield-assertion (andif (eq f-12-2 3) (eq f-14-1 0)))
      (ifield-assertion (andif (eq f-12-2 3) (eq f-14-1 0)))
      (getter (get-memory-bit 16 (.sym Dsp- offset -u16) Bit16An))
      (getter (get-memory-bit 16 (.sym Dsp- offset -u16) Bit16An))
      (setter (set-memory-bit 16 (.sym Dsp- offset -u16) Bit16An newval))
      (setter (set-memory-bit 16 (.sym Dsp- offset -u16) Bit16An newval))
    )
    )
  )
  )
)
)
(bit16-relative-operand 16)
(bit16-relative-operand 16)
(define-pmacro (bit32-relative-operand offset group base1 base2)
(define-pmacro (bit32-relative-operand offset group base1 base2)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym bit32- offset -11-SB-relative- group))
      (name (.sym bit32- offset -11-SB-relative- group))
      (comment "m32c bit,base:11[sb] relative bit")
      (comment "m32c bit,base:11[sb] relative bit")
      (attrs (machine 32))
      (attrs (machine 32))
      (mode BI)
      (mode BI)
      (args ((.sym BitBase32- offset -u11- group)))
      (args ((.sym BitBase32- offset -u11- group)))
      (syntax (.str "${BitBase32-" offset "-u11-" group "}[sb]"))
      (syntax (.str "${BitBase32-" offset "-u11-" group "}[sb]"))
      (base-ifield (.sym f- base1 -12))
      (base-ifield (.sym f- base1 -12))
      (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 2) (.sym BitBase32- offset -u11- group)))
      (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 2) (.sym BitBase32- offset -u11- group)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 2)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 2)))
      (getter (get-memory-bit 32 (reg h-sb) (.sym BitBase32- offset -u11- group)))
      (getter (get-memory-bit 32 (reg h-sb) (.sym BitBase32- offset -u11- group)))
      (setter (set-memory-bit 32 (reg h-sb) (.sym BitBase32- offset -u11- group) newval))
      (setter (set-memory-bit 32 (reg h-sb) (.sym BitBase32- offset -u11- group) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym bit32- offset -19-SB-relative- group))
      (name (.sym bit32- offset -19-SB-relative- group))
      (comment "m32c bit,base:19[sb] relative bit")
      (comment "m32c bit,base:19[sb] relative bit")
      (attrs (machine 32))
      (attrs (machine 32))
      (mode BI)
      (mode BI)
      (args ((.sym BitBase32- offset -u19- group)))
      (args ((.sym BitBase32- offset -u19- group)))
      (syntax (.str "${BitBase32-" offset "-u19-" group "}[sb]"))
      (syntax (.str "${BitBase32-" offset "-u19-" group "}[sb]"))
      (base-ifield (.sym f- base1 -12))
      (base-ifield (.sym f- base1 -12))
      (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 2) (.sym BitBase32- offset -u19- group)))
      (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 2) (.sym BitBase32- offset -u19- group)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 2)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 2)))
      (getter (get-memory-bit 32 (reg h-sb) (.sym BitBase32- offset -u19- group)))
      (getter (get-memory-bit 32 (reg h-sb) (.sym BitBase32- offset -u19- group)))
      (setter (set-memory-bit 32 (reg h-sb) (.sym BitBase32- offset -u19- group) newval))
      (setter (set-memory-bit 32 (reg h-sb) (.sym BitBase32- offset -u19- group) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym bit32- offset -11-FB-relative- group))
      (name (.sym bit32- offset -11-FB-relative- group))
      (comment "m32c bit,base:11[fb] relative bit")
      (comment "m32c bit,base:11[fb] relative bit")
      (attrs (machine 32))
      (attrs (machine 32))
      (mode BI)
      (mode BI)
      (args ((.sym BitBase32- offset -s11- group)))
      (args ((.sym BitBase32- offset -s11- group)))
      (syntax (.str "${BitBase32-" offset "-s11-" group "}[fb]"))
      (syntax (.str "${BitBase32-" offset "-s11-" group "}[fb]"))
      (base-ifield (.sym f- base1 -12))
      (base-ifield (.sym f- base1 -12))
      (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 3) (.sym BitBase32- offset -s11- group)))
      (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 3) (.sym BitBase32- offset -s11- group)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 3)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 3)))
      (getter (get-memory-bit 32 (reg h-fb) (.sym BitBase32- offset -s11- group)))
      (getter (get-memory-bit 32 (reg h-fb) (.sym BitBase32- offset -s11- group)))
      (setter (set-memory-bit 32 (reg h-fb) (.sym BitBase32- offset -s11- group) newval))
      (setter (set-memory-bit 32 (reg h-fb) (.sym BitBase32- offset -s11- group) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym bit32- offset -19-FB-relative- group))
      (name (.sym bit32- offset -19-FB-relative- group))
      (comment "m32c bit,base:19[fb] relative bit")
      (comment "m32c bit,base:19[fb] relative bit")
      (attrs (machine 32))
      (attrs (machine 32))
      (mode BI)
      (mode BI)
      (args ((.sym BitBase32- offset -s19- group)))
      (args ((.sym BitBase32- offset -s19- group)))
      (syntax (.str "${BitBase32-" offset "-s19-" group "}[fb]"))
      (syntax (.str "${BitBase32-" offset "-s19-" group "}[fb]"))
      (base-ifield (.sym f- base1 -12))
      (base-ifield (.sym f- base1 -12))
      (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 3) (.sym BitBase32- offset -s19- group)))
      (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 3) (.sym BitBase32- offset -s19- group)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 3)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 3)))
      (getter (get-memory-bit 32 (reg h-fb) (.sym BitBase32- offset -s19- group)))
      (getter (get-memory-bit 32 (reg h-fb) (.sym BitBase32- offset -s19- group)))
      (setter (set-memory-bit 32 (reg h-fb) (.sym BitBase32- offset -s19- group) newval))
      (setter (set-memory-bit 32 (reg h-fb) (.sym BitBase32- offset -s19- group) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym bit32- offset -11-An-relative- group))
      (name (.sym bit32- offset -11-An-relative- group))
      (comment "m32c bit,base:11[An] relative bit")
      (comment "m32c bit,base:11[An] relative bit")
      (attrs (machine 32))
      (attrs (machine 32))
      (mode BI)
      (mode BI)
      (args ((.sym BitBase32- offset -u11- group) (.sym Bit32An group)))
      (args ((.sym BitBase32- offset -u11- group) (.sym Bit32An group)))
      (syntax (.str "${BitBase32-" offset "-u11-" group "}[$Bit32An" group "]"))
      (syntax (.str "${BitBase32-" offset "-u11-" group "}[$Bit32An" group "]"))
      (base-ifield (.sym f- base1 -12))
      (base-ifield (.sym f- base1 -12))
      (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -1) 0) (.sym BitBase32- offset -u11- group) (.sym Bit32An group)))
      (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -1) 0) (.sym BitBase32- offset -u11- group) (.sym Bit32An group)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -1) 0)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -1) 0)))
      (getter (get-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u11- group)))
      (getter (get-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u11- group)))
      (setter (set-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u11- group) newval))
      (setter (set-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u11- group) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym bit32- offset -19-An-relative- group))
      (name (.sym bit32- offset -19-An-relative- group))
      (comment "m32c bit,base:19[An] relative bit")
      (comment "m32c bit,base:19[An] relative bit")
      (attrs (machine 32))
      (attrs (machine 32))
      (mode BI)
      (mode BI)
      (args ((.sym BitBase32- offset -u19- group) (.sym Bit32An group)))
      (args ((.sym BitBase32- offset -u19- group) (.sym Bit32An group)))
      (syntax (.str "${BitBase32-" offset "-u19-" group "}[$Bit32An" group "]"))
      (syntax (.str "${BitBase32-" offset "-u19-" group "}[$Bit32An" group "]"))
      (base-ifield (.sym f- base1 -12))
      (base-ifield (.sym f- base1 -12))
      (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -1) 0) (.sym BitBase32- offset -u19- group) (.sym Bit32An group)))
      (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -1) 0) (.sym BitBase32- offset -u19- group) (.sym Bit32An group)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -1) 0)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -1) 0)))
      (getter (get-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u19- group)))
      (getter (get-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u19- group)))
      (setter (set-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u19- group) newval))
      (setter (set-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u19- group) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym bit32- offset -27-An-relative- group))
      (name (.sym bit32- offset -27-An-relative- group))
      (comment "m32c bit,base:27[An] relative bit")
      (comment "m32c bit,base:27[An] relative bit")
      (attrs (machine 32))
      (attrs (machine 32))
      (mode BI)
      (mode BI)
      (args ((.sym BitBase32- offset -u27- group) (.sym Bit32An group)))
      (args ((.sym BitBase32- offset -u27- group) (.sym Bit32An group)))
      (syntax (.str "${BitBase32-" offset "-u27-" group "}[$Bit32An" group "]"))
      (syntax (.str "${BitBase32-" offset "-u27-" group "}[$Bit32An" group "]"))
      (base-ifield (.sym f- base1 -12))
      (base-ifield (.sym f- base1 -12))
      (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -1) 0) (.sym BitBase32- offset -u27- group) (.sym Bit32An group)))
      (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -1) 0) (.sym BitBase32- offset -u27- group) (.sym Bit32An group)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -1) 0)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -1) 0)))
      (getter (get-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u27- group)))
      (getter (get-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u27- group)))
      (setter (set-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u27- group) newval))
      (setter (set-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u27- group) newval))
    )
    )
  )
  )
)
)
(bit32-relative-operand 16 Unprefixed  4  8)
(bit32-relative-operand 16 Unprefixed  4  8)
(bit32-relative-operand 24   Prefixed 12 16)
(bit32-relative-operand 24   Prefixed 12 16)
(define-derived-operand
(define-derived-operand
  (name bit16-11-SB-relative-S)
  (name bit16-11-SB-relative-S)
  (comment "m16c bit,base:11[sb] relative bit")
  (comment "m16c bit,base:11[sb] relative bit")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode BI)
  (mode BI)
  (args (BitBase16-8-u11-S))
  (args (BitBase16-8-u11-S))
  (syntax "${BitBase16-8-u11-S}[sb]")
  (syntax "${BitBase16-8-u11-S}[sb]")
  (base-ifield (.sym f-5-3))
  (base-ifield (.sym f-5-3))
  (encoding (+ BitBase16-8-u11-S))
  (encoding (+ BitBase16-8-u11-S))
;  (ifield-assertion (#t))
;  (ifield-assertion (#t))
  (getter (get-memory-bit 16 (reg h-sb) BitBase16-8-u11-S))
  (getter (get-memory-bit 16 (reg h-sb) BitBase16-8-u11-S))
  (setter (set-memory-bit 16 (reg h-sb) BitBase16-8-u11-S newval))
  (setter (set-memory-bit 16 (reg h-sb) BitBase16-8-u11-S newval))
)
)
(define-derived-operand
(define-derived-operand
  (name Rn16-push-S-derived)
  (name Rn16-push-S-derived)
  (comment "m16c r0[lh] for push,pop short version")
  (comment "m16c r0[lh] for push,pop short version")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode QI)
  (mode QI)
  (args (Rn16-push-S))
  (args (Rn16-push-S))
  (syntax "${Rn16-push-S}")
  (syntax "${Rn16-push-S}")
  (base-ifield (.sym f-4-1))
  (base-ifield (.sym f-4-1))
  (encoding (+ Rn16-push-S))
  (encoding (+ Rn16-push-S))
;  (ifield-assertion (#t))
;  (ifield-assertion (#t))
  (getter (trunc QI Rn16-push-S))
  (getter (trunc QI Rn16-push-S))
  (setter (set Rn16-push-S newval))
  (setter (set Rn16-push-S newval))
)
)
(define-derived-operand
(define-derived-operand
  (name An16-push-S-derived)
  (name An16-push-S-derived)
  (comment "m16c r0[lh] for push,pop short version")
  (comment "m16c r0[lh] for push,pop short version")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode HI)
  (mode HI)
  (args (An16-push-S))
  (args (An16-push-S))
  (syntax "${An16-push-S}")
  (syntax "${An16-push-S}")
  (base-ifield (.sym f-4-1))
  (base-ifield (.sym f-4-1))
  (encoding (+ An16-push-S))
  (encoding (+ An16-push-S))
;  (ifield-assertion (#t))
;  (ifield-assertion (#t))
  (getter (trunc QI An16-push-S))
  (getter (trunc QI An16-push-S))
  (setter (set An16-push-S newval))
  (setter (set An16-push-S newval))
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Absolute address
; Absolute address
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (bit16-absolute offset)
(define-pmacro (bit16-absolute offset)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym bit16- offset -16-absolute))
      (name (.sym bit16- offset -16-absolute))
      (comment "m16c absolute address")
      (comment "m16c absolute address")
      (attrs (machine 16))
      (attrs (machine 16))
      (mode BI)
      (mode BI)
      (args ((.sym BitBase16- offset -u16)))
      (args ((.sym BitBase16- offset -u16)))
      (syntax (.str "${BitBase16-" offset "-u16}"))
      (syntax (.str "${BitBase16-" offset "-u16}"))
      (base-ifield f-12-4)
      (base-ifield f-12-4)
      (encoding (+ (f-12-4 #xF) (.sym BitBase16- offset -u16)))
      (encoding (+ (f-12-4 #xF) (.sym BitBase16- offset -u16)))
      (ifield-assertion (eq f-12-4 #xF))
      (ifield-assertion (eq f-12-4 #xF))
      (getter (get-memory-bit 16 0 (.sym BitBase16- offset -u16)))
      (getter (get-memory-bit 16 0 (.sym BitBase16- offset -u16)))
      (setter (set-memory-bit 16 0 (.sym BitBase16- offset -u16) newval))
      (setter (set-memory-bit 16 0 (.sym BitBase16- offset -u16) newval))
    )
    )
  )
  )
)
)
(bit16-absolute 16)
(bit16-absolute 16)
(define-pmacro (bit32-absolute offset group base1 base2)
(define-pmacro (bit32-absolute offset group base1 base2)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym bit32- offset -19-absolute- group))
      (name (.sym bit32- offset -19-absolute- group))
      (comment "m32c absolute address bit")
      (comment "m32c absolute address bit")
      (attrs (machine 32))
      (attrs (machine 32))
      (mode BI)
      (mode BI)
      (args ((.sym BitBase32- offset -u19- group)))
      (args ((.sym BitBase32- offset -u19- group)))
      (syntax (.str "${BitBase32-" offset "-u19-" group "}"))
      (syntax (.str "${BitBase32-" offset "-u19-" group "}"))
      (base-ifield (.sym f- base1 -12))
      (base-ifield (.sym f- base1 -12))
      (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 3) (.sym BitBase32- offset -u19- group)))
      (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 3) (.sym BitBase32- offset -u19- group)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 3)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 3)))
      (getter (get-memory-bit 32 0 (.sym BitBase32- offset -u19- group)))
      (getter (get-memory-bit 32 0 (.sym BitBase32- offset -u19- group)))
      (setter (set-memory-bit 32 0 (.sym BitBase32- offset -u19- group) newval))
      (setter (set-memory-bit 32 0 (.sym BitBase32- offset -u19- group) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym bit32- offset -27-absolute- group))
      (name (.sym bit32- offset -27-absolute- group))
      (comment "m32c absolute address bit")
      (comment "m32c absolute address bit")
      (attrs (machine 32))
      (attrs (machine 32))
      (mode BI)
      (mode BI)
      (args ((.sym BitBase32- offset -u27- group)))
      (args ((.sym BitBase32- offset -u27- group)))
      (syntax (.str "${BitBase32-" offset "-u27-" group "}"))
      (syntax (.str "${BitBase32-" offset "-u27-" group "}"))
      (base-ifield (.sym f- base1 -12))
      (base-ifield (.sym f- base1 -12))
      (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 2) (.sym BitBase32- offset -u27- group)))
      (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 2) (.sym BitBase32- offset -u27- group)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 2)))
      (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 2)))
      (getter (get-memory-bit 32 0 (.sym BitBase32- offset -u27- group)))
      (getter (get-memory-bit 32 0 (.sym BitBase32- offset -u27- group)))
      (setter (set-memory-bit 32 0 (.sym BitBase32- offset -u27- group) newval))
      (setter (set-memory-bit 32 0 (.sym BitBase32- offset -u27- group) newval))
    )
    )
  )
  )
)
)
(bit32-absolute 16 Unprefixed  4  8)
(bit32-absolute 16 Unprefixed  4  8)
(bit32-absolute 24   Prefixed 12 16)
(bit32-absolute 24   Prefixed 12 16)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Destination operands for short fomat insns
; Destination operands for short fomat insns
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-derived-operand
(define-derived-operand
  (name dst16-3-S-R0l-direct-QI)
  (name dst16-3-S-R0l-direct-QI)
  (comment "m16c R0l direct QI")
  (comment "m16c R0l direct QI")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode QI)
  (mode QI)
  (args (R0l))
  (args (R0l))
  (syntax "r0l")
  (syntax "r0l")
  (base-ifield f-5-3)
  (base-ifield f-5-3)
  (encoding (+ (f-5-3 4)))
  (encoding (+ (f-5-3 4)))
  (ifield-assertion (eq f-5-3 4))
  (ifield-assertion (eq f-5-3 4))
  (getter (trunc QI R0l))
  (getter (trunc QI R0l))
  (setter (set R0l newval))
  (setter (set R0l newval))
)
)
(define-derived-operand
(define-derived-operand
  (name dst16-3-S-R0h-direct-QI)
  (name dst16-3-S-R0h-direct-QI)
  (comment "m16c R0h direct QI")
  (comment "m16c R0h direct QI")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode QI)
  (mode QI)
  (args (R0h))
  (args (R0h))
  (syntax "r0h")
  (syntax "r0h")
  (base-ifield f-5-3)
  (base-ifield f-5-3)
  (encoding (+ (f-5-3 3)))
  (encoding (+ (f-5-3 3)))
  (ifield-assertion (eq f-5-3 3))
  (ifield-assertion (eq f-5-3 3))
  (getter (trunc QI R0h))
  (getter (trunc QI R0h))
  (setter (set R0h newval))
  (setter (set R0h newval))
)
)
(define-derived-operand
(define-derived-operand
  (name dst16-3-S-8-8-SB-relative-QI)
  (name dst16-3-S-8-8-SB-relative-QI)
  (comment "m16c SB relative QI")
  (comment "m16c SB relative QI")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode QI)
  (mode QI)
  (args (Dsp-8-u8))
  (args (Dsp-8-u8))
  (syntax "${Dsp-8-u8}[sb]")
  (syntax "${Dsp-8-u8}[sb]")
  (base-ifield f-5-3)
  (base-ifield f-5-3)
  (encoding (+ (f-5-3 5) Dsp-8-u8))
  (encoding (+ (f-5-3 5) Dsp-8-u8))
  (ifield-assertion (eq f-5-3 5))
  (ifield-assertion (eq f-5-3 5))
  (getter (mem16 QI (add Dsp-8-u8 (reg h-sb))))
  (getter (mem16 QI (add Dsp-8-u8 (reg h-sb))))
  (setter (set (mem16 QI (add Dsp-8-u8 (reg h-sb))) newval))
  (setter (set (mem16 QI (add Dsp-8-u8 (reg h-sb))) newval))
)
)
(define-derived-operand
(define-derived-operand
  (name dst16-3-S-8-8-FB-relative-QI)
  (name dst16-3-S-8-8-FB-relative-QI)
  (comment "m16c FB relative QI")
  (comment "m16c FB relative QI")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode QI)
  (mode QI)
  (args (Dsp-8-s8))
  (args (Dsp-8-s8))
  (syntax "${Dsp-8-s8}[fb]")
  (syntax "${Dsp-8-s8}[fb]")
  (base-ifield f-5-3)
  (base-ifield f-5-3)
  (encoding (+ (f-5-3 6) Dsp-8-s8))
  (encoding (+ (f-5-3 6) Dsp-8-s8))
  (ifield-assertion (eq f-5-3 6))
  (ifield-assertion (eq f-5-3 6))
  (getter (mem16 QI (add Dsp-8-s8 (reg h-fb))))
  (getter (mem16 QI (add Dsp-8-s8 (reg h-fb))))
  (setter (set (mem16 QI (add Dsp-8-s8 (reg h-fb))) newval))
  (setter (set (mem16 QI (add Dsp-8-s8 (reg h-fb))) newval))
)
)
(define-derived-operand
(define-derived-operand
  (name dst16-3-S-8-16-absolute-QI)
  (name dst16-3-S-8-16-absolute-QI)
  (comment "m16c absolute address QI")
  (comment "m16c absolute address QI")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode QI)
  (mode QI)
  (args (Dsp-8-u16))
  (args (Dsp-8-u16))
  (syntax "${Dsp-8-u16}")
  (syntax "${Dsp-8-u16}")
  (base-ifield f-5-3)
  (base-ifield f-5-3)
  (encoding (+ (f-5-3 7) Dsp-8-u16))
  (encoding (+ (f-5-3 7) Dsp-8-u16))
  (ifield-assertion (eq f-5-3 7))
  (ifield-assertion (eq f-5-3 7))
  (getter (mem16 QI Dsp-8-u16))
  (getter (mem16 QI Dsp-8-u16))
  (setter (set (mem16 QI Dsp-8-u16) newval))
  (setter (set (mem16 QI Dsp-8-u16) newval))
)
)
(define-derived-operand
(define-derived-operand
  (name dst16-3-S-16-8-SB-relative-QI)
  (name dst16-3-S-16-8-SB-relative-QI)
  (comment "m16c SB relative QI")
  (comment "m16c SB relative QI")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode QI)
  (mode QI)
  (args (Dsp-16-u8))
  (args (Dsp-16-u8))
  (syntax "${Dsp-16-u8}[sb]")
  (syntax "${Dsp-16-u8}[sb]")
  (base-ifield f-5-3)
  (base-ifield f-5-3)
  (encoding (+ (f-5-3 5) Dsp-16-u8))
  (encoding (+ (f-5-3 5) Dsp-16-u8))
  (ifield-assertion (eq f-5-3 5))
  (ifield-assertion (eq f-5-3 5))
  (getter (mem16 QI (add Dsp-16-u8 (reg h-sb))))
  (getter (mem16 QI (add Dsp-16-u8 (reg h-sb))))
  (setter (set (mem16 QI (add Dsp-16-u8 (reg h-sb))) newval))
  (setter (set (mem16 QI (add Dsp-16-u8 (reg h-sb))) newval))
)
)
(define-derived-operand
(define-derived-operand
  (name dst16-3-S-16-8-FB-relative-QI)
  (name dst16-3-S-16-8-FB-relative-QI)
  (comment "m16c FB relative QI")
  (comment "m16c FB relative QI")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode QI)
  (mode QI)
  (args (Dsp-16-s8))
  (args (Dsp-16-s8))
  (syntax "${Dsp-16-s8}[fb]")
  (syntax "${Dsp-16-s8}[fb]")
  (base-ifield f-5-3)
  (base-ifield f-5-3)
  (encoding (+ (f-5-3 6) Dsp-16-s8))
  (encoding (+ (f-5-3 6) Dsp-16-s8))
  (ifield-assertion (eq f-5-3 6))
  (ifield-assertion (eq f-5-3 6))
  (getter (mem16 QI (add Dsp-16-s8 (reg h-fb))))
  (getter (mem16 QI (add Dsp-16-s8 (reg h-fb))))
  (setter (set (mem16 QI (add Dsp-16-s8 (reg h-fb))) newval))
  (setter (set (mem16 QI (add Dsp-16-s8 (reg h-fb))) newval))
)
)
(define-derived-operand
(define-derived-operand
  (name dst16-3-S-16-16-absolute-QI)
  (name dst16-3-S-16-16-absolute-QI)
  (comment "m16c absolute address QI")
  (comment "m16c absolute address QI")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode QI)
  (mode QI)
  (args (Dsp-16-u16))
  (args (Dsp-16-u16))
  (syntax "${Dsp-16-u16}")
  (syntax "${Dsp-16-u16}")
  (base-ifield f-5-3)
  (base-ifield f-5-3)
  (encoding (+ (f-5-3 7) Dsp-16-u16))
  (encoding (+ (f-5-3 7) Dsp-16-u16))
  (ifield-assertion (eq f-5-3 7))
  (ifield-assertion (eq f-5-3 7))
  (getter (mem16 QI Dsp-16-u16))
  (getter (mem16 QI Dsp-16-u16))
  (setter (set (mem16 QI Dsp-16-u16) newval))
  (setter (set (mem16 QI Dsp-16-u16) newval))
)
)
(define-derived-operand
(define-derived-operand
  (name srcdst16-r0l-r0h-S-derived)
  (name srcdst16-r0l-r0h-S-derived)
  (comment "m16c r0l/r0h operand for short format insns")
  (comment "m16c r0l/r0h operand for short format insns")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode SI)
  (mode SI)
  (args (SrcDst16-r0l-r0h-S-normal))
  (args (SrcDst16-r0l-r0h-S-normal))
  (syntax "${SrcDst16-r0l-r0h-S-normal}")
  (syntax "${SrcDst16-r0l-r0h-S-normal}")
  (base-ifield f-6-3)
  (base-ifield f-6-3)
  (encoding (+ (f-6-2 0) SrcDst16-r0l-r0h-S-normal))
  (encoding (+ (f-6-2 0) SrcDst16-r0l-r0h-S-normal))
  (ifield-assertion (eq f-6-2 0))
  (ifield-assertion (eq f-6-2 0))
  (getter (trunc SI SrcDst16-r0l-r0h-S-normal))
  (getter (trunc SI SrcDst16-r0l-r0h-S-normal))
  (setter ()) ; no setter
  (setter ()) ; no setter
)
)
(define-derived-operand
(define-derived-operand
  (name dst32-2-S-R0l-direct-QI)
  (name dst32-2-S-R0l-direct-QI)
  (comment "m32c R0l direct QI")
  (comment "m32c R0l direct QI")
  (attrs (machine 32))
  (attrs (machine 32))
  (mode QI)
  (mode QI)
  (args (R0l))
  (args (R0l))
  (syntax "r0l")
  (syntax "r0l")
  (base-ifield f-2-2)
  (base-ifield f-2-2)
  (encoding (+ (f-2-2 0)))
  (encoding (+ (f-2-2 0)))
  (ifield-assertion (eq f-2-2 0))
  (ifield-assertion (eq f-2-2 0))
  (getter (trunc QI R0l))
  (getter (trunc QI R0l))
  (setter (set R0l newval))
  (setter (set R0l newval))
)
)
(define-derived-operand
(define-derived-operand
  (name dst32-2-S-R0-direct-HI)
  (name dst32-2-S-R0-direct-HI)
  (comment "m32c R0 direct HI")
  (comment "m32c R0 direct HI")
  (attrs (machine 32))
  (attrs (machine 32))
  (mode HI)
  (mode HI)
  (args (R0))
  (args (R0))
  (syntax "r0")
  (syntax "r0")
  (base-ifield f-2-2)
  (base-ifield f-2-2)
  (encoding (+ (f-2-2 0)))
  (encoding (+ (f-2-2 0)))
  (ifield-assertion (eq f-2-2 0))
  (ifield-assertion (eq f-2-2 0))
  (getter (trunc HI R0))
  (getter (trunc HI R0))
  (setter (set R0 newval))
  (setter (set R0 newval))
)
)
(define-derived-operand
(define-derived-operand
  (name dst32-1-S-A0-direct-HI)
  (name dst32-1-S-A0-direct-HI)
  (comment "m32c A0 direct HI")
  (comment "m32c A0 direct HI")
  (attrs (machine 32))
  (attrs (machine 32))
  (mode HI)
  (mode HI)
  (args (A0))
  (args (A0))
  (syntax "a0")
  (syntax "a0")
  (base-ifield f-7-1)
  (base-ifield f-7-1)
  (encoding (+ (f-7-1 0)))
  (encoding (+ (f-7-1 0)))
  (ifield-assertion (eq f-7-1 0))
  (ifield-assertion (eq f-7-1 0))
  (getter (trunc HI A0))
  (getter (trunc HI A0))
  (setter (set A0 newval))
  (setter (set A0 newval))
)
)
(define-derived-operand
(define-derived-operand
  (name dst32-1-S-A1-direct-HI)
  (name dst32-1-S-A1-direct-HI)
  (comment "m32c A1 direct HI")
  (comment "m32c A1 direct HI")
  (attrs (machine 32))
  (attrs (machine 32))
  (mode HI)
  (mode HI)
  (args (A1))
  (args (A1))
  (syntax "a1")
  (syntax "a1")
  (base-ifield f-7-1)
  (base-ifield f-7-1)
  (encoding (+ (f-7-1 1)))
  (encoding (+ (f-7-1 1)))
  (ifield-assertion (eq f-7-1 1))
  (ifield-assertion (eq f-7-1 1))
  (getter (trunc HI A1))
  (getter (trunc HI A1))
  (setter (set A1 newval))
  (setter (set A1 newval))
)
)
(define-pmacro (dst32-2-S-operands xmode)
(define-pmacro (dst32-2-S-operands xmode)
  (begin
  (begin
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst32-2-S-8-SB-relative- xmode))
      (name (.sym dst32-2-S-8-SB-relative- xmode))
      (comment "m32c SB relative for short binary insns")
      (comment "m32c SB relative for short binary insns")
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (args (Dsp-8-u8))
      (args (Dsp-8-u8))
      (syntax "${Dsp-8-u8}[sb]")
      (syntax "${Dsp-8-u8}[sb]")
      (base-ifield f-2-2)
      (base-ifield f-2-2)
      (encoding (+ (f-2-2 2) Dsp-8-u8))
      (encoding (+ (f-2-2 2) Dsp-8-u8))
      (ifield-assertion (eq f-2-2 2))
      (ifield-assertion (eq f-2-2 2))
      (getter (c-call xmode (.str "operand_getter_" xmode) sb Dsp-8-u8))
      (getter (c-call xmode (.str "operand_getter_" xmode) sb Dsp-8-u8))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval sb Dsp-8-u8))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval sb Dsp-8-u8))
;      (getter (mem32 xmode (add Dsp-8-u8 (reg h-sb))))
;      (getter (mem32 xmode (add Dsp-8-u8 (reg h-sb))))
;      (setter (set (mem32 xmode (add Dsp-8-u8 (reg h-sb))) newval))
;      (setter (set (mem32 xmode (add Dsp-8-u8 (reg h-sb))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst32-2-S-8-FB-relative- xmode))
      (name (.sym dst32-2-S-8-FB-relative- xmode))
      (comment "m32c FB relative for short binary insns")
      (comment "m32c FB relative for short binary insns")
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (args (Dsp-8-s8))
      (args (Dsp-8-s8))
      (syntax "${Dsp-8-s8}[fb]")
      (syntax "${Dsp-8-s8}[fb]")
      (base-ifield f-2-2)
      (base-ifield f-2-2)
      (encoding (+ (f-2-2 3) Dsp-8-s8))
      (encoding (+ (f-2-2 3) Dsp-8-s8))
      (ifield-assertion (eq f-2-2 3))
      (ifield-assertion (eq f-2-2 3))
      (getter (c-call xmode (.str "operand_getter_" xmode) fb Dsp-8-s8))
      (getter (c-call xmode (.str "operand_getter_" xmode) fb Dsp-8-s8))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval fb Dsp-8-s8))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval fb Dsp-8-s8))
;      (getter (mem32 xmode (add Dsp-8-s8 (reg h-fb))))
;      (getter (mem32 xmode (add Dsp-8-s8 (reg h-fb))))
;      (setter (set (mem32 xmode (add Dsp-8-s8 (reg h-fb))) newval))
;      (setter (set (mem32 xmode (add Dsp-8-s8 (reg h-fb))) newval))
    )
    )
    (define-derived-operand
    (define-derived-operand
      (name (.sym dst32-2-S-16-absolute- xmode))
      (name (.sym dst32-2-S-16-absolute- xmode))
      (comment "m32c absolute address for short binary insns")
      (comment "m32c absolute address for short binary insns")
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (args (Dsp-8-u16))
      (args (Dsp-8-u16))
      (syntax "${Dsp-8-u16}")
      (syntax "${Dsp-8-u16}")
      (base-ifield f-2-2)
      (base-ifield f-2-2)
      (encoding (+ (f-2-2 1) Dsp-8-u16))
      (encoding (+ (f-2-2 1) Dsp-8-u16))
      (ifield-assertion (eq f-2-2 1))
      (ifield-assertion (eq f-2-2 1))
      (getter (c-call xmode (.str "operand_getter_" xmode) (const 0) Dsp-8-u16))
      (getter (c-call xmode (.str "operand_getter_" xmode) (const 0) Dsp-8-u16))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval (const 0) Dsp-8-u16))
      (setter (c-call DFLT (.str "operand_setter_" xmode) newval (const 0) Dsp-8-u16))
;      (getter (mem32 xmode Dsp-8-u16))
;      (getter (mem32 xmode Dsp-8-u16))
;      (setter (set (mem32 xmode Dsp-8-u16) newval))
;      (setter (set (mem32 xmode Dsp-8-u16) newval))
    )
    )
;     (define-derived-operand
;     (define-derived-operand
;       (name (.sym dst32-2-S-8-SB-relative-indirect- xmode))
;       (name (.sym dst32-2-S-8-SB-relative-indirect- xmode))
;       (comment "m32c SB relative for short binary insns")
;       (comment "m32c SB relative for short binary insns")
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (args (Dsp-16-u8))
;       (args (Dsp-16-u8))
;       (syntax "[${Dsp-16-u8}[sb]]")
;       (syntax "[${Dsp-16-u8}[sb]]")
;       (base-ifield f-10-2)
;       (base-ifield f-10-2)
;       (encoding (+ (f-10-2 2) Dsp-16-u8))
;       (encoding (+ (f-10-2 2) Dsp-16-u8))
;       (ifield-assertion (eq f-10-2 2))
;       (ifield-assertion (eq f-10-2 2))
;       (getter (mem32 xmode (indirect-addr (add Dsp-16-u8 (reg h-sb)))))
;       (getter (mem32 xmode (indirect-addr (add Dsp-16-u8 (reg h-sb)))))
;       (setter (set (mem32 xmode (indirect-addr (add Dsp-16-u8 (reg h-sb)))) newval))
;       (setter (set (mem32 xmode (indirect-addr (add Dsp-16-u8 (reg h-sb)))) newval))
;     )
;     )
;     (define-derived-operand
;     (define-derived-operand
;       (name (.sym dst32-2-S-8-FB-relative-indirect- xmode))
;       (name (.sym dst32-2-S-8-FB-relative-indirect- xmode))
;       (comment "m32c FB relative for short binary insns")
;       (comment "m32c FB relative for short binary insns")
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (args (Dsp-16-s8))
;       (args (Dsp-16-s8))
;       (syntax "[${Dsp-16-s8}[fb]]")
;       (syntax "[${Dsp-16-s8}[fb]]")
;       (base-ifield f-10-2)
;       (base-ifield f-10-2)
;       (encoding (+ (f-10-2 3) Dsp-16-s8))
;       (encoding (+ (f-10-2 3) Dsp-16-s8))
;       (ifield-assertion (eq f-10-2 3))
;       (ifield-assertion (eq f-10-2 3))
;       (getter (mem32 xmode (indirect-addr (add Dsp-16-s8 (reg h-fb)))))
;       (getter (mem32 xmode (indirect-addr (add Dsp-16-s8 (reg h-fb)))))
;       (setter (set (mem32 xmode (indirect-addr (add Dsp-16-s8 (reg h-fb)))) newval))
;       (setter (set (mem32 xmode (indirect-addr (add Dsp-16-s8 (reg h-fb)))) newval))
;     )
;     )
;     (define-derived-operand
;     (define-derived-operand
;       (name (.sym dst32-2-S-16-absolute-indirect- xmode))
;       (name (.sym dst32-2-S-16-absolute-indirect- xmode))
;       (comment "m32c absolute address for short binary insns")
;       (comment "m32c absolute address for short binary insns")
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (args (Dsp-16-u16))
;       (args (Dsp-16-u16))
;       (syntax "[${Dsp-16-u16}]")
;       (syntax "[${Dsp-16-u16}]")
;       (base-ifield f-10-2)
;       (base-ifield f-10-2)
;       (encoding (+ (f-10-2 1) Dsp-16-u16))
;       (encoding (+ (f-10-2 1) Dsp-16-u16))
;       (ifield-assertion (eq f-10-2 1))
;       (ifield-assertion (eq f-10-2 1))
;       (getter (mem32 xmode (indirect-addr Dsp-16-u16)))
;       (getter (mem32 xmode (indirect-addr Dsp-16-u16)))
;       (setter (set (mem32 xmode (indirect-addr Dsp-16-u16)) newval))
;       (setter (set (mem32 xmode (indirect-addr Dsp-16-u16)) newval))
;     )
;     )
  )
  )
)
)
(dst32-2-S-operands QI)
(dst32-2-S-operands QI)
(dst32-2-S-operands HI)
(dst32-2-S-operands HI)
(dst32-2-S-operands SI)
(dst32-2-S-operands SI)
;=============================================================
;=============================================================
; Anyof operands
; Anyof operands
;-------------------------------------------------------------
;-------------------------------------------------------------
; Source operands with no additional fields
; Source operands with no additional fields
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (src16-basic-operand xmode)
(define-pmacro (src16-basic-operand xmode)
  (begin
  (begin
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym src16-basic- xmode))
      (name (.sym src16-basic- xmode))
      (comment (.str "m16c source operand of size " xmode " with no additional fields"))
      (comment (.str "m16c source operand of size " xmode " with no additional fields"))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym src16-Rn-direct- xmode)
       (.sym src16-Rn-direct- xmode)
       (.sym src16-An-direct- xmode)
       (.sym src16-An-direct- xmode)
       (.sym src16-An-indirect- xmode)
       (.sym src16-An-indirect- xmode)
      )
      )
    )
    )
  )
  )
)
)
(src16-basic-operand QI)
(src16-basic-operand QI)
(src16-basic-operand HI)
(src16-basic-operand HI)
(define-pmacro (src32-basic-operand xmode)
(define-pmacro (src32-basic-operand xmode)
  (begin
  (begin
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym src32-basic-Unprefixed- xmode))
      (name (.sym src32-basic-Unprefixed- xmode))
      (comment (.str "m32c destination operand of size " xmode " with no additional fields"))
      (comment (.str "m32c destination operand of size " xmode " with no additional fields"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym src32-Rn-direct-Unprefixed- xmode)
       (.sym src32-Rn-direct-Unprefixed- xmode)
       (.sym src32-An-direct-Unprefixed- xmode)
       (.sym src32-An-direct-Unprefixed- xmode)
       (.sym src32-An-indirect-Unprefixed- xmode)
       (.sym src32-An-indirect-Unprefixed- xmode)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym src32-basic-Prefixed- xmode))
      (name (.sym src32-basic-Prefixed- xmode))
      (comment (.str "m32c destination operand of size " xmode " with no additional fields"))
      (comment (.str "m32c destination operand of size " xmode " with no additional fields"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym src32-Rn-direct-Prefixed- xmode)
       (.sym src32-Rn-direct-Prefixed- xmode)
       (.sym src32-An-direct-Prefixed- xmode)
       (.sym src32-An-direct-Prefixed- xmode)
       (.sym src32-An-indirect-Prefixed- xmode)
       (.sym src32-An-indirect-Prefixed- xmode)
      )
      )
    )
    )
;     (define-anyof-operand
;     (define-anyof-operand
;       (name (.sym src32-basic-indirect- xmode))
;       (name (.sym src32-basic-indirect- xmode))
;       (comment (.str "m32c destination operand of size " xmode " indirect with no additional fields"))
;       (comment (.str "m32c destination operand of size " xmode " indirect with no additional fields"))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (choices
;       (choices
;        (.sym src32-An-indirect-indirect- xmode)
;        (.sym src32-An-indirect-indirect- xmode)
;       )
;       )
;     )
;     )
  )
  )
)
)
(src32-basic-operand QI)
(src32-basic-operand QI)
(src32-basic-operand HI)
(src32-basic-operand HI)
(src32-basic-operand SI)
(src32-basic-operand SI)
(define-anyof-operand
(define-anyof-operand
  (name src32-basic-ExtPrefixed-QI)
  (name src32-basic-ExtPrefixed-QI)
  (comment "m32c source operand of size QI with no additional fields")
  (comment "m32c source operand of size QI with no additional fields")
  (attrs (machine 32))
  (attrs (machine 32))
  (mode QI)
  (mode QI)
  (choices
  (choices
   src32-Rn-direct-Prefixed-QI
   src32-Rn-direct-Prefixed-QI
   src32-An-indirect-Prefixed-QI
   src32-An-indirect-Prefixed-QI
  )
  )
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Source operands with additional fields at offset 16 bits
; Source operands with additional fields at offset 16 bits
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (src16-16-operand xmode)
(define-pmacro (src16-16-operand xmode)
  (begin
  (begin
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym src16-16-8- xmode))
      (name (.sym src16-16-8- xmode))
      (comment (.str "m16c source operand of size " xmode " with additional 8 bit fields at offset 16"))
      (comment (.str "m16c source operand of size " xmode " with additional 8 bit fields at offset 16"))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym src16-16-8-An-relative- xmode)
       (.sym src16-16-8-An-relative- xmode)
       (.sym src16-16-8-SB-relative- xmode)
       (.sym src16-16-8-SB-relative- xmode)
       (.sym src16-16-8-FB-relative- xmode)
       (.sym src16-16-8-FB-relative- xmode)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym src16-16-16- xmode))
      (name (.sym src16-16-16- xmode))
      (comment (.str "m16c source operand of size " xmode " with additional 16 bit fields at offset 16"))
      (comment (.str "m16c source operand of size " xmode " with additional 16 bit fields at offset 16"))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym src16-16-16-An-relative- xmode)
       (.sym src16-16-16-An-relative- xmode)
       (.sym src16-16-16-SB-relative- xmode)
       (.sym src16-16-16-SB-relative- xmode)
       (.sym src16-16-16-absolute- xmode)
       (.sym src16-16-16-absolute- xmode)
      )
      )
    )
    )
  )
  )
)
)
(src16-16-operand QI)
(src16-16-operand QI)
(src16-16-operand HI)
(src16-16-operand HI)
(define-pmacro (src32-16-operand xmode)
(define-pmacro (src32-16-operand xmode)
  (begin
  (begin
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym src32-16-8-Unprefixed- xmode))
      (name (.sym src32-16-8-Unprefixed- xmode))
      (comment (.str "m32c source operand of size " xmode " with additional 8 bit fields at offset 16"))
      (comment (.str "m32c source operand of size " xmode " with additional 8 bit fields at offset 16"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym src32-16-8-An-relative-Unprefixed- xmode)
       (.sym src32-16-8-An-relative-Unprefixed- xmode)
       (.sym src32-16-8-SB-relative-Unprefixed- xmode)
       (.sym src32-16-8-SB-relative-Unprefixed- xmode)
       (.sym src32-16-8-FB-relative-Unprefixed- xmode)
       (.sym src32-16-8-FB-relative-Unprefixed- xmode)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym src32-16-16-Unprefixed- xmode))
      (name (.sym src32-16-16-Unprefixed- xmode))
      (comment (.str "m32c source operand of size " xmode " with additional 16 bit fields at offset 16"))
      (comment (.str "m32c source operand of size " xmode " with additional 16 bit fields at offset 16"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym src32-16-16-An-relative-Unprefixed- xmode)
       (.sym src32-16-16-An-relative-Unprefixed- xmode)
       (.sym src32-16-16-SB-relative-Unprefixed- xmode)
       (.sym src32-16-16-SB-relative-Unprefixed- xmode)
       (.sym src32-16-16-FB-relative-Unprefixed- xmode)
       (.sym src32-16-16-FB-relative-Unprefixed- xmode)
       (.sym src32-16-16-absolute-Unprefixed- xmode)
       (.sym src32-16-16-absolute-Unprefixed- xmode)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym src32-16-24-Unprefixed- xmode))
      (name (.sym src32-16-24-Unprefixed- xmode))
      (comment (.str "m32c source operand of size " xmode " with additional 24 bit fields at offset 16"))
      (comment (.str "m32c source operand of size " xmode " with additional 24 bit fields at offset 16"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym src32-16-24-An-relative-Unprefixed- xmode)
       (.sym src32-16-24-An-relative-Unprefixed- xmode)
       (.sym src32-16-24-absolute-Unprefixed- xmode)
       (.sym src32-16-24-absolute-Unprefixed- xmode)
      )
      )
    )
    )
  )
  )
)
)
(src32-16-operand QI)
(src32-16-operand QI)
(src32-16-operand HI)
(src32-16-operand HI)
(src32-16-operand SI)
(src32-16-operand SI)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Source operands with additional fields at offset 24 bits
; Source operands with additional fields at offset 24 bits
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (src-24-operand group xmode)
(define-pmacro (src-24-operand group xmode)
  (begin
  (begin
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym src32-24-8- group - xmode))
      (name (.sym src32-24-8- group - xmode))
      (comment (.str "m32c source operand of size " xmode " with additional 8 bit fields at offset 24"))
      (comment (.str "m32c source operand of size " xmode " with additional 8 bit fields at offset 24"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym src32-24-8-An-relative- group - xmode)
       (.sym src32-24-8-An-relative- group - xmode)
       (.sym src32-24-8-SB-relative- group - xmode)
       (.sym src32-24-8-SB-relative- group - xmode)
       (.sym src32-24-8-FB-relative- group - xmode)
       (.sym src32-24-8-FB-relative- group - xmode)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym src32-24-16- group - xmode))
      (name (.sym src32-24-16- group - xmode))
      (comment (.str "m32c source operand of size " xmode " with additional 16 bit fields at offset 16"))
      (comment (.str "m32c source operand of size " xmode " with additional 16 bit fields at offset 16"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym src32-24-16-An-relative- group - xmode)
       (.sym src32-24-16-An-relative- group - xmode)
       (.sym src32-24-16-SB-relative- group - xmode)
       (.sym src32-24-16-SB-relative- group - xmode)
       (.sym src32-24-16-FB-relative- group - xmode)
       (.sym src32-24-16-FB-relative- group - xmode)
       (.sym src32-24-16-absolute- group - xmode)
       (.sym src32-24-16-absolute- group - xmode)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym src32-24-24- group - xmode))
      (name (.sym src32-24-24- group - xmode))
      (comment (.str "m32c source operand of size " xmode " with additional 24 bit fields at offset 16"))
      (comment (.str "m32c source operand of size " xmode " with additional 24 bit fields at offset 16"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym src32-24-24-An-relative- group - xmode)
       (.sym src32-24-24-An-relative- group - xmode)
       (.sym src32-24-24-absolute- group - xmode)
       (.sym src32-24-24-absolute- group - xmode)
      )
      )
    )
    )
  )
  )
)
)
(src-24-operand Prefixed   QI)
(src-24-operand Prefixed   QI)
(src-24-operand Prefixed   HI)
(src-24-operand Prefixed   HI)
(src-24-operand Prefixed   SI)
(src-24-operand Prefixed   SI)
(define-pmacro (src-24-indirect-operand xmode)
(define-pmacro (src-24-indirect-operand xmode)
  (begin
  (begin
;     (define-anyof-operand
;     (define-anyof-operand
;       (name (.sym src32-24-8-indirect- xmode))
;       (name (.sym src32-24-8-indirect- xmode))
;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (choices
;       (choices
;        (.sym src32-24-8-An-relative-indirect- xmode)
;        (.sym src32-24-8-An-relative-indirect- xmode)
;        (.sym src32-24-8-SB-relative-indirect- xmode)
;        (.sym src32-24-8-SB-relative-indirect- xmode)
;        (.sym src32-24-8-FB-relative-indirect- xmode)
;        (.sym src32-24-8-FB-relative-indirect- xmode)
;       )
;       )
;     )
;     )
;     (define-anyof-operand
;     (define-anyof-operand
;       (name (.sym src32-24-16-indirect- xmode))
;       (name (.sym src32-24-16-indirect- xmode))
;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (choices
;       (choices
;        (.sym src32-24-16-An-relative-indirect- xmode)
;        (.sym src32-24-16-An-relative-indirect- xmode)
;        (.sym src32-24-16-SB-relative-indirect- xmode)
;        (.sym src32-24-16-SB-relative-indirect- xmode)
;        (.sym src32-24-16-FB-relative-indirect- xmode)
;        (.sym src32-24-16-FB-relative-indirect- xmode)
;       )
;       )
;     )
;     )
;     (define-anyof-operand
;     (define-anyof-operand
;       (name (.sym src32-24-24-indirect- xmode))
;       (name (.sym src32-24-24-indirect- xmode))
;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (choices
;       (choices
;        (.sym src32-24-24-An-relative-indirect- xmode)
;        (.sym src32-24-24-An-relative-indirect- xmode)
;       )
;       )
;     )
;     )
;     (define-anyof-operand
;     (define-anyof-operand
;       (name (.sym src32-24-16-absolute-indirect- xmode))
;       (name (.sym src32-24-16-absolute-indirect- xmode))
;       (comment (.str "m32c source operand of size " xmode " 16 bit absolute indirect"))
;       (comment (.str "m32c source operand of size " xmode " 16 bit absolute indirect"))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (choices
;       (choices
;        (.sym src32-24-16-absolute-indirect-derived- xmode)
;        (.sym src32-24-16-absolute-indirect-derived- xmode)
;       )
;       )
;     )
;     )
;     (define-anyof-operand
;     (define-anyof-operand
;       (name (.sym src32-24-24-absolute-indirect- xmode))
;       (name (.sym src32-24-24-absolute-indirect- xmode))
;       (comment (.str "m32c source operand of size " xmode " 24 bit absolute indirect"))
;       (comment (.str "m32c source operand of size " xmode " 24 bit absolute indirect"))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (choices
;       (choices
;        (.sym src32-24-24-absolute-indirect-derived- xmode)
;        (.sym src32-24-24-absolute-indirect-derived- xmode)
;       )
;       )
;     )
;     )
  )
  )
)
)
; (src-24-indirect-operand QI)
; (src-24-indirect-operand QI)
; (src-24-indirect-operand HI)
; (src-24-indirect-operand HI)
; (src-24-indirect-operand SI)
; (src-24-indirect-operand SI)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Destination operands with no additional fields
; Destination operands with no additional fields
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (dst16-basic-operand xmode)
(define-pmacro (dst16-basic-operand xmode)
  (begin
  (begin
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst16-basic- xmode))
      (name (.sym dst16-basic- xmode))
      (comment (.str "m16c destination operand of size " xmode " with no additional fields"))
      (comment (.str "m16c destination operand of size " xmode " with no additional fields"))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst16-Rn-direct- xmode)
       (.sym dst16-Rn-direct- xmode)
       (.sym dst16-An-direct- xmode)
       (.sym dst16-An-direct- xmode)
       (.sym dst16-An-indirect- xmode)
       (.sym dst16-An-indirect- xmode)
      )
      )
    )
    )
  )
  )
)
)
(dst16-basic-operand QI)
(dst16-basic-operand QI)
(dst16-basic-operand HI)
(dst16-basic-operand HI)
(dst16-basic-operand SI)
(dst16-basic-operand SI)
(define-pmacro (dst32-basic-operand xmode)
(define-pmacro (dst32-basic-operand xmode)
  (begin
  (begin
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst32-basic-Unprefixed- xmode))
      (name (.sym dst32-basic-Unprefixed- xmode))
      (comment (.str "m32c destination operand of size " xmode " with no additional fields"))
      (comment (.str "m32c destination operand of size " xmode " with no additional fields"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst32-Rn-direct-Unprefixed- xmode)
       (.sym dst32-Rn-direct-Unprefixed- xmode)
       (.sym dst32-An-direct-Unprefixed- xmode)
       (.sym dst32-An-direct-Unprefixed- xmode)
       (.sym dst32-An-indirect-Unprefixed- xmode)
       (.sym dst32-An-indirect-Unprefixed- xmode)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst32-basic-Prefixed- xmode))
      (name (.sym dst32-basic-Prefixed- xmode))
      (comment (.str "m32c destination operand of size " xmode " with no additional fields"))
      (comment (.str "m32c destination operand of size " xmode " with no additional fields"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst32-Rn-direct-Prefixed- xmode)
       (.sym dst32-Rn-direct-Prefixed- xmode)
       (.sym dst32-An-direct-Prefixed- xmode)
       (.sym dst32-An-direct-Prefixed- xmode)
       (.sym dst32-An-indirect-Prefixed- xmode)
       (.sym dst32-An-indirect-Prefixed- xmode)
      )
      )
    )
    )
  )
  )
)
)
(dst32-basic-operand QI)
(dst32-basic-operand QI)
(dst32-basic-operand HI)
(dst32-basic-operand HI)
(dst32-basic-operand SI)
(dst32-basic-operand SI)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Destination operands with possible additional fields at offset 16 bits
; Destination operands with possible additional fields at offset 16 bits
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (dst16-16-operand xmode)
(define-pmacro (dst16-16-operand xmode)
  (begin
  (begin
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst16-16- xmode))
      (name (.sym dst16-16- xmode))
      (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 16"))
      (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 16"))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst16-Rn-direct- xmode)
       (.sym dst16-Rn-direct- xmode)
       (.sym dst16-An-direct- xmode)
       (.sym dst16-An-direct- xmode)
       (.sym dst16-An-indirect- xmode)
       (.sym dst16-An-indirect- xmode)
       (.sym dst16-16-8-An-relative- xmode)
       (.sym dst16-16-8-An-relative- xmode)
       (.sym dst16-16-16-An-relative- xmode)
       (.sym dst16-16-16-An-relative- xmode)
       (.sym dst16-16-8-SB-relative- xmode)
       (.sym dst16-16-8-SB-relative- xmode)
       (.sym dst16-16-16-SB-relative- xmode)
       (.sym dst16-16-16-SB-relative- xmode)
       (.sym dst16-16-8-FB-relative- xmode)
       (.sym dst16-16-8-FB-relative- xmode)
       (.sym dst16-16-16-absolute- xmode)
       (.sym dst16-16-16-absolute- xmode)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst16-16-8- xmode))
      (name (.sym dst16-16-8- xmode))
      (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 16"))
      (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 16"))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst16-16-8-An-relative- xmode)
       (.sym dst16-16-8-An-relative- xmode)
       (.sym dst16-16-8-SB-relative- xmode)
       (.sym dst16-16-8-SB-relative- xmode)
       (.sym dst16-16-8-FB-relative- xmode)
       (.sym dst16-16-8-FB-relative- xmode)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst16-16-16- xmode))
      (name (.sym dst16-16-16- xmode))
      (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 16"))
      (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 16"))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst16-16-16-An-relative- xmode)
       (.sym dst16-16-16-An-relative- xmode)
       (.sym dst16-16-16-SB-relative- xmode)
       (.sym dst16-16-16-SB-relative- xmode)
       (.sym dst16-16-16-absolute- xmode)
       (.sym dst16-16-16-absolute- xmode)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst16-16-16sa- xmode))
      (name (.sym dst16-16-16sa- xmode))
      (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 16"))
      (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 16"))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst16-16-16-SB-relative- xmode)
       (.sym dst16-16-16-SB-relative- xmode)
       (.sym dst16-16-16-absolute- xmode)
       (.sym dst16-16-16-absolute- xmode)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst16-16-20ar- xmode))
      (name (.sym dst16-16-20ar- xmode))
      (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 16"))
      (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 16"))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst16-16-20-An-relative- xmode)
       (.sym dst16-16-20-An-relative- xmode)
      )
      )
    )
    )
  )
  )
)
)
(dst16-16-operand QI)
(dst16-16-operand QI)
(dst16-16-operand HI)
(dst16-16-operand HI)
(dst16-16-operand SI)
(dst16-16-operand SI)
(define-anyof-operand
(define-anyof-operand
  (name dst16-16-Ext-QI)
  (name dst16-16-Ext-QI)
  (comment "m16c destination operand of size QI for 'ext' insns with additional fields at offset 16")
  (comment "m16c destination operand of size QI for 'ext' insns with additional fields at offset 16")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode QI)
  (mode QI)
  (choices
  (choices
   dst16-Rn-direct-Ext-QI
   dst16-Rn-direct-Ext-QI
   dst16-An-indirect-Ext-QI
   dst16-An-indirect-Ext-QI
   dst16-16-8-An-relative-Ext-QI
   dst16-16-8-An-relative-Ext-QI
   dst16-16-16-An-relative-Ext-QI
   dst16-16-16-An-relative-Ext-QI
   dst16-16-8-SB-relative-Ext-QI
   dst16-16-8-SB-relative-Ext-QI
   dst16-16-16-SB-relative-Ext-QI
   dst16-16-16-SB-relative-Ext-QI
   dst16-16-8-FB-relative-Ext-QI
   dst16-16-8-FB-relative-Ext-QI
   dst16-16-16-absolute-Ext-QI
   dst16-16-16-absolute-Ext-QI
  )
  )
)
)
(define-derived-operand
(define-derived-operand
  (name dst16-An-indirect-Mova-HI)
  (name dst16-An-indirect-Mova-HI)
  (comment "m16c addressof An indirect destination HI")
  (comment "m16c addressof An indirect destination HI")
  (attrs (ISA m16c))
  (attrs (ISA m16c))
  (mode HI)
  (mode HI)
  (args (Dst16An))
  (args (Dst16An))
  (syntax "[$Dst16An]")
  (syntax "[$Dst16An]")
  (base-ifield f-12-4)
  (base-ifield f-12-4)
  (encoding (+ (f-12-2 1) (f-14-1 1) Dst16An))
  (encoding (+ (f-12-2 1) (f-14-1 1) Dst16An))
  (ifield-assertion
  (ifield-assertion
    (andif (eq f-12-2 1) (eq f-14-1 1)))
    (andif (eq f-12-2 1) (eq f-14-1 1)))
  (getter Dst16An)
  (getter Dst16An)
  (setter (nop))
  (setter (nop))
  )
  )
(define-derived-operand
(define-derived-operand
  (name dst16-16-8-An-relative-Mova-HI)
  (name dst16-16-8-An-relative-Mova-HI)
  (comment
  (comment
    "m16c addressof dsp:8[An] relative destination HI")
    "m16c addressof dsp:8[An] relative destination HI")
  (attrs (ISA m16c))
  (attrs (ISA m16c))
  (mode HI)
  (mode HI)
  (args (Dst16An Dsp-16-u8))
  (args (Dst16An Dsp-16-u8))
  (syntax "${Dsp-16-u8}[$Dst16An]")
  (syntax "${Dsp-16-u8}[$Dst16An]")
  (base-ifield f-12-4)
  (base-ifield f-12-4)
  (encoding
  (encoding
    (+ (f-12-2 2) (f-14-1 0) Dsp-16-u8 Dst16An))
    (+ (f-12-2 2) (f-14-1 0) Dsp-16-u8 Dst16An))
  (ifield-assertion
  (ifield-assertion
    (andif (eq f-12-2 2) (eq f-14-1 0)))
    (andif (eq f-12-2 2) (eq f-14-1 0)))
  (getter (add Dsp-16-u8 Dst16An))
  (getter (add Dsp-16-u8 Dst16An))
  (setter (nop))
  (setter (nop))
)
)
(define-derived-operand
(define-derived-operand
  (name dst16-16-16-An-relative-Mova-HI)
  (name dst16-16-16-An-relative-Mova-HI)
  (comment
  (comment
    "m16c addressof dsp:16[An] relative destination HI")
    "m16c addressof dsp:16[An] relative destination HI")
  (attrs (ISA m16c))
  (attrs (ISA m16c))
  (mode HI)
  (mode HI)
  (args (Dst16An Dsp-16-u16))
  (args (Dst16An Dsp-16-u16))
  (syntax "${Dsp-16-u16}[$Dst16An]")
  (syntax "${Dsp-16-u16}[$Dst16An]")
  (base-ifield f-12-4)
  (base-ifield f-12-4)
  (encoding
  (encoding
    (+ (f-12-2 3) (f-14-1 0) Dsp-16-u16 Dst16An))
    (+ (f-12-2 3) (f-14-1 0) Dsp-16-u16 Dst16An))
  (ifield-assertion
  (ifield-assertion
    (andif (eq f-12-2 3) (eq f-14-1 0)))
    (andif (eq f-12-2 3) (eq f-14-1 0)))
  (getter (add Dsp-16-u16 Dst16An))
  (getter (add Dsp-16-u16 Dst16An))
  (setter (nop))
  (setter (nop))
  )
  )
(define-derived-operand
(define-derived-operand
  (name dst16-16-8-SB-relative-Mova-HI)
  (name dst16-16-8-SB-relative-Mova-HI)
  (comment
  (comment
    "m16c addressof dsp:8[sb] relative destination HI")
    "m16c addressof dsp:8[sb] relative destination HI")
  (attrs (ISA m16c))
  (attrs (ISA m16c))
  (mode HI)
  (mode HI)
  (args (Dsp-16-u8))
  (args (Dsp-16-u8))
  (syntax "${Dsp-16-u8}[sb]")
  (syntax "${Dsp-16-u8}[sb]")
  (base-ifield f-12-4)
  (base-ifield f-12-4)
  (encoding (+ (f-12-4 10) Dsp-16-u8))
  (encoding (+ (f-12-4 10) Dsp-16-u8))
  (ifield-assertion (eq f-12-4 10))
  (ifield-assertion (eq f-12-4 10))
  (getter (add Dsp-16-u8 (reg h-sb)))
  (getter (add Dsp-16-u8 (reg h-sb)))
  (setter (nop))
  (setter (nop))
)
)
(define-derived-operand
(define-derived-operand
  (name dst16-16-16-SB-relative-Mova-HI)
  (name dst16-16-16-SB-relative-Mova-HI)
  (comment
  (comment
    "m16c addressof dsp:16[sb] relative destination HI")
    "m16c addressof dsp:16[sb] relative destination HI")
  (attrs (ISA m16c))
  (attrs (ISA m16c))
  (mode HI)
  (mode HI)
  (args (Dsp-16-u16))
  (args (Dsp-16-u16))
  (syntax "${Dsp-16-u16}[sb]")
  (syntax "${Dsp-16-u16}[sb]")
  (base-ifield f-12-4)
  (base-ifield f-12-4)
  (encoding (+ (f-12-4 14) Dsp-16-u16))
  (encoding (+ (f-12-4 14) Dsp-16-u16))
  (ifield-assertion (eq f-12-4 14))
  (ifield-assertion (eq f-12-4 14))
  (getter (add Dsp-16-u16 (reg h-sb)))
  (getter (add Dsp-16-u16 (reg h-sb)))
  (setter (nop))
  (setter (nop))
  )
  )
(define-derived-operand
(define-derived-operand
  (name dst16-16-8-FB-relative-Mova-HI)
  (name dst16-16-8-FB-relative-Mova-HI)
  (comment
  (comment
    "m16c addressof dsp:8[fb] relative destination HI")
    "m16c addressof dsp:8[fb] relative destination HI")
  (attrs (ISA m16c))
  (attrs (ISA m16c))
  (mode HI)
  (mode HI)
  (args (Dsp-16-s8))
  (args (Dsp-16-s8))
  (syntax "${Dsp-16-s8}[fb]")
  (syntax "${Dsp-16-s8}[fb]")
  (base-ifield f-12-4)
  (base-ifield f-12-4)
  (encoding (+ (f-12-4 11) Dsp-16-s8))
  (encoding (+ (f-12-4 11) Dsp-16-s8))
  (ifield-assertion (eq f-12-4 11))
  (ifield-assertion (eq f-12-4 11))
  (getter (add Dsp-16-s8 (reg h-fb)))
  (getter (add Dsp-16-s8 (reg h-fb)))
  (setter (nop))
  (setter (nop))
    )
    )
(define-derived-operand
(define-derived-operand
  (name dst16-16-16-absolute-Mova-HI)
  (name dst16-16-16-absolute-Mova-HI)
  (comment "m16c addressof absolute address HI")
  (comment "m16c addressof absolute address HI")
  (attrs (ISA m16c))
  (attrs (ISA m16c))
  (mode HI)
  (mode HI)
  (args (Dsp-16-u16))
  (args (Dsp-16-u16))
  (syntax "${Dsp-16-u16}")
  (syntax "${Dsp-16-u16}")
  (base-ifield f-12-4)
  (base-ifield f-12-4)
  (encoding (+ (f-12-4 15) Dsp-16-u16))
  (encoding (+ (f-12-4 15) Dsp-16-u16))
  (ifield-assertion (eq f-12-4 15))
  (ifield-assertion (eq f-12-4 15))
  (getter Dsp-16-u16)
  (getter Dsp-16-u16)
  (setter (nop))
  (setter (nop))
  )
  )
(define-anyof-operand
(define-anyof-operand
  (name dst16-16-Mova-HI)
  (name dst16-16-Mova-HI)
  (comment "m16c addressof destination operand of size HI with additional fields at offset 16")
  (comment "m16c addressof destination operand of size HI with additional fields at offset 16")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode HI)
  (mode HI)
  (choices
  (choices
   dst16-An-indirect-Mova-HI
   dst16-An-indirect-Mova-HI
   dst16-16-8-An-relative-Mova-HI
   dst16-16-8-An-relative-Mova-HI
   dst16-16-16-An-relative-Mova-HI
   dst16-16-16-An-relative-Mova-HI
   dst16-16-8-SB-relative-Mova-HI
   dst16-16-8-SB-relative-Mova-HI
   dst16-16-16-SB-relative-Mova-HI
   dst16-16-16-SB-relative-Mova-HI
   dst16-16-8-FB-relative-Mova-HI
   dst16-16-8-FB-relative-Mova-HI
   dst16-16-16-absolute-Mova-HI
   dst16-16-16-absolute-Mova-HI
  )
  )
)
)
(define-derived-operand
(define-derived-operand
  (name dst32-An-indirect-Unprefixed-Mova-SI)
  (name dst32-An-indirect-Unprefixed-Mova-SI)
  (comment "m32c addressof An indirect destination SI")
  (comment "m32c addressof An indirect destination SI")
  (attrs (ISA m32c))
  (attrs (ISA m32c))
  (mode SI)
  (mode SI)
  (args (Dst32AnUnprefixed))
  (args (Dst32AnUnprefixed))
  (syntax "[$Dst32AnUnprefixed]")
  (syntax "[$Dst32AnUnprefixed]")
  (base-ifield f-4-6)
  (base-ifield f-4-6)
  (encoding
  (encoding
    (+ (f-4-3 0) (f-8-1 0) Dst32AnUnprefixed))
    (+ (f-4-3 0) (f-8-1 0) Dst32AnUnprefixed))
  (ifield-assertion
  (ifield-assertion
    (andif (eq f-4-3 0) (eq f-8-1 0)))
    (andif (eq f-4-3 0) (eq f-8-1 0)))
  (getter Dst32AnUnprefixed)
  (getter Dst32AnUnprefixed)
  (setter (nop))
  (setter (nop))
  )
  )
(define-derived-operand
(define-derived-operand
  (name dst32-16-8-An-relative-Unprefixed-Mova-SI)
  (name dst32-16-8-An-relative-Unprefixed-Mova-SI)
  (comment "m32c addressof dsp:8[An] relative destination SI")
  (comment "m32c addressof dsp:8[An] relative destination SI")
  (attrs (ISA m32c))
  (attrs (ISA m32c))
  (mode SI)
  (mode SI)
  (args (Dst32AnUnprefixed Dsp-16-u8))
  (args (Dst32AnUnprefixed Dsp-16-u8))
  (syntax "${Dsp-16-u8}[$Dst32AnUnprefixed]")
  (syntax "${Dsp-16-u8}[$Dst32AnUnprefixed]")
  (base-ifield f-4-6)
  (base-ifield f-4-6)
  (encoding
  (encoding
    (+ (f-4-3 1)
    (+ (f-4-3 1)
       (f-8-1 0)
       (f-8-1 0)
       Dsp-16-u8
       Dsp-16-u8
       Dst32AnUnprefixed))
       Dst32AnUnprefixed))
  (ifield-assertion
  (ifield-assertion
    (andif (eq f-4-3 1) (eq f-8-1 0)))
    (andif (eq f-4-3 1) (eq f-8-1 0)))
  (getter (add Dsp-16-u8 Dst32AnUnprefixed))
  (getter (add Dsp-16-u8 Dst32AnUnprefixed))
  (setter (nop))
  (setter (nop))
)
)
(define-derived-operand
(define-derived-operand
  (name dst32-16-16-An-relative-Unprefixed-Mova-SI)
  (name dst32-16-16-An-relative-Unprefixed-Mova-SI)
  (comment
  (comment
    "m32c addressof dsp:16[An] relative destination SI")
    "m32c addressof dsp:16[An] relative destination SI")
  (attrs (ISA m32c))
  (attrs (ISA m32c))
  (mode SI)
  (mode SI)
  (args (Dst32AnUnprefixed Dsp-16-u16))
  (args (Dst32AnUnprefixed Dsp-16-u16))
  (syntax "${Dsp-16-u16}[$Dst32AnUnprefixed]")
  (syntax "${Dsp-16-u16}[$Dst32AnUnprefixed]")
  (base-ifield f-4-6)
  (base-ifield f-4-6)
  (encoding
  (encoding
    (+ (f-4-3 2)
    (+ (f-4-3 2)
       (f-8-1 0)
       (f-8-1 0)
       Dsp-16-u16
       Dsp-16-u16
       Dst32AnUnprefixed))
       Dst32AnUnprefixed))
  (ifield-assertion
  (ifield-assertion
    (andif (eq f-4-3 2) (eq f-8-1 0)))
    (andif (eq f-4-3 2) (eq f-8-1 0)))
  (getter (add Dsp-16-u16 Dst32AnUnprefixed))
  (getter (add Dsp-16-u16 Dst32AnUnprefixed))
  (setter (nop))
  (setter (nop))
  )
  )
(define-derived-operand
(define-derived-operand
  (name dst32-16-24-An-relative-Unprefixed-Mova-SI)
  (name dst32-16-24-An-relative-Unprefixed-Mova-SI)
  (comment "addressof m32c dsp:16[An] relative destination SI")
  (comment "addressof m32c dsp:16[An] relative destination SI")
  (attrs (ISA m32c))
  (attrs (ISA m32c))
  (mode SI)
  (mode SI)
  (args (Dst32AnUnprefixed Dsp-16-u24))
  (args (Dst32AnUnprefixed Dsp-16-u24))
  (syntax "${Dsp-16-u24}[$Dst32AnUnprefixed]")
  (syntax "${Dsp-16-u24}[$Dst32AnUnprefixed]")
  (base-ifield f-4-6)
  (base-ifield f-4-6)
  (encoding
  (encoding
    (+ (f-4-3 3)
    (+ (f-4-3 3)
       (f-8-1 0)
       (f-8-1 0)
       Dsp-16-u24
       Dsp-16-u24
       Dst32AnUnprefixed))
       Dst32AnUnprefixed))
  (ifield-assertion
  (ifield-assertion
    (andif (eq f-4-3 3) (eq f-8-1 0)))
    (andif (eq f-4-3 3) (eq f-8-1 0)))
  (getter (add Dsp-16-u24 Dst32AnUnprefixed))
  (getter (add Dsp-16-u24 Dst32AnUnprefixed))
  (setter (nop))
  (setter (nop))
  )
  )
(define-derived-operand
(define-derived-operand
  (name dst32-16-8-SB-relative-Unprefixed-Mova-SI)
  (name dst32-16-8-SB-relative-Unprefixed-Mova-SI)
  (comment "m32c addressof dsp:8[sb] relative destination SI")
  (comment "m32c addressof dsp:8[sb] relative destination SI")
  (attrs (ISA m32c))
  (attrs (ISA m32c))
  (mode SI)
  (mode SI)
  (args (Dsp-16-u8))
  (args (Dsp-16-u8))
  (syntax "${Dsp-16-u8}[sb]")
  (syntax "${Dsp-16-u8}[sb]")
  (base-ifield f-4-6)
  (base-ifield f-4-6)
  (encoding (+ (f-4-3 1) (f-8-2 2) Dsp-16-u8))
  (encoding (+ (f-4-3 1) (f-8-2 2) Dsp-16-u8))
  (ifield-assertion
  (ifield-assertion
    (andif (eq f-4-3 1) (eq f-8-2 2)))
    (andif (eq f-4-3 1) (eq f-8-2 2)))
  (getter (add Dsp-16-u8 (reg h-sb)))
  (getter (add Dsp-16-u8 (reg h-sb)))
  (setter (nop))
  (setter (nop))
  )
  )
(define-derived-operand
(define-derived-operand
  (name dst32-16-16-SB-relative-Unprefixed-Mova-SI)
  (name dst32-16-16-SB-relative-Unprefixed-Mova-SI)
  (comment "m32c addressof dsp:16[sb] relative destination SI")
  (comment "m32c addressof dsp:16[sb] relative destination SI")
  (attrs (ISA m32c))
  (attrs (ISA m32c))
  (mode SI)
  (mode SI)
  (args (Dsp-16-u16))
  (args (Dsp-16-u16))
  (syntax "${Dsp-16-u16}[sb]")
  (syntax "${Dsp-16-u16}[sb]")
  (base-ifield f-4-6)
  (base-ifield f-4-6)
  (encoding (+ (f-4-3 2) (f-8-2 2) Dsp-16-u16))
  (encoding (+ (f-4-3 2) (f-8-2 2) Dsp-16-u16))
  (ifield-assertion
  (ifield-assertion
    (andif (eq f-4-3 2) (eq f-8-2 2)))
    (andif (eq f-4-3 2) (eq f-8-2 2)))
  (getter (add Dsp-16-u16 (reg h-sb)))
  (getter (add Dsp-16-u16 (reg h-sb)))
  (setter (nop))
  (setter (nop))
  )
  )
(define-derived-operand
(define-derived-operand
  (name dst32-16-8-FB-relative-Unprefixed-Mova-SI)
  (name dst32-16-8-FB-relative-Unprefixed-Mova-SI)
  (comment "m32c addressof dsp:8[fb] relative destination SI")
  (comment "m32c addressof dsp:8[fb] relative destination SI")
  (attrs (ISA m32c))
  (attrs (ISA m32c))
  (mode SI)
  (mode SI)
  (args (Dsp-16-s8))
  (args (Dsp-16-s8))
  (syntax "${Dsp-16-s8}[fb]")
  (syntax "${Dsp-16-s8}[fb]")
  (base-ifield f-4-6)
  (base-ifield f-4-6)
  (encoding (+ (f-4-3 1) (f-8-2 3) Dsp-16-s8))
  (encoding (+ (f-4-3 1) (f-8-2 3) Dsp-16-s8))
  (ifield-assertion
  (ifield-assertion
    (andif (eq f-4-3 1) (eq f-8-2 3)))
    (andif (eq f-4-3 1) (eq f-8-2 3)))
  (getter (add Dsp-16-s8 (reg h-fb)))
  (getter (add Dsp-16-s8 (reg h-fb)))
  (setter (nop))
  (setter (nop))
  )
  )
(define-derived-operand
(define-derived-operand
  (name dst32-16-16-FB-relative-Unprefixed-Mova-SI)
  (name dst32-16-16-FB-relative-Unprefixed-Mova-SI)
  (comment "m32c addressof dsp:16[fb] relative destination SI")
  (comment "m32c addressof dsp:16[fb] relative destination SI")
  (attrs (ISA m32c))
  (attrs (ISA m32c))
  (mode SI)
  (mode SI)
  (args (Dsp-16-s16))
  (args (Dsp-16-s16))
  (syntax "${Dsp-16-s16}[fb]")
  (syntax "${Dsp-16-s16}[fb]")
  (base-ifield f-4-6)
  (base-ifield f-4-6)
  (encoding (+ (f-4-3 2) (f-8-2 3) Dsp-16-s16))
  (encoding (+ (f-4-3 2) (f-8-2 3) Dsp-16-s16))
  (ifield-assertion
  (ifield-assertion
    (andif (eq f-4-3 2) (eq f-8-2 3)))
    (andif (eq f-4-3 2) (eq f-8-2 3)))
  (getter (add Dsp-16-s16 (reg h-fb)))
  (getter (add Dsp-16-s16 (reg h-fb)))
  (setter (nop))
  (setter (nop))
  )
  )
(define-derived-operand
(define-derived-operand
  (name dst32-16-16-absolute-Unprefixed-Mova-SI)
  (name dst32-16-16-absolute-Unprefixed-Mova-SI)
  (comment "m32c addressof absolute address SI") (attrs (ISA m32c))
  (comment "m32c addressof absolute address SI") (attrs (ISA m32c))
  (mode SI)
  (mode SI)
  (args (Dsp-16-u16))
  (args (Dsp-16-u16))
  (syntax "${Dsp-16-u16}")
  (syntax "${Dsp-16-u16}")
  (base-ifield f-4-6)
  (base-ifield f-4-6)
  (encoding (+ (f-4-3 3) (f-8-2 3) Dsp-16-u16))
  (encoding (+ (f-4-3 3) (f-8-2 3) Dsp-16-u16))
  (ifield-assertion
  (ifield-assertion
    (andif (eq f-4-3 3) (eq f-8-2 3)))
    (andif (eq f-4-3 3) (eq f-8-2 3)))
  (getter Dsp-16-u16)
  (getter Dsp-16-u16)
  (setter (nop))
  (setter (nop))
  )
  )
(define-derived-operand
(define-derived-operand
  (name dst32-16-24-absolute-Unprefixed-Mova-SI)
  (name dst32-16-24-absolute-Unprefixed-Mova-SI)
  (comment "m32c addressof absolute address SI") (attrs (ISA m32c))
  (comment "m32c addressof absolute address SI") (attrs (ISA m32c))
  (mode SI)
  (mode SI)
  (args (Dsp-16-u24))
  (args (Dsp-16-u24))
  (syntax "${Dsp-16-u24}")
  (syntax "${Dsp-16-u24}")
  (base-ifield f-4-6)
  (base-ifield f-4-6)
  (encoding (+ (f-4-3 3) (f-8-2 2) Dsp-16-u24))
  (encoding (+ (f-4-3 3) (f-8-2 2) Dsp-16-u24))
  (ifield-assertion
  (ifield-assertion
    (andif (eq f-4-3 3) (eq f-8-2 2)))
    (andif (eq f-4-3 3) (eq f-8-2 2)))
  (getter Dsp-16-u24)
  (getter Dsp-16-u24)
  (setter (nop))
  (setter (nop))
  )
  )
(define-anyof-operand
(define-anyof-operand
  (name dst32-16-Unprefixed-Mova-SI)
  (name dst32-16-Unprefixed-Mova-SI)
  (comment
  (comment
    "m32c addressof destination operand of size SI with additional fields at offset 16")
    "m32c addressof destination operand of size SI with additional fields at offset 16")
  (attrs (ISA m32c))
  (attrs (ISA m32c))
  (mode SI)
  (mode SI)
  (choices
  (choices
    dst32-An-indirect-Unprefixed-Mova-SI
    dst32-An-indirect-Unprefixed-Mova-SI
    dst32-16-8-An-relative-Unprefixed-Mova-SI
    dst32-16-8-An-relative-Unprefixed-Mova-SI
    dst32-16-16-An-relative-Unprefixed-Mova-SI
    dst32-16-16-An-relative-Unprefixed-Mova-SI
    dst32-16-24-An-relative-Unprefixed-Mova-SI
    dst32-16-24-An-relative-Unprefixed-Mova-SI
    dst32-16-8-SB-relative-Unprefixed-Mova-SI
    dst32-16-8-SB-relative-Unprefixed-Mova-SI
    dst32-16-16-SB-relative-Unprefixed-Mova-SI
    dst32-16-16-SB-relative-Unprefixed-Mova-SI
    dst32-16-8-FB-relative-Unprefixed-Mova-SI
    dst32-16-8-FB-relative-Unprefixed-Mova-SI
    dst32-16-16-FB-relative-Unprefixed-Mova-SI
    dst32-16-16-FB-relative-Unprefixed-Mova-SI
    dst32-16-16-absolute-Unprefixed-Mova-SI
    dst32-16-16-absolute-Unprefixed-Mova-SI
    dst32-16-24-absolute-Unprefixed-Mova-SI))
    dst32-16-24-absolute-Unprefixed-Mova-SI))
(define-pmacro (dst32-16-operand xmode)
(define-pmacro (dst32-16-operand xmode)
  (begin
  (begin
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst32-16-Unprefixed- xmode))
      (name (.sym dst32-16-Unprefixed- xmode))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 16"))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 16"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst32-Rn-direct-Unprefixed- xmode)
       (.sym dst32-Rn-direct-Unprefixed- xmode)
       (.sym dst32-An-direct-Unprefixed- xmode)
       (.sym dst32-An-direct-Unprefixed- xmode)
       (.sym dst32-An-indirect-Unprefixed- xmode)
       (.sym dst32-An-indirect-Unprefixed- xmode)
       (.sym dst32-16-8-An-relative-Unprefixed- xmode)
       (.sym dst32-16-8-An-relative-Unprefixed- xmode)
       (.sym dst32-16-16-An-relative-Unprefixed- xmode)
       (.sym dst32-16-16-An-relative-Unprefixed- xmode)
       (.sym dst32-16-24-An-relative-Unprefixed- xmode)
       (.sym dst32-16-24-An-relative-Unprefixed- xmode)
       (.sym dst32-16-8-SB-relative-Unprefixed- xmode)
       (.sym dst32-16-8-SB-relative-Unprefixed- xmode)
       (.sym dst32-16-16-SB-relative-Unprefixed- xmode)
       (.sym dst32-16-16-SB-relative-Unprefixed- xmode)
       (.sym dst32-16-8-FB-relative-Unprefixed- xmode)
       (.sym dst32-16-8-FB-relative-Unprefixed- xmode)
       (.sym dst32-16-16-FB-relative-Unprefixed- xmode)
       (.sym dst32-16-16-FB-relative-Unprefixed- xmode)
       (.sym dst32-16-16-absolute-Unprefixed- xmode)
       (.sym dst32-16-16-absolute-Unprefixed- xmode)
       (.sym dst32-16-24-absolute-Unprefixed- xmode)
       (.sym dst32-16-24-absolute-Unprefixed- xmode)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst32-16-8-Unprefixed- xmode))
      (name (.sym dst32-16-8-Unprefixed- xmode))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 16"))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 16"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst32-16-8-An-relative-Unprefixed- xmode)
       (.sym dst32-16-8-An-relative-Unprefixed- xmode)
       (.sym dst32-16-8-SB-relative-Unprefixed- xmode)
       (.sym dst32-16-8-SB-relative-Unprefixed- xmode)
       (.sym dst32-16-8-FB-relative-Unprefixed- xmode)
       (.sym dst32-16-8-FB-relative-Unprefixed- xmode)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst32-16-16-Unprefixed- xmode))
      (name (.sym dst32-16-16-Unprefixed- xmode))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 16"))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 16"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst32-16-16-An-relative-Unprefixed- xmode)
       (.sym dst32-16-16-An-relative-Unprefixed- xmode)
       (.sym dst32-16-16-SB-relative-Unprefixed- xmode)
       (.sym dst32-16-16-SB-relative-Unprefixed- xmode)
       (.sym dst32-16-16-FB-relative-Unprefixed- xmode)
       (.sym dst32-16-16-FB-relative-Unprefixed- xmode)
       (.sym dst32-16-16-absolute-Unprefixed- xmode)
       (.sym dst32-16-16-absolute-Unprefixed- xmode)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst32-16-16sa-Unprefixed- xmode))
      (name (.sym dst32-16-16sa-Unprefixed- xmode))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 16"))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 16"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst32-16-16-SB-relative-Unprefixed- xmode)
       (.sym dst32-16-16-SB-relative-Unprefixed- xmode)
       (.sym dst32-16-16-FB-relative-Unprefixed- xmode)
       (.sym dst32-16-16-FB-relative-Unprefixed- xmode)
       (.sym dst32-16-16-absolute-Unprefixed- xmode)
       (.sym dst32-16-16-absolute-Unprefixed- xmode)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst32-16-24-Unprefixed- xmode))
      (name (.sym dst32-16-24-Unprefixed- xmode))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 16"))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 16"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst32-16-24-An-relative-Unprefixed- xmode)
       (.sym dst32-16-24-An-relative-Unprefixed- xmode)
       (.sym dst32-16-24-absolute-Unprefixed- xmode)
       (.sym dst32-16-24-absolute-Unprefixed- xmode)
      )
      )
    )
    )
  )
  )
)
)
(dst32-16-operand QI)
(dst32-16-operand QI)
(dst32-16-operand HI)
(dst32-16-operand HI)
(dst32-16-operand SI)
(dst32-16-operand SI)
(define-pmacro (dst32-16-Ext-operand smode dmode)
(define-pmacro (dst32-16-Ext-operand smode dmode)
  (begin
  (begin
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst32-16-ExtUnprefixed- smode))
      (name (.sym dst32-16-ExtUnprefixed- smode))
      (comment (.str "m32c destination operand of size " smode " with additional fields at offset 16"))
      (comment (.str "m32c destination operand of size " smode " with additional fields at offset 16"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode dmode)
      (mode dmode)
      (choices
      (choices
       (.sym dst32-Rn-direct-ExtUnprefixed- smode)
       (.sym dst32-Rn-direct-ExtUnprefixed- smode)
       (.sym dst32-An-direct-Unprefixed- dmode) ; ExtUnprefixed mode not required for this operand -- use the normal dmode version
       (.sym dst32-An-direct-Unprefixed- dmode) ; ExtUnprefixed mode not required for this operand -- use the normal dmode version
       (.sym dst32-An-indirect-ExtUnprefixed- smode)
       (.sym dst32-An-indirect-ExtUnprefixed- smode)
       (.sym dst32-16-8-An-relative-ExtUnprefixed- smode)
       (.sym dst32-16-8-An-relative-ExtUnprefixed- smode)
       (.sym dst32-16-16-An-relative-ExtUnprefixed- smode)
       (.sym dst32-16-16-An-relative-ExtUnprefixed- smode)
       (.sym dst32-16-24-An-relative-ExtUnprefixed- smode)
       (.sym dst32-16-24-An-relative-ExtUnprefixed- smode)
       (.sym dst32-16-8-SB-relative-ExtUnprefixed- smode)
       (.sym dst32-16-8-SB-relative-ExtUnprefixed- smode)
       (.sym dst32-16-16-SB-relative-ExtUnprefixed- smode)
       (.sym dst32-16-16-SB-relative-ExtUnprefixed- smode)
       (.sym dst32-16-8-FB-relative-ExtUnprefixed- smode)
       (.sym dst32-16-8-FB-relative-ExtUnprefixed- smode)
       (.sym dst32-16-16-FB-relative-ExtUnprefixed- smode)
       (.sym dst32-16-16-FB-relative-ExtUnprefixed- smode)
       (.sym dst32-16-16-absolute-ExtUnprefixed- smode)
       (.sym dst32-16-16-absolute-ExtUnprefixed- smode)
       (.sym dst32-16-24-absolute-ExtUnprefixed- smode)
       (.sym dst32-16-24-absolute-ExtUnprefixed- smode)
      )
      )
    )
    )
  )
  )
)
)
(dst32-16-Ext-operand QI HI)
(dst32-16-Ext-operand QI HI)
(dst32-16-Ext-operand HI SI)
(dst32-16-Ext-operand HI SI)
(define-anyof-operand
(define-anyof-operand
  (name dst32-16-Unprefixed-Mulex-HI)
  (name dst32-16-Unprefixed-Mulex-HI)
  (comment "m32c destination operand of size HI with additional fields at offset 16")
  (comment "m32c destination operand of size HI with additional fields at offset 16")
  (attrs (machine 32))
  (attrs (machine 32))
  (mode HI)
  (mode HI)
  (choices
  (choices
   dst32-R3-direct-Unprefixed-HI
   dst32-R3-direct-Unprefixed-HI
   dst32-An-direct-Unprefixed-HI
   dst32-An-direct-Unprefixed-HI
   dst32-An-indirect-Unprefixed-HI
   dst32-An-indirect-Unprefixed-HI
   dst32-16-8-An-relative-Unprefixed-HI
   dst32-16-8-An-relative-Unprefixed-HI
   dst32-16-16-An-relative-Unprefixed-HI
   dst32-16-16-An-relative-Unprefixed-HI
   dst32-16-24-An-relative-Unprefixed-HI
   dst32-16-24-An-relative-Unprefixed-HI
   dst32-16-8-SB-relative-Unprefixed-HI
   dst32-16-8-SB-relative-Unprefixed-HI
   dst32-16-16-SB-relative-Unprefixed-HI
   dst32-16-16-SB-relative-Unprefixed-HI
   dst32-16-8-FB-relative-Unprefixed-HI
   dst32-16-8-FB-relative-Unprefixed-HI
   dst32-16-16-FB-relative-Unprefixed-HI
   dst32-16-16-FB-relative-Unprefixed-HI
   dst32-16-16-absolute-Unprefixed-HI
   dst32-16-16-absolute-Unprefixed-HI
   dst32-16-24-absolute-Unprefixed-HI
   dst32-16-24-absolute-Unprefixed-HI
  )
  )
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Destination operands with possible additional fields at offset 24 bits
; Destination operands with possible additional fields at offset 24 bits
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (dst16-24-operand xmode)
(define-pmacro (dst16-24-operand xmode)
  (begin
  (begin
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst16-24- xmode))
      (name (.sym dst16-24- xmode))
      (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 24"))
      (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 24"))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst16-Rn-direct- xmode)
       (.sym dst16-Rn-direct- xmode)
       (.sym dst16-An-direct- xmode)
       (.sym dst16-An-direct- xmode)
       (.sym dst16-An-indirect- xmode)
       (.sym dst16-An-indirect- xmode)
       (.sym dst16-24-8-An-relative- xmode)
       (.sym dst16-24-8-An-relative- xmode)
       (.sym dst16-24-16-An-relative- xmode)
       (.sym dst16-24-16-An-relative- xmode)
       (.sym dst16-24-8-SB-relative- xmode)
       (.sym dst16-24-8-SB-relative- xmode)
       (.sym dst16-24-16-SB-relative- xmode)
       (.sym dst16-24-16-SB-relative- xmode)
       (.sym dst16-24-8-FB-relative- xmode)
       (.sym dst16-24-8-FB-relative- xmode)
       (.sym dst16-24-16-absolute- xmode)
       (.sym dst16-24-16-absolute- xmode)
      )
      )
    )
    )
  )
  )
)
)
(dst16-24-operand QI)
(dst16-24-operand QI)
(dst16-24-operand HI)
(dst16-24-operand HI)
(define-pmacro (dst32-24-operand xmode)
(define-pmacro (dst32-24-operand xmode)
  (begin
  (begin
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst32-24-Unprefixed- xmode))
      (name (.sym dst32-24-Unprefixed- xmode))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst32-Rn-direct-Unprefixed- xmode)
       (.sym dst32-Rn-direct-Unprefixed- xmode)
       (.sym dst32-An-direct-Unprefixed- xmode)
       (.sym dst32-An-direct-Unprefixed- xmode)
       (.sym dst32-An-indirect-Unprefixed- xmode)
       (.sym dst32-An-indirect-Unprefixed- xmode)
       (.sym dst32-24-8-An-relative-Unprefixed- xmode)
       (.sym dst32-24-8-An-relative-Unprefixed- xmode)
       (.sym dst32-24-16-An-relative-Unprefixed- xmode)
       (.sym dst32-24-16-An-relative-Unprefixed- xmode)
       (.sym dst32-24-24-An-relative-Unprefixed- xmode)
       (.sym dst32-24-24-An-relative-Unprefixed- xmode)
       (.sym dst32-24-8-SB-relative-Unprefixed- xmode)
       (.sym dst32-24-8-SB-relative-Unprefixed- xmode)
       (.sym dst32-24-16-SB-relative-Unprefixed- xmode)
       (.sym dst32-24-16-SB-relative-Unprefixed- xmode)
       (.sym dst32-24-8-FB-relative-Unprefixed- xmode)
       (.sym dst32-24-8-FB-relative-Unprefixed- xmode)
       (.sym dst32-24-16-FB-relative-Unprefixed- xmode)
       (.sym dst32-24-16-FB-relative-Unprefixed- xmode)
       (.sym dst32-24-16-absolute-Unprefixed- xmode)
       (.sym dst32-24-16-absolute-Unprefixed- xmode)
       (.sym dst32-24-24-absolute-Unprefixed- xmode)
       (.sym dst32-24-24-absolute-Unprefixed- xmode)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst32-24-Prefixed- xmode))
      (name (.sym dst32-24-Prefixed- xmode))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst32-Rn-direct-Prefixed- xmode)
       (.sym dst32-Rn-direct-Prefixed- xmode)
       (.sym dst32-An-direct-Prefixed- xmode)
       (.sym dst32-An-direct-Prefixed- xmode)
       (.sym dst32-An-indirect-Prefixed- xmode)
       (.sym dst32-An-indirect-Prefixed- xmode)
       (.sym dst32-24-8-An-relative-Prefixed- xmode)
       (.sym dst32-24-8-An-relative-Prefixed- xmode)
       (.sym dst32-24-16-An-relative-Prefixed- xmode)
       (.sym dst32-24-16-An-relative-Prefixed- xmode)
       (.sym dst32-24-24-An-relative-Prefixed- xmode)
       (.sym dst32-24-24-An-relative-Prefixed- xmode)
       (.sym dst32-24-8-SB-relative-Prefixed- xmode)
       (.sym dst32-24-8-SB-relative-Prefixed- xmode)
       (.sym dst32-24-16-SB-relative-Prefixed- xmode)
       (.sym dst32-24-16-SB-relative-Prefixed- xmode)
       (.sym dst32-24-8-FB-relative-Prefixed- xmode)
       (.sym dst32-24-8-FB-relative-Prefixed- xmode)
       (.sym dst32-24-16-FB-relative-Prefixed- xmode)
       (.sym dst32-24-16-FB-relative-Prefixed- xmode)
       (.sym dst32-24-16-absolute-Prefixed- xmode)
       (.sym dst32-24-16-absolute-Prefixed- xmode)
       (.sym dst32-24-24-absolute-Prefixed- xmode)
       (.sym dst32-24-24-absolute-Prefixed- xmode)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst32-24-8-Prefixed- xmode))
      (name (.sym dst32-24-8-Prefixed- xmode))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst32-24-8-An-relative-Prefixed- xmode)
       (.sym dst32-24-8-An-relative-Prefixed- xmode)
       (.sym dst32-24-8-SB-relative-Prefixed- xmode)
       (.sym dst32-24-8-SB-relative-Prefixed- xmode)
       (.sym dst32-24-8-FB-relative-Prefixed- xmode)
       (.sym dst32-24-8-FB-relative-Prefixed- xmode)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst32-24-16-Prefixed- xmode))
      (name (.sym dst32-24-16-Prefixed- xmode))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst32-24-16-An-relative-Prefixed- xmode)
       (.sym dst32-24-16-An-relative-Prefixed- xmode)
       (.sym dst32-24-16-SB-relative-Prefixed- xmode)
       (.sym dst32-24-16-SB-relative-Prefixed- xmode)
       (.sym dst32-24-16-FB-relative-Prefixed- xmode)
       (.sym dst32-24-16-FB-relative-Prefixed- xmode)
       (.sym dst32-24-16-absolute-Prefixed- xmode)
       (.sym dst32-24-16-absolute-Prefixed- xmode)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst32-24-24-Prefixed- xmode))
      (name (.sym dst32-24-24-Prefixed- xmode))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst32-24-24-An-relative-Prefixed- xmode)
       (.sym dst32-24-24-An-relative-Prefixed- xmode)
       (.sym dst32-24-24-absolute-Prefixed- xmode)
       (.sym dst32-24-24-absolute-Prefixed- xmode)
      )
      )
    )
    )
;     (define-anyof-operand
;     (define-anyof-operand
;       (name (.sym dst32-24-indirect- xmode))
;       (name (.sym dst32-24-indirect- xmode))
;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (choices
;       (choices
;        (.sym dst32-An-indirect-indirect- xmode)
;        (.sym dst32-An-indirect-indirect- xmode)
;        (.sym dst32-24-8-An-relative-indirect- xmode)
;        (.sym dst32-24-8-An-relative-indirect- xmode)
;        (.sym dst32-24-16-An-relative-indirect- xmode)
;        (.sym dst32-24-16-An-relative-indirect- xmode)
;        (.sym dst32-24-24-An-relative-indirect- xmode)
;        (.sym dst32-24-24-An-relative-indirect- xmode)
;        (.sym dst32-24-8-SB-relative-indirect- xmode)
;        (.sym dst32-24-8-SB-relative-indirect- xmode)
;        (.sym dst32-24-16-SB-relative-indirect- xmode)
;        (.sym dst32-24-16-SB-relative-indirect- xmode)
;        (.sym dst32-24-8-FB-relative-indirect- xmode)
;        (.sym dst32-24-8-FB-relative-indirect- xmode)
;        (.sym dst32-24-16-FB-relative-indirect- xmode)
;        (.sym dst32-24-16-FB-relative-indirect- xmode)
;       )
;       )
;     )
;     )
;     (define-anyof-operand
;     (define-anyof-operand
;       (name (.sym dst32-basic-indirect- xmode))
;       (name (.sym dst32-basic-indirect- xmode))
;       (comment (.str "m32c destination operand of size " xmode " with no additional fields"))
;       (comment (.str "m32c destination operand of size " xmode " with no additional fields"))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (choices
;       (choices
;        (.sym dst32-An-indirect-indirect- xmode)
;        (.sym dst32-An-indirect-indirect- xmode)
;       )
;       )
;     )
;     )
;     (define-anyof-operand
;     (define-anyof-operand
;       (name (.sym dst32-24-8-indirect- xmode))
;       (name (.sym dst32-24-8-indirect- xmode))
;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (choices
;       (choices
;        (.sym dst32-24-8-An-relative-indirect- xmode)
;        (.sym dst32-24-8-An-relative-indirect- xmode)
;        (.sym dst32-24-8-SB-relative-indirect- xmode)
;        (.sym dst32-24-8-SB-relative-indirect- xmode)
;        (.sym dst32-24-8-FB-relative-indirect- xmode)
;        (.sym dst32-24-8-FB-relative-indirect- xmode)
;       )
;       )
;     )
;     )
;     (define-anyof-operand
;     (define-anyof-operand
;       (name (.sym dst32-24-16-indirect- xmode))
;       (name (.sym dst32-24-16-indirect- xmode))
;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (choices
;       (choices
;        (.sym dst32-24-16-An-relative-indirect- xmode)
;        (.sym dst32-24-16-An-relative-indirect- xmode)
;        (.sym dst32-24-16-SB-relative-indirect- xmode)
;        (.sym dst32-24-16-SB-relative-indirect- xmode)
;        (.sym dst32-24-16-FB-relative-indirect- xmode)
;        (.sym dst32-24-16-FB-relative-indirect- xmode)
;       )
;       )
;     )
;     )
;     (define-anyof-operand
;     (define-anyof-operand
;       (name (.sym dst32-24-24-indirect- xmode))
;       (name (.sym dst32-24-24-indirect- xmode))
;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (choices
;       (choices
;        (.sym dst32-24-24-An-relative-indirect- xmode)
;        (.sym dst32-24-24-An-relative-indirect- xmode)
;       )
;       )
;     )
;     )
;     (define-anyof-operand
;     (define-anyof-operand
;       (name (.sym dst32-24-absolute-indirect- xmode))
;       (name (.sym dst32-24-absolute-indirect- xmode))
;       (comment (.str "m32c destination operand of size " xmode " absolute indirect"))
;       (comment (.str "m32c destination operand of size " xmode " absolute indirect"))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (choices
;       (choices
;        (.sym dst32-24-16-absolute-indirect-derived- xmode)
;        (.sym dst32-24-16-absolute-indirect-derived- xmode)
;        (.sym dst32-24-24-absolute-indirect-derived- xmode)
;        (.sym dst32-24-24-absolute-indirect-derived- xmode)
;       )
;       )
;     )
;     )
;     (define-anyof-operand
;     (define-anyof-operand
;       (name (.sym dst32-24-16-absolute-indirect- xmode))
;       (name (.sym dst32-24-16-absolute-indirect- xmode))
;       (comment (.str "m32c destination operand of size " xmode " absolute indirect"))
;       (comment (.str "m32c destination operand of size " xmode " absolute indirect"))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (choices
;       (choices
;        (.sym dst32-24-16-absolute-indirect-derived- xmode)
;        (.sym dst32-24-16-absolute-indirect-derived- xmode)
;       )
;       )
;     )
;     )
;     (define-anyof-operand
;     (define-anyof-operand
;       (name (.sym dst32-24-24-absolute-indirect- xmode))
;       (name (.sym dst32-24-24-absolute-indirect- xmode))
;       (comment (.str "m32c destination operand of size " xmode " absolute indirect"))
;       (comment (.str "m32c destination operand of size " xmode " absolute indirect"))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (choices
;       (choices
;        (.sym dst32-24-24-absolute-indirect-derived- xmode)
;        (.sym dst32-24-24-absolute-indirect-derived- xmode)
;       )
;       )
;     )
;     )
  )
  )
)
)
(dst32-24-operand QI)
(dst32-24-operand QI)
(dst32-24-operand HI)
(dst32-24-operand HI)
(dst32-24-operand SI)
(dst32-24-operand SI)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Destination operands with possible additional fields at offset 32 bits
; Destination operands with possible additional fields at offset 32 bits
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (dst16-32-operand xmode)
(define-pmacro (dst16-32-operand xmode)
  (begin
  (begin
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst16-32- xmode))
      (name (.sym dst16-32- xmode))
      (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 32"))
      (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 32"))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst16-Rn-direct- xmode)
       (.sym dst16-Rn-direct- xmode)
       (.sym dst16-An-direct- xmode)
       (.sym dst16-An-direct- xmode)
       (.sym dst16-An-indirect- xmode)
       (.sym dst16-An-indirect- xmode)
       (.sym dst16-32-8-An-relative- xmode)
       (.sym dst16-32-8-An-relative- xmode)
       (.sym dst16-32-16-An-relative- xmode)
       (.sym dst16-32-16-An-relative- xmode)
       (.sym dst16-32-8-SB-relative- xmode)
       (.sym dst16-32-8-SB-relative- xmode)
       (.sym dst16-32-16-SB-relative- xmode)
       (.sym dst16-32-16-SB-relative- xmode)
       (.sym dst16-32-8-FB-relative- xmode)
       (.sym dst16-32-8-FB-relative- xmode)
       (.sym dst16-32-16-absolute- xmode)
       (.sym dst16-32-16-absolute- xmode)
      )
      )
    )
    )
  )
  )
)
)
(dst16-32-operand QI)
(dst16-32-operand QI)
(dst16-32-operand HI)
(dst16-32-operand HI)
; This macro actually handles operands at offset 32, 40 and 48 bits
; This macro actually handles operands at offset 32, 40 and 48 bits
(define-pmacro (dst32-32plus-operand offset xmode)
(define-pmacro (dst32-32plus-operand offset xmode)
  (begin
  (begin
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst32- offset -Unprefixed- xmode))
      (name (.sym dst32- offset -Unprefixed- xmode))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 32"))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 32"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst32-Rn-direct-Unprefixed- xmode)
       (.sym dst32-Rn-direct-Unprefixed- xmode)
       (.sym dst32-An-direct-Unprefixed- xmode)
       (.sym dst32-An-direct-Unprefixed- xmode)
       (.sym dst32-An-indirect-Unprefixed- xmode)
       (.sym dst32-An-indirect-Unprefixed- xmode)
       (.sym dst32- offset -8-An-relative-Unprefixed- xmode)
       (.sym dst32- offset -8-An-relative-Unprefixed- xmode)
       (.sym dst32- offset -16-An-relative-Unprefixed- xmode)
       (.sym dst32- offset -16-An-relative-Unprefixed- xmode)
       (.sym dst32- offset -24-An-relative-Unprefixed- xmode)
       (.sym dst32- offset -24-An-relative-Unprefixed- xmode)
       (.sym dst32- offset -8-SB-relative-Unprefixed- xmode)
       (.sym dst32- offset -8-SB-relative-Unprefixed- xmode)
       (.sym dst32- offset -16-SB-relative-Unprefixed- xmode)
       (.sym dst32- offset -16-SB-relative-Unprefixed- xmode)
       (.sym dst32- offset -8-FB-relative-Unprefixed- xmode)
       (.sym dst32- offset -8-FB-relative-Unprefixed- xmode)
       (.sym dst32- offset -16-FB-relative-Unprefixed- xmode)
       (.sym dst32- offset -16-FB-relative-Unprefixed- xmode)
       (.sym dst32- offset -16-absolute-Unprefixed- xmode)
       (.sym dst32- offset -16-absolute-Unprefixed- xmode)
       (.sym dst32- offset -24-absolute-Unprefixed- xmode)
       (.sym dst32- offset -24-absolute-Unprefixed- xmode)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst32- offset -Prefixed- xmode))
      (name (.sym dst32- offset -Prefixed- xmode))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 32"))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 32"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst32-Rn-direct-Prefixed- xmode)
       (.sym dst32-Rn-direct-Prefixed- xmode)
       (.sym dst32-An-direct-Prefixed- xmode)
       (.sym dst32-An-direct-Prefixed- xmode)
       (.sym dst32-An-indirect-Prefixed- xmode)
       (.sym dst32-An-indirect-Prefixed- xmode)
       (.sym dst32- offset -8-An-relative-Prefixed- xmode)
       (.sym dst32- offset -8-An-relative-Prefixed- xmode)
       (.sym dst32- offset -16-An-relative-Prefixed- xmode)
       (.sym dst32- offset -16-An-relative-Prefixed- xmode)
       (.sym dst32- offset -24-An-relative-Prefixed- xmode)
       (.sym dst32- offset -24-An-relative-Prefixed- xmode)
       (.sym dst32- offset -8-SB-relative-Prefixed- xmode)
       (.sym dst32- offset -8-SB-relative-Prefixed- xmode)
       (.sym dst32- offset -16-SB-relative-Prefixed- xmode)
       (.sym dst32- offset -16-SB-relative-Prefixed- xmode)
       (.sym dst32- offset -8-FB-relative-Prefixed- xmode)
       (.sym dst32- offset -8-FB-relative-Prefixed- xmode)
       (.sym dst32- offset -16-FB-relative-Prefixed- xmode)
       (.sym dst32- offset -16-FB-relative-Prefixed- xmode)
       (.sym dst32- offset -16-absolute-Prefixed- xmode)
       (.sym dst32- offset -16-absolute-Prefixed- xmode)
       (.sym dst32- offset -24-absolute-Prefixed- xmode)
       (.sym dst32- offset -24-absolute-Prefixed- xmode)
      )
      )
    )
    )
;     (define-anyof-operand
;     (define-anyof-operand
;       (name (.sym dst32- offset -indirect- xmode))
;       (name (.sym dst32- offset -indirect- xmode))
;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 32"))
;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 32"))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (choices
;       (choices
;        (.sym dst32-An-indirect-indirect- xmode)
;        (.sym dst32-An-indirect-indirect- xmode)
;        (.sym dst32- offset -8-An-relative-indirect- xmode)
;        (.sym dst32- offset -8-An-relative-indirect- xmode)
;        (.sym dst32- offset -16-An-relative-indirect- xmode)
;        (.sym dst32- offset -16-An-relative-indirect- xmode)
;        (.sym dst32- offset -24-An-relative-indirect- xmode)
;        (.sym dst32- offset -24-An-relative-indirect- xmode)
;        (.sym dst32- offset -8-SB-relative-indirect- xmode)
;        (.sym dst32- offset -8-SB-relative-indirect- xmode)
;        (.sym dst32- offset -16-SB-relative-indirect- xmode)
;        (.sym dst32- offset -16-SB-relative-indirect- xmode)
;        (.sym dst32- offset -8-FB-relative-indirect- xmode)
;        (.sym dst32- offset -8-FB-relative-indirect- xmode)
;        (.sym dst32- offset -16-FB-relative-indirect- xmode)
;        (.sym dst32- offset -16-FB-relative-indirect- xmode)
;       )
;       )
;     )
;     )
;     (define-anyof-operand
;     (define-anyof-operand
;       (name (.sym dst32- offset -absolute-indirect- xmode))
;       (name (.sym dst32- offset -absolute-indirect- xmode))
;       (comment (.str "m32c destination operand of size " xmode " absolute indirect"))
;       (comment (.str "m32c destination operand of size " xmode " absolute indirect"))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (choices
;       (choices
;        (.sym dst32- offset -16-absolute-indirect-derived- xmode)
;        (.sym dst32- offset -16-absolute-indirect-derived- xmode)
;        (.sym dst32- offset -24-absolute-indirect-derived- xmode)
;        (.sym dst32- offset -24-absolute-indirect-derived- xmode)
;       )
;       )
;     )
;     )
  )
  )
)
)
(dst32-32plus-operand 32 QI)
(dst32-32plus-operand 32 QI)
(dst32-32plus-operand 32 HI)
(dst32-32plus-operand 32 HI)
(dst32-32plus-operand 32 SI)
(dst32-32plus-operand 32 SI)
(dst32-32plus-operand 40 QI)
(dst32-32plus-operand 40 QI)
(dst32-32plus-operand 40 HI)
(dst32-32plus-operand 40 HI)
(dst32-32plus-operand 40 SI)
(dst32-32plus-operand 40 SI)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Destination operands with possible additional fields at offset 48 bits
; Destination operands with possible additional fields at offset 48 bits
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (dst32-48-operand offset xmode)
(define-pmacro (dst32-48-operand offset xmode)
  (begin
  (begin
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst32- offset -Prefixed- xmode))
      (name (.sym dst32- offset -Prefixed- xmode))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 32"))
      (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 32"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst32-Rn-direct-Prefixed- xmode)
       (.sym dst32-Rn-direct-Prefixed- xmode)
       (.sym dst32-An-direct-Prefixed- xmode)
       (.sym dst32-An-direct-Prefixed- xmode)
       (.sym dst32-An-indirect-Prefixed- xmode)
       (.sym dst32-An-indirect-Prefixed- xmode)
       (.sym dst32- offset -8-An-relative-Prefixed- xmode)
       (.sym dst32- offset -8-An-relative-Prefixed- xmode)
       (.sym dst32- offset -16-An-relative-Prefixed- xmode)
       (.sym dst32- offset -16-An-relative-Prefixed- xmode)
       (.sym dst32- offset -24-An-relative-Prefixed- xmode)
       (.sym dst32- offset -24-An-relative-Prefixed- xmode)
       (.sym dst32- offset -8-SB-relative-Prefixed- xmode)
       (.sym dst32- offset -8-SB-relative-Prefixed- xmode)
       (.sym dst32- offset -16-SB-relative-Prefixed- xmode)
       (.sym dst32- offset -16-SB-relative-Prefixed- xmode)
       (.sym dst32- offset -8-FB-relative-Prefixed- xmode)
       (.sym dst32- offset -8-FB-relative-Prefixed- xmode)
       (.sym dst32- offset -16-FB-relative-Prefixed- xmode)
       (.sym dst32- offset -16-FB-relative-Prefixed- xmode)
       (.sym dst32- offset -16-absolute-Prefixed- xmode)
       (.sym dst32- offset -16-absolute-Prefixed- xmode)
       (.sym dst32- offset -24-absolute-Prefixed- xmode)
       (.sym dst32- offset -24-absolute-Prefixed- xmode)
      )
      )
    )
    )
;     (define-anyof-operand
;     (define-anyof-operand
;       (name (.sym dst32- offset -indirect- xmode))
;       (name (.sym dst32- offset -indirect- xmode))
;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 32"))
;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 32"))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (choices
;       (choices
;        (.sym dst32-An-indirect-indirect- xmode)
;        (.sym dst32-An-indirect-indirect- xmode)
;        (.sym dst32- offset -8-An-relative-indirect- xmode)
;        (.sym dst32- offset -8-An-relative-indirect- xmode)
;        (.sym dst32- offset -16-An-relative-indirect- xmode)
;        (.sym dst32- offset -16-An-relative-indirect- xmode)
;        (.sym dst32- offset -24-An-relative-indirect- xmode)
;        (.sym dst32- offset -24-An-relative-indirect- xmode)
;        (.sym dst32- offset -8-SB-relative-indirect- xmode)
;        (.sym dst32- offset -8-SB-relative-indirect- xmode)
;        (.sym dst32- offset -16-SB-relative-indirect- xmode)
;        (.sym dst32- offset -16-SB-relative-indirect- xmode)
;        (.sym dst32- offset -8-FB-relative-indirect- xmode)
;        (.sym dst32- offset -8-FB-relative-indirect- xmode)
;        (.sym dst32- offset -16-FB-relative-indirect- xmode)
;        (.sym dst32- offset -16-FB-relative-indirect- xmode)
;       )
;       )
;     )
;     )
;     (define-anyof-operand
;     (define-anyof-operand
;       (name (.sym dst32- offset -absolute-indirect- xmode))
;       (name (.sym dst32- offset -absolute-indirect- xmode))
;       (comment (.str "m32c destination operand of size " xmode " absolute indirect"))
;       (comment (.str "m32c destination operand of size " xmode " absolute indirect"))
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (choices
;       (choices
;        (.sym dst32- offset -16-absolute-indirect-derived- xmode)
;        (.sym dst32- offset -16-absolute-indirect-derived- xmode)
;        (.sym dst32- offset -24-absolute-indirect-derived- xmode)
;        (.sym dst32- offset -24-absolute-indirect-derived- xmode)
;       )
;       )
;     )
;     )
  )
  )
)
)
(dst32-48-operand 48 QI)
(dst32-48-operand 48 QI)
(dst32-48-operand 48 HI)
(dst32-48-operand 48 HI)
(dst32-48-operand 48 SI)
(dst32-48-operand 48 SI)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Bit operands for m16c
; Bit operands for m16c
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (bit16-operand offset)
(define-pmacro (bit16-operand offset)
  (begin
  (begin
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym bit16- offset))
      (name (.sym bit16- offset))
      (comment (.str "m16c bit operand with possible additional fields at offset 24"))
      (comment (.str "m16c bit operand with possible additional fields at offset 24"))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode BI)
      (mode BI)
      (choices
      (choices
       bit16-Rn-direct
       bit16-Rn-direct
       bit16-An-direct
       bit16-An-direct
       bit16-An-indirect
       bit16-An-indirect
       (.sym bit16- offset -8-An-relative)
       (.sym bit16- offset -8-An-relative)
       (.sym bit16- offset -16-An-relative)
       (.sym bit16- offset -16-An-relative)
       (.sym bit16- offset -8-SB-relative)
       (.sym bit16- offset -8-SB-relative)
       (.sym bit16- offset -16-SB-relative)
       (.sym bit16- offset -16-SB-relative)
       (.sym bit16- offset -8-FB-relative)
       (.sym bit16- offset -8-FB-relative)
       (.sym bit16- offset -16-absolute)
       (.sym bit16- offset -16-absolute)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym bit16- offset -basic))
      (name (.sym bit16- offset -basic))
      (comment (.str "m16c bit operand with no additional fields"))
      (comment (.str "m16c bit operand with no additional fields"))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode BI)
      (mode BI)
      (choices
      (choices
       bit16-An-indirect
       bit16-An-indirect
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym bit16- offset -8))
      (name (.sym bit16- offset -8))
      (comment (.str "m16c bit operand with possible additional fields at offset 24"))
      (comment (.str "m16c bit operand with possible additional fields at offset 24"))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode BI)
      (mode BI)
      (choices
      (choices
       bit16-Rn-direct
       bit16-Rn-direct
       bit16-An-direct
       bit16-An-direct
       (.sym bit16- offset -8-An-relative)
       (.sym bit16- offset -8-An-relative)
       (.sym bit16- offset -8-SB-relative)
       (.sym bit16- offset -8-SB-relative)
       (.sym bit16- offset -8-FB-relative)
       (.sym bit16- offset -8-FB-relative)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym bit16- offset -16))
      (name (.sym bit16- offset -16))
      (comment (.str "m16c bit operand with possible additional fields at offset 24"))
      (comment (.str "m16c bit operand with possible additional fields at offset 24"))
      (attrs (machine 16))
      (attrs (machine 16))
      (mode BI)
      (mode BI)
      (choices
      (choices
       (.sym bit16- offset -16-An-relative)
       (.sym bit16- offset -16-An-relative)
       (.sym bit16- offset -16-SB-relative)
       (.sym bit16- offset -16-SB-relative)
       (.sym bit16- offset -16-absolute)
       (.sym bit16- offset -16-absolute)
      )
      )
    )
    )
  )
  )
)
)
(bit16-operand 16)
(bit16-operand 16)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Bit operands for m32c
; Bit operands for m32c
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (bit32-operand offset group)
(define-pmacro (bit32-operand offset group)
  (begin
  (begin
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym bit32- offset - group))
      (name (.sym bit32- offset - group))
      (comment (.str "m32c bit operand with possible additional fields at offset 24"))
      (comment (.str "m32c bit operand with possible additional fields at offset 24"))
      (attrs (machine 32))
      (attrs (machine 32))
      (mode BI)
      (mode BI)
      (choices
      (choices
       (.sym bit32-Rn-direct- group)
       (.sym bit32-Rn-direct- group)
       (.sym bit32-An-direct- group)
       (.sym bit32-An-direct- group)
       (.sym bit32-An-indirect- group)
       (.sym bit32-An-indirect- group)
       (.sym bit32- offset -11-An-relative- group)
       (.sym bit32- offset -11-An-relative- group)
       (.sym bit32- offset -19-An-relative- group)
       (.sym bit32- offset -19-An-relative- group)
       (.sym bit32- offset -27-An-relative- group)
       (.sym bit32- offset -27-An-relative- group)
       (.sym bit32- offset -11-SB-relative- group)
       (.sym bit32- offset -11-SB-relative- group)
       (.sym bit32- offset -19-SB-relative- group)
       (.sym bit32- offset -19-SB-relative- group)
       (.sym bit32- offset -11-FB-relative- group)
       (.sym bit32- offset -11-FB-relative- group)
       (.sym bit32- offset -19-FB-relative- group)
       (.sym bit32- offset -19-FB-relative- group)
       (.sym bit32- offset -19-absolute- group)
       (.sym bit32- offset -19-absolute- group)
       (.sym bit32- offset -27-absolute- group)
       (.sym bit32- offset -27-absolute- group)
      )
      )
    )
    )
  )
  )
)
)
(bit32-operand 16 Unprefixed)
(bit32-operand 16 Unprefixed)
(bit32-operand 24 Prefixed)
(bit32-operand 24 Prefixed)
(define-anyof-operand
(define-anyof-operand
  (name bit32-basic-Unprefixed)
  (name bit32-basic-Unprefixed)
  (comment "m32c bit operand with no additional fields")
  (comment "m32c bit operand with no additional fields")
  (attrs (machine 32))
  (attrs (machine 32))
  (mode BI)
  (mode BI)
  (choices
  (choices
   bit32-Rn-direct-Unprefixed
   bit32-Rn-direct-Unprefixed
   bit32-An-direct-Unprefixed
   bit32-An-direct-Unprefixed
   bit32-An-indirect-Unprefixed
   bit32-An-indirect-Unprefixed
  )
  )
)
)
(define-anyof-operand
(define-anyof-operand
  (name bit32-16-8-Unprefixed)
  (name bit32-16-8-Unprefixed)
  (comment "m32c bit operand with 8 bit additional fields")
  (comment "m32c bit operand with 8 bit additional fields")
  (attrs (machine 32))
  (attrs (machine 32))
  (mode BI)
  (mode BI)
  (choices
  (choices
   bit32-16-11-An-relative-Unprefixed
   bit32-16-11-An-relative-Unprefixed
   bit32-16-11-SB-relative-Unprefixed
   bit32-16-11-SB-relative-Unprefixed
   bit32-16-11-FB-relative-Unprefixed
   bit32-16-11-FB-relative-Unprefixed
  )
  )
)
)
(define-anyof-operand
(define-anyof-operand
  (name bit32-16-16-Unprefixed)
  (name bit32-16-16-Unprefixed)
  (comment "m32c bit operand with 16 bit additional fields")
  (comment "m32c bit operand with 16 bit additional fields")
  (attrs (machine 32))
  (attrs (machine 32))
  (mode BI)
  (mode BI)
  (choices
  (choices
   bit32-16-19-An-relative-Unprefixed
   bit32-16-19-An-relative-Unprefixed
   bit32-16-19-SB-relative-Unprefixed
   bit32-16-19-SB-relative-Unprefixed
   bit32-16-19-FB-relative-Unprefixed
   bit32-16-19-FB-relative-Unprefixed
   bit32-16-19-absolute-Unprefixed
   bit32-16-19-absolute-Unprefixed
  )
  )
)
)
(define-anyof-operand
(define-anyof-operand
  (name bit32-16-24-Unprefixed)
  (name bit32-16-24-Unprefixed)
  (comment "m32c bit operand with 24 bit additional fields")
  (comment "m32c bit operand with 24 bit additional fields")
  (attrs (machine 32))
  (attrs (machine 32))
  (mode BI)
  (mode BI)
  (choices
  (choices
   bit32-16-27-An-relative-Unprefixed
   bit32-16-27-An-relative-Unprefixed
   bit32-16-27-absolute-Unprefixed
   bit32-16-27-absolute-Unprefixed
  )
  )
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Operands for short format binary insns
; Operands for short format binary insns
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-anyof-operand
(define-anyof-operand
  (name src16-2-S)
  (name src16-2-S)
  (comment "m16c source operand of size QI for short format insns")
  (comment "m16c source operand of size QI for short format insns")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode QI)
  (mode QI)
  (choices
  (choices
   src16-2-S-8-SB-relative-QI
   src16-2-S-8-SB-relative-QI
   src16-2-S-8-FB-relative-QI
   src16-2-S-8-FB-relative-QI
   src16-2-S-16-absolute-QI
   src16-2-S-16-absolute-QI
  )
  )
)
)
(define-anyof-operand
(define-anyof-operand
  (name src32-2-S-QI)
  (name src32-2-S-QI)
  (comment "m32c source operand of size QI for short format insns")
  (comment "m32c source operand of size QI for short format insns")
  (attrs (machine 32))
  (attrs (machine 32))
  (mode QI)
  (mode QI)
  (choices
  (choices
   src32-2-S-8-SB-relative-QI
   src32-2-S-8-SB-relative-QI
   src32-2-S-8-FB-relative-QI
   src32-2-S-8-FB-relative-QI
   src32-2-S-16-absolute-QI
   src32-2-S-16-absolute-QI
  )
  )
)
)
(define-anyof-operand
(define-anyof-operand
  (name src32-2-S-HI)
  (name src32-2-S-HI)
  (comment "m32c source operand of size QI for short format insns")
  (comment "m32c source operand of size QI for short format insns")
  (attrs (machine 32))
  (attrs (machine 32))
  (mode HI)
  (mode HI)
  (choices
  (choices
   src32-2-S-8-SB-relative-HI
   src32-2-S-8-SB-relative-HI
   src32-2-S-8-FB-relative-HI
   src32-2-S-8-FB-relative-HI
   src32-2-S-16-absolute-HI
   src32-2-S-16-absolute-HI
  )
  )
)
)
(define-anyof-operand
(define-anyof-operand
  (name Dst16-3-S-8)
  (name Dst16-3-S-8)
  (comment "m16c destination operand of size QI for short format insns")
  (comment "m16c destination operand of size QI for short format insns")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode QI)
  (mode QI)
  (choices
  (choices
   dst16-3-S-R0l-direct-QI
   dst16-3-S-R0l-direct-QI
   dst16-3-S-R0h-direct-QI
   dst16-3-S-R0h-direct-QI
   dst16-3-S-8-8-SB-relative-QI
   dst16-3-S-8-8-SB-relative-QI
   dst16-3-S-8-8-FB-relative-QI
   dst16-3-S-8-8-FB-relative-QI
   dst16-3-S-8-16-absolute-QI
   dst16-3-S-8-16-absolute-QI
  )
  )
)
)
(define-anyof-operand
(define-anyof-operand
  (name Dst16-3-S-16)
  (name Dst16-3-S-16)
  (comment "m16c destination operand of size QI for short format insns")
  (comment "m16c destination operand of size QI for short format insns")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode QI)
  (mode QI)
  (choices
  (choices
   dst16-3-S-R0l-direct-QI
   dst16-3-S-R0l-direct-QI
   dst16-3-S-R0h-direct-QI
   dst16-3-S-R0h-direct-QI
   dst16-3-S-16-8-SB-relative-QI
   dst16-3-S-16-8-SB-relative-QI
   dst16-3-S-16-8-FB-relative-QI
   dst16-3-S-16-8-FB-relative-QI
   dst16-3-S-16-16-absolute-QI
   dst16-3-S-16-16-absolute-QI
  )
  )
)
)
(define-anyof-operand
(define-anyof-operand
  (name srcdst16-r0l-r0h-S)
  (name srcdst16-r0l-r0h-S)
  (comment "m16c r0l/r0h operand of size QI for short format insns")
  (comment "m16c r0l/r0h operand of size QI for short format insns")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode SI)
  (mode SI)
  (choices
  (choices
   srcdst16-r0l-r0h-S-derived
   srcdst16-r0l-r0h-S-derived
  )
  )
)
)
(define-anyof-operand
(define-anyof-operand
  (name dst32-2-S-basic-QI)
  (name dst32-2-S-basic-QI)
  (comment "m32c r0l operand of size QI for short format binary insns")
  (comment "m32c r0l operand of size QI for short format binary insns")
  (attrs (machine 32))
  (attrs (machine 32))
  (mode QI)
  (mode QI)
  (choices
  (choices
   dst32-2-S-R0l-direct-QI
   dst32-2-S-R0l-direct-QI
  )
  )
)
)
(define-anyof-operand
(define-anyof-operand
  (name dst32-2-S-basic-HI)
  (name dst32-2-S-basic-HI)
  (comment "m32c r0 operand of size HI for short format binary insns")
  (comment "m32c r0 operand of size HI for short format binary insns")
  (attrs (machine 32))
  (attrs (machine 32))
  (mode HI)
  (mode HI)
  (choices
  (choices
   dst32-2-S-R0-direct-HI
   dst32-2-S-R0-direct-HI
  )
  )
)
)
(define-pmacro (dst32-2-S-operands xmode)
(define-pmacro (dst32-2-S-operands xmode)
  (begin
  (begin
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst32-2-S-8- xmode))
      (name (.sym dst32-2-S-8- xmode))
      (comment "m32c operand of size " xmode " for short format binary insns")
      (comment "m32c operand of size " xmode " for short format binary insns")
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst32-2-S-8-SB-relative- xmode)
       (.sym dst32-2-S-8-SB-relative- xmode)
       (.sym dst32-2-S-8-FB-relative- xmode)
       (.sym dst32-2-S-8-FB-relative- xmode)
      )
      )
    )
    )
    (define-anyof-operand
    (define-anyof-operand
      (name (.sym dst32-2-S-16- xmode))
      (name (.sym dst32-2-S-16- xmode))
      (comment "m32c operand of size " xmode " for short format binary insns")
      (comment "m32c operand of size " xmode " for short format binary insns")
      (attrs (machine 32))
      (attrs (machine 32))
      (mode xmode)
      (mode xmode)
      (choices
      (choices
       (.sym dst32-2-S-16-absolute- xmode)
       (.sym dst32-2-S-16-absolute- xmode)
      )
      )
    )
    )
;     (define-anyof-operand
;     (define-anyof-operand
;       (name (.sym dst32-2-S-8-indirect- xmode))
;       (name (.sym dst32-2-S-8-indirect- xmode))
;       (comment "m32c operand of size " xmode " for short format binary insns")
;       (comment "m32c operand of size " xmode " for short format binary insns")
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (choices
;       (choices
;        (.sym dst32-2-S-8-SB-relative-indirect- xmode)
;        (.sym dst32-2-S-8-SB-relative-indirect- xmode)
;        (.sym dst32-2-S-8-FB-relative-indirect- xmode)
;        (.sym dst32-2-S-8-FB-relative-indirect- xmode)
;       )
;       )
;     )
;     )
;     (define-anyof-operand
;     (define-anyof-operand
;       (name (.sym dst32-2-S-absolute-indirect- xmode))
;       (name (.sym dst32-2-S-absolute-indirect- xmode))
;       (comment "m32c operand of size " xmode " for short format binary insns")
;       (comment "m32c operand of size " xmode " for short format binary insns")
;       (attrs (machine 32))
;       (attrs (machine 32))
;       (mode xmode)
;       (mode xmode)
;       (choices
;       (choices
;        (.sym dst32-2-S-16-absolute-indirect- xmode)
;        (.sym dst32-2-S-16-absolute-indirect- xmode)
;       )
;       )
;     )
;     )
  )
  )
)
)
(dst32-2-S-operands QI)
(dst32-2-S-operands QI)
(dst32-2-S-operands HI)
(dst32-2-S-operands HI)
(dst32-2-S-operands SI)
(dst32-2-S-operands SI)
(define-anyof-operand
(define-anyof-operand
  (name dst32-an-S)
  (name dst32-an-S)
  (comment "m32c An operand for short format binary insns")
  (comment "m32c An operand for short format binary insns")
  (attrs (machine 32))
  (attrs (machine 32))
  (mode HI)
  (mode HI)
  (choices
  (choices
   dst32-1-S-A0-direct-HI
   dst32-1-S-A0-direct-HI
   dst32-1-S-A1-direct-HI
   dst32-1-S-A1-direct-HI
  )
  )
)
)
(define-anyof-operand
(define-anyof-operand
  (name bit16-11-S)
  (name bit16-11-S)
  (comment "m16c bit operand for short format insns")
  (comment "m16c bit operand for short format insns")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode BI)
  (mode BI)
  (choices
  (choices
   bit16-11-SB-relative-S
   bit16-11-SB-relative-S
  )
  )
)
)
(define-anyof-operand
(define-anyof-operand
  (name Rn16-push-S-anyof)
  (name Rn16-push-S-anyof)
  (comment "m16c bit operand for short format insns")
  (comment "m16c bit operand for short format insns")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode QI)
  (mode QI)
  (choices
  (choices
   Rn16-push-S-derived
   Rn16-push-S-derived
  )
  )
)
)
(define-anyof-operand
(define-anyof-operand
  (name An16-push-S-anyof)
  (name An16-push-S-anyof)
  (comment "m16c bit operand for short format insns")
  (comment "m16c bit operand for short format insns")
  (attrs (machine 16))
  (attrs (machine 16))
  (mode HI)
  (mode HI)
  (choices
  (choices
   An16-push-S-derived
   An16-push-S-derived
  )
  )
)
)
;=============================================================
;=============================================================
; Common macros for instruction definitions
; Common macros for instruction definitions
;
;
(define-pmacro (set-z x)
(define-pmacro (set-z x)
  (sequence ()
  (sequence ()
            (set zbit (zflag x)))
            (set zbit (zflag x)))
)
)
(define-pmacro (set-s x)
(define-pmacro (set-s x)
  (sequence ()
  (sequence ()
            (set sbit (nflag x)))
            (set sbit (nflag x)))
)
)
(define-pmacro (set-z-and-s x)
(define-pmacro (set-z-and-s x)
  (sequence ()
  (sequence ()
            (set-z x)
            (set-z x)
            (set-s x))
            (set-s x))
)
)


;=============================================================
;=============================================================
; Unary insn macros
; Unary insn macros
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (unary-insn-defn-g mach group mode wstr op encoding sem opg)
(define-pmacro (unary-insn-defn-g mach group mode wstr op encoding sem opg)
  (dni (.sym op mach wstr - group)
  (dni (.sym op mach wstr - group)
       (.str op wstr opg " dst" mach "-" group "-" mode)
       (.str op wstr opg " dst" mach "-" group "-" mode)
       ((machine mach) RL_1ADDR)
       ((machine mach) RL_1ADDR)
       (.str op wstr opg " ${dst" mach "-" group "-" mode "}")
       (.str op wstr opg " ${dst" mach "-" group "-" mode "}")
       encoding
       encoding
       (sem mode (.sym dst mach - group - mode))
       (sem mode (.sym dst mach - group - mode))
       ())
       ())
)
)
(define-pmacro (unary-insn-defn mach group mode wstr op encoding sem)
(define-pmacro (unary-insn-defn mach group mode wstr op encoding sem)
  (unary-insn-defn-g mach group mode wstr op encoding sem "")
  (unary-insn-defn-g mach group mode wstr op encoding sem "")
)
)
(define-pmacro (unary16-defn-g mode wstr wbit op opc1 opc2 opc3 sem opg)
(define-pmacro (unary16-defn-g mode wstr wbit op opc1 opc2 opc3 sem opg)
  (unary-insn-defn-g 16 16 mode wstr op
  (unary-insn-defn-g 16 16 mode wstr op
                     (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16- mode))
                     (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16- mode))
                     sem opg)
                     sem opg)
)
)
(define-pmacro (unary16-defn mode wstr wbit op opc1 opc2 opc3 sem)
(define-pmacro (unary16-defn mode wstr wbit op opc1 opc2 opc3 sem)
  (unary-16-defn-g mode wstr wbit op opc1 opc2 opc3 sem "")
  (unary-16-defn-g mode wstr wbit op opc1 opc2 opc3 sem "")
)
)
(define-pmacro (unary32-defn-g mode wstr wbit op opc1 opc2 opc3 sem opg)
(define-pmacro (unary32-defn-g mode wstr wbit op opc1 opc2 opc3 sem opg)
  (begin
  (begin
    ; Multi insns are tried for assembly in the reverse order in which they appear here, so
    ; Multi insns are tried for assembly in the reverse order in which they appear here, so
    ; define the absolute-indirect insns first in order to prevent them from being selected
    ; define the absolute-indirect insns first in order to prevent them from being selected
    ; when the mode is register-indirect
    ; when the mode is register-indirect
;     (unary-insn-defn 32 24-absolute-indirect mode wstr op
;     (unary-insn-defn 32 24-absolute-indirect mode wstr op
;                    (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-15-1 wbit) (.sym dst32-24-absolute-indirect- mode) (f-18-2 opc2) (f-20-4 opc3))
;                    (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-15-1 wbit) (.sym dst32-24-absolute-indirect- mode) (f-18-2 opc2) (f-20-4 opc3))
;                    sem)
;                    sem)
    (unary-insn-defn-g 32 16-Unprefixed mode wstr op
    (unary-insn-defn-g 32 16-Unprefixed mode wstr op
                       (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3))
                       (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3))
                       sem opg)
                       sem opg)
;     (unary-insn-defn 32 24-indirect mode wstr op
;     (unary-insn-defn 32 24-indirect mode wstr op
;                    (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-15-1 wbit) (.sym dst32-24-indirect- mode) (f-18-2 opc2) (f-20-4 opc3))
;                    (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-15-1 wbit) (.sym dst32-24-indirect- mode) (f-18-2 opc2) (f-20-4 opc3))
;                    sem)
;                    sem)
  )
  )
)
)
(define-pmacro (unary32-defn mode wstr wbit op opc1 opc2 opc3 sem)
(define-pmacro (unary32-defn mode wstr wbit op opc1 opc2 opc3 sem)
  (unary32-defn-g mode wstr wbit op opc1 opc2 opc3 sem "")
  (unary32-defn-g mode wstr wbit op opc1 opc2 opc3 sem "")
)
)
(define-pmacro (unary-insn-mach-g mach op opc1 opc2 opc3 sem opg)
(define-pmacro (unary-insn-mach-g mach op opc1 opc2 opc3 sem opg)
  (begin
  (begin
    (.apply (.sym unary mach -defn-g) (QI .b 0 op opc1 opc2 opc3 sem opg))
    (.apply (.sym unary mach -defn-g) (QI .b 0 op opc1 opc2 opc3 sem opg))
    (.apply (.sym unary mach -defn-g) (HI .w 1 op opc1 opc2 opc3 sem opg))
    (.apply (.sym unary mach -defn-g) (HI .w 1 op opc1 opc2 opc3 sem opg))
  )
  )
)
)
(define-pmacro (unary-insn-mach mach op opc1 opc2 opc3 sem)
(define-pmacro (unary-insn-mach mach op opc1 opc2 opc3 sem)
  (unary-insn-mach-g mach op opc1 opc2 opc3 sem "")
  (unary-insn-mach-g mach op opc1 opc2 opc3 sem "")
)
)
(define-pmacro (unary-insn op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
(define-pmacro (unary-insn op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
  (begin
  (begin
    (unary-insn-mach-g 16 op opc16-1 opc16-2 opc16-3 sem "")
    (unary-insn-mach-g 16 op opc16-1 opc16-2 opc16-3 sem "")
    (unary-insn-mach-g 32 op opc32-1 opc32-2 opc32-3 sem "")
    (unary-insn-mach-g 32 op opc32-1 opc32-2 opc32-3 sem "")
  )
  )
)
)
(define-pmacro (unary-insn-g op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
(define-pmacro (unary-insn-g op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
  (begin
  (begin
    (unary-insn-mach-g 16 op opc16-1 opc16-2 opc16-3 sem "$G")
    (unary-insn-mach-g 16 op opc16-1 opc16-2 opc16-3 sem "$G")
    (unary-insn-mach-g 32 op opc32-1 opc32-2 opc32-3 sem "$G")
    (unary-insn-mach-g 32 op opc32-1 opc32-2 opc32-3 sem "$G")
  )
  )
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Sign/zero extension macros
; Sign/zero extension macros
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (ext-insn-defn mach group smode dmode wstr op encoding sem)
(define-pmacro (ext-insn-defn mach group smode dmode wstr op encoding sem)
  (dni (.sym op mach wstr - group)
  (dni (.sym op mach wstr - group)
       (.str op wstr " dst" mach "-" group "-" smode)
       (.str op wstr " dst" mach "-" group "-" smode)
       ((machine mach))
       ((machine mach))
       (.str op wstr " ${dst" mach "-" group "-" smode "}")
       (.str op wstr " ${dst" mach "-" group "-" smode "}")
       encoding
       encoding
       (sem smode dmode (.sym dst mach - group - smode) (.sym dst mach - group - smode))
       (sem smode dmode (.sym dst mach - group - smode) (.sym dst mach - group - smode))
       ())
       ())
)
)
(define-pmacro (ext16-defn smode dmode wstr wbit op opc1 opc2 opc3 sem)
(define-pmacro (ext16-defn smode dmode wstr wbit op opc1 opc2 opc3 sem)
  (ext-insn-defn 16 16-Ext smode dmode wstr op
  (ext-insn-defn 16 16-Ext smode dmode wstr op
                   (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-Ext- smode))
                   (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-Ext- smode))
                   sem)
                   sem)
)
)
(define-pmacro (ext32-defn smode dmode wstr wbit op opc1 opc2 opc3 sem)
(define-pmacro (ext32-defn smode dmode wstr wbit op opc1 opc2 opc3 sem)
  (ext-insn-defn 32 16-ExtUnprefixed smode dmode wstr op
  (ext-insn-defn 32 16-ExtUnprefixed smode dmode wstr op
                 (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst32-16-ExtUnprefixed- smode))
                 (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst32-16-ExtUnprefixed- smode))
                 sem)
                 sem)
)
)
(define-pmacro (ext32-binary-insn src-group dst-group op wstr encoding sem)
(define-pmacro (ext32-binary-insn src-group dst-group op wstr encoding sem)
  (dni (.sym op 32 wstr - src-group - dst-group)
  (dni (.sym op 32 wstr - src-group - dst-group)
       (.str op 32 wstr  " src32-" src-group "-QI,dst32-" dst-group "-HI")
       (.str op 32 wstr  " src32-" src-group "-QI,dst32-" dst-group "-HI")
       ((machine 32))
       ((machine 32))
       (.str op wstr " ${src32-" src-group "-QI},${dst32-" dst-group "-HI}")
       (.str op wstr " ${src32-" src-group "-QI},${dst32-" dst-group "-HI}")
       encoding
       encoding
       (sem QI HI (.sym src32- src-group -QI) (.sym dst32 - dst-group -HI))
       (sem QI HI (.sym src32- src-group -QI) (.sym dst32 - dst-group -HI))
       ())
       ())
)
)
(define-pmacro (ext32-binary-defn op wstr opc1 opc2 sem)
(define-pmacro (ext32-binary-defn op wstr opc1 opc2 sem)
  (begin
  (begin
    (ext32-binary-insn basic-ExtPrefixed 24-Prefixed op wstr
    (ext32-binary-insn basic-ExtPrefixed 24-Prefixed op wstr
                       (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 0) src32-basic-ExtPrefixed-QI dst32-24-Prefixed-HI (f-20-4 opc2))
                       (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 0) src32-basic-ExtPrefixed-QI dst32-24-Prefixed-HI (f-20-4 opc2))
                       sem)
                       sem)
    (ext32-binary-insn 24-24-Prefixed 48-Prefixed op wstr
    (ext32-binary-insn 24-24-Prefixed 48-Prefixed op wstr
                       (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 0) src32-24-24-Prefixed-QI dst32-48-Prefixed-HI (f-20-4 opc2))
                       (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 0) src32-24-24-Prefixed-QI dst32-48-Prefixed-HI (f-20-4 opc2))
                       sem)
                       sem)
    (ext32-binary-insn 24-16-Prefixed 40-Prefixed op wstr
    (ext32-binary-insn 24-16-Prefixed 40-Prefixed op wstr
                       (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 0) src32-24-16-Prefixed-QI dst32-40-Prefixed-HI (f-20-4 opc2))
                       (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 0) src32-24-16-Prefixed-QI dst32-40-Prefixed-HI (f-20-4 opc2))
                       sem)
                       sem)
    (ext32-binary-insn 24-8-Prefixed 32-Prefixed op wstr
    (ext32-binary-insn 24-8-Prefixed 32-Prefixed op wstr
                       (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 0) src32-24-8-Prefixed-QI dst32-32-Prefixed-HI (f-20-4 opc2))
                       (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 0) src32-24-8-Prefixed-QI dst32-32-Prefixed-HI (f-20-4 opc2))
                       sem)
                       sem)
  )
  )
)
)
;=============================================================
;=============================================================
; Binary Arithmetic macros
; Binary Arithmetic macros
;
;
;-------------------------------------------------------------
;-------------------------------------------------------------
;.size:S src2,r0[l] -- for m32c
;.size:S src2,r0[l] -- for m32c
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (binary-arith32-S-src2 op xmode wstr wbit opc1 opc2 sem)
(define-pmacro (binary-arith32-S-src2 op xmode wstr wbit opc1 opc2 sem)
  (dni (.sym op 32 wstr .S-src2-r0- xmode)
  (dni (.sym op 32 wstr .S-src2-r0- xmode)
       (.str op 32 wstr ":S src2,r0[l]")
       (.str op 32 wstr ":S src2,r0[l]")
       ((machine 32))
       ((machine 32))
       (.str op wstr"$S ${src32-2-S-" xmode "},${Dst32R0" xmode "-S}")
       (.str op wstr"$S ${src32-2-S-" xmode "},${Dst32R0" xmode "-S}")
       (+ opc1 opc2 (.sym src32-2-S- xmode) (f-7-1 wbit))
       (+ opc1 opc2 (.sym src32-2-S- xmode) (f-7-1 wbit))
       (sem xmode (.sym src32-2-S- xmode) (.sym Dst32R0 xmode -S))
       (sem xmode (.sym src32-2-S- xmode) (.sym Dst32R0 xmode -S))
       ())
       ())
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
;.b:S src2,r0l/r0h -- for m16c
;.b:S src2,r0l/r0h -- for m16c
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (binary-arith16-b-S-src2 op opc1 opc2 sem)
(define-pmacro (binary-arith16-b-S-src2 op opc1 opc2 sem)
  (begin
  (begin
    (dni (.sym op 16 .b.S-src2)
    (dni (.sym op 16 .b.S-src2)
         (.str op ".b:S src2,r0[lh]")
         (.str op ".b:S src2,r0[lh]")
         ((machine 16))
         ((machine 16))
         (.str op ".b$S ${src16-2-S},${Dst16RnQI-S}")
         (.str op ".b$S ${src16-2-S},${Dst16RnQI-S}")
         (+ opc1 opc2 Dst16RnQI-S src16-2-S)
         (+ opc1 opc2 Dst16RnQI-S src16-2-S)
         (sem QI src16-2-S Dst16RnQI-S)
         (sem QI src16-2-S Dst16RnQI-S)
         ())
         ())
    (dni (.sym op 16 .b.S-r0l-r0h)
    (dni (.sym op 16 .b.S-r0l-r0h)
         (.str op ".b:S r0l/r0h")
         (.str op ".b:S r0l/r0h")
         ((machine 16))
         ((machine 16))
         (.str op ".b$S ${srcdst16-r0l-r0h-S}")
         (.str op ".b$S ${srcdst16-r0l-r0h-S}")
         (+ opc1 opc2 srcdst16-r0l-r0h-S)
         (+ opc1 opc2 srcdst16-r0l-r0h-S)
         (if (eq srcdst16-r0l-r0h-S 0)
         (if (eq srcdst16-r0l-r0h-S 0)
             (sem QI R0h R0l)
             (sem QI R0h R0l)
             (sem QI R0l R0h))
             (sem QI R0l R0h))
         ())
         ())
  )
  )
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
;.b:S #imm8,dst3 -- for m16c
;.b:S #imm8,dst3 -- for m16c
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (binary-arith16-b-S-imm8-dst3 op sz opc1 opc2 sem)
(define-pmacro (binary-arith16-b-S-imm8-dst3 op sz opc1 opc2 sem)
  (dni (.sym op 16 .b.S-imm8-dst3)
  (dni (.sym op 16 .b.S-imm8-dst3)
       (.str op sz ":S imm8,dst3")
       (.str op sz ":S imm8,dst3")
       ((machine 16))
       ((machine 16))
       (.str op sz "$S #${Imm-8-QI},${Dst16-3-S-16}")
       (.str op sz "$S #${Imm-8-QI},${Dst16-3-S-16}")
       (+ opc1 opc2 Dst16-3-S-16 Imm-8-QI)
       (+ opc1 opc2 Dst16-3-S-16 Imm-8-QI)
       (sem QI Imm-8-QI Dst16-3-S-16)
       (sem QI Imm-8-QI Dst16-3-S-16)
       ())
       ())
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
;.size:Q #imm4,sp -- for m16c
;.size:Q #imm4,sp -- for m16c
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (binary-arith16-Q-sp op opc1 opc2 opc3 sem)
(define-pmacro (binary-arith16-Q-sp op opc1 opc2 opc3 sem)
  (dni (.sym op 16 -wQ-sp)
  (dni (.sym op 16 -wQ-sp)
       (.str op ".w:q #imm4,sp")
       (.str op ".w:q #imm4,sp")
       ((machine 16))
       ((machine 16))
       (.str op ".w$Q #${Imm-12-s4},sp")
       (.str op ".w$Q #${Imm-12-s4},sp")
       (+ opc1 opc2 opc3 Imm-12-s4)
       (+ opc1 opc2 opc3 Imm-12-s4)
       (sem QI Imm-12-s4 sp)
       (sem QI Imm-12-s4 sp)
       ())
       ())
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
;.size:G #imm,sp -- for m16c
;.size:G #imm,sp -- for m16c
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (binary-arith16-G-sp-defn mode wstr wbit op opc1 opc2 opc3 opc4 sem)
(define-pmacro (binary-arith16-G-sp-defn mode wstr wbit op opc1 opc2 opc3 opc4 sem)
  (dni (.sym op 16 wstr - G-sp)
  (dni (.sym op 16 wstr - G-sp)
       (.str op wstr " imm-sp " mode)
       (.str op wstr " imm-sp " mode)
       ((machine 16))
       ((machine 16))
       (.str op wstr "$G #${Imm-16-" mode "},sp")
       (.str op wstr "$G #${Imm-16-" mode "},sp")
       (+ opc1 opc2 (f-7-1 wbit) opc3 opc4 (.sym Imm-16- mode))
       (+ opc1 opc2 (f-7-1 wbit) opc3 opc4 (.sym Imm-16- mode))
       (sem mode (.sym Imm-16- mode) sp)
       (sem mode (.sym Imm-16- mode) sp)
       ())
       ())
)
)
(define-pmacro (binary-arith16-G-sp op opc1 opc2 opc3 opc4 sem)
(define-pmacro (binary-arith16-G-sp op opc1 opc2 opc3 opc4 sem)
  (begin
  (begin
    (binary-arith16-G-sp-defn QI .b 0 op opc1 opc2 opc3 opc4 sem)
    (binary-arith16-G-sp-defn QI .b 0 op opc1 opc2 opc3 opc4 sem)
    (binary-arith16-G-sp-defn HI .w 1 op opc1 opc2 opc3 opc4 sem)
    (binary-arith16-G-sp-defn HI .w 1 op opc1 opc2 opc3 opc4 sem)
  )
  )
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
;.size:G #imm,dst -- for m16c and m32c
;.size:G #imm,dst -- for m16c and m32c
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (binary-arith-imm-dst-defn mach src dstgroup dmode wstr op suffix encoding sem)
(define-pmacro (binary-arith-imm-dst-defn mach src dstgroup dmode wstr op suffix encoding sem)
  (dni (.sym op mach wstr - imm-G - dstgroup)
  (dni (.sym op mach wstr - imm-G - dstgroup)
       (.str op wstr " " mach "-imm-G-" dstgroup "-" dmode)
       (.str op wstr " " mach "-imm-G-" dstgroup "-" dmode)
       ((machine mach) RL_1ADDR)
       ((machine mach) RL_1ADDR)
       (.str op wstr "$"suffix " #${" src "},${dst" mach "-" dstgroup "-" dmode "}")
       (.str op wstr "$"suffix " #${" src "},${dst" mach "-" dstgroup "-" dmode "}")
       encoding
       encoding
       (sem dmode src (.sym dst mach - dstgroup - dmode))
       (sem dmode src (.sym dst mach - dstgroup - dmode))
       ())
       ())
)
)
; m16c variants
; m16c variants
(define-pmacro (binary-arith16-imm-dst-defn smode dmode wstr wbit op suffix opc1 opc2 opc3 sem)
(define-pmacro (binary-arith16-imm-dst-defn smode dmode wstr wbit op suffix opc1 opc2 opc3 sem)
  (begin
  (begin
    (binary-arith-imm-dst-defn 16 (.sym Imm-32- smode) 16-16 dmode wstr op suffix
    (binary-arith-imm-dst-defn 16 (.sym Imm-32- smode) 16-16 dmode wstr op suffix
                               (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-16- dmode) (.sym Imm-32- smode))
                               (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-16- dmode) (.sym Imm-32- smode))
                               sem)
                               sem)
    (binary-arith-imm-dst-defn 16 (.sym Imm-24- smode) 16-8 dmode wstr op suffix
    (binary-arith-imm-dst-defn 16 (.sym Imm-24- smode) 16-8 dmode wstr op suffix
                               (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-8- dmode) (.sym Imm-24- smode))
                               (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-8- dmode) (.sym Imm-24- smode))
                               sem)
                               sem)
    (binary-arith-imm-dst-defn 16 (.sym Imm-16- smode) basic dmode wstr op suffix
    (binary-arith-imm-dst-defn 16 (.sym Imm-16- smode) basic dmode wstr op suffix
                               (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-basic- dmode) (.sym Imm-16- smode))
                               (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-basic- dmode) (.sym Imm-16- smode))
                               sem)
                               sem)
  )
  )
)
)
; m32c Unprefixed variants
; m32c Unprefixed variants
(define-pmacro (binary-arith32-imm-dst-Unprefixed smode dmode wstr wbit op suffix opc1 opc2 opc3 sem)
(define-pmacro (binary-arith32-imm-dst-Unprefixed smode dmode wstr wbit op suffix opc1 opc2 opc3 sem)
  (begin
  (begin
    (binary-arith-imm-dst-defn 32 (.sym Imm-40- smode) 16-24-Unprefixed dmode wstr op suffix
    (binary-arith-imm-dst-defn 32 (.sym Imm-40- smode) 16-24-Unprefixed dmode wstr op suffix
                               (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3) (.sym dst32-16-24-Unprefixed- dmode) (.sym Imm-40- smode))
                               (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3) (.sym dst32-16-24-Unprefixed- dmode) (.sym Imm-40- smode))
                               sem)
                               sem)
    (binary-arith-imm-dst-defn 32 (.sym Imm-32- smode) 16-16-Unprefixed dmode wstr op suffix
    (binary-arith-imm-dst-defn 32 (.sym Imm-32- smode) 16-16-Unprefixed dmode wstr op suffix
                               (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3) (.sym dst32-16-16-Unprefixed- dmode) (.sym Imm-32- smode))
                               (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3) (.sym dst32-16-16-Unprefixed- dmode) (.sym Imm-32- smode))
                               sem)
                               sem)
    (binary-arith-imm-dst-defn 32 (.sym Imm-24- smode) 16-8-Unprefixed dmode wstr op suffix
    (binary-arith-imm-dst-defn 32 (.sym Imm-24- smode) 16-8-Unprefixed dmode wstr op suffix
                               (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3) (.sym dst32-16-8-Unprefixed- dmode) (.sym Imm-24- smode))
                               (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3) (.sym dst32-16-8-Unprefixed- dmode) (.sym Imm-24- smode))
                               sem)
                               sem)
    (binary-arith-imm-dst-defn 32 (.sym Imm-16- smode) basic-Unprefixed dmode wstr op suffix
    (binary-arith-imm-dst-defn 32 (.sym Imm-16- smode) basic-Unprefixed dmode wstr op suffix
                               (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3) (.sym dst32-basic-Unprefixed- dmode) (.sym Imm-16- smode))
                               (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3) (.sym dst32-basic-Unprefixed- dmode) (.sym Imm-16- smode))
                               sem)
                               sem)
  )
  )
)
)
; m32c Prefixed variants
; m32c Prefixed variants
(define-pmacro (binary-arith32-imm-dst-Prefixed smode dmode wstr wbit op suffix opc1 opc2 opc3 sem)
(define-pmacro (binary-arith32-imm-dst-Prefixed smode dmode wstr wbit op suffix opc1 opc2 opc3 sem)
  (begin
  (begin
    (binary-arith-imm-dst-defn 32 (.sym Imm-48- smode) 24-24-Prefixed dmode wstr op suffix
    (binary-arith-imm-dst-defn 32 (.sym Imm-48- smode) 24-24-Prefixed dmode wstr op suffix
                               (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-24-Prefixed- dmode) (.sym Imm-48- smode))
                               (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-24-Prefixed- dmode) (.sym Imm-48- smode))
                               sem)
                               sem)
    (binary-arith-imm-dst-defn 32 (.sym Imm-40- smode) 24-16-Prefixed dmode wstr op suffix
    (binary-arith-imm-dst-defn 32 (.sym Imm-40- smode) 24-16-Prefixed dmode wstr op suffix
                               (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-16-Prefixed- dmode) (.sym Imm-40- smode))
                               (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-16-Prefixed- dmode) (.sym Imm-40- smode))
                               sem)
                               sem)
    (binary-arith-imm-dst-defn 32 (.sym Imm-32- smode) 24-8-Prefixed dmode wstr op suffix
    (binary-arith-imm-dst-defn 32 (.sym Imm-32- smode) 24-8-Prefixed dmode wstr op suffix
                               (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-8-Prefixed- dmode) (.sym Imm-32- smode))
                               (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-8-Prefixed- dmode) (.sym Imm-32- smode))
                               sem)
                               sem)
    (binary-arith-imm-dst-defn 32 (.sym Imm-24- smode) basic-Prefixed dmode wstr op suffix
    (binary-arith-imm-dst-defn 32 (.sym Imm-24- smode) basic-Prefixed dmode wstr op suffix
                               (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-basic-Prefixed- dmode) (.sym Imm-24- smode))
                               (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-basic-Prefixed- dmode) (.sym Imm-24- smode))
                               sem)
                               sem)
  )
  )
)
)
; All m32c variants
; All m32c variants
(define-pmacro (binary-arith32-imm-dst-defn smode dmode wstr wbit op suffix opc1 opc2 opc3 sem)
(define-pmacro (binary-arith32-imm-dst-defn smode dmode wstr wbit op suffix opc1 opc2 opc3 sem)
  (begin
  (begin
    ; Multi insns are tried for assembly in the reverse order in which they appear here, so
    ; Multi insns are tried for assembly in the reverse order in which they appear here, so
    ; define the absolute-indirect insns first in order to prevent them from being selected
    ; define the absolute-indirect insns first in order to prevent them from being selected
    ; when the mode is register-indirect
    ; when the mode is register-indirect
;     (binary-arith-imm-dst-defn 32 (.sym Imm-48- smode) 24-24-absolute-indirect dmode wstr op suffix
;     (binary-arith-imm-dst-defn 32 (.sym Imm-48- smode) 24-24-absolute-indirect dmode wstr op suffix
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-24-absolute-indirect- dmode) (.sym Imm-48- smode))
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-24-absolute-indirect- dmode) (.sym Imm-48- smode))
;                              sem)
;                              sem)
;     (binary-arith-imm-dst-defn 32 (.sym Imm-40- smode) 24-16-absolute-indirect dmode wstr op suffix
;     (binary-arith-imm-dst-defn 32 (.sym Imm-40- smode) 24-16-absolute-indirect dmode wstr op suffix
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-16-absolute-indirect- dmode) (.sym Imm-40- smode))
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-16-absolute-indirect- dmode) (.sym Imm-40- smode))
;                              sem)
;                              sem)
    ; Unprefixed modes next
    ; Unprefixed modes next
    (binary-arith32-imm-dst-Unprefixed smode dmode wstr wbit op suffix opc1 opc2 opc3 sem)
    (binary-arith32-imm-dst-Unprefixed smode dmode wstr wbit op suffix opc1 opc2 opc3 sem)
    ; Remaining indirect modes
    ; Remaining indirect modes
;     (binary-arith-imm-dst-defn 32 (.sym Imm-24- smode) basic-indirect dmode wstr op suffix
;     (binary-arith-imm-dst-defn 32 (.sym Imm-24- smode) basic-indirect dmode wstr op suffix
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-basic-indirect- dmode) (.sym Imm-24- smode))
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-basic-indirect- dmode) (.sym Imm-24- smode))
;                              sem)
;                              sem)
;     (binary-arith-imm-dst-defn 32 (.sym Imm-48- smode) 24-24-indirect dmode wstr op suffix
;     (binary-arith-imm-dst-defn 32 (.sym Imm-48- smode) 24-24-indirect dmode wstr op suffix
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-24-indirect- dmode) (.sym Imm-48- smode))
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-24-indirect- dmode) (.sym Imm-48- smode))
;                              sem)
;                              sem)
;     (binary-arith-imm-dst-defn 32 (.sym Imm-40- smode) 24-16-indirect dmode wstr op suffix
;     (binary-arith-imm-dst-defn 32 (.sym Imm-40- smode) 24-16-indirect dmode wstr op suffix
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-16-indirect- dmode) (.sym Imm-40- smode))
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-16-indirect- dmode) (.sym Imm-40- smode))
;                              sem)
;                              sem)
;     (binary-arith-imm-dst-defn 32 (.sym Imm-32- smode) 24-8-indirect dmode wstr op suffix
;     (binary-arith-imm-dst-defn 32 (.sym Imm-32- smode) 24-8-indirect dmode wstr op suffix
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-8-indirect- dmode) (.sym Imm-32- smode))
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3) (.sym dst32-24-8-indirect- dmode) (.sym Imm-32- smode))
;                              sem)
;                              sem)
  )
  )
)
)
(define-pmacro (binary-arith-imm-dst-mach mach op suffix opc1 opc2 opc3 sem)
(define-pmacro (binary-arith-imm-dst-mach mach op suffix opc1 opc2 opc3 sem)
  (begin
  (begin
    (.apply (.sym binary-arith mach -imm-dst-defn) (QI QI .b 0 op suffix opc1 opc2 opc3 sem))
    (.apply (.sym binary-arith mach -imm-dst-defn) (QI QI .b 0 op suffix opc1 opc2 opc3 sem))
    (.apply (.sym binary-arith mach -imm-dst-defn) (HI HI .w 1 op suffix opc1 opc2 opc3 sem))
    (.apply (.sym binary-arith mach -imm-dst-defn) (HI HI .w 1 op suffix opc1 opc2 opc3 sem))
  )
  )
)
)
(define-pmacro (binary-arith-imm-dst op suffix opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
(define-pmacro (binary-arith-imm-dst op suffix opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
  (begin
  (begin
    (binary-arith-imm-dst-mach 16 op suffix opc16-1 opc16-2 opc16-3 sem)
    (binary-arith-imm-dst-mach 16 op suffix opc16-1 opc16-2 opc16-3 sem)
    (binary-arith-imm-dst-mach 32 op suffix opc32-1 opc32-2 opc32-3 sem)
    (binary-arith-imm-dst-mach 32 op suffix opc32-1 opc32-2 opc32-3 sem)
  )
  )
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
;.size:Q #imm4,dst -- for m16c and m32c
;.size:Q #imm4,dst -- for m16c and m32c
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (binary-arith-imm4-dst-defn mach src dstgroup mode wstr op encoding sem)
(define-pmacro (binary-arith-imm4-dst-defn mach src dstgroup mode wstr op encoding sem)
  (dni (.sym op mach wstr - imm4-Q - dstgroup)
  (dni (.sym op mach wstr - imm4-Q - dstgroup)
       (.str op wstr " " mach "-imm4-Q-" dstgroup "-" mode)
       (.str op wstr " " mach "-imm4-Q-" dstgroup "-" mode)
       ((machine mach) RL_1ADDR)
       ((machine mach) RL_1ADDR)
       (.str op wstr "$Q #${" src "},${dst" mach "-" dstgroup "-" mode "}")
       (.str op wstr "$Q #${" src "},${dst" mach "-" dstgroup "-" mode "}")
       encoding
       encoding
       (sem mode src (.sym dst mach - dstgroup - mode))
       (sem mode src (.sym dst mach - dstgroup - mode))
       ())
       ())
)
)
; m16c variants
; m16c variants
(define-pmacro (binary-arith16-imm4-dst-defn mode wstr wbit1 wbit2 op opc1 opc2 sem)
(define-pmacro (binary-arith16-imm4-dst-defn mode wstr wbit1 wbit2 op opc1 opc2 sem)
  (binary-arith-imm4-dst-defn 16 Imm-8-s4 16 mode wstr op
  (binary-arith-imm4-dst-defn 16 Imm-8-s4 16 mode wstr op
                   (+ opc1 opc2 (f-7-1 wbit2) Imm-8-s4 (.sym dst16-16- mode))
                   (+ opc1 opc2 (f-7-1 wbit2) Imm-8-s4 (.sym dst16-16- mode))
                   sem)
                   sem)
)
)
(define-pmacro (binary-arith16-shimm4-dst-defn mode wstr wbit1 wbit2 op opc1 opc2 sem)
(define-pmacro (binary-arith16-shimm4-dst-defn mode wstr wbit1 wbit2 op opc1 opc2 sem)
  (binary-arith-imm4-dst-defn 16 Imm-sh-8-s4 16 mode wstr op
  (binary-arith-imm4-dst-defn 16 Imm-sh-8-s4 16 mode wstr op
                   (+ opc1 opc2 (f-7-1 wbit2) Imm-sh-8-s4 (.sym dst16-16- mode))
                   (+ opc1 opc2 (f-7-1 wbit2) Imm-sh-8-s4 (.sym dst16-16- mode))
                   sem)
                   sem)
)
)
; m32c variants
; m32c variants
(define-pmacro (binary-arith32-imm4-dst-defn mode wstr wbit1 wbit2 op opc1 opc2 sem)
(define-pmacro (binary-arith32-imm4-dst-defn mode wstr wbit1 wbit2 op opc1 opc2 sem)
  (begin
  (begin
    ; Multi insns are tried for assembly in the reverse order in which they appear here, so
    ; Multi insns are tried for assembly in the reverse order in which they appear here, so
    ; define the absolute-indirect insns first in order to prevent them from being selected
    ; define the absolute-indirect insns first in order to prevent them from being selected
    ; when the mode is register-indirect
    ; when the mode is register-indirect
;     (binary-arith-imm4-dst-defn 32 Imm-20-s4 24-absolute-indirect mode wstr op
;     (binary-arith-imm4-dst-defn 32 Imm-20-s4 24-absolute-indirect mode wstr op
;                    (+ (f-0-4 0) (f-4-4 9) (f-8-3 opc1) (f-11-1 wbit1) (f-15-1 wbit2) (.sym dst32-24-absolute-indirect- mode) (f-18-2 opc2) Imm-20-s4)
;                    (+ (f-0-4 0) (f-4-4 9) (f-8-3 opc1) (f-11-1 wbit1) (f-15-1 wbit2) (.sym dst32-24-absolute-indirect- mode) (f-18-2 opc2) Imm-20-s4)
;                    sem)
;                    sem)
    (binary-arith-imm4-dst-defn 32 Imm-12-s4 16-Unprefixed mode wstr op
    (binary-arith-imm4-dst-defn 32 Imm-12-s4 16-Unprefixed mode wstr op
                     (+ (f-0-3 opc1) (f-3-1 wbit1) (f-7-1 wbit2) (.sym dst32-16-Unprefixed- mode) (f-10-2 opc2) Imm-12-s4)
                     (+ (f-0-3 opc1) (f-3-1 wbit1) (f-7-1 wbit2) (.sym dst32-16-Unprefixed- mode) (f-10-2 opc2) Imm-12-s4)
                     sem)
                     sem)
;     (binary-arith-imm4-dst-defn 32 Imm-20-s4 24-indirect mode wstr op
;     (binary-arith-imm4-dst-defn 32 Imm-20-s4 24-indirect mode wstr op
;                    (+ (f-0-4 0) (f-4-4 9) (f-8-3 opc1) (f-11-1 wbit1) (f-15-1 wbit2) (.sym dst32-24-indirect- mode) (f-18-2 opc2) Imm-20-s4)
;                    (+ (f-0-4 0) (f-4-4 9) (f-8-3 opc1) (f-11-1 wbit1) (f-15-1 wbit2) (.sym dst32-24-indirect- mode) (f-18-2 opc2) Imm-20-s4)
;                    sem)
;                    sem)
  )
  )
)
)
(define-pmacro (binary-arith32-shimm4-dst-defn mode wstr wbit1 wbit2 op opc1 opc2 sem)
(define-pmacro (binary-arith32-shimm4-dst-defn mode wstr wbit1 wbit2 op opc1 opc2 sem)
  (begin
  (begin
    ; Multi insns are tried for assembly in the reverse order in which they appear here, so
    ; Multi insns are tried for assembly in the reverse order in which they appear here, so
    ; define the absolute-indirect insns first in order to prevent them from being selected
    ; define the absolute-indirect insns first in order to prevent them from being selected
    ; when the mode is register-indirect
    ; when the mode is register-indirect
;     (binary-arith-imm4-dst-defn 32 Imm-sh-20-s4 24-absolute-indirect mode wstr op
;     (binary-arith-imm4-dst-defn 32 Imm-sh-20-s4 24-absolute-indirect mode wstr op
;                    (+ (f-0-4 0) (f-4-4 9) (f-8-3 opc1) (f-11-1 wbit1) (f-15-1 wbit2) (.sym dst32-24-absolute-indirect- mode) (f-18-2 opc2) Imm-sh-20-s4)
;                    (+ (f-0-4 0) (f-4-4 9) (f-8-3 opc1) (f-11-1 wbit1) (f-15-1 wbit2) (.sym dst32-24-absolute-indirect- mode) (f-18-2 opc2) Imm-sh-20-s4)
;                    sem)
;                    sem)
    (binary-arith-imm4-dst-defn 32 Imm-sh-12-s4 16-Unprefixed mode wstr op
    (binary-arith-imm4-dst-defn 32 Imm-sh-12-s4 16-Unprefixed mode wstr op
                     (+ (f-0-3 opc1) (f-3-1 wbit1) (f-7-1 wbit2) (.sym dst32-16-Unprefixed- mode) (f-10-2 opc2) Imm-sh-12-s4)
                     (+ (f-0-3 opc1) (f-3-1 wbit1) (f-7-1 wbit2) (.sym dst32-16-Unprefixed- mode) (f-10-2 opc2) Imm-sh-12-s4)
                     sem)
                     sem)
;     (binary-arith-imm4-dst-defn 32 Imm-sh-20-s4 24-indirect mode wstr op
;     (binary-arith-imm4-dst-defn 32 Imm-sh-20-s4 24-indirect mode wstr op
;                    (+ (f-0-4 0) (f-4-4 9) (f-8-3 opc1) (f-11-1 wbit1) (f-15-1 wbit2) (.sym dst32-24-indirect- mode) (f-18-2 opc2) Imm-sh-20-s4)
;                    (+ (f-0-4 0) (f-4-4 9) (f-8-3 opc1) (f-11-1 wbit1) (f-15-1 wbit2) (.sym dst32-24-indirect- mode) (f-18-2 opc2) Imm-sh-20-s4)
;                    sem)
;                    sem)
  )
  )
)
)
(define-pmacro (binary-arith-imm4-dst-mach mach op opc1 opc2 sem)
(define-pmacro (binary-arith-imm4-dst-mach mach op opc1 opc2 sem)
  (begin
  (begin
    (.apply (.sym binary-arith mach -imm4-dst-defn) (QI .b 0 0 op opc1 opc2 sem))
    (.apply (.sym binary-arith mach -imm4-dst-defn) (QI .b 0 0 op opc1 opc2 sem))
    (.apply (.sym binary-arith mach -imm4-dst-defn) (HI .w 0 1 op opc1 opc2 sem))
    (.apply (.sym binary-arith mach -imm4-dst-defn) (HI .w 0 1 op opc1 opc2 sem))
  )
  )
)
)
(define-pmacro (binary-arith-imm4-dst op opc16-1 opc16-2 opc32-1 opc32-2 sem)
(define-pmacro (binary-arith-imm4-dst op opc16-1 opc16-2 opc32-1 opc32-2 sem)
  (begin
  (begin
    (binary-arith-imm4-dst-mach 16 op opc16-1 opc16-2 sem)
    (binary-arith-imm4-dst-mach 16 op opc16-1 opc16-2 sem)
    (binary-arith-imm4-dst-mach 32 op opc32-1 opc32-2 sem)
    (binary-arith-imm4-dst-mach 32 op opc32-1 opc32-2 sem)
  )
  )
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
;.size:G src,dst -- for m16c and m32c
;.size:G src,dst -- for m16c and m32c
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (binary-arith-src-dst-defn mach srcgroup dstgroup smode dmode wstr op suffix encoding sem)
(define-pmacro (binary-arith-src-dst-defn mach srcgroup dstgroup smode dmode wstr op suffix encoding sem)
  (dni (.sym op mach wstr - srcgroup - dstgroup)
  (dni (.sym op mach wstr - srcgroup - dstgroup)
       (.str op wstr " dst" mach "-" srcgroup "-" dstgroup "-" dmode)
       (.str op wstr " dst" mach "-" srcgroup "-" dstgroup "-" dmode)
       ((machine mach) RL_2ADDR)
       ((machine mach) RL_2ADDR)
       (.str op wstr "$" suffix " ${src" mach "-" srcgroup "-" smode "},${dst" mach "-" dstgroup "-" dmode "}")
       (.str op wstr "$" suffix " ${src" mach "-" srcgroup "-" smode "},${dst" mach "-" dstgroup "-" dmode "}")
       encoding
       encoding
       (sem dmode (.sym src mach - srcgroup - smode) (.sym dst mach - dstgroup - dmode))
       (sem dmode (.sym src mach - srcgroup - smode) (.sym dst mach - dstgroup - dmode))
       ())
       ())
)
)
; m16c variants
; m16c variants
(define-pmacro (binary-arith16-src-dst-defn smode dmode wstr wbit op suffix opc1 opc2 sem)
(define-pmacro (binary-arith16-src-dst-defn smode dmode wstr wbit op suffix opc1 opc2 sem)
  (begin
  (begin
    (binary-arith-src-dst-defn 16 basic 16 smode dmode wstr op suffix
    (binary-arith-src-dst-defn 16 basic 16 smode dmode wstr op suffix
                               (+ opc1 opc2 (f-7-1 wbit) (.sym src16-basic- smode) (.sym dst16-16- dmode))
                               (+ opc1 opc2 (f-7-1 wbit) (.sym src16-basic- smode) (.sym dst16-16- dmode))
                               sem)
                               sem)
    (binary-arith-src-dst-defn 16 16-16 32 smode dmode wstr op suffix
    (binary-arith-src-dst-defn 16 16-16 32 smode dmode wstr op suffix
                               (+ opc1 opc2 (f-7-1 wbit) (.sym src16-16-16- smode) (.sym dst16-32- dmode))
                               (+ opc1 opc2 (f-7-1 wbit) (.sym src16-16-16- smode) (.sym dst16-32- dmode))
                               sem)
                               sem)
    (binary-arith-src-dst-defn 16 16-8 24 smode dmode wstr op suffix
    (binary-arith-src-dst-defn 16 16-8 24 smode dmode wstr op suffix
                               (+ opc1 opc2 (f-7-1 wbit) (.sym src16-16-8- smode) (.sym dst16-24- dmode))
                               (+ opc1 opc2 (f-7-1 wbit) (.sym src16-16-8- smode) (.sym dst16-24- dmode))
                               sem)
                               sem)
  )
  )
)
)
; m32c Prefixed variants
; m32c Prefixed variants
(define-pmacro (binary-arith32-src-dst-Prefixed smode dmode wstr wbit op suffix opc1 opc2 sem)
(define-pmacro (binary-arith32-src-dst-Prefixed smode dmode wstr wbit op suffix opc1 opc2 sem)
  (begin
  (begin
    (binary-arith-src-dst-defn 32 basic-Prefixed 24-Prefixed smode dmode wstr op suffix
    (binary-arith-src-dst-defn 32 basic-Prefixed 24-Prefixed smode dmode wstr op suffix
                               (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit) (.sym src32-basic-Prefixed- smode) (.sym dst32-24-Prefixed- dmode) (f-20-4 opc2))
                               (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit) (.sym src32-basic-Prefixed- smode) (.sym dst32-24-Prefixed- dmode) (f-20-4 opc2))
                               sem)
                               sem)
    (binary-arith-src-dst-defn 32 24-24-Prefixed 48-Prefixed smode dmode wstr op suffix
    (binary-arith-src-dst-defn 32 24-24-Prefixed 48-Prefixed smode dmode wstr op suffix
                               (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit) (.sym src32-24-24-Prefixed- smode) (.sym dst32-48-Prefixed- dmode) (f-20-4 opc2))
                               (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit) (.sym src32-24-24-Prefixed- smode) (.sym dst32-48-Prefixed- dmode) (f-20-4 opc2))
                               sem)
                               sem)
    (binary-arith-src-dst-defn 32 24-16-Prefixed 40-Prefixed smode dmode wstr op suffix
    (binary-arith-src-dst-defn 32 24-16-Prefixed 40-Prefixed smode dmode wstr op suffix
                               (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit) (.sym src32-24-16-Prefixed- smode) (.sym dst32-40-Prefixed- dmode) (f-20-4 opc2))
                               (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit) (.sym src32-24-16-Prefixed- smode) (.sym dst32-40-Prefixed- dmode) (f-20-4 opc2))
                               sem)
                               sem)
    (binary-arith-src-dst-defn 32 24-8-Prefixed 32-Prefixed smode dmode wstr op suffix
    (binary-arith-src-dst-defn 32 24-8-Prefixed 32-Prefixed smode dmode wstr op suffix
                               (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit) (.sym src32-24-8-Prefixed- smode) (.sym dst32-32-Prefixed- dmode) (f-20-4 opc2))
                               (+ (f-0-4 0) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit) (.sym src32-24-8-Prefixed- smode) (.sym dst32-32-Prefixed- dmode) (f-20-4 opc2))
                               sem)
                               sem)
  )
  )
)
)
; all m32c variants
; all m32c variants
(define-pmacro (binary-arith32-src-dst-defn smode dmode wstr wbit op suffix opc1 opc2 sem)
(define-pmacro (binary-arith32-src-dst-defn smode dmode wstr wbit op suffix opc1 opc2 sem)
  (begin
  (begin
    ; Multi insns are tried for assembly in the reverse order in which they appear here, so
    ; Multi insns are tried for assembly in the reverse order in which they appear here, so
    ; define the absolute-indirect insns first in order to prevent them from being selected
    ; define the absolute-indirect insns first in order to prevent them from being selected
    ; when the mode is register-indirect
    ; when the mode is register-indirect
;     (binary-arith-src-dst-defn 32 24-24-absolute-indirect 48-absolute-indirect smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 24-24-absolute-indirect 48-absolute-indirect smode dmode wstr op suffix
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-24-24-absolute-indirect- smode) (.sym dst32-48-absolute-indirect- dmode) (f-20-4 opc2))
;                                 (.sym src32-24-24-absolute-indirect- smode) (.sym dst32-48-absolute-indirect- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 24-16-absolute-indirect 40-absolute-indirect smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 24-16-absolute-indirect 40-absolute-indirect smode dmode wstr op suffix
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-24-16-absolute-indirect- smode) (.sym dst32-40-absolute-indirect- dmode) (f-20-4 opc2))
;                                 (.sym src32-24-16-absolute-indirect- smode) (.sym dst32-40-absolute-indirect- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 24-24-absolute-indirect 48-Prefixed smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 24-24-absolute-indirect 48-Prefixed smode dmode wstr op suffix
;                              (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-24-24-absolute-indirect- smode) (.sym dst32-48-Prefixed- dmode) (f-20-4 opc2))
;                                 (.sym src32-24-24-absolute-indirect- smode) (.sym dst32-48-Prefixed- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 24-16-absolute-indirect 40-Prefixed smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 24-16-absolute-indirect 40-Prefixed smode dmode wstr op suffix
;                              (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-24-16-absolute-indirect- smode) (.sym dst32-40-Prefixed- dmode) (f-20-4 opc2))
;                                 (.sym src32-24-16-absolute-indirect- smode) (.sym dst32-40-Prefixed- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 24-24-absolute-indirect 48-indirect smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 24-24-absolute-indirect 48-indirect smode dmode wstr op suffix
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-24-24-absolute-indirect- smode) (.sym dst32-48-indirect- dmode) (f-20-4 opc2))
;                                 (.sym src32-24-24-absolute-indirect- smode) (.sym dst32-48-indirect- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 24-16-absolute-indirect 40-indirect smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 24-16-absolute-indirect 40-indirect smode dmode wstr op suffix
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-24-16-absolute-indirect- smode) (.sym dst32-40-indirect- dmode) (f-20-4 opc2))
;                                 (.sym src32-24-16-absolute-indirect- smode) (.sym dst32-40-indirect- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 basic-Prefixed 24-absolute-indirect smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 basic-Prefixed 24-absolute-indirect smode dmode wstr op suffix
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-basic-Prefixed- smode) (.sym dst32-24-absolute-indirect- dmode) (f-20-4 opc2))
;                                 (.sym src32-basic-Prefixed- smode) (.sym dst32-24-absolute-indirect- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 24-24-Prefixed 48-absolute-indirect smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 24-24-Prefixed 48-absolute-indirect smode dmode wstr op suffix
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-24-24-Prefixed- smode) (.sym dst32-48-absolute-indirect- dmode) (f-20-4 opc2))
;                                 (.sym src32-24-24-Prefixed- smode) (.sym dst32-48-absolute-indirect- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 24-16-Prefixed 40-absolute-indirect smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 24-16-Prefixed 40-absolute-indirect smode dmode wstr op suffix
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-24-16-Prefixed- smode) (.sym dst32-40-absolute-indirect- dmode) (f-20-4 opc2))
;                                 (.sym src32-24-16-Prefixed- smode) (.sym dst32-40-absolute-indirect- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 24-8-Prefixed 32-absolute-indirect smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 24-8-Prefixed 32-absolute-indirect smode dmode wstr op suffix
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-24-8-Prefixed- smode) (.sym dst32-32-absolute-indirect- dmode) (f-20-4 opc2))
;                                 (.sym src32-24-8-Prefixed- smode) (.sym dst32-32-absolute-indirect- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 basic-indirect 24-absolute-indirect smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 basic-indirect 24-absolute-indirect smode dmode wstr op suffix
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-basic-indirect- smode) (.sym dst32-24-absolute-indirect- dmode) (f-20-4 opc2))
;                                 (.sym src32-basic-indirect- smode) (.sym dst32-24-absolute-indirect- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 24-24-indirect 48-absolute-indirect smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 24-24-indirect 48-absolute-indirect smode dmode wstr op suffix
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-24-24-indirect- smode) (.sym dst32-48-absolute-indirect- dmode) (f-20-4 opc2))
;                                 (.sym src32-24-24-indirect- smode) (.sym dst32-48-absolute-indirect- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 24-16-indirect 40-absolute-indirect smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 24-16-indirect 40-absolute-indirect smode dmode wstr op suffix
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-24-16-indirect- smode) (.sym dst32-40-absolute-indirect- dmode) (f-20-4 opc2))
;                                 (.sym src32-24-16-indirect- smode) (.sym dst32-40-absolute-indirect- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 24-8-indirect 32-absolute-indirect smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 24-8-indirect 32-absolute-indirect smode dmode wstr op suffix
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-24-8-indirect- smode) (.sym dst32-32-absolute-indirect- dmode) (f-20-4 opc2))
;                                 (.sym src32-24-8-indirect- smode) (.sym dst32-32-absolute-indirect- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
    (binary-arith-src-dst-defn 32 basic-Unprefixed 16-Unprefixed smode dmode wstr op suffix
    (binary-arith-src-dst-defn 32 basic-Unprefixed 16-Unprefixed smode dmode wstr op suffix
                               (+ (f-0-1 opc1) (f-7-1 wbit) (.sym src32-basic-Unprefixed- smode) (.sym dst32-16-Unprefixed- dmode) (f-12-4 opc2))
                               (+ (f-0-1 opc1) (f-7-1 wbit) (.sym src32-basic-Unprefixed- smode) (.sym dst32-16-Unprefixed- dmode) (f-12-4 opc2))
                               sem)
                               sem)
    (binary-arith-src-dst-defn 32 16-24-Unprefixed 40-Unprefixed smode dmode wstr op suffix
    (binary-arith-src-dst-defn 32 16-24-Unprefixed 40-Unprefixed smode dmode wstr op suffix
                               (+ (f-0-1 opc1) (f-7-1 wbit) (.sym src32-16-24-Unprefixed- smode) (.sym dst32-40-Unprefixed- dmode) (f-12-4 opc2))
                               (+ (f-0-1 opc1) (f-7-1 wbit) (.sym src32-16-24-Unprefixed- smode) (.sym dst32-40-Unprefixed- dmode) (f-12-4 opc2))
                               sem)
                               sem)
    (binary-arith-src-dst-defn 32 16-16-Unprefixed 32-Unprefixed smode dmode wstr op suffix
    (binary-arith-src-dst-defn 32 16-16-Unprefixed 32-Unprefixed smode dmode wstr op suffix
                               (+ (f-0-1 opc1) (f-7-1 wbit) (.sym src32-16-16-Unprefixed- smode) (.sym dst32-32-Unprefixed- dmode) (f-12-4 opc2))
                               (+ (f-0-1 opc1) (f-7-1 wbit) (.sym src32-16-16-Unprefixed- smode) (.sym dst32-32-Unprefixed- dmode) (f-12-4 opc2))
                               sem)
                               sem)
    (binary-arith-src-dst-defn 32 16-8-Unprefixed 24-Unprefixed smode dmode wstr op suffix
    (binary-arith-src-dst-defn 32 16-8-Unprefixed 24-Unprefixed smode dmode wstr op suffix
                               (+ (f-0-1 opc1) (f-7-1 wbit) (.sym src32-16-8-Unprefixed- smode) (.sym dst32-24-Unprefixed- dmode) (f-12-4 opc2))
                               (+ (f-0-1 opc1) (f-7-1 wbit) (.sym src32-16-8-Unprefixed- smode) (.sym dst32-24-Unprefixed- dmode) (f-12-4 opc2))
                               sem)
                               sem)
;     (binary-arith-src-dst-defn 32 basic-indirect 24-Prefixed smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 basic-indirect 24-Prefixed smode dmode wstr op suffix
;                              (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-basic-indirect- smode) (.sym dst32-24-Prefixed- dmode) (f-20-4 opc2))
;                                 (.sym src32-basic-indirect- smode) (.sym dst32-24-Prefixed- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 24-24-indirect 48-Prefixed smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 24-24-indirect 48-Prefixed smode dmode wstr op suffix
;                              (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-24-24-indirect- smode) (.sym dst32-48-Prefixed- dmode) (f-20-4 opc2))
;                                 (.sym src32-24-24-indirect- smode) (.sym dst32-48-Prefixed- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 24-16-indirect 40-Prefixed smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 24-16-indirect 40-Prefixed smode dmode wstr op suffix
;                              (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-24-16-indirect- smode) (.sym dst32-40-Prefixed- dmode) (f-20-4 opc2))
;                                 (.sym src32-24-16-indirect- smode) (.sym dst32-40-Prefixed- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 24-8-indirect 32-Prefixed smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 24-8-indirect 32-Prefixed smode dmode wstr op suffix
;                              (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-24-8-indirect- smode) (.sym dst32-32-Prefixed- dmode) (f-20-4 opc2))
;                                 (.sym src32-24-8-indirect- smode) (.sym dst32-32-Prefixed- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 basic-Prefixed 24-indirect smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 basic-Prefixed 24-indirect smode dmode wstr op suffix
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-basic-Prefixed- smode) (.sym dst32-24-indirect- dmode) (f-20-4 opc2))
;                                 (.sym src32-basic-Prefixed- smode) (.sym dst32-24-indirect- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 24-24-Prefixed 48-indirect smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 24-24-Prefixed 48-indirect smode dmode wstr op suffix
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-24-24-Prefixed- smode) (.sym dst32-48-indirect- dmode) (f-20-4 opc2))
;                                 (.sym src32-24-24-Prefixed- smode) (.sym dst32-48-indirect- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 24-16-Prefixed 40-indirect smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 24-16-Prefixed 40-indirect smode dmode wstr op suffix
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-24-16-Prefixed- smode) (.sym dst32-40-indirect- dmode) (f-20-4 opc2))
;                                 (.sym src32-24-16-Prefixed- smode) (.sym dst32-40-indirect- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 24-8-Prefixed 32-indirect smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 24-8-Prefixed 32-indirect smode dmode wstr op suffix
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-24-8-Prefixed- smode) (.sym dst32-32-indirect- dmode) (f-20-4 opc2))
;                                 (.sym src32-24-8-Prefixed- smode) (.sym dst32-32-indirect- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 basic-indirect 24-indirect smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 basic-indirect 24-indirect smode dmode wstr op suffix
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-basic-indirect- smode) (.sym dst32-24-indirect- dmode) (f-20-4 opc2))
;                                 (.sym src32-basic-indirect- smode) (.sym dst32-24-indirect- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 24-24-indirect 48-indirect smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 24-24-indirect 48-indirect smode dmode wstr op suffix
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-24-24-indirect- smode) (.sym dst32-48-indirect- dmode) (f-20-4 opc2))
;                                 (.sym src32-24-24-indirect- smode) (.sym dst32-48-indirect- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 24-16-indirect 40-indirect smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 24-16-indirect 40-indirect smode dmode wstr op suffix
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-24-16-indirect- smode) (.sym dst32-40-indirect- dmode) (f-20-4 opc2))
;                                 (.sym src32-24-16-indirect- smode) (.sym dst32-40-indirect- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
;     (binary-arith-src-dst-defn 32 24-8-indirect 32-indirect smode dmode wstr op suffix
;     (binary-arith-src-dst-defn 32 24-8-indirect 32-indirect smode dmode wstr op suffix
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                              (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
;                                 (.sym src32-24-8-indirect- smode) (.sym dst32-32-indirect- dmode) (f-20-4 opc2))
;                                 (.sym src32-24-8-indirect- smode) (.sym dst32-32-indirect- dmode) (f-20-4 opc2))
;                              sem)
;                              sem)
  )
  )
)
)
(define-pmacro (binary-arith-src-dst-mach mach op suffix opc1 opc2 sem)
(define-pmacro (binary-arith-src-dst-mach mach op suffix opc1 opc2 sem)
  (begin
  (begin
    (.apply (.sym binary-arith mach -src-dst-defn) (QI QI .b 0 op suffix opc1 opc2 sem))
    (.apply (.sym binary-arith mach -src-dst-defn) (QI QI .b 0 op suffix opc1 opc2 sem))
    (.apply (.sym binary-arith mach -src-dst-defn) (HI HI .w 1 op suffix opc1 opc2 sem))
    (.apply (.sym binary-arith mach -src-dst-defn) (HI HI .w 1 op suffix opc1 opc2 sem))
  )
  )
)
)
(define-pmacro (binary-arith-src-dst op suffix opc16-1 opc16-2 opc32-1 opc32-2 sem)
(define-pmacro (binary-arith-src-dst op suffix opc16-1 opc16-2 opc32-1 opc32-2 sem)
  (begin
  (begin
    (binary-arith-src-dst-mach 16 op suffix opc16-1 opc16-2 sem)
    (binary-arith-src-dst-mach 16 op suffix opc16-1 opc16-2 sem)
    (binary-arith-src-dst-mach 32 op suffix opc32-1 opc32-2 sem)
    (binary-arith-src-dst-mach 32 op suffix opc32-1 opc32-2 sem)
  )
  )
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
;.size:S #imm,dst -- for m32c
;.size:S #imm,dst -- for m32c
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (binary-arith32-s-imm-dst-defn src dstgroup mode wstr op encoding sem)
(define-pmacro (binary-arith32-s-imm-dst-defn src dstgroup mode wstr op encoding sem)
  (dni (.sym op 32 wstr - imm-S - dstgroup)
  (dni (.sym op 32 wstr - imm-S - dstgroup)
       (.str op wstr " 32-imm-S-" dstgroup "-" mode)
       (.str op wstr " 32-imm-S-" dstgroup "-" mode)
       ((machine 32))
       ((machine 32))
       (.str op wstr "$S #${" src "},${dst32-" dstgroup "-" mode "}")
       (.str op wstr "$S #${" src "},${dst32-" dstgroup "-" mode "}")
       encoding
       encoding
       (sem mode src (.sym dst32- dstgroup - mode))
       (sem mode src (.sym dst32- dstgroup - mode))
       ())
       ())
)
)
(define-pmacro (binary-arith32-z-imm-dst-defn src dstgroup mode wstr op encoding sem)
(define-pmacro (binary-arith32-z-imm-dst-defn src dstgroup mode wstr op encoding sem)
  (dni (.sym op 32 wstr - imm-Z - dstgroup)
  (dni (.sym op 32 wstr - imm-Z - dstgroup)
       (.str op wstr " 32-imm-Z-" dstgroup "-" mode)
       (.str op wstr " 32-imm-Z-" dstgroup "-" mode)
       ((machine 32))
       ((machine 32))
       (.str op wstr "$Z #0,${dst32-" dstgroup "-" mode "}")
       (.str op wstr "$Z #0,${dst32-" dstgroup "-" mode "}")
       encoding
       encoding
       (sem mode (const 0) (.sym dst32- dstgroup - mode))
       (sem mode (const 0) (.sym dst32- dstgroup - mode))
       ())
       ())
)
)
(define-pmacro (binary-arith32-s-imm-dst mode wstr wbit op opc1 opc2 sem)
(define-pmacro (binary-arith32-s-imm-dst mode wstr wbit op opc1 opc2 sem)
  (begin
  (begin
;     (binary-arith32-s-imm-dst-defn (.sym Imm-32- mode) 2-S-absolute-indirect mode wstr op
;     (binary-arith32-s-imm-dst-defn (.sym Imm-32- mode) 2-S-absolute-indirect mode wstr op
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-2 opc1) (.sym dst32-2-S-absolute-indirect- mode) (f-12-3 opc2) (f-15-1 wbit) (.sym Imm-32- mode))
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-2 opc1) (.sym dst32-2-S-absolute-indirect- mode) (f-12-3 opc2) (f-15-1 wbit) (.sym Imm-32- mode))
;                              sem)
;                              sem)
    (binary-arith32-s-imm-dst-defn (.sym Imm-8- mode) 2-S-basic mode wstr op
    (binary-arith32-s-imm-dst-defn (.sym Imm-8- mode) 2-S-basic mode wstr op
                               (+ (f-0-2 opc1) (.sym dst32-2-S-basic- mode) (f-4-3 opc2) (f-7-1 wbit) (.sym Imm-8- mode))
                               (+ (f-0-2 opc1) (.sym dst32-2-S-basic- mode) (f-4-3 opc2) (f-7-1 wbit) (.sym Imm-8- mode))
                               sem)
                               sem)
    (binary-arith32-s-imm-dst-defn (.sym Imm-24- mode) 2-S-16 mode wstr op
    (binary-arith32-s-imm-dst-defn (.sym Imm-24- mode) 2-S-16 mode wstr op
                               (+ (f-0-2 opc1) (.sym dst32-2-S-16- mode) (f-4-3 opc2) (f-7-1 wbit) (.sym Imm-24- mode))
                               (+ (f-0-2 opc1) (.sym dst32-2-S-16- mode) (f-4-3 opc2) (f-7-1 wbit) (.sym Imm-24- mode))
                               sem)
                               sem)
    (binary-arith32-s-imm-dst-defn (.sym Imm-16- mode) 2-S-8 mode wstr op
    (binary-arith32-s-imm-dst-defn (.sym Imm-16- mode) 2-S-8 mode wstr op
                               (+ (f-0-2 opc1) (.sym dst32-2-S-8- mode) (f-4-3 opc2) (f-7-1 wbit) (.sym Imm-16- mode))
                               (+ (f-0-2 opc1) (.sym dst32-2-S-8- mode) (f-4-3 opc2) (f-7-1 wbit) (.sym Imm-16- mode))
                               sem)
                               sem)
;     (binary-arith32-s-imm-dst-defn (.sym Imm-24- mode) 2-S-8-indirect mode wstr op
;     (binary-arith32-s-imm-dst-defn (.sym Imm-24- mode) 2-S-8-indirect mode wstr op
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-2 opc1) (.sym dst32-2-S-8-indirect- mode) (f-12-3 opc2) (f-15-1 wbit) (.sym Imm-24- mode))
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-2 opc1) (.sym dst32-2-S-8-indirect- mode) (f-12-3 opc2) (f-15-1 wbit) (.sym Imm-24- mode))
;                              sem)
;                              sem)
  )
  )
)
)
(define-pmacro (binary-arith32-z-imm-dst mode wstr wbit op opc1 opc2 sem)
(define-pmacro (binary-arith32-z-imm-dst mode wstr wbit op opc1 opc2 sem)
  (begin
  (begin
;     (binary-arith32-z-imm-dst-defn (.sym Imm-32- mode) 2-S-absolute-indirect mode wstr op
;     (binary-arith32-z-imm-dst-defn (.sym Imm-32- mode) 2-S-absolute-indirect mode wstr op
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-2 opc1) (.sym dst32-2-S-absolute-indirect- mode) (f-12-3 opc2) (f-15-1 wbit) (.sym Imm-32- mode))
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-2 opc1) (.sym dst32-2-S-absolute-indirect- mode) (f-12-3 opc2) (f-15-1 wbit) (.sym Imm-32- mode))
;                              sem)
;                              sem)
    (binary-arith32-z-imm-dst-defn (.sym Imm-8- mode) 2-S-basic mode wstr op
    (binary-arith32-z-imm-dst-defn (.sym Imm-8- mode) 2-S-basic mode wstr op
                               (+ (f-0-2 opc1) (.sym dst32-2-S-basic- mode) (f-4-3 opc2) (f-7-1 wbit))
                               (+ (f-0-2 opc1) (.sym dst32-2-S-basic- mode) (f-4-3 opc2) (f-7-1 wbit))
                               sem)
                               sem)
    (binary-arith32-z-imm-dst-defn (.sym Imm-24- mode) 2-S-16 mode wstr op
    (binary-arith32-z-imm-dst-defn (.sym Imm-24- mode) 2-S-16 mode wstr op
                               (+ (f-0-2 opc1) (.sym dst32-2-S-16- mode) (f-4-3 opc2) (f-7-1 wbit))
                               (+ (f-0-2 opc1) (.sym dst32-2-S-16- mode) (f-4-3 opc2) (f-7-1 wbit))
                               sem)
                               sem)
    (binary-arith32-z-imm-dst-defn (.sym Imm-16- mode) 2-S-8 mode wstr op
    (binary-arith32-z-imm-dst-defn (.sym Imm-16- mode) 2-S-8 mode wstr op
                               (+ (f-0-2 opc1) (.sym dst32-2-S-8- mode) (f-4-3 opc2) (f-7-1 wbit))
                               (+ (f-0-2 opc1) (.sym dst32-2-S-8- mode) (f-4-3 opc2) (f-7-1 wbit))
                               sem)
                               sem)
;     (binary-arith32-z-imm-dst-defn (.sym Imm-24- mode) 2-S-8-indirect mode wstr op
;     (binary-arith32-z-imm-dst-defn (.sym Imm-24- mode) 2-S-8-indirect mode wstr op
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-2 opc1) (.sym dst32-2-S-8-indirect- mode) (f-12-3 opc2) (f-15-1 wbit) (.sym Imm-24- mode))
;                              (+ (f-0-4 0) (f-4-4 9) (f-8-2 opc1) (.sym dst32-2-S-8-indirect- mode) (f-12-3 opc2) (f-15-1 wbit) (.sym Imm-24- mode))
;                              sem)
;                              sem)
  )
  )
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
;.L:S #imm1,An -- for m32c
;.L:S #imm1,An -- for m32c
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (binary-arith32-l-s-imm1-an op opc1 opc2 sem)
(define-pmacro (binary-arith32-l-s-imm1-an op opc1 opc2 sem)
  (begin
  (begin
    (dni (.sym op 32.l-s-imm1-S-an)
    (dni (.sym op 32.l-s-imm1-S-an)
         (.str op ".l 32-imm1-S-an")
         (.str op ".l 32-imm1-S-an")
         ((machine 32))
         ((machine 32))
         (.str op ".l$S #${Imm1-S},${dst32-an-S}")
         (.str op ".l$S #${Imm1-S},${dst32-an-S}")
         (+ opc1 Imm1-S opc2 dst32-an-S)
         (+ opc1 Imm1-S opc2 dst32-an-S)
         (sem SI Imm1-S dst32-an-S)
         (sem SI Imm1-S dst32-an-S)
         ())
         ())
  )
  )
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
;.L:Q #imm3,sp -- for m32c
;.L:Q #imm3,sp -- for m32c
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (binary-arith32-l-q-imm3-sp op opc1 opc2 sem)
(define-pmacro (binary-arith32-l-q-imm3-sp op opc1 opc2 sem)
  (begin
  (begin
    (dni (.sym op 32.l-imm3-Q)
    (dni (.sym op 32.l-imm3-Q)
         (.str op ".l 32-imm3-Q")
         (.str op ".l 32-imm3-Q")
         ((machine 32))
         ((machine 32))
         (.str op ".l$Q #${Imm3-S},sp")
         (.str op ".l$Q #${Imm3-S},sp")
         (+ opc1 Imm3-S opc2)
         (+ opc1 Imm3-S opc2)
         (sem SI Imm3-S sp)
         (sem SI Imm3-S sp)
         ())
         ())
  )
  )
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
;.L:S #imm8,sp -- for m32c
;.L:S #imm8,sp -- for m32c
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (binary-arith32-l-s-imm8-sp op opc1 opc2 opc3 opc4 sem)
(define-pmacro (binary-arith32-l-s-imm8-sp op opc1 opc2 opc3 opc4 sem)
  (begin
  (begin
    (dni (.sym op 32.l-imm8-S)
    (dni (.sym op 32.l-imm8-S)
         (.str op ".l 32-imm8-S")
         (.str op ".l 32-imm8-S")
         ((machine 32))
         ((machine 32))
         (.str op ".l$S #${Imm-16-QI},sp")
         (.str op ".l$S #${Imm-16-QI},sp")
         (+ opc1 opc2 opc3 opc4 Imm-16-QI)
         (+ opc1 opc2 opc3 opc4 Imm-16-QI)
         (sem SI Imm-16-QI sp)
         (sem SI Imm-16-QI sp)
         ())
         ())
  )
  )
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
;.L:G #imm16,sp -- for m32c
;.L:G #imm16,sp -- for m32c
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (binary-arith32-l-g-imm16-sp op opc1 opc2 opc3 opc4 sem)
(define-pmacro (binary-arith32-l-g-imm16-sp op opc1 opc2 opc3 opc4 sem)
  (begin
  (begin
    (dni (.sym op 32.l-imm16-G)
    (dni (.sym op 32.l-imm16-G)
         (.str op ".l 32-imm16-G")
         (.str op ".l 32-imm16-G")
         ((machine 32))
         ((machine 32))
         (.str op ".l$G #${Imm-16-HI},sp")
         (.str op ".l$G #${Imm-16-HI},sp")
         (+ opc1 opc2 opc3 opc4 Imm-16-HI)
         (+ opc1 opc2 opc3 opc4 Imm-16-HI)
         (sem SI Imm-16-HI sp)
         (sem SI Imm-16-HI sp)
         ())
         ())
  )
  )
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
;jnz.size #imm4,dst,label -- for m16c and m32c
;jnz.size #imm4,dst,label -- for m16c and m32c
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (arith-jnz-imm4-dst-defn mach src dstgroup label mode wstr op encoding sem)
(define-pmacro (arith-jnz-imm4-dst-defn mach src dstgroup label mode wstr op encoding sem)
  (dni (.sym op mach wstr - imm4 - dstgroup)
  (dni (.sym op mach wstr - imm4 - dstgroup)
       (.str op wstr " " mach "-imm4-" dstgroup "-" label "-" mode)
       (.str op wstr " " mach "-imm4-" dstgroup "-" label "-" mode)
       (RL_JUMP RELAXABLE (machine mach))
       (RL_JUMP RELAXABLE (machine mach))
       (.str op wstr " #${" src "},${dst" mach "-" dstgroup "-" mode "},${" label "}")
       (.str op wstr " #${" src "},${dst" mach "-" dstgroup "-" mode "},${" label "}")
       encoding
       encoding
       (sem mode src (.sym dst mach - dstgroup - mode) label)
       (sem mode src (.sym dst mach - dstgroup - mode) label)
       ())
       ())
)
)
; m16c variants
; m16c variants
(define-pmacro (arith-jnz16-imm4-dst-defn mode wstr wbit op i4n opc1 opc2 sem)
(define-pmacro (arith-jnz16-imm4-dst-defn mode wstr wbit op i4n opc1 opc2 sem)
  (begin
  (begin
    (arith-jnz-imm4-dst-defn 16 (.sym Imm-8- i4n) basic Lab-16-8 mode wstr op
    (arith-jnz-imm4-dst-defn 16 (.sym Imm-8- i4n) basic Lab-16-8 mode wstr op
                             (+ opc1 opc2 (f-7-1 wbit) (.sym Imm-8- i4n) (.sym dst16-basic- mode) Lab-16-8)
                             (+ opc1 opc2 (f-7-1 wbit) (.sym Imm-8- i4n) (.sym dst16-basic- mode) Lab-16-8)
                             sem)
                             sem)
    (arith-jnz-imm4-dst-defn 16 (.sym Imm-8- i4n) 16-16 Lab-32-8 mode wstr op
    (arith-jnz-imm4-dst-defn 16 (.sym Imm-8- i4n) 16-16 Lab-32-8 mode wstr op
                             (+ opc1 opc2 (f-7-1 wbit) (.sym Imm-8- i4n) (.sym dst16-16-16- mode) Lab-32-8)
                             (+ opc1 opc2 (f-7-1 wbit) (.sym Imm-8- i4n) (.sym dst16-16-16- mode) Lab-32-8)
                             sem)
                             sem)
    (arith-jnz-imm4-dst-defn 16 (.sym Imm-8- i4n) 16-8 Lab-24-8 mode wstr op
    (arith-jnz-imm4-dst-defn 16 (.sym Imm-8- i4n) 16-8 Lab-24-8 mode wstr op
                             (+ opc1 opc2 (f-7-1 wbit) (.sym Imm-8- i4n) (.sym dst16-16-8- mode) Lab-24-8)
                             (+ opc1 opc2 (f-7-1 wbit) (.sym Imm-8- i4n) (.sym dst16-16-8- mode) Lab-24-8)
                             sem)
                             sem)
  )
  )
)
)
; m32c variants
; m32c variants
(define-pmacro (arith-jnz32-imm4-dst-defn mode wstr wbit op i4n opc1 opc2 sem)
(define-pmacro (arith-jnz32-imm4-dst-defn mode wstr wbit op i4n opc1 opc2 sem)
  (begin
  (begin
    (arith-jnz-imm4-dst-defn 32 (.sym Imm-12- i4n) basic-Unprefixed Lab-16-8 mode wstr op
    (arith-jnz-imm4-dst-defn 32 (.sym Imm-12- i4n) basic-Unprefixed Lab-16-8 mode wstr op
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-basic-Unprefixed- mode) (f-10-2 opc2) (.sym Imm-12- i4n) Lab-16-8)
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-basic-Unprefixed- mode) (f-10-2 opc2) (.sym Imm-12- i4n) Lab-16-8)
                     sem)
                     sem)
    (arith-jnz-imm4-dst-defn 32 (.sym Imm-12- i4n) 16-24-Unprefixed Lab-40-8 mode wstr op
    (arith-jnz-imm4-dst-defn 32 (.sym Imm-12- i4n) 16-24-Unprefixed Lab-40-8 mode wstr op
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-24-Unprefixed- mode) (f-10-2 opc2) (.sym Imm-12- i4n) Lab-40-8)
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-24-Unprefixed- mode) (f-10-2 opc2) (.sym Imm-12- i4n) Lab-40-8)
                     sem)
                     sem)
    (arith-jnz-imm4-dst-defn 32 (.sym Imm-12- i4n) 16-16-Unprefixed Lab-32-8 mode wstr op
    (arith-jnz-imm4-dst-defn 32 (.sym Imm-12- i4n) 16-16-Unprefixed Lab-32-8 mode wstr op
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-16-Unprefixed- mode) (f-10-2 opc2) (.sym Imm-12- i4n) Lab-32-8)
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-16-Unprefixed- mode) (f-10-2 opc2) (.sym Imm-12- i4n) Lab-32-8)
                     sem)
                     sem)
    (arith-jnz-imm4-dst-defn 32 (.sym Imm-12- i4n) 16-8-Unprefixed Lab-24-8 mode wstr op
    (arith-jnz-imm4-dst-defn 32 (.sym Imm-12- i4n) 16-8-Unprefixed Lab-24-8 mode wstr op
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-8-Unprefixed- mode) (f-10-2 opc2) (.sym Imm-12- i4n) Lab-24-8)
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-8-Unprefixed- mode) (f-10-2 opc2) (.sym Imm-12- i4n) Lab-24-8)
                     sem)
                     sem)
  )
  )
)
)
(define-pmacro (arith-jnz-imm4-dst-mach mach op i4n opc1 opc2 sem)
(define-pmacro (arith-jnz-imm4-dst-mach mach op i4n opc1 opc2 sem)
  (begin
  (begin
    (.apply (.sym arith-jnz mach -imm4-dst-defn) (QI .b 0 op i4n opc1 opc2 sem))
    (.apply (.sym arith-jnz mach -imm4-dst-defn) (QI .b 0 op i4n opc1 opc2 sem))
    (.apply (.sym arith-jnz mach -imm4-dst-defn) (HI .w 1 op i4n opc1 opc2 sem))
    (.apply (.sym arith-jnz mach -imm4-dst-defn) (HI .w 1 op i4n opc1 opc2 sem))
  )
  )
)
)
(define-pmacro (arith-jnz-imm4-dst op i4n opc16-1 opc16-2 opc32-1 opc32-2 sem)
(define-pmacro (arith-jnz-imm4-dst op i4n opc16-1 opc16-2 opc32-1 opc32-2 sem)
  (begin
  (begin
    (arith-jnz-imm4-dst-mach 16 op i4n opc16-1 opc16-2 sem)
    (arith-jnz-imm4-dst-mach 16 op i4n opc16-1 opc16-2 sem)
    (arith-jnz-imm4-dst-mach 32 op i4n opc32-1 opc32-2 sem)
    (arith-jnz-imm4-dst-mach 32 op i4n opc32-1 opc32-2 sem)
  )
  )
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
;mov.size dsp8[sp],dst -- for m16c and m32c
;mov.size dsp8[sp],dst -- for m16c and m32c
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (mov-dspsp-dst-defn mach dstgroup dsp mode wstr op encoding sem)
(define-pmacro (mov-dspsp-dst-defn mach dstgroup dsp mode wstr op encoding sem)
  (dni (.sym op mach wstr -dspsp-dst- dstgroup)
  (dni (.sym op mach wstr -dspsp-dst- dstgroup)
       (.str op wstr " " mach "-dsp[sp]-" dstgroup "-" dsp "-" mode)
       (.str op wstr " " mach "-dsp[sp]-" dstgroup "-" dsp "-" mode)
       ((machine mach))
       ((machine mach))
       (.str op wstr "$G ${" dsp "}[sp],${dst" mach "-" dstgroup "-" mode "}")
       (.str op wstr "$G ${" dsp "}[sp],${dst" mach "-" dstgroup "-" mode "}")
       encoding
       encoding
       (sem mach mode dsp (.sym dst mach - dstgroup - mode))
       (sem mach mode dsp (.sym dst mach - dstgroup - mode))
       ())
       ())
)
)
(define-pmacro (mov-src-dspsp-defn mach dstgroup dsp mode wstr op encoding sem)
(define-pmacro (mov-src-dspsp-defn mach dstgroup dsp mode wstr op encoding sem)
  (dni (.sym op mach wstr -dst-dspsp- dstgroup)
  (dni (.sym op mach wstr -dst-dspsp- dstgroup)
       (.str op wstr " " mach "-dsp[sp]-" dstgroup "-" dsp "-" mode)
       (.str op wstr " " mach "-dsp[sp]-" dstgroup "-" dsp "-" mode)
       ((machine mach))
       ((machine mach))
       (.str op wstr "$G ${dst" mach "-" dstgroup "-" mode "},${" dsp "}[sp]")
       (.str op wstr "$G ${dst" mach "-" dstgroup "-" mode "},${" dsp "}[sp]")
       encoding
       encoding
       (sem mach mode (.sym dst mach - dstgroup - mode) dsp)
       (sem mach mode (.sym dst mach - dstgroup - mode) dsp)
       ())
       ())
)
)
; m16c variants
; m16c variants
(define-pmacro (mov16-dspsp-dst-defn mode wstr wbit op opc1 opc2 opc3 sem)
(define-pmacro (mov16-dspsp-dst-defn mode wstr wbit op opc1 opc2 opc3 sem)
  (begin
  (begin
    (mov-dspsp-dst-defn 16 basic Dsp-16-s8 mode wstr op
    (mov-dspsp-dst-defn 16 basic Dsp-16-s8 mode wstr op
                             (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-basic- mode) Dsp-16-s8)
                             (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-basic- mode) Dsp-16-s8)
                             sem)
                             sem)
    (mov-dspsp-dst-defn 16 16-16 Dsp-32-s8 mode wstr op
    (mov-dspsp-dst-defn 16 16-16 Dsp-32-s8 mode wstr op
                             (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-16- mode) Dsp-32-s8)
                             (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-16- mode) Dsp-32-s8)
                             sem)
                             sem)
    (mov-dspsp-dst-defn 16 16-8 Dsp-24-s8 mode wstr op
    (mov-dspsp-dst-defn 16 16-8 Dsp-24-s8 mode wstr op
                             (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-8- mode) Dsp-24-s8)
                             (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-8- mode) Dsp-24-s8)
                             sem)
                             sem)
  )
  )
)
)
(define-pmacro (mov16-src-dspsp-defn mode wstr wbit op opc1 opc2 opc3 sem)
(define-pmacro (mov16-src-dspsp-defn mode wstr wbit op opc1 opc2 opc3 sem)
  (begin
  (begin
    (mov-src-dspsp-defn 16 basic Dsp-16-s8 mode wstr op
    (mov-src-dspsp-defn 16 basic Dsp-16-s8 mode wstr op
                             (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-basic- mode) Dsp-16-s8)
                             (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-basic- mode) Dsp-16-s8)
                             sem)
                             sem)
    (mov-src-dspsp-defn 16 16-16 Dsp-32-s8 mode wstr op
    (mov-src-dspsp-defn 16 16-16 Dsp-32-s8 mode wstr op
                             (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-16- mode) Dsp-32-s8)
                             (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-16- mode) Dsp-32-s8)
                             sem)
                             sem)
    (mov-src-dspsp-defn 16 16-8 Dsp-24-s8 mode wstr op
    (mov-src-dspsp-defn 16 16-8 Dsp-24-s8 mode wstr op
                             (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-8- mode) Dsp-24-s8)
                             (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-8- mode) Dsp-24-s8)
                             sem)
                             sem)
  )
  )
)
)
; m32c variants
; m32c variants
(define-pmacro (mov32-dspsp-dst-defn mode wstr wbit op opc1 opc2 opc3 sem)
(define-pmacro (mov32-dspsp-dst-defn mode wstr wbit op opc1 opc2 opc3 sem)
  (begin
  (begin
    (mov-dspsp-dst-defn 32 basic-Unprefixed Dsp-16-s8 mode wstr op
    (mov-dspsp-dst-defn 32 basic-Unprefixed Dsp-16-s8 mode wstr op
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-basic-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-16-s8)
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-basic-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-16-s8)
                     sem)
                     sem)
    (mov-dspsp-dst-defn 32 16-24-Unprefixed Dsp-40-s8 mode wstr op
    (mov-dspsp-dst-defn 32 16-24-Unprefixed Dsp-40-s8 mode wstr op
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-24-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-40-s8)
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-24-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-40-s8)
                     sem)
                     sem)
    (mov-dspsp-dst-defn 32 16-16-Unprefixed Dsp-32-s8 mode wstr op
    (mov-dspsp-dst-defn 32 16-16-Unprefixed Dsp-32-s8 mode wstr op
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-16-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-32-s8)
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-16-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-32-s8)
                     sem)
                     sem)
    (mov-dspsp-dst-defn 32 16-8-Unprefixed Dsp-24-s8 mode wstr op
    (mov-dspsp-dst-defn 32 16-8-Unprefixed Dsp-24-s8 mode wstr op
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-8-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-24-s8)
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-8-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-24-s8)
                     sem)
                     sem)
  )
  )
)
)
(define-pmacro (mov32-src-dspsp-defn mode wstr wbit op opc1 opc2 opc3 sem)
(define-pmacro (mov32-src-dspsp-defn mode wstr wbit op opc1 opc2 opc3 sem)
  (begin
  (begin
    (mov-src-dspsp-defn 32 basic-Unprefixed Dsp-16-s8 mode wstr op
    (mov-src-dspsp-defn 32 basic-Unprefixed Dsp-16-s8 mode wstr op
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-basic-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-16-s8)
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-basic-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-16-s8)
                     sem)
                     sem)
    (mov-src-dspsp-defn 32 16-24-Unprefixed Dsp-40-s8 mode wstr op
    (mov-src-dspsp-defn 32 16-24-Unprefixed Dsp-40-s8 mode wstr op
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-24-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-40-s8)
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-24-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-40-s8)
                     sem)
                     sem)
    (mov-src-dspsp-defn 32 16-16-Unprefixed Dsp-32-s8 mode wstr op
    (mov-src-dspsp-defn 32 16-16-Unprefixed Dsp-32-s8 mode wstr op
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-16-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-32-s8)
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-16-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-32-s8)
                     sem)
                     sem)
    (mov-src-dspsp-defn 32 16-8-Unprefixed Dsp-24-s8 mode wstr op
    (mov-src-dspsp-defn 32 16-8-Unprefixed Dsp-24-s8 mode wstr op
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-8-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-24-s8)
                     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-8-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-24-s8)
                     sem)
                     sem)
  )
  )
)
)
(define-pmacro (mov-src-dspsp-mach mach op opc1 opc2 opc3 sem)
(define-pmacro (mov-src-dspsp-mach mach op opc1 opc2 opc3 sem)
  (begin
  (begin
    (.apply (.sym mov mach -src-dspsp-defn) (QI .b 0 op opc1 opc2 opc3 sem))
    (.apply (.sym mov mach -src-dspsp-defn) (QI .b 0 op opc1 opc2 opc3 sem))
    (.apply (.sym mov mach -src-dspsp-defn) (HI .w 1 op opc1 opc2 opc3 sem))
    (.apply (.sym mov mach -src-dspsp-defn) (HI .w 1 op opc1 opc2 opc3 sem))
  )
  )
)
)
(define-pmacro (mov-dspsp-dst-mach mach op opc1 opc2 opc3 sem)
(define-pmacro (mov-dspsp-dst-mach mach op opc1 opc2 opc3 sem)
  (begin
  (begin
    (.apply (.sym mov mach -dspsp-dst-defn) (QI .b 0 op opc1 opc2 opc3 sem))
    (.apply (.sym mov mach -dspsp-dst-defn) (QI .b 0 op opc1 opc2 opc3 sem))
    (.apply (.sym mov mach -dspsp-dst-defn) (HI .w 1 op opc1 opc2 opc3 sem))
    (.apply (.sym mov mach -dspsp-dst-defn) (HI .w 1 op opc1 opc2 opc3 sem))
  )
  )
)
)
(define-pmacro (mov-dspsp-dst op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
(define-pmacro (mov-dspsp-dst op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
  (begin
  (begin
    (mov-dspsp-dst-mach 16 op opc16-1 opc16-2 opc16-3 sem)
    (mov-dspsp-dst-mach 16 op opc16-1 opc16-2 opc16-3 sem)
    (mov-dspsp-dst-mach 32 op opc32-1 opc32-2 opc32-3 sem)
    (mov-dspsp-dst-mach 32 op opc32-1 opc32-2 opc32-3 sem)
  )
  )
)
)
(define-pmacro (mov-src-dspsp op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
(define-pmacro (mov-src-dspsp op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
  (begin
  (begin
    (mov-src-dspsp-mach 16 op opc16-1 opc16-2 opc16-3 sem)
    (mov-src-dspsp-mach 16 op opc16-1 opc16-2 opc16-3 sem)
    (mov-src-dspsp-mach 32 op opc32-1 opc32-2 opc32-3 sem)
    (mov-src-dspsp-mach 32 op opc32-1 opc32-2 opc32-3 sem)
  )
  )
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
; lde dsp24,dst -- for m16c
; lde dsp24,dst -- for m16c
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (lde-dst-dsp mode wstr wbit dstgroup srcdisp)
(define-pmacro (lde-dst-dsp mode wstr wbit dstgroup srcdisp)
  (begin
  (begin
    (dni (.sym lde wstr - dstgroup -u20)
    (dni (.sym lde wstr - dstgroup -u20)
         (.str "lde" wstr "-" dstgroup "-u20")
         (.str "lde" wstr "-" dstgroup "-u20")
         ((machine 16))
         ((machine 16))
         (.str "lde" wstr " ${" srcdisp "},${dst16-" dstgroup "-" mode "}")
         (.str "lde" wstr " ${" srcdisp "},${dst16-" dstgroup "-" mode "}")
         (+ (f-0-4 #x7) (f-4-3 #x2) (f-7-1 wbit) (f-8-4 #x8)
         (+ (f-0-4 #x7) (f-4-3 #x2) (f-7-1 wbit) (f-8-4 #x8)
          (.sym dst16- dstgroup - mode) srcdisp)
          (.sym dst16- dstgroup - mode) srcdisp)
         (nop)
         (nop)
         ())
         ())
    (dni (.sym lde wstr - dstgroup -u20a0)
    (dni (.sym lde wstr - dstgroup -u20a0)
         (.str "lde" wstr "-" dstgroup "-u20a0")
         (.str "lde" wstr "-" dstgroup "-u20a0")
         ((machine 16))
         ((machine 16))
         (.str "lde" wstr " ${" srcdisp "}[a0],${dst16-" dstgroup "-" mode "}")
         (.str "lde" wstr " ${" srcdisp "}[a0],${dst16-" dstgroup "-" mode "}")
         (+ (f-0-4 #x7) (f-4-3 #x2) (f-7-1 wbit) (f-8-4 #x9)
         (+ (f-0-4 #x7) (f-4-3 #x2) (f-7-1 wbit) (f-8-4 #x9)
          (.sym dst16- dstgroup - mode) srcdisp)
          (.sym dst16- dstgroup - mode) srcdisp)
         (nop)
         (nop)
         ())
         ())
    (dni (.sym lde wstr - dstgroup -a1a0)
    (dni (.sym lde wstr - dstgroup -a1a0)
         (.str "lde" wstr "-" dstgroup "-a1a0")
         (.str "lde" wstr "-" dstgroup "-a1a0")
         ((machine 16))
         ((machine 16))
         (.str "lde" wstr " [a1a0],${dst16-" dstgroup "-" mode "}")
         (.str "lde" wstr " [a1a0],${dst16-" dstgroup "-" mode "}")
         (+ (f-0-4 #x7) (f-4-3 #x2) (f-7-1 wbit) (f-8-4 #xa)
         (+ (f-0-4 #x7) (f-4-3 #x2) (f-7-1 wbit) (f-8-4 #xa)
          (.sym dst16- dstgroup - mode))
          (.sym dst16- dstgroup - mode))
         (nop)
         (nop)
         ())
         ())
    )
    )
  )
  )
(define-pmacro (lde-dst mode wstr wbit)
(define-pmacro (lde-dst mode wstr wbit)
  (begin
  (begin
    ; like:       QI   .b   0
    ; like:       QI   .b   0
    (lde-dst-dsp mode wstr wbit basic Dsp-16-u20)
    (lde-dst-dsp mode wstr wbit basic Dsp-16-u20)
    (lde-dst-dsp mode wstr wbit 16-8  Dsp-24-u20)
    (lde-dst-dsp mode wstr wbit 16-8  Dsp-24-u20)
    (lde-dst-dsp mode wstr wbit 16-16 Dsp-32-u20)
    (lde-dst-dsp mode wstr wbit 16-16 Dsp-32-u20)
  )
  )
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
; ste dst,dsp24 -- for m16c
; ste dst,dsp24 -- for m16c
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (ste-dst-dsp mode wstr wbit dstgroup srcdisp)
(define-pmacro (ste-dst-dsp mode wstr wbit dstgroup srcdisp)
  (begin
  (begin
    (dni (.sym ste wstr - dstgroup -u20)
    (dni (.sym ste wstr - dstgroup -u20)
         (.str "ste" wstr "-" dstgroup "-u20")
         (.str "ste" wstr "-" dstgroup "-u20")
         ((machine 16))
         ((machine 16))
         (.str "ste" wstr " ${dst16-" dstgroup "-" mode "},${" srcdisp "}")
         (.str "ste" wstr " ${dst16-" dstgroup "-" mode "},${" srcdisp "}")
         (+ (f-0-4 #x7) (f-4-3 #x2) (f-7-1 wbit) (f-8-4 #x0)
         (+ (f-0-4 #x7) (f-4-3 #x2) (f-7-1 wbit) (f-8-4 #x0)
          (.sym dst16- dstgroup - mode) srcdisp)
          (.sym dst16- dstgroup - mode) srcdisp)
         (nop)
         (nop)
         ())
         ())
    (dni (.sym ste wstr - dstgroup -u20a0)
    (dni (.sym ste wstr - dstgroup -u20a0)
         (.str "ste" wstr "-" dstgroup "-u20a0")
         (.str "ste" wstr "-" dstgroup "-u20a0")
         ((machine 16))
         ((machine 16))
         (.str "ste" wstr " ${dst16-" dstgroup "-" mode "},${" srcdisp "}[a0]")
         (.str "ste" wstr " ${dst16-" dstgroup "-" mode "},${" srcdisp "}[a0]")
         (+ (f-0-4 #x7) (f-4-3 #x2) (f-7-1 wbit) (f-8-4 #x1)
         (+ (f-0-4 #x7) (f-4-3 #x2) (f-7-1 wbit) (f-8-4 #x1)
          (.sym dst16- dstgroup - mode) srcdisp)
          (.sym dst16- dstgroup - mode) srcdisp)
         (nop)
         (nop)
         ())
         ())
    (dni (.sym ste wstr - dstgroup -a1a0)
    (dni (.sym ste wstr - dstgroup -a1a0)
         (.str "ste" wstr "-" dstgroup "-a1a0")
         (.str "ste" wstr "-" dstgroup "-a1a0")
         ((machine 16))
         ((machine 16))
         (.str "ste" wstr " ${dst16-" dstgroup "-" mode "},[a1a0]")
         (.str "ste" wstr " ${dst16-" dstgroup "-" mode "},[a1a0]")
         (+ (f-0-4 #x7) (f-4-3 #x2) (f-7-1 wbit) (f-8-4 #x2)
         (+ (f-0-4 #x7) (f-4-3 #x2) (f-7-1 wbit) (f-8-4 #x2)
          (.sym dst16- dstgroup - mode))
          (.sym dst16- dstgroup - mode))
         (nop)
         (nop)
         ())
         ())
    )
    )
  )
  )
(define-pmacro (ste-dst mode wstr wbit)
(define-pmacro (ste-dst mode wstr wbit)
  (begin
  (begin
    ; like:       QI   .b   0
    ; like:       QI   .b   0
    (ste-dst-dsp mode wstr wbit basic Dsp-16-u20)
    (ste-dst-dsp mode wstr wbit basic Dsp-16-u20)
    (ste-dst-dsp mode wstr wbit 16-8  Dsp-24-u20)
    (ste-dst-dsp mode wstr wbit 16-8  Dsp-24-u20)
    (ste-dst-dsp mode wstr wbit 16-16 Dsp-32-u20)
    (ste-dst-dsp mode wstr wbit 16-16 Dsp-32-u20)
  )
  )
)
)
;=============================================================
;=============================================================
; Division
; Division
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (div-sem divop modop opmode reg src quot rem max min)
(define-pmacro (div-sem divop modop opmode reg src quot rem max min)
  (sequence ()
  (sequence ()
            (if (eq src 0)
            (if (eq src 0)
                (set obit (const BI 1))
                (set obit (const BI 1))
                (sequence ((opmode quot-result) (opmode rem-result))
                (sequence ((opmode quot-result) (opmode rem-result))
                          (set quot-result (divop opmode (ext opmode reg) src))
                          (set quot-result (divop opmode (ext opmode reg) src))
                          (set rem-result  (modop opmode (ext opmode reg) src))
                          (set rem-result  (modop opmode (ext opmode reg) src))
                          (set obit (orif (gt opmode quot-result max)
                          (set obit (orif (gt opmode quot-result max)
                                          (lt opmode quot-result min)))
                                          (lt opmode quot-result min)))
                          (set quot quot-result)
                          (set quot quot-result)
                          (set rem  rem-result))))
                          (set rem  rem-result))))
)
)
;.size #imm -- for m16c and m32c
;.size #imm -- for m16c and m32c
(define-pmacro (div-imm-defn mach wstr op src encoding divop modop opmode reg quot rem max min sem)
(define-pmacro (div-imm-defn mach wstr op src encoding divop modop opmode reg quot rem max min sem)
  (dni (.sym op mach wstr - src)
  (dni (.sym op mach wstr - src)
       (.str op mach wstr "-" src)
       (.str op mach wstr "-" src)
       ((machine mach))
       ((machine mach))
       (.str op wstr " #${" src "}")
       (.str op wstr " #${" src "}")
       encoding
       encoding
       (sem divop modop opmode reg src quot rem max min)
       (sem divop modop opmode reg src quot rem max min)
       ())
       ())
)
)
(define-pmacro (div16-imm-defn smode wstr wbit op divop modop opmode reg quot rem max min opc1 opc2 opc3 opc4 sem)
(define-pmacro (div16-imm-defn smode wstr wbit op divop modop opmode reg quot rem max min opc1 opc2 opc3 opc4 sem)
  (div-imm-defn 16 wstr op (.sym Imm-16 - smode)
  (div-imm-defn 16 wstr op (.sym Imm-16 - smode)
                (+ opc1 opc2 (f-7-1 wbit) opc3 opc4 (.sym Imm-16 - smode))
                (+ opc1 opc2 (f-7-1 wbit) opc3 opc4 (.sym Imm-16 - smode))
                divop modop opmode reg quot rem max min
                divop modop opmode reg quot rem max min
                sem)
                sem)
)
)
(define-pmacro (div32-imm-defn smode wstr wbit op divop modop opmode reg quot rem max min opc1 opc2 opc3 opc4 sem)
(define-pmacro (div32-imm-defn smode wstr wbit op divop modop opmode reg quot rem max min opc1 opc2 opc3 opc4 sem)
  (div-imm-defn 32 wstr op (.sym Imm-16 - smode)
  (div-imm-defn 32 wstr op (.sym Imm-16 - smode)
                (+ (f-0-4 opc1) (f-4-4 opc2) (f-8-3 opc3) (f-11-1 wbit) (f-12-4 opc4) (.sym Imm-16 - smode))
                (+ (f-0-4 opc1) (f-4-4 opc2) (f-8-3 opc3) (f-11-1 wbit) (f-12-4 opc4) (.sym Imm-16 - smode))
                divop modop opmode reg quot rem max min
                divop modop opmode reg quot rem max min
                sem)
                sem)
)
)
(define-pmacro (div-imm-mach mach op divop modop opmode max-QI min-QI max-HI min-HI opc1 opc2 opc3 opc4 sem)
(define-pmacro (div-imm-mach mach op divop modop opmode max-QI min-QI max-HI min-HI opc1 opc2 opc3 opc4 sem)
  (begin
  (begin
    (.apply (.sym div mach -imm-defn) (QI .b 0 op divop modop opmode R0   R0l R0h max-QI min-QI opc1 opc2 opc3 opc4 sem))
    (.apply (.sym div mach -imm-defn) (QI .b 0 op divop modop opmode R0   R0l R0h max-QI min-QI opc1 opc2 opc3 opc4 sem))
    (.apply (.sym div mach -imm-defn) (HI .w 1 op divop modop opmode R2R0 R0  R2  max-HI min-HI opc1 opc2 opc3 opc4 sem))
    (.apply (.sym div mach -imm-defn) (HI .w 1 op divop modop opmode R2R0 R0  R2  max-HI min-HI opc1 opc2 opc3 opc4 sem))
  )
  )
)
)
(define-pmacro (div-imm op divop modop opmode max-QI min-QI max-HI min-HI opc16-1 opc16-2 opc16-3 opc16-4 opc32-1 opc32-2 opc32-3 opc32-4 sem)
(define-pmacro (div-imm op divop modop opmode max-QI min-QI max-HI min-HI opc16-1 opc16-2 opc16-3 opc16-4 opc32-1 opc32-2 opc32-3 opc32-4 sem)
  (begin
  (begin
    (div-imm-mach 16 op divop modop opmode max-QI min-QI max-HI min-HI opc16-1 opc16-2 opc16-3 opc16-4 sem)
    (div-imm-mach 16 op divop modop opmode max-QI min-QI max-HI min-HI opc16-1 opc16-2 opc16-3 opc16-4 sem)
    (div-imm-mach 32 op divop modop opmode max-QI min-QI max-HI min-HI opc32-1 opc32-2 opc32-3 opc32-4 sem)
    (div-imm-mach 32 op divop modop opmode max-QI min-QI max-HI min-HI opc32-1 opc32-2 opc32-3 opc32-4 sem)
  )
  )
)
)
;.size src -- for m16c and m32c
;.size src -- for m16c and m32c
(define-pmacro (div-src-defn mach wstr op src encoding divop modop opmode reg quot rem max min sem)
(define-pmacro (div-src-defn mach wstr op src encoding divop modop opmode reg quot rem max min sem)
  (dni (.sym op mach wstr - src)
  (dni (.sym op mach wstr - src)
       (.str op mach wstr "-" src)
       (.str op mach wstr "-" src)
       ((machine mach))
       ((machine mach))
       (.str op wstr " ${" src "}")
       (.str op wstr " ${" src "}")
       encoding
       encoding
       (sem divop modop opmode reg src quot rem max min)
       (sem divop modop opmode reg src quot rem max min)
       ())
       ())
)
)
(define-pmacro (div16-src-defn smode wstr wbit op divop modop opmode reg quot rem max min opc1 opc2 opc3 sem)
(define-pmacro (div16-src-defn smode wstr wbit op divop modop opmode reg quot rem max min opc1 opc2 opc3 sem)
  (div-src-defn 16 wstr op (.sym dst16-16 - smode)
  (div-src-defn 16 wstr op (.sym dst16-16 - smode)
                (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16 - smode))
                (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16 - smode))
                divop modop opmode reg quot rem max min
                divop modop opmode reg quot rem max min
                sem)
                sem)
)
)
(define-pmacro (div32-src-defn smode wstr wbit op divop modop opmode reg quot rem max min opc1 opc2 opc3 sem)
(define-pmacro (div32-src-defn smode wstr wbit op divop modop opmode reg quot rem max min opc1 opc2 opc3 sem)
  (begin
  (begin
    ; Multi insns are tried for assembly in the reverse order in which they appear here, so
    ; Multi insns are tried for assembly in the reverse order in which they appear here, so
    ; define the absolute-indirect insns first in order to prevent them from being selected
    ; define the absolute-indirect insns first in order to prevent them from being selected
    ; when the mode is register-indirect
    ; when the mode is register-indirect
;     (div-src-defn 32 wstr op (.sym dst32-24-absolute-indirect- smode)
;     (div-src-defn 32 wstr op (.sym dst32-24-absolute-indirect- smode)
;                 (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-15-1 wbit) (f-18-2 opc2) (f-20-4 opc3) (.sym dst32-24-absolute-indirect - smode))
;                 (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-15-1 wbit) (f-18-2 opc2) (f-20-4 opc3) (.sym dst32-24-absolute-indirect - smode))
;                 divop modop opmode reg quot rem max min
;                 divop modop opmode reg quot rem max min
;                 sem)
;                 sem)
    (div-src-defn 32 wstr op (.sym dst32-16-Unprefixed- smode)
    (div-src-defn 32 wstr op (.sym dst32-16-Unprefixed- smode)
                  (+ (f-0-4 opc1) (f-7-1 wbit) (f-10-2 opc2) (f-12-4 opc3) (.sym dst32-16-Unprefixed- smode))
                  (+ (f-0-4 opc1) (f-7-1 wbit) (f-10-2 opc2) (f-12-4 opc3) (.sym dst32-16-Unprefixed- smode))
                  divop modop opmode reg quot rem max min
                  divop modop opmode reg quot rem max min
                  sem)
                  sem)
;     (div-src-defn 32 wstr op (.sym dst32-24-indirect- smode)
;     (div-src-defn 32 wstr op (.sym dst32-24-indirect- smode)
;                 (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-15-1 wbit) (f-18-2 opc2) (f-20-4 opc3) (.sym dst32-24-indirect - smode))
;                 (+ (f-0-4 0) (f-4-4 9) (f-8-4 opc1) (f-15-1 wbit) (f-18-2 opc2) (f-20-4 opc3) (.sym dst32-24-indirect - smode))
;                 divop modop opmode reg quot rem max min
;                 divop modop opmode reg quot rem max min
;                 sem)
;                 sem)
  )
  )
)
)
(define-pmacro (div-src-mach mach op divop modop opmode max-QI min-QI max-HI min-HI opc1 opc2 opc3 sem)
(define-pmacro (div-src-mach mach op divop modop opmode max-QI min-QI max-HI min-HI opc1 opc2 opc3 sem)
  (begin
  (begin
    (.apply (.sym div mach -src-defn) (QI .b 0 op divop modop opmode R0   R0l R0h max-QI min-QI opc1 opc2 opc3 sem))
    (.apply (.sym div mach -src-defn) (QI .b 0 op divop modop opmode R0   R0l R0h max-QI min-QI opc1 opc2 opc3 sem))
    (.apply (.sym div mach -src-defn) (HI .w 1 op divop modop opmode R2R0 R0  R2  max-HI min-HI opc1 opc2 opc3 sem))
    (.apply (.sym div mach -src-defn) (HI .w 1 op divop modop opmode R2R0 R0  R2  max-HI min-HI opc1 opc2 opc3 sem))
  )
  )
)
)
(define-pmacro (div-src op divop modop opmode max-QI min-QI max-HI min-HI opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
(define-pmacro (div-src op divop modop opmode max-QI min-QI max-HI min-HI opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
  (begin
  (begin
    (div-src-mach 16 op divop modop opmode max-QI min-QI max-HI min-HI opc16-1 opc16-2 opc16-3 sem)
    (div-src-mach 16 op divop modop opmode max-QI min-QI max-HI min-HI opc16-1 opc16-2 opc16-3 sem)
    (div-src-mach 32 op divop modop opmode max-QI min-QI max-HI min-HI opc32-1 opc32-2 opc32-3 sem)
    (div-src-mach 32 op divop modop opmode max-QI min-QI max-HI min-HI opc32-1 opc32-2 opc32-3 sem)
  )
  )
)
)
;=============================================================
;=============================================================
; Bit manipulation
; Bit manipulation
;
;
(define-pmacro (bit-insn-defn mach op suffix opnd encoding sem)
(define-pmacro (bit-insn-defn mach op suffix opnd encoding sem)
  (dni (.sym op mach - suffix - opnd)
  (dni (.sym op mach - suffix - opnd)
       (.str op mach ":" suffix " " opnd)
       (.str op mach ":" suffix " " opnd)
       ((machine mach))
       ((machine mach))
       (.str op "$" suffix " ${" opnd "}")
       (.str op "$" suffix " ${" opnd "}")
       encoding
       encoding
       (sem opnd)
       (sem opnd)
       ())
       ())
)
)
(define-pmacro (bitsrc16-defn op opc1 opc2 opc3 sem)
(define-pmacro (bitsrc16-defn op opc1 opc2 opc3 sem)
  (bit-insn-defn 16 op X bit16-16
  (bit-insn-defn 16 op X bit16-16
                 (+ opc1 opc2 opc3 bit16-16)
                 (+ opc1 opc2 opc3 bit16-16)
                 sem)
                 sem)
)
)
(define-pmacro (bitsrc32-defn op opc1 opc2 opc3 sem)
(define-pmacro (bitsrc32-defn op opc1 opc2 opc3 sem)
  (begin
  (begin
    (bit-insn-defn 32 op X bit32-24-Prefixed
    (bit-insn-defn 32 op X bit32-24-Prefixed
                   (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) bit32-24-Prefixed (f-15-1 opc2) (f-18-3 opc3))
                   (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) bit32-24-Prefixed (f-15-1 opc2) (f-18-3 opc3))
                   sem)
                   sem)
  )
  )
)
)
(define-pmacro (bitsrc-insn op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
(define-pmacro (bitsrc-insn op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
  (begin
  (begin
    (bitsrc16-defn op opc16-1 opc16-2 opc16-3 sem)
    (bitsrc16-defn op opc16-1 opc16-2 opc16-3 sem)
    (bitsrc32-defn op opc32-1 opc32-2 opc32-3 sem)
    (bitsrc32-defn op opc32-1 opc32-2 opc32-3 sem)
  )
  )
)
)
(define-pmacro (bitdst16-defn op opc1 opc2 opc3 opc4 opc5 opc6 sem)
(define-pmacro (bitdst16-defn op opc1 opc2 opc3 opc4 opc5 opc6 sem)
  (begin
  (begin
    (bit-insn-defn 16 op G bit16-16-basic (+ opc1 opc2 opc3 bit16-16-basic) sem)
    (bit-insn-defn 16 op G bit16-16-basic (+ opc1 opc2 opc3 bit16-16-basic) sem)
    (bit-insn-defn 16 op G bit16-16-16    (+ opc1 opc2 opc3 bit16-16-16) sem)
    (bit-insn-defn 16 op G bit16-16-16    (+ opc1 opc2 opc3 bit16-16-16) sem)
    (bit-insn-defn 16 op S bit16-11-S     (+ opc4 opc5 opc6 bit16-11-S) sem)
    (bit-insn-defn 16 op S bit16-11-S     (+ opc4 opc5 opc6 bit16-11-S) sem)
    (bit-insn-defn 16 op G bit16-16-8     (+ opc1 opc2 opc3 bit16-16-8) sem)
    (bit-insn-defn 16 op G bit16-16-8     (+ opc1 opc2 opc3 bit16-16-8) sem)
  )
  )
)
)
(define-pmacro (bitdst32-defn op opc1 opc2 opc3 sem)
(define-pmacro (bitdst32-defn op opc1 opc2 opc3 sem)
  (begin
  (begin
    (bit-insn-defn 32 op X bit32-16-Unprefixed
    (bit-insn-defn 32 op X bit32-16-Unprefixed
                   (+ (f-0-4 opc1) bit32-16-Unprefixed (f-7-1 opc2) (f-10-3 opc3))
                   (+ (f-0-4 opc1) bit32-16-Unprefixed (f-7-1 opc2) (f-10-3 opc3))
                   sem)
                   sem)
  )
  )
)
)
(define-pmacro (bitdstnos-insn op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
(define-pmacro (bitdstnos-insn op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
  (begin
  (begin
    (bitsrc16-defn op opc16-1 opc16-2 opc16-3 sem)
    (bitsrc16-defn op opc16-1 opc16-2 opc16-3 sem)
    (bitdst32-defn op opc32-1 opc32-2 opc32-3 sem)
    (bitdst32-defn op opc32-1 opc32-2 opc32-3 sem)
  )
  )
)
)
(define-pmacro (bitdst-insn op opc16-1 opc16-2 opc16-3 opc16-4 opc16-5 opc16-6 opc32-1 opc32-2 opc32-3 sem)
(define-pmacro (bitdst-insn op opc16-1 opc16-2 opc16-3 opc16-4 opc16-5 opc16-6 opc32-1 opc32-2 opc32-3 sem)
  (begin
  (begin
    (bitdst16-defn op opc16-1 opc16-2 opc16-3 opc16-4 opc16-5 opc16-6 sem)
    (bitdst16-defn op opc16-1 opc16-2 opc16-3 opc16-4 opc16-5 opc16-6 sem)
    (bitdst32-defn op opc32-1 opc32-2 opc32-3 sem)
    (bitdst32-defn op opc32-1 opc32-2 opc32-3 sem)
  )
  )
)
)
;=============================================================
;=============================================================
; Bit condition
; Bit condition
;
;
(define-pmacro (bitcond-insn-defn mach op bit-opnd cond-opnd encoding sem)
(define-pmacro (bitcond-insn-defn mach op bit-opnd cond-opnd encoding sem)
  (dni (.sym op mach - bit-opnd - cond-opnd)
  (dni (.sym op mach - bit-opnd - cond-opnd)
       (.str op mach " " bit-opnd " " cond-opnd)
       (.str op mach " " bit-opnd " " cond-opnd)
       ((machine mach))
       ((machine mach))
       (.str op "${" cond-opnd "} ${" bit-opnd "}")
       (.str op "${" cond-opnd "} ${" bit-opnd "}")
       encoding
       encoding
       (sem mach bit-opnd cond-opnd)
       (sem mach bit-opnd cond-opnd)
       ())
       ())
)
)
(define-pmacro (bitcond16-defn op opc1 opc2 opc3 sem)
(define-pmacro (bitcond16-defn op opc1 opc2 opc3 sem)
  (begin
  (begin
    (bitcond-insn-defn 16 op bit16-16-basic cond16-16 (+ opc1 opc2 opc3 bit16-16-basic cond16-16) sem)
    (bitcond-insn-defn 16 op bit16-16-basic cond16-16 (+ opc1 opc2 opc3 bit16-16-basic cond16-16) sem)
    (bitcond-insn-defn 16 op bit16-16-16    cond16-32 (+ opc1 opc2 opc3 bit16-16-16 cond16-32) sem)
    (bitcond-insn-defn 16 op bit16-16-16    cond16-32 (+ opc1 opc2 opc3 bit16-16-16 cond16-32) sem)
    (bitcond-insn-defn 16 op bit16-16-8     cond16-24 (+ opc1 opc2 opc3 bit16-16-8 cond16-24) sem)
    (bitcond-insn-defn 16 op bit16-16-8     cond16-24 (+ opc1 opc2 opc3 bit16-16-8 cond16-24) sem)
  )
  )
)
)
(define-pmacro (bitcond32-defn op opc1 opc2 opc3 sem)
(define-pmacro (bitcond32-defn op opc1 opc2 opc3 sem)
  (begin
  (begin
    (bitcond-insn-defn 32 op bit32-16-24-Unprefixed cond32-40
    (bitcond-insn-defn 32 op bit32-16-24-Unprefixed cond32-40
                       (+ (f-0-4 opc1) bit32-16-24-Unprefixed (f-7-1 opc2) (f-10-3 opc3) cond32-40)
                       (+ (f-0-4 opc1) bit32-16-24-Unprefixed (f-7-1 opc2) (f-10-3 opc3) cond32-40)
                       sem)
                       sem)
    (bitcond-insn-defn 32 op bit32-16-16-Unprefixed cond32-32
    (bitcond-insn-defn 32 op bit32-16-16-Unprefixed cond32-32
                       (+ (f-0-4 opc1) bit32-16-16-Unprefixed (f-7-1 opc2) (f-10-3 opc3) cond32-32)
                       (+ (f-0-4 opc1) bit32-16-16-Unprefixed (f-7-1 opc2) (f-10-3 opc3) cond32-32)
                       sem)
                       sem)
    (bitcond-insn-defn 32 op bit32-16-8-Unprefixed cond32-24
    (bitcond-insn-defn 32 op bit32-16-8-Unprefixed cond32-24
                       (+ (f-0-4 opc1) bit32-16-8-Unprefixed (f-7-1 opc2) (f-10-3 opc3) cond32-24)
                       (+ (f-0-4 opc1) bit32-16-8-Unprefixed (f-7-1 opc2) (f-10-3 opc3) cond32-24)
                       sem)
                       sem)
    (bitcond-insn-defn 32 op bit32-basic-Unprefixed cond32-16
    (bitcond-insn-defn 32 op bit32-basic-Unprefixed cond32-16
                       (+ (f-0-4 opc1) bit32-basic-Unprefixed (f-7-1 opc2) (f-10-3 opc3) cond32-16)
                       (+ (f-0-4 opc1) bit32-basic-Unprefixed (f-7-1 opc2) (f-10-3 opc3) cond32-16)
                       sem)
                       sem)
  )
  )
)
)
(define-pmacro (bitcond-insn op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
(define-pmacro (bitcond-insn op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
  (begin
  (begin
    (bitcond16-defn op opc16-1 opc16-2 opc16-3 sem)
    (bitcond16-defn op opc16-1 opc16-2 opc16-3 sem)
    (bitcond32-defn op opc32-1 opc32-2 opc32-3 sem)
    (bitcond32-defn op opc32-1 opc32-2 opc32-3 sem)
  )
  )
)
)
;=============================================================
;=============================================================
;.size #imm1,#imm2,dst -- for m32c
;.size #imm1,#imm2,dst -- for m32c
;
;
(define-pmacro (insn-imm1-imm2-dst-defn src1 src2 dstgroup xmode wstr op encoding sem)
(define-pmacro (insn-imm1-imm2-dst-defn src1 src2 dstgroup xmode wstr op encoding sem)
  (dni (.sym op 32 wstr - src1 - src2 - dstgroup)
  (dni (.sym op 32 wstr - src1 - src2 - dstgroup)
       (.str op 32 wstr "-" src1 "-" src2 "-" dstgroup "-" xmode)
       (.str op 32 wstr "-" src1 "-" src2 "-" dstgroup "-" xmode)
       ((machine 32))
       ((machine 32))
       (.str op wstr " #${" src1 "},#${" src2 "},${dst32-" dstgroup "-" xmode "}")
       (.str op wstr " #${" src1 "},#${" src2 "},${dst32-" dstgroup "-" xmode "}")
       encoding
       encoding
       (sem xmode src1 src2 (.sym dst32- dstgroup - xmode))
       (sem xmode src1 src2 (.sym dst32- dstgroup - xmode))
       ())
       ())
)
)
; m32c Prefixed variants
; m32c Prefixed variants
(define-pmacro (insn32-imm1-imm2-dst-Prefixed-defn xmode wstr wbit base1 base2 base3 base4 op opc1 opc2 opc3 sem)
(define-pmacro (insn32-imm1-imm2-dst-Prefixed-defn xmode wstr wbit base1 base2 base3 base4 op opc1 opc2 opc3 sem)
  (begin
  (begin
    (insn-imm1-imm2-dst-defn (.sym Imm-48- xmode) (.sym Imm- base4 - xmode) 24-24-Prefixed xmode wstr op
    (insn-imm1-imm2-dst-defn (.sym Imm-48- xmode) (.sym Imm- base4 - xmode) 24-24-Prefixed xmode wstr op
                             (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3)
                             (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3)
                                (.sym dst32-24-24-Prefixed- xmode) (.sym Imm-48- xmode) (.sym Imm- base4 - xmode))
                                (.sym dst32-24-24-Prefixed- xmode) (.sym Imm-48- xmode) (.sym Imm- base4 - xmode))
                             sem)
                             sem)
    (insn-imm1-imm2-dst-defn (.sym Imm-40- xmode) (.sym Imm- base3 - xmode) 24-16-Prefixed xmode wstr op
    (insn-imm1-imm2-dst-defn (.sym Imm-40- xmode) (.sym Imm- base3 - xmode) 24-16-Prefixed xmode wstr op
                             (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3)
                             (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3)
                                (.sym dst32-24-16-Prefixed- xmode) (.sym Imm-40- xmode) (.sym Imm- base3 - xmode))
                                (.sym dst32-24-16-Prefixed- xmode) (.sym Imm-40- xmode) (.sym Imm- base3 - xmode))
                             sem)
                             sem)
    (insn-imm1-imm2-dst-defn (.sym Imm-32- xmode) (.sym Imm- base2 - xmode) 24-8-Prefixed xmode wstr op
    (insn-imm1-imm2-dst-defn (.sym Imm-32- xmode) (.sym Imm- base2 - xmode) 24-8-Prefixed xmode wstr op
                             (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3)
                             (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3)
                                (.sym dst32-24-8-Prefixed- xmode) (.sym Imm-32- xmode) (.sym Imm- base2 - xmode))
                                (.sym dst32-24-8-Prefixed- xmode) (.sym Imm-32- xmode) (.sym Imm- base2 - xmode))
                             sem)
                             sem)
    (insn-imm1-imm2-dst-defn (.sym Imm-24- xmode) (.sym Imm- base1 - xmode) basic-Prefixed xmode wstr op
    (insn-imm1-imm2-dst-defn (.sym Imm-24- xmode) (.sym Imm- base1 - xmode) basic-Prefixed xmode wstr op
                             (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3)
                             (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3)
                                (.sym dst32-basic-Prefixed- xmode) (.sym Imm-24- xmode) (.sym Imm- base1 - xmode))
                                (.sym dst32-basic-Prefixed- xmode) (.sym Imm-24- xmode) (.sym Imm- base1 - xmode))
                             sem)
                             sem)
  )
  )
)
)
; m32c Unprefixed variants
; m32c Unprefixed variants
(define-pmacro (insn32-imm1-imm2-dst-Unprefixed-defn xmode wstr wbit base1 base2 base3 base4 op opc1 opc2 opc3 sem)
(define-pmacro (insn32-imm1-imm2-dst-Unprefixed-defn xmode wstr wbit base1 base2 base3 base4 op opc1 opc2 opc3 sem)
  (begin
  (begin
    (insn-imm1-imm2-dst-defn (.sym Imm-40- xmode) (.sym Imm- base4 - xmode) 16-24-Unprefixed xmode wstr op
    (insn-imm1-imm2-dst-defn (.sym Imm-40- xmode) (.sym Imm- base4 - xmode) 16-24-Unprefixed xmode wstr op
                             (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3)
                             (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3)
                                (.sym dst32-16-24-Unprefixed- xmode) (.sym Imm-40- xmode) (.sym Imm- base4 - xmode))
                                (.sym dst32-16-24-Unprefixed- xmode) (.sym Imm-40- xmode) (.sym Imm- base4 - xmode))
                             sem)
                             sem)
    (insn-imm1-imm2-dst-defn (.sym Imm-32- xmode) (.sym Imm- base3 - xmode) 16-16-Unprefixed xmode wstr op
    (insn-imm1-imm2-dst-defn (.sym Imm-32- xmode) (.sym Imm- base3 - xmode) 16-16-Unprefixed xmode wstr op
                             (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3)
                             (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3)
                                (.sym dst32-16-16-Unprefixed- xmode) (.sym Imm-32- xmode) (.sym Imm- base3 - xmode))
                                (.sym dst32-16-16-Unprefixed- xmode) (.sym Imm-32- xmode) (.sym Imm- base3 - xmode))
                             sem)
                             sem)
    (insn-imm1-imm2-dst-defn (.sym Imm-24- xmode) (.sym Imm- base2 - xmode) 16-8-Unprefixed xmode wstr op
    (insn-imm1-imm2-dst-defn (.sym Imm-24- xmode) (.sym Imm- base2 - xmode) 16-8-Unprefixed xmode wstr op
                             (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3)
                             (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3)
                                (.sym dst32-16-8-Unprefixed- xmode) (.sym Imm-24- xmode) (.sym Imm- base2 - xmode))
                                (.sym dst32-16-8-Unprefixed- xmode) (.sym Imm-24- xmode) (.sym Imm- base2 - xmode))
                             sem)
                             sem)
    (insn-imm1-imm2-dst-defn (.sym Imm-16- xmode) (.sym Imm- base1 - xmode) basic-Unprefixed xmode wstr op
    (insn-imm1-imm2-dst-defn (.sym Imm-16- xmode) (.sym Imm- base1 - xmode) basic-Unprefixed xmode wstr op
                             (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3)
                             (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3)
                                (.sym dst32-basic-Unprefixed- xmode) (.sym Imm-16- xmode) (.sym Imm- base1 - xmode))
                                (.sym dst32-basic-Unprefixed- xmode) (.sym Imm-16- xmode) (.sym Imm- base1 - xmode))
                             sem)
                             sem)
  )
  )
)
)
(define-pmacro (insn-imm1-imm2-dst-Prefixed op opc32-1 opc32-2 opc32-3 sem)
(define-pmacro (insn-imm1-imm2-dst-Prefixed op opc32-1 opc32-2 opc32-3 sem)
  (begin
  (begin
    (insn32-imm1-imm2-dst-Prefixed-defn QI .b 0 32 40 48 56 op opc32-1 opc32-2 opc32-3 sem)
    (insn32-imm1-imm2-dst-Prefixed-defn QI .b 0 32 40 48 56 op opc32-1 opc32-2 opc32-3 sem)
    (insn32-imm1-imm2-dst-Prefixed-defn HI .w 1 40 48 56 64 op opc32-1 opc32-2 opc32-3 sem)
    (insn32-imm1-imm2-dst-Prefixed-defn HI .w 1 40 48 56 64 op opc32-1 opc32-2 opc32-3 sem)
  )
  )
)
)
(define-pmacro (insn-imm1-imm2-dst-Unprefixed op opc32-1 opc32-2 opc32-3 sem)
(define-pmacro (insn-imm1-imm2-dst-Unprefixed op opc32-1 opc32-2 opc32-3 sem)
  (begin
  (begin
    (insn32-imm1-imm2-dst-Unprefixed-defn QI .b 0 24 32 40 48 op opc32-1 opc32-2 opc32-3 sem)
    (insn32-imm1-imm2-dst-Unprefixed-defn QI .b 0 24 32 40 48 op opc32-1 opc32-2 opc32-3 sem)
    (insn32-imm1-imm2-dst-Unprefixed-defn HI .w 1 32 40 48 56 op opc32-1 opc32-2 opc32-3 sem)
    (insn32-imm1-imm2-dst-Unprefixed-defn HI .w 1 32 40 48 56 op opc32-1 opc32-2 opc32-3 sem)
  )
  )
)
)


;=============================================================
;=============================================================
; Insn definitions
; Insn definitions
;-------------------------------------------------------------
;-------------------------------------------------------------
; abs - absolute
; abs - absolute
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (abs-sem mode dst)
(define-pmacro (abs-sem mode dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (abs mode dst))
            (set result (abs mode dst))
            (set obit (eq result dst))
            (set obit (eq result dst))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dst result))
            (set dst result))
)
)
(unary-insn abs (f-0-4 7) (f-4-3 3) (f-8-4 #xF) #xA #x1 #xF abs-sem)
(unary-insn abs (f-0-4 7) (f-4-3 3) (f-8-4 #xF) #xA #x1 #xF abs-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; adcf - addition carry flag
; adcf - addition carry flag
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (adcf-sem mode dst)
(define-pmacro (adcf-sem mode dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (addc mode dst 0 cbit))
            (set result (addc mode dst 0 cbit))
            (set obit (add-oflag mode dst 0 cbit))
            (set obit (add-oflag mode dst 0 cbit))
            (set cbit (add-cflag mode dst 0 cbit))
            (set cbit (add-cflag mode dst 0 cbit))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dst result))
            (set dst result))
)
)
(unary-insn adcf (f-0-4 7) (f-4-3 3) (f-8-4 #xE) #xB #x1 #xE adcf-sem)
(unary-insn adcf (f-0-4 7) (f-4-3 3) (f-8-4 #xE) #xB #x1 #xE adcf-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; add - binary addition
; add - binary addition
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (add-sem mode src1 dst)
(define-pmacro (add-sem mode src1 dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (add mode src1 dst))
            (set result (add mode src1 dst))
            (set obit (add-oflag mode src1 dst 0))
            (set obit (add-oflag mode src1 dst 0))
            (set cbit (add-cflag mode src1 dst 0))
            (set cbit (add-cflag mode src1 dst 0))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dst result))
            (set dst result))
)
)
; add.L:G #imm32,dst (m32 #2)
; add.L:G #imm32,dst (m32 #2)
(binary-arith32-imm-dst-defn SI SI .l 0 add G #x8 #x3 #x1 add-sem)
(binary-arith32-imm-dst-defn SI SI .l 0 add G #x8 #x3 #x1 add-sem)
; add.size:G #imm,dst (m16 #1 m32 #1)
; add.size:G #imm,dst (m16 #1 m32 #1)
(binary-arith-imm-dst add G (f-0-4 7) (f-4-3 3) (f-8-4 4) #x8 #x2 #xE add-sem)
(binary-arith-imm-dst add G (f-0-4 7) (f-4-3 3) (f-8-4 4) #x8 #x2 #xE add-sem)
; add.size:Q #imm4,dst (m16 #2 m32 #3)
; add.size:Q #imm4,dst (m16 #2 m32 #3)
(binary-arith-imm4-dst add (f-0-4 #xC) (f-4-3 4) #x7 #x3 add-sem)
(binary-arith-imm4-dst add (f-0-4 #xC) (f-4-3 4) #x7 #x3 add-sem)
(binary-arith32-imm4-dst-defn SI .l 1 0 add #x7 #x3 add-sem)
(binary-arith32-imm4-dst-defn SI .l 1 0 add #x7 #x3 add-sem)
; add.b:S #imm8,dst3 (m16 #3)
; add.b:S #imm8,dst3 (m16 #3)
(binary-arith16-b-S-imm8-dst3 add ".b" (f-0-4 8) (f-4-1 0) add-sem)
(binary-arith16-b-S-imm8-dst3 add ".b" (f-0-4 8) (f-4-1 0) add-sem)
; add.BW:Q #imm4,sp (m16 #7)
; add.BW:Q #imm4,sp (m16 #7)
(binary-arith16-Q-sp add (f-0-4 7) (f-4-4 #xD) (f-8-4 #xB) add-sem)
(binary-arith16-Q-sp add (f-0-4 7) (f-4-4 #xD) (f-8-4 #xB) add-sem)
(dnmi add16-bQ-sp "add16-bQ-sp" ()
(dnmi add16-bQ-sp "add16-bQ-sp" ()
      "add.b:q #${Imm-12-s4},sp"
      "add.b:q #${Imm-12-s4},sp"
      (emit add16-wQ-sp Imm-12-s4))
      (emit add16-wQ-sp Imm-12-s4))
; add.BW:G #imm,sp (m16 #6)
; add.BW:G #imm,sp (m16 #6)
(binary-arith16-G-sp add (f-0-4 7) (f-4-3 6) (f-8-4 #xE) (f-12-4 #xB) add-sem)
(binary-arith16-G-sp add (f-0-4 7) (f-4-3 6) (f-8-4 #xE) (f-12-4 #xB) add-sem)
; add.BW:G src,dst (m16 #4 m32 #6)
; add.BW:G src,dst (m16 #4 m32 #6)
(binary-arith-src-dst add G (f-0-4 #xA) (f-4-3 0) #x1 #x8 add-sem)
(binary-arith-src-dst add G (f-0-4 #xA) (f-4-3 0) #x1 #x8 add-sem)
; add.B.S src2,r0l/r0h (m16 #5)
; add.B.S src2,r0l/r0h (m16 #5)
(binary-arith16-b-S-src2 add (f-0-4 2) (f-4-1 0) add-sem)
(binary-arith16-b-S-src2 add (f-0-4 2) (f-4-1 0) add-sem)
; add.L:G src,dst (m32 #7)
; add.L:G src,dst (m32 #7)
(binary-arith32-src-dst-defn SI SI .l 1 add G #x1 #x2 add-sem)
(binary-arith32-src-dst-defn SI SI .l 1 add G #x1 #x2 add-sem)
; add.L:S #imm{1,2},A0/A1 (m32 #5)
; add.L:S #imm{1,2},A0/A1 (m32 #5)
(binary-arith32-l-s-imm1-an add (f-0-2 2) (f-3-4 6) add-sem)
(binary-arith32-l-s-imm1-an add (f-0-2 2) (f-3-4 6) add-sem)
; add.L:Q #imm3,sp (m32 #9)
; add.L:Q #imm3,sp (m32 #9)
(binary-arith32-l-q-imm3-sp add (f-0-2 1) (f-4-3 1) add-sem)
(binary-arith32-l-q-imm3-sp add (f-0-2 1) (f-4-3 1) add-sem)
; add.L:S #imm8,sp (m32 #10)
; add.L:S #imm8,sp (m32 #10)
(binary-arith32-l-s-imm8-sp add (f-0-4 #xb) (f-4-4 6) (f-8-4 0) (f-12-4 3) add-sem)
(binary-arith32-l-s-imm8-sp add (f-0-4 #xb) (f-4-4 6) (f-8-4 0) (f-12-4 3) add-sem)
; add.L:G #imm16,sp (m32 #8)
; add.L:G #imm16,sp (m32 #8)
(binary-arith32-l-g-imm16-sp add (f-0-4 #xb) (f-4-4 6) (f-8-4 1) (f-12-4 3) add-sem)
(binary-arith32-l-g-imm16-sp add (f-0-4 #xb) (f-4-4 6) (f-8-4 1) (f-12-4 3) add-sem)
; add.BW:S #imm,dst2 (m32 #4)
; add.BW:S #imm,dst2 (m32 #4)
(binary-arith32-s-imm-dst QI .b 0 add #x0 #x3 add-sem)
(binary-arith32-s-imm-dst QI .b 0 add #x0 #x3 add-sem)
(binary-arith32-s-imm-dst HI .w 1 add #x0 #x3 add-sem)
(binary-arith32-s-imm-dst HI .w 1 add #x0 #x3 add-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; adc - binary add with carry
; adc - binary add with carry
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (addc-sem mode src dst)
(define-pmacro (addc-sem mode src dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (addc mode src dst cbit))
            (set result (addc mode src dst cbit))
            (set obit (add-oflag mode src dst cbit))
            (set obit (add-oflag mode src dst cbit))
            (set cbit (add-cflag mode src dst cbit))
            (set cbit (add-cflag mode src dst cbit))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dst result))
            (set dst result))
)
)
; adc.size:G #imm,dst
; adc.size:G #imm,dst
(binary-arith16-imm-dst-defn QI QI .b 0 adc X (f-0-4 7) (f-4-3 3) (f-8-4 6) addc-sem)
(binary-arith16-imm-dst-defn QI QI .b 0 adc X (f-0-4 7) (f-4-3 3) (f-8-4 6) addc-sem)
(binary-arith16-imm-dst-defn HI HI .w 1 adc X (f-0-4 7) (f-4-3 3) (f-8-4 6) addc-sem)
(binary-arith16-imm-dst-defn HI HI .w 1 adc X (f-0-4 7) (f-4-3 3) (f-8-4 6) addc-sem)
(binary-arith32-imm-dst-Prefixed QI QI .b 0 adc X #x8 #x2 #xE addc-sem)
(binary-arith32-imm-dst-Prefixed QI QI .b 0 adc X #x8 #x2 #xE addc-sem)
(binary-arith32-imm-dst-Prefixed HI HI .w 1 adc X #x8 #x2 #xE addc-sem)
(binary-arith32-imm-dst-Prefixed HI HI .w 1 adc X #x8 #x2 #xE addc-sem)
; adc.BW:G src,dst
; adc.BW:G src,dst
(binary-arith16-src-dst-defn QI QI .b 0 adc X (f-0-4 #xB) (f-4-3 0) addc-sem)
(binary-arith16-src-dst-defn QI QI .b 0 adc X (f-0-4 #xB) (f-4-3 0) addc-sem)
(binary-arith16-src-dst-defn HI HI .w 1 adc X (f-0-4 #xB) (f-4-3 0) addc-sem)
(binary-arith16-src-dst-defn HI HI .w 1 adc X (f-0-4 #xB) (f-4-3 0) addc-sem)
(binary-arith32-src-dst-Prefixed QI QI .b 0 adc X #x1 #x4 addc-sem)
(binary-arith32-src-dst-Prefixed QI QI .b 0 adc X #x1 #x4 addc-sem)
(binary-arith32-src-dst-Prefixed HI HI .w 1 adc X #x1 #x4 addc-sem)
(binary-arith32-src-dst-Prefixed HI HI .w 1 adc X #x1 #x4 addc-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; dadc - decimal add with carry
; dadc - decimal add with carry
; dadd - decimal addition
; dadd - decimal addition
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (dadc-sem mode src dst)
(define-pmacro (dadc-sem mode src dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (subc mode dst src (not cbit)))
            (set result (subc mode dst src (not cbit)))
            (set cbit (sub-cflag mode dst src (not cbit)))
            (set cbit (sub-cflag mode dst src (not cbit)))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dst result))
            (set dst result))
)
)
(define-pmacro (decimal-subtraction16-insn op opc1 opc2)
(define-pmacro (decimal-subtraction16-insn op opc1 opc2)
  (begin
  (begin
    ; op.b #imm8,r0l
    ; op.b #imm8,r0l
    (dni (.sym op 16.b-imm8)
    (dni (.sym op 16.b-imm8)
         (.str op ".b #imm8")
         (.str op ".b #imm8")
         ((machine 16))
         ((machine 16))
         (.str op ".b #${Imm-16-QI},r0l")
         (.str op ".b #${Imm-16-QI},r0l")
         (+ (f-0-4 #x7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 opc1) Imm-16-QI)
         (+ (f-0-4 #x7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 opc1) Imm-16-QI)
         ((.sym op -sem) QI Imm-16-QI R0l)
         ((.sym op -sem) QI Imm-16-QI R0l)
         ())
         ())
    ; op.w #imm16,r0
    ; op.w #imm16,r0
    (dni (.sym op 16.w-imm16)
    (dni (.sym op 16.w-imm16)
         (.str op ".b #imm16")
         (.str op ".b #imm16")
         ((machine 16))
         ((machine 16))
         (.str op ".w #${Imm-16-HI},r0")
         (.str op ".w #${Imm-16-HI},r0")
         (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 opc1) Imm-16-HI)
         (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 opc1) Imm-16-HI)
         ((.sym op -sem) HI Imm-16-HI R0)
         ((.sym op -sem) HI Imm-16-HI R0)
         ())
         ())
    ; op.b #r0h,r0l
    ; op.b #r0h,r0l
    (dni (.sym op 16.b-r0h-r0l)
    (dni (.sym op 16.b-r0h-r0l)
         (.str op ".b r0h,r0l")
         (.str op ".b r0h,r0l")
         ((machine 16))
         ((machine 16))
         (.str op ".b r0h,r0l")
         (.str op ".b r0h,r0l")
         (+ (f-0-4 #x7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 opc2))
         (+ (f-0-4 #x7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 opc2))
         ((.sym op -sem) QI R0h R0l)
         ((.sym op -sem) QI R0h R0l)
         ())
         ())
    ; op.w #r1,r0
    ; op.w #r1,r0
    (dni (.sym op 16.w-r1-r0)
    (dni (.sym op 16.w-r1-r0)
         (.str op ".b r1,r0")
         (.str op ".b r1,r0")
         ((machine 16))
         ((machine 16))
         (.str op ".w r1,r0")
         (.str op ".w r1,r0")
         (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 opc2))
         (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 opc2))
         ((.sym op -sem) HI R1 R0)
         ((.sym op -sem) HI R1 R0)
         ())
         ())
  )
  )
)
)
; dadc for m16c
; dadc for m16c
(decimal-subtraction16-insn dadc #xE #x6 )
(decimal-subtraction16-insn dadc #xE #x6 )
; dadc.size #imm,dst
; dadc.size #imm,dst
(binary-arith32-imm-dst-Prefixed QI QI .b 0 dadc X #x8 #x0 #xE dadc-sem)
(binary-arith32-imm-dst-Prefixed QI QI .b 0 dadc X #x8 #x0 #xE dadc-sem)
(binary-arith32-imm-dst-Prefixed HI HI .w 1 dadc X #x8 #x0 #xE dadc-sem)
(binary-arith32-imm-dst-Prefixed HI HI .w 1 dadc X #x8 #x0 #xE dadc-sem)
; dadc.BW src,dst
; dadc.BW src,dst
(binary-arith32-src-dst-Prefixed QI QI .b 0 dadc X #x1 #x8 dadc-sem)
(binary-arith32-src-dst-Prefixed QI QI .b 0 dadc X #x1 #x8 dadc-sem)
(binary-arith32-src-dst-Prefixed HI HI .w 1 dadc X #x1 #x8 dadc-sem)
(binary-arith32-src-dst-Prefixed HI HI .w 1 dadc X #x1 #x8 dadc-sem)
(define-pmacro (dadd-sem mode src dst)
(define-pmacro (dadd-sem mode src dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (subc mode dst src 0))
            (set result (subc mode dst src 0))
            (set cbit (sub-cflag mode dst src 0))
            (set cbit (sub-cflag mode dst src 0))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dst result))
            (set dst result))
)
)
; dadd for m16c
; dadd for m16c
(decimal-subtraction16-insn dadd #xC #x4)
(decimal-subtraction16-insn dadd #xC #x4)
; dadd.size #imm,dst
; dadd.size #imm,dst
(binary-arith32-imm-dst-Prefixed QI QI .b 0 dadd X #x8 #x1 #xE dadd-sem)
(binary-arith32-imm-dst-Prefixed QI QI .b 0 dadd X #x8 #x1 #xE dadd-sem)
(binary-arith32-imm-dst-Prefixed HI HI .w 1 dadd X #x8 #x1 #xE dadd-sem)
(binary-arith32-imm-dst-Prefixed HI HI .w 1 dadd X #x8 #x1 #xE dadd-sem)
; dadd.BW src,dst
; dadd.BW src,dst
(binary-arith32-src-dst-Prefixed QI QI .b 0 dadd X #x1 #x0 dadd-sem)
(binary-arith32-src-dst-Prefixed QI QI .b 0 dadd X #x1 #x0 dadd-sem)
(binary-arith32-src-dst-Prefixed HI HI .w 1 dadd X #x1 #x0 dadd-sem)
(binary-arith32-src-dst-Prefixed HI HI .w 1 dadd X #x1 #x0 dadd-sem)
;-------------------------------------------------------------;
;-------------------------------------------------------------;
; addx - Add extend sign with no carry
; addx - Add extend sign with no carry
;-------------------------------------------------------------;
;-------------------------------------------------------------;
(define-pmacro (addx-sem mode src dst)
(define-pmacro (addx-sem mode src dst)
  (sequence ((SI source) (SI result))
  (sequence ((SI source) (SI result))
            (set source (zext SI (trunc QI src)))
            (set source (zext SI (trunc QI src)))
            (set result (add SI source dst))
            (set result (add SI source dst))
            (set obit (add-oflag SI source dst 0))
            (set obit (add-oflag SI source dst 0))
            (set cbit (add-cflag SI source dst 0))
            (set cbit (add-cflag SI source dst 0))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dst result))
            (set dst result))
)
)
; addx #imm,dst
; addx #imm,dst
(binary-arith32-imm-dst-defn QI SI "" 0 addx X #x8 #x1 #x1 addx-sem)
(binary-arith32-imm-dst-defn QI SI "" 0 addx X #x8 #x1 #x1 addx-sem)
; addx src,dst
; addx src,dst
(binary-arith32-src-dst-defn QI SI "" 0 addx X #x1 #x2 addx-sem)
(binary-arith32-src-dst-defn QI SI "" 0 addx X #x1 #x2 addx-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; adjnz - Add/Sub and branch if not zero
; adjnz - Add/Sub and branch if not zero
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (arith-jnz-sem mode src dst label)
(define-pmacro (arith-jnz-sem mode src dst label)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (add mode src dst))
            (set result (add mode src dst))
            (set dst result)
            (set dst result)
            (if (ne result 0)
            (if (ne result 0)
                (set pc label)))
                (set pc label)))
)
)
; adjnz.size #imm4,dst,label
; adjnz.size #imm4,dst,label
(arith-jnz-imm4-dst adjnz s4 (f-0-4 #xF) (f-4-3 4) #xf #x1 arith-jnz-sem)
(arith-jnz-imm4-dst adjnz s4 (f-0-4 #xF) (f-4-3 4) #xf #x1 arith-jnz-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; and - binary and
; and - binary and
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (and-sem mode src1 dst)
(define-pmacro (and-sem mode src1 dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (and mode src1 dst))
            (set result (and mode src1 dst))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dst result))
            (set dst result))
)
)
; and.size:G #imm,dst (m16 #1 m32 #1)
; and.size:G #imm,dst (m16 #1 m32 #1)
(binary-arith-imm-dst and G (f-0-4 7) (f-4-3 3) (f-8-4 2) #x8 #x3 #xF and-sem)
(binary-arith-imm-dst and G (f-0-4 7) (f-4-3 3) (f-8-4 2) #x8 #x3 #xF and-sem)
; and.b:S #imm8,dst3 (m16 #2)
; and.b:S #imm8,dst3 (m16 #2)
(binary-arith16-b-S-imm8-dst3 and ".b" (f-0-4 9) (f-4-1 0) and-sem)
(binary-arith16-b-S-imm8-dst3 and ".b" (f-0-4 9) (f-4-1 0) and-sem)
; and.BW:G src,dst (m16 #3 m32 #3)
; and.BW:G src,dst (m16 #3 m32 #3)
(binary-arith-src-dst and G (f-0-4 #x9) (f-4-3 0) #x1 #xD and-sem)
(binary-arith-src-dst and G (f-0-4 #x9) (f-4-3 0) #x1 #xD and-sem)
; and.B.S src2,r0l/r0h (m16 #4)
; and.B.S src2,r0l/r0h (m16 #4)
(binary-arith16-b-S-src2 and (f-0-4 1) (f-4-1 0) and-sem)
(binary-arith16-b-S-src2 and (f-0-4 1) (f-4-1 0) and-sem)
; and.BW:S #imm,dst2 (m32 #2)
; and.BW:S #imm,dst2 (m32 #2)
(binary-arith32-s-imm-dst QI .b 0 and #x1 #x6 and-sem)
(binary-arith32-s-imm-dst QI .b 0 and #x1 #x6 and-sem)
(binary-arith32-s-imm-dst HI .w 1 and #x1 #x6 and-sem)
(binary-arith32-s-imm-dst HI .w 1 and #x1 #x6 and-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; band - bit and
; band - bit and
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (band-sem src)
(define-pmacro (band-sem src)
  (set cbit (and src cbit))
  (set cbit (and src cbit))
)
)
(bitsrc-insn band (f-0-4 7) (f-4-4 #xE) (f-8-4 4) #xD #x0 #x1 band-sem)
(bitsrc-insn band (f-0-4 7) (f-4-4 #xE) (f-8-4 4) #xD #x0 #x1 band-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; bclr - bit clear
; bclr - bit clear
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (bclr-sem dst)
(define-pmacro (bclr-sem dst)
  (set dst 0)
  (set dst 0)
)
)
(bitdst-insn bclr (f-0-4 7) (f-4-4 #xE) (f-8-4 8) (f-0-2 1) (f-2-2 0) (f-4-1 0) #xD #x0 #x6 bclr-sem)
(bitdst-insn bclr (f-0-4 7) (f-4-4 #xE) (f-8-4 8) (f-0-2 1) (f-2-2 0) (f-4-1 0) #xD #x0 #x6 bclr-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; bitindex - bit index
; bitindex - bit index
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (bitindex-sem mode dst)
(define-pmacro (bitindex-sem mode dst)
  (set BitIndex dst)
  (set BitIndex dst)
)
)
(unary-insn-defn 32 16-Unprefixed QI .b bitindex
(unary-insn-defn 32 16-Unprefixed QI .b bitindex
                     (+ (f-0-4 #xC) (f-7-1 0) dst32-16-Unprefixed-QI (f-10-2 #x2) (f-12-4 #xE))
                     (+ (f-0-4 #xC) (f-7-1 0) dst32-16-Unprefixed-QI (f-10-2 #x2) (f-12-4 #xE))
                     bitindex-sem)
                     bitindex-sem)
(unary-insn-defn 32 16-Unprefixed HI .w bitindex
(unary-insn-defn 32 16-Unprefixed HI .w bitindex
                     (+ (f-0-4 #xC) (f-7-1 1) dst32-16-Unprefixed-HI (f-10-2 #x2) (f-12-4 #xE))
                     (+ (f-0-4 #xC) (f-7-1 1) dst32-16-Unprefixed-HI (f-10-2 #x2) (f-12-4 #xE))
                     bitindex-sem)
                     bitindex-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; bmCnd - bit move condition
; bmCnd - bit move condition
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (test-condition16 cond)
(define-pmacro (test-condition16 cond)
  (case UQI cond
  (case UQI cond
        ((#x00) (trunc BI cbit))
        ((#x00) (trunc BI cbit))
        ((#x01) (not (or cbit zbit)))
        ((#x01) (not (or cbit zbit)))
        ((#x02) (trunc BI zbit))
        ((#x02) (trunc BI zbit))
        ((#x03) (trunc BI sbit))
        ((#x03) (trunc BI sbit))
        ((#x04) (or zbit (xor sbit obit)))
        ((#x04) (or zbit (xor sbit obit)))
        ((#x05) (trunc BI obit))
        ((#x05) (trunc BI obit))
        ((#x06) (xor sbit obit))
        ((#x06) (xor sbit obit))
        ((#xf8) (not cbit))
        ((#xf8) (not cbit))
        ((#xf9) (or cbit zbit))
        ((#xf9) (or cbit zbit))
        ((#xfa) (not zbit))
        ((#xfa) (not zbit))
        ((#xfb) (not sbit))
        ((#xfb) (not sbit))
        ((#xfc) (not (or zbit (xor sbit obit))))
        ((#xfc) (not (or zbit (xor sbit obit))))
        ((#xfd) (not obit))
        ((#xfd) (not obit))
        ((#xfe) (not (xor sbit obit)))
        ((#xfe) (not (xor sbit obit)))
        (else   (const BI 0))
        (else   (const BI 0))
  )
  )
)
)
(define-pmacro (test-condition32 cond)
(define-pmacro (test-condition32 cond)
  (case UQI cond
  (case UQI cond
        ((#x00) (not cbit))
        ((#x00) (not cbit))
        ((#x01) (or cbit zbit))
        ((#x01) (or cbit zbit))
        ((#x02) (not zbit))
        ((#x02) (not zbit))
        ((#x03) (not sbit))
        ((#x03) (not sbit))
        ((#x04) (not obit))
        ((#x04) (not obit))
        ((#x05) (not (or zbit (xor sbit obit))))
        ((#x05) (not (or zbit (xor sbit obit))))
        ((#x06) (not (xor sbit obit)))
        ((#x06) (not (xor sbit obit)))
        ((#x08) (trunc BI cbit))
        ((#x08) (trunc BI cbit))
        ((#x09) (not (or cbit zbit)))
        ((#x09) (not (or cbit zbit)))
        ((#x0a) (trunc BI zbit))
        ((#x0a) (trunc BI zbit))
        ((#x0b) (trunc BI sbit))
        ((#x0b) (trunc BI sbit))
        ((#x0c) (trunc BI obit))
        ((#x0c) (trunc BI obit))
        ((#x0d) (or zbit (xor sbit obit)))
        ((#x0d) (or zbit (xor sbit obit)))
        ((#x0e) (xor sbit obit))
        ((#x0e) (xor sbit obit))
        (else   (const BI 0))
        (else   (const BI 0))
  )
  )
)
)
(define-pmacro (bitcond-sem mach op cond)
(define-pmacro (bitcond-sem mach op cond)
  (if ((.sym test-condition mach) cond)
  (if ((.sym test-condition mach) cond)
      (set op 1)
      (set op 1)
      (set op 0))
      (set op 0))
)
)
(bitcond-insn bm (f-0-4 7) (f-4-4 #xE) (f-8-4 2) #xD #x0 #x2 bitcond-sem)
(bitcond-insn bm (f-0-4 7) (f-4-4 #xE) (f-8-4 2) #xD #x0 #x2 bitcond-sem)
(dni bm16-c
(dni bm16-c
     "bm16 C"
     "bm16 C"
     ((machine 16))
     ((machine 16))
     "bm$cond16c c"
     "bm$cond16c c"
     (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xD) cond16c)
     (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xD) cond16c)
     (bitcond-sem 16 cbit cond16c)
     (bitcond-sem 16 cbit cond16c)
     ())
     ())
(dni bm32-c
(dni bm32-c
     "bm32 C"
     "bm32 C"
     ((machine 32))
     ((machine 32))
     "bm$cond32 c"
     "bm$cond32 c"
     (+ (f-0-4 #xD) (f-4-4 #x9) (f-8-1 0) (f-10-3 5) cond32)
     (+ (f-0-4 #xD) (f-4-4 #x9) (f-8-1 0) (f-10-3 5) cond32)
     (bitcond-sem 32 cbit cond32)
     (bitcond-sem 32 cbit cond32)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; bnand
; bnand
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (bnand-sem src)
(define-pmacro (bnand-sem src)
  (set cbit (and (inv src) cbit))
  (set cbit (and (inv src) cbit))
)
)
(bitsrc-insn bnand (f-0-4 7) (f-4-4 #xE) (f-8-4 5) #xD #x0 #x3 bnand-sem)
(bitsrc-insn bnand (f-0-4 7) (f-4-4 #xE) (f-8-4 5) #xD #x0 #x3 bnand-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; bnor
; bnor
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (bnor-sem src)
(define-pmacro (bnor-sem src)
  (set cbit (or (inv src) cbit))
  (set cbit (or (inv src) cbit))
)
)
(bitsrc-insn bnor (f-0-4 7) (f-4-4 #xE) (f-8-4 7) #xD #x0 #x6 bnor-sem)
(bitsrc-insn bnor (f-0-4 7) (f-4-4 #xE) (f-8-4 7) #xD #x0 #x6 bnor-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; bnot
; bnot
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (bnot-sem dst)
(define-pmacro (bnot-sem dst)
  (set dst (inv dst))
  (set dst (inv dst))
)
)
(bitdst-insn bnot (f-0-4 7) (f-4-4 #xE) (f-8-4 #xA) (f-0-2 1) (f-2-2 1) (f-4-1 0) #xD #x0 #x3 bnot-sem)
(bitdst-insn bnot (f-0-4 7) (f-4-4 #xE) (f-8-4 #xA) (f-0-2 1) (f-2-2 1) (f-4-1 0) #xD #x0 #x3 bnot-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; bntst
; bntst
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (bntst-sem src)
(define-pmacro (bntst-sem src)
  (set cbit (inv src))
  (set cbit (inv src))
  (set zbit (inv src))
  (set zbit (inv src))
)
)
(bitsrc-insn bntst (f-0-4 7) (f-4-4 #xE) (f-8-4 3) #xD #x0 #x0 bntst-sem)
(bitsrc-insn bntst (f-0-4 7) (f-4-4 #xE) (f-8-4 3) #xD #x0 #x0 bntst-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; bnxor
; bnxor
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (bnxor-sem src)
(define-pmacro (bnxor-sem src)
  (set cbit (xor (inv src) cbit))
  (set cbit (xor (inv src) cbit))
)
)
(bitsrc-insn bnxor (f-0-4 7) (f-4-4 #xE) (f-8-4 #xD) #xD #x0 #x7 bnxor-sem)
(bitsrc-insn bnxor (f-0-4 7) (f-4-4 #xE) (f-8-4 #xD) #xD #x0 #x7 bnxor-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; bor
; bor
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (bor-sem src)
(define-pmacro (bor-sem src)
  (set cbit (or src cbit))
  (set cbit (or src cbit))
)
)
(bitsrc-insn bor (f-0-4 7) (f-4-4 #xE) (f-8-4 #x6) #xD #x0 #x4 bor-sem)
(bitsrc-insn bor (f-0-4 7) (f-4-4 #xE) (f-8-4 #x6) #xD #x0 #x4 bor-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; brk
; brk
;-------------------------------------------------------------
;-------------------------------------------------------------
(dni brk16
(dni brk16
     "brk"
     "brk"
     ((machine 16))
     ((machine 16))
     "brk"
     "brk"
     (+ (f-0-4 #x0) (f-4-4 #x0))
     (+ (f-0-4 #x0) (f-4-4 #x0))
     (nop)
     (nop)
     ())
     ())
(dni brk32
(dni brk32
     "brk"
     "brk"
     ((machine 32))
     ((machine 32))
     "brk"
     "brk"
     (+ (f-0-4 #x0) (f-4-4 #x0))
     (+ (f-0-4 #x0) (f-4-4 #x0))
     (nop)
     (nop)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; brk2
; brk2
;-------------------------------------------------------------
;-------------------------------------------------------------
(dni brk232
(dni brk232
     "brk2"
     "brk2"
     ((machine 32))
     ((machine 32))
     "brk2"
     "brk2"
     (+ (f-0-4 #x0) (f-4-4 #x8))
     (+ (f-0-4 #x0) (f-4-4 #x8))
     (nop)
     (nop)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; bset
; bset
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (bset-sem dst)
(define-pmacro (bset-sem dst)
  (set dst 1)
  (set dst 1)
)
)
(bitdst-insn bset (f-0-4 7) (f-4-4 #xE) (f-8-4 9) (f-0-2 1) (f-2-2 0) (f-4-1 1) #xD #x0 #x7 bset-sem)
(bitdst-insn bset (f-0-4 7) (f-4-4 #xE) (f-8-4 9) (f-0-2 1) (f-2-2 0) (f-4-1 1) #xD #x0 #x7 bset-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; btst
; btst
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (btst-sem dst)
(define-pmacro (btst-sem dst)
  (set zbit (inv dst))
  (set zbit (inv dst))
  (set cbit dst)
  (set cbit dst)
)
)
(bitdst16-defn btst (f-0-4 7) (f-4-4 #xE) (f-8-4 #xB) (f-0-2 1) (f-2-2 1) (f-4-1 1) btst-sem)
(bitdst16-defn btst (f-0-4 7) (f-4-4 #xE) (f-8-4 #xB) (f-0-2 1) (f-2-2 1) (f-4-1 1) btst-sem)
(bit-insn-defn 32 btst G bit32-16-Unprefixed
(bit-insn-defn 32 btst G bit32-16-Unprefixed
               (+ (f-0-4 #xD) bit32-16-Unprefixed (f-7-1 #x0) (f-10-3 #x0))
               (+ (f-0-4 #xD) bit32-16-Unprefixed (f-7-1 #x0) (f-10-3 #x0))
               btst-sem)
               btst-sem)
(dni btst.s "btst:s" ((machine 32))
(dni btst.s "btst:s" ((machine 32))
     "btst:s ${Bit3-S},${Dsp-8-u16}"
     "btst:s ${Bit3-S},${Dsp-8-u16}"
     (+ (f-0-2 #x0) (f-4-3 #x5) Bit3-S Dsp-8-u16)
     (+ (f-0-2 #x0) (f-4-3 #x5) Bit3-S Dsp-8-u16)
     () ())
     () ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; btstc
; btstc
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (btstc-sem dst)
(define-pmacro (btstc-sem dst)
  (set zbit (inv dst))
  (set zbit (inv dst))
  (set cbit dst)
  (set cbit dst)
  (set dst (const 0))
  (set dst (const 0))
)
)
(bitdstnos-insn btstc (f-0-4 7) (f-4-4 #xE) (f-8-4 #x0) #xD #x0 #x4 btstc-sem)
(bitdstnos-insn btstc (f-0-4 7) (f-4-4 #xE) (f-8-4 #x0) #xD #x0 #x4 btstc-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; btsts
; btsts
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (btsts-sem dst)
(define-pmacro (btsts-sem dst)
  (set zbit (inv dst))
  (set zbit (inv dst))
  (set cbit dst)
  (set cbit dst)
  (set dst (const 0))
  (set dst (const 0))
)
)
(bitdstnos-insn btsts (f-0-4 7) (f-4-4 #xE) (f-8-4 #x1) #xD #x0 #x5 btsts-sem)
(bitdstnos-insn btsts (f-0-4 7) (f-4-4 #xE) (f-8-4 #x1) #xD #x0 #x5 btsts-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; bxor
; bxor
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (bxor-sem src)
(define-pmacro (bxor-sem src)
  (set cbit (xor src cbit))
  (set cbit (xor src cbit))
)
)
(bitsrc-insn bxor (f-0-4 7) (f-4-4 #xE) (f-8-4 #xC) #xD #x0 #x5 bxor-sem)
(bitsrc-insn bxor (f-0-4 7) (f-4-4 #xE) (f-8-4 #xC) #xD #x0 #x5 bxor-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; clip
; clip
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (clip-sem mode imm1 imm2 dest)
(define-pmacro (clip-sem mode imm1 imm2 dest)
  (sequence ()
  (sequence ()
            (if (gt mode imm1 dest)
            (if (gt mode imm1 dest)
                (set dest imm1))
                (set dest imm1))
            (if (lt mode imm2 dest)
            (if (lt mode imm2 dest)
                (set dest imm2)))
                (set dest imm2)))
)
)
(insn-imm1-imm2-dst-Prefixed clip #x8 #x3 #xE clip-sem)
(insn-imm1-imm2-dst-Prefixed clip #x8 #x3 #xE clip-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; cmp - binary compare
; cmp - binary compare
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (cmp-sem mode src1 dst)
(define-pmacro (cmp-sem mode src1 dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (sub mode dst src1))
            (set result (sub mode dst src1))
            (set obit (sub-oflag mode dst src1 0))
            (set obit (sub-oflag mode dst src1 0))
            (set cbit (not (sub-cflag mode dst src1 0)))
            (set cbit (not (sub-cflag mode dst src1 0)))
            (set-z-and-s result))
            (set-z-and-s result))
)
)
; cmp.L:G #imm32,dst (m32 #2)
; cmp.L:G #imm32,dst (m32 #2)
(binary-arith32-imm-dst-defn SI SI .l 0 cmp G #xA #x3 #x1 cmp-sem)
(binary-arith32-imm-dst-defn SI SI .l 0 cmp G #xA #x3 #x1 cmp-sem)
; cmp.size:G #imm,dst (m16 #1 m32 #1)
; cmp.size:G #imm,dst (m16 #1 m32 #1)
(binary-arith-imm-dst cmp G (f-0-4 7) (f-4-3 3) (f-8-4 8) #x9 #x2 #xE cmp-sem)
(binary-arith-imm-dst cmp G (f-0-4 7) (f-4-3 3) (f-8-4 8) #x9 #x2 #xE cmp-sem)
; cmp.size:Q #imm4,dst (m16 #2 m32 #3)
; cmp.size:Q #imm4,dst (m16 #2 m32 #3)
(binary-arith-imm4-dst cmp (f-0-4 #xD) (f-4-3 0) #x7 #x1 cmp-sem)
(binary-arith-imm4-dst cmp (f-0-4 #xD) (f-4-3 0) #x7 #x1 cmp-sem)
; cmp.b:S #imm8,dst3 (m16 #3)
; cmp.b:S #imm8,dst3 (m16 #3)
(binary-arith16-b-S-imm8-dst3 cmp ".b" (f-0-4 #xE) (f-4-1 0) cmp-sem)
(binary-arith16-b-S-imm8-dst3 cmp ".b" (f-0-4 #xE) (f-4-1 0) cmp-sem)
; cmp.BW:G src,dst (m16 #4 m32 #5)
; cmp.BW:G src,dst (m16 #4 m32 #5)
(binary-arith-src-dst cmp G (f-0-4 #xC) (f-4-3 0) #x1 #x6 cmp-sem)
(binary-arith-src-dst cmp G (f-0-4 #xC) (f-4-3 0) #x1 #x6 cmp-sem)
; cmp.B.S src2,r0l/r0h (m16 #5)
; cmp.B.S src2,r0l/r0h (m16 #5)
(binary-arith16-b-S-src2 cmp (f-0-4 3) (f-4-1 1) cmp-sem)
(binary-arith16-b-S-src2 cmp (f-0-4 3) (f-4-1 1) cmp-sem)
; cmp.L:G src,dst (m32 #6)
; cmp.L:G src,dst (m32 #6)
(binary-arith32-src-dst-defn SI SI .l 1 cmp G #x1 #x1 cmp-sem)
(binary-arith32-src-dst-defn SI SI .l 1 cmp G #x1 #x1 cmp-sem)
; cmp.BW:S #imm,dst2 (m32 #4)
; cmp.BW:S #imm,dst2 (m32 #4)
(binary-arith32-s-imm-dst QI .b 0 cmp #x1 #x3 cmp-sem)
(binary-arith32-s-imm-dst QI .b 0 cmp #x1 #x3 cmp-sem)
(binary-arith32-s-imm-dst HI .w 1 cmp #x1 #x3 cmp-sem)
(binary-arith32-s-imm-dst HI .w 1 cmp #x1 #x3 cmp-sem)
; cmp.BW:s src2,r0[l] (m32 #7)
; cmp.BW:s src2,r0[l] (m32 #7)
(binary-arith32-S-src2 cmp QI .b 0 (f-0-2 1) (f-4-3 0) cmp-sem)
(binary-arith32-S-src2 cmp QI .b 0 (f-0-2 1) (f-4-3 0) cmp-sem)
(binary-arith32-S-src2 cmp HI .w 1 (f-0-2 1) (f-4-3 0) cmp-sem)
(binary-arith32-S-src2 cmp HI .w 1 (f-0-2 1) (f-4-3 0) cmp-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; cmpx - binary compare extend sign
; cmpx - binary compare extend sign
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (cmpx-sem mode src1 dst)
(define-pmacro (cmpx-sem mode src1 dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (sub mode dst (ext mode src1)))
            (set result (sub mode dst (ext mode src1)))
            (set obit (sub-oflag mode dst (ext mode src1) 0))
            (set obit (sub-oflag mode dst (ext mode src1) 0))
            (set cbit (sub-cflag mode dst (ext mode src1) 0))
            (set cbit (sub-cflag mode dst (ext mode src1) 0))
            (set-z-and-s result))
            (set-z-and-s result))
)
)
(binary-arith32-imm-dst-defn QI SI "" 0 cmpx X #xA #x1 #x1 cmpx-sem)
(binary-arith32-imm-dst-defn QI SI "" 0 cmpx X #xA #x1 #x1 cmpx-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; dec - decrement
; dec - decrement
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (dec-sem mode dest)
(define-pmacro (dec-sem mode dest)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (sub mode dest 1))
            (set result (sub mode dest 1))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dest result))
            (set dest result))
)
)
(dni dec16.b
(dni dec16.b
     "dec.b Dst16-3-S-8"
     "dec.b Dst16-3-S-8"
     ((machine 16))
     ((machine 16))
     "dec.b ${Dst16-3-S-8}"
     "dec.b ${Dst16-3-S-8}"
     (+ (f-0-4 #xA) (f-4-1 #x1) Dst16-3-S-8)
     (+ (f-0-4 #xA) (f-4-1 #x1) Dst16-3-S-8)
     (dec-sem QI Dst16-3-S-8)
     (dec-sem QI Dst16-3-S-8)
     ())
     ())
(dni dec16.w
(dni dec16.w
     "dec.w Dst16An-S"
     "dec.w Dst16An-S"
     ((machine 16))
     ((machine 16))
     "dec.w ${Dst16An-S}"
     "dec.w ${Dst16An-S}"
     (+ (f-0-4 #xF) (f-5-3 #x2) Dst16An-S)
     (+ (f-0-4 #xF) (f-5-3 #x2) Dst16An-S)
     (dec-sem HI Dst16An-S)
     (dec-sem HI Dst16An-S)
     ())
     ())
(unary32-defn QI .b 0 dec #xB #x0 #xE dec-sem)
(unary32-defn QI .b 0 dec #xB #x0 #xE dec-sem)
(unary32-defn HI .w 1 dec #xB #x0 #xE dec-sem)
(unary32-defn HI .w 1 dec #xB #x0 #xE dec-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; div - divide
; div - divide
; divu - divide unsigned
; divu - divide unsigned
; divx - divide extension
; divx - divide extension
;-------------------------------------------------------------
;-------------------------------------------------------------
; div.BW #imm
; div.BW #imm
(div-imm div  div  mod  SI  127 -128 32767 -32768 (f-0-4 #x7) (f-4-3 6) (f-8-4 #xE) (f-12-4 #x1) #xB #x0 #x2 #x3 div-sem)
(div-imm div  div  mod  SI  127 -128 32767 -32768 (f-0-4 #x7) (f-4-3 6) (f-8-4 #xE) (f-12-4 #x1) #xB #x0 #x2 #x3 div-sem)
(div-imm divu udiv umod USI 255    0 65535      0 (f-0-4 #x7) (f-4-3 6) (f-8-4 #xE) (f-12-4 #x0) #xB #x0 #x0 #x3 div-sem)
(div-imm divu udiv umod USI 255    0 65535      0 (f-0-4 #x7) (f-4-3 6) (f-8-4 #xE) (f-12-4 #x0) #xB #x0 #x0 #x3 div-sem)
(div-imm divx div  mod  SI  127 -128 32767 -32768 (f-0-4 #x7) (f-4-3 6) (f-8-4 #xE) (f-12-4 #x3) #xB #x2 #x2 #x3 div-sem)
(div-imm divx div  mod  SI  127 -128 32767 -32768 (f-0-4 #x7) (f-4-3 6) (f-8-4 #xE) (f-12-4 #x3) #xB #x2 #x2 #x3 div-sem)
; div.BW src
; div.BW src
(div-src div  div  mod  SI  127 -128 32767 -32768 (f-0-4 #x7) (f-4-3 3) (f-8-4 #xD) #x8 #x1 #xE div-sem)
(div-src div  div  mod  SI  127 -128 32767 -32768 (f-0-4 #x7) (f-4-3 3) (f-8-4 #xD) #x8 #x1 #xE div-sem)
(div-src divu udiv umod USI 255    0 65535      0 (f-0-4 #x7) (f-4-3 3) (f-8-4 #xC) #x8 #x0 #xE div-sem)
(div-src divu udiv umod USI 255    0 65535      0 (f-0-4 #x7) (f-4-3 3) (f-8-4 #xC) #x8 #x0 #xE div-sem)
(div-src divx div  mod  SI  127 -128 32767 -32768 (f-0-4 #x7) (f-4-3 3) (f-8-4 #x9) #x9 #x1 #xE div-sem)
(div-src divx div  mod  SI  127 -128 32767 -32768 (f-0-4 #x7) (f-4-3 3) (f-8-4 #x9) #x9 #x1 #xE div-sem)
(div-src-defn 32 .l div dst32-24-Prefixed-SI
(div-src-defn 32 .l div dst32-24-Prefixed-SI
              (+ (f-0-4 0) (f-4-4 1) (f-8-4 #xA) (f-15-1 1) (f-18-2 #x1) (f-20-4 #xf) dst32-24-Prefixed-SI)
              (+ (f-0-4 0) (f-4-4 1) (f-8-4 #xA) (f-15-1 1) (f-18-2 #x1) (f-20-4 #xf) dst32-24-Prefixed-SI)
              div mod SI R2R0 R2R0 NoRemainder #x7fffffff (neg SI #x80000000)
              div mod SI R2R0 R2R0 NoRemainder #x7fffffff (neg SI #x80000000)
              div-sem)
              div-sem)
(div-src-defn 32 .l divu dst32-24-Prefixed-SI
(div-src-defn 32 .l divu dst32-24-Prefixed-SI
              (+ (f-0-4 0) (f-4-4 1) (f-8-4 #xA) (f-15-1 1) (f-18-2 #x0) (f-20-4 #xf) dst32-24-Prefixed-SI)
              (+ (f-0-4 0) (f-4-4 1) (f-8-4 #xA) (f-15-1 1) (f-18-2 #x0) (f-20-4 #xf) dst32-24-Prefixed-SI)
              udiv umod USI R2R0 R2R0 NoRemainder #x80000000 0
              udiv umod USI R2R0 R2R0 NoRemainder #x80000000 0
              div-sem)
              div-sem)
(div-src-defn 32 .l divx dst32-24-Prefixed-SI
(div-src-defn 32 .l divx dst32-24-Prefixed-SI
              (+ (f-0-4 0) (f-4-4 1) (f-8-4 #xA) (f-15-1 1) (f-18-2 #x2) (f-20-4 #xf) dst32-24-Prefixed-SI)
              (+ (f-0-4 0) (f-4-4 1) (f-8-4 #xA) (f-15-1 1) (f-18-2 #x2) (f-20-4 #xf) dst32-24-Prefixed-SI)
              div mod SI R2R0 R2R0 NoRemainder #x7fffffff (neg SI #x80000000)
              div mod SI R2R0 R2R0 NoRemainder #x7fffffff (neg SI #x80000000)
              div-sem)
              div-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; dsbb - decimal subtraction with borrow
; dsbb - decimal subtraction with borrow
; dsub - decimal subtraction
; dsub - decimal subtraction
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (dsbb-sem mode src dst)
(define-pmacro (dsbb-sem mode src dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (subc mode dst src (not cbit)))
            (set result (subc mode dst src (not cbit)))
            (set cbit (sub-cflag mode dst src (not cbit)))
            (set cbit (sub-cflag mode dst src (not cbit)))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dst result))
            (set dst result))
)
)
; dsbb for m16c
; dsbb for m16c
(decimal-subtraction16-insn dsbb #xF #x7)
(decimal-subtraction16-insn dsbb #xF #x7)
; dsbb.size #imm,dst
; dsbb.size #imm,dst
(binary-arith32-imm-dst-Prefixed QI QI .b 0 dsbb X #x9 #x0 #xE dsbb-sem)
(binary-arith32-imm-dst-Prefixed QI QI .b 0 dsbb X #x9 #x0 #xE dsbb-sem)
(binary-arith32-imm-dst-Prefixed HI HI .w 1 dsbb X #x9 #x0 #xE dsbb-sem)
(binary-arith32-imm-dst-Prefixed HI HI .w 1 dsbb X #x9 #x0 #xE dsbb-sem)
; dsbb.BW src,dst
; dsbb.BW src,dst
(binary-arith32-src-dst-Prefixed QI QI .b 0 dsbb X #x1 #xA dsbb-sem)
(binary-arith32-src-dst-Prefixed QI QI .b 0 dsbb X #x1 #xA dsbb-sem)
(binary-arith32-src-dst-Prefixed HI HI .w 1 dsbb X #x1 #xA dsbb-sem)
(binary-arith32-src-dst-Prefixed HI HI .w 1 dsbb X #x1 #xA dsbb-sem)
(define-pmacro (dsub-sem mode src dst)
(define-pmacro (dsub-sem mode src dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (subc mode dst src 0))
            (set result (subc mode dst src 0))
            (set cbit (sub-cflag mode dst src 0))
            (set cbit (sub-cflag mode dst src 0))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dst result))
            (set dst result))
)
)
; dsub for m16c
; dsub for m16c
(decimal-subtraction16-insn dsub #xD #x5)
(decimal-subtraction16-insn dsub #xD #x5)
; dsub.size #imm,dst
; dsub.size #imm,dst
(binary-arith32-imm-dst-Prefixed QI QI .b 0 dsub X #x9 #x1 #xE dsub-sem)
(binary-arith32-imm-dst-Prefixed QI QI .b 0 dsub X #x9 #x1 #xE dsub-sem)
(binary-arith32-imm-dst-Prefixed HI HI .w 1 dsub X #x9 #x1 #xE dsub-sem)
(binary-arith32-imm-dst-Prefixed HI HI .w 1 dsub X #x9 #x1 #xE dsub-sem)
; dsub.BW src,dst
; dsub.BW src,dst
(binary-arith32-src-dst-Prefixed QI QI .b 0 dsub X #x1 #x2 dsub-sem)
(binary-arith32-src-dst-Prefixed QI QI .b 0 dsub X #x1 #x2 dsub-sem)
(binary-arith32-src-dst-Prefixed HI HI .w 1 dsub X #x1 #x2 dsub-sem)
(binary-arith32-src-dst-Prefixed HI HI .w 1 dsub X #x1 #x2 dsub-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; sub - binary subtraction
; sub - binary subtraction
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (sub-sem mode src1 dst)
(define-pmacro (sub-sem mode src1 dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (sub mode dst src1))
            (set result (sub mode dst src1))
            (set obit (sub-oflag mode dst src1 0))
            (set obit (sub-oflag mode dst src1 0))
            (set cbit (sub-cflag mode dst src1 0))
            (set cbit (sub-cflag mode dst src1 0))
            (set dst result)
            (set dst result)
            (set-z-and-s result)))
            (set-z-and-s result)))
; sub.size:G #imm,dst (m16 #1 m32 #1)
; sub.size:G #imm,dst (m16 #1 m32 #1)
(binary-arith-imm-dst sub G (f-0-4 7) (f-4-3 3) (f-8-4 5) #x8 #x3 #xE sub-sem)
(binary-arith-imm-dst sub G (f-0-4 7) (f-4-3 3) (f-8-4 5) #x8 #x3 #xE sub-sem)
; sub.b:S #imm8,dst3 (m16 #2)
; sub.b:S #imm8,dst3 (m16 #2)
(binary-arith16-b-S-imm8-dst3 sub ".b" (f-0-4 8) (f-4-1 1) sub-sem)
(binary-arith16-b-S-imm8-dst3 sub ".b" (f-0-4 8) (f-4-1 1) sub-sem)
; sub.BW:G src,dst (m16 #3 m32 #4)
; sub.BW:G src,dst (m16 #3 m32 #4)
(binary-arith-src-dst sub G (f-0-4 #xA) (f-4-3 4) #x1 #xA sub-sem)
(binary-arith-src-dst sub G (f-0-4 #xA) (f-4-3 4) #x1 #xA sub-sem)
; sub.B.S src2,r0l/r0h (m16 #4)
; sub.B.S src2,r0l/r0h (m16 #4)
(binary-arith16-b-S-src2 sub (f-0-4 2) (f-4-1 1) sub-sem)
(binary-arith16-b-S-src2 sub (f-0-4 2) (f-4-1 1) sub-sem)
; sub.L:G #imm32,dst (m32 #2)
; sub.L:G #imm32,dst (m32 #2)
(binary-arith32-imm-dst-defn SI SI .l 0 sub G #x9 #x3 #x1 sub-sem)
(binary-arith32-imm-dst-defn SI SI .l 0 sub G #x9 #x3 #x1 sub-sem)
; sub.BW:S #imm,dst2 (m32 #3)
; sub.BW:S #imm,dst2 (m32 #3)
(binary-arith32-s-imm-dst QI .b 0 sub #x0 #x7 sub-sem)
(binary-arith32-s-imm-dst QI .b 0 sub #x0 #x7 sub-sem)
(binary-arith32-s-imm-dst HI .w 1 sub #x0 #x7 sub-sem)
(binary-arith32-s-imm-dst HI .w 1 sub #x0 #x7 sub-sem)
; sub.L:G src,dst (m32 #5)
; sub.L:G src,dst (m32 #5)
(binary-arith32-src-dst-defn SI SI .l 1 sub G #x1 #x0 sub-sem)
(binary-arith32-src-dst-defn SI SI .l 1 sub G #x1 #x0 sub-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; enter - enter function
; enter - enter function
; exitd - exit and deallocate stack frame
; exitd - exit and deallocate stack frame
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (enter16-sem mach amt)
(define-pmacro (enter16-sem mach amt)
     (sequence ()
     (sequence ()
               (set (reg h-sp) (sub (reg h-sp) 2))
               (set (reg h-sp) (sub (reg h-sp) 2))
               (set (mem16 HI (reg h-sp)) (reg h-fb))
               (set (mem16 HI (reg h-sp)) (reg h-fb))
               (set (reg h-fb) (reg h-sp))
               (set (reg h-fb) (reg h-sp))
               (set (reg h-sp) (sub (reg h-sp) amt))))
               (set (reg h-sp) (sub (reg h-sp) amt))))
(define-pmacro (exit16-sem mach)
(define-pmacro (exit16-sem mach)
     (sequence ((SI newpc))
     (sequence ((SI newpc))
               (set (reg h-sp) (reg h-fb))
               (set (reg h-sp) (reg h-fb))
               (set (reg h-fb) (mem16 HI (reg h-sp)))
               (set (reg h-fb) (mem16 HI (reg h-sp)))
               (set (reg h-sp) (add (reg h-sp) 2))
               (set (reg h-sp) (add (reg h-sp) 2))
               (set newpc (mem16 HI (reg h-sp)))
               (set newpc (mem16 HI (reg h-sp)))
               (set (reg h-sp) (add (reg h-sp) 2))
               (set (reg h-sp) (add (reg h-sp) 2))
               (set newpc (or newpc (sll (mem16 QI (reg h-sp)) (const 16))))
               (set newpc (or newpc (sll (mem16 QI (reg h-sp)) (const 16))))
               (set (reg h-sp) (add (reg h-sp) 1))
               (set (reg h-sp) (add (reg h-sp) 1))
               (set pc newpc)))
               (set pc newpc)))
(define-pmacro (enter32-sem mach amt)
(define-pmacro (enter32-sem mach amt)
     (sequence ()
     (sequence ()
               (set (reg h-sp) (sub (reg h-sp) 4))
               (set (reg h-sp) (sub (reg h-sp) 4))
               (set (mem32 SI (reg h-sp)) (reg h-fb))
               (set (mem32 SI (reg h-sp)) (reg h-fb))
               (set (reg h-fb) (reg h-sp))
               (set (reg h-fb) (reg h-sp))
               (set (reg h-sp) (sub (reg h-sp) amt))))
               (set (reg h-sp) (sub (reg h-sp) amt))))
(define-pmacro (exit32-sem mach)
(define-pmacro (exit32-sem mach)
     (sequence ((SI newpc))
     (sequence ((SI newpc))
               (set (reg h-sp) (reg h-fb))
               (set (reg h-sp) (reg h-fb))
               (set (reg h-fb) (mem32 SI (reg h-sp)))
               (set (reg h-fb) (mem32 SI (reg h-sp)))
               (set (reg h-sp) (add (reg h-sp) 4))
               (set (reg h-sp) (add (reg h-sp) 4))
               (set newpc (mem32 SI (reg h-sp)))
               (set newpc (mem32 SI (reg h-sp)))
               (set (reg h-sp) (add (reg h-sp) 4))
               (set (reg h-sp) (add (reg h-sp) 4))
               (set pc newpc)))
               (set pc newpc)))
(dni enter16 "enter #Imm-16-QI" ((machine 16))
(dni enter16 "enter #Imm-16-QI" ((machine 16))
     ("enter #${Dsp-16-u8}")
     ("enter #${Dsp-16-u8}")
     (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xF) (f-12-4 2) Dsp-16-u8)
     (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xF) (f-12-4 2) Dsp-16-u8)
     (enter16-sem 16 Dsp-16-u8)
     (enter16-sem 16 Dsp-16-u8)
     ())
     ())
(dni exitd16 "exitd" ((machine 16))
(dni exitd16 "exitd" ((machine 16))
     ("exitd")
     ("exitd")
     (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xF) (f-12-4 2))
     (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xF) (f-12-4 2))
     (exit16-sem 16)
     (exit16-sem 16)
     ())
     ())
(dni enter32 "enter #Imm-8-QI" ((machine 32))
(dni enter32 "enter #Imm-8-QI" ((machine 32))
     ("enter #${Dsp-8-u8}")
     ("enter #${Dsp-8-u8}")
     (+ (f-0-4 #xE) (f-4-4 #xC) Dsp-8-u8)
     (+ (f-0-4 #xE) (f-4-4 #xC) Dsp-8-u8)
     (enter32-sem 32 Dsp-8-u8)
     (enter32-sem 32 Dsp-8-u8)
     ())
     ())
(dni exitd32 "exitd" ((machine 32))
(dni exitd32 "exitd" ((machine 32))
     ("exitd")
     ("exitd")
     (+ (f-0-4 #xF) (f-4-4 #xC))
     (+ (f-0-4 #xF) (f-4-4 #xC))
     (exit32-sem 32)
     (exit32-sem 32)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; fclr - flag register clear
; fclr - flag register clear
; fset - flag register set
; fset - flag register set
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (set-flags-sem flag)
(define-pmacro (set-flags-sem flag)
  (sequence ((SI tmp))
  (sequence ((SI tmp))
            (case DFLT flag
            (case DFLT flag
                  ((#x0) (set cbit 1))
                  ((#x0) (set cbit 1))
                  ((#x1) (set dbit 1))
                  ((#x1) (set dbit 1))
                  ((#x2) (set zbit 1))
                  ((#x2) (set zbit 1))
                  ((#x3) (set sbit 1))
                  ((#x3) (set sbit 1))
                  ((#x4) (set bbit 1))
                  ((#x4) (set bbit 1))
                  ((#x5) (set obit 1))
                  ((#x5) (set obit 1))
                  ((#x6) (set ibit 1))
                  ((#x6) (set ibit 1))
                  ((#x7) (set ubit 1)))
                  ((#x7) (set ubit 1)))
            )
            )
  )
  )
(define-pmacro (clear-flags-sem flag)
(define-pmacro (clear-flags-sem flag)
  (sequence ((SI tmp))
  (sequence ((SI tmp))
            (case DFLT flag
            (case DFLT flag
                  ((#x0) (set cbit 0))
                  ((#x0) (set cbit 0))
                  ((#x1) (set dbit 0))
                  ((#x1) (set dbit 0))
                  ((#x2) (set zbit 0))
                  ((#x2) (set zbit 0))
                  ((#x3) (set sbit 0))
                  ((#x3) (set sbit 0))
                  ((#x4) (set bbit 0))
                  ((#x4) (set bbit 0))
                  ((#x5) (set obit 0))
                  ((#x5) (set obit 0))
                  ((#x6) (set ibit 0))
                  ((#x6) (set ibit 0))
                  ((#x7) (set ubit 0)))
                  ((#x7) (set ubit 0)))
            )
            )
  )
  )
(dni fclr16 "fclr flag" ((machine 16))
(dni fclr16 "fclr flag" ((machine 16))
     ("fclr ${flags16}")
     ("fclr ${flags16}")
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-1 0) flags16 (f-12-4 5))
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-1 0) flags16 (f-12-4 5))
     (clear-flags-sem flags16)
     (clear-flags-sem flags16)
     ())
     ())
(dni fset16 "fset flag" ((machine 16))
(dni fset16 "fset flag" ((machine 16))
     ("fset ${flags16}")
     ("fset ${flags16}")
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-1 0) flags16 (f-12-4 4))
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-1 0) flags16 (f-12-4 4))
     (set-flags-sem flags16)
     (set-flags-sem flags16)
     ())
     ())
(dni fclr "fclr" ((machine 32))
(dni fclr "fclr" ((machine 32))
     ("fclr ${flags32}")
     ("fclr ${flags32}")
     (+ (f-0-4 #xD) (f-4-4 3) (f-8-4 #xE) (f-12-1 1) flags32)
     (+ (f-0-4 #xD) (f-4-4 3) (f-8-4 #xE) (f-12-1 1) flags32)
     (clear-flags-sem flags32)
     (clear-flags-sem flags32)
     ())
     ())
(dni fset "fset" ((machine 32))
(dni fset "fset" ((machine 32))
     ("fset ${flags32}")
     ("fset ${flags32}")
     (+ (f-0-4 #xD) (f-4-4 1) (f-8-4 #xE) (f-12-1 1) flags32)
     (+ (f-0-4 #xD) (f-4-4 1) (f-8-4 #xE) (f-12-1 1) flags32)
     (set-flags-sem flags32)
     (set-flags-sem flags32)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; inc - increment
; inc - increment
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (inc-sem mode dest)
(define-pmacro (inc-sem mode dest)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (add mode dest 1))
            (set result (add mode dest 1))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dest result))
            (set dest result))
)
)
(dni inc16.b
(dni inc16.b
     "inc.b Dst16-3-S-8"
     "inc.b Dst16-3-S-8"
     ((machine 16))
     ((machine 16))
     "inc.b ${Dst16-3-S-8}"
     "inc.b ${Dst16-3-S-8}"
     (+ (f-0-4 #xA) (f-4-1 #x0) Dst16-3-S-8)
     (+ (f-0-4 #xA) (f-4-1 #x0) Dst16-3-S-8)
     (inc-sem QI Dst16-3-S-8)
     (inc-sem QI Dst16-3-S-8)
     ())
     ())
(dni inc16.w
(dni inc16.w
     "inc.w Dst16An-S"
     "inc.w Dst16An-S"
     ((machine 16))
     ((machine 16))
     "inc.w ${Dst16An-S}"
     "inc.w ${Dst16An-S}"
     (+ (f-0-4 #xB) (f-5-3 #x2) Dst16An-S)
     (+ (f-0-4 #xB) (f-5-3 #x2) Dst16An-S)
     (inc-sem HI Dst16An-S)
     (inc-sem HI Dst16An-S)
     ())
     ())
(unary32-defn QI .b 0 inc #xA #x0 #xE inc-sem)
(unary32-defn QI .b 0 inc #xA #x0 #xE inc-sem)
(unary32-defn HI .w 1 inc #xA #x0 #xE inc-sem)
(unary32-defn HI .w 1 inc #xA #x0 #xE inc-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; freit - fast return from interrupt (m32)
; freit - fast return from interrupt (m32)
; int - interrupt
; int - interrupt
; into - interrupt on overflow
; into - interrupt on overflow
;-------------------------------------------------------------
;-------------------------------------------------------------
; ??? semantics
; ??? semantics
(dni freit32 "FREIT" ((machine 32))
(dni freit32 "FREIT" ((machine 32))
     ("freit")
     ("freit")
     (+ (f-0-4 9) (f-4-4 #xF))
     (+ (f-0-4 9) (f-4-4 #xF))
     (nop)
     (nop)
     ())
     ())
(dni int16 "int Dsp-10-u6" ((machine 16))
(dni int16 "int Dsp-10-u6" ((machine 16))
     ("int #${Dsp-10-u6}")
     ("int #${Dsp-10-u6}")
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-2 3) Dsp-10-u6)
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-2 3) Dsp-10-u6)
     (c-call VOID "do_int" pc Dsp-10-u6)
     (c-call VOID "do_int" pc Dsp-10-u6)
     ())
     ())
(dni into16 "into" ((machine 16))
(dni into16 "into" ((machine 16))
     ("into")
     ("into")
     (+ (f-0-4 #xF) (f-4-4 6))
     (+ (f-0-4 #xF) (f-4-4 6))
     (nop)
     (nop)
     ())
     ())
(dni int32 "int Dsp-8-u6" ((machine 32))
(dni int32 "int Dsp-8-u6" ((machine 32))
     ("int #${Dsp-8-u6}")
     ("int #${Dsp-8-u6}")
     (+ (f-0-4 #xB) (f-4-4 #xE) Dsp-8-u6 (f-14-2 0))
     (+ (f-0-4 #xB) (f-4-4 #xE) Dsp-8-u6 (f-14-2 0))
     (c-call VOID "do_int" pc Dsp-8-u6)
     (c-call VOID "do_int" pc Dsp-8-u6)
     ())
     ())
(dni into32 "into" ((machine 32))
(dni into32 "into" ((machine 32))
     ("into")
     ("into")
     (+ (f-0-4 #xB) (f-4-4 #xF))
     (+ (f-0-4 #xB) (f-4-4 #xF))
     (nop)
     (nop)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; index (m32c)
; index (m32c)
;-------------------------------------------------------------
;-------------------------------------------------------------
; TODO add support to insns allowing index
; TODO add support to insns allowing index
(define-pmacro (indexb-sem mode d) (set SrcIndex d) (set DstIndex d))
(define-pmacro (indexb-sem mode d) (set SrcIndex d) (set DstIndex d))
(define-pmacro (indexbd-sem mode d) (set SrcIndex (const 0)) (set DstIndex d))
(define-pmacro (indexbd-sem mode d) (set SrcIndex (const 0)) (set DstIndex d))
(define-pmacro (indexbs-sem mode d) (set SrcIndex d) (set DstIndex (const 0)))
(define-pmacro (indexbs-sem mode d) (set SrcIndex d) (set DstIndex (const 0)))
(define-pmacro (indexw-sem mode d)
(define-pmacro (indexw-sem mode d)
  (set SrcIndex (sll d (const 2))) (set DstIndex (sll d (const 2))))
  (set SrcIndex (sll d (const 2))) (set DstIndex (sll d (const 2))))
(define-pmacro (indexwd-sem mode d)
(define-pmacro (indexwd-sem mode d)
  (set SrcIndex (const 0)) (set DstIndex (sll d (const 2))))
  (set SrcIndex (const 0)) (set DstIndex (sll d (const 2))))
(define-pmacro (indexws-sem mode d)
(define-pmacro (indexws-sem mode d)
  (set SrcIndex (sll d (const 2))) (set DstIndex (const 0)))
  (set SrcIndex (sll d (const 2))) (set DstIndex (const 0)))
(define-pmacro (indexl-sem mode d)
(define-pmacro (indexl-sem mode d)
  (set SrcIndex d) (set DstIndex (sll d (const 2))))
  (set SrcIndex d) (set DstIndex (sll d (const 2))))
(define-pmacro (indexld-sem mode d)
(define-pmacro (indexld-sem mode d)
  (set SrcIndex (const 0)) (set DstIndex (sll d (const 2))))
  (set SrcIndex (const 0)) (set DstIndex (sll d (const 2))))
(define-pmacro (indexls-sem mode d)
(define-pmacro (indexls-sem mode d)
  (set SrcIndex (sll d (const 2))) (set DstIndex (const 0)))
  (set SrcIndex (sll d (const 2))) (set DstIndex (const 0)))
; Note that "wbit" not where the size bit goes here, hence, it's
; Note that "wbit" not where the size bit goes here, hence, it's
; always 0 in these calls but op2 differs instead.
; always 0 in these calls but op2 differs instead.
; indexb src (index byte)
; indexb src (index byte)
(unary32-defn QI .b 0 indexb #x8 0 #x3 indexb-sem)
(unary32-defn QI .b 0 indexb #x8 0 #x3 indexb-sem)
(unary32-defn HI .w 0 indexb #x8 1 #x3 indexb-sem)
(unary32-defn HI .w 0 indexb #x8 1 #x3 indexb-sem)
; indexbd src (index byte dest)
; indexbd src (index byte dest)
(unary32-defn QI .b 0 indexbd #xA 0 3 indexbd-sem)
(unary32-defn QI .b 0 indexbd #xA 0 3 indexbd-sem)
(unary32-defn HI .w 0 indexbd #xA 1 3 indexbd-sem)
(unary32-defn HI .w 0 indexbd #xA 1 3 indexbd-sem)
; indexbs src (index byte src)
; indexbs src (index byte src)
(unary32-defn QI .b 0 indexbs #xC 0 3 indexbs-sem)
(unary32-defn QI .b 0 indexbs #xC 0 3 indexbs-sem)
(unary32-defn HI .w 0 indexbs #xC 1 3 indexbs-sem)
(unary32-defn HI .w 0 indexbs #xC 1 3 indexbs-sem)
; indexl src (index long)
; indexl src (index long)
(unary32-defn QI .b 0 indexl 9 2 3 indexl-sem)
(unary32-defn QI .b 0 indexl 9 2 3 indexl-sem)
(unary32-defn HI .w 0 indexl 9 3 3 indexl-sem)
(unary32-defn HI .w 0 indexl 9 3 3 indexl-sem)
; indexld src (index long dest)
; indexld src (index long dest)
(unary32-defn QI .b 0 indexld #xB 2 3 indexld-sem)
(unary32-defn QI .b 0 indexld #xB 2 3 indexld-sem)
(unary32-defn HI .w 0 indexld #xB 3 3 indexld-sem)
(unary32-defn HI .w 0 indexld #xB 3 3 indexld-sem)
; indexls src (index long src)
; indexls src (index long src)
(unary32-defn QI .b 0 indexls 9 0 3 indexls-sem)
(unary32-defn QI .b 0 indexls 9 0 3 indexls-sem)
(unary32-defn HI .w 0 indexls 9 1 3 indexls-sem)
(unary32-defn HI .w 0 indexls 9 1 3 indexls-sem)
; indexw src (index word)
; indexw src (index word)
(unary32-defn QI .b 0 indexw 8 2 3 indexw-sem)
(unary32-defn QI .b 0 indexw 8 2 3 indexw-sem)
(unary32-defn HI .w 0 indexw 8 3 3 indexw-sem)
(unary32-defn HI .w 0 indexw 8 3 3 indexw-sem)
; indexwd src (index word dest)
; indexwd src (index word dest)
(unary32-defn QI .b 0 indexwd #xA 2 3 indexwd-sem)
(unary32-defn QI .b 0 indexwd #xA 2 3 indexwd-sem)
(unary32-defn HI .w 0 indexwd #xA 3 3 indexwd-sem)
(unary32-defn HI .w 0 indexwd #xA 3 3 indexwd-sem)
; indexws (index word src)
; indexws (index word src)
(unary32-defn QI .b 0 indexws #xC 2 3 indexws-sem)
(unary32-defn QI .b 0 indexws #xC 2 3 indexws-sem)
(unary32-defn HI .w 0 indexws #xC 3 3 indexws-sem)
(unary32-defn HI .w 0 indexws #xC 3 3 indexws-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; jcc - jump on condition
; jcc - jump on condition
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (jcnd32-sem cnd label)
(define-pmacro (jcnd32-sem cnd label)
  (sequence ()
  (sequence ()
            (case DFLT cnd
            (case DFLT cnd
                  ((#x00) (if (not cbit) (set pc label))) ;ltu nc
                  ((#x00) (if (not cbit) (set pc label))) ;ltu nc
                  ((#x01) (if (not (and cbit (not zbit))) (set pc label))) ;leu
                  ((#x01) (if (not (and cbit (not zbit))) (set pc label))) ;leu
                  ((#x02) (if (not zbit) (set pc label))) ;ne nz
                  ((#x02) (if (not zbit) (set pc label))) ;ne nz
                  ((#x03) (if (not sbit) (set pc label))) ;pz
                  ((#x03) (if (not sbit) (set pc label))) ;pz
                  ((#x04) (if (not obit) (set pc label))) ;no
                  ((#x04) (if (not obit) (set pc label))) ;no
                  ((#x05) (if (not (or zbit (xor sbit obit))) (set pc label))) ;gt
                  ((#x05) (if (not (or zbit (xor sbit obit))) (set pc label))) ;gt
                  ((#x06) (if (not (xor sbit obit)) (set pc label))) ;ge
                  ((#x06) (if (not (xor sbit obit)) (set pc label))) ;ge
                  ((#x08) (if (trunc BI cbit) (set pc label))) ;geu c
                  ((#x08) (if (trunc BI cbit) (set pc label))) ;geu c
                  ((#x09) (if (and cbit (not zbit)) (set pc label))) ;gtu
                  ((#x09) (if (and cbit (not zbit)) (set pc label))) ;gtu
                  ((#x0a) (if (trunc BI zbit) (set pc label))) ;eq z
                  ((#x0a) (if (trunc BI zbit) (set pc label))) ;eq z
                  ((#x0b) (if (trunc BI sbit) (set pc label))) ;n
                  ((#x0b) (if (trunc BI sbit) (set pc label))) ;n
                  ((#x0c) (if (trunc BI obit) (set pc label))) ;o
                  ((#x0c) (if (trunc BI obit) (set pc label))) ;o
                  ((#x0d) (if (or zbit (xor sbit obit)) (set pc label))) ;le
                  ((#x0d) (if (or zbit (xor sbit obit)) (set pc label))) ;le
                  ((#x0e) (if (xor sbit obit) (set pc label))) ;lt
                  ((#x0e) (if (xor sbit obit) (set pc label))) ;lt
                  )
                  )
        )
        )
  )
  )
(define-pmacro (jcnd16-sem cnd label)
(define-pmacro (jcnd16-sem cnd label)
  (sequence ()
  (sequence ()
            (case DFLT cnd
            (case DFLT cnd
                  ((#x00) (if (trunc BI cbit) (set pc label))) ;geu c
                  ((#x00) (if (trunc BI cbit) (set pc label))) ;geu c
                  ((#x01) (if (and cbit (not zbit)) (set pc label))) ;gtu
                  ((#x01) (if (and cbit (not zbit)) (set pc label))) ;gtu
                  ((#x02) (if (trunc BI zbit) (set pc label))) ;eq z
                  ((#x02) (if (trunc BI zbit) (set pc label))) ;eq z
                  ((#x03) (if (trunc BI sbit) (set pc label))) ;n
                  ((#x03) (if (trunc BI sbit) (set pc label))) ;n
                  ((#x04) (if (not cbit) (set pc label))) ;ltu nc
                  ((#x04) (if (not cbit) (set pc label))) ;ltu nc
                  ((#x05) (if (not (and cbit (not zbit))) (set pc label))) ;leu
                  ((#x05) (if (not (and cbit (not zbit))) (set pc label))) ;leu
                  ((#x06) (if (not zbit) (set pc label))) ;ne nz
                  ((#x06) (if (not zbit) (set pc label))) ;ne nz
                  ((#x07) (if (not sbit) (set pc label))) ;pz
                  ((#x07) (if (not sbit) (set pc label))) ;pz
                  ((#x08) (if (or zbit (xor sbit obit)) (set pc label))) ;le
                  ((#x08) (if (or zbit (xor sbit obit)) (set pc label))) ;le
                  ((#x09) (if (trunc BI obit) (set pc label))) ;o
                  ((#x09) (if (trunc BI obit) (set pc label))) ;o
                  ((#x0a) (if (not (xor sbit obit)) (set pc label))) ;ge
                  ((#x0a) (if (not (xor sbit obit)) (set pc label))) ;ge
                  ((#x0c) (if (not (or zbit (xor sbit obit))) (set pc label))) ;gt
                  ((#x0c) (if (not (or zbit (xor sbit obit))) (set pc label))) ;gt
                  ((#x0d) (if (not obit) (set pc label))) ;no
                  ((#x0d) (if (not obit) (set pc label))) ;no
                  ((#x0e) (if (xor sbit obit) (set pc label))) ;lt
                  ((#x0e) (if (xor sbit obit) (set pc label))) ;lt
                  )
                  )
        )
        )
  )
  )
(dni jcnd16-5
(dni jcnd16-5
     "jCnd label"
     "jCnd label"
     (RL_JUMP RELAXABLE (machine 16))
     (RL_JUMP RELAXABLE (machine 16))
     "j$cond16j5 ${Lab-8-8}"
     "j$cond16j5 ${Lab-8-8}"
     (+ (f-0-4 #x6) (f-4-1 1) cond16j5 Lab-8-8)
     (+ (f-0-4 #x6) (f-4-1 1) cond16j5 Lab-8-8)
     (jcnd16-sem cond16j5 Lab-8-8)
     (jcnd16-sem cond16j5 Lab-8-8)
     ()
     ()
)
)
(dni jcnd16
(dni jcnd16
     "jCnd label"
     "jCnd label"
     (RL_JUMP RELAXABLE (machine 16))
     (RL_JUMP RELAXABLE (machine 16))
     "j$cond16j ${Lab-16-8}"
     "j$cond16j ${Lab-16-8}"
     (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xC) cond16j Lab-16-8)
     (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xC) cond16j Lab-16-8)
     (jcnd16-sem cond16j Lab-16-8)
     (jcnd16-sem cond16j Lab-16-8)
     ()
     ()
)
)
(dni jcnd32
(dni jcnd32
     "jCnd label"
     "jCnd label"
     (RL_JUMP RELAXABLE (machine 32))
     (RL_JUMP RELAXABLE (machine 32))
     "j$cond32j ${Lab-8-8}"
     "j$cond32j ${Lab-8-8}"
     (+ (f-0-1 1) (f-4-3 5) cond32j Lab-8-8)
     (+ (f-0-1 1) (f-4-3 5) cond32j Lab-8-8)
     (jcnd32-sem cond32j Lab-8-8)
     (jcnd32-sem cond32j Lab-8-8)
     ()
     ()
)
)
;-------------------------------------------------------------
;-------------------------------------------------------------
; jmp - jump
; jmp - jump
;-------------------------------------------------------------
;-------------------------------------------------------------
; jmp.s label3 (m16 #1)
; jmp.s label3 (m16 #1)
(dni jmp16.s "jmp.s Lab-5-3" (RL_JUMP RELAXABLE (machine 16))
(dni jmp16.s "jmp.s Lab-5-3" (RL_JUMP RELAXABLE (machine 16))
     ("jmp.s ${Lab-5-3}")
     ("jmp.s ${Lab-5-3}")
     (+ (f-0-4 6) (f-4-1 0) Lab-5-3)
     (+ (f-0-4 6) (f-4-1 0) Lab-5-3)
     (sequence () (set pc Lab-5-3))
     (sequence () (set pc Lab-5-3))
     ())
     ())
; jmp.b label8 (m16 #2)
; jmp.b label8 (m16 #2)
(dni jmp16.b "jmp.b Lab-8-8" (RL_JUMP RELAXABLE (machine 16))
(dni jmp16.b "jmp.b Lab-8-8" (RL_JUMP RELAXABLE (machine 16))
     ("jmp.b ${Lab-8-8}")
     ("jmp.b ${Lab-8-8}")
     (+ (f-0-4 #xF) (f-4-4 #xE) Lab-8-8)
     (+ (f-0-4 #xF) (f-4-4 #xE) Lab-8-8)
     (sequence () (set pc Lab-8-8))
     (sequence () (set pc Lab-8-8))
     ())
     ())
; jmp.w label16 (m16 #3)
; jmp.w label16 (m16 #3)
(dni jmp16.w "jmp.w Lab-8-16" (RL_JUMP RELAXABLE (machine 16))
(dni jmp16.w "jmp.w Lab-8-16" (RL_JUMP RELAXABLE (machine 16))
     ("jmp.w ${Lab-8-16}")
     ("jmp.w ${Lab-8-16}")
     (+ (f-0-4 #xF) (f-4-4 4) Lab-8-16)
     (+ (f-0-4 #xF) (f-4-4 4) Lab-8-16)
     (sequence () (set pc Lab-8-16))
     (sequence () (set pc Lab-8-16))
     ())
     ())
; jmp.a label24 (m16 #4)
; jmp.a label24 (m16 #4)
(dni jmp16.a "jmp.a Lab-8-24" (RL_JUMP RELAXABLE (machine 16))
(dni jmp16.a "jmp.a Lab-8-24" (RL_JUMP RELAXABLE (machine 16))
     ("jmp.a ${Lab-8-24}")
     ("jmp.a ${Lab-8-24}")
     (+ (f-0-4 #xF) (f-4-4 #xC) Lab-8-24)
     (+ (f-0-4 #xF) (f-4-4 #xC) Lab-8-24)
     (sequence () (set pc Lab-8-24))
     (sequence () (set pc Lab-8-24))
     ())
     ())
(define-pmacro (jmp16-sem mode dst)
(define-pmacro (jmp16-sem mode dst)
  (set pc (and dst #xfffff))
  (set pc (and dst #xfffff))
)
)
(define-pmacro (jmp32-sem mode dst)
(define-pmacro (jmp32-sem mode dst)
  (set pc dst)
  (set pc dst)
)
)
; jmpi.w dst (m16 #1 m32 #2)
; jmpi.w dst (m16 #1 m32 #2)
(unary-insn-defn 16 16 HI .w jmpi (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 2) dst16-16-HI) jmp16-sem)
(unary-insn-defn 16 16 HI .w jmpi (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 2) dst16-16-HI) jmp16-sem)
(unary-insn-defn 32 16-Unprefixed HI .w jmpi (+ (f-0-4 #xC) (f-7-1 1) dst32-16-Unprefixed-HI (f-10-2 #x0) (f-12-4 #xF)) jmp32-sem)
(unary-insn-defn 32 16-Unprefixed HI .w jmpi (+ (f-0-4 #xC) (f-7-1 1) dst32-16-Unprefixed-HI (f-10-2 #x0) (f-12-4 #xF)) jmp32-sem)
; jmpi.a dst (m16 #2 m32 #2)
; jmpi.a dst (m16 #2 m32 #2)
(unary-insn-defn 16 16 SI .a jmpi (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 0) dst16-16-SI) jmp16-sem)
(unary-insn-defn 16 16 SI .a jmpi (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 0) dst16-16-SI) jmp16-sem)
(unary-insn-defn 32 16-Unprefixed SI .a jmpi (+ (f-0-4 #x8) (f-7-1 0) dst32-16-Unprefixed-SI (f-10-2 #x0) (f-12-4 1)) jmp32-sem)
(unary-insn-defn 32 16-Unprefixed SI .a jmpi (+ (f-0-4 #x8) (f-7-1 0) dst32-16-Unprefixed-SI (f-10-2 #x0) (f-12-4 1)) jmp32-sem)
; jmps imm8 (m16 #1)
; jmps imm8 (m16 #1)
(dni jmps16 "jmps Imm-8-QI" ((machine 16))
(dni jmps16 "jmps Imm-8-QI" ((machine 16))
     ("jmps #${Imm-8-QI}")
     ("jmps #${Imm-8-QI}")
     (+ (f-0-4 #xE) (f-4-4 #xE) Imm-8-QI)
     (+ (f-0-4 #xE) (f-4-4 #xE) Imm-8-QI)
     (sequence () (set pc Imm-8-QI))
     (sequence () (set pc Imm-8-QI))
     ())
     ())
; jmp.s label3 (m32 #1)
; jmp.s label3 (m32 #1)
(dni jmp32.s
(dni jmp32.s
     "jmp.s label"
     "jmp.s label"
     (RL_JUMP RELAXABLE (machine 32))
     (RL_JUMP RELAXABLE (machine 32))
     "jmp.s ${Lab32-jmp-s}"
     "jmp.s ${Lab32-jmp-s}"
     (+ (f-0-2 1) (f-4-3 5) Lab32-jmp-s)
     (+ (f-0-2 1) (f-4-3 5) Lab32-jmp-s)
     (set pc Lab32-jmp-s)
     (set pc Lab32-jmp-s)
     ()
     ()
)
)
; jmp.b label8 (m32 #2)
; jmp.b label8 (m32 #2)
(dni jmp32.b "jmp.b Lab-8-8" (RL_JUMP RELAXABLE (machine 32))
(dni jmp32.b "jmp.b Lab-8-8" (RL_JUMP RELAXABLE (machine 32))
     ("jmp.b ${Lab-8-8}")
     ("jmp.b ${Lab-8-8}")
     (+ (f-0-4 #xB) (f-4-4 #xB) Lab-8-8)
     (+ (f-0-4 #xB) (f-4-4 #xB) Lab-8-8)
     (set pc Lab-8-8)
     (set pc Lab-8-8)
     ())
     ())
; jmp.w label16 (m32 #3)
; jmp.w label16 (m32 #3)
(dni jmp32.w "jmp.w Lab-8-16" (RL_JUMP RELAXABLE (machine 32))
(dni jmp32.w "jmp.w Lab-8-16" (RL_JUMP RELAXABLE (machine 32))
     ("jmp.w ${Lab-8-16}")
     ("jmp.w ${Lab-8-16}")
     (+ (f-0-4 #xC) (f-4-4 #xE) Lab-8-16)
     (+ (f-0-4 #xC) (f-4-4 #xE) Lab-8-16)
     (set pc Lab-8-16)
     (set pc Lab-8-16)
     ())
     ())
; jmp.a label24 (m32 #4)
; jmp.a label24 (m32 #4)
(dni jmp32.a "jmp.a Lab-8-24" (RL_JUMP RELAXABLE (machine 32))
(dni jmp32.a "jmp.a Lab-8-24" (RL_JUMP RELAXABLE (machine 32))
     ("jmp.a ${Lab-8-24}")
     ("jmp.a ${Lab-8-24}")
     (+ (f-0-4 #xC) (f-4-4 #xC) Lab-8-24)
     (+ (f-0-4 #xC) (f-4-4 #xC) Lab-8-24)
     (set pc Lab-8-24)
     (set pc Lab-8-24)
     ())
     ())
; jmp.s imm8 (m32 #1)
; jmp.s imm8 (m32 #1)
(dni jmps32 "jmps Imm-8-QI" (RL_JUMP (machine 32))
(dni jmps32 "jmps Imm-8-QI" (RL_JUMP (machine 32))
     ("jmps #${Imm-8-QI}")
     ("jmps #${Imm-8-QI}")
     (+ (f-0-4 #xD) (f-4-4 #xC) Imm-8-QI)
     (+ (f-0-4 #xD) (f-4-4 #xC) Imm-8-QI)
     (set pc Imm-8-QI)
     (set pc Imm-8-QI)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; jsr jump subroutine
; jsr jump subroutine
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (jsr16-sem length dst)
(define-pmacro (jsr16-sem length dst)
  (sequence ((SI tpc))
  (sequence ((SI tpc))
            (set tpc (add pc length))
            (set tpc (add pc length))
            (set (reg h-sp) (sub (reg h-sp) 2))
            (set (reg h-sp) (sub (reg h-sp) 2))
            (set (mem16 HI (reg h-sp)) (srl (and tpc #xffff00) 8))
            (set (mem16 HI (reg h-sp)) (srl (and tpc #xffff00) 8))
            (set (reg h-sp) (sub (reg h-sp) 1))
            (set (reg h-sp) (sub (reg h-sp) 1))
            (set (mem16 QI (reg h-sp)) (and tpc #xff))
            (set (mem16 QI (reg h-sp)) (and tpc #xff))
            (set pc dst)
            (set pc dst)
            )
            )
)
)
(define-pmacro (jsr32-sem length dst)
(define-pmacro (jsr32-sem length dst)
  (sequence ((SI tpc))
  (sequence ((SI tpc))
            (set tpc (add pc length))
            (set tpc (add pc length))
            (set (reg h-sp) (sub (reg h-sp) 2))
            (set (reg h-sp) (sub (reg h-sp) 2))
            (set (mem32 HI (reg h-sp)) (srl (and tpc #xffff0000) 16))
            (set (mem32 HI (reg h-sp)) (srl (and tpc #xffff0000) 16))
            (set (reg h-sp) (sub (reg h-sp) 2))
            (set (reg h-sp) (sub (reg h-sp) 2))
            (set (mem32 HI (reg h-sp)) (and tpc #xffff))
            (set (mem32 HI (reg h-sp)) (and tpc #xffff))
            (set pc dst)
            (set pc dst)
            )
            )
)
)
; jsr.w label16 (m16 #1)
; jsr.w label16 (m16 #1)
(dni jsr16.w "jsr.w Lab-8-16" (RL_JUMP RELAXABLE (machine 16))
(dni jsr16.w "jsr.w Lab-8-16" (RL_JUMP RELAXABLE (machine 16))
     ("jsr.w ${Lab-8-16}")
     ("jsr.w ${Lab-8-16}")
     (+ (f-0-4 #xF) (f-4-4 5) Lab-8-16)
     (+ (f-0-4 #xF) (f-4-4 5) Lab-8-16)
     (jsr16-sem 3 Lab-8-16)
     (jsr16-sem 3 Lab-8-16)
     ())
     ())
; jsr.a label24 (m16 #2)
; jsr.a label24 (m16 #2)
(dni jsr16.a "jsr.a Lab-8-24" (RL_JUMP RELAXABLE (machine 16))
(dni jsr16.a "jsr.a Lab-8-24" (RL_JUMP RELAXABLE (machine 16))
     ("jsr.a ${Lab-8-24}")
     ("jsr.a ${Lab-8-24}")
     (+ (f-0-4 #xF) (f-4-4 #xD) Lab-8-24)
     (+ (f-0-4 #xF) (f-4-4 #xD) Lab-8-24)
     (jsr16-sem 4 Lab-8-24)
     (jsr16-sem 4 Lab-8-24)
     ())
     ())
(define-pmacro (jsri-defn mode op16 op16-1 op16-2 op16-3        op16-sem
(define-pmacro (jsri-defn mode op16 op16-1 op16-2 op16-3        op16-sem
                               op32 op32-1 op32-2 op32-3 op32-4 op32-sem len)
                               op32 op32-1 op32-2 op32-3 op32-4 op32-sem len)
  (begin
  (begin
    (dni (.sym jsri16 mode - op16)
    (dni (.sym jsri16 mode - op16)
         (.str "jsri." mode " " op16)
         (.str "jsri." mode " " op16)
         (RL_1ADDR (machine 16))
         (RL_1ADDR (machine 16))
         (.str "jsri." mode " ${" op16 "}")
         (.str "jsri." mode " ${" op16 "}")
         (+ op16-1 op16-2 op16-3 op16)
         (+ op16-1 op16-2 op16-3 op16)
         (op16-sem len op16)
         (op16-sem len op16)
         ())
         ())
    (dni (.sym jsri32 mode - op32)
    (dni (.sym jsri32 mode - op32)
         (.str "jsri." mode " " op32)
         (.str "jsri." mode " " op32)
         (RL_1ADDR (machine 32))
         (RL_1ADDR (machine 32))
         (.str "jsri." mode " ${" op32 "}")
         (.str "jsri." mode " ${" op32 "}")
         (+ op32-1 op32-2 op32-3 op32-4 op32)
         (+ op32-1 op32-2 op32-3 op32-4 op32)
         (op32-sem len op32)
         (op32-sem len op32)
         ())
         ())
    )
    )
  )
  )
; jsri.w dst (m16 #1 m32 #1))
; jsri.w dst (m16 #1 m32 #1))
(jsri-defn w dst16-16-20ar-HI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x3) jsr16-sem
(jsri-defn w dst16-16-20ar-HI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x3) jsr16-sem
              dst32-16-24-Unprefixed-HI (f-0-4 #xC) (f-7-1 1) (f-10-2 #x1) (f-12-4 #xF) jsr32-sem 4)
              dst32-16-24-Unprefixed-HI (f-0-4 #xC) (f-7-1 1) (f-10-2 #x1) (f-12-4 #xF) jsr32-sem 4)
(jsri-defn w dst16-16-16sa-HI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x3) jsr16-sem
(jsri-defn w dst16-16-16sa-HI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x3) jsr16-sem
              dst32-16-16sa-Unprefixed-HI (f-0-4 #xC) (f-7-1 1) (f-10-2 #x1) (f-12-4 #xF) jsr32-sem 4)
              dst32-16-16sa-Unprefixed-HI (f-0-4 #xC) (f-7-1 1) (f-10-2 #x1) (f-12-4 #xF) jsr32-sem 4)
(jsri-defn w dst16-16-8-HI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x3) jsr16-sem
(jsri-defn w dst16-16-8-HI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x3) jsr16-sem
              dst32-16-8-Unprefixed-HI (f-0-4 #xC) (f-7-1 1) (f-10-2 #x1) (f-12-4 #xF) jsr32-sem 3)
              dst32-16-8-Unprefixed-HI (f-0-4 #xC) (f-7-1 1) (f-10-2 #x1) (f-12-4 #xF) jsr32-sem 3)
(jsri-defn w dst16-basic-HI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x3) jsr16-sem
(jsri-defn w dst16-basic-HI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x3) jsr16-sem
              dst32-basic-Unprefixed-HI (f-0-4 #xC) (f-7-1 1) (f-10-2 #x1) (f-12-4 #xF) jsr32-sem 2)
              dst32-basic-Unprefixed-HI (f-0-4 #xC) (f-7-1 1) (f-10-2 #x1) (f-12-4 #xF) jsr32-sem 2)
; jsri.a (m16 #2 m32 #2)
; jsri.a (m16 #2 m32 #2)
(jsri-defn a dst16-16-20ar-SI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x1) jsr16-sem
(jsri-defn a dst16-16-20ar-SI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x1) jsr16-sem
              dst32-16-24-Unprefixed-SI (f-0-4 #x9) (f-7-1 0) (f-10-2 #x0) (f-12-4 #x1) jsr32-sem 4)
              dst32-16-24-Unprefixed-SI (f-0-4 #x9) (f-7-1 0) (f-10-2 #x0) (f-12-4 #x1) jsr32-sem 4)
(jsri-defn a dst16-16-8-SI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x1) jsr16-sem
(jsri-defn a dst16-16-8-SI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x1) jsr16-sem
              dst32-16-8-Unprefixed-SI (f-0-4 #x9) (f-7-1 0) (f-10-2 #x0) (f-12-4 #x1) jsr32-sem 3)
              dst32-16-8-Unprefixed-SI (f-0-4 #x9) (f-7-1 0) (f-10-2 #x0) (f-12-4 #x1) jsr32-sem 3)
(jsri-defn a dst16-16-16sa-SI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x1) jsr16-sem
(jsri-defn a dst16-16-16sa-SI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x1) jsr16-sem
              dst32-16-16sa-Unprefixed-SI (f-0-4 #x9) (f-7-1 0) (f-10-2 #x0) (f-12-4 #x1) jsr32-sem 4)
              dst32-16-16sa-Unprefixed-SI (f-0-4 #x9) (f-7-1 0) (f-10-2 #x0) (f-12-4 #x1) jsr32-sem 4)
(jsri-defn a dst16-basic-SI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x1) jsr16-sem
(jsri-defn a dst16-basic-SI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x1) jsr16-sem
              dst32-basic-Unprefixed-SI (f-0-4 #x9) (f-7-1 0) (f-10-2 #x0) (f-12-4 #x1) jsr32-sem 2)
              dst32-basic-Unprefixed-SI (f-0-4 #x9) (f-7-1 0) (f-10-2 #x0) (f-12-4 #x1) jsr32-sem 2)
(dni jsri32.a "jsr.w dst32-16-24-Unprefixed-HI" (RL_1ADDR (machine 32))
(dni jsri32.a "jsr.w dst32-16-24-Unprefixed-HI" (RL_1ADDR (machine 32))
     ("jsri.a ${dst32-16-24-Unprefixed-SI}")
     ("jsri.a ${dst32-16-24-Unprefixed-SI}")
     (+ (f-0-4 #x9) (f-7-1 0) dst32-16-24-Unprefixed-SI (f-10-2 #x0) (f-12-4 #x1))
     (+ (f-0-4 #x9) (f-7-1 0) dst32-16-24-Unprefixed-SI (f-10-2 #x0) (f-12-4 #x1))
     (jsr32-sem 6 dst32-16-24-Unprefixed-SI)
     (jsr32-sem 6 dst32-16-24-Unprefixed-SI)
     ())
     ())
; jsr.w label16 (m32 #1)
; jsr.w label16 (m32 #1)
(dni jsr32.w "jsr.w label" (RL_JUMP RELAXABLE (machine 32))
(dni jsr32.w "jsr.w label" (RL_JUMP RELAXABLE (machine 32))
     ("jsr.w ${Lab-8-16}")
     ("jsr.w ${Lab-8-16}")
     (+ (f-0-4 #xC) (f-4-4 #xF) Lab-8-16)
     (+ (f-0-4 #xC) (f-4-4 #xF) Lab-8-16)
     (jsr32-sem 3 Lab-8-16)
     (jsr32-sem 3 Lab-8-16)
     ())
     ())
; jsr.a label16 (m32 #2)
; jsr.a label16 (m32 #2)
(dni jsr32.a "jsr.a label" (RL_JUMP (machine 32))
(dni jsr32.a "jsr.a label" (RL_JUMP (machine 32))
     ("jsr.a ${Lab-8-24}")
     ("jsr.a ${Lab-8-24}")
     (+ (f-0-4 #xC) (f-4-4 #xD) Lab-8-24)
     (+ (f-0-4 #xC) (f-4-4 #xD) Lab-8-24)
     (jsr32-sem 4 Lab-8-24)
     (jsr32-sem 4 Lab-8-24)
     ())
     ())
; jsrs imm8 (m16 #1)
; jsrs imm8 (m16 #1)
(dni jsrs16 "jsrs Imm-8-QI" ((machine 16))
(dni jsrs16 "jsrs Imm-8-QI" ((machine 16))
     ("jsrs #${Imm-8-QI}")
     ("jsrs #${Imm-8-QI}")
     (+ (f-0-4 #xE) (f-4-4 #xF) Imm-8-QI)
     (+ (f-0-4 #xE) (f-4-4 #xF) Imm-8-QI)
     (jsr16-sem 2 Imm-8-QI)
     (jsr16-sem 2 Imm-8-QI)
     ())
     ())
; jsrs imm8 (m32 #1)
; jsrs imm8 (m32 #1)
(dni jsrs "jsrs #Imm-8-QI" ((machine 32))
(dni jsrs "jsrs #Imm-8-QI" ((machine 32))
     ("jsrs #${Imm-8-QI}")
     ("jsrs #${Imm-8-QI}")
     (+ (f-0-4 #xD) (f-4-4 #xD) Imm-8-QI)
     (+ (f-0-4 #xD) (f-4-4 #xD) Imm-8-QI)
     (jsr32-sem 2 Imm-8-QI)
     (jsr32-sem 2 Imm-8-QI)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; ldc - load control register
; ldc - load control register
; stc - store control register
; stc - store control register
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (ldc32-cr1-sem src dst)
(define-pmacro (ldc32-cr1-sem src dst)
  (sequence ()
  (sequence ()
            (case DFLT dst
            (case DFLT dst
                  ((#x0) (set (reg h-dct0) src))
                  ((#x0) (set (reg h-dct0) src))
                  ((#x1) (set (reg h-dct1) src))
                  ((#x1) (set (reg h-dct1) src))
                  ((#x2) (sequence ((HI tflag))
                  ((#x2) (sequence ((HI tflag))
                                   (set tflag src)
                                   (set tflag src)
                                   (if (and tflag #x1) (set cbit 1))
                                   (if (and tflag #x1) (set cbit 1))
                                   (if (and tflag #x2) (set dbit 1))
                                   (if (and tflag #x2) (set dbit 1))
                                   (if (and tflag #x4) (set zbit 1))
                                   (if (and tflag #x4) (set zbit 1))
                                   (if (and tflag #x8) (set sbit 1))
                                   (if (and tflag #x8) (set sbit 1))
                                   (if (and tflag #x10) (set bbit 1))
                                   (if (and tflag #x10) (set bbit 1))
                                   (if (and tflag #x20) (set obit 1))
                                   (if (and tflag #x20) (set obit 1))
                                   (if (and tflag #x40) (set ibit 1))
                                   (if (and tflag #x40) (set ibit 1))
                                   (if (and tflag #x80) (set ubit 1))))
                                   (if (and tflag #x80) (set ubit 1))))
                  ((#x3) (set (reg h-svf) src))
                  ((#x3) (set (reg h-svf) src))
                  ((#x4) (set (reg h-drc0) src))
                  ((#x4) (set (reg h-drc0) src))
                  ((#x5) (set (reg h-drc1) src))
                  ((#x5) (set (reg h-drc1) src))
                  ((#x6) (set (reg h-dmd0) src))
                  ((#x6) (set (reg h-dmd0) src))
                  ((#x7) (set (reg h-dmd1) src))
                  ((#x7) (set (reg h-dmd1) src))
            )
            )
  )
  )
)
)
(define-pmacro (ldc32-cr2-sem src dst)
(define-pmacro (ldc32-cr2-sem src dst)
  (sequence ()
  (sequence ()
            (case DFLT dst
            (case DFLT dst
                  ((#x0) (set (reg h-intb) src))
                  ((#x0) (set (reg h-intb) src))
                  ((#x1) (set (reg h-sp) src))
                  ((#x1) (set (reg h-sp) src))
                  ((#x2) (set (reg h-sb) src))
                  ((#x2) (set (reg h-sb) src))
                  ((#x3) (set (reg h-fb) src))
                  ((#x3) (set (reg h-fb) src))
                  ((#x4) (set (reg h-svp) src))
                  ((#x4) (set (reg h-svp) src))
                  ((#x5) (set (reg h-vct) src))
                  ((#x5) (set (reg h-vct) src))
                  ((#x7) (set (reg h-isp) src))
                  ((#x7) (set (reg h-isp) src))
            )
            )
  )
  )
)
)
(define-pmacro (ldc32-cr3-sem src dst)
(define-pmacro (ldc32-cr3-sem src dst)
  (sequence ()
  (sequence ()
            (case DFLT dst
            (case DFLT dst
                  ((#x2) (set (reg h-dma0) src))
                  ((#x2) (set (reg h-dma0) src))
                  ((#x3) (set (reg h-dma1) src))
                  ((#x3) (set (reg h-dma1) src))
                  ((#x4) (set (reg h-dra0) src))
                  ((#x4) (set (reg h-dra0) src))
                  ((#x5) (set (reg h-dra1) src))
                  ((#x5) (set (reg h-dra1) src))
                  ((#x6) (set (reg h-dsa0) src))
                  ((#x6) (set (reg h-dsa0) src))
                  ((#x7) (set (reg h-dsa1) src))
                  ((#x7) (set (reg h-dsa1) src))
            )
            )
  )
  )
)
)
(define-pmacro (ldc16-sem src dst)
(define-pmacro (ldc16-sem src dst)
  (sequence ()
  (sequence ()
            (case DFLT dst
            (case DFLT dst
                  ((#x1) (set (reg h-intb) src))
                  ((#x1) (set (reg h-intb) src))
                  ((#x2) (set (reg h-intb) (or (reg h-intb) (sll src (const 16)))))
                  ((#x2) (set (reg h-intb) (or (reg h-intb) (sll src (const 16)))))
                  ((#x3) (sequence ((HI tflag))
                  ((#x3) (sequence ((HI tflag))
                                   (set tflag src)
                                   (set tflag src)
                                   (if (and tflag #x1) (set cbit 1))
                                   (if (and tflag #x1) (set cbit 1))
                                   (if (and tflag #x2) (set dbit 1))
                                   (if (and tflag #x2) (set dbit 1))
                                   (if (and tflag #x4) (set zbit 1))
                                   (if (and tflag #x4) (set zbit 1))
                                   (if (and tflag #x8) (set sbit 1))
                                   (if (and tflag #x8) (set sbit 1))
                                   (if (and tflag #x10) (set bbit 1))
                                   (if (and tflag #x10) (set bbit 1))
                                   (if (and tflag #x20) (set obit 1))
                                   (if (and tflag #x20) (set obit 1))
                                   (if (and tflag #x40) (set ibit 1))
                                   (if (and tflag #x40) (set ibit 1))
                                   (if (and tflag #x80) (set ubit 1))))
                                   (if (and tflag #x80) (set ubit 1))))
                  ((#x4) (set (reg h-isp) src))
                  ((#x4) (set (reg h-isp) src))
                  ((#x5) (set (reg h-sp) src))
                  ((#x5) (set (reg h-sp) src))
                  ((#x6) (set (reg h-sb) src))
                  ((#x6) (set (reg h-sb) src))
                  ((#x7) (set (reg h-fb) src))
                  ((#x7) (set (reg h-fb) src))
            )
            )
  )
  )
)
)
(define-pmacro (stc32-cr1-sem src dst)
(define-pmacro (stc32-cr1-sem src dst)
  (sequence ()
  (sequence ()
            (case DFLT src
            (case DFLT src
                  ((#x0) (set dst (reg h-dct0)))
                  ((#x0) (set dst (reg h-dct0)))
                  ((#x1) (set dst (reg h-dct1)))
                  ((#x1) (set dst (reg h-dct1)))
                  ((#x2) (sequence ((HI tflag))
                  ((#x2) (sequence ((HI tflag))
                                   (set tflag 0)
                                   (set tflag 0)
                                   (if (eq cbit 1) (set tflag (or tflag #x1)))
                                   (if (eq cbit 1) (set tflag (or tflag #x1)))
                                   (if (eq dbit 1) (set tflag (or tflag #x2)))
                                   (if (eq dbit 1) (set tflag (or tflag #x2)))
                                   (if (eq zbit 1) (set tflag (or tflag #x4)))
                                   (if (eq zbit 1) (set tflag (or tflag #x4)))
                                   (if (eq sbit 1) (set tflag (or tflag #x8)))
                                   (if (eq sbit 1) (set tflag (or tflag #x8)))
                                   (if (eq bbit 1) (set tflag (or tflag #x10)))
                                   (if (eq bbit 1) (set tflag (or tflag #x10)))
                                   (if (eq obit 1) (set tflag (or tflag #x20)))
                                   (if (eq obit 1) (set tflag (or tflag #x20)))
                                   (if (eq ibit 1) (set tflag (or tflag #x40)))
                                   (if (eq ibit 1) (set tflag (or tflag #x40)))
                                   (if (eq ubit 1) (set tflag (or tflag #x80)))
                                   (if (eq ubit 1) (set tflag (or tflag #x80)))
                                   (set dst tflag)))
                                   (set dst tflag)))
                  ((#x3) (set dst (reg h-svf)))
                  ((#x3) (set dst (reg h-svf)))
                  ((#x4) (set dst (reg h-drc0)))
                  ((#x4) (set dst (reg h-drc0)))
                  ((#x5) (set dst (reg h-drc1)))
                  ((#x5) (set dst (reg h-drc1)))
                  ((#x6) (set dst (reg h-dmd0)))
                  ((#x6) (set dst (reg h-dmd0)))
                  ((#x7) (set dst (reg h-dmd1)))
                  ((#x7) (set dst (reg h-dmd1)))
            )
            )
  )
  )
)
)
(define-pmacro (stc32-cr2-sem src dst)
(define-pmacro (stc32-cr2-sem src dst)
  (sequence ()
  (sequence ()
            (case DFLT src
            (case DFLT src
                  ((#x0) (set dst (reg h-intb)))
                  ((#x0) (set dst (reg h-intb)))
                  ((#x1) (set dst (reg h-sp)))
                  ((#x1) (set dst (reg h-sp)))
                  ((#x2) (set dst (reg h-sb)))
                  ((#x2) (set dst (reg h-sb)))
                  ((#x3) (set dst (reg h-fb)))
                  ((#x3) (set dst (reg h-fb)))
                  ((#x4) (set dst (reg h-svp)))
                  ((#x4) (set dst (reg h-svp)))
                  ((#x5) (set dst (reg h-vct)))
                  ((#x5) (set dst (reg h-vct)))
                  ((#x7) (set dst (reg h-isp)))
                  ((#x7) (set dst (reg h-isp)))
            )
            )
  )
  )
)
)
(define-pmacro (stc32-cr3-sem src dst)
(define-pmacro (stc32-cr3-sem src dst)
  (sequence ()
  (sequence ()
            (case DFLT src
            (case DFLT src
                  ((#x2) (set dst (reg h-dma0)))
                  ((#x2) (set dst (reg h-dma0)))
                  ((#x3) (set dst (reg h-dma1)))
                  ((#x3) (set dst (reg h-dma1)))
                  ((#x4) (set dst (reg h-dra0)))
                  ((#x4) (set dst (reg h-dra0)))
                  ((#x5) (set dst (reg h-dra1)))
                  ((#x5) (set dst (reg h-dra1)))
                  ((#x6) (set dst (reg h-dsa0)))
                  ((#x6) (set dst (reg h-dsa0)))
                  ((#x7) (set dst (reg h-dsa1)))
                  ((#x7) (set dst (reg h-dsa1)))
            )
            )
  )
  )
)
)
(define-pmacro (stc16-sem src dst)
(define-pmacro (stc16-sem src dst)
  (sequence ()
  (sequence ()
            (case DFLT src
            (case DFLT src
                  ((#x1) (set dst (and (reg h-intb) (const #xffff))))
                  ((#x1) (set dst (and (reg h-intb) (const #xffff))))
                  ((#x2) (set dst (srl (reg h-intb) (const 16))))
                  ((#x2) (set dst (srl (reg h-intb) (const 16))))
                  ((#x3) (sequence ((HI tflag))
                  ((#x3) (sequence ((HI tflag))
                                   (set tflag 0)
                                   (set tflag 0)
                                   (if (eq cbit 1) (set tflag (or tflag #x1)))
                                   (if (eq cbit 1) (set tflag (or tflag #x1)))
                                   (if (eq dbit 1) (set tflag (or tflag #x2)))
                                   (if (eq dbit 1) (set tflag (or tflag #x2)))
                                   (if (eq zbit 1) (set tflag (or tflag #x4)))
                                   (if (eq zbit 1) (set tflag (or tflag #x4)))
                                   (if (eq sbit 1) (set tflag (or tflag #x8)))
                                   (if (eq sbit 1) (set tflag (or tflag #x8)))
                                   (if (eq bbit 1) (set tflag (or tflag #x10)))
                                   (if (eq bbit 1) (set tflag (or tflag #x10)))
                                   (if (eq obit 1) (set tflag (or tflag #x20)))
                                   (if (eq obit 1) (set tflag (or tflag #x20)))
                                   (if (eq ibit 1) (set tflag (or tflag #x40)))
                                   (if (eq ibit 1) (set tflag (or tflag #x40)))
                                   (if (eq ubit 1) (set tflag (or tflag #x80)))
                                   (if (eq ubit 1) (set tflag (or tflag #x80)))
                                   (set dst tflag)))
                                   (set dst tflag)))
                  ((#x4) (set dst (reg h-isp)))
                  ((#x4) (set dst (reg h-isp)))
                  ((#x5) (set dst (reg h-sp)))
                  ((#x5) (set dst (reg h-sp)))
                  ((#x6) (set dst (reg h-sb)))
                  ((#x6) (set dst (reg h-sb)))
                  ((#x7) (set dst (reg h-fb)))
                  ((#x7) (set dst (reg h-fb)))
            )
            )
  )
  )
)
)
(dni ldc16.imm16 "ldc #imm,dst" ((machine 16))
(dni ldc16.imm16 "ldc #imm,dst" ((machine 16))
     ("ldc #${Imm-16-HI},${cr16}")
     ("ldc #${Imm-16-HI},${cr16}")
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-1 0) (f-12-4 0) cr16 Imm-16-HI)
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-1 0) (f-12-4 0) cr16 Imm-16-HI)
     (ldc16-sem Imm-16-HI cr16)
     (ldc16-sem Imm-16-HI cr16)
     ())
     ())
(dni ldc16.dst "ldc src,dest" ((machine 16))
(dni ldc16.dst "ldc src,dest" ((machine 16))
     ("ldc ${dst16-16-HI},${cr16}")
     ("ldc ${dst16-16-HI},${cr16}")
     (+ (f-0-4 7) (f-4-4 #xA) (f-8-1 1) cr16 dst16-16-HI)
     (+ (f-0-4 7) (f-4-4 #xA) (f-8-1 1) cr16 dst16-16-HI)
     (ldc16-sem dst16-16-HI cr16)
     (ldc16-sem dst16-16-HI cr16)
     ())
     ())
; ldc src,dest (m32c #4)
; ldc src,dest (m32c #4)
(dni ldc32.src-cr1 "ldc src,dst" ((machine 32))
(dni ldc32.src-cr1 "ldc src,dst" ((machine 32))
     ("ldc ${dst32-24-Prefixed-HI},${cr1-Prefixed-32}")
     ("ldc ${dst32-24-Prefixed-HI},${cr1-Prefixed-32}")
     (+ (f-0-4 0) (f-4-4 1) (f-8-4 #xD) dst32-24-Prefixed-HI  (f-15-1 1) (f-18-2 0) (f-20-1 1) cr1-Prefixed-32)
     (+ (f-0-4 0) (f-4-4 1) (f-8-4 #xD) dst32-24-Prefixed-HI  (f-15-1 1) (f-18-2 0) (f-20-1 1) cr1-Prefixed-32)
     (ldc32-cr1-sem dst32-24-Prefixed-HI cr1-Prefixed-32)
     (ldc32-cr1-sem dst32-24-Prefixed-HI cr1-Prefixed-32)
     ())
     ())
; ldc src,dest (m32c #5)
; ldc src,dest (m32c #5)
(dni ldc32.src-cr2 "ldc src,dest" ((machine 32))
(dni ldc32.src-cr2 "ldc src,dest" ((machine 32))
     ("ldc ${dst32-16-Unprefixed-SI},${cr2-32}")
     ("ldc ${dst32-16-Unprefixed-SI},${cr2-32}")
     (+ (f-0-4 #xD) dst32-16-Unprefixed-SI (f-7-1 1) (f-10-2 0) (f-12-1 0) cr2-32)
     (+ (f-0-4 #xD) dst32-16-Unprefixed-SI (f-7-1 1) (f-10-2 0) (f-12-1 0) cr2-32)
     (ldc32-cr2-sem dst32-16-Unprefixed-SI cr2-32)
     (ldc32-cr2-sem dst32-16-Unprefixed-SI cr2-32)
     ())
     ())
; ldc src,dest (m32c #6)
; ldc src,dest (m32c #6)
(dni ldc32.src-cr3 "ldc src,dst" ((machine 32))
(dni ldc32.src-cr3 "ldc src,dst" ((machine 32))
     ("ldc ${dst32-24-Prefixed-SI},${cr3-Prefixed-32}")
     ("ldc ${dst32-24-Prefixed-SI},${cr3-Prefixed-32}")
     (+ (f-0-4 0) (f-4-4 1) (f-8-4 #xD) dst32-24-Prefixed-SI (f-15-1 1) (f-18-2 0) (f-20-1 0) cr3-Prefixed-32)
     (+ (f-0-4 0) (f-4-4 1) (f-8-4 #xD) dst32-24-Prefixed-SI (f-15-1 1) (f-18-2 0) (f-20-1 0) cr3-Prefixed-32)
     (ldc32-cr3-sem dst32-24-Prefixed-SI cr3-Prefixed-32)
     (ldc32-cr3-sem dst32-24-Prefixed-SI cr3-Prefixed-32)
     ())
     ())
; ldc src,dest (m32c #1)
; ldc src,dest (m32c #1)
(dni ldc32.imm16-cr1 "ldc #imm,dst" ((machine 32))
(dni ldc32.imm16-cr1 "ldc #imm,dst" ((machine 32))
     ("ldc #${Imm-16-HI},${cr1-Unprefixed-32}")
     ("ldc #${Imm-16-HI},${cr1-Unprefixed-32}")
     (+ (f-0-4 #xD) (f-4-4 5) (f-8-4 #xA) (f-12-1 1) cr1-Unprefixed-32 Imm-16-HI)
     (+ (f-0-4 #xD) (f-4-4 5) (f-8-4 #xA) (f-12-1 1) cr1-Unprefixed-32 Imm-16-HI)
     (ldc32-cr1-sem Imm-16-HI cr1-Unprefixed-32)
     (ldc32-cr1-sem Imm-16-HI cr1-Unprefixed-32)
     ())
     ())
; ldc src,dest (m32c #2)
; ldc src,dest (m32c #2)
(dni ldc32.imm16-cr2 "ldc #imm,dst" ((machine 32))
(dni ldc32.imm16-cr2 "ldc #imm,dst" ((machine 32))
     ("ldc #${Dsp-16-u24},${cr2-32}")
     ("ldc #${Dsp-16-u24},${cr2-32}")
     (+ (f-0-4 #xD) (f-4-4 5) (f-8-4 2) (f-12-1 1)  cr2-32 Dsp-16-u24)
     (+ (f-0-4 #xD) (f-4-4 5) (f-8-4 2) (f-12-1 1)  cr2-32 Dsp-16-u24)
     (ldc32-cr2-sem Dsp-16-u24 cr2-32)
     (ldc32-cr2-sem Dsp-16-u24 cr2-32)
     ())
     ())
; ldc src,dest (m32c #3)
; ldc src,dest (m32c #3)
(dni ldc32.imm16-cr3 "ldc #imm,dst" ((machine 32))
(dni ldc32.imm16-cr3 "ldc #imm,dst" ((machine 32))
     ("ldc #${Dsp-16-u24},${cr3-Unprefixed-32}")
     ("ldc #${Dsp-16-u24},${cr3-Unprefixed-32}")
     (+ (f-0-4 #xD) (f-4-4 5) (f-8-4 6) (f-12-1 1) cr3-Unprefixed-32 Dsp-16-u24)
     (+ (f-0-4 #xD) (f-4-4 5) (f-8-4 6) (f-12-1 1) cr3-Unprefixed-32 Dsp-16-u24)
     (ldc32-cr3-sem Dsp-16-u24 cr3-Unprefixed-32)
     (ldc32-cr3-sem Dsp-16-u24 cr3-Unprefixed-32)
     ())
     ())
(dni stc16.src "stc src,dest" ((machine 16))
(dni stc16.src "stc src,dest" ((machine 16))
     ("stc ${cr16},${dst16-16-HI}")
     ("stc ${cr16},${dst16-16-HI}")
     (+ (f-0-4 7) (f-4-4 #xB) (f-8-1 1) cr16 dst16-16-HI)
     (+ (f-0-4 7) (f-4-4 #xB) (f-8-1 1) cr16 dst16-16-HI)
     (stc16-sem cr16 dst16-16-HI )
     (stc16-sem cr16 dst16-16-HI )
     ())
     ())
(dni stc16.pc "stc pc,dest" ((machine 16))
(dni stc16.pc "stc pc,dest" ((machine 16))
     ("stc pc,${dst16-16-HI}")
     ("stc pc,${dst16-16-HI}")
     (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xC) dst16-16-HI)
     (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xC) dst16-16-HI)
     (sequence () (set dst16-16-HI (reg h-pc)))
     (sequence () (set dst16-16-HI (reg h-pc)))
     ())
     ())
(dni stc32.src-cr1 "stc src,dst" ((machine 32))
(dni stc32.src-cr1 "stc src,dst" ((machine 32))
     ("stc ${cr1-Prefixed-32},${dst32-24-Prefixed-HI}")
     ("stc ${cr1-Prefixed-32},${dst32-24-Prefixed-HI}")
     (+ (f-0-4 0) (f-4-4 1) (f-8-4 #xD) dst32-24-Prefixed-HI  (f-15-1 1) (f-18-2 1) (f-20-1 1) cr1-Prefixed-32)
     (+ (f-0-4 0) (f-4-4 1) (f-8-4 #xD) dst32-24-Prefixed-HI  (f-15-1 1) (f-18-2 1) (f-20-1 1) cr1-Prefixed-32)
     (stc32-cr1-sem cr1-Prefixed-32 dst32-24-Prefixed-HI )
     (stc32-cr1-sem cr1-Prefixed-32 dst32-24-Prefixed-HI )
     ())
     ())
(dni stc32.src-cr2 "stc src,dest" ((machine 32))
(dni stc32.src-cr2 "stc src,dest" ((machine 32))
     ("stc ${cr2-32},${dst32-16-Unprefixed-SI}")
     ("stc ${cr2-32},${dst32-16-Unprefixed-SI}")
     (+ (f-0-4 #xD) dst32-16-Unprefixed-SI (f-7-1 1) (f-10-2 0) (f-12-1 2) cr2-32)
     (+ (f-0-4 #xD) dst32-16-Unprefixed-SI (f-7-1 1) (f-10-2 0) (f-12-1 2) cr2-32)
     (stc32-cr2-sem cr2-32 dst32-16-Unprefixed-SI )
     (stc32-cr2-sem cr2-32 dst32-16-Unprefixed-SI )
     ())
     ())
(dni stc32.src-cr3 "stc src,dst" ((machine 32))
(dni stc32.src-cr3 "stc src,dst" ((machine 32))
     ("stc ${cr3-Prefixed-32},${dst32-24-Prefixed-SI}")
     ("stc ${cr3-Prefixed-32},${dst32-24-Prefixed-SI}")
     (+ (f-0-4 0) (f-4-4 1) (f-8-4 #xD) dst32-24-Prefixed-SI (f-15-1 1) (f-18-2 1) (f-20-1 0) cr3-Prefixed-32)
     (+ (f-0-4 0) (f-4-4 1) (f-8-4 #xD) dst32-24-Prefixed-SI (f-15-1 1) (f-18-2 1) (f-20-1 0) cr3-Prefixed-32)
     (stc32-cr3-sem cr3-Prefixed-32 dst32-24-Prefixed-SI )
     (stc32-cr3-sem cr3-Prefixed-32 dst32-24-Prefixed-SI )
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; ldctx - load context
; ldctx - load context
; stctx - store context
; stctx - store context
;-------------------------------------------------------------
;-------------------------------------------------------------
; ??? semantics
; ??? semantics
(dni ldctx16 "ldctx abs16,abs24" ((machine 16))
(dni ldctx16 "ldctx abs16,abs24" ((machine 16))
     ("ldctx ${Dsp-16-u16},${Dsp-32-u24}")
     ("ldctx ${Dsp-16-u16},${Dsp-32-u24}")
     (+ (f-0-4 #x7) (f-4-4 #xC) (f-8-4 #xF) (f-12-4 #x0) Dsp-16-u16 Dsp-32-u24)
     (+ (f-0-4 #x7) (f-4-4 #xC) (f-8-4 #xF) (f-12-4 #x0) Dsp-16-u16 Dsp-32-u24)
     (nop)
     (nop)
     ())
     ())
(dni ldctx32 "ldctx abs16,abs24" ((machine 32))
(dni ldctx32 "ldctx abs16,abs24" ((machine 32))
     ("ldctx ${Dsp-16-u16},${Dsp-32-u24}")
     ("ldctx ${Dsp-16-u16},${Dsp-32-u24}")
     (+ (f-0-4 #xB) (f-4-4 #x6) (f-8-4 #xC) (f-12-4 #x3) Dsp-16-u16 Dsp-32-u24)
     (+ (f-0-4 #xB) (f-4-4 #x6) (f-8-4 #xC) (f-12-4 #x3) Dsp-16-u16 Dsp-32-u24)
     (nop)
     (nop)
     ())
     ())
(dni stctx16 "stctx abs16,abs24" ((machine 16))
(dni stctx16 "stctx abs16,abs24" ((machine 16))
     ("stctx ${Dsp-16-u16},${Dsp-32-u24}")
     ("stctx ${Dsp-16-u16},${Dsp-32-u24}")
     (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xF) (f-12-4 #x0) Dsp-16-u16 Dsp-32-u24)
     (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xF) (f-12-4 #x0) Dsp-16-u16 Dsp-32-u24)
     (nop)
     (nop)
     ())
     ())
(dni stctx32 "stctx abs16,abs24" ((machine 32))
(dni stctx32 "stctx abs16,abs24" ((machine 32))
     ("stctx ${Dsp-16-u16},${Dsp-32-u24}")
     ("stctx ${Dsp-16-u16},${Dsp-32-u24}")
     (+ (f-0-4 #xB) (f-4-4 #x6) (f-8-4 #xD) (f-12-4 #x3) Dsp-16-u16 Dsp-32-u24)
     (+ (f-0-4 #xB) (f-4-4 #x6) (f-8-4 #xD) (f-12-4 #x3) Dsp-16-u16 Dsp-32-u24)
     (nop)
     (nop)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; lde - load from extra far data area (m16)
; lde - load from extra far data area (m16)
; ste - store to extra far data area (m16)
; ste - store to extra far data area (m16)
;-------------------------------------------------------------
;-------------------------------------------------------------
(lde-dst QI .b 0)
(lde-dst QI .b 0)
(lde-dst HI .w 1)
(lde-dst HI .w 1)
(ste-dst QI .b 0)
(ste-dst QI .b 0)
(ste-dst HI .w 1)
(ste-dst HI .w 1)
;-------------------------------------------------------------
;-------------------------------------------------------------
; ldipl - load interrupt permission level
; ldipl - load interrupt permission level
;-------------------------------------------------------------
;-------------------------------------------------------------
; ??? semantics
; ??? semantics
; ldintb <==> ldc #imm,intbh ; ldc #imm,intbl
; ldintb <==> ldc #imm,intbh ; ldc #imm,intbl
(dni ldipl16.imm "ldipl #imm" ((machine 16))
(dni ldipl16.imm "ldipl #imm" ((machine 16))
     ("ldipl #${Imm-13-u3}")
     ("ldipl #${Imm-13-u3}")
     (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xA) (f-12-1 0) Imm-13-u3)
     (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xA) (f-12-1 0) Imm-13-u3)
     (nop)
     (nop)
     ())
     ())
(dni ldipl32.imm "ldipl #imm" ((machine 32))
(dni ldipl32.imm "ldipl #imm" ((machine 32))
     ("ldipl #${Imm-13-u3}")
     ("ldipl #${Imm-13-u3}")
     (+ (f-0-4 #xD) (f-4-4 5) (f-8-4 #xE) (f-12-1 1) Imm-13-u3)
     (+ (f-0-4 #xD) (f-4-4 5) (f-8-4 #xE) (f-12-1 1) Imm-13-u3)
     (nop)
     (nop)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; max - maximum value
; max - maximum value
;-------------------------------------------------------------
;-------------------------------------------------------------
; TODO check semantics for min -1,0
; TODO check semantics for min -1,0
(define-pmacro (max-sem mode src dst)
(define-pmacro (max-sem mode src dst)
  (sequence ()
  (sequence ()
            (if (gt mode src dst)
            (if (gt mode src dst)
                (set mode dst src)))
                (set mode dst src)))
)
)
; max.size:G #imm,dst
; max.size:G #imm,dst
(binary-arith32-imm-dst-Prefixed QI QI .b 0 max X #x8 #x3 #xF max-sem)
(binary-arith32-imm-dst-Prefixed QI QI .b 0 max X #x8 #x3 #xF max-sem)
(binary-arith32-imm-dst-Prefixed HI HI .w 1 max X #x8 #x3 #xF max-sem)
(binary-arith32-imm-dst-Prefixed HI HI .w 1 max X #x8 #x3 #xF max-sem)
; max.BW:G src,dst
; max.BW:G src,dst
(binary-arith32-src-dst-Prefixed QI QI .b 0 max X #x1 #xD max-sem)
(binary-arith32-src-dst-Prefixed QI QI .b 0 max X #x1 #xD max-sem)
(binary-arith32-src-dst-Prefixed HI HI .w 1 max X #x1 #xD max-sem)
(binary-arith32-src-dst-Prefixed HI HI .w 1 max X #x1 #xD max-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; min - minimum value
; min - minimum value
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (min-sem mode src dst)
(define-pmacro (min-sem mode src dst)
  (sequence ()
  (sequence ()
         (if (lt mode src dst)
         (if (lt mode src dst)
             (set mode dst src)))
             (set mode dst src)))
)
)
; min.size:G #imm,dst
; min.size:G #imm,dst
(binary-arith32-imm-dst-Prefixed QI QI .b 0 min X #x8 #x2 #xF min-sem)
(binary-arith32-imm-dst-Prefixed QI QI .b 0 min X #x8 #x2 #xF min-sem)
(binary-arith32-imm-dst-Prefixed HI HI .w 1 min X #x8 #x2 #xF min-sem)
(binary-arith32-imm-dst-Prefixed HI HI .w 1 min X #x8 #x2 #xF min-sem)
; min.BW:G src,dst
; min.BW:G src,dst
(binary-arith32-src-dst-Prefixed QI QI .b 0 min X #x1 #xC min-sem)
(binary-arith32-src-dst-Prefixed QI QI .b 0 min X #x1 #xC min-sem)
(binary-arith32-src-dst-Prefixed HI HI .w 1 min X #x1 #xC min-sem)
(binary-arith32-src-dst-Prefixed HI HI .w 1 min X #x1 #xC min-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; mov - move
; mov - move
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (mov-sem mode src1 dst)
(define-pmacro (mov-sem mode src1 dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result src1)
            (set result src1)
            (set-z-and-s result)
            (set-z-and-s result)
            (set mode dst src1))
            (set mode dst src1))
)
)
(define-pmacro (mov-dspsp-dst-sem mach mode src1 dst)
(define-pmacro (mov-dspsp-dst-sem mach mode src1 dst)
  (set dst (mem-mach mach mode (add sp src1)))
  (set dst (mem-mach mach mode (add sp src1)))
)
)
(define-pmacro (mov-src-dspsp-sem mach mode src dst1)
(define-pmacro (mov-src-dspsp-sem mach mode src dst1)
  (set (mem-mach mach mode (add sp dst1)) src)
  (set (mem-mach mach mode (add sp dst1)) src)
)
)
(define-pmacro (mov16-imm-an-defn size mode imm regn op1 op2)
(define-pmacro (mov16-imm-an-defn size mode imm regn op1 op2)
  (dni (.sym mov16. size .S-imm- regn)
  (dni (.sym mov16. size .S-imm- regn)
       (.str "mov." size ":S " imm "," regn)
       (.str "mov." size ":S " imm "," regn)
       ((machine 16))
       ((machine 16))
       (.str "mov." size "$S #${" imm "}," regn)
       (.str "mov." size "$S #${" imm "}," regn)
       (+ op1 op2 imm)
       (+ op1 op2 imm)
       (mov-sem mode imm (reg (.sym h- regn)))
       (mov-sem mode imm (reg (.sym h- regn)))
       ())
       ())
)
)
; mov.size:G #imm,dst (m16 #1 m32 #1)
; mov.size:G #imm,dst (m16 #1 m32 #1)
(binary-arith-imm-dst mov G (f-0-4 7) (f-4-3 2) (f-8-4 #xC) #x9 #x2 #xF mov-sem)
(binary-arith-imm-dst mov G (f-0-4 7) (f-4-3 2) (f-8-4 #xC) #x9 #x2 #xF mov-sem)
; mov.L:G #imm32,dst (m32 #2)
; mov.L:G #imm32,dst (m32 #2)
(binary-arith32-imm-dst-defn SI SI .l 0 mov G #xB #x3 #x1 mov-sem)
(binary-arith32-imm-dst-defn SI SI .l 0 mov G #xB #x3 #x1 mov-sem)
; mov.BW:S #imm,dst2 (m32 #4)
; mov.BW:S #imm,dst2 (m32 #4)
(binary-arith32-s-imm-dst QI .b 0 mov #x0 #x2 mov-sem)
(binary-arith32-s-imm-dst QI .b 0 mov #x0 #x2 mov-sem)
(binary-arith32-s-imm-dst HI .w 1 mov #x0 #x2 mov-sem)
(binary-arith32-s-imm-dst HI .w 1 mov #x0 #x2 mov-sem)
; mov.b:S #imm8,dst3 (m16 #3)
; mov.b:S #imm8,dst3 (m16 #3)
(binary-arith16-b-S-imm8-dst3 mov ".b" (f-0-4 #xC) (f-4-1 0) mov-sem)
(binary-arith16-b-S-imm8-dst3 mov ".b" (f-0-4 #xC) (f-4-1 0) mov-sem)
; mov.b:S #imm8,aN (m16 #4)
; mov.b:S #imm8,aN (m16 #4)
(mov16-imm-an-defn b QI Imm-8-QI a0 (f-0-4 #xE) (f-4-4 2))
(mov16-imm-an-defn b QI Imm-8-QI a0 (f-0-4 #xE) (f-4-4 2))
(mov16-imm-an-defn b QI Imm-8-QI a1 (f-0-4 #xE) (f-4-4 #xA))
(mov16-imm-an-defn b QI Imm-8-QI a1 (f-0-4 #xE) (f-4-4 #xA))
(mov16-imm-an-defn w HI Imm-8-HI a0 (f-0-4 #xA) (f-4-4 2))
(mov16-imm-an-defn w HI Imm-8-HI a0 (f-0-4 #xA) (f-4-4 2))
(mov16-imm-an-defn w HI Imm-8-HI a1 (f-0-4 #xA) (f-4-4 #xA))
(mov16-imm-an-defn w HI Imm-8-HI a1 (f-0-4 #xA) (f-4-4 #xA))
; mov.WL:S #imm,A0/A1 (m32 #5)
; mov.WL:S #imm,A0/A1 (m32 #5)
(define-pmacro (mov32-wl-s-defn mode sz op1 imm regn op2)
(define-pmacro (mov32-wl-s-defn mode sz op1 imm regn op2)
  (dni (.sym mov32- sz - regn)
  (dni (.sym mov32- sz - regn)
       (.str "mov." sz ":s" imm "," regn)
       (.str "mov." sz ":s" imm "," regn)
       ((machine 32))
       ((machine 32))
       (.str "mov." sz "$S #${" imm "}," regn)
       (.str "mov." sz "$S #${" imm "}," regn)
       (+ (f-0-4 op1) (f-4-4 op2) imm)
       (+ (f-0-4 op1) (f-4-4 op2) imm)
       (mov-sem mode imm (reg (.sym h- regn)))
       (mov-sem mode imm (reg (.sym h- regn)))
       ())
       ())
)
)
(mov32-wl-s-defn HI w #x9 Imm-8-HI a0 #xC)
(mov32-wl-s-defn HI w #x9 Imm-8-HI a0 #xC)
(mov32-wl-s-defn HI w #x9 Imm-8-HI a1 #xD)
(mov32-wl-s-defn HI w #x9 Imm-8-HI a1 #xD)
(mov32-wl-s-defn SI l #xB Dsp-8-s24 a0 #xC)
(mov32-wl-s-defn SI l #xB Dsp-8-s24 a0 #xC)
(mov32-wl-s-defn SI l #xB Dsp-8-s24 a1 #xD)
(mov32-wl-s-defn SI l #xB Dsp-8-s24 a1 #xD)
; mov.size:Q #imm4,dst (m16 #2 m32 #3)
; mov.size:Q #imm4,dst (m16 #2 m32 #3)
(binary-arith16-imm4-dst-defn QI .b 0 0 mov (f-0-4 #xD) (f-4-3 4) mov-sem)
(binary-arith16-imm4-dst-defn QI .b 0 0 mov (f-0-4 #xD) (f-4-3 4) mov-sem)
(binary-arith16-imm4-dst-defn HI .w 0 1 mov (f-0-4 #xD) (f-4-3 4) mov-sem)
(binary-arith16-imm4-dst-defn HI .w 0 1 mov (f-0-4 #xD) (f-4-3 4) mov-sem)
(binary-arith32-imm4-dst-defn QI .b 1 0 mov #x7 #x2 mov-sem)
(binary-arith32-imm4-dst-defn QI .b 1 0 mov #x7 #x2 mov-sem)
(binary-arith32-imm4-dst-defn HI .w 1 1 mov #x7 #x2 mov-sem)
(binary-arith32-imm4-dst-defn HI .w 1 1 mov #x7 #x2 mov-sem)
; mov.BW:Z #0,dst (m16 #5 m32 #6)
; mov.BW:Z #0,dst (m16 #5 m32 #6)
(dni mov16.b-Z-imm8-dst3
(dni mov16.b-Z-imm8-dst3
     "mov.b:Z #0,Dst16-3-S-8"
     "mov.b:Z #0,Dst16-3-S-8"
     ((machine 16))
     ((machine 16))
     "mov.b$Z #0,${Dst16-3-S-8}"
     "mov.b$Z #0,${Dst16-3-S-8}"
     (+ (f-0-4 #xB) (f-4-1 #x0) Dst16-3-S-8)
     (+ (f-0-4 #xB) (f-4-1 #x0) Dst16-3-S-8)
     (mov-sem QI (const 0) Dst16-3-S-8)
     (mov-sem QI (const 0) Dst16-3-S-8)
     ())
     ())
; (binary-arith16-b-Z-imm8-dst3 mov ".b" (f-0-4 #xB) (f-4-1 0) mov-sem)
; (binary-arith16-b-Z-imm8-dst3 mov ".b" (f-0-4 #xB) (f-4-1 0) mov-sem)
(binary-arith32-z-imm-dst QI .b 0 mov #x0 #x1 mov-sem)
(binary-arith32-z-imm-dst QI .b 0 mov #x0 #x1 mov-sem)
(binary-arith32-z-imm-dst HI .w 1 mov #x0 #x1 mov-sem)
(binary-arith32-z-imm-dst HI .w 1 mov #x0 #x1 mov-sem)
; mov.BW:G src,dst (m16 #6 m32 #7)
; mov.BW:G src,dst (m16 #6 m32 #7)
(binary-arith-src-dst mov G (f-0-4 #x7) (f-4-3 1) #x1 #xB mov-sem)
(binary-arith-src-dst mov G (f-0-4 #x7) (f-4-3 1) #x1 #xB mov-sem)
; mov.B:S src2,a0/a1 (m16 #7)
; mov.B:S src2,a0/a1 (m16 #7)
(dni (.sym mov 16 .b.S-An)
(dni (.sym mov 16 .b.S-An)
     (.str mov ".b:S src2,a[01]")
     (.str mov ".b:S src2,a[01]")
     ((machine 16))
     ((machine 16))
     (.str mov ".b$S ${src16-2-S},${Dst16AnQI-S}")
     (.str mov ".b$S ${src16-2-S},${Dst16AnQI-S}")
     (+ (f-0-4 #x3) (f-4-1 0) Dst16AnQI-S src16-2-S)
     (+ (f-0-4 #x3) (f-4-1 0) Dst16AnQI-S src16-2-S)
     (mov-sem QI src16-2-S Dst16AnQI-S)
     (mov-sem QI src16-2-S Dst16AnQI-S)
     ())
     ())
(define-pmacro (mov16-b-s-an-defn op1 op2 op2c)
(define-pmacro (mov16-b-s-an-defn op1 op2 op2c)
  (dni (.sym mov16.b.S- op1 - op2)
  (dni (.sym mov16.b.S- op1 - op2)
       (.str mov ".b:S " op1 "," op2)
       (.str mov ".b:S " op1 "," op2)
       ((machine 16))
       ((machine 16))
       (.str mov ".b$S " op1 "," op2)
       (.str mov ".b$S " op1 "," op2)
       (+ (f-0-4 #x3) op2c)
       (+ (f-0-4 #x3) op2c)
       (mov-sem QI (reg (.sym h- op1)) (reg (.sym h- op2)))
       (mov-sem QI (reg (.sym h- op1)) (reg (.sym h- op2)))
       ())
       ())
  )
  )
(mov16-b-s-an-defn r0l a1 (f-4-4 #x4))
(mov16-b-s-an-defn r0l a1 (f-4-4 #x4))
(mov16-b-s-an-defn r0h a0 (f-4-4 #x0))
(mov16-b-s-an-defn r0h a0 (f-4-4 #x0))
; mov.L:G src,dst (m32 #8)
; mov.L:G src,dst (m32 #8)
(binary-arith32-src-dst-defn SI SI .l 1 mov G #x1 #x3 mov-sem)
(binary-arith32-src-dst-defn SI SI .l 1 mov G #x1 #x3 mov-sem)
; mov.B:S r0l/r0h,dst2 (m16 #8)
; mov.B:S r0l/r0h,dst2 (m16 #8)
(dni (.sym mov 16 .b.S-Rn-An)
(dni (.sym mov 16 .b.S-Rn-An)
     (.str mov ".b:S r0[lh],src2")
     (.str mov ".b:S r0[lh],src2")
     ((machine 16))
     ((machine 16))
     (.str mov ".b$S ${Dst16RnQI-S},${src16-2-S}")
     (.str mov ".b$S ${Dst16RnQI-S},${src16-2-S}")
     (+ (f-0-4 #x0) (f-4-1 0) Dst16RnQI-S src16-2-S)
     (+ (f-0-4 #x0) (f-4-1 0) Dst16RnQI-S src16-2-S)
     (mov-sem QI src16-2-S Dst16RnQI-S)
     (mov-sem QI src16-2-S Dst16RnQI-S)
     ())
     ())
; mov.B.S src2,r0l/r0h (m16 #9)
; mov.B.S src2,r0l/r0h (m16 #9)
(binary-arith16-b-S-src2 mov (f-0-4 0) (f-4-1 1) mov-sem)
(binary-arith16-b-S-src2 mov (f-0-4 0) (f-4-1 1) mov-sem)
; mov.BW:S src2,r0l/r0 (m32 #9)
; mov.BW:S src2,r0l/r0 (m32 #9)
; mov.BW:S src2,r1l/r1 (m32 #10)
; mov.BW:S src2,r1l/r1 (m32 #10)
(define-pmacro (mov32-src-r sz szcode mode src dst opc1 opc2)
(define-pmacro (mov32-src-r sz szcode mode src dst opc1 opc2)
  (begin
  (begin
    (dni (.sym mov32. sz - src - dst)
    (dni (.sym mov32. sz - src - dst)
         (.str "mov." sz "src," dst)
         (.str "mov." sz "src," dst)
         ((machine 32))
         ((machine 32))
         (.str "mov."  sz "$S ${" (.sym src - mode) "}," dst)
         (.str "mov."  sz "$S ${" (.sym src - mode) "}," dst)
         (+ (f-0-2 opc1) (.sym src - mode) (f-4-3 opc2) (f-7-1 szcode))
         (+ (f-0-2 opc1) (.sym src - mode) (f-4-3 opc2) (f-7-1 szcode))
         (mov-sem mode (.sym src - mode) (reg (.sym h- dst)))
         (mov-sem mode (.sym src - mode) (reg (.sym h- dst)))
         ())
         ())
    )
    )
  )
  )
(mov32-src-r b 0 QI dst32-2-S-16 r0l 0 4)
(mov32-src-r b 0 QI dst32-2-S-16 r0l 0 4)
(mov32-src-r w 1 HI dst32-2-S-16 r0 0 4)
(mov32-src-r w 1 HI dst32-2-S-16 r0 0 4)
(mov32-src-r b 0 QI dst32-2-S-8 r0l 0 4)
(mov32-src-r b 0 QI dst32-2-S-8 r0l 0 4)
(mov32-src-r w 1 HI dst32-2-S-8 r0 0 4)
(mov32-src-r w 1 HI dst32-2-S-8 r0 0 4)
(mov32-src-r b 0 QI dst32-2-S-basic r1l 1 7)
(mov32-src-r b 0 QI dst32-2-S-basic r1l 1 7)
(mov32-src-r w 1 HI dst32-2-S-basic r1 1 7)
(mov32-src-r w 1 HI dst32-2-S-basic r1 1 7)
(mov32-src-r b 0 QI dst32-2-S-16 r1l 1 7)
(mov32-src-r b 0 QI dst32-2-S-16 r1l 1 7)
(mov32-src-r w 1 HI dst32-2-S-16 r1 1 7)
(mov32-src-r w 1 HI dst32-2-S-16 r1 1 7)
(mov32-src-r b 0 QI dst32-2-S-8 r1l 1 7)
(mov32-src-r b 0 QI dst32-2-S-8 r1l 1 7)
(mov32-src-r w 1 HI dst32-2-S-8 r1 1 7)
(mov32-src-r w 1 HI dst32-2-S-8 r1 1 7)
; mov.BW:S r0l/r0,dst2 (m32 #11)
; mov.BW:S r0l/r0,dst2 (m32 #11)
(define-pmacro (mov32-r-dest sz szcode mode src dst opc1 opc2)
(define-pmacro (mov32-r-dest sz szcode mode src dst opc1 opc2)
  (begin
  (begin
    (dni (.sym mov32. sz - src - dst)
    (dni (.sym mov32. sz - src - dst)
         (.str "mov." sz "src," dst)
         (.str "mov." sz "src," dst)
         ((machine 32))
         ((machine 32))
         (.str "mov."  sz "$S " src ",${" (.sym dst - mode) "}")
         (.str "mov."  sz "$S " src ",${" (.sym dst - mode) "}")
         (+ (f-0-2 opc1) (.sym dst - mode) (f-4-3 opc2) (f-7-1 szcode))
         (+ (f-0-2 opc1) (.sym dst - mode) (f-4-3 opc2) (f-7-1 szcode))
         (mov-sem mode (reg (.sym h- src)) (.sym dst - mode))
         (mov-sem mode (reg (.sym h- src)) (.sym dst - mode))
         ())
         ())
    )
    )
  )
  )
(mov32-r-dest b 0 QI r0l dst32-2-S-16 0 0)
(mov32-r-dest b 0 QI r0l dst32-2-S-16 0 0)
(mov32-r-dest w 1 HI r0  dst32-2-S-16 0 0)
(mov32-r-dest w 1 HI r0  dst32-2-S-16 0 0)
(mov32-r-dest b 0 QI r0l dst32-2-S-8  0 0)
(mov32-r-dest b 0 QI r0l dst32-2-S-8  0 0)
(mov32-r-dest w 1 HI r0  dst32-2-S-8  0 0)
(mov32-r-dest w 1 HI r0  dst32-2-S-8  0 0)
; mov.L:S src,A0/A1    (m32 #12)
; mov.L:S src,A0/A1    (m32 #12)
(define-pmacro (mov32-src-a src dst dstcode opc1 opc2)
(define-pmacro (mov32-src-a src dst dstcode opc1 opc2)
  (begin
  (begin
    (dni (.sym mov32. sz - src - dst)
    (dni (.sym mov32. sz - src - dst)
         (.str "mov." sz "src," dst)
         (.str "mov." sz "src," dst)
         ((machine 32))
         ((machine 32))
         (.str "mov.l" "$S ${" (.sym src - SI) "}," dst)
         (.str "mov.l" "$S ${" (.sym src - SI) "}," dst)
         (+ (f-0-2 opc1) (.sym src - SI) (f-4-3 opc2) (f-7-1 dstcode))
         (+ (f-0-2 opc1) (.sym src - SI) (f-4-3 opc2) (f-7-1 dstcode))
         (mov-sem SI (.sym src - SI) (reg (.sym h- dst)))
         (mov-sem SI (.sym src - SI) (reg (.sym h- dst)))
         ())
         ())
    )
    )
  )
  )
(mov32-src-a dst32-2-S-16 a0 0 1 4)
(mov32-src-a dst32-2-S-16 a0 0 1 4)
(mov32-src-a dst32-2-S-16 a1 1 1 4)
(mov32-src-a dst32-2-S-16 a1 1 1 4)
(mov32-src-a dst32-2-S-8 a0 0 1 4)
(mov32-src-a dst32-2-S-8 a0 0 1 4)
(mov32-src-a dst32-2-S-8 a1 1 1 4)
(mov32-src-a dst32-2-S-8 a1 1 1 4)
; mov.BW:G dsp8[sp],dst (m16 #10 m32 #13)
; mov.BW:G dsp8[sp],dst (m16 #10 m32 #13)
; mov.BW:G src,dsp8[sp] (m16 #11 m32 #14)
; mov.BW:G src,dsp8[sp] (m16 #11 m32 #14)
(mov-dspsp-dst mov (f-0-4 #x7) (f-4-3 2) (f-8-4 #xB) #xB #x0 #xF mov-dspsp-dst-sem)
(mov-dspsp-dst mov (f-0-4 #x7) (f-4-3 2) (f-8-4 #xB) #xB #x0 #xF mov-dspsp-dst-sem)
(mov-src-dspsp mov (f-0-4 #x7) (f-4-3 2) (f-8-4 #x3) #xA #x0 #xF mov-src-dspsp-sem)
(mov-src-dspsp mov (f-0-4 #x7) (f-4-3 2) (f-8-4 #x3) #xA #x0 #xF mov-src-dspsp-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; mova - move effective address
; mova - move effective address
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (mov16a-defn dst dstop dstcode)
(define-pmacro (mov16a-defn dst dstop dstcode)
  (dni (.sym mova16. src - dst)
  (dni (.sym mova16. src - dst)
       (.str "mova src," dst)
       (.str "mova src," dst)
       ((machine 16))
       ((machine 16))
       (.str "mova ${dst16-16-Mova-HI}," dst)
       (.str "mova ${dst16-16-Mova-HI}," dst)
       (+ (f-0-4 #xE) (f-4-4 #xB) dst16-16-Mova-HI (f-8-4 dstcode))
       (+ (f-0-4 #xE) (f-4-4 #xB) dst16-16-Mova-HI (f-8-4 dstcode))
       (sequence () (set HI (reg dstop) dst16-16-Mova-HI))
       (sequence () (set HI (reg dstop) dst16-16-Mova-HI))
       ())
       ())
)
)
(mov16a-defn r0 h-r0 0)
(mov16a-defn r0 h-r0 0)
(mov16a-defn r1 h-r1 1)
(mov16a-defn r1 h-r1 1)
(mov16a-defn r2 h-r2 2)
(mov16a-defn r2 h-r2 2)
(mov16a-defn r3 h-r3 3)
(mov16a-defn r3 h-r3 3)
(mov16a-defn a0 h-a0 4)
(mov16a-defn a0 h-a0 4)
(mov16a-defn a1 h-a1 5)
(mov16a-defn a1 h-a1 5)
(define-pmacro (mov32a-defn dst dstop dstcode)
(define-pmacro (mov32a-defn dst dstop dstcode)
  (dni (.sym mova32. src - dst)
  (dni (.sym mova32. src - dst)
       (.str "mova src," dst)
       (.str "mova src," dst)
       ((machine 32))
       ((machine 32))
       (.str "mova ${dst32-16-Unprefixed-Mova-SI}," dst)
       (.str "mova ${dst32-16-Unprefixed-Mova-SI}," dst)
       (+ (f-0-4 #xD) dst32-16-Unprefixed-Mova-SI (f-7-1 1) (f-10-2 1) (f-12-1 1) (f-13-3 dstcode))
       (+ (f-0-4 #xD) dst32-16-Unprefixed-Mova-SI (f-7-1 1) (f-10-2 1) (f-12-1 1) (f-13-3 dstcode))
       (sequence () (set SI (reg dstop) dst32-16-Unprefixed-Mova-SI))
       (sequence () (set SI (reg dstop) dst32-16-Unprefixed-Mova-SI))
       ())
       ())
)
)
(mov32a-defn r2r0 h-r2r0 0)
(mov32a-defn r2r0 h-r2r0 0)
(mov32a-defn r3r1 h-r3r1 1)
(mov32a-defn r3r1 h-r3r1 1)
(mov32a-defn a0 h-a0 2)
(mov32a-defn a0 h-a0 2)
(mov32a-defn a1 h-a1 3)
(mov32a-defn a1 h-a1 3)
;-------------------------------------------------------------
;-------------------------------------------------------------
; movDir - move nibble
; movDir - move nibble
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (movdir-sem nib src dst)
(define-pmacro (movdir-sem nib src dst)
  (sequence ((SI tmp))
  (sequence ((SI tmp))
            (case DFLT nib
            (case DFLT nib
                  ((0) (set dst (or (and dst #xf0) (and src #xf))))
                  ((0) (set dst (or (and dst #xf0) (and src #xf))))
                  ((1) (set dst (or (and dst #x0f) (sll (and src #xf) 4))))
                  ((1) (set dst (or (and dst #x0f) (sll (and src #xf) 4))))
                  ((2) (set dst (or (and dst #xf0) (srl (and src #xf0) 4))))
                  ((2) (set dst (or (and dst #xf0) (srl (and src #xf0) 4))))
                  ((3) (set dst (or (and dst #x0f) (and src #xf0))))
                  ((3) (set dst (or (and dst #x0f) (and src #xf0))))
                  )
                  )
            )
            )
  )
  )
; movDir src,dst
; movDir src,dst
(define-pmacro (mov16dir-1-defn nib dircode dir)
(define-pmacro (mov16dir-1-defn nib dircode dir)
  (dni (.sym mov nib 16 ".r0l-dst")
  (dni (.sym mov nib 16 ".r0l-dst")
       (.str "mov" nib " r0l,dst")
       (.str "mov" nib " r0l,dst")
       ((machine 16))
       ((machine 16))
       (.str "mov" nib " r0l,${dst16-16-QI}")
       (.str "mov" nib " r0l,${dst16-16-QI}")
       (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 dir) dst16-16-QI)
       (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 dir) dst16-16-QI)
       (movdir-sem dircode (reg h-r0l) dst16-16-QI)
       (movdir-sem dircode (reg h-r0l) dst16-16-QI)
       ())
       ())
)
)
(mov16dir-1-defn ll 0 8)
(mov16dir-1-defn ll 0 8)
(mov16dir-1-defn lh 1 #xA)
(mov16dir-1-defn lh 1 #xA)
(mov16dir-1-defn hl 2 9)
(mov16dir-1-defn hl 2 9)
(mov16dir-1-defn hh 3 #xB)
(mov16dir-1-defn hh 3 #xB)
(define-pmacro (mov16dir-2-defn nib dircode dir)
(define-pmacro (mov16dir-2-defn nib dircode dir)
  (dni (.sym mov nib 16 ".src-r0l")
  (dni (.sym mov nib 16 ".src-r0l")
       (.str "mov" nib " src,r0l")
       (.str "mov" nib " src,r0l")
       ((machine 16))
       ((machine 16))
       (.str "mov" nib " ${dst16-16-QI},r0l")
       (.str "mov" nib " ${dst16-16-QI},r0l")
       (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 dir) dst16-16-QI)
       (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 dir) dst16-16-QI)
       (movdir-sem dircode dst16-16-QI (reg h-r0l))
       (movdir-sem dircode dst16-16-QI (reg h-r0l))
       ())
       ())
)
)
(mov16dir-2-defn ll 0 0)
(mov16dir-2-defn ll 0 0)
(mov16dir-2-defn lh 1 2)
(mov16dir-2-defn lh 1 2)
(mov16dir-2-defn hl 2 1)
(mov16dir-2-defn hl 2 1)
(mov16dir-2-defn hh 3 3)
(mov16dir-2-defn hh 3 3)
(define-pmacro (mov32dir-1-defn nib o1o0)
(define-pmacro (mov32dir-1-defn nib o1o0)
  (dni (.sym mov nib 32 ".r0l-dst")
  (dni (.sym mov nib 32 ".r0l-dst")
       (.str "mov" nib " r0l,dst")
       (.str "mov" nib " r0l,dst")
       ((machine 32))
       ((machine 32))
       (.str "mov" nib " r0l,${dst32-24-Prefixed-QI}")
       (.str "mov" nib " r0l,${dst32-24-Prefixed-QI}")
       (+ (f-0-4 #x0) (f-4-4 #x1) (f-8-4 #xB) dst32-24-Prefixed-QI (f-15-1 0) (f-18-2 o1o0) (f-20-4 #xE))
       (+ (f-0-4 #x0) (f-4-4 #x1) (f-8-4 #xB) dst32-24-Prefixed-QI (f-15-1 0) (f-18-2 o1o0) (f-20-4 #xE))
       (movdir-sem o1o0 (reg h-r0l) dst32-24-Prefixed-QI)
       (movdir-sem o1o0 (reg h-r0l) dst32-24-Prefixed-QI)
       ())
       ())
)
)
(mov32dir-1-defn ll 0)
(mov32dir-1-defn ll 0)
(mov32dir-1-defn lh 1)
(mov32dir-1-defn lh 1)
(mov32dir-1-defn hl 2)
(mov32dir-1-defn hl 2)
(mov32dir-1-defn hh 3)
(mov32dir-1-defn hh 3)
(define-pmacro (mov32dir-2-defn nib o1o0)
(define-pmacro (mov32dir-2-defn nib o1o0)
  (dni (.sym mov nib 32 ".src-r0l")
  (dni (.sym mov nib 32 ".src-r0l")
       (.str "mov" nib " src,r0l")
       (.str "mov" nib " src,r0l")
       ((machine 32))
       ((machine 32))
       (.str "mov" nib " ${dst32-24-Prefixed-QI},r0l")
       (.str "mov" nib " ${dst32-24-Prefixed-QI},r0l")
       (+ (f-0-4 #x0) (f-4-4 #x1) (f-8-4 #xA) dst32-24-Prefixed-QI (f-15-1 0) (f-18-2 o1o0) (f-20-4 #xE))
       (+ (f-0-4 #x0) (f-4-4 #x1) (f-8-4 #xA) dst32-24-Prefixed-QI (f-15-1 0) (f-18-2 o1o0) (f-20-4 #xE))
       (movdir-sem o1o0 dst32-24-Prefixed-QI (reg h-r0l))
       (movdir-sem o1o0 dst32-24-Prefixed-QI (reg h-r0l))
       ())
       ())
)
)
(mov32dir-2-defn ll 0)
(mov32dir-2-defn ll 0)
(mov32dir-2-defn lh 1)
(mov32dir-2-defn lh 1)
(mov32dir-2-defn hl 2)
(mov32dir-2-defn hl 2)
(mov32dir-2-defn hh 3)
(mov32dir-2-defn hh 3)
;-------------------------------------------------------------
;-------------------------------------------------------------
; movx - move extend sign (m32)
; movx - move extend sign (m32)
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (movx-sem mode src dst)
(define-pmacro (movx-sem mode src dst)
  (sequence ((SI source) (SI result))
  (sequence ((SI source) (SI result))
            (set SI result src)
            (set SI result src)
            (set-z-and-s result)
            (set-z-and-s result)
            (set dst result))
            (set dst result))
)
)
; movx #imm,dst
; movx #imm,dst
(binary-arith32-imm-dst-defn QI SI "" 0 movx X #xB #x1 #x1 movx-sem)
(binary-arith32-imm-dst-defn QI SI "" 0 movx X #xB #x1 #x1 movx-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; mul - multiply
; mul - multiply
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (mul-sem mode src1 dst)
(define-pmacro (mul-sem mode src1 dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set obit (add-oflag mode src1 dst 0))
            (set obit (add-oflag mode src1 dst 0))
            (set result (mul mode src1 dst))
            (set result (mul mode src1 dst))
            (set dst result))
            (set dst result))
)
)
; mul.BW #imm,dst
; mul.BW #imm,dst
(binary-arith-imm-dst mul G (f-0-4 7) (f-4-3 6) (f-8-4 5) #x8 #x1 #xF mul-sem)
(binary-arith-imm-dst mul G (f-0-4 7) (f-4-3 6) (f-8-4 5) #x8 #x1 #xF mul-sem)
; mul.BW src,dst
; mul.BW src,dst
(binary-arith-src-dst mul G (f-0-4 #x7) (f-4-3 4) #x1 #xC mul-sem)
(binary-arith-src-dst mul G (f-0-4 #x7) (f-4-3 4) #x1 #xC mul-sem)
(dni mul_l "mul.l src,r2r0" ((machine 32))
(dni mul_l "mul.l src,r2r0" ((machine 32))
     ("mul.l ${dst32-24-Prefixed-SI},r2r0")
     ("mul.l ${dst32-24-Prefixed-SI},r2r0")
     (+ (f-0-4 #x0) (f-4-4 #x1) (f-8-4 #x8) (f-15-1 #x1) (f-18-2 #x1) (f-20-4 #xf)
     (+ (f-0-4 #x0) (f-4-4 #x1) (f-8-4 #x8) (f-15-1 #x1) (f-18-2 #x1) (f-20-4 #xf)
        dst32-24-Prefixed-SI)
        dst32-24-Prefixed-SI)
     () ())
     () ())
(dni mulu_l "mulu.l src,r2r0" ((machine 32))
(dni mulu_l "mulu.l src,r2r0" ((machine 32))
     ("mulu.l ${dst32-24-Prefixed-SI},r2r0")
     ("mulu.l ${dst32-24-Prefixed-SI},r2r0")
     (+ (f-0-4 #x0) (f-4-4 #x1) (f-8-4 #x8) (f-15-1 #x1) (f-18-2 #x0) (f-20-4 #xf)
     (+ (f-0-4 #x0) (f-4-4 #x1) (f-8-4 #x8) (f-15-1 #x1) (f-18-2 #x0) (f-20-4 #xf)
        dst32-24-Prefixed-SI)
        dst32-24-Prefixed-SI)
     () ())
     () ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; mulex - multiple extend sign (m32)
; mulex - multiple extend sign (m32)
;-------------------------------------------------------------
;-------------------------------------------------------------
; mulex src,dst
; mulex src,dst
; (dni mulex-absolute-indirect "mulex [src]" ((machine 32))
; (dni mulex-absolute-indirect "mulex [src]" ((machine 32))
;      ("mulex ${dst32-24-absolute-indirect-HI}")
;      ("mulex ${dst32-24-absolute-indirect-HI}")
;      (+ (f-0-4 0) (f-4-4 9) (f-8-4 #xC) dst32-24-absolute-indirect-HI (f-15-1 1) (f-18-2 3) (f-20-4 #xE))
;      (+ (f-0-4 0) (f-4-4 9) (f-8-4 #xC) dst32-24-absolute-indirect-HI (f-15-1 1) (f-18-2 3) (f-20-4 #xE))
;      (set R1R2R0 (mul DI (ext DI R2R0) (ext DI dst32-24-absolute-indirect-HI)))
;      (set R1R2R0 (mul DI (ext DI R2R0) (ext DI dst32-24-absolute-indirect-HI)))
;      ())
;      ())
(dni mulex "mulex src" ((machine 32))
(dni mulex "mulex src" ((machine 32))
     ("mulex ${dst32-16-Unprefixed-Mulex-HI}")
     ("mulex ${dst32-16-Unprefixed-Mulex-HI}")
     (+ (f-0-4 #xC) dst32-16-Unprefixed-Mulex-HI (f-7-1 1) (f-10-2 3) (f-12-4 #xE))
     (+ (f-0-4 #xC) dst32-16-Unprefixed-Mulex-HI (f-7-1 1) (f-10-2 3) (f-12-4 #xE))
     (set R1R2R0 (mul DI (ext DI R2R0) (ext DI dst32-16-Unprefixed-Mulex-HI)))
     (set R1R2R0 (mul DI (ext DI R2R0) (ext DI dst32-16-Unprefixed-Mulex-HI)))
     ())
     ())
; (dni mulex-indirect "mulex [src]" ((machine 32))
; (dni mulex-indirect "mulex [src]" ((machine 32))
;      ("mulex ${dst32-24-indirect-HI}")
;      ("mulex ${dst32-24-indirect-HI}")
;      (+ (f-0-4 0) (f-4-4 9) (f-8-4 #xC) dst32-24-indirect-HI (f-15-1 1) (f-18-2 3) (f-20-4 #xE))
;      (+ (f-0-4 0) (f-4-4 9) (f-8-4 #xC) dst32-24-indirect-HI (f-15-1 1) (f-18-2 3) (f-20-4 #xE))
;      (set R1R2R0 (mul DI (ext DI R2R0) (ext DI dst32-24-indirect-HI)))
;      (set R1R2R0 (mul DI (ext DI R2R0) (ext DI dst32-24-indirect-HI)))
;      ())
;      ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; mulu - multiply unsigned
; mulu - multiply unsigned
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (mulu-sem mode src1 dst)
(define-pmacro (mulu-sem mode src1 dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set obit (add-oflag mode src1 dst 0))
            (set obit (add-oflag mode src1 dst 0))
            (set result (mul mode src1 dst))
            (set result (mul mode src1 dst))
            (set dst result))
            (set dst result))
)
)
; mulu.BW #imm,dst
; mulu.BW #imm,dst
(binary-arith-imm-dst mulu G (f-0-4 7) (f-4-3 6) (f-8-4 4) #x8 #x0 #xF mulu-sem)
(binary-arith-imm-dst mulu G (f-0-4 7) (f-4-3 6) (f-8-4 4) #x8 #x0 #xF mulu-sem)
; mulu.BW src,dst
; mulu.BW src,dst
(binary-arith-src-dst mulu G (f-0-4 #x7) (f-4-3 0) #x1 #x4 mulu-sem)
(binary-arith-src-dst mulu G (f-0-4 #x7) (f-4-3 0) #x1 #x4 mulu-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; neg - twos complement
; neg - twos complement
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (neg-sem mode dst)
(define-pmacro (neg-sem mode dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (neg mode dst))
            (set result (neg mode dst))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dst result))
            (set dst result))
)
)
; neg.BW:G
; neg.BW:G
(unary-insn neg (f-0-4 7) (f-4-3 2) (f-8-4 #x5) #xA #x2 #xF neg-sem)
(unary-insn neg (f-0-4 7) (f-4-3 2) (f-8-4 #x5) #xA #x2 #xF neg-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; not - twos complement
; not - twos complement
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (not-sem mode dst)
(define-pmacro (not-sem mode dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (not mode dst))
            (set result (not mode dst))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dst result))
            (set dst result))
)
)
; not.BW:G
; not.BW:G
(unary-insn-g not (f-0-4 7) (f-4-3 2) (f-8-4 #x7) #xA #x1 #xE not-sem)
(unary-insn-g not (f-0-4 7) (f-4-3 2) (f-8-4 #x7) #xA #x1 #xE not-sem)
(dni not16.b.s
(dni not16.b.s
     "not.b:s Dst16-3-S-8"
     "not.b:s Dst16-3-S-8"
     ((machine 16))
     ((machine 16))
     "not.b:s ${Dst16-3-S-8}"
     "not.b:s ${Dst16-3-S-8}"
     (+ (f-0-4 #xb) (f-4-1 #x1) Dst16-3-S-8)
     (+ (f-0-4 #xb) (f-4-1 #x1) Dst16-3-S-8)
     (not-sem QI Dst16-3-S-8)
     (not-sem QI Dst16-3-S-8)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; nop
; nop
;-------------------------------------------------------------
;-------------------------------------------------------------
(dni nop16
(dni nop16
     "nop"
     "nop"
     ((machine 16))
     ((machine 16))
     "nop"
     "nop"
     (+ (f-0-4 #x0) (f-4-4 #x4))
     (+ (f-0-4 #x0) (f-4-4 #x4))
     (nop)
     (nop)
     ())
     ())
(dni nop32
(dni nop32
     "nop"
     "nop"
     ((machine 32))
     ((machine 32))
     "nop"
     "nop"
     (+ (f-0-4 #xD) (f-4-4 #xE))
     (+ (f-0-4 #xD) (f-4-4 #xE))
     (nop)
     (nop)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; or - logical or
; or - logical or
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (or-sem mode src1 dst)
(define-pmacro (or-sem mode src1 dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (or mode src1 dst))
            (set result (or mode src1 dst))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dst result))
            (set dst result))
)
)
; or.BW #imm,dst (m16 #1 m32 #1)
; or.BW #imm,dst (m16 #1 m32 #1)
(binary-arith-imm-dst or G (f-0-4 7) (f-4-3 3) (f-8-4 3) #x8 #x2 #xF or-sem)
(binary-arith-imm-dst or G (f-0-4 7) (f-4-3 3) (f-8-4 3) #x8 #x2 #xF or-sem)
; or.b:S #imm8,dst3 (m16 #2 m32 #2)
; or.b:S #imm8,dst3 (m16 #2 m32 #2)
(binary-arith16-b-S-imm8-dst3 or ".b" (f-0-4 9) (f-4-1 1) or-sem)
(binary-arith16-b-S-imm8-dst3 or ".b" (f-0-4 9) (f-4-1 1) or-sem)
(binary-arith32-s-imm-dst QI .b 0 or #x1 #x2 or-sem)
(binary-arith32-s-imm-dst QI .b 0 or #x1 #x2 or-sem)
(binary-arith32-s-imm-dst HI .w 1 or #x1 #x2 or-sem)
(binary-arith32-s-imm-dst HI .w 1 or #x1 #x2 or-sem)
; or.BW src,dst (m16 #3 m32 #3)
; or.BW src,dst (m16 #3 m32 #3)
(binary-arith-src-dst or G (f-0-4 #x9) (f-4-3 4) #x1 #x5 or-sem)
(binary-arith-src-dst or G (f-0-4 #x9) (f-4-3 4) #x1 #x5 or-sem)
; or.b:S src,r0[lh] (m16)
; or.b:S src,r0[lh] (m16)
(binary-arith16-b-S-src2 or (f-0-4 1) (f-4-1 1) or-sem)
(binary-arith16-b-S-src2 or (f-0-4 1) (f-4-1 1) or-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; pop - restore register/memory
; pop - restore register/memory
;-------------------------------------------------------------
;-------------------------------------------------------------
; TODO future: split this into .b and .w semantics
; TODO future: split this into .b and .w semantics
(define-pmacro (pop-sem-mach mach mode dst)
(define-pmacro (pop-sem-mach mach mode dst)
  (sequence ((mode b_or_w) (SI length))
  (sequence ((mode b_or_w) (SI length))
            (set b_or_w -1)
            (set b_or_w -1)
            (set b_or_w (srl b_or_w #x8))
            (set b_or_w (srl b_or_w #x8))
            (if (eq b_or_w #x0)
            (if (eq b_or_w #x0)
                (set length 1)    ; .b
                (set length 1)    ; .b
                (set length 2))   ; .w
                (set length 2))   ; .w
            (case DFLT length
            (case DFLT length
                  ((1) (set dst (mem-mach mach QI (reg h-sp))))
                  ((1) (set dst (mem-mach mach QI (reg h-sp))))
                  ((2) (set dst (mem-mach mach HI (reg h-sp)))))
                  ((2) (set dst (mem-mach mach HI (reg h-sp)))))
            (set (reg h-sp) (add (reg h-sp) length))
            (set (reg h-sp) (add (reg h-sp) length))
            )
            )
)
)
(define-pmacro (pop-sem16 mode dest) (pop-sem-mach 16 mode dest))
(define-pmacro (pop-sem16 mode dest) (pop-sem-mach 16 mode dest))
(define-pmacro (pop-sem32 mode dest) (pop-sem-mach 32 mode dest))
(define-pmacro (pop-sem32 mode dest) (pop-sem-mach 32 mode dest))
; pop.BW:G (m16 #1)
; pop.BW:G (m16 #1)
(unary-insn-mach-g 16 pop (f-0-4 7) (f-4-3 2) (f-8-4 #xD) pop-sem16 $G)
(unary-insn-mach-g 16 pop (f-0-4 7) (f-4-3 2) (f-8-4 #xD) pop-sem16 $G)
; pop.BW:G (m32 #1)
; pop.BW:G (m32 #1)
(unary-insn-mach 32 pop #xB #x2 #xF pop-sem32)
(unary-insn-mach 32 pop #xB #x2 #xF pop-sem32)
; pop.b:S r0l/r0h
; pop.b:S r0l/r0h
(dni pop16.b-s-rn  "pop.b:S r0[lh]" ((machine 16))
(dni pop16.b-s-rn  "pop.b:S r0[lh]" ((machine 16))
     "pop.b$S ${Rn16-push-S-anyof}"
     "pop.b$S ${Rn16-push-S-anyof}"
     (+ (f-0-4 #x9) Rn16-push-S-anyof (f-5-3 #x2))
     (+ (f-0-4 #x9) Rn16-push-S-anyof (f-5-3 #x2))
     (pop-sem16 QI Rn16-push-S-anyof)
     (pop-sem16 QI Rn16-push-S-anyof)
     ())
     ())
; pop.w:S a0/a1
; pop.w:S a0/a1
(dni pop16.b-s-an  "pop.w:S a[01]" ((machine 16))
(dni pop16.b-s-an  "pop.w:S a[01]" ((machine 16))
     "pop.w$S ${An16-push-S-anyof}"
     "pop.w$S ${An16-push-S-anyof}"
     (+ (f-0-4 #xD) An16-push-S-anyof (f-5-3 #x2))
     (+ (f-0-4 #xD) An16-push-S-anyof (f-5-3 #x2))
     (pop-sem16 HI An16-push-S-anyof)
     (pop-sem16 HI An16-push-S-anyof)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; popc - pop control register
; popc - pop control register
; pushc - push control register
; pushc - push control register
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (popc32-cr1-sem mode dst)
(define-pmacro (popc32-cr1-sem mode dst)
  (sequence ()
  (sequence ()
            (case DFLT dst
            (case DFLT dst
                  ((#x0) (set (reg h-dct0) (mem32 mode (reg h-sp))))
                  ((#x0) (set (reg h-dct0) (mem32 mode (reg h-sp))))
                  ((#x1) (set (reg h-dct1) (mem32 mode (reg h-sp))))
                  ((#x1) (set (reg h-dct1) (mem32 mode (reg h-sp))))
                  ((#x2) (sequence ((HI tflag))
                  ((#x2) (sequence ((HI tflag))
                                   (set tflag (mem32 mode (reg h-sp)))
                                   (set tflag (mem32 mode (reg h-sp)))
                                   (if (and tflag #x1) (set cbit 1))
                                   (if (and tflag #x1) (set cbit 1))
                                   (if (and tflag #x2) (set dbit 1))
                                   (if (and tflag #x2) (set dbit 1))
                                   (if (and tflag #x4) (set zbit 1))
                                   (if (and tflag #x4) (set zbit 1))
                                   (if (and tflag #x8) (set sbit 1))
                                   (if (and tflag #x8) (set sbit 1))
                                   (if (and tflag #x10) (set bbit 1))
                                   (if (and tflag #x10) (set bbit 1))
                                   (if (and tflag #x20) (set obit 1))
                                   (if (and tflag #x20) (set obit 1))
                                   (if (and tflag #x40) (set ibit 1))
                                   (if (and tflag #x40) (set ibit 1))
                                   (if (and tflag #x80) (set ubit 1))))
                                   (if (and tflag #x80) (set ubit 1))))
                  ((#x3) (set (reg h-svf) (mem32 mode (reg h-sp))))
                  ((#x3) (set (reg h-svf) (mem32 mode (reg h-sp))))
                  ((#x4) (set (reg h-drc0) (mem32 mode (reg h-sp))))
                  ((#x4) (set (reg h-drc0) (mem32 mode (reg h-sp))))
                  ((#x5) (set (reg h-drc1) (mem32 mode (reg h-sp))))
                  ((#x5) (set (reg h-drc1) (mem32 mode (reg h-sp))))
                  ((#x6) (set (reg h-dmd0) (mem32 mode (reg h-sp))))
                  ((#x6) (set (reg h-dmd0) (mem32 mode (reg h-sp))))
                  ((#x7) (set (reg h-dmd1) (mem32 mode (reg h-sp))))
                  ((#x7) (set (reg h-dmd1) (mem32 mode (reg h-sp))))
            )
            )
            (set (reg h-sp) (add (reg h-sp) 2))
            (set (reg h-sp) (add (reg h-sp) 2))
  )
  )
)
)
(define-pmacro (popc32-cr2-sem mode dst)
(define-pmacro (popc32-cr2-sem mode dst)
  (sequence ()
  (sequence ()
            (case DFLT dst
            (case DFLT dst
                  ((#x0) (set (reg h-intb) (mem32 mode (reg h-sp))))
                  ((#x0) (set (reg h-intb) (mem32 mode (reg h-sp))))
                  ((#x1) (set (reg h-sp) (mem32 mode (reg h-sp))))
                  ((#x1) (set (reg h-sp) (mem32 mode (reg h-sp))))
                  ((#x2) (set (reg h-sb) (mem32 mode (reg h-sp))))
                  ((#x2) (set (reg h-sb) (mem32 mode (reg h-sp))))
                  ((#x3) (set (reg h-fb) (mem32 mode (reg h-sp))))
                  ((#x3) (set (reg h-fb) (mem32 mode (reg h-sp))))
                  ((#x7) (set (reg h-isp) (mem32 mode (reg h-sp))))
                  ((#x7) (set (reg h-isp) (mem32 mode (reg h-sp))))
            )
            )
            (set (reg h-sp) (add (reg h-sp) 4))
            (set (reg h-sp) (add (reg h-sp) 4))
  )
  )
)
)
(define-pmacro (popc16-sem mode dst)
(define-pmacro (popc16-sem mode dst)
  (sequence ()
  (sequence ()
            (case DFLT dst
            (case DFLT dst
                  ((#x1) (set (reg h-intb) (or (and (reg h-intb) #x0000)
                  ((#x1) (set (reg h-intb) (or (and (reg h-intb) #x0000)
                                               (mem16 mode (reg h-sp)))))
                                               (mem16 mode (reg h-sp)))))
                  ((#x2) (set (reg h-intb) (or (and (reg h-intb) #xffff0000)
                  ((#x2) (set (reg h-intb) (or (and (reg h-intb) #xffff0000)
                                               (mem16 mode (reg h-sp)))))
                                               (mem16 mode (reg h-sp)))))
                  ((#x3) (sequence ((HI tflag))
                  ((#x3) (sequence ((HI tflag))
                                   (set tflag (mem16 mode (reg h-sp)))
                                   (set tflag (mem16 mode (reg h-sp)))
                                   (if (and tflag #x1) (set cbit 1))
                                   (if (and tflag #x1) (set cbit 1))
                                   (if (and tflag #x2) (set dbit 1))
                                   (if (and tflag #x2) (set dbit 1))
                                   (if (and tflag #x4) (set zbit 1))
                                   (if (and tflag #x4) (set zbit 1))
                                   (if (and tflag #x8) (set sbit 1))
                                   (if (and tflag #x8) (set sbit 1))
                                   (if (and tflag #x10) (set bbit 1))
                                   (if (and tflag #x10) (set bbit 1))
                                   (if (and tflag #x20) (set obit 1))
                                   (if (and tflag #x20) (set obit 1))
                                   (if (and tflag #x40) (set ibit 1))
                                   (if (and tflag #x40) (set ibit 1))
                                   (if (and tflag #x80) (set ubit 1))))
                                   (if (and tflag #x80) (set ubit 1))))
                  ((#x4) (set (reg h-isp) (mem16 mode (reg h-sp))))
                  ((#x4) (set (reg h-isp) (mem16 mode (reg h-sp))))
                  ((#x5) (set (reg h-sp) (mem16 mode (reg h-sp))))
                  ((#x5) (set (reg h-sp) (mem16 mode (reg h-sp))))
                  ((#x6) (set (reg h-sb) (mem16 mode (reg h-sp))))
                  ((#x6) (set (reg h-sb) (mem16 mode (reg h-sp))))
                  ((#x7) (set (reg h-fb) (mem16 mode (reg h-sp))))
                  ((#x7) (set (reg h-fb) (mem16 mode (reg h-sp))))
            )
            )
            (set (reg h-sp) (add (reg h-sp) 2))
            (set (reg h-sp) (add (reg h-sp) 2))
  )
  )
)
)
; popc dest (m16c #1)
; popc dest (m16c #1)
(dni popc16.imm16 "popc dst" ((machine 16))
(dni popc16.imm16 "popc dst" ((machine 16))
     ("popc ${cr16}")
     ("popc ${cr16}")
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-1 0) (f-12-4 3) cr16)
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-1 0) (f-12-4 3) cr16)
     (popc16-sem HI cr16)
     (popc16-sem HI cr16)
     ())
     ())
; popc dest (m32c #1)
; popc dest (m32c #1)
(dni popc32.imm16-cr1 "popc dst" ((machine 32))
(dni popc32.imm16-cr1 "popc dst" ((machine 32))
     ("popc ${cr1-Unprefixed-32}")
     ("popc ${cr1-Unprefixed-32}")
     (+ (f-0-4 #xD) (f-4-4 3) (f-8-4 #xA) (f-12-1 1) cr1-Unprefixed-32)
     (+ (f-0-4 #xD) (f-4-4 3) (f-8-4 #xA) (f-12-1 1) cr1-Unprefixed-32)
     (popc32-cr1-sem HI cr1-Unprefixed-32)
     (popc32-cr1-sem HI cr1-Unprefixed-32)
     ())
     ())
; popc dest (m32c #2)
; popc dest (m32c #2)
(dni popc32.imm16-cr2 "popc dst" ((machine 32))
(dni popc32.imm16-cr2 "popc dst" ((machine 32))
     ("popc ${cr2-32}")
     ("popc ${cr2-32}")
     (+ (f-0-4 #xD) (f-4-4 3) (f-8-4 2) (f-12-1 1) cr2-32)
     (+ (f-0-4 #xD) (f-4-4 3) (f-8-4 2) (f-12-1 1) cr2-32)
     (popc32-cr2-sem SI cr2-32)
     (popc32-cr2-sem SI cr2-32)
     ())
     ())
(define-pmacro (pushc32-cr1-sem mode dst)
(define-pmacro (pushc32-cr1-sem mode dst)
  (sequence ()
  (sequence ()
            (set (reg h-sp) (sub (reg h-sp) 2))
            (set (reg h-sp) (sub (reg h-sp) 2))
            (case DFLT dst
            (case DFLT dst
                  ((#x0) (set (mem32 mode (reg h-sp)) (reg h-dct0)))
                  ((#x0) (set (mem32 mode (reg h-sp)) (reg h-dct0)))
                  ((#x1) (set (mem32 mode (reg h-sp)) (reg h-dct1)))
                  ((#x1) (set (mem32 mode (reg h-sp)) (reg h-dct1)))
                  ((#x2) (sequence ((HI tflag))
                  ((#x2) (sequence ((HI tflag))
                                   (set tflag 0)
                                   (set tflag 0)
                                   (if (eq cbit 1) (set tflag (or tflag #x1)))
                                   (if (eq cbit 1) (set tflag (or tflag #x1)))
                                   (if (eq dbit 1) (set tflag (or tflag #x2)))
                                   (if (eq dbit 1) (set tflag (or tflag #x2)))
                                   (if (eq zbit 1) (set tflag (or tflag #x4)))
                                   (if (eq zbit 1) (set tflag (or tflag #x4)))
                                   (if (eq sbit 1) (set tflag (or tflag #x8)))
                                   (if (eq sbit 1) (set tflag (or tflag #x8)))
                                   (if (eq bbit 1) (set tflag (or tflag #x10)))
                                   (if (eq bbit 1) (set tflag (or tflag #x10)))
                                   (if (eq obit 1) (set tflag (or tflag #x20)))
                                   (if (eq obit 1) (set tflag (or tflag #x20)))
                                   (if (eq ibit 1) (set tflag (or tflag #x40)))
                                   (if (eq ibit 1) (set tflag (or tflag #x40)))
                                   (if (eq ubit 1) (set tflag (or tflag #x80)))
                                   (if (eq ubit 1) (set tflag (or tflag #x80)))
                                   (set (mem32 mode (reg h-sp)) tflag)))
                                   (set (mem32 mode (reg h-sp)) tflag)))
                  ((#x3) (set (mem32 mode (reg h-sp)) (reg h-svf)))
                  ((#x3) (set (mem32 mode (reg h-sp)) (reg h-svf)))
                  ((#x4) (set (mem32 mode (reg h-sp)) (reg h-drc0)))
                  ((#x4) (set (mem32 mode (reg h-sp)) (reg h-drc0)))
                  ((#x5) (set (mem32 mode (reg h-sp)) (reg h-drc1)))
                  ((#x5) (set (mem32 mode (reg h-sp)) (reg h-drc1)))
                  ((#x6) (set (mem32 mode (reg h-sp)) (reg h-dmd0)))
                  ((#x6) (set (mem32 mode (reg h-sp)) (reg h-dmd0)))
                  ((#x7) (set (mem32 mode (reg h-sp)) (reg h-dmd1)))
                  ((#x7) (set (mem32 mode (reg h-sp)) (reg h-dmd1)))
            )
            )
  )
  )
)
)
(define-pmacro (pushc32-cr2-sem mode dst)
(define-pmacro (pushc32-cr2-sem mode dst)
  (sequence ()
  (sequence ()
            (set (reg h-sp) (sub (reg h-sp) 4))
            (set (reg h-sp) (sub (reg h-sp) 4))
            (case DFLT dst
            (case DFLT dst
                  ((#x0) (set (mem32 mode (reg h-sp)) (reg h-intb)))
                  ((#x0) (set (mem32 mode (reg h-sp)) (reg h-intb)))
                  ((#x1) (set (mem32 mode (reg h-sp)) (reg h-sp)))
                  ((#x1) (set (mem32 mode (reg h-sp)) (reg h-sp)))
                  ((#x2) (set (mem32 mode (reg h-sp)) (reg h-sb)))
                  ((#x2) (set (mem32 mode (reg h-sp)) (reg h-sb)))
                  ((#x3) (set (mem32 mode (reg h-sp)) (reg h-fb)))
                  ((#x3) (set (mem32 mode (reg h-sp)) (reg h-fb)))
                  ((#x7) (set (mem32 mode (reg h-sp)) (reg h-isp)))
                  ((#x7) (set (mem32 mode (reg h-sp)) (reg h-isp)))
            )
            )
  )
  )
)
)
(define-pmacro (pushc16-sem mode dst)
(define-pmacro (pushc16-sem mode dst)
  (sequence ()
  (sequence ()
            (set (reg h-sp) (sub (reg h-sp) 2))
            (set (reg h-sp) (sub (reg h-sp) 2))
            (case DFLT dst
            (case DFLT dst
                  ((#x1) (set (mem16 mode (reg h-sp)) (and (reg h-intb) #xffff)))
                  ((#x1) (set (mem16 mode (reg h-sp)) (and (reg h-intb) #xffff)))
                  ((#x2) (set (mem16 mode (reg h-sp)) (and (reg h-intb) #xffff0000)))
                  ((#x2) (set (mem16 mode (reg h-sp)) (and (reg h-intb) #xffff0000)))
                  ((#x3) (sequence ((HI tflag))
                  ((#x3) (sequence ((HI tflag))
                                   (if (eq cbit 1) (set tflag (or tflag #x1)))
                                   (if (eq cbit 1) (set tflag (or tflag #x1)))
                                   (if (eq dbit 1) (set tflag (or tflag #x2)))
                                   (if (eq dbit 1) (set tflag (or tflag #x2)))
                                   (if (eq zbit 1) (set tflag (or tflag #x4)))
                                   (if (eq zbit 1) (set tflag (or tflag #x4)))
                                   (if (eq sbit 1) (set tflag (or tflag #x8)))
                                   (if (eq sbit 1) (set tflag (or tflag #x8)))
                                   (if (eq bbit 1) (set tflag (or tflag #x10)))
                                   (if (eq bbit 1) (set tflag (or tflag #x10)))
                                   (if (eq obit 1) (set tflag (or tflag #x20)))
                                   (if (eq obit 1) (set tflag (or tflag #x20)))
                                   (if (eq ibit 1) (set tflag (or tflag #x40)))
                                   (if (eq ibit 1) (set tflag (or tflag #x40)))
                                   (if (eq ubit 1) (set tflag (or tflag #x80)))
                                   (if (eq ubit 1) (set tflag (or tflag #x80)))
                                   (set (mem16 mode (reg h-sp)) tflag)))
                                   (set (mem16 mode (reg h-sp)) tflag)))
                  ((#x4) (set (mem16 mode (reg h-sp)) (reg h-isp)))
                  ((#x4) (set (mem16 mode (reg h-sp)) (reg h-isp)))
                  ((#x5) (set (mem16 mode (reg h-sp)) (reg h-sp)))
                  ((#x5) (set (mem16 mode (reg h-sp)) (reg h-sp)))
                  ((#x6) (set (mem16 mode (reg h-sp)) (reg h-sb)))
                  ((#x6) (set (mem16 mode (reg h-sp)) (reg h-sb)))
                  ((#x7) (set (mem16 mode (reg h-sp)) (reg h-fb)))
                  ((#x7) (set (mem16 mode (reg h-sp)) (reg h-fb)))
            )
            )
  )
  )
)
)
; pushc src (m16c)
; pushc src (m16c)
(dni pushc16.imm16 "pushc dst" ((machine 16))
(dni pushc16.imm16 "pushc dst" ((machine 16))
     ("pushc ${cr16}")
     ("pushc ${cr16}")
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-1 0) (f-12-4 2) cr16)
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-1 0) (f-12-4 2) cr16)
     (pushc16-sem HI cr16)
     (pushc16-sem HI cr16)
     ())
     ())
; pushc src (m32c #1)
; pushc src (m32c #1)
(dni pushc32.imm16-cr1 "pushc dst" ((machine 32))
(dni pushc32.imm16-cr1 "pushc dst" ((machine 32))
     ("pushc ${cr1-Unprefixed-32}")
     ("pushc ${cr1-Unprefixed-32}")
     (+ (f-0-4 #xD) (f-4-4 1) (f-8-4 #xA) (f-12-1 1) cr1-Unprefixed-32)
     (+ (f-0-4 #xD) (f-4-4 1) (f-8-4 #xA) (f-12-1 1) cr1-Unprefixed-32)
     (pushc32-cr1-sem HI cr1-Unprefixed-32)
     (pushc32-cr1-sem HI cr1-Unprefixed-32)
     ())
     ())
; pushc src (m32c #2)
; pushc src (m32c #2)
(dni pushc32.imm16-cr2 "pushc dst" ((machine 32))
(dni pushc32.imm16-cr2 "pushc dst" ((machine 32))
     ("pushc ${cr2-32}")
     ("pushc ${cr2-32}")
     (+ (f-0-4 #xD) (f-4-4 1) (f-8-4 2) (f-12-1 1) cr2-32)
     (+ (f-0-4 #xD) (f-4-4 1) (f-8-4 2) (f-12-1 1) cr2-32)
     (pushc32-cr2-sem SI cr2-32)
     (pushc32-cr2-sem SI cr2-32)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; popm - pop multiple
; popm - pop multiple
; pushm - push multiple
; pushm - push multiple
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (popm-sem machine dst)
(define-pmacro (popm-sem machine dst)
     (sequence ((SI addrlen))
     (sequence ((SI addrlen))
               (if (eq machine 16)
               (if (eq machine 16)
                   (set addrlen 2)
                   (set addrlen 2)
                   (set addrlen 4))
                   (set addrlen 4))
               (if (and dst 1)
               (if (and dst 1)
                   (sequence () (set R0 (mem-mach machine HI (reg h-sp)))
                   (sequence () (set R0 (mem-mach machine HI (reg h-sp)))
                             (set (reg h-sp) (add (reg h-sp) 2))))
                             (set (reg h-sp) (add (reg h-sp) 2))))
               (if (and dst 2)
               (if (and dst 2)
                   (sequence () (set R1 (mem-mach machine HI (reg h-sp)))
                   (sequence () (set R1 (mem-mach machine HI (reg h-sp)))
                             (set (reg h-sp) (add (reg h-sp) 2))))
                             (set (reg h-sp) (add (reg h-sp) 2))))
               (if (and dst 4)
               (if (and dst 4)
                   (sequence () (set R2 (mem-mach machine HI (reg h-sp)))
                   (sequence () (set R2 (mem-mach machine HI (reg h-sp)))
                             (set (reg h-sp) (add (reg h-sp) 2))))
                             (set (reg h-sp) (add (reg h-sp) 2))))
               (if (and dst 8)
               (if (and dst 8)
                   (sequence () (set R3 (mem-mach machine HI (reg h-sp)))
                   (sequence () (set R3 (mem-mach machine HI (reg h-sp)))
                             (set (reg h-sp) (add (reg h-sp) 2))))
                             (set (reg h-sp) (add (reg h-sp) 2))))
               (if (and dst 16)
               (if (and dst 16)
                   (sequence () (set A0 (mem-mach machine HI (reg h-sp)))
                   (sequence () (set A0 (mem-mach machine HI (reg h-sp)))
                             (set (reg h-sp) (add (reg h-sp) addrlen))))
                             (set (reg h-sp) (add (reg h-sp) addrlen))))
               (if (and dst 32)
               (if (and dst 32)
                   (sequence () (set A1 (mem-mach machine HI (reg h-sp)))
                   (sequence () (set A1 (mem-mach machine HI (reg h-sp)))
                             (set (reg h-sp) (add (reg h-sp) addrlen))))
                             (set (reg h-sp) (add (reg h-sp) addrlen))))
               (if (and dst 64)
               (if (and dst 64)
                   (sequence () (set (reg h-sb) (mem-mach machine HI (reg h-sp)))
                   (sequence () (set (reg h-sb) (mem-mach machine HI (reg h-sp)))
                             (set (reg h-sp) (add (reg h-sp) addrlen))))
                             (set (reg h-sp) (add (reg h-sp) addrlen))))
               (if (eq dst 128)
               (if (eq dst 128)
                   (sequence () (set (reg h-fb) (mem-mach machine HI (reg h-sp)))
                   (sequence () (set (reg h-fb) (mem-mach machine HI (reg h-sp)))
                             (set (reg h-sp) (add (reg h-sp) addrlen))))
                             (set (reg h-sp) (add (reg h-sp) addrlen))))
               )
               )
)
)
(define-pmacro (pushm-sem machine dst)
(define-pmacro (pushm-sem machine dst)
     (sequence ((SI count) (SI addrlen))
     (sequence ((SI count) (SI addrlen))
               (if (eq machine 16)
               (if (eq machine 16)
                   (set addrlen 2)
                   (set addrlen 2)
                   (set addrlen 4))
                   (set addrlen 4))
               (if (eq dst 1)
               (if (eq dst 1)
                   (sequence () (set (reg h-sp) (sub (reg h-sp) addrlen))
                   (sequence () (set (reg h-sp) (sub (reg h-sp) addrlen))
                             (set (mem-mach machine HI (reg h-sp)) (reg h-fb))))
                             (set (mem-mach machine HI (reg h-sp)) (reg h-fb))))
               (if (and dst 2)
               (if (and dst 2)
                   (sequence () (set (reg h-sp) (sub (reg h-sp) addrlen))
                   (sequence () (set (reg h-sp) (sub (reg h-sp) addrlen))
                             (set (mem-mach machine HI (reg h-sp)) (reg h-sb))))
                             (set (mem-mach machine HI (reg h-sp)) (reg h-sb))))
               (if (and dst 4)
               (if (and dst 4)
                   (sequence () (set (reg h-sp) (sub (reg h-sp) addrlen))
                   (sequence () (set (reg h-sp) (sub (reg h-sp) addrlen))
                             (set (mem-mach machine HI (reg h-sp)) A1)))
                             (set (mem-mach machine HI (reg h-sp)) A1)))
               (if (and dst 8)
               (if (and dst 8)
                   (sequence () (set (reg h-sp) (sub (reg h-sp) addrlen))
                   (sequence () (set (reg h-sp) (sub (reg h-sp) addrlen))
                             (set (mem-mach machine HI (reg h-sp)) A0)))
                             (set (mem-mach machine HI (reg h-sp)) A0)))
               (if (and dst 16)
               (if (and dst 16)
                   (sequence () (set (reg h-sp) (sub (reg h-sp) 2))
                   (sequence () (set (reg h-sp) (sub (reg h-sp) 2))
                             (set (mem-mach machine HI (reg h-sp)) R3)))
                             (set (mem-mach machine HI (reg h-sp)) R3)))
               (if (and dst 32)
               (if (and dst 32)
                   (sequence () (set (reg h-sp) (sub (reg h-sp) 2))
                   (sequence () (set (reg h-sp) (sub (reg h-sp) 2))
                             (set (mem-mach machine HI (reg h-sp)) R2)))
                             (set (mem-mach machine HI (reg h-sp)) R2)))
               (if (and dst 64)
               (if (and dst 64)
                   (sequence () (set (reg h-sp) (sub (reg h-sp) 2))
                   (sequence () (set (reg h-sp) (sub (reg h-sp) 2))
                             (set (mem-mach machine HI (reg h-sp)) R1)))
                             (set (mem-mach machine HI (reg h-sp)) R1)))
               (if (and dst 128)
               (if (and dst 128)
                   (sequence () (set (reg h-sp) (sub (reg h-sp) 2))
                   (sequence () (set (reg h-sp) (sub (reg h-sp) 2))
                             (set (mem-mach machine HI (reg h-sp)) R0)))
                             (set (mem-mach machine HI (reg h-sp)) R0)))
               )
               )
)
)
(dni popm16 "popm regs" ((machine 16))
(dni popm16 "popm regs" ((machine 16))
     ("popm ${Regsetpop}")
     ("popm ${Regsetpop}")
     (+ (f-0-4 #xE) (f-4-4 #xD) Regsetpop)
     (+ (f-0-4 #xE) (f-4-4 #xD) Regsetpop)
     (popm-sem 16 Regsetpop)
     (popm-sem 16 Regsetpop)
     ())
     ())
(dni pushm16 "pushm regs" ((machine 16))
(dni pushm16 "pushm regs" ((machine 16))
     ("pushm ${Regsetpush}")
     ("pushm ${Regsetpush}")
     (+ (f-0-4 #xE) (f-4-4 #xC) Regsetpush)
     (+ (f-0-4 #xE) (f-4-4 #xC) Regsetpush)
     (pushm-sem 16 Regsetpush)
     (pushm-sem 16 Regsetpush)
     ())
     ())
(dni popm "popm regs" ((machine 32))
(dni popm "popm regs" ((machine 32))
     ("popm ${Regsetpop}")
     ("popm ${Regsetpop}")
     (+ (f-0-4 #x8) (f-4-4 #xE) Regsetpop)
     (+ (f-0-4 #x8) (f-4-4 #xE) Regsetpop)
     (popm-sem 32 Regsetpop)
     (popm-sem 32 Regsetpop)
     ())
     ())
(dni pushm "pushm regs" ((machine 32))
(dni pushm "pushm regs" ((machine 32))
     ("pushm ${Regsetpush}")
     ("pushm ${Regsetpush}")
     (+ (f-0-4 #x8) (f-4-4 #xF) Regsetpush)
     (+ (f-0-4 #x8) (f-4-4 #xF) Regsetpush)
     (pushm-sem 32 Regsetpush)
     (pushm-sem 32 Regsetpush)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; push - Save register/memory/immediate data
; push - Save register/memory/immediate data
;-------------------------------------------------------------
;-------------------------------------------------------------
; TODO future: split this into .b and .w semantics
; TODO future: split this into .b and .w semantics
(define-pmacro (push-sem-mach mach mode dst)
(define-pmacro (push-sem-mach mach mode dst)
  (sequence ((mode b_or_w) (SI length))
  (sequence ((mode b_or_w) (SI length))
            (set b_or_w -1)
            (set b_or_w -1)
            (set b_or_w (srl b_or_w #x8))
            (set b_or_w (srl b_or_w #x8))
            (if (eq b_or_w #x0)
            (if (eq b_or_w #x0)
                (set length 1)    ; .b
                (set length 1)    ; .b
                (if (eq b_or_w #xff)
                (if (eq b_or_w #xff)
                    (set length 2)   ; .w
                    (set length 2)   ; .w
                    (set length 4))) ; .l
                    (set length 4))) ; .l
            (set (reg h-sp) (sub (reg h-sp) length))
            (set (reg h-sp) (sub (reg h-sp) length))
            (case DFLT length
            (case DFLT length
                  ((1) (set (mem-mach mach QI (reg h-sp)) dst))
                  ((1) (set (mem-mach mach QI (reg h-sp)) dst))
                  ((2) (set (mem-mach mach HI (reg h-sp)) dst))
                  ((2) (set (mem-mach mach HI (reg h-sp)) dst))
                  ((4) (set (mem-mach mach SI (reg h-sp)) dst)))
                  ((4) (set (mem-mach mach SI (reg h-sp)) dst)))
            )
            )
  )
  )
(define-pmacro (push-sem16 mode dst) (push-sem-mach 16 mode dst))
(define-pmacro (push-sem16 mode dst) (push-sem-mach 16 mode dst))
(define-pmacro (push-sem32 mode dst) (push-sem-mach 32 mode dst))
(define-pmacro (push-sem32 mode dst) (push-sem-mach 32 mode dst))
; push.BW:G imm (m16 #1 m32 #1)
; push.BW:G imm (m16 #1 m32 #1)
(dni push16.b.G-imm "push.b:G #Imm-16-QI" ((machine 16))
(dni push16.b.G-imm "push.b:G #Imm-16-QI" ((machine 16))
     ("push.b$G #${Imm-16-QI}")
     ("push.b$G #${Imm-16-QI}")
     (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 2) Imm-16-QI)
     (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 2) Imm-16-QI)
     (push-sem16 QI Imm-16-QI)
     (push-sem16 QI Imm-16-QI)
     ())
     ())
(dni push16.w.G-imm "push.w:G #Imm-16-HI" ((machine 16))
(dni push16.w.G-imm "push.w:G #Imm-16-HI" ((machine 16))
     ("push.w$G #${Imm-16-HI}")
     ("push.w$G #${Imm-16-HI}")
     (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 2) Imm-16-HI)
     (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 2) Imm-16-HI)
     (push-sem16 HI Imm-16-HI)
     (push-sem16 HI Imm-16-HI)
     ())
     ())
(dni push32.b.imm "push.b #Imm-8-QI" ((machine 32))
(dni push32.b.imm "push.b #Imm-8-QI" ((machine 32))
     ("push.b #${Imm-8-QI}")
     ("push.b #${Imm-8-QI}")
     (+ (f-0-4 #xA) (f-4-4 #xE) Imm-8-QI)
     (+ (f-0-4 #xA) (f-4-4 #xE) Imm-8-QI)
     (push-sem32 QI Imm-8-QI)
     (push-sem32 QI Imm-8-QI)
     ())
     ())
(dni push32.w.imm "push.w #Imm-8-HI" ((machine 32))
(dni push32.w.imm "push.w #Imm-8-HI" ((machine 32))
     ("push.w #${Imm-8-HI}")
     ("push.w #${Imm-8-HI}")
     (+ (f-0-4 #xA) (f-4-4 #xF) Imm-8-HI)
     (+ (f-0-4 #xA) (f-4-4 #xF) Imm-8-HI)
     (push-sem32 HI Imm-8-HI)
     (push-sem32 HI Imm-8-HI)
     ())
     ())
; push.BW:G src (m16 #2)
; push.BW:G src (m16 #2)
(unary-insn-mach-g 16 push (f-0-4 7) (f-4-3 2) (f-8-4 #x4) push-sem16 $G)
(unary-insn-mach-g 16 push (f-0-4 7) (f-4-3 2) (f-8-4 #x4) push-sem16 $G)
; push.BW:G src (m32 #2)
; push.BW:G src (m32 #2)
(unary-insn-mach 32 push #xC #x0 #xE push-sem32)
(unary-insn-mach 32 push #xC #x0 #xE push-sem32)
; push.b:S r0l/r0h (m16 #3)
; push.b:S r0l/r0h (m16 #3)
(dni push16.b-s-rn  "push.b:S r0[lh]" ((machine 16))
(dni push16.b-s-rn  "push.b:S r0[lh]" ((machine 16))
     "push.b$S ${Rn16-push-S-anyof}"
     "push.b$S ${Rn16-push-S-anyof}"
     (+ (f-0-4 #x8) Rn16-push-S-anyof (f-5-3 #x2))
     (+ (f-0-4 #x8) Rn16-push-S-anyof (f-5-3 #x2))
     (push-sem16 QI Rn16-push-S-anyof)
     (push-sem16 QI Rn16-push-S-anyof)
     ())
     ())
; push.w:S a0/a1 (m16 #4)
; push.w:S a0/a1 (m16 #4)
(dni push16.b-s-an  "push.w:S a[01]" ((machine 16))
(dni push16.b-s-an  "push.w:S a[01]" ((machine 16))
     "push.w$S ${An16-push-S-anyof}"
     "push.w$S ${An16-push-S-anyof}"
     (+ (f-0-4 #xC) An16-push-S-anyof (f-5-3 #x2))
     (+ (f-0-4 #xC) An16-push-S-anyof (f-5-3 #x2))
     (push-sem16 HI An16-push-S-anyof)
     (push-sem16 HI An16-push-S-anyof)
     ())
     ())
; push.l imm32 (m32 #3)
; push.l imm32 (m32 #3)
(dni push32.l.imm "push.l #Imm-16-SI" ((machine 32))
(dni push32.l.imm "push.l #Imm-16-SI" ((machine 32))
     ("push.l #${Imm-16-SI}")
     ("push.l #${Imm-16-SI}")
     (+ (f-0-4 #xB) (f-4-4 6) (f-8-4 5) (f-12-4 3) Imm-16-SI)
     (+ (f-0-4 #xB) (f-4-4 6) (f-8-4 5) (f-12-4 3) Imm-16-SI)
     (push-sem32 SI Imm-16-SI)
     (push-sem32 SI Imm-16-SI)
     ())
     ())
; push.l src (m32 #4)
; push.l src (m32 #4)
(unary-insn-defn 32 16-Unprefixed SI .l push (+ (f-0-4 #xA) (f-7-1 0) dst32-16-Unprefixed-SI (f-10-2 0) (f-12-4 1)) push-sem32)
(unary-insn-defn 32 16-Unprefixed SI .l push (+ (f-0-4 #xA) (f-7-1 0) dst32-16-Unprefixed-SI (f-10-2 0) (f-12-4 1)) push-sem32)
;-------------------------------------------------------------
;-------------------------------------------------------------
; pusha - push effective address
; pusha - push effective address
;------------------------------------------------------------
;------------------------------------------------------------
(define-pmacro (push16a-sem mode dst)
(define-pmacro (push16a-sem mode dst)
  (sequence ()
  (sequence ()
            (set (reg h-sp) (sub (reg h-sp) 2))
            (set (reg h-sp) (sub (reg h-sp) 2))
            (set (mem16 HI (reg h-sp)) dst))
            (set (mem16 HI (reg h-sp)) dst))
)
)
(define-pmacro (push32a-sem mode dst)
(define-pmacro (push32a-sem mode dst)
  (sequence ()
  (sequence ()
            (set (reg h-sp) (sub (reg h-sp) 4))
            (set (reg h-sp) (sub (reg h-sp) 4))
            (set (mem32 SI (reg h-sp)) dst))
            (set (mem32 SI (reg h-sp)) dst))
)
)
(unary-insn-defn 16 16-Mova HI "" pusha (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 9) dst16-16-Mova-HI) push16a-sem)
(unary-insn-defn 16 16-Mova HI "" pusha (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 9) dst16-16-Mova-HI) push16a-sem)
(unary-insn-defn 32 16-Unprefixed-Mova SI "" pusha (+ (f-0-4 #xB) (f-7-1 0) dst32-16-Unprefixed-Mova-SI (f-10-2 0) (f-12-4 1)) push32a-sem)
(unary-insn-defn 32 16-Unprefixed-Mova SI "" pusha (+ (f-0-4 #xB) (f-7-1 0) dst32-16-Unprefixed-Mova-SI (f-10-2 0) (f-12-4 1)) push32a-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; reit - return from interrupt
; reit - return from interrupt
;-------------------------------------------------------------
;-------------------------------------------------------------
; ??? semantics
; ??? semantics
(dni reit16 "REIT" ((machine 16))
(dni reit16 "REIT" ((machine 16))
     ("reit")
     ("reit")
     (+ (f-0-4 #xF) (f-4-4 #xB))
     (+ (f-0-4 #xF) (f-4-4 #xB))
     (nop)
     (nop)
     ())
     ())
(dni reit32 "REIT" ((machine 32))
(dni reit32 "REIT" ((machine 32))
     ("reit")
     ("reit")
     (+ (f-0-4 9) (f-4-4 #xE))
     (+ (f-0-4 9) (f-4-4 #xE))
     (nop)
     (nop)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; rmpa - repeat multiple and addition
; rmpa - repeat multiple and addition
;-------------------------------------------------------------
;-------------------------------------------------------------
; TODO semantics
; TODO semantics
(dni rmpa16.b "rmpa.size" ((machine 16))
(dni rmpa16.b "rmpa.size" ((machine 16))
     ("rmpa.b")
     ("rmpa.b")
     (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xF) (f-12-4 1))
     (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xF) (f-12-4 1))
     (nop)
     (nop)
     ())
     ())
(dni rmpa16.w "rmpa.size" ((machine 16))
(dni rmpa16.w "rmpa.size" ((machine 16))
     ("rmpa.w")
     ("rmpa.w")
     (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xF) (f-12-4 1))
     (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xF) (f-12-4 1))
     (nop)
     (nop)
     ())
     ())
(dni rmpa32.b "rmpa.size" ((machine 32))
(dni rmpa32.b "rmpa.size" ((machine 32))
     ("rmpa.b")
     ("rmpa.b")
     (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 4) (f-12-4 3))
     (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 4) (f-12-4 3))
     (nop)
     (nop)
     ())
     ())
(dni rmpa32.w "rmpa.size" ((machine 32))
(dni rmpa32.w "rmpa.size" ((machine 32))
     ("rmpa.w")
     ("rmpa.w")
     (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 5) (f-12-4 3))
     (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 5) (f-12-4 3))
     (nop)
     (nop)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; rolc - rotate left with carry
; rolc - rotate left with carry
;-------------------------------------------------------------
;-------------------------------------------------------------
; TODO check semantics
; TODO check semantics
; TODO future: split this into .b and .w semantics
; TODO future: split this into .b and .w semantics
(define-pmacro (rolc-sem mode dst)
(define-pmacro (rolc-sem mode dst)
  (sequence ((mode result) (SI ocbit) (mode b_or_w) (USI mask))
  (sequence ((mode result) (SI ocbit) (mode b_or_w) (USI mask))
            (set b_or_w -1)
            (set b_or_w -1)
            (set b_or_w (srl b_or_w #x8))
            (set b_or_w (srl b_or_w #x8))
            (if (eq b_or_w #x0)
            (if (eq b_or_w #x0)
                (set mask #x8000)      ; .b
                (set mask #x8000)      ; .b
                (set mask #x80000000)) ; .w
                (set mask #x80000000)) ; .w
            (set ocbit cbit)
            (set ocbit cbit)
            (set cbit (and dst mask))
            (set cbit (and dst mask))
            (set result (sll mode dst 1))
            (set result (sll mode dst 1))
            (set result (or result ocbit))
            (set result (or result ocbit))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dst result))
            (set dst result))
)
)
; rolc.BW src,dst
; rolc.BW src,dst
(unary-insn rolc (f-0-4 7) (f-4-3 3) (f-8-4 #xA) #xB #x2 #xE rolc-sem)
(unary-insn rolc (f-0-4 7) (f-4-3 3) (f-8-4 #xA) #xB #x2 #xE rolc-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; rorc - rotate right with carry
; rorc - rotate right with carry
;-------------------------------------------------------------
;-------------------------------------------------------------
; TODO check semantics
; TODO check semantics
; TODO future: split this into .b and .w semantics
; TODO future: split this into .b and .w semantics
(define-pmacro (rorc-sem mode dst)
(define-pmacro (rorc-sem mode dst)
  (sequence ((mode result) (SI ocbit) (mode b_or_w) (USI mask) (SI shamt))
  (sequence ((mode result) (SI ocbit) (mode b_or_w) (USI mask) (SI shamt))
            (set b_or_w -1)
            (set b_or_w -1)
            (set b_or_w (srl b_or_w #x8))
            (set b_or_w (srl b_or_w #x8))
            (if (eq b_or_w #x0)
            (if (eq b_or_w #x0)
                (sequence () (set mask #x7fff) (set shamt 15))     ; .b
                (sequence () (set mask #x7fff) (set shamt 15))     ; .b
                (sequence () (set mask #x7fffffff) (set shamt 31))) ; .w
                (sequence () (set mask #x7fffffff) (set shamt 31))) ; .w
            (set ocbit cbit)
            (set ocbit cbit)
            (set cbit (and dst #x1))
            (set cbit (and dst #x1))
            (set result (srl mode dst (const 1)))
            (set result (srl mode dst (const 1)))
            (set result (or (and result mask) (sll ocbit shamt)))
            (set result (or (and result mask) (sll ocbit shamt)))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dst result))
            (set dst result))
)
)
; rorc.BW src,dst
; rorc.BW src,dst
(unary-insn rorc (f-0-4 7) (f-4-3 3) (f-8-4 #xB) #xA #x2 #xE rorc-sem)
(unary-insn rorc (f-0-4 7) (f-4-3 3) (f-8-4 #xB) #xA #x2 #xE rorc-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; rot - rotate
; rot - rotate
;-------------------------------------------------------------
;-------------------------------------------------------------
; TODO future: split this into .b and .w semantics
; TODO future: split this into .b and .w semantics
(define-pmacro (rot-1-sem mode src1 dst)
(define-pmacro (rot-1-sem mode src1 dst)
  (sequence ((mode tmp) (mode b_or_w) (USI mask) (SI shift))
  (sequence ((mode tmp) (mode b_or_w) (USI mask) (SI shift))
            (case DFLT src1
            (case DFLT src1
                  ((#x0) (set shift 1))
                  ((#x0) (set shift 1))
                  ((#x1) (set shift 2))
                  ((#x1) (set shift 2))
                  ((#x2) (set shift 3))
                  ((#x2) (set shift 3))
                  ((#x3) (set shift 4))
                  ((#x3) (set shift 4))
                  ((#x4) (set shift 5))
                  ((#x4) (set shift 5))
                  ((#x5) (set shift 6))
                  ((#x5) (set shift 6))
                  ((#x6) (set shift 7))
                  ((#x6) (set shift 7))
                  ((#x7) (set shift 8))
                  ((#x7) (set shift 8))
                  ((-8) (set shift -1))
                  ((-8) (set shift -1))
                  ((-7) (set shift -2))
                  ((-7) (set shift -2))
                  ((-6) (set shift -3))
                  ((-6) (set shift -3))
                  ((-5) (set shift -4))
                  ((-5) (set shift -4))
                  ((-4) (set shift -5))
                  ((-4) (set shift -5))
                  ((-3) (set shift -6))
                  ((-3) (set shift -6))
                  ((-2) (set shift -7))
                  ((-2) (set shift -7))
                  ((-1) (set shift -8))
                  ((-1) (set shift -8))
                  (else (set shift 0))
                  (else (set shift 0))
                  )
                  )
            (set b_or_w -1)
            (set b_or_w -1)
            (set b_or_w (srl b_or_w #x8))
            (set b_or_w (srl b_or_w #x8))
            (if (eq b_or_w #x0)
            (if (eq b_or_w #x0)
                (set mask #x7fff)     ; .b
                (set mask #x7fff)     ; .b
                (set mask #x7fffffff)) ; .w
                (set mask #x7fffffff)) ; .w
            (set tmp dst)
            (set tmp dst)
            (if (gt mode shift 0)
            (if (gt mode shift 0)
                (sequence ()
                (sequence ()
                          (set tmp (rol mode tmp shift))
                          (set tmp (rol mode tmp shift))
                          (set cbit (and tmp #x1)))
                          (set cbit (and tmp #x1)))
                (sequence ()
                (sequence ()
                          (set tmp (ror mode tmp (mul shift -1)))
                          (set tmp (ror mode tmp (mul shift -1)))
                          (set cbit (and tmp mask))))
                          (set cbit (and tmp mask))))
            (set-z-and-s tmp)
            (set-z-and-s tmp)
            (set dst tmp))
            (set dst tmp))
)
)
(define-pmacro (rot-2-sem mode dst)
(define-pmacro (rot-2-sem mode dst)
  (sequence ((mode tmp) (mode b_or_w) (USI mask))
  (sequence ((mode tmp) (mode b_or_w) (USI mask))
            (set b_or_w -1)
            (set b_or_w -1)
            (set b_or_w (srl b_or_w #x8))
            (set b_or_w (srl b_or_w #x8))
            (if (eq b_or_w #x0)
            (if (eq b_or_w #x0)
                (set mask #x7fff)     ; .b
                (set mask #x7fff)     ; .b
                (set mask #x7fffffff)) ; .w
                (set mask #x7fffffff)) ; .w
            (set tmp dst)
            (set tmp dst)
            (if (gt mode (reg h-r1h) 0)
            (if (gt mode (reg h-r1h) 0)
                (sequence ()
                (sequence ()
                          (set tmp (rol mode tmp (reg h-r1h)))
                          (set tmp (rol mode tmp (reg h-r1h)))
                          (set cbit (and tmp #x1)))
                          (set cbit (and tmp #x1)))
                (sequence ()
                (sequence ()
                          (set tmp (ror mode tmp (reg h-r1h)))
                          (set tmp (ror mode tmp (reg h-r1h)))
                          (set cbit (and tmp mask))))
                          (set cbit (and tmp mask))))
            (set-z-and-s tmp)
            (set-z-and-s tmp)
            (set dst tmp))
            (set dst tmp))
)
)
; rot.BW #imm4,dst
; rot.BW #imm4,dst
(binary-arith16-shimm4-dst-defn QI .b 0 0 rot (f-0-4 #xE) (f-4-3 0) rot-1-sem)
(binary-arith16-shimm4-dst-defn QI .b 0 0 rot (f-0-4 #xE) (f-4-3 0) rot-1-sem)
(binary-arith16-shimm4-dst-defn HI .w 0 1 rot (f-0-4 #xE) (f-4-3 0) rot-1-sem)
(binary-arith16-shimm4-dst-defn HI .w 0 1 rot (f-0-4 #xE) (f-4-3 0) rot-1-sem)
(binary-arith32-shimm4-dst-defn QI .b 0 0 rot #x7 #x2 rot-1-sem)
(binary-arith32-shimm4-dst-defn QI .b 0 0 rot #x7 #x2 rot-1-sem)
(binary-arith32-shimm4-dst-defn HI .w 0 1 rot #x7 #x2 rot-1-sem)
(binary-arith32-shimm4-dst-defn HI .w 0 1 rot #x7 #x2 rot-1-sem)
; rot.BW src,dst
; rot.BW src,dst
(dni rot16.b-dst "rot r1h,dest" ((machine 16))
(dni rot16.b-dst "rot r1h,dest" ((machine 16))
     ("rot.b r1h,${dst16-16-QI}")
     ("rot.b r1h,${dst16-16-QI}")
     (+ (f-0-4 7) (f-4-4 #x4) (f-8-4 #x6) dst16-16-QI)
     (+ (f-0-4 7) (f-4-4 #x4) (f-8-4 #x6) dst16-16-QI)
     (rot-2-sem QI dst16-16-QI)
     (rot-2-sem QI dst16-16-QI)
     ())
     ())
(dni rot16.w-dst "rot r1h,dest" ((machine 16))
(dni rot16.w-dst "rot r1h,dest" ((machine 16))
     ("rot.w r1h,${dst16-16-HI}")
     ("rot.w r1h,${dst16-16-HI}")
     (+ (f-0-4 7) (f-4-4 #x5) (f-8-4 #x6) dst16-16-HI)
     (+ (f-0-4 7) (f-4-4 #x5) (f-8-4 #x6) dst16-16-HI)
     (rot-2-sem HI dst16-16-HI)
     (rot-2-sem HI dst16-16-HI)
     ())
     ())
(dni rot32.b-dst "rot r1h,dest" ((machine 32))
(dni rot32.b-dst "rot r1h,dest" ((machine 32))
     ("rot.b r1h,${dst32-16-Unprefixed-QI}")
     ("rot.b r1h,${dst32-16-Unprefixed-QI}")
     (+ (f-0-4 #xA) dst32-16-Unprefixed-QI (f-7-1 0) (f-10-2 3) (f-12-4 #xF))
     (+ (f-0-4 #xA) dst32-16-Unprefixed-QI (f-7-1 0) (f-10-2 3) (f-12-4 #xF))
     (rot-2-sem QI dst32-16-Unprefixed-QI)
     (rot-2-sem QI dst32-16-Unprefixed-QI)
     ())
     ())
(dni rot32.w-dst "rot r1h,dest" ((machine 32))
(dni rot32.w-dst "rot r1h,dest" ((machine 32))
     ("rot.w r1h,${dst32-16-Unprefixed-HI}")
     ("rot.w r1h,${dst32-16-Unprefixed-HI}")
     (+ (f-0-4 #xA) dst32-16-Unprefixed-HI (f-7-1 1) (f-10-2 3) (f-12-4 #xF))
     (+ (f-0-4 #xA) dst32-16-Unprefixed-HI (f-7-1 1) (f-10-2 3) (f-12-4 #xF))
     (rot-2-sem HI dst32-16-Unprefixed-HI)
     (rot-2-sem HI dst32-16-Unprefixed-HI)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; rts - return from subroutine
; rts - return from subroutine
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (rts16-sem)
(define-pmacro (rts16-sem)
  (sequence ((SI tpc))
  (sequence ((SI tpc))
            (set tpc (mem16 HI (reg h-sp)))
            (set tpc (mem16 HI (reg h-sp)))
            (set (reg h-sp) (add (reg h-sp) 2))
            (set (reg h-sp) (add (reg h-sp) 2))
            (set tpc (or tpc (sll (mem16 QI (reg h-sp)) 16)))
            (set tpc (or tpc (sll (mem16 QI (reg h-sp)) 16)))
            (set (reg h-sp) (add (reg h-sp) 1))
            (set (reg h-sp) (add (reg h-sp) 1))
            (set pc tpc)
            (set pc tpc)
            )
            )
)
)
(define-pmacro (rts32-sem)
(define-pmacro (rts32-sem)
  (sequence ((SI tpc))
  (sequence ((SI tpc))
            (set tpc (mem32 HI (reg h-sp)))
            (set tpc (mem32 HI (reg h-sp)))
            (set (reg h-sp) (add (reg h-sp) 2))
            (set (reg h-sp) (add (reg h-sp) 2))
            (set tpc (or tpc (sll (mem32 HI (reg h-sp)) 16)))
            (set tpc (or tpc (sll (mem32 HI (reg h-sp)) 16)))
            (set (reg h-sp) (add (reg h-sp) 2))
            (set (reg h-sp) (add (reg h-sp) 2))
            (set pc tpc)
            (set pc tpc)
            )
            )
)
)
(dni rts16 "rts" ((machine 16))
(dni rts16 "rts" ((machine 16))
     ("rts")
     ("rts")
     (+ (f-0-4 #xF) (f-4-4 3))
     (+ (f-0-4 #xF) (f-4-4 3))
     (rts16-sem)
     (rts16-sem)
     ())
     ())
(dni rts32 "rts" ((machine 32))
(dni rts32 "rts" ((machine 32))
     ("rts")
     ("rts")
     (+ (f-0-4 #xD) (f-4-4 #xF))
     (+ (f-0-4 #xD) (f-4-4 #xF))
     (rts32-sem)
     (rts32-sem)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; sbb - subtract with borrow
; sbb - subtract with borrow
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (sbb-sem mode src dst)
(define-pmacro (sbb-sem mode src dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (subc mode dst src cbit))
            (set result (subc mode dst src cbit))
            (set obit (add-oflag mode dst src cbit))
            (set obit (add-oflag mode dst src cbit))
            (set cbit (add-oflag mode dst src cbit))
            (set cbit (add-oflag mode dst src cbit))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dst result))
            (set dst result))
)
)
; sbb.size:G #imm,dst
; sbb.size:G #imm,dst
(binary-arith16-imm-dst-defn QI QI .b 0 sbb X (f-0-4 7) (f-4-3 3) (f-8-4 7) sbb-sem)
(binary-arith16-imm-dst-defn QI QI .b 0 sbb X (f-0-4 7) (f-4-3 3) (f-8-4 7) sbb-sem)
(binary-arith16-imm-dst-defn HI HI .w 1 sbb X (f-0-4 7) (f-4-3 3) (f-8-4 7) sbb-sem)
(binary-arith16-imm-dst-defn HI HI .w 1 sbb X (f-0-4 7) (f-4-3 3) (f-8-4 7) sbb-sem)
(binary-arith32-imm-dst-Prefixed QI QI .b 0 sbb X #x9 #x2 #xE sbb-sem)
(binary-arith32-imm-dst-Prefixed QI QI .b 0 sbb X #x9 #x2 #xE sbb-sem)
(binary-arith32-imm-dst-Prefixed HI HI .w 1 sbb X #x9 #x2 #xE sbb-sem)
(binary-arith32-imm-dst-Prefixed HI HI .w 1 sbb X #x9 #x2 #xE sbb-sem)
; sbb.BW:G src,dst
; sbb.BW:G src,dst
(binary-arith16-src-dst-defn QI QI .b 0 sbb X (f-0-4 #xB) (f-4-3 4) sbb-sem)
(binary-arith16-src-dst-defn QI QI .b 0 sbb X (f-0-4 #xB) (f-4-3 4) sbb-sem)
(binary-arith16-src-dst-defn HI HI .w 1 sbb X (f-0-4 #xB) (f-4-3 4) sbb-sem)
(binary-arith16-src-dst-defn HI HI .w 1 sbb X (f-0-4 #xB) (f-4-3 4) sbb-sem)
(binary-arith32-src-dst-Prefixed QI QI .b 0 sbb X #x1 #x6 sbb-sem)
(binary-arith32-src-dst-Prefixed QI QI .b 0 sbb X #x1 #x6 sbb-sem)
(binary-arith32-src-dst-Prefixed HI HI .w 1 sbb X #x1 #x6 sbb-sem)
(binary-arith32-src-dst-Prefixed HI HI .w 1 sbb X #x1 #x6 sbb-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; sbjnz - subtract then jump on not zero
; sbjnz - subtract then jump on not zero
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (sub-jnz-sem mode src dst label)
(define-pmacro (sub-jnz-sem mode src dst label)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (sub mode dst src))
            (set result (sub mode dst src))
            (set dst result)
            (set dst result)
            (if (ne result 0)
            (if (ne result 0)
                (set pc label)))
                (set pc label)))
)
)
; sbjnz.size #imm4,dst,label
; sbjnz.size #imm4,dst,label
(arith-jnz-imm4-dst sbjnz s4n (f-0-4 #xF) (f-4-3 4) #xf #x1 sub-jnz-sem)
(arith-jnz-imm4-dst sbjnz s4n (f-0-4 #xF) (f-4-3 4) #xf #x1 sub-jnz-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; sccnd - store condition on condition (m32)
; sccnd - store condition on condition (m32)
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (sccnd-sem cnd dst)
(define-pmacro (sccnd-sem cnd dst)
  (sequence ()
  (sequence ()
            (set dst 0)
            (set dst 0)
            (case DFLT cnd
            (case DFLT cnd
                  ((#x00) (if (not cbit) (set dst 1))) ;ltu nc
                  ((#x00) (if (not cbit) (set dst 1))) ;ltu nc
                  ((#x01) (if (or cbit zbit) (set dst 1))) ;leu
                  ((#x01) (if (or cbit zbit) (set dst 1))) ;leu
                  ((#x02) (if (not zbit) (set dst 1))) ;ne nz
                  ((#x02) (if (not zbit) (set dst 1))) ;ne nz
                  ((#x03) (if (not sbit) (set dst 1))) ;pz
                  ((#x03) (if (not sbit) (set dst 1))) ;pz
                  ((#x04) (if (not obit) (set dst 1))) ;no
                  ((#x04) (if (not obit) (set dst 1))) ;no
                  ((#x05) (if (not (or zbit (xor sbit obit))) (set dst 1))) ;gt
                  ((#x05) (if (not (or zbit (xor sbit obit))) (set dst 1))) ;gt
                  ((#x06) (if (xor sbit obit) (set dst 1))) ;ge
                  ((#x06) (if (xor sbit obit) (set dst 1))) ;ge
                  ((#x08) (if (trunc BI cbit) (set dst 1))) ;geu c
                  ((#x08) (if (trunc BI cbit) (set dst 1))) ;geu c
                  ((#x09) (if (not (or cbit zbit)) (set dst 1))) ;gtu
                  ((#x09) (if (not (or cbit zbit)) (set dst 1))) ;gtu
                  ((#x0a) (if (trunc BI zbit) (set dst 1))) ;eq z
                  ((#x0a) (if (trunc BI zbit) (set dst 1))) ;eq z
                  ((#x0b) (if (trunc BI sbit) (set dst 1))) ;n
                  ((#x0b) (if (trunc BI sbit) (set dst 1))) ;n
                  ((#x0c) (if (trunc BI obit) (set dst 1))) ;o
                  ((#x0c) (if (trunc BI obit) (set dst 1))) ;o
                  ((#x0d) (if (or zbit (xor sbit obit)) (set dst 1))) ;le
                  ((#x0d) (if (or zbit (xor sbit obit)) (set dst 1))) ;le
                  ((#x0e) (if (xor sbit obit) (set dst 1))) ;lt
                  ((#x0e) (if (xor sbit obit) (set dst 1))) ;lt
                  )
                  )
        )
        )
  )
  )
; scCND dst
; scCND dst
(dni sccnd
(dni sccnd
     "sccnd dst"
     "sccnd dst"
     ((machine 32))
     ((machine 32))
     "sc$sccond32 ${dst32-16-Unprefixed-HI}"
     "sc$sccond32 ${dst32-16-Unprefixed-HI}"
     (+ (f-0-4 #xD) dst32-16-Unprefixed-HI (f-7-1 1) (f-10-2 3) sccond32)
     (+ (f-0-4 #xD) dst32-16-Unprefixed-HI (f-7-1 1) (f-10-2 3) sccond32)
     (sccnd-sem sccond32 dst32-16-Unprefixed-HI)
     (sccnd-sem sccond32 dst32-16-Unprefixed-HI)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; scmpu - string compare unequal (m32)
; scmpu - string compare unequal (m32)
;-------------------------------------------------------------
;-------------------------------------------------------------
; TODO semantics
; TODO semantics
(dni scmpu.b "scmpu.b" ((machine 32))
(dni scmpu.b "scmpu.b" ((machine 32))
     ("scmpu.b")
     ("scmpu.b")
     (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 #xC) (f-12-4 3))
     (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 #xC) (f-12-4 3))
     (c-call VOID "scmpu_QI_semantics")
     (c-call VOID "scmpu_QI_semantics")
     ())
     ())
(dni scmpu.w "scmpu.w" ((machine 32))
(dni scmpu.w "scmpu.w" ((machine 32))
     ("scmpu.w")
     ("scmpu.w")
     (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 #xD) (f-12-4 3))
     (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 #xD) (f-12-4 3))
     (c-call VOID "scmpu_HI_semantics")
     (c-call VOID "scmpu_HI_semantics")
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; sha - shift arithmetic
; sha - shift arithmetic
;-------------------------------------------------------------
;-------------------------------------------------------------
; TODO future: split this into .b and .w semantics
; TODO future: split this into .b and .w semantics
(define-pmacro (sha-sem mode src1 dst)
(define-pmacro (sha-sem mode src1 dst)
  (sequence ((mode result)(mode shift)(mode shmode))
  (sequence ((mode result)(mode shift)(mode shmode))
             (case DFLT src1
             (case DFLT src1
                   ((#x0) (set shift 1))
                   ((#x0) (set shift 1))
                   ((#x1) (set shift 2))
                   ((#x1) (set shift 2))
                   ((#x2) (set shift 3))
                   ((#x2) (set shift 3))
                   ((#x3) (set shift 4))
                   ((#x3) (set shift 4))
                   ((#x4) (set shift 5))
                   ((#x4) (set shift 5))
                   ((#x5) (set shift 6))
                   ((#x5) (set shift 6))
                   ((#x6) (set shift 7))
                   ((#x6) (set shift 7))
                   ((#x7) (set shift 8))
                   ((#x7) (set shift 8))
                   ((-8) (set shift -1))
                   ((-8) (set shift -1))
                   ((-7) (set shift -2))
                   ((-7) (set shift -2))
                   ((-6) (set shift -3))
                   ((-6) (set shift -3))
                   ((-5) (set shift -4))
                   ((-5) (set shift -4))
                   ((-4) (set shift -5))
                   ((-4) (set shift -5))
                   ((-3) (set shift -6))
                   ((-3) (set shift -6))
                   ((-2) (set shift -7))
                   ((-2) (set shift -7))
                   ((-1) (set shift -8))
                   ((-1) (set shift -8))
                   (else (set shift 0))
                   (else (set shift 0))
                   )
                   )
             (set shmode -1)
             (set shmode -1)
             (set shmode (srl shmode #x8))
             (set shmode (srl shmode #x8))
             (if (lt mode shift #x0) (set result (sra mode dst (mul shift -1))))
             (if (lt mode shift #x0) (set result (sra mode dst (mul shift -1))))
             (if (gt mode shift 0) (set result (sll mode dst shift)))
             (if (gt mode shift 0) (set result (sll mode dst shift)))
             (if (eq shmode #x0) ; QI
             (if (eq shmode #x0) ; QI
                 (sequence
                 (sequence
                   ((mode cbitamt))
                   ((mode cbitamt))
                    (if (lt mode shift #x0)
                    (if (lt mode shift #x0)
                        (set cbitamt (sub #x8 shift)) ; sra
                        (set cbitamt (sub #x8 shift)) ; sra
                        (set cbitamt (sub shift 1)))  ; sll
                        (set cbitamt (sub shift 1)))  ; sll
                    (set cbit (srl (and (sll dst cbitamt) #x80) #x7))
                    (set cbit (srl (and (sll dst cbitamt) #x80) #x7))
                    (set obit (ne (and dst #x80) (and result #x80)))
                    (set obit (ne (and dst #x80) (and result #x80)))
                    ))
                    ))
             (if (eq shmode #xff) ; HI
             (if (eq shmode #xff) ; HI
                 (sequence
                 (sequence
                   ((mode cbitamt))
                   ((mode cbitamt))
                    (if (lt mode shift #x0)
                    (if (lt mode shift #x0)
                        (set cbitamt (sub 16 shift)) ; sra
                        (set cbitamt (sub 16 shift)) ; sra
                        (set cbitamt (sub shift 1))) ; sll
                        (set cbitamt (sub shift 1))) ; sll
                    (set cbit (srl (and (sll dst cbitamt) #x8000) #xf))
                    (set cbit (srl (and (sll dst cbitamt) #x8000) #xf))
                    (set obit (ne (and dst #x8000) (and result #x8000)))
                    (set obit (ne (and dst #x8000) (and result #x8000)))
                    ))
                    ))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dst result))
            (set dst result))
)
)
(define-pmacro (shar1h-sem mode dst)
(define-pmacro (shar1h-sem mode dst)
  (sequence ((mode result)(mode shmode))
  (sequence ((mode result)(mode shmode))
             (set shmode -1)
             (set shmode -1)
             (set shmode (srl shmode #x8))
             (set shmode (srl shmode #x8))
             (if (lt mode (reg h-r1h) 0) (set result (sra mode dst (reg h-r1h))))
             (if (lt mode (reg h-r1h) 0) (set result (sra mode dst (reg h-r1h))))
             (if (gt mode (reg h-r1h) 0) (set result (sll mode dst (reg h-r1h))))
             (if (gt mode (reg h-r1h) 0) (set result (sll mode dst (reg h-r1h))))
             (if (eq shmode #x0) ; QI
             (if (eq shmode #x0) ; QI
                 (sequence
                 (sequence
                   ((mode cbitamt))
                   ((mode cbitamt))
                    (if (lt mode (reg h-r1h) #x0)
                    (if (lt mode (reg h-r1h) #x0)
                        (set cbitamt (sub #x8 (reg h-r1h))) ; sra
                        (set cbitamt (sub #x8 (reg h-r1h))) ; sra
                        (set cbitamt (sub (reg h-r1h) 1)))  ; sll
                        (set cbitamt (sub (reg h-r1h) 1)))  ; sll
                    (set cbit (srl (and (sll dst cbitamt) #x80) #x7))
                    (set cbit (srl (and (sll dst cbitamt) #x80) #x7))
                    (set obit (ne (and dst #x80) (and result #x80)))
                    (set obit (ne (and dst #x80) (and result #x80)))
                    ))
                    ))
             (if (eq shmode #xff) ; HI
             (if (eq shmode #xff) ; HI
                 (sequence
                 (sequence
                   ((mode cbitamt))
                   ((mode cbitamt))
                    (if (lt mode (reg h-r1h) #x0)
                    (if (lt mode (reg h-r1h) #x0)
                        (set cbitamt (sub 16 (reg h-r1h))) ; sra
                        (set cbitamt (sub 16 (reg h-r1h))) ; sra
                        (set cbitamt (sub (reg h-r1h) 1))) ; sll
                        (set cbitamt (sub (reg h-r1h) 1))) ; sll
                    (set cbit (srl (and (sll dst cbitamt) #x8000) #xf))
                    (set cbit (srl (and (sll dst cbitamt) #x8000) #xf))
                    (set obit (ne (and dst #x8000) (and result #x8000)))
                    (set obit (ne (and dst #x8000) (and result #x8000)))
                    ))
                    ))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dst result))
            (set dst result))
)
)
; sha.BW #imm4,dst (m16 #1 m32 #1)
; sha.BW #imm4,dst (m16 #1 m32 #1)
(binary-arith16-shimm4-dst-defn QI .b 0 0 sha (f-0-4 #xF) (f-4-3 0) sha-sem)
(binary-arith16-shimm4-dst-defn QI .b 0 0 sha (f-0-4 #xF) (f-4-3 0) sha-sem)
(binary-arith16-shimm4-dst-defn HI .w 0 1 sha (f-0-4 #xF) (f-4-3 0) sha-sem)
(binary-arith16-shimm4-dst-defn HI .w 0 1 sha (f-0-4 #xF) (f-4-3 0) sha-sem)
(binary-arith32-shimm4-dst-defn QI .b 1 0 sha #x7 #x0 sha-sem)
(binary-arith32-shimm4-dst-defn QI .b 1 0 sha #x7 #x0 sha-sem)
(binary-arith32-shimm4-dst-defn HI .w 1 1 sha #x7 #x0 sha-sem)
(binary-arith32-shimm4-dst-defn HI .w 1 1 sha #x7 #x0 sha-sem)
; sha.BW r1h,dst (m16 #2 m32 #3)
; sha.BW r1h,dst (m16 #2 m32 #3)
(dni sha16.b-dst "sha.b r1h,dest" ((machine 16))
(dni sha16.b-dst "sha.b r1h,dest" ((machine 16))
     ("sha.b r1h,${dst16-16-QI}")
     ("sha.b r1h,${dst16-16-QI}")
     (+ (f-0-4 7) (f-4-4 4) (f-8-4 #xF) dst16-16-QI)
     (+ (f-0-4 7) (f-4-4 4) (f-8-4 #xF) dst16-16-QI)
     (shar1h-sem HI dst16-16-QI)
     (shar1h-sem HI dst16-16-QI)
     ())
     ())
(dni sha16.w-dst "sha.w r1h,dest" ((machine 16))
(dni sha16.w-dst "sha.w r1h,dest" ((machine 16))
     ("sha.w r1h,${dst16-16-HI}")
     ("sha.w r1h,${dst16-16-HI}")
     (+ (f-0-4 7) (f-4-4 5) (f-8-4 #xF) dst16-16-HI)
     (+ (f-0-4 7) (f-4-4 5) (f-8-4 #xF) dst16-16-HI)
     (shar1h-sem HI dst16-16-HI)
     (shar1h-sem HI dst16-16-HI)
     ())
     ())
(dni sha32.b-dst "sha.b r1h,dest" ((machine 32))
(dni sha32.b-dst "sha.b r1h,dest" ((machine 32))
     ("sha.b r1h,${dst32-16-Unprefixed-QI}")
     ("sha.b r1h,${dst32-16-Unprefixed-QI}")
     (+ (f-0-4 #xB) dst32-16-Unprefixed-QI (f-7-1 0) (f-10-2 3) (f-12-4 #xE))
     (+ (f-0-4 #xB) dst32-16-Unprefixed-QI (f-7-1 0) (f-10-2 3) (f-12-4 #xE))
     (shar1h-sem QI dst32-16-Unprefixed-QI)
     (shar1h-sem QI dst32-16-Unprefixed-QI)
     ())
     ())
(dni sha32.w-dst "sha.w r1h,dest" ((machine 32))
(dni sha32.w-dst "sha.w r1h,dest" ((machine 32))
     ("sha.w r1h,${dst32-16-Unprefixed-HI}")
     ("sha.w r1h,${dst32-16-Unprefixed-HI}")
     (+ (f-0-4 #xB) dst32-16-Unprefixed-HI (f-7-1 1) (f-10-2 3) (f-12-4 #xE))
     (+ (f-0-4 #xB) dst32-16-Unprefixed-HI (f-7-1 1) (f-10-2 3) (f-12-4 #xE))
     (shar1h-sem HI dst32-16-Unprefixed-HI)
     (shar1h-sem HI dst32-16-Unprefixed-HI)
     ())
     ())
; sha.L #imm,dst (m16 #3)
; sha.L #imm,dst (m16 #3)
(dni sha16-L-imm-r2r0 "sha.L #Imm-sh-12-s4,r2r0" ((machine 16))
(dni sha16-L-imm-r2r0 "sha.L #Imm-sh-12-s4,r2r0" ((machine 16))
     "sha.l #${Imm-sh-12-s4},r2r0"
     "sha.l #${Imm-sh-12-s4},r2r0"
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 #xA) Imm-sh-12-s4)
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 #xA) Imm-sh-12-s4)
     (sha-sem SI Imm-sh-12-s4 (reg h-r2r0))
     (sha-sem SI Imm-sh-12-s4 (reg h-r2r0))
     ())
     ())
(dni sha16-L-imm-r3r1 "sha.L #Imm-sh-12-s4,r3r1" ((machine 16))
(dni sha16-L-imm-r3r1 "sha.L #Imm-sh-12-s4,r3r1" ((machine 16))
     "sha.l #${Imm-sh-12-s4},r3r1"
     "sha.l #${Imm-sh-12-s4},r3r1"
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 #xB) Imm-sh-12-s4)
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 #xB) Imm-sh-12-s4)
     (sha-sem SI Imm-sh-12-s4 (reg h-r3r1))
     (sha-sem SI Imm-sh-12-s4 (reg h-r3r1))
     ())
     ())
; sha.L r1h,dst (m16 #4)
; sha.L r1h,dst (m16 #4)
(dni sha16-L-r1h-r2r0 "sha.L r1h,r2r0" ((machine 16))
(dni sha16-L-r1h-r2r0 "sha.L r1h,r2r0" ((machine 16))
     "sha.l r1h,r2r0"
     "sha.l r1h,r2r0"
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 2) (f-12-4 1))
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 2) (f-12-4 1))
     (sha-sem SI (reg h-r1h) (reg h-r2r0))
     (sha-sem SI (reg h-r1h) (reg h-r2r0))
     ())
     ())
(dni sha16-L-r1h-r3r1 "sha.L r1h,r3r1" ((machine 16))
(dni sha16-L-r1h-r3r1 "sha.L r1h,r3r1" ((machine 16))
     "sha.l r1h,r3r1"
     "sha.l r1h,r3r1"
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 3) (f-12-4 1))
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 3) (f-12-4 1))
     (sha-sem SI (reg h-r1h) (reg h-r3r1))
     (sha-sem SI (reg h-r1h) (reg h-r3r1))
     ())
     ())
; sha.L #imm8,dst (m32 #2)
; sha.L #imm8,dst (m32 #2)
(binary-arith32-imm-dst-defn QI SI .l 0 sha X #xA #x2 #x1 sha-sem)
(binary-arith32-imm-dst-defn QI SI .l 0 sha X #xA #x2 #x1 sha-sem)
; sha.L r1h,dst (m32 #4)
; sha.L r1h,dst (m32 #4)
(dni sha32.l-dst "sha.l r1h,dest" ((machine 32))
(dni sha32.l-dst "sha.l r1h,dest" ((machine 32))
     ("sha.l r1h,${dst32-16-Unprefixed-SI}")
     ("sha.l r1h,${dst32-16-Unprefixed-SI}")
     (+ (f-0-4 #xC) dst32-16-Unprefixed-SI (f-7-1 0) (f-10-2 1) (f-12-4 1))
     (+ (f-0-4 #xC) dst32-16-Unprefixed-SI (f-7-1 0) (f-10-2 1) (f-12-4 1))
     (shar1h-sem QI dst32-16-Unprefixed-SI)
     (shar1h-sem QI dst32-16-Unprefixed-SI)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; shanc - shift arithmetic non carry (m32)
; shanc - shift arithmetic non carry (m32)
;-------------------------------------------------------------
;-------------------------------------------------------------
; TODO check semantics
; TODO check semantics
; shanc.L #imm8,dst
; shanc.L #imm8,dst
(binary-arith32-imm-dst-defn QI SI .l 0 shanc X #xC #x2 #x1 sha-sem)
(binary-arith32-imm-dst-defn QI SI .l 0 shanc X #xC #x2 #x1 sha-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; shl - shift logical
; shl - shift logical
;-------------------------------------------------------------
;-------------------------------------------------------------
; TODO future: split this into .b and .w semantics
; TODO future: split this into .b and .w semantics
(define-pmacro (shl-sem mode src1 dst)
(define-pmacro (shl-sem mode src1 dst)
  (sequence ((mode result)(mode shift)(mode shmode))
  (sequence ((mode result)(mode shift)(mode shmode))
            (case DFLT src1
            (case DFLT src1
                  ((#x0) (set shift 1))
                  ((#x0) (set shift 1))
                  ((#x1) (set shift 2))
                  ((#x1) (set shift 2))
                  ((#x2) (set shift 3))
                  ((#x2) (set shift 3))
                  ((#x3) (set shift 4))
                  ((#x3) (set shift 4))
                  ((#x4) (set shift 5))
                  ((#x4) (set shift 5))
                  ((#x5) (set shift 6))
                  ((#x5) (set shift 6))
                  ((#x6) (set shift 7))
                  ((#x6) (set shift 7))
                  ((#x7) (set shift 8))
                  ((#x7) (set shift 8))
                  ((-8) (set shift -1))
                  ((-8) (set shift -1))
                  ((-7) (set shift -2))
                  ((-7) (set shift -2))
                  ((-6) (set shift -3))
                  ((-6) (set shift -3))
                  ((-5) (set shift -4))
                  ((-5) (set shift -4))
                  ((-4) (set shift -5))
                  ((-4) (set shift -5))
                  ((-3) (set shift -6))
                  ((-3) (set shift -6))
                  ((-2) (set shift -7))
                  ((-2) (set shift -7))
                  ((-1) (set shift -8))
                  ((-1) (set shift -8))
                  (else (set shift 0))
                  (else (set shift 0))
                  )
                  )
            (set shmode -1)
            (set shmode -1)
            (set shmode (srl shmode #x8))
            (set shmode (srl shmode #x8))
            (if (lt mode shift #x0) (set result (srl mode dst (mul shift -1))))
            (if (lt mode shift #x0) (set result (srl mode dst (mul shift -1))))
            (if (gt mode shift 0) (set result (sll mode dst shift)))
            (if (gt mode shift 0) (set result (sll mode dst shift)))
            (if (eq shmode #x0) ; QI
            (if (eq shmode #x0) ; QI
                (sequence
                (sequence
                  ((mode cbitamt))
                  ((mode cbitamt))
                  (if (lt mode shift #x0)
                  (if (lt mode shift #x0)
                      (set cbitamt (sub #x8 shift)); srl
                      (set cbitamt (sub #x8 shift)); srl
                      (set cbitamt (sub shift 1))) ; sll
                      (set cbitamt (sub shift 1))) ; sll
                  (set cbit (srl (and (sll dst cbitamt) #x80) #x7))
                  (set cbit (srl (and (sll dst cbitamt) #x80) #x7))
                  (set obit (ne (and dst #x80) (and result #x80)))
                  (set obit (ne (and dst #x80) (and result #x80)))
                  ))
                  ))
            (if (eq shmode #xff) ; HI
            (if (eq shmode #xff) ; HI
                (sequence
                (sequence
                  ((mode cbitamt))
                  ((mode cbitamt))
                  (if (lt mode shift #x0)
                  (if (lt mode shift #x0)
                      (set cbitamt (sub 16 shift)) ; srl
                      (set cbitamt (sub 16 shift)) ; srl
                      (set cbitamt (sub shift 1))) ; sll
                      (set cbitamt (sub shift 1))) ; sll
                  (set cbit (srl (and (sll dst cbitamt) #x8000) #xf))
                  (set cbit (srl (and (sll dst cbitamt) #x8000) #xf))
                  (set obit (ne (and dst #x8000) (and result #x8000)))
                  (set obit (ne (and dst #x8000) (and result #x8000)))
                  ))
                  ))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dst result))
            (set dst result))
  )
  )
(define-pmacro (shlr1h-sem mode dst)
(define-pmacro (shlr1h-sem mode dst)
  (sequence ((mode result)(mode shmode))
  (sequence ((mode result)(mode shmode))
            (set shmode -1)
            (set shmode -1)
            (set shmode (srl shmode #x8))
            (set shmode (srl shmode #x8))
            (if (lt mode (reg h-r1h) 0) (set result (srl mode dst (reg h-r1h))))
            (if (lt mode (reg h-r1h) 0) (set result (srl mode dst (reg h-r1h))))
            (if (gt mode (reg h-r1h) 0) (set result (sll mode dst (reg h-r1h))))
            (if (gt mode (reg h-r1h) 0) (set result (sll mode dst (reg h-r1h))))
            (if (eq shmode #x0) ; QI
            (if (eq shmode #x0) ; QI
                (sequence
                (sequence
                  ((mode cbitamt))
                  ((mode cbitamt))
                  (if (lt mode (reg h-r1h) #x0)
                  (if (lt mode (reg h-r1h) #x0)
                      (set cbitamt (sub #x8 (reg h-r1h))) ; srl
                      (set cbitamt (sub #x8 (reg h-r1h))) ; srl
                      (set cbitamt (sub (reg h-r1h) 1)))  ; sll
                      (set cbitamt (sub (reg h-r1h) 1)))  ; sll
                  (set cbit (srl (and (sll dst cbitamt) #x80) #x7))
                  (set cbit (srl (and (sll dst cbitamt) #x80) #x7))
                  (set obit (ne (and dst #x80) (and result #x80)))
                  (set obit (ne (and dst #x80) (and result #x80)))
                  ))
                  ))
            (if (eq shmode #xff) ; HI
            (if (eq shmode #xff) ; HI
                (sequence
                (sequence
                  ((mode cbitamt))
                  ((mode cbitamt))
                  (if (lt mode (reg h-r1h) #x0)
                  (if (lt mode (reg h-r1h) #x0)
                      (set cbitamt (sub 16 (reg h-r1h))) ; srl
                      (set cbitamt (sub 16 (reg h-r1h))) ; srl
                      (set cbitamt (sub (reg h-r1h) 1))) ; sll
                      (set cbitamt (sub (reg h-r1h) 1))) ; sll
                  (set cbit (srl (and (sll dst cbitamt) #x8000) #xf))
                  (set cbit (srl (and (sll dst cbitamt) #x8000) #xf))
                  (set obit (ne (and dst #x8000) (and result #x8000)))
                  (set obit (ne (and dst #x8000) (and result #x8000)))
                  ))
                  ))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dst result))
            (set dst result))
  )
  )
; shl.BW #imm4,dst (m16 #1 m32 #1)
; shl.BW #imm4,dst (m16 #1 m32 #1)
(binary-arith16-shimm4-dst-defn QI .b 0 0 shl (f-0-4 #xE) (f-4-3 4) shl-sem)
(binary-arith16-shimm4-dst-defn QI .b 0 0 shl (f-0-4 #xE) (f-4-3 4) shl-sem)
(binary-arith16-shimm4-dst-defn HI .w 0 1 shl (f-0-4 #xE) (f-4-3 4) shl-sem)
(binary-arith16-shimm4-dst-defn HI .w 0 1 shl (f-0-4 #xE) (f-4-3 4) shl-sem)
(binary-arith32-shimm4-dst-defn QI .b 0 0 shl #x7 #x0 shl-sem)
(binary-arith32-shimm4-dst-defn QI .b 0 0 shl #x7 #x0 shl-sem)
(binary-arith32-shimm4-dst-defn HI .w 0 1 shl #x7 #x0 shl-sem)
(binary-arith32-shimm4-dst-defn HI .w 0 1 shl #x7 #x0 shl-sem)
; shl.BW r1h,dst (m16 #2 m32 #3)
; shl.BW r1h,dst (m16 #2 m32 #3)
(dni shl16.b-dst "shl.b r1h,dest" ((machine 16))
(dni shl16.b-dst "shl.b r1h,dest" ((machine 16))
     ("shl.b r1h,${dst16-16-QI}")
     ("shl.b r1h,${dst16-16-QI}")
     (+ (f-0-4 7) (f-4-4 4) (f-8-4 #xE) dst16-16-QI)
     (+ (f-0-4 7) (f-4-4 4) (f-8-4 #xE) dst16-16-QI)
     (shlr1h-sem HI dst16-16-QI)
     (shlr1h-sem HI dst16-16-QI)
     ())
     ())
(dni shl16.w-dst "shl.w r1h,dest" ((machine 16))
(dni shl16.w-dst "shl.w r1h,dest" ((machine 16))
     ("shl.w r1h,${dst16-16-HI}")
     ("shl.w r1h,${dst16-16-HI}")
     (+ (f-0-4 7) (f-4-4 5) (f-8-4 #xE) dst16-16-HI)
     (+ (f-0-4 7) (f-4-4 5) (f-8-4 #xE) dst16-16-HI)
     (shlr1h-sem HI dst16-16-HI)
     (shlr1h-sem HI dst16-16-HI)
     ())
     ())
(dni shl32.b-dst "shl.b r1h,dest" ((machine 32))
(dni shl32.b-dst "shl.b r1h,dest" ((machine 32))
     ("shl.b r1h,${dst32-16-Unprefixed-QI}")
     ("shl.b r1h,${dst32-16-Unprefixed-QI}")
     (+ (f-0-4 #xA) dst32-16-Unprefixed-QI (f-7-1 0) (f-10-2 3) (f-12-4 #xE))
     (+ (f-0-4 #xA) dst32-16-Unprefixed-QI (f-7-1 0) (f-10-2 3) (f-12-4 #xE))
     (shlr1h-sem QI dst32-16-Unprefixed-QI)
     (shlr1h-sem QI dst32-16-Unprefixed-QI)
     ())
     ())
(dni shl32.w-dst "shl.w r1h,dest" ((machine 32))
(dni shl32.w-dst "shl.w r1h,dest" ((machine 32))
     ("shl.w r1h,${dst32-16-Unprefixed-HI}")
     ("shl.w r1h,${dst32-16-Unprefixed-HI}")
     (+ (f-0-4 #xA) dst32-16-Unprefixed-HI (f-7-1 1) (f-10-2 3) (f-12-4 #xE))
     (+ (f-0-4 #xA) dst32-16-Unprefixed-HI (f-7-1 1) (f-10-2 3) (f-12-4 #xE))
     (shlr1h-sem HI dst32-16-Unprefixed-HI)
     (shlr1h-sem HI dst32-16-Unprefixed-HI)
     ())
     ())
; shl.L #imm,dst (m16 #3)
; shl.L #imm,dst (m16 #3)
(dni shl16-L-imm-r2r0 "shl.L #Imm-sh-12-s4,r2r0" ((machine 16))
(dni shl16-L-imm-r2r0 "shl.L #Imm-sh-12-s4,r2r0" ((machine 16))
     "shl.l #${Imm-sh-12-s4},r2r0"
     "shl.l #${Imm-sh-12-s4},r2r0"
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 #x8) Imm-sh-12-s4)
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 #x8) Imm-sh-12-s4)
     (shl-sem SI Imm-sh-12-s4 (reg h-r2r0))
     (shl-sem SI Imm-sh-12-s4 (reg h-r2r0))
     ())
     ())
(dni shl16-L-imm-r3r1 "shl.L #Imm-sh-12-s4,r3r1" ((machine 16))
(dni shl16-L-imm-r3r1 "shl.L #Imm-sh-12-s4,r3r1" ((machine 16))
     "shl.l #${Imm-sh-12-s4},r3r1"
     "shl.l #${Imm-sh-12-s4},r3r1"
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 #x9) Imm-sh-12-s4)
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 #x9) Imm-sh-12-s4)
     (shl-sem SI Imm-sh-12-s4 (reg h-r3r1))
     (shl-sem SI Imm-sh-12-s4 (reg h-r3r1))
     ())
     ())
; shl.L r1h,dst (m16 #4)
; shl.L r1h,dst (m16 #4)
(dni shl16-L-r1h-r2r0 "shl.L r1h,r2r0" ((machine 16))
(dni shl16-L-r1h-r2r0 "shl.L r1h,r2r0" ((machine 16))
     "shl.l r1h,r2r0"
     "shl.l r1h,r2r0"
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 0) (f-12-4 1))
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 0) (f-12-4 1))
     (shl-sem SI (reg h-r1h) (reg h-r2r0))
     (shl-sem SI (reg h-r1h) (reg h-r2r0))
     ())
     ())
(dni shl16-L-r1h-r3r1 "shl.L r1h,r3r1" ((machine 16))
(dni shl16-L-r1h-r3r1 "shl.L r1h,r3r1" ((machine 16))
     "shl.l r1h,r3r1"
     "shl.l r1h,r3r1"
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 1) (f-12-4 1))
     (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 1) (f-12-4 1))
     (shl-sem SI (reg h-r1h) (reg h-r3r1))
     (shl-sem SI (reg h-r1h) (reg h-r3r1))
     ())
     ())
; shl.L #imm8,dst (m32 #2)
; shl.L #imm8,dst (m32 #2)
(binary-arith32-imm-dst-defn QI SI .l 0 shl X #x9 #x2 #x1 shl-sem)
(binary-arith32-imm-dst-defn QI SI .l 0 shl X #x9 #x2 #x1 shl-sem)
; shl.L r1h,dst (m32 #4)
; shl.L r1h,dst (m32 #4)
(dni shl32.l-dst "shl.l r1h,dest" ((machine 32))
(dni shl32.l-dst "shl.l r1h,dest" ((machine 32))
     ("shl.l r1h,${dst32-16-Unprefixed-SI}")
     ("shl.l r1h,${dst32-16-Unprefixed-SI}")
     (+ (f-0-4 #xC) dst32-16-Unprefixed-SI (f-7-1 0) (f-10-2 0) (f-12-4 1))
     (+ (f-0-4 #xC) dst32-16-Unprefixed-SI (f-7-1 0) (f-10-2 0) (f-12-4 1))
     (shlr1h-sem QI dst32-16-Unprefixed-SI)
     (shlr1h-sem QI dst32-16-Unprefixed-SI)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; shlnc - shift logical non carry
; shlnc - shift logical non carry
;-------------------------------------------------------------
;-------------------------------------------------------------
; TODO check semantics
; TODO check semantics
; shlnc.L #imm8,dst
; shlnc.L #imm8,dst
(binary-arith32-imm-dst-defn QI SI .l 0 shlnc X #x8 #x2 #x1 shl-sem)
(binary-arith32-imm-dst-defn QI SI .l 0 shlnc X #x8 #x2 #x1 shl-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; sin - string input (m32)
; sin - string input (m32)
;-------------------------------------------------------------
;-------------------------------------------------------------
; TODO semantics
; TODO semantics
(dni sin32.b "sin" ((machine 32))
(dni sin32.b "sin" ((machine 32))
     ("sin.b")
     ("sin.b")
     (+ (f-0-4 #xB) (f-4-4 2) (f-8-4 8) (f-12-4 3))
     (+ (f-0-4 #xB) (f-4-4 2) (f-8-4 8) (f-12-4 3))
     (c-call VOID "sin_QI_semantics")
     (c-call VOID "sin_QI_semantics")
     ())
     ())
(dni sin32.w "sin" ((machine 32))
(dni sin32.w "sin" ((machine 32))
     ("sin.w")
     ("sin.w")
     (+ (f-0-4 #xB) (f-4-4 2) (f-8-4 9) (f-12-4 3))
     (+ (f-0-4 #xB) (f-4-4 2) (f-8-4 9) (f-12-4 3))
     (c-call VOID "sin_HI_semantics")
     (c-call VOID "sin_HI_semantics")
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; smovb - string move backward
; smovb - string move backward
;-------------------------------------------------------------
;-------------------------------------------------------------
; TODO semantics
; TODO semantics
(dni smovb16.b "smovb.b" ((machine 16))
(dni smovb16.b "smovb.b" ((machine 16))
     ("smovb.b")
     ("smovb.b")
     (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 9))
     (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 9))
     (c-call VOID "smovb_QI_semantics")
     (c-call VOID "smovb_QI_semantics")
     ())
     ())
(dni smovb16.w "smovb.w" ((machine 16))
(dni smovb16.w "smovb.w" ((machine 16))
     ("smovb.w")
     ("smovb.w")
     (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 9))
     (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 9))
     (c-call VOID "smovb_HI_semantics")
     (c-call VOID "smovb_HI_semantics")
     ())
     ())
(dni smovb32.b "smovb.b" ((machine 32))
(dni smovb32.b "smovb.b" ((machine 32))
     ("smovb.b")
     ("smovb.b")
     (+ (f-0-4 #xB) (f-4-4 6) (f-8-4 8) (f-12-4 3))
     (+ (f-0-4 #xB) (f-4-4 6) (f-8-4 8) (f-12-4 3))
     (c-call VOID "smovb_QI_semantics")
     (c-call VOID "smovb_QI_semantics")
     ())
     ())
(dni smovb32.w "smovb.w" ((machine 32))
(dni smovb32.w "smovb.w" ((machine 32))
     ("smovb.w")
     ("smovb.w")
     (+ (f-0-4 #xB) (f-4-4 6) (f-8-4 9) (f-12-4 3))
     (+ (f-0-4 #xB) (f-4-4 6) (f-8-4 9) (f-12-4 3))
     (c-call VOID "smovb_HI_semantics")
     (c-call VOID "smovb_HI_semantics")
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; smovf - string move forward (m32)
; smovf - string move forward (m32)
;-------------------------------------------------------------
;-------------------------------------------------------------
; TODO semantics
; TODO semantics
(dni smovf16.b "smovf.b" ((machine 16))
(dni smovf16.b "smovf.b" ((machine 16))
     ("smovf.b")
     ("smovf.b")
     (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 8))
     (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 8))
     (c-call VOID "smovf_QI_semantics")
     (c-call VOID "smovf_QI_semantics")
     ())
     ())
(dni smovf16.w "smovf.w" ((machine 16))
(dni smovf16.w "smovf.w" ((machine 16))
     ("smovf.w")
     ("smovf.w")
     (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 8))
     (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 8))
     (c-call VOID "smovf_HI_semantics")
     (c-call VOID "smovf_HI_semantics")
     ())
     ())
(dni smovf32.b "smovf.b" ((machine 32))
(dni smovf32.b "smovf.b" ((machine 32))
     ("smovf.b")
     ("smovf.b")
     (+ (f-0-4 #xB) (f-4-4 0) (f-8-4 8)  (f-12-4 3))
     (+ (f-0-4 #xB) (f-4-4 0) (f-8-4 8)  (f-12-4 3))
     (c-call VOID "smovf_QI_semantics")
     (c-call VOID "smovf_QI_semantics")
     ())
     ())
(dni smovf32.w "smovf.w" ((machine 32))
(dni smovf32.w "smovf.w" ((machine 32))
     ("smovf.w")
     ("smovf.w")
     (+ (f-0-4 #xB) (f-4-4 0) (f-8-4 9)  (f-12-4 3))
     (+ (f-0-4 #xB) (f-4-4 0) (f-8-4 9)  (f-12-4 3))
     (c-call VOID "smovf_HI_semantics")
     (c-call VOID "smovf_HI_semantics")
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; smovu - string move unequal (m32)
; smovu - string move unequal (m32)
;-------------------------------------------------------------
;-------------------------------------------------------------
; TODO semantics
; TODO semantics
(dni smovu.b "smovu.b" ((machine 32))
(dni smovu.b "smovu.b" ((machine 32))
     ("smovu.b")
     ("smovu.b")
     (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 8)  (f-12-4 3))
     (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 8)  (f-12-4 3))
     (c-call VOID "smovu_QI_semantics")
     (c-call VOID "smovu_QI_semantics")
     ())
     ())
(dni smovu.w "smovu.w" ((machine 32))
(dni smovu.w "smovu.w" ((machine 32))
     ("smovu.w")
     ("smovu.w")
     (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 9)  (f-12-4 3))
     (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 9)  (f-12-4 3))
     (c-call VOID "smovu_HI_semantics")
     (c-call VOID "smovu_HI_semantics")
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; sout - string output (m32)
; sout - string output (m32)
;-------------------------------------------------------------
;-------------------------------------------------------------
; TODO semantics
; TODO semantics
(dni sout.b "sout.b" ((machine 32))
(dni sout.b "sout.b" ((machine 32))
     ("sout.b")
     ("sout.b")
     (+ (f-0-4 #xB) (f-4-4 4) (f-8-4 8) (f-12-4 3))
     (+ (f-0-4 #xB) (f-4-4 4) (f-8-4 8) (f-12-4 3))
     (c-call VOID "sout_QI_semantics")
     (c-call VOID "sout_QI_semantics")
     ())
     ())
(dni sout.w "sout" ((machine 32))
(dni sout.w "sout" ((machine 32))
     ("sout.w")
     ("sout.w")
     (+ (f-0-4 #xB) (f-4-4 4) (f-8-4 9) (f-12-4 3))
     (+ (f-0-4 #xB) (f-4-4 4) (f-8-4 9) (f-12-4 3))
     (c-call VOID "sout_HI_semantics")
     (c-call VOID "sout_HI_semantics")
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; sstr - string store
; sstr - string store
;-------------------------------------------------------------
;-------------------------------------------------------------
; TODO semantics
; TODO semantics
(dni sstr16.b "sstr.b" ((machine 16))
(dni sstr16.b "sstr.b" ((machine 16))
     ("sstr.b")
     ("sstr.b")
     (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 #xA))
     (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 #xA))
     (c-call VOID "sstr_QI_semantics")
     (c-call VOID "sstr_QI_semantics")
     ())
     ())
(dni sstr16.w "sstr.w" ((machine 16))
(dni sstr16.w "sstr.w" ((machine 16))
     ("sstr.w")
     ("sstr.w")
     (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 #xA))
     (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 #xA))
     (c-call VOID "sstr_HI_semantics")
     (c-call VOID "sstr_HI_semantics")
     ())
     ())
(dni sstr.b "sstr" ((machine 32))
(dni sstr.b "sstr" ((machine 32))
     ("sstr.b")
     ("sstr.b")
     (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 0) (f-12-4 3))
     (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 0) (f-12-4 3))
     (c-call VOID "sstr_QI_semantics")
     (c-call VOID "sstr_QI_semantics")
     ())
     ())
(dni sstr.w "sstr" ((machine 32))
(dni sstr.w "sstr" ((machine 32))
     ("sstr.w")
     ("sstr.w")
     (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 1) (f-12-4 3))
     (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 1) (f-12-4 3))
     (c-call VOID "sstr_HI_semantics")
     (c-call VOID "sstr_HI_semantics")
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; stnz - store on not zero
; stnz - store on not zero
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (stnz-sem mode src dst)
(define-pmacro (stnz-sem mode src dst)
  (sequence ()
  (sequence ()
            (if (ne zbit (const 1))
            (if (ne zbit (const 1))
                (set dst src)))
                (set dst src)))
)
)
; stnz #imm8,dst3 (m16)
; stnz #imm8,dst3 (m16)
(binary-arith16-b-S-imm8-dst3 stnz "" (f-0-4 #xD) (f-4-1 0) stnz-sem)
(binary-arith16-b-S-imm8-dst3 stnz "" (f-0-4 #xD) (f-4-1 0) stnz-sem)
; stnz.BW #imm,dst (m32)
; stnz.BW #imm,dst (m32)
(binary-arith32-imm-dst-defn QI QI .b 0 stnz X #x9 #x1 #xF stnz-sem)
(binary-arith32-imm-dst-defn QI QI .b 0 stnz X #x9 #x1 #xF stnz-sem)
(binary-arith32-imm-dst-defn HI HI .w 1 stnz X #x9 #x1 #xF stnz-sem)
(binary-arith32-imm-dst-defn HI HI .w 1 stnz X #x9 #x1 #xF stnz-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; stz - store on zero
; stz - store on zero
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (stz-sem mode src dst)
(define-pmacro (stz-sem mode src dst)
  (sequence ()
  (sequence ()
            (if (eq zbit (const 1))
            (if (eq zbit (const 1))
                (set dst src)))
                (set dst src)))
)
)
; stz #imm8,dst3 (m16)
; stz #imm8,dst3 (m16)
(binary-arith16-b-S-imm8-dst3 stz "" (f-0-4 #xC) (f-4-1 1) stz-sem)
(binary-arith16-b-S-imm8-dst3 stz "" (f-0-4 #xC) (f-4-1 1) stz-sem)
; stz.BW #imm,dst (m32)
; stz.BW #imm,dst (m32)
(binary-arith32-imm-dst-defn QI QI .b 0 stz X #x9 #x0 #xF stz-sem)
(binary-arith32-imm-dst-defn QI QI .b 0 stz X #x9 #x0 #xF stz-sem)
(binary-arith32-imm-dst-defn HI HI .w 1 stz X #x9 #x0 #xF stz-sem)
(binary-arith32-imm-dst-defn HI HI .w 1 stz X #x9 #x0 #xF stz-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; stzx - store on zero extention
; stzx - store on zero extention
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (stzx-sem mode src1 src2 dst)
(define-pmacro (stzx-sem mode src1 src2 dst)
  (sequence ()
  (sequence ()
            (if (eq zbit (const 1))
            (if (eq zbit (const 1))
                (set dst src1)
                (set dst src1)
                (set dst src2)))
                (set dst src2)))
  )
  )
; stzx #imm8,dst3 (m16)
; stzx #imm8,dst3 (m16)
(dni stzx16-imm8-imm8-r0h "stzx #Imm8,#Imm8,r0h" ((machine 16))
(dni stzx16-imm8-imm8-r0h "stzx #Imm8,#Imm8,r0h" ((machine 16))
     ("stzx #${Imm-8-QI},#${Imm-16-QI},r0h")
     ("stzx #${Imm-8-QI},#${Imm-16-QI},r0h")
     (+ (f-0-4 #xD) (f-4-4 #xB) Imm-8-QI Imm-16-QI)
     (+ (f-0-4 #xD) (f-4-4 #xB) Imm-8-QI Imm-16-QI)
     (stzx-sem QI Imm-8-QI Imm-16-QI (reg h-r0h))
     (stzx-sem QI Imm-8-QI Imm-16-QI (reg h-r0h))
     ())
     ())
(dni stzx16-imm8-imm8-r0l "stzx #Imm8,#Imm8,r0l" ((machine 16))
(dni stzx16-imm8-imm8-r0l "stzx #Imm8,#Imm8,r0l" ((machine 16))
     ("stzx #${Imm-8-QI},#${Imm-16-QI},r0l")
     ("stzx #${Imm-8-QI},#${Imm-16-QI},r0l")
     (+ (f-0-4 #xD) (f-4-4 #xC) Imm-8-QI Imm-16-QI)
     (+ (f-0-4 #xD) (f-4-4 #xC) Imm-8-QI Imm-16-QI)
     (stzx-sem QI Imm-8-QI Imm-16-QI (reg h-r0l))
     (stzx-sem QI Imm-8-QI Imm-16-QI (reg h-r0l))
     ())
     ())
(dni stzx16-imm8-imm8-dsp8sb "stzx #Imm8,#Imm8,dsp8[sb]" ((machine 16))
(dni stzx16-imm8-imm8-dsp8sb "stzx #Imm8,#Imm8,dsp8[sb]" ((machine 16))
     ("stzx #${Imm-8-QI},#${Imm-24-QI},${Dsp-16-u8}[sb]")
     ("stzx #${Imm-8-QI},#${Imm-24-QI},${Dsp-16-u8}[sb]")
     (+ (f-0-4 #xD) (f-4-4 #xD) Imm-8-QI Dsp-16-u8 Imm-24-QI)
     (+ (f-0-4 #xD) (f-4-4 #xD) Imm-8-QI Dsp-16-u8 Imm-24-QI)
     (stzx-sem QI Imm-8-QI Imm-16-QI (mem16 QI (add (reg h-sb) Dsp-24-u8)))
     (stzx-sem QI Imm-8-QI Imm-16-QI (mem16 QI (add (reg h-sb) Dsp-24-u8)))
     ())
     ())
(dni stzx16-imm8-imm8-dsp8fb "stzx #Imm8,#Imm8,dsp8[fb]" ((machine 16))
(dni stzx16-imm8-imm8-dsp8fb "stzx #Imm8,#Imm8,dsp8[fb]" ((machine 16))
     ("stzx #${Imm-8-QI},#${Imm-24-QI},${Dsp-16-s8}[fb]")
     ("stzx #${Imm-8-QI},#${Imm-24-QI},${Dsp-16-s8}[fb]")
     (+ (f-0-4 #xD) (f-4-4 #xE) Imm-8-QI Dsp-16-s8 Imm-24-QI)
     (+ (f-0-4 #xD) (f-4-4 #xE) Imm-8-QI Dsp-16-s8 Imm-24-QI)
     (stzx-sem QI Imm-8-QI Imm-24-QI (mem16 QI (add (reg h-fb) Dsp-16-s8)))
     (stzx-sem QI Imm-8-QI Imm-24-QI (mem16 QI (add (reg h-fb) Dsp-16-s8)))
     ())
     ())
(dni stzx16-imm8-imm8-abs16 "stzx #Imm8,#Imm8,abs16" ((machine 16))
(dni stzx16-imm8-imm8-abs16 "stzx #Imm8,#Imm8,abs16" ((machine 16))
     ("stzx #${Imm-8-QI},#${Imm-32-QI},${Dsp-16-u16}")
     ("stzx #${Imm-8-QI},#${Imm-32-QI},${Dsp-16-u16}")
     (+ (f-0-4 #xD) (f-4-4 #xF) Imm-8-QI Dsp-16-u16 Imm-32-QI)
     (+ (f-0-4 #xD) (f-4-4 #xF) Imm-8-QI Dsp-16-u16 Imm-32-QI)
     (stzx-sem QI Imm-8-QI Imm-32-QI (mem16 QI Dsp-16-u16))
     (stzx-sem QI Imm-8-QI Imm-32-QI (mem16 QI Dsp-16-u16))
     ())
     ())
; stzx.BW #imm,dst (m32)
; stzx.BW #imm,dst (m32)
(insn-imm1-imm2-dst-Unprefixed stzx #x9 #x3 #xF stzx-sem)
(insn-imm1-imm2-dst-Unprefixed stzx #x9 #x3 #xF stzx-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; subx - subtract extend (m32)
; subx - subtract extend (m32)
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (subx-sem mode src1 dst)
(define-pmacro (subx-sem mode src1 dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (sub mode dst (ext mode src1)))
            (set result (sub mode dst (ext mode src1)))
            (set obit (sub-oflag mode dst (ext mode src1) 0))
            (set obit (sub-oflag mode dst (ext mode src1) 0))
            (set cbit (sub-cflag mode dst (ext mode src1) 0))
            (set cbit (sub-cflag mode dst (ext mode src1) 0))
            (set dst result)
            (set dst result)
            (set-z-and-s result)))
            (set-z-and-s result)))
; subx #imm8,dst
; subx #imm8,dst
(binary-arith32-imm-dst-defn QI SI "" 0 subx G #x9 #x1 #x1 subx-sem)
(binary-arith32-imm-dst-defn QI SI "" 0 subx G #x9 #x1 #x1 subx-sem)
; subx src,dst
; subx src,dst
(binary-arith32-src-dst-defn QI SI "" 0 subx G #x1 #x0 subx-sem)
(binary-arith32-src-dst-defn QI SI "" 0 subx G #x1 #x0 subx-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; tst - test
; tst - test
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (tst-sem mode src1 dst)
(define-pmacro (tst-sem mode src1 dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (and mode dst src1))
            (set result (and mode dst src1))
            (set-z-and-s result))
            (set-z-and-s result))
)
)
; tst.BW #imm,dst (m16 #1 m32 #1)
; tst.BW #imm,dst (m16 #1 m32 #1)
(binary-arith-imm-dst tst G (f-0-4 7) (f-4-3 3) (f-8-4 0) #x9 #x3 #xE tst-sem)
(binary-arith-imm-dst tst G (f-0-4 7) (f-4-3 3) (f-8-4 0) #x9 #x3 #xE tst-sem)
; tst.BW src,dst (m16 #2 m32 #3)
; tst.BW src,dst (m16 #2 m32 #3)
(binary-arith16-src-dst-defn QI QI .b 0 tst X (f-0-4 #x8) (f-4-3 0) tst-sem)
(binary-arith16-src-dst-defn QI QI .b 0 tst X (f-0-4 #x8) (f-4-3 0) tst-sem)
(binary-arith16-src-dst-defn HI HI .w 1 tst X (f-0-4 #x8) (f-4-3 0) tst-sem)
(binary-arith16-src-dst-defn HI HI .w 1 tst X (f-0-4 #x8) (f-4-3 0) tst-sem)
(binary-arith32-src-dst-Prefixed QI QI .b 0 tst G #x1 #x9 tst-sem)
(binary-arith32-src-dst-Prefixed QI QI .b 0 tst G #x1 #x9 tst-sem)
(binary-arith32-src-dst-Prefixed HI HI .w 1 tst G #x1 #x9 tst-sem)
(binary-arith32-src-dst-Prefixed HI HI .w 1 tst G #x1 #x9 tst-sem)
; tst.BW:S #imm,dst2 (m32 #2)
; tst.BW:S #imm,dst2 (m32 #2)
(binary-arith32-s-imm-dst QI .b 0 tst #x0 #x6 tst-sem)
(binary-arith32-s-imm-dst QI .b 0 tst #x0 #x6 tst-sem)
(binary-arith32-s-imm-dst HI .w 1 tst #x0 #x6 tst-sem)
(binary-arith32-s-imm-dst HI .w 1 tst #x0 #x6 tst-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; und - undefined
; und - undefined
;-------------------------------------------------------------
;-------------------------------------------------------------
(dni und16 "und" ((machine 16))
(dni und16 "und" ((machine 16))
     ("und")
     ("und")
     (+ (f-0-4 #xF) (f-4-4 #xF))
     (+ (f-0-4 #xF) (f-4-4 #xF))
     (nop)
     (nop)
     ())
     ())
(dni und32 "und" ((machine 32))
(dni und32 "und" ((machine 32))
     ("und")
     ("und")
     (+ (f-0-4 #xF) (f-4-4 #xF))
     (+ (f-0-4 #xF) (f-4-4 #xF))
     (nop)
     (nop)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; wait
; wait
;-------------------------------------------------------------
;-------------------------------------------------------------
; ??? semantics
; ??? semantics
(dni wait16 "wait" ((machine 16))
(dni wait16 "wait" ((machine 16))
     ("wait")
     ("wait")
     (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xF) (f-12-4 3))
     (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xF) (f-12-4 3))
     (nop)
     (nop)
     ())
     ())
(dni wait "wait" ((machine 32))
(dni wait "wait" ((machine 32))
     ("wait")
     ("wait")
     (+ (f-0-4 #xB) (f-4-4 2) (f-8-4 0) (f-12-4 3))
     (+ (f-0-4 #xB) (f-4-4 2) (f-8-4 0) (f-12-4 3))
     (nop)
     (nop)
     ())
     ())
;-------------------------------------------------------------
;-------------------------------------------------------------
; xchg - exchange
; xchg - exchange
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (xchg-sem mode src dst)
(define-pmacro (xchg-sem mode src dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result src)
            (set result src)
            (set src dst)
            (set src dst)
            (set dst result))
            (set dst result))
  )
  )
(define-pmacro (xchg16-defn mode sz szc src srcreg)
(define-pmacro (xchg16-defn mode sz szc src srcreg)
  (dni (.sym xchg16 sz - srcreg)
  (dni (.sym xchg16 sz - srcreg)
       (.str "xchg" sz "-" srcreg ",dst16-16-" mode)
       (.str "xchg" sz "-" srcreg ",dst16-16-" mode)
       ((machine 16))
       ((machine 16))
       (.str "xchg." sz " " srcreg ",${dst16-16-" mode "}")
       (.str "xchg." sz " " srcreg ",${dst16-16-" mode "}")
       (+ (f-0-4 #x7) (f-4-3 #x5) (f-7-1 szc) (f-8-2 0) (f-10-2 src) (.sym dst16-16- mode))
       (+ (f-0-4 #x7) (f-4-3 #x5) (f-7-1 szc) (f-8-2 0) (f-10-2 src) (.sym dst16-16- mode))
       (xchg-sem mode (reg (.sym h- srcreg)) (.sym dst16-16- mode))
       (xchg-sem mode (reg (.sym h- srcreg)) (.sym dst16-16- mode))
       ())
       ())
)
)
(xchg16-defn QI b 0 0 r0l)
(xchg16-defn QI b 0 0 r0l)
(xchg16-defn QI b 0 1 r0h)
(xchg16-defn QI b 0 1 r0h)
(xchg16-defn QI b 0 2 r1l)
(xchg16-defn QI b 0 2 r1l)
(xchg16-defn QI b 0 3 r1h)
(xchg16-defn QI b 0 3 r1h)
(xchg16-defn HI w 1 0 r0)
(xchg16-defn HI w 1 0 r0)
(xchg16-defn HI w 1 1 r1)
(xchg16-defn HI w 1 1 r1)
(xchg16-defn HI w 1 2 r2)
(xchg16-defn HI w 1 2 r2)
(xchg16-defn HI w 1 3 r3)
(xchg16-defn HI w 1 3 r3)
(define-pmacro (xchg32-defn mode sz szc src srcreg)
(define-pmacro (xchg32-defn mode sz szc src srcreg)
  (dni (.sym xchg32 sz - srcreg)
  (dni (.sym xchg32 sz - srcreg)
       (.str "xchg" sz "-" srcreg ",dst32-16-Unprefixed-" mode)
       (.str "xchg" sz "-" srcreg ",dst32-16-Unprefixed-" mode)
       ((machine 32))
       ((machine 32))
       (.str "xchg." sz " " srcreg ",${dst32-16-Unprefixed-" mode "}")
       (.str "xchg." sz " " srcreg ",${dst32-16-Unprefixed-" mode "}")
       (+ (f-0-4 #xD) (.sym dst32-16-Unprefixed- mode) (f-7-1 szc) (f-10-2 0) (f-12-1 1) (f-13-3 src))
       (+ (f-0-4 #xD) (.sym dst32-16-Unprefixed- mode) (f-7-1 szc) (f-10-2 0) (f-12-1 1) (f-13-3 src))
       (xchg-sem mode (reg (.sym h- srcreg)) (.sym dst32-16-Unprefixed- mode))
       (xchg-sem mode (reg (.sym h- srcreg)) (.sym dst32-16-Unprefixed- mode))
       ())
       ())
)
)
(xchg32-defn QI b 0 0 r0l)
(xchg32-defn QI b 0 0 r0l)
(xchg32-defn QI b 0 1 r1l)
(xchg32-defn QI b 0 1 r1l)
(xchg32-defn QI b 0 2 a0)
(xchg32-defn QI b 0 2 a0)
(xchg32-defn QI b 0 3 a1)
(xchg32-defn QI b 0 3 a1)
(xchg32-defn QI b 0 4 r0h)
(xchg32-defn QI b 0 4 r0h)
(xchg32-defn QI b 0 5 r1h)
(xchg32-defn QI b 0 5 r1h)
(xchg32-defn HI w 1 0 r0)
(xchg32-defn HI w 1 0 r0)
(xchg32-defn HI w 1 1 r1)
(xchg32-defn HI w 1 1 r1)
(xchg32-defn HI w 1 2 a0)
(xchg32-defn HI w 1 2 a0)
(xchg32-defn HI w 1 3 a1)
(xchg32-defn HI w 1 3 a1)
(xchg32-defn HI w 1 4 r2)
(xchg32-defn HI w 1 4 r2)
(xchg32-defn HI w 1 5 r3)
(xchg32-defn HI w 1 5 r3)
;-------------------------------------------------------------
;-------------------------------------------------------------
; xor - exclusive or
; xor - exclusive or
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (xor-sem mode src1 dst)
(define-pmacro (xor-sem mode src1 dst)
  (sequence ((mode result))
  (sequence ((mode result))
            (set result (xor mode src1 dst))
            (set result (xor mode src1 dst))
            (set-z-and-s result)
            (set-z-and-s result)
            (set dst result))
            (set dst result))
)
)
; xor.BW #imm,dst (m16 #1 m32 #1)
; xor.BW #imm,dst (m16 #1 m32 #1)
(binary-arith-imm-dst xor G (f-0-4 7) (f-4-3 3) (f-8-4 1) #x9 #x0 #xE xor-sem)
(binary-arith-imm-dst xor G (f-0-4 7) (f-4-3 3) (f-8-4 1) #x9 #x0 #xE xor-sem)
; xor.BW src,dst (m16 #3 m32 #3)
; xor.BW src,dst (m16 #3 m32 #3)
(binary-arith-src-dst xor G (f-0-4 #x8) (f-4-3 4) #x1 #x9 xor-sem)
(binary-arith-src-dst xor G (f-0-4 #x8) (f-4-3 4) #x1 #x9 xor-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Widening
; Widening
;-------------------------------------------------------------
;-------------------------------------------------------------
(define-pmacro (exts-sem smode dmode src dst)
(define-pmacro (exts-sem smode dmode src dst)
  (set dst (ext dmode (trunc smode src)))
  (set dst (ext dmode (trunc smode src)))
)
)
(define-pmacro (extz-sem smode dmode src dst)
(define-pmacro (extz-sem smode dmode src dst)
  (set dst (zext dmode (trunc smode src)))
  (set dst (zext dmode (trunc smode src)))
)
)
; exts.b dst for m16c
; exts.b dst for m16c
(ext16-defn QI HI .b 0 exts (f-0-4 7) (f-4-3 6) (f-8-4 6) exts-sem)
(ext16-defn QI HI .b 0 exts (f-0-4 7) (f-4-3 6) (f-8-4 6) exts-sem)
; exts.w r0 for m16c
; exts.w r0 for m16c
(dni exts16.w-r0
(dni exts16.w-r0
     "exts.w r0"
     "exts.w r0"
     ((machine 16))
     ((machine 16))
     "exts.w r0"
     "exts.w r0"
     (+ (f-0-4 #x7) (f-4-4 #xC) (f-8-4 #xF) (f-12-4 3))
     (+ (f-0-4 #x7) (f-4-4 #xC) (f-8-4 #xF) (f-12-4 3))
     (exts-sem HI SI R0 R2R0)
     (exts-sem HI SI R0 R2R0)
     ())
     ())
; exts.size dst for m32c
; exts.size dst for m32c
(ext32-defn QI HI .b 0 exts (f-0-4 #xC) (f-10-2 1) (f-12-4 #xE) exts-sem)
(ext32-defn QI HI .b 0 exts (f-0-4 #xC) (f-10-2 1) (f-12-4 #xE) exts-sem)
(ext32-defn HI SI .w 1 exts (f-0-4 #xC) (f-10-2 1) (f-12-4 #xE) exts-sem)
(ext32-defn HI SI .w 1 exts (f-0-4 #xC) (f-10-2 1) (f-12-4 #xE) exts-sem)
; exts.b src,dst for m32c
; exts.b src,dst for m32c
(ext32-binary-defn exts .b #x1 #x7 exts-sem)
(ext32-binary-defn exts .b #x1 #x7 exts-sem)
; extz.b src,dst for m32c
; extz.b src,dst for m32c
(ext32-binary-defn extz "" #x1 #xB extz-sem)
(ext32-binary-defn extz "" #x1 #xB extz-sem)
;-------------------------------------------------------------
;-------------------------------------------------------------
; Indirect
; Indirect
;-------------------------------------------------------------
;-------------------------------------------------------------
; TODO semantics
; TODO semantics
(dni srcind "SRC-INDIRECT" ((machine 32))
(dni srcind "SRC-INDIRECT" ((machine 32))
     ("src-indirect")
     ("src-indirect")
     (+ (f-0-4 4) (f-4-4 1))
     (+ (f-0-4 4) (f-4-4 1))
     (set (reg h-src-indirect) 1)
     (set (reg h-src-indirect) 1)
     ())
     ())
(dni destind "DEST-INDIRECT" ((machine 32))
(dni destind "DEST-INDIRECT" ((machine 32))
     ("dest-indirect")
     ("dest-indirect")
     (+ (f-0-4 0) (f-4-4 9))
     (+ (f-0-4 0) (f-4-4 9))
     (set (reg h-dst-indirect) 1)
     (set (reg h-dst-indirect) 1)
     ())
     ())
(dni srcdestind "SRC-DEST-INDIRECT" ((machine 32))
(dni srcdestind "SRC-DEST-INDIRECT" ((machine 32))
     ("src-dest-indirect")
     ("src-dest-indirect")
     (+ (f-0-4 4) (f-4-4 9))
     (+ (f-0-4 4) (f-4-4 9))
     (sequence () (set (reg h-src-indirect) 1) (set (reg h-dst-indirect) 1))
     (sequence () (set (reg h-src-indirect) 1) (set (reg h-dst-indirect) 1))
     ())
     ())
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.