Home | History | Annotate | Line # | Download | only in cpu
m32c.cpu revision 1.1.1.1
      1 ; Renesas M32C CPU description.  -*- Scheme -*-
      2 ;
      3 ; Copyright 2005, 2006, 2007 Free Software Foundation, Inc.
      4 ;
      5 ; Contributed by Red Hat Inc; developed under contract from Renesas.
      6 ;
      7 ; This file is part of the GNU Binutils.
      8 ;
      9 ; This program is free software; you can redistribute it and/or modify
     10 ; it under the terms of the GNU General Public License as published by
     11 ; the Free Software Foundation; either version 3 of the License, or
     12 ; (at your option) any later version.
     13 ;
     14 ; This program is distributed in the hope that it will be useful,
     15 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
     16 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     17 ; GNU General Public License for more details.
     18 ;
     19 ; You should have received a copy of the GNU General Public License
     20 ; along with this program; if not, write to the Free Software
     21 ; Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     22 ; MA 02110-1301, USA.
     23 
     24 (include "simplify.inc")
     25 
     26 (define-arch
     27   (name m32c)
     28   (comment "Renesas M32C")
     29   (default-alignment forced)
     30   (insn-lsb0? #f)
     31   (machs m16c m32c)
     32   (isas m16c m32c)
     33 )
     34 
     35 (define-isa
     36   (name m16c)
     37  
     38   (default-insn-bitsize 32)
     39  
     40   ; Number of bytes of insn we can initially fetch.
     41   (base-insn-bitsize 32)
     42  
     43   ; Used in computing bit numbers.
     44   (default-insn-word-bitsize 32)
     45  
     46   (decode-assist (0 1 2 3 4 5 6 7)) ; Initial bitnumbers to decode insns by.
     47 
     48   ; fetches 1 insn at a time.
     49   (liw-insns 1)       
     50 
     51   ; executes 1 insn at a time.
     52   (parallel-insns 1)  
     53   )
     54 
     55 (define-isa
     56   (name m32c)
     57  
     58   (default-insn-bitsize 32)
     59  
     60   ; Number of bytes of insn we can initially fetch.
     61   (base-insn-bitsize 32)
     62  
     63   ; Used in computing bit numbers.
     64   (default-insn-word-bitsize 32)
     65  
     66   (decode-assist (0 1 2 3 4 5 6 7)) ; Initial bitnumbers to decode insns by.
     67 
     68   ; fetches 1 insn at a time.
     69   (liw-insns 1)       
     70 
     71   ; executes 1 insn at a time.
     72   (parallel-insns 1)  
     73   )
     74 
     75 (define-cpu
     76   ; cpu names must be distinct from the architecture name and machine names.
     77   ; The "b" suffix stands for "base" and is the convention.
     78   ; The "f" suffix stands for "family" and is the convention.
     79   (name m16cbf)
     80   (comment "Renesas M16C base family")
     81   (insn-endian big)
     82   (data-endian little)
     83   (word-bitsize 16)
     84 )
     85 
     86 (define-cpu
     87   ; cpu names must be distinct from the architecture name and machine names.
     88   ; The "b" suffix stands for "base" and is the convention.
     89   ; The "f" suffix stands for "family" and is the convention.
     90   (name m32cbf)
     91   (comment "Renesas M32C base family")
     92   (insn-endian big)
     93   (data-endian little)
     94   (word-bitsize 16)
     95 )
     96 
     97 (define-mach
     98   (name m16c)
     99   (comment "Generic M16C cpu")
    100   (cpu m32cbf)
    101 )
    102 
    103 (define-mach
    104   (name m32c)
    105   (comment "Generic M32C cpu")
    106   (cpu m32cbf)
    107 )
    108 
    109 ; Model descriptions.
    110 
    111 (define-model
    112   (name m16c)
    113   (comment "m16c") (attrs)
    114   (mach m16c)
    115 
    116   ; `state' is a list of variables for recording model state
    117   ; (state)
    118   (unit u-exec "Execution Unit" ()
    119 	1 1 ; issue done
    120 	() ; state
    121 	() ; inputs
    122 	() ; outputs
    123 	() ; profile action (default)
    124 	)
    125 )
    126 
    127 (define-model
    128   (name m32c)
    129   (comment "m32c") (attrs)
    130   (mach m32c)
    131 
    132   ; `state' is a list of variables for recording model state
    133   ; (state)
    134   (unit u-exec "Execution Unit" ()
    135 	1 1 ; issue done
    136 	() ; state
    137 	() ; inputs
    138 	() ; outputs
    139 	() ; profile action (default)
    140 	)
    141 )
    142 
    143 (define-attr
    144   (type enum)
    145   (name RL_TYPE)
    146   (values NONE JUMP 1ADDR 2ADDR)
    147   (default NONE)
    148   )
    149 
    150 ; Macros to simplify MACH attribute specification.
    151 
    152 (define-pmacro all-isas () (ISA m16c,m32c))
    153 (define-pmacro m16c-isa () (ISA m16c))
    154 (define-pmacro m32c-isa () (ISA m32c))
    155 
    156 (define-pmacro MACH16 (MACH m16c))
    157 (define-pmacro MACH32 (MACH m32c))
    158 
    159 (define-pmacro (machine size)
    160   (MACH (.sym m size c)) (ISA (.sym m size c)))
    161 
    162 (define-pmacro RL_JUMP  (RL_TYPE JUMP))
    163 (define-pmacro RL_1ADDR (RL_TYPE 1ADDR))
    164 (define-pmacro RL_2ADDR (RL_TYPE 2ADDR))
    165 
    166 
    168 ;=============================================================
    169 ; Fields
    170 ;-------------------------------------------------------------
    171 ; Main opcodes
    172 ;
    173 (dnf f-0-1  "opcode"                      (all-isas)   0 1)
    174 (dnf f-0-2  "opcode"                      (all-isas)   0 2)
    175 (dnf f-0-3  "opcode"                      (all-isas)   0 3)
    176 (dnf f-0-4  "opcode"                      (all-isas)   0 4)
    177 (dnf f-1-3  "opcode"                      (all-isas)   1 3)
    178 (dnf f-2-2  "opcode"                      (all-isas)   2 2)
    179 (dnf f-3-4  "opcode"                      (all-isas)   3 4)
    180 (dnf f-3-1  "opcode"                      (all-isas)   3 1)
    181 (dnf f-4-1  "opcode"                      (all-isas)   4 1)
    182 (dnf f-4-3  "opcode"                      (all-isas)   4 3)
    183 (dnf f-4-4  "opcode"                      (all-isas)   4 4)
    184 (dnf f-4-6  "opcode"                      (all-isas)   4 6)
    185 (dnf f-5-1  "opcode"                      (all-isas)   5 1)
    186 (dnf f-5-3  "opcode"                      (all-isas)   5 3)
    187 (dnf f-6-2  "opcode"                      (all-isas)   6 2)
    188 (dnf f-7-1  "opcode"                      (all-isas)   7 1)
    189 (dnf f-8-1  "opcode"                      (all-isas)   8 1)
    190 (dnf f-8-2  "opcode"                      (all-isas)   8 2)
    191 (dnf f-8-3  "opcode"                      (all-isas)   8 3)
    192 (dnf f-8-4  "opcode"                      (all-isas)   8 4)
    193 (dnf f-8-8  "opcode"                      (all-isas)   8 8)
    194 (dnf f-9-3  "opcode"                      (all-isas)   9 3)
    195 (dnf f-9-1  "opcode"                      (all-isas)   9 1)
    196 (dnf f-10-1 "opcode"                      (all-isas)  10 1)
    197 (dnf f-10-2 "opcode"                      (all-isas)  10 2)
    198 (dnf f-10-3 "opcode"                      (all-isas)  10 3)
    199 (dnf f-11-1 "opcode"                      (all-isas)  11 1)
    200 (dnf f-12-1 "opcode"                      (all-isas)  12 1)
    201 (dnf f-12-2 "opcode"                      (all-isas)  12 2)
    202 (dnf f-12-3 "opcode"                      (all-isas)  12 3)
    203 (dnf f-12-4 "opcode"                      (all-isas)  12 4)
    204 (dnf f-12-6 "opcode"                      (all-isas)  12 6)
    205 (dnf f-13-3 "opcode"                      (all-isas)  13 3)
    206 (dnf f-14-1 "opcode"                      (all-isas)  14 1)
    207 (dnf f-14-2 "opcode"                      (all-isas)  14 2)
    208 (dnf f-15-1 "opcode"                      (all-isas)  15 1)
    209 (dnf f-16-1 "opcode"                      (all-isas)  16 1)
    210 (dnf f-16-2 "opcode"                      (all-isas)  16 2)
    211 (dnf f-16-4 "opcode"                      (all-isas)  16 4)
    212 (dnf f-16-8 "opcode"                      (all-isas)  16 8)
    213 (dnf f-18-1 "opcode"                      (all-isas)  18 1)
    214 (dnf f-18-2 "opcode"                      (all-isas)  18 2)
    215 (dnf f-18-3 "opcode"                      (all-isas)  18 3)
    216 (dnf f-20-1 "opcode"                      (all-isas)  20 1)
    217 (dnf f-20-3 "opcode"                      (all-isas)  20 3)
    218 (dnf f-20-2 "opcode"                      (all-isas)  20 2)
    219 (dnf f-20-4 "opcode"                      (all-isas)  20 4)
    220 (dnf f-21-3 "opcode"                      (all-isas)  21 3)
    221 (dnf f-24-2 "opcode"                      (all-isas)  24 2)
    222 (dnf f-24-8 "opcode"                      (all-isas)  24 8)
    223 (dnf f-32-16 "opcode"                     (all-isas)  32 16)
    224 
    225 ;-------------------------------------------------------------
    226 ; Registers
    227 ;-------------------------------------------------------------
    228 
    229 (dnf f-src16-rn "source Rn for m16c" (MACH16 m16c-isa) 10 2)
    230 (dnf f-src16-an "source An for m16c" (MACH16 m16c-isa) 11 1)
    231 
    232 (dnf f-src32-an-unprefixed "destination An for m32c" (MACH32 m32c-isa) 11 1)
    233 (dnf f-src32-an-prefixed   "destination An for m32c" (MACH32 m32c-isa) 19 1)
    234 
    235 ; QI mode gr encoding for m32c is different than for m16c. The hardware
    236 ; is indexed using the m16c encoding, so perform the transformation here.
    237 ;  register  m16c    m32c
    238 ;  ----------------------
    239 ;   r0l      00'b    10'b
    240 ;   r0h      01'b    00'b
    241 ;   r1l      10'b    11'b
    242 ;   r1h      11'b    01'b
    243 (df  f-src32-rn-unprefixed-QI "source Rn QI for m32c" (MACH32 m32c-isa) 10 2 UINT
    244      ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert
    245      ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract
    246 )
    247 ; QI mode gr encoding for m32c is different than for m16c. The hardware
    248 ; is indexed using the m16c encoding, so perform the transformation here.
    249 ;  register  m16c    m32c
    250 ;  ----------------------
    251 ;   r0l      00'b    10'b
    252 ;   r0h      01'b    00'b
    253 ;   r1l      10'b    11'b
    254 ;   r1h      11'b    01'b
    255 (df  f-src32-rn-prefixed-QI "source Rn QI for m32c" (MACH32 m32c-isa) 18 2 UINT
    256      ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert
    257      ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract
    258 )
    259 ; HI mode gr encoding for m32c is different than for m16c. The hardware
    260 ; is indexed using the m16c encoding, so perform the transformation here.
    261 ;  register  m16c    m32c
    262 ;  ----------------------
    263 ;   r0       00'b    10'b
    264 ;   r1       01'b    11'b
    265 ;   r2       10'b    00'b
    266 ;   r3       11'b    01'b
    267 (df  f-src32-rn-unprefixed-HI "source Rn HI for m32c" (MACH32 m32c-isa) 10 2 UINT
    268      ((value pc) (mod USI (add value 2) 4)) ; insert
    269      ((value pc) (mod USI (add value 2) 4)) ; extract
    270 )
    271 
    272 ; HI mode gr encoding for m32c is different than for m16c. The hardware
    273 ; is indexed using the m16c encoding, so perform the transformation here.
    274 ;  register  m16c    m32c
    275 ;  ----------------------
    276 ;   r0       00'b    10'b
    277 ;   r1       01'b    11'b
    278 ;   r2       10'b    00'b
    279 ;   r3       11'b    01'b
    280 (df  f-src32-rn-prefixed-HI "source Rn HI for m32c" (MACH32 m32c-isa) 18 2 UINT
    281      ((value pc) (mod USI (add value 2) 4)) ; insert
    282      ((value pc) (mod USI (add value 2) 4)) ; extract
    283 )
    284 
    285 ; SI mode gr encoding for m32c is as follows:
    286 ;  register  encoding  index
    287 ;  -------------------------
    288 ;   r2r0       10'b     0
    289 ;   r3r1       11'b     1
    290 (df  f-src32-rn-unprefixed-SI "source Rn SI for m32c" (MACH32 m32c-isa) 10 2 UINT
    291      ((value pc) (add USI value 2)) ; insert
    292      ((value pc) (sub USI value 2)) ; extract
    293 )
    294 (df  f-src32-rn-prefixed-SI "source Rn SI for m32c" (MACH32 m32c-isa) 18 2 UINT
    295      ((value pc) (add USI value 2)) ; insert
    296      ((value pc) (sub USI value 2)) ; extract
    297 )
    298 
    299 (dnf f-dst32-rn-ext-unprefixed "destination Rn for m32c" (MACH32 m32c-isa) 9 1)
    300 
    301 (dnf f-dst16-rn      "destination Rn for m16c" (MACH16 m16c-isa) 14 2)
    302 (dnf f-dst16-rn-ext  "destination Rn for m16c" (MACH16 m16c-isa) 14 1)
    303 (dnf f-dst16-rn-QI-s "destination Rn for m16c" (MACH16 m16c-isa)  5 1)
    304 
    305 (dnf f-dst16-an   "destination An for m16c" (MACH16 m16c-isa) 15 1)
    306 (dnf f-dst16-an-s "destination An for m16c" (MACH16 m16c-isa)  4 1)
    307 
    308 (dnf f-dst32-an-unprefixed "destination An for m32c" (MACH32 m32c-isa)  9 1)
    309 (dnf f-dst32-an-prefixed   "destination An for m32c" (MACH32 m32c-isa) 17 1)
    310 
    311 ; QI mode gr encoding for m32c is different than for m16c. The hardware
    312 ; is indexed using the m16c encoding, so perform the transformation here.
    313 ;  register  m16c    m32c
    314 ;  ----------------------
    315 ;   r0l      00'b    10'b
    316 ;   r0h      01'b    00'b
    317 ;   r1l      10'b    11'b
    318 ;   r1h      11'b    01'b
    319 (df  f-dst32-rn-unprefixed-QI "destination Rn QI for m32c" (MACH32 m32c-isa) 8 2 UINT
    320      ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert
    321      ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract
    322 )
    323 (df  f-dst32-rn-prefixed-QI "destination Rn QI for m32c" (MACH32 m32c-isa) 16 2 UINT
    324      ((value pc) (or USI (and (sll (inv value) 1) 2) (and (srl value 1) 1))) ; insert
    325      ((value pc) (or USI (and (inv (srl value 1)) 1) (and (sll value 1) 2))) ; extract
    326 )
    327 ; HI mode gr encoding for m32c is different than for m16c. The hardware
    328 ; is indexed using the m16c encoding, so perform the transformation here.
    329 ;  register  m16c    m32c
    330 ;  ----------------------
    331 ;   r0       00'b    10'b
    332 ;   r1       01'b    11'b
    333 ;   r2       10'b    00'b
    334 ;   r3       11'b    01'b
    335 (df  f-dst32-rn-unprefixed-HI "destination Rn HI for m32c" (MACH32 m32c-isa) 8 2 UINT
    336      ((value pc) (mod USI (add value 2) 4)) ; insert
    337      ((value pc) (mod USI (add value 2) 4)) ; extract
    338 )
    339 (df  f-dst32-rn-prefixed-HI "destination Rn HI for m32c" (MACH32 m32c-isa) 16 2 UINT
    340      ((value pc) (mod USI (add value 2) 4)) ; insert
    341      ((value pc) (mod USI (add value 2) 4)) ; extract
    342 )
    343 ; SI mode gr encoding for m32c is as follows:
    344 ;  register  encoding  index
    345 ;  -------------------------
    346 ;   r2r0       10'b     0
    347 ;   r3r1       11'b     1
    348 (df  f-dst32-rn-unprefixed-SI "destination Rn SI for m32c" (MACH32 m32c-isa) 8 2 UINT
    349      ((value pc) (add USI value 2)) ; insert
    350      ((value pc) (sub USI value 2)) ; extract
    351 )
    352 (df  f-dst32-rn-prefixed-SI "destination Rn SI for m32c" (MACH32 m32c-isa) 16 2 UINT
    353      ((value pc) (add USI value 2)) ; insert
    354      ((value pc) (sub USI value 2)) ; extract
    355 )
    356 
    357 (dnf f-dst16-1-S "destination R0[hl] for m16c" (MACH16 m16c-isa) 5 1)
    358 
    359 ;-------------------------------------------------------------
    360 ; Immediates embedded in the base insn
    361 ;-------------------------------------------------------------
    362 
    363 (df f-imm-8-s4   "4  bit   signed" (all-isas)  8  4  INT #f #f)
    364 (df f-imm-12-s4  "4  bit   signed" (all-isas) 12  4  INT #f #f)
    365 (df f-imm-13-u3  "3  bit unsigned" (all-isas) 13  3 UINT #f #f)
    366 (df f-imm-20-s4  "4  bit   signed" (all-isas) 20  4  INT #f #f)
    367 
    368 (df  f-imm1-S "1 bit immediate for short format binary insns" (MACH32 m32c-isa) 2 1 UINT
    369      ((value pc) (sub USI value 1)) ; insert
    370      ((value pc) (add USI value 1)) ; extract
    371 )
    372 
    373 (dnmf f-imm3-S "3 bit unsigned for short format insns" (all-isas) UINT
    374       (f-2-2 f-7-1)
    375       (sequence () ; insert
    376 		(set (ifield f-7-1) (and (sub (ifield f-imm3-S) 1) 1))
    377 		(set (ifield f-2-2) (and (srl (sub (ifield f-imm3-S) 1) 1) #x3))
    378 		)
    379       (sequence () ; extract
    380 		(set (ifield f-imm3-S) (add (or (sll (ifield f-2-2) 1)
    381 						(ifield f-7-1))
    382 					    1))
    383 		)
    384 )
    385 
    386 ;-------------------------------------------------------------
    387 ; Immediates and displacements beyond the base insn
    388 ;-------------------------------------------------------------
    389 
    390 (df f-dsp-8-u6   "6  bit unsigned" (all-isas)  8  6 UINT #f #f)
    391 (df f-dsp-8-u8   "8  bit unsigned" (all-isas)  8  8 UINT #f #f)
    392 (df f-dsp-8-s8   "8  bit   signed" (all-isas)  8  8  INT #f #f)
    393 (df f-dsp-10-u6  "6  bit unsigned" (all-isas) 10  6 UINT #f #f)
    394 (df f-dsp-16-u8  "8  bit unsigned" (all-isas) 16  8 UINT #f #f)
    395 (df f-dsp-16-s8  "8  bit   signed" (all-isas) 16  8  INT #f #f)
    396 (df f-dsp-24-u8  "8  bit unsigned" (all-isas) 24  8 UINT #f #f)
    397 (df f-dsp-24-s8  "8  bit   signed" (all-isas) 24  8  INT #f #f)
    398 (df f-dsp-32-u8  "8  bit unsigned" (all-isas) 32  8 UINT #f #f)
    399 (df f-dsp-32-s8  "8  bit   signed" (all-isas) 32  8  INT #f #f)
    400 (df f-dsp-40-u8  "8  bit unsigned" (all-isas) 40  8 UINT #f #f)
    401 (df f-dsp-40-s8  "8  bit   signed" (all-isas) 40  8  INT #f #f)
    402 (df f-dsp-48-u8  "8  bit unsigned" (all-isas) 48  8 UINT #f #f)
    403 (df f-dsp-48-s8  "8  bit   signed" (all-isas) 48  8  INT #f #f)
    404 (df f-dsp-56-u8  "8  bit unsigned" (all-isas) 56  8 UINT #f #f)
    405 (df f-dsp-56-s8  "8  bit   signed" (all-isas) 56  8  INT #f #f)
    406 (df f-dsp-64-u8  "8  bit unsigned" (all-isas) 64  8 UINT #f #f)
    407 (df f-dsp-64-s8  "8  bit   signed" (all-isas) 64  8  INT #f #f)
    408 
    409 ; Insn opcode endianness is big, but the immediate fields are stored
    410 ; in little endian. Handle this here at the field level for all immediate
    411 ; fields longer that 1 byte.
    412 ;
    413 ; CGEN can't handle a field which spans a 32 bit word boundary, so
    414 ; handle those as multi ifields.
    415 ;
    416 ; Take care in expressions using 'srl' or 'sll' as part of some larger
    417 ; expression meant to yield sign-extended values.  CGEN translates
    418 ; uses of those operators into C expressions whose type is 'unsigned
    419 ; int', which tends to make the whole expression 'unsigned int'.
    420 ; Expressions like (set (ifield foo) X), however, just take X and
    421 ; store it in some member of 'struct cgen_fields', all of whose
    422 ; members are 'long'.  On machines where 'long' is larger than
    423 ; 'unsigned int', assigning a "sign-extended" unsigned int to a long
    424 ; just produces a very large positive value.  insert_normal will
    425 ; range-check the field's value and produce odd error messages like
    426 ; this:
    427 ;
    428 ; Error: operand out of range (4160684031 not between -2147483648 and 2147483647) `add.l #-265,-270[fb]'
    429 ;
    430 ; Annoyingly, the code will work fine on machines where 'long' and
    431 ; 'unsigned int' are the same size: the assignment will produce a
    432 ; negative number.
    433 ;
    434 ; Just tell yourself over and over: overflow detection is expensive,
    435 ; and you're glad C doesn't do it, because it never happens in real
    436 ; life.
    437 
    438 (df f-dsp-8-u16 "16 bit unsigned" (all-isas) 8 16 UINT
    439      ((value pc) (or UHI
    440 		     (and (srl value 8) #x00ff)
    441 		     (and (sll value 8) #xff00))) ; insert
    442      ((value pc) (or UHI
    443 		     (and UHI (srl UHI value 8) #x00ff)
    444 		     (and UHI (sll UHI value 8) #xff00))) ; extract
    445 )
    446 
    447 (df f-dsp-8-s16 "8 bit   signed" (all-isas) 8 16 INT
    448      ((value pc) (ext INT 
    449 		      (trunc HI
    450 			     (or (and (srl value 8) #x00ff)
    451 				 (and (sll value 8) #xff00)))))	; insert
    452      ((value pc) (ext INT
    453 		      (trunc HI
    454 			     (or (and (srl value 8) #x00ff)
    455 				 (and (sll value 8) #xff00)))))	; extract
    456 )
    457 
    458 (df f-dsp-16-u16 "16 bit unsigned" (all-isas) 16 16 UINT
    459      ((value pc) (or UHI
    460 		     (and (srl value 8) #x00ff)
    461 		     (and (sll value 8) #xff00))) ; insert
    462      ((value pc) (or UHI
    463 		     (and UHI (srl UHI value 8) #x00ff)
    464 		     (and UHI (sll UHI value 8) #xff00))) ; extract
    465 )
    466 
    467 (df f-dsp-16-s16 "16 bit   signed" (all-isas) 16 16 INT
    468      ((value pc) (ext INT 
    469 		      (trunc HI
    470 			     (or (and (srl value 8) #x00ff)
    471 				 (and (sll value 8) #xff00))))) ; insert
    472      ((value pc) (ext INT 
    473 		      (trunc HI
    474 			     (or (and (srl value 8) #x00ff)
    475 				 (and (sll value 8) #xff00))))) ; extract
    476 )
    477 
    478 (dnmf f-dsp-24-u16 "16 bit unsigned" (all-isas) UINT
    479       (f-dsp-24-u8 f-dsp-32-u8)
    480       (sequence () ; insert
    481 		(set (ifield f-dsp-24-u8) (and (ifield f-dsp-24-u16) #xff))
    482 		(set (ifield f-dsp-32-u8) (and (srl (ifield f-dsp-24-u16) 8) #xff))
    483 		)
    484       (sequence () ; extract
    485 		(set (ifield f-dsp-24-u16) (or (sll (ifield f-dsp-32-u8) 8)
    486 					       (ifield f-dsp-24-u8)))
    487 		)
    488 )
    489 
    490 (dnmf f-dsp-24-s16 "16 bit signed" (all-isas) INT
    491       (f-dsp-24-u8 f-dsp-32-u8)
    492       (sequence () ; insert
    493 		(set (ifield f-dsp-24-u8) 
    494 		     (and (ifield f-dsp-24-s16) #xff))
    495 		(set (ifield f-dsp-32-u8) 
    496 		     (and (srl (ifield f-dsp-24-s16) 8) #xff))
    497 		)
    498       (sequence () ; extract
    499 		(set (ifield f-dsp-24-s16)
    500 		     (ext INT
    501 			  (trunc HI (or (sll (ifield f-dsp-32-u8) 8)
    502 					(ifield f-dsp-24-u8)))))
    503 		)
    504 )
    505 
    506 (df f-dsp-32-u16 "16 bit unsigned" (all-isas) 32 16 UINT
    507      ((value pc) (or UHI
    508 		     (and (srl value 8) #x00ff)
    509 		     (and (sll value 8) #xff00))) ; insert
    510      ((value pc) (or UHI
    511 		     (and UHI (srl UHI value 8) #x00ff)
    512 		     (and UHI (sll UHI value 8) #xff00))) ; extract
    513 )
    514 
    515 (df f-dsp-32-s16 "16 bit   signed" (all-isas) 32 16 INT
    516      ((value pc) (ext INT 
    517 		      (trunc HI
    518 			     (or (and (srl value 8) #x00ff)
    519 				 (and (sll value 8) #xff00))))) ; insert
    520      ((value pc) (ext INT 
    521 		      (trunc HI
    522 			     (or (and (srl value 8) #x00ff)
    523 				 (and (sll value 8) #xff00)))))	; extract
    524 )
    525 
    526 (df f-dsp-40-u16 "16 bit unsigned" (all-isas) 40 16 UINT
    527      ((value pc) (or UHI
    528 		     (and (srl value 8) #x00ff)
    529 		     (and (sll value 8) #xff00))) ; insert
    530      ((value pc) (or UHI
    531 		     (and UHI (srl UHI value 8) #x00ff)
    532 		     (and UHI (sll UHI value 8) #xff00))) ; extract
    533 )
    534 
    535 (df f-dsp-40-s16 "16 bit   signed" (all-isas) 40 16 INT
    536      ((value pc) (ext INT 
    537 		      (trunc HI
    538 			     (or (and (srl value 8) #x00ff)
    539 				 (and (sll value 8) #xff00))))) ; insert
    540      ((value pc) (ext INT 
    541 		      (trunc HI
    542 			     (or (and (srl value 8) #x00ff)
    543 				 (and (sll value 8) #xff00))))) ; extract
    544 )
    545 
    546 (df f-dsp-48-u16 "16 bit unsigned" (all-isas) 48 16 UINT
    547      ((value pc) (or UHI
    548 		     (and (srl value 8) #x00ff)
    549 		     (and (sll value 8) #xff00))) ; insert
    550      ((value pc) (or UHI
    551 		     (and UHI (srl UHI value 8) #x00ff)
    552 		     (and UHI (sll UHI value 8) #xff00))) ; extract
    553 )
    554 
    555 (df f-dsp-48-s16 "16 bit   signed" (all-isas) 48 16 INT
    556      ((value pc) (ext INT 
    557 		      (trunc HI
    558 			     (or (and (srl value 8) #x00ff)
    559 				 (and (sll value 8) #xff00))))) ; insert
    560      ((value pc) (ext INT 
    561 		      (trunc HI
    562 			     (or (and (srl value 8) #x00ff)
    563 				 (and (sll value 8) #xff00))))) ; extract
    564 )
    565 
    566 (df f-dsp-64-u16 "16 bit unsigned" (all-isas) 64 16 UINT
    567      ((value pc) (or UHI
    568 		     (and (srl value 8) #x00ff)
    569 		     (and (sll value 8) #xff00))) ; insert
    570      ((value pc) (or UHI
    571 		     (and UHI (srl UHI value 8) #x00ff)
    572 		     (and UHI (sll UHI value 8) #xff00))) ; extract
    573 )
    574 (df  f-dsp-8-s24 "24 bit signed" (all-isas) 8 24 INT
    575      ((value pc) (or SI
    576 		     (or (srl value 16) (and value #xff00))
    577 		     (sll (ext INT (trunc QI (and value #xff))) 16)))
    578      ((value pc) (or SI
    579 		     (or (srl value 16) (and value #xff00))
    580 		     (sll (ext INT (trunc QI (and value #xff))) 16)))
    581  )
    582 
    583 (df  f-dsp-8-u24 "24 bit unsigned" (all-isas) 8 24 UINT
    584      ((value pc) (or SI
    585 		     (or (srl value 16) (and value #xff00))
    586 		     (sll (and value #xff) 16)))
    587      ((value pc) (or SI
    588 		     (or (srl value 16) (and value #xff00))
    589 		     (sll (and value #xff) 16)))
    590  )
    591 
    592 (dnmf f-dsp-16-u24 "24 bit unsigned" (all-isas) UINT
    593       (f-dsp-16-u16 f-dsp-32-u8)
    594       (sequence () ; insert
    595 		(set (ifield f-dsp-16-u16) (and (ifield f-dsp-16-u24) #xffff))
    596 		(set (ifield f-dsp-32-u8) (and (srl (ifield f-dsp-16-u24) 16) #xff))
    597 		)
    598       (sequence () ; extract
    599 		(set (ifield f-dsp-16-u24) (or (sll (ifield f-dsp-32-u8) 16)
    600 					       (ifield f-dsp-16-u16)))
    601 		)
    602 )
    603 
    604 (dnmf f-dsp-24-u24 "24 bit unsigned" (all-isas) UINT
    605       (f-dsp-24-u8 f-dsp-32-u16)
    606       (sequence () ; insert
    607 		(set (ifield f-dsp-24-u8) (and (ifield f-dsp-24-u24) #xff))
    608 		(set (ifield f-dsp-32-u16) (and (srl (ifield f-dsp-24-u24) 8) #xffff))
    609 		)
    610       (sequence () ; extract
    611 		(set (ifield f-dsp-24-u24) (or (sll (ifield f-dsp-32-u16) 8)
    612 					       (ifield f-dsp-24-u8)))
    613 		)
    614 )
    615 
    616 (df f-dsp-32-u24 "24 bit unsigned" (all-isas) 32 24 UINT
    617      ((value pc) (or USI
    618 		     (or USI
    619 			 (and (srl value 16) #x0000ff)
    620 			 (and value          #x00ff00))
    621 		     (and (sll value 16) #xff0000))) ; insert
    622      ((value pc) (or USI
    623 		     (or USI
    624 			 (and USI (srl UHI value 16) #x0000ff)
    625 			 (and USI value              #x00ff00))
    626 		     (and USI (sll UHI value 16) #xff0000))) ; extract
    627 )
    628 
    629 (df f-dsp-40-u20 "20 bit unsigned" (all-isas) 40 20 UINT
    630      ((value pc) (or USI
    631 		     (or USI
    632 			 (and (srl value 16) #x0000ff)
    633 			 (and value          #x00ff00))
    634 		     (and (sll value 16) #x0f0000))) ; insert
    635      ((value pc) (or USI
    636 		     (or USI
    637 			 (and USI (srl UHI value 16) #x0000ff)
    638 			 (and USI value              #x00ff00))
    639 		     (and USI (sll UHI value 16) #x0f0000))) ; extract
    640 )
    641 (df f-dsp-40-u24 "24 bit unsigned" (all-isas) 40 24 UINT
    642      ((value pc) (or USI
    643 		     (or USI
    644 			 (and (srl value 16) #x0000ff)
    645 			 (and value          #x00ff00))
    646 		     (and (sll value 16) #xff0000))) ; insert
    647      ((value pc) (or USI
    648 		     (or USI
    649 			 (and USI (srl UHI value 16) #x0000ff)
    650 			 (and USI value              #x00ff00))
    651 		     (and USI (sll UHI value 16) #xff0000))) ; extract
    652 )
    653 
    654 (dnmf f-dsp-40-s32 "32 bit signed" (all-isas) INT
    655       (f-dsp-40-u24 f-dsp-64-u8)
    656       (sequence () ; insert
    657 		(set (ifield f-dsp-64-u8) (and (srl (ifield f-dsp-40-s32) 24) #xff))
    658 		(set (ifield f-dsp-40-u24) (and (ifield f-dsp-40-s32) #xffffff)) 
    659 		)
    660       (sequence () ; extract
    661 		(set (ifield f-dsp-40-s32) (or (and (ifield f-dsp-40-u24) #xffffff)
    662 					       (and (sll (ifield f-dsp-64-u8) 24) #xff000000)))
    663 		)
    664 )
    665 
    666 (dnmf f-dsp-48-u20 "20 bit unsigned" (all-isas) UINT
    667       (f-dsp-48-u16 f-dsp-64-u8)
    668       (sequence () ; insert
    669 		(set (ifield f-dsp-64-u8) (and (srl (ifield f-dsp-48-u20) 16) #x0f))
    670 		(set (ifield f-dsp-48-u16) (and (ifield f-dsp-48-u20) #xffff)) 
    671 		)
    672       (sequence () ; extract
    673 		(set (ifield f-dsp-48-u20) (or (and (ifield f-dsp-48-u16) #xffff)
    674 					       (and (sll (ifield f-dsp-64-u8) 16) #x0f0000)))
    675 		)
    676 )
    677 (dnmf f-dsp-48-u24 "24 bit unsigned" (all-isas) UINT
    678       (f-dsp-48-u16 f-dsp-64-u8)
    679       (sequence () ; insert
    680 		(set (ifield f-dsp-64-u8) (and (srl (ifield f-dsp-48-u24) 16) #xff))
    681 		(set (ifield f-dsp-48-u16) (and (ifield f-dsp-48-u24) #xffff)) 
    682 		)
    683       (sequence () ; extract
    684 		(set (ifield f-dsp-48-u24) (or (and (ifield f-dsp-48-u16) #xffff)
    685 					       (and (sll (ifield f-dsp-64-u8) 16) #xff0000)))
    686 		)
    687 )
    688 
    689 (dnmf f-dsp-16-s32 "32 bit signed" (all-isas) INT
    690       (f-dsp-16-u16 f-dsp-32-u16)
    691       (sequence () ; insert
    692 		(set (ifield f-dsp-32-u16) (and (srl (ifield f-dsp-16-s32) 16) #xffff))
    693 		(set (ifield f-dsp-16-u16) (and (ifield f-dsp-16-s32) #xffff)) 
    694 		)
    695       (sequence () ; extract
    696 		(set (ifield f-dsp-16-s32) (or (and (ifield f-dsp-16-u16) #xffff)
    697 					       (and (sll (ifield f-dsp-32-u16) 16) #xffff0000)))
    698 		)
    699 )
    700 
    701 (dnmf f-dsp-24-s32 "32 bit signed" (all-isas) INT
    702       (f-dsp-24-u8 f-dsp-32-u24)
    703       (sequence () ; insert
    704 		(set (ifield f-dsp-32-u24) (and (srl (ifield f-dsp-24-s32) 8) #xffffff))
    705 		(set (ifield f-dsp-24-u8) (and (ifield f-dsp-24-s32) #xff)) 
    706 		)
    707       (sequence () ; extract
    708 		(set (ifield f-dsp-24-s32) (or (and (ifield f-dsp-24-u8) #xff)
    709 					       (and (sll (ifield f-dsp-32-u24) 8) #xffffff00)))
    710 		)
    711 )
    712 
    713 (df f-dsp-32-s32 "32 bit   signed" (all-isas) 32 32 INT
    714      ((value pc) 
    715 
    716       ;; insert
    717       (ext INT
    718 	   (or SI
    719 	       (or SI
    720 		   (and (srl value 24) #x000000ff)
    721 		   (and (srl value 8)  #x0000ff00))
    722 	       (or SI
    723 		   (and (sll value 8)  #x00ff0000)
    724 		   (and (sll value 24) #xff000000)))))
    725 
    726      ;; extract
    727      ((value pc)
    728       (ext INT
    729 	   (or SI
    730 	       (or SI
    731 		   (and (srl value 24) #x000000ff)
    732 		   (and (srl value 8)  #x0000ff00))
    733 	       (or SI
    734 		   (and (sll value 8)  #x00ff0000)
    735 		   (and (sll value 24) #xff000000)))))
    736 )
    737 
    738 (dnmf f-dsp-48-u32 "32 bit unsigned" (all-isas) UINT
    739       (f-dsp-48-u16 f-dsp-64-u16)
    740       (sequence () ; insert
    741 		(set (ifield f-dsp-64-u16) (and (srl (ifield f-dsp-48-u32) 16) #xffff))
    742 		(set (ifield f-dsp-48-u16) (and (ifield f-dsp-48-u32) #xffff)) 
    743 		)
    744       (sequence () ; extract
    745 		(set (ifield f-dsp-48-u32) (or (and (ifield f-dsp-48-u16) #xffff)
    746 					       (and (sll (ifield f-dsp-64-u16) 16) #xffff0000)))
    747 		)
    748 )
    749 
    750 (dnmf f-dsp-48-s32 "32 bit signed" (all-isas) INT
    751       (f-dsp-48-u16 f-dsp-64-u16)
    752       (sequence () ; insert
    753 		(set (ifield f-dsp-64-u16) (and (srl (ifield f-dsp-48-s32) 16) #xffff))
    754 		(set (ifield f-dsp-48-u16) (and (ifield f-dsp-48-s32) #xffff)) 
    755 		)
    756       (sequence () ; extract
    757 		(set (ifield f-dsp-48-s32) (or (and (ifield f-dsp-48-u16) #xffff)
    758 					       (and (sll (ifield f-dsp-64-u16) 16) #xffff0000)))
    759 		)
    760 )
    761 
    762 (dnmf f-dsp-56-s16 "16 bit signed" (all-isas) INT
    763       (f-dsp-56-u8 f-dsp-64-u8)
    764       (sequence () ; insert
    765 		(set (ifield f-dsp-56-u8)
    766 		     (and (ifield f-dsp-56-s16) #xff))
    767 		(set (ifield f-dsp-64-u8)
    768 		     (and (srl (ifield f-dsp-56-s16) 8) #xff))
    769 		)
    770       (sequence () ; extract
    771 		(set (ifield f-dsp-56-s16)
    772 		     (ext INT
    773 			  (trunc HI (or (sll (ifield f-dsp-64-u8) 8)
    774 					(ifield f-dsp-56-u8)))))
    775 		)
    776 )
    777 
    778 (df f-dsp-64-s16 " 16 bit signed" (all-isas) 64 16 INT
    779      ((value pc) (ext INT 
    780 		      (trunc HI
    781 			     (or (and (srl value 8) #x00ff)
    782 				 (and (sll value 8) #xff00))))) ; insert
    783      ((value pc) (ext INT 
    784 		      (trunc HI
    785 			     (or (and (srl value 8) #x00ff)
    786 				 (and (sll value 8) #xff00))))) ; extract
    787 )
    788 
    789 ;-------------------------------------------------------------
    790 ; Bit indices
    791 ;-------------------------------------------------------------
    792 
    793 (dnf f-bitno16-S "bit index for m16c" (all-isas) 5 3)
    794 (dnf f-bitno32-prefixed "bit index for m32c" (all-isas) 21 3)
    795 (dnf f-bitno32-unprefixed "bit index for m32c" (all-isas) 13 3)
    796 
    797 (dnmf f-bitbase16-u11-S "unsigned bit,base:11" (all-isas) UINT
    798       (f-bitno16-S f-dsp-8-u8)
    799       (sequence () ; insert
    800 		(set (ifield f-bitno16-S) (and f-bitbase16-u11-S #x7))
    801 		(set (ifield f-dsp-8-u8) (and (srl (ifield f-bitbase16-u11-S) 3) #xff))
    802 		)
    803       (sequence () ; extract
    804 		(set (ifield f-bitbase16-u11-S) (or (sll (ifield f-dsp-8-u8) 3)
    805 						    (ifield f-bitno16-S)))
    806 		)
    807 )
    808 
    809 (dnmf f-bitbase32-16-u11-unprefixed "unsigned bit,base:11" (all-isas) UINT
    810       (f-bitno32-unprefixed f-dsp-16-u8)
    811       (sequence () ; insert
    812 		(set (ifield f-bitno32-unprefixed) (and f-bitbase32-16-u11-unprefixed #x7))
    813 		(set (ifield f-dsp-16-u8) (and (srl (ifield f-bitbase32-16-u11-unprefixed) 3) #xff))
    814 		)
    815       (sequence () ; extract
    816 		(set (ifield f-bitbase32-16-u11-unprefixed) (or (sll (ifield f-dsp-16-u8) 3)
    817 							      (ifield f-bitno32-unprefixed)))
    818 		)
    819 )
    820 (dnmf f-bitbase32-16-s11-unprefixed "signed bit,base:11" (all-isas) INT
    821       (f-bitno32-unprefixed f-dsp-16-s8)
    822       (sequence () ; insert
    823 		(set (ifield f-bitno32-unprefixed) (and f-bitbase32-16-s11-unprefixed #x7))
    824 		(set (ifield f-dsp-16-s8) (sra INT (ifield f-bitbase32-16-s11-unprefixed) 3))
    825 		)
    826       (sequence () ; extract
    827 		(set (ifield f-bitbase32-16-s11-unprefixed) (or (sll (ifield f-dsp-16-s8) 3)
    828 								(ifield f-bitno32-unprefixed)))
    829 		)
    830 )
    831 (dnmf f-bitbase32-16-u19-unprefixed "unsigned bit,base:19" (all-isas) UINT
    832       (f-bitno32-unprefixed f-dsp-16-u16)
    833       (sequence () ; insert
    834 		(set (ifield f-bitno32-unprefixed) (and f-bitbase32-16-u19-unprefixed #x7))
    835 		(set (ifield f-dsp-16-u16) (and (srl (ifield f-bitbase32-16-u19-unprefixed) 3) #xffff))
    836 		)
    837       (sequence () ; extract
    838 		(set (ifield f-bitbase32-16-u19-unprefixed) (or (sll (ifield f-dsp-16-u16) 3)
    839 								(ifield f-bitno32-unprefixed)))
    840 		)
    841 )
    842 (dnmf f-bitbase32-16-s19-unprefixed "signed bit,base:11" (all-isas) INT
    843       (f-bitno32-unprefixed f-dsp-16-s16)
    844       (sequence () ; insert
    845 		(set (ifield f-bitno32-unprefixed) (and f-bitbase32-16-s19-unprefixed #x7))
    846 		(set (ifield f-dsp-16-s16) (sra INT (ifield f-bitbase32-16-s19-unprefixed) 3))
    847 		)
    848       (sequence () ; extract
    849 		(set (ifield f-bitbase32-16-s19-unprefixed) (or (sll (ifield f-dsp-16-s16) 3)
    850 								(ifield f-bitno32-unprefixed)))
    851 		)
    852 )
    853 ; SID decoder doesn't handle multi-ifield referencing another multi-ifield  :-(
    854 (dnmf f-bitbase32-16-u27-unprefixed "unsigned bit,base:27" (all-isas) UINT
    855       (f-bitno32-unprefixed f-dsp-16-u16 f-dsp-32-u8)
    856       (sequence () ; insert
    857 		(set (ifield f-bitno32-unprefixed) (and f-bitbase32-16-u27-unprefixed #x7))
    858 		(set (ifield f-dsp-16-u16) (and (srl (ifield f-bitbase32-16-u27-unprefixed) 3) #xffff))
    859 		(set (ifield f-dsp-32-u8) (and (srl (ifield f-bitbase32-16-u27-unprefixed) 19) #xff))
    860 		)
    861       (sequence () ; extract
    862 		(set (ifield f-bitbase32-16-u27-unprefixed) (or (sll (ifield f-dsp-16-u16) 3)
    863 							      (or (sll (ifield f-dsp-32-u8) 19)
    864 								  (ifield f-bitno32-unprefixed))))
    865 		)
    866 )
    867 (dnmf f-bitbase32-24-u11-prefixed "unsigned bit,base:11" (all-isas) UINT
    868       (f-bitno32-prefixed f-dsp-24-u8)
    869       (sequence () ; insert
    870 		(set (ifield f-bitno32-prefixed) (and f-bitbase32-24-u11-prefixed #x7))
    871 		(set (ifield f-dsp-24-u8) (and (srl (ifield f-bitbase32-24-u11-prefixed) 3) #xff))
    872 		)
    873       (sequence () ; extract
    874 		(set (ifield f-bitbase32-24-u11-prefixed) (or (sll (ifield f-dsp-24-u8) 3)
    875 							      (ifield f-bitno32-prefixed)))
    876 		)
    877 )
    878 (dnmf f-bitbase32-24-s11-prefixed "signed bit,base:11" (all-isas) INT
    879       (f-bitno32-prefixed f-dsp-24-s8)
    880       (sequence () ; insert
    881 		(set (ifield f-bitno32-prefixed) (and f-bitbase32-24-s11-prefixed #x7))
    882 		(set (ifield f-dsp-24-s8) (sra INT (ifield f-bitbase32-24-s11-prefixed) 3))
    883 		)
    884       (sequence () ; extract
    885 		(set (ifield f-bitbase32-24-s11-prefixed) (or (sll (ifield f-dsp-24-s8) 3)
    886 							      (ifield f-bitno32-prefixed)))
    887 		)
    888 )
    889 ; SID decoder doesn't handle multi-ifield referencing another multi-ifield  :-(
    890 (dnmf f-bitbase32-24-u19-prefixed "unsigned bit,base:19" (all-isas) UINT
    891       (f-bitno32-prefixed f-dsp-24-u8 f-dsp-32-u8)
    892       (sequence () ; insert
    893 		(set (ifield f-bitno32-prefixed) (and f-bitbase32-24-u19-prefixed #x7))
    894 		(set (ifield f-dsp-24-u8) (and (srl (ifield f-bitbase32-24-u19-prefixed)  3) #xff))
    895 		(set (ifield f-dsp-32-u8) (and (srl (ifield f-bitbase32-24-u19-prefixed) 11) #xff))
    896 		)
    897       (sequence () ; extract
    898 		(set (ifield f-bitbase32-24-u19-prefixed) (or (sll (ifield f-dsp-24-u8) 3)
    899 							      (or (sll (ifield f-dsp-32-u8) 11)
    900 								  (ifield f-bitno32-prefixed))))
    901 		)
    902 )
    903 ; SID decoder doesn't handle multi-ifield referencing another multi-ifield  :-(
    904 (dnmf f-bitbase32-24-s19-prefixed "signed bit,base:11" (all-isas) INT
    905       (f-bitno32-prefixed f-dsp-24-u8 f-dsp-32-s8)
    906       (sequence () ; insert
    907 		(set (ifield f-bitno32-prefixed) (and f-bitbase32-24-s19-prefixed #x7))
    908 		(set (ifield f-dsp-24-u8) (and (srl (ifield f-bitbase32-24-s19-prefixed) 3) #xff))
    909 		(set (ifield f-dsp-32-s8) (sra INT (ifield f-bitbase32-24-s19-prefixed) 11))
    910 		)
    911       (sequence () ; extract
    912 		(set (ifield f-bitbase32-24-s19-prefixed) (or (sll (ifield f-dsp-24-u8) 3)
    913 							      (or (sll (ifield f-dsp-32-s8) 11)
    914 								  (ifield f-bitno32-prefixed))))
    915 		)
    916 )
    917 ; SID decoder doesn't handle multi-ifield referencing another multi-ifield  :-(
    918 (dnmf f-bitbase32-24-u27-prefixed "unsigned bit,base:27" (all-isas) UINT
    919       (f-bitno32-prefixed f-dsp-24-u8 f-dsp-32-u16)
    920       (sequence () ; insert
    921 		(set (ifield f-bitno32-prefixed) (and f-bitbase32-24-u27-prefixed #x7))
    922 		(set (ifield f-dsp-24-u8) (and (srl (ifield f-bitbase32-24-u27-prefixed) 3) #xff))
    923 		(set (ifield f-dsp-32-u16) (and (srl (ifield f-bitbase32-24-u27-prefixed) 11) #xffff))
    924 		)
    925       (sequence () ; extract
    926 		(set (ifield f-bitbase32-24-u27-prefixed) (or (sll (ifield f-dsp-24-u8) 3)
    927 							      (or (sll (ifield f-dsp-32-u16) 11)
    928 								  (ifield f-bitno32-prefixed))))
    929 		)
    930 )
    931 
    932 ;-------------------------------------------------------------
    933 ; Labels
    934 ;-------------------------------------------------------------
    935 
    936 (df  f-lab-5-3 "3 bit pc relative unsigned offset" (PCREL-ADDR all-isas) 5 3 UINT
    937      ((value pc) (sub SI value (add SI pc 2))) ; insert
    938      ((value pc) (add SI value (add SI pc 2))) ; extract
    939 )
    940 (dnmf f-lab32-jmp-s "unsigned 3 bit pc relative offset" (PCREL-ADDR all-isas) UINT
    941       (f-2-2 f-7-1)
    942       (sequence ((SI val)) ; insert
    943 		(set val (sub (sub (ifield f-lab32-jmp-s) pc) 2))
    944 		(set (ifield f-7-1) (and val #x1))
    945 		(set (ifield f-2-2) (srl val 1))
    946 		)
    947       (sequence () ; extract
    948 		(set (ifield f-lab32-jmp-s) (add pc (add (or (sll (ifield f-2-2) 1)
    949 							     (ifield f-7-1))
    950 							 2)))
    951 		)
    952 )
    953 (df  f-lab-8-8 "8 bit pc relative signed offset" (PCREL-ADDR all-isas) 8 8 INT
    954      ((value pc) (sub SI value (add SI pc 1))) ; insert
    955      ((value pc) (add SI value (add SI pc 1))) ; extract
    956 )
    957 (df  f-lab-8-16 "16 bit pc relative signed offset" (PCREL-ADDR SIGN-OPT all-isas) 8 16 UINT
    958      ((value pc) (or SI (sll (and (sub value (add pc 1)) #xff) 8)
    959 		     (srl (and (sub value (add pc 1)) #xffff) 8)))
    960      ((value pc) (add SI (or (srl (and value #xffff) 8)
    961 			     (sra (sll (and value #xff) 24) 16)) (add pc 1)))
    962  )
    963 (df  f-lab-8-24 "24 bit absolute" (all-isas ABS-ADDR) 8 24 UINT
    964      ((value pc) (or SI
    965 		     (or (srl value 16) (and value #xff00))
    966 		     (sll (and value #xff) 16)))
    967      ((value pc) (or SI
    968 		     (or (srl value 16) (and value #xff00))
    969 		     (sll (and value #xff) 16)))
    970  )
    971 (df  f-lab-16-8 "8 bit pc relative signed offset" (PCREL-ADDR all-isas) 16 8 INT
    972      ((value pc) (sub SI value (add SI pc 2))) ; insert
    973      ((value pc) (add SI value (add SI pc 2))) ; extract
    974 )
    975 (df  f-lab-24-8 "8 bit pc relative signed offset" (PCREL-ADDR all-isas) 24 8 INT
    976      ((value pc) (sub SI value (add SI pc 2))) ; insert
    977      ((value pc) (add SI value (add SI pc 2))) ; extract
    978 )
    979 (df  f-lab-32-8 "8 bit pc relative signed offset" (PCREL-ADDR all-isas) 32 8 INT
    980      ((value pc) (sub SI value (add SI pc 2))) ; insert
    981      ((value pc) (add SI value (add SI pc 2))) ; extract
    982 )
    983 (df  f-lab-40-8 "8 bit pc relative signed offset" (PCREL-ADDR all-isas) 40 8 INT
    984      ((value pc) (sub SI value (add SI pc 2))) ; insert
    985      ((value pc) (add SI value (add SI pc 2))) ; extract
    986 )
    987 
    988 ;-------------------------------------------------------------
    989 ; Condition codes
    990 ;-------------------------------------------------------------
    991 
    992 (dnf f-cond16    "condition code" (all-isas) 12 4)
    993 (dnf f-cond16j-5 "condition code" (all-isas)  5 3)
    994 
    995 (dnmf f-cond32 "condition code" (all-isas) UINT
    996       (f-9-1 f-13-3)
    997       (sequence () ; insert
    998 		(set (ifield f-9-1) (and (srl (ifield f-cond32) 3) 1))
    999 		(set (ifield f-13-3) (and (ifield f-cond32) #x7))
   1000 		)
   1001       (sequence () ; extract
   1002 		(set (ifield f-cond32) (or (sll (ifield f-9-1) 3)
   1003 					   (ifield f-13-3)))
   1004 		)
   1005 )
   1006 
   1007 (dnmf f-cond32j "condition code" (all-isas) UINT
   1008       (f-1-3 f-7-1)
   1009       (sequence () ; insert
   1010 		(set (ifield f-1-3) (and (srl (ifield f-cond32j) 1) #x7))
   1011 		(set (ifield f-7-1) (and (ifield f-cond32j) #x1))
   1012 		)
   1013       (sequence () ; extract
   1014 		(set (ifield f-cond32j) (or (sll (ifield f-1-3) 1)
   1015 					    (ifield f-7-1)))
   1016 		)
   1017 )
   1018 
   1020 ;=============================================================
   1021 ; Hardware
   1022 ;
   1023 (dnh h-pc "program counter" (PC all-isas) (pc USI) () () ())
   1024 
   1025 ;-------------------------------------------------------------
   1026 ; General registers
   1027 ; The actual registers are 16 bits
   1028 ;-------------------------------------------------------------
   1029 
   1030 (define-hardware
   1031   (name h-gr)
   1032   (comment "general 16 bit registers")
   1033   (attrs all-isas CACHE-ADDR)
   1034   (type register HI (4))
   1035   (indices keyword "" (("r0" 0) ("r1" 1) ("r2" 2) ("r3" 3))))
   1036 
   1037 ; Define different views of the grs as VIRTUAL with getter/setter specs
   1038 ;
   1039 (define-hardware
   1040   (name h-gr-QI)
   1041   (comment "general 8 bit registers")
   1042   (attrs all-isas VIRTUAL)
   1043   (type register QI (4))
   1044   (indices keyword "" (("r0l" 0) ("r0h" 1) ("r1l" 2) ("r1h" 3)))
   1045   (get (index) (and (if SI (mod index 2)
   1046 			(srl (reg h-gr (div index 2)) 8)
   1047 			(reg h-gr (div index 2)))
   1048 		    #xff))
   1049   (set (index newval) (set (reg h-gr (div index 2))
   1050 			   (if SI (mod index 2)
   1051 			       (or (and (reg h-gr (div index 2)) #xff)
   1052 				   (sll (and newval #xff) 8))
   1053 			       (or (and (reg h-gr (div index 2)) #xff00)
   1054 				   (and newval #xff))))))
   1055 
   1056 (define-hardware
   1057   (name h-gr-HI)
   1058   (comment "general 16 bit registers")
   1059   (attrs all-isas VIRTUAL)
   1060   (type register HI (4))
   1061   (indices keyword "" (("r0" 0) ("r1" 1) ("r2" 2) ("r3" 3)))
   1062   (get (index) (reg h-gr index))
   1063   (set (index newval) (set (reg h-gr index) newval)))
   1064 
   1065 (define-hardware
   1066   (name h-gr-SI)
   1067   (comment "general 32 bit registers")
   1068   (attrs all-isas VIRTUAL)
   1069   (type register SI (2))
   1070   (indices keyword "" (("r2r0" 0) ("r3r1" 1)))
   1071   (get (index) (or SI
   1072 		   (and (reg h-gr index) #xffff)
   1073 		   (and (sll (reg h-gr (add index 2)) 16) #xffff0000)))
   1074   (set (index newval) (sequence ()
   1075 				(set (reg h-gr index) (and newval #xffff))
   1076 				(set (reg h-gr (add index 2)) (srl newval 16)))))
   1077 
   1078 (define-hardware
   1079   (name h-gr-ext-QI)
   1080   (comment "general 16 bit registers")
   1081   (attrs all-isas VIRTUAL)
   1082   (type register HI (2))
   1083   (indices keyword "" (("r0l" 0) ("r1l" 1)))
   1084   (get (index) (reg h-gr-QI (mul index 2)))
   1085   (set (index newval) (set (reg h-gr (mul index 2)) newval)))
   1086 
   1087 (define-hardware
   1088   (name h-gr-ext-HI)
   1089   (comment "general 16 bit registers")
   1090   (attrs all-isas VIRTUAL)
   1091   (type register SI (2))
   1092   (indices keyword "" (("r0" 0) ("r1" 1)))
   1093   (get (index) (reg h-gr (mul index 2)))
   1094   (set (index newval) (set (reg h-gr-SI index) newval)))
   1095 
   1096 (define-hardware
   1097   (name h-r0l)
   1098   (comment "r0l register")
   1099   (attrs all-isas VIRTUAL)
   1100   (type register QI)
   1101   (indices keyword "" (("r0l" 0)))
   1102   (get () (reg h-gr-QI 0))
   1103   (set (newval) (set (reg h-gr-QI 0) newval)))
   1104 
   1105 (define-hardware
   1106   (name h-r0h)
   1107   (comment "r0h register")
   1108   (attrs all-isas VIRTUAL)
   1109   (type register QI)
   1110   (indices keyword "" (("r0h" 0)))
   1111   (get () (reg h-gr-QI 1))
   1112   (set (newval) (set (reg h-gr-QI 1) newval)))
   1113 
   1114 (define-hardware
   1115   (name h-r1l)
   1116   (comment "r1l register")
   1117   (attrs all-isas VIRTUAL)
   1118   (type register QI)
   1119   (indices keyword "" (("r1l" 0)))
   1120   (get () (reg h-gr-QI 2))
   1121   (set (newval) (set (reg h-gr-QI 2) newval)))
   1122 
   1123 (define-hardware
   1124   (name h-r1h)
   1125   (comment "r1h register")
   1126   (attrs all-isas VIRTUAL)
   1127   (type register QI)
   1128   (indices keyword "" (("r1h" 0)))
   1129   (get () (reg h-gr-QI 3))
   1130   (set (newval) (set (reg h-gr-QI 3) newval)))
   1131 
   1132 (define-hardware
   1133   (name h-r0)
   1134   (comment "r0 register")
   1135   (attrs all-isas VIRTUAL)
   1136   (type register HI)
   1137   (indices keyword "" (("r0" 0)))
   1138   (get () (reg h-gr 0))
   1139   (set (newval) (set (reg h-gr 0) newval)))
   1140 
   1141 (define-hardware
   1142   (name h-r1)
   1143   (comment "r1 register")
   1144   (attrs all-isas VIRTUAL)
   1145   (type register HI)
   1146   (indices keyword "" (("r1" 0)))
   1147   (get () (reg h-gr 1))
   1148   (set (newval) (set (reg h-gr 1) newval)))
   1149 
   1150 (define-hardware
   1151   (name h-r2)
   1152   (comment "r2 register")
   1153   (attrs all-isas VIRTUAL)
   1154   (type register HI)
   1155   (indices keyword "" (("r2" 0)))
   1156   (get () (reg h-gr 2))
   1157   (set (newval) (set (reg h-gr 2) newval)))
   1158 
   1159 (define-hardware
   1160   (name h-r3)
   1161   (comment "r3 register")
   1162   (attrs all-isas VIRTUAL)
   1163   (type register HI)
   1164   (indices keyword "" (("r3" 0)))
   1165   (get () (reg h-gr 3))
   1166   (set (newval) (set (reg h-gr 3) newval)))
   1167 
   1168 (define-hardware
   1169   (name h-r0l-r0h)
   1170   (comment "r0l or r0h")
   1171   (attrs all-isas VIRTUAL)
   1172   (type register QI (2))
   1173   (indices keyword "" (("r0l" 0) ("r0h" 1)))
   1174   (get (index) (reg h-gr-QI index))
   1175   (set (index newval) (set (reg h-gr-QI index) newval)))
   1176 
   1177 (define-hardware
   1178   (name h-r2r0)
   1179   (comment "r2r0 register")
   1180   (attrs all-isas VIRTUAL)
   1181   (type register SI)
   1182   (indices keyword "" (("r2r0" 0)))
   1183   (get () (or (sll (reg h-gr 2) 16) (reg h-gr 0)))
   1184   (set (newval)
   1185        (sequence ()
   1186 		 (set (reg h-gr 0) newval)
   1187 		 (set (reg h-gr 2) (sra newval 16)))))
   1188 
   1189 (define-hardware
   1190   (name h-r3r1)
   1191   (comment "r3r1 register")
   1192   (attrs all-isas VIRTUAL)
   1193   (type register SI)
   1194   (indices keyword "" (("r3r1" 0)))
   1195   (get () (or (sll (reg h-gr 3) 16) (reg h-gr 1)))
   1196   (set (newval)
   1197        (sequence ()
   1198 		 (set (reg h-gr 1) newval)
   1199 		 (set (reg h-gr 3) (sra newval 16)))))
   1200 
   1201 (define-hardware
   1202   (name h-r1r2r0)
   1203   (comment "r1r2r0 register")
   1204   (attrs all-isas VIRTUAL)
   1205   (type register DI)
   1206   (indices keyword "" (("r1r2r0" 0)))
   1207   (get () (or DI (sll DI (reg h-gr 1) 32) (or (sll (reg h-gr 2) 16) (reg h-gr 0))))
   1208   (set (newval)
   1209        (sequence ()
   1210 		 (set (reg h-gr 0) newval)
   1211 		 (set (reg h-gr 2) (sra newval 16))
   1212 		 (set (reg h-gr 1) (sra newval 32)))))
   1213 
   1214 ;-------------------------------------------------------------
   1215 ; Address registers
   1216 ;-------------------------------------------------------------
   1217 
   1218 (define-hardware
   1219   (name h-ar)
   1220   (comment "address registers")
   1221   (attrs all-isas)
   1222   (type register USI (2))
   1223   (indices keyword "" (("a0" 0) ("a1" 1)))
   1224   (get (index) (c-call USI "h_ar_get_handler" index))
   1225   (set (index newval) (c-call VOID "h_ar_set_handler" index newval)))
   1226 
   1227 ; Define different views of the ars as VIRTUAL with getter/setter specs
   1228 (define-hardware
   1229   (name h-ar-QI)
   1230   (comment "8 bit view of address register")
   1231   (attrs all-isas VIRTUAL)
   1232   (type register QI (2))
   1233   (indices keyword "" (("a0" 0) ("a1" 1)))
   1234   (get (index) (reg h-ar index))
   1235   (set (index newval) (set (reg h-ar index) newval)))
   1236 
   1237 (define-hardware
   1238   (name h-ar-HI)
   1239   (comment "16 bit view of address register")
   1240   (attrs all-isas VIRTUAL)
   1241   (type register HI (2))
   1242   (indices keyword "" (("a0" 0) ("a1" 1)))
   1243   (get (index) (reg h-ar index))
   1244   (set (index newval) (set (reg h-ar index) newval)))
   1245 
   1246 (define-hardware
   1247   (name h-ar-SI)
   1248   (comment "32 bit view of address register")
   1249   (attrs all-isas VIRTUAL)
   1250   (type register SI)
   1251   (indices keyword "" (("a1a0" 0)))
   1252   (get () (or SI (sll SI (ext SI (reg h-ar 1)) 16) (ext SI (reg h-ar 0))))
   1253   (set (newval) (sequence ()
   1254 			  (set (reg h-ar 0) (and newval #xffff))
   1255 			  (set (reg h-ar 1) (and (srl newval 16) #xffff)))))
   1256 
   1257 (define-hardware
   1258   (name h-a0)
   1259   (comment "16 bit view of address register")
   1260   (attrs all-isas VIRTUAL)
   1261   (type register HI)
   1262   (indices keyword "" (("a0" 0)))
   1263   (get () (reg h-ar 0))
   1264   (set (newval) (set (reg h-ar 0) newval)))
   1265 
   1266 (define-hardware
   1267   (name h-a1)
   1268   (comment "16 bit view of address register")
   1269   (attrs all-isas VIRTUAL)
   1270   (type register HI)
   1271   (indices keyword "" (("a1" 1)))
   1272   (get () (reg h-ar 1))
   1273   (set (newval) (set (reg h-ar 1) newval)))
   1274 
   1275 ; SB Register
   1276 (define-hardware
   1277   (name h-sb)
   1278   (comment "SB register")
   1279   (attrs all-isas)
   1280   (type register USI)
   1281   (get () (c-call USI "h_sb_get_handler"))
   1282   (set (newval) (c-call VOID "h_sb_set_handler" newval))
   1283 )
   1284 
   1285 ; FB Register
   1286 (define-hardware
   1287   (name h-fb)
   1288   (comment "FB register")
   1289   (attrs all-isas)
   1290   (type register USI)
   1291   (get () (c-call USI "h_fb_get_handler"))
   1292   (set (newval) (c-call VOID "h_fb_set_handler" newval))
   1293 )
   1294 
   1295 ; SP Register
   1296 (define-hardware
   1297   (name h-sp)
   1298   (comment "SP register")
   1299   (attrs all-isas)
   1300   (type register USI)
   1301   (get () (c-call USI "h_sp_get_handler"))
   1302   (set (newval) (c-call VOID "h_sp_set_handler" newval))
   1303 )
   1304 
   1305 ;-------------------------------------------------------------
   1306 ; condition-code bits
   1307 ;-------------------------------------------------------------
   1308 
   1309 (define-hardware
   1310   (name h-sbit)
   1311   (comment "sign bit")
   1312   (attrs all-isas)
   1313   (type register BI)
   1314 )
   1315 
   1316 (define-hardware
   1317   (name h-zbit)
   1318   (comment "zero bit")
   1319   (attrs all-isas)
   1320   (type register BI)
   1321 )
   1322 
   1323 (define-hardware
   1324   (name h-obit)
   1325   (comment "overflow bit")
   1326   (attrs all-isas)
   1327   (type register BI)
   1328 )
   1329 
   1330 (define-hardware
   1331   (name h-cbit)
   1332   (comment "carry bit")
   1333   (attrs all-isas)
   1334   (type register BI)
   1335 )
   1336 
   1337 (define-hardware
   1338   (name h-ubit)
   1339   (comment "stack pointer select bit")
   1340   (attrs all-isas)
   1341   (type register BI)
   1342 )
   1343 
   1344 (define-hardware
   1345   (name h-ibit)
   1346   (comment "interrupt enable bit")
   1347   (attrs all-isas)
   1348   (type register BI)
   1349 )
   1350 
   1351 (define-hardware
   1352   (name h-bbit)
   1353   (comment "register bank select bit")
   1354   (attrs all-isas)
   1355   (type register BI)
   1356 )
   1357 
   1358 (define-hardware
   1359   (name h-dbit)
   1360   (comment "debug bit")
   1361   (attrs all-isas)
   1362   (type register BI)
   1363 )
   1364 
   1365 (define-hardware
   1366   (name h-dct0)
   1367   (comment "dma transfer count 000")
   1368   (attrs all-isas)
   1369   (type register UHI)
   1370 )
   1371 (define-hardware
   1372   (name h-dct1)
   1373   (comment "dma transfer count 001")
   1374   (attrs all-isas)
   1375   (type register UHI)
   1376 )
   1377 (define-hardware
   1378   (name h-svf)
   1379   (comment "save flag 011")
   1380   (attrs all-isas)
   1381   (type register UHI)
   1382 )
   1383 (define-hardware
   1384   (name h-drc0)
   1385   (comment "dma transfer count reload 100")
   1386   (attrs all-isas)
   1387   (type register UHI)
   1388 )
   1389 (define-hardware
   1390   (name h-drc1)
   1391   (comment "dma transfer count reload 101")
   1392   (attrs all-isas)
   1393   (type register UHI)
   1394 )
   1395 (define-hardware
   1396   (name h-dmd0)
   1397   (comment "dma mode 110")
   1398   (attrs all-isas)
   1399   (type register UQI)
   1400 )
   1401 (define-hardware
   1402   (name h-dmd1)
   1403   (comment "dma mode 111")
   1404   (attrs all-isas)
   1405   (type register UQI)
   1406 )
   1407 (define-hardware
   1408   (name h-intb)
   1409   (comment "interrupt table 000")
   1410   (attrs all-isas)
   1411   (type register USI)
   1412 )
   1413 (define-hardware
   1414   (name h-svp)
   1415   (comment "save pc 100")
   1416   (attrs all-isas)
   1417   (type register UHI)
   1418 )
   1419 (define-hardware
   1420   (name h-vct)
   1421   (comment "vector 101")
   1422   (attrs all-isas)
   1423   (type register USI)
   1424 )
   1425 (define-hardware
   1426   (name h-isp)
   1427   (comment "interrupt stack ptr 111")
   1428   (attrs all-isas)
   1429   (type register USI)
   1430 )
   1431 (define-hardware
   1432   (name h-dma0)
   1433   (comment "dma mem addr 010")
   1434   (attrs all-isas)
   1435   (type register USI)
   1436 )
   1437 (define-hardware
   1438   (name h-dma1)
   1439   (comment "dma mem addr 011")
   1440   (attrs all-isas)
   1441   (type register USI)
   1442 )
   1443 (define-hardware
   1444   (name h-dra0)
   1445   (comment "dma mem addr reload 100")
   1446   (attrs all-isas)
   1447   (type register USI)
   1448 )
   1449 (define-hardware
   1450   (name h-dra1)
   1451   (comment "dma mem addr reload 101")
   1452   (attrs all-isas)
   1453   (type register USI)
   1454 )
   1455 (define-hardware
   1456   (name h-dsa0)
   1457   (comment "dma sfr addr 110")
   1458   (attrs all-isas)
   1459   (type register USI)
   1460 )
   1461 (define-hardware
   1462   (name h-dsa1)
   1463   (comment "dma sfr addr 111")
   1464   (attrs all-isas)
   1465   (type register USI)
   1466 )
   1467 
   1468 ;-------------------------------------------------------------
   1469 ; Condition code operand hardware
   1470 ;-------------------------------------------------------------
   1471 
   1472 (define-hardware
   1473   (name h-cond16)
   1474   (comment "condition code hardware for m16c")
   1475   (attrs m16c-isa MACH16)
   1476   (type immediate UQI)
   1477   (values keyword ""
   1478 	  (("geu" #x00) ("c"  #x00)
   1479 	   ("gtu" #x01)
   1480 	   ("eq"  #x02) ("z"  #x02)
   1481 	   ("n"   #x03)
   1482 	   ("le"  #x04)
   1483 	   ("o"   #x05)
   1484 	   ("ge"  #x06)
   1485 	   ("ltu" #xf8) ("nc" #xf8)
   1486 	   ("leu" #xf9)
   1487 	   ("ne"  #xfa) ("nz" #xfa)
   1488 	   ("pz"  #xfb)
   1489 	   ("gt"  #xfc)
   1490 	   ("no"  #xfd)
   1491 	   ("lt"  #xfe)
   1492 	  )
   1493   )
   1494 )
   1495 (define-hardware
   1496   (name h-cond16c)
   1497   (comment "condition code hardware for m16c")
   1498   (attrs m16c-isa MACH16)
   1499   (type immediate UQI)
   1500   (values keyword ""
   1501 	  (("geu" #x00) ("c"  #x00)
   1502 	   ("gtu" #x01)
   1503 	   ("eq"  #x02) ("z"  #x02)
   1504 	   ("n"   #x03)
   1505 	   ("ltu" #x04) ("nc" #x04)
   1506 	   ("leu" #x05)
   1507 	   ("ne"  #x06) ("nz" #x06)
   1508 	   ("pz"  #x07)
   1509 	   ("le"  #x08)
   1510 	   ("o"   #x09)
   1511 	   ("ge"  #x0a)
   1512 	   ("gt"  #x0c)
   1513 	   ("no"  #x0d)
   1514 	   ("lt"  #x0e)
   1515 	  )
   1516   )
   1517 )
   1518 (define-hardware
   1519   (name h-cond16j)
   1520   (comment "condition code hardware for m16c")
   1521   (attrs m16c-isa MACH16)
   1522   (type immediate UQI)
   1523   (values keyword ""
   1524 	  (("le"  #x08)
   1525 	   ("o"   #x09)
   1526 	   ("ge"  #x0a)
   1527 	   ("gt"  #x0c)
   1528 	   ("no"  #x0d)
   1529 	   ("lt"  #x0e)
   1530 	  )
   1531   )
   1532 )
   1533 (define-hardware
   1534   (name h-cond16j-5)
   1535   (comment "condition code hardware for m16c")
   1536   (attrs m16c-isa MACH16)
   1537   (type immediate UQI)
   1538   (values keyword ""
   1539 	  (("geu" #x00) ("c"  #x00)
   1540 	   ("gtu" #x01)
   1541 	   ("eq"  #x02) ("z"  #x02)
   1542 	   ("n"   #x03)
   1543 	   ("ltu" #x04) ("nc" #x04)
   1544 	   ("leu" #x05)
   1545 	   ("ne"  #x06) ("nz" #x06)
   1546 	   ("pz"  #x07)
   1547 	  )
   1548   )
   1549 )
   1550 
   1551 (define-hardware
   1552   (name h-cond32)
   1553   (comment "condition code hardware for m32c")
   1554   (attrs m32c-isa MACH32)
   1555   (type immediate UQI)
   1556   (values keyword ""
   1557 	  (("ltu" #x00) ("nc" #x00)
   1558 	   ("leu" #x01)
   1559 	   ("ne"  #x02) ("nz" #x02)
   1560 	   ("pz"  #x03)
   1561 	   ("no"  #x04)
   1562 	   ("gt"  #x05)
   1563 	   ("ge"  #x06)
   1564 	   ("geu" #x08) ("c"  #x08)
   1565 	   ("gtu" #x09)
   1566 	   ("eq"  #x0a) ("z"  #x0a)
   1567 	   ("n"   #x0b)
   1568 	   ("o"   #x0c)
   1569 	   ("le"  #x0d)
   1570 	   ("lt"  #x0e)
   1571 	  )
   1572   )
   1573 )
   1574 
   1575 (define-hardware
   1576   (name h-cr1-32)
   1577   (comment "control registers")
   1578   (attrs m32c-isa MACH32)
   1579   (type immediate UQI)
   1580   (values keyword "" (("dct0" 0) ("dct1" 1) ("flg" 2) ("svf" 3) ("drc0" 4)
   1581                        ("drc1" 5) ("dmd0" 6) ("dmd1" 7))))
   1582 (define-hardware
   1583   (name h-cr2-32)
   1584   (comment "control registers")
   1585   (attrs m32c-isa MACH32)
   1586   (type immediate UQI)
   1587   (values keyword "" (("intb" 0) ("sp" 1) ("sb" 2) ("fb" 3) ("svp" 4)
   1588                        ("vct" 5) ("isp" 7))))
   1589 
   1590 (define-hardware
   1591   (name h-cr3-32)
   1592   (comment "control registers")
   1593   (attrs m32c-isa MACH32)
   1594   (type immediate UQI)
   1595   (values keyword "" (("dma0" 2) ("dma1" 3) ("dra0" 4)
   1596                        ("dra1" 5) ("dsa0" 6) ("dsa1" 7))))
   1597 (define-hardware
   1598   (name h-cr-16)
   1599   (comment "control registers")
   1600   (attrs m16c-isa MACH16)
   1601   (type immediate UQI)
   1602   (values keyword "" (("intbl" 1) ("intbh" 2) ("flg" 3) ("isp" 4)
   1603                        ("sp" 5) ("sb" 6) ("fb" 7))))
   1604 
   1605 (define-hardware
   1606   (name h-flags)
   1607   (comment "flag hardware for m32c")
   1608   (attrs all-isas)
   1609   (type immediate UQI)
   1610   (values keyword ""
   1611 	  (("c" #x0)
   1612 	   ("d" #x1)
   1613 	   ("z"  #x2)
   1614 	   ("s"  #x3)
   1615 	   ("b"  #x4)
   1616 	   ("o"  #x5)
   1617 	   ("i"  #x6)
   1618 	   ("u"  #x7)
   1619 	  )
   1620   )
   1621 )
   1622 
   1623 ;-------------------------------------------------------------
   1624 ; Misc helper hardware
   1625 ;-------------------------------------------------------------
   1626 
   1627 (define-hardware
   1628   (name h-shimm)
   1629   (comment "shift immediate")
   1630   (attrs all-isas)
   1631   (type immediate (INT 4))
   1632   (values keyword "" (("1" 0) ("2" 1) ("3" 2) ("4" 3) ("5" 4) ("6" 5) ("7" 6)
   1633                       ("8" 7) ("-1" -8) ("-2" -7) ("-3" -6) ("-4" -5) ("-5" -4)
   1634                       ("-6" -3) ("-7" -2) ("-8" -1)
   1635                       )))
   1636 (define-hardware
   1637   (name h-bit-index)
   1638   (comment "bit index for the next insn")
   1639   (attrs m32c-isa MACH32)
   1640   (type register UHI)
   1641 )
   1642 (define-hardware
   1643   (name h-src-index)
   1644   (comment "source index for the next insn")
   1645   (attrs m32c-isa MACH32)
   1646   (type register UHI)
   1647 )
   1648 (define-hardware
   1649   (name h-dst-index)
   1650   (comment "destination index for the next insn")
   1651   (attrs m32c-isa MACH32)
   1652   (type register UHI)
   1653 )
   1654 (define-hardware
   1655   (name h-src-indirect)
   1656   (comment "indirect src for the next insn")
   1657   (attrs all-isas)
   1658   (type register UHI)
   1659 )
   1660 (define-hardware
   1661   (name h-dst-indirect)
   1662   (comment "indirect dst for the next insn")
   1663   (attrs all-isas)
   1664   (type register UHI)
   1665 )
   1666 (define-hardware
   1667   (name h-none)
   1668   (comment "for storing unused values")
   1669   (attrs m32c-isa MACH32)
   1670   (type register SI)
   1671 )
   1672 
   1674 ;=============================================================
   1675 ; Operands
   1676 ;-------------------------------------------------------------
   1677 ; Source Registers
   1678 ;-------------------------------------------------------------
   1679 
   1680 (dnop Src16RnQI  "general register QI view" (MACH16 m16c-isa) h-gr-QI f-src16-rn)
   1681 (dnop Src16RnHI  "general register QH view" (MACH16 m16c-isa) h-gr-HI f-src16-rn)
   1682 
   1683 (dnop Src32RnUnprefixedQI  "general register QI view" (MACH32 m32c-isa) h-gr-QI f-src32-rn-unprefixed-QI)
   1684 (dnop Src32RnUnprefixedHI  "general register HI view" (MACH32 m32c-isa) h-gr-HI f-src32-rn-unprefixed-HI)
   1685 (dnop Src32RnUnprefixedSI  "general register SI view" (MACH32 m32c-isa) h-gr-SI f-src32-rn-unprefixed-SI)
   1686 
   1687 (dnop Src32RnPrefixedQI  "general register QI view" (MACH32 m32c-isa) h-gr-QI f-src32-rn-prefixed-QI)
   1688 (dnop Src32RnPrefixedHI  "general register HI view" (MACH32 m32c-isa) h-gr-HI f-src32-rn-prefixed-HI)
   1689 (dnop Src32RnPrefixedSI  "general register SI view" (MACH32 m32c-isa) h-gr-SI f-src32-rn-prefixed-SI)
   1690 
   1691 (dnop Src16An    "address register"         (MACH16 m16c-isa) h-ar    f-src16-an)
   1692 (dnop Src16AnQI  "address register QI view" (MACH16 m16c-isa) h-ar-QI f-src16-an)
   1693 (dnop Src16AnHI  "address register HI view" (MACH16 m16c-isa) h-ar-HI f-src16-an)
   1694 
   1695 (dnop Src32AnUnprefixed    "address register"         (MACH32 m32c-isa) h-ar    f-src32-an-unprefixed)
   1696 (dnop Src32AnUnprefixedQI  "address register QI view" (MACH32 m32c-isa) h-ar-QI f-src32-an-unprefixed)
   1697 (dnop Src32AnUnprefixedHI  "address register HI view" (MACH32 m32c-isa) h-ar-HI f-src32-an-unprefixed)
   1698 (dnop Src32AnUnprefixedSI  "address register SI view" (MACH32 m32c-isa) h-ar    f-src32-an-unprefixed)
   1699 
   1700 (dnop Src32AnPrefixed    "address register"         (MACH32 m32c-isa) h-ar    f-src32-an-prefixed)
   1701 (dnop Src32AnPrefixedQI  "address register QI view" (MACH32 m32c-isa) h-ar-QI f-src32-an-prefixed)
   1702 (dnop Src32AnPrefixedHI  "address register HI view" (MACH32 m32c-isa) h-ar-HI f-src32-an-prefixed)
   1703 (dnop Src32AnPrefixedSI  "address register SI view" (MACH32 m32c-isa) h-ar    f-src32-an-prefixed)
   1704 
   1705 ; Destination Registers
   1706 ;
   1707 (dnop Dst16RnQI  "general register QI view" (MACH16 m16c-isa) h-gr-QI f-dst16-rn)
   1708 (dnop Dst16RnHI  "general register HI view" (MACH16 m16c-isa) h-gr-HI f-dst16-rn)
   1709 (dnop Dst16RnSI  "general register SI view" (MACH16 m16c-isa) h-gr-SI f-dst16-rn)
   1710 (dnop Dst16RnExtQI "general register QI/HI view for 'ext' insns" (MACH16 m16c-isa) h-gr-ext-QI f-dst16-rn-ext)
   1711 
   1712 (dnop Dst32R0QI-S "general register QI view" (MACH32 m32c-isa) h-r0l f-nil)
   1713 (dnop Dst32R0HI-S "general register HI view" (MACH32 m32c-isa) h-r0  f-nil)
   1714 
   1715 (dnop Dst32RnUnprefixedQI  "general register QI view" (MACH32 m32c-isa) h-gr-QI f-dst32-rn-unprefixed-QI)
   1716 (dnop Dst32RnUnprefixedHI  "general register HI view" (MACH32 m32c-isa) h-gr-HI f-dst32-rn-unprefixed-HI)
   1717 (dnop Dst32RnUnprefixedSI  "general register SI view" (MACH32 m32c-isa) h-gr-SI f-dst32-rn-unprefixed-SI)
   1718 (dnop Dst32RnExtUnprefixedQI "general register QI view" (MACH32 m32c-isa) h-gr-ext-QI f-dst32-rn-ext-unprefixed)
   1719 (dnop Dst32RnExtUnprefixedHI "general register HI view" (MACH32 m32c-isa) h-gr-ext-HI f-dst32-rn-ext-unprefixed)
   1720 
   1721 (dnop Dst32RnPrefixedQI    "general register QI view" (MACH32 m32c-isa) h-gr-QI f-dst32-rn-prefixed-QI)
   1722 (dnop Dst32RnPrefixedHI    "general register HI view" (MACH32 m32c-isa) h-gr-HI f-dst32-rn-prefixed-HI)
   1723 (dnop Dst32RnPrefixedSI    "general register SI view" (MACH32 m32c-isa) h-gr-SI f-dst32-rn-prefixed-SI)
   1724 
   1725 (dnop Dst16RnQI-S "general register QI view" (MACH16 m16c-isa) h-r0l-r0h f-dst16-rn-QI-s)
   1726 
   1727 (dnop Dst16AnQI-S "address register QI view" (MACH16 m16c-isa) h-ar-QI f-dst16-rn-QI-s)
   1728 
   1729 (dnop Bit16Rn  "general register bit view" (MACH16 m16c-isa) h-gr-HI f-dst16-rn)
   1730 
   1731 (dnop Bit32RnPrefixed "general register bit view" (MACH32 m32c-isa) h-gr-QI f-dst32-rn-prefixed-QI)
   1732 (dnop Bit32RnUnprefixed "general register bit view" (MACH32 m32c-isa) h-gr-QI f-dst32-rn-unprefixed-QI)
   1733 
   1734 (dnop R0   "r0"   (all-isas) h-r0   f-nil)
   1735 (dnop R1   "r1"   (all-isas) h-r1   f-nil)
   1736 (dnop R2   "r2"   (all-isas) h-r2   f-nil)
   1737 (dnop R3   "r3"   (all-isas) h-r3   f-nil)
   1738 (dnop R0l  "r0l"  (all-isas) h-r0l  f-nil)
   1739 (dnop R0h  "r0h"  (all-isas) h-r0h  f-nil)
   1740 (dnop R2R0 "r2r0" (all-isas) h-r2r0 f-nil)
   1741 (dnop R3R1 "r3r1" (all-isas) h-r3r1 f-nil)
   1742 (dnop R1R2R0 "r1r2r0" (all-isas) h-r1r2r0 f-nil)
   1743 
   1744 (dnop Dst16An    "address register"         (MACH16 m16c-isa) h-ar    f-dst16-an)
   1745 (dnop Dst16AnQI  "address register QI view" (MACH16 m16c-isa) h-ar-QI f-dst16-an)
   1746 (dnop Dst16AnHI  "address register HI view" (MACH16 m16c-isa) h-ar-HI f-dst16-an)
   1747 (dnop Dst16AnSI  "address register SI view" (MACH16 m16c-isa) h-ar-SI f-dst16-an)
   1748 (dnop Dst16An-S  "address register HI view" (MACH16 m16c-isa) h-ar-HI f-dst16-an-s)
   1749 
   1750 (dnop Dst32AnUnprefixed   "address register"         (MACH32 m32c-isa) h-ar    f-dst32-an-unprefixed)
   1751 (dnop Dst32AnUnprefixedQI "address register QI view" (MACH32 m32c-isa) h-ar-QI f-dst32-an-unprefixed)
   1752 (dnop Dst32AnUnprefixedHI "address register HI view" (MACH32 m32c-isa) h-ar-HI f-dst32-an-unprefixed)
   1753 (dnop Dst32AnUnprefixedSI "address register SI view" (MACH32 m32c-isa) h-ar    f-dst32-an-unprefixed)
   1754 
   1755 (dnop Dst32AnExtUnprefixed "address register"        (MACH32 m32c-isa) h-ar    f-dst32-an-unprefixed)
   1756 
   1757 (dnop Dst32AnPrefixed     "address register"         (MACH32 m32c-isa) h-ar    f-dst32-an-prefixed)
   1758 (dnop Dst32AnPrefixedQI   "address register QI view" (MACH32 m32c-isa) h-ar-QI f-dst32-an-prefixed)
   1759 (dnop Dst32AnPrefixedHI   "address register HI view" (MACH32 m32c-isa) h-ar-HI f-dst32-an-prefixed)
   1760 (dnop Dst32AnPrefixedSI   "address register SI view" (MACH32 m32c-isa) h-ar    f-dst32-an-prefixed)
   1761 
   1762 (dnop Bit16An  "address register bit view" (MACH16 m16c-isa) h-ar f-dst16-an)
   1763 
   1764 (dnop Bit32AnPrefixed "address register bit" (MACH32 m32c-isa) h-ar f-dst32-an-prefixed)
   1765 (dnop Bit32AnUnprefixed "address register bit" (MACH32 m32c-isa) h-ar f-dst32-an-unprefixed)
   1766 
   1767 (dnop A0  "a0"   (all-isas) h-a0  f-nil)
   1768 (dnop A1  "a1"   (all-isas) h-a1  f-nil)
   1769 
   1770 (dnop sb  "SB register" (all-isas SEM-ONLY) h-sb f-nil)
   1771 (dnop fb  "FB register" (all-isas SEM-ONLY) h-fb f-nil)
   1772 (dnop sp  "SP register" (all-isas SEM-ONLY) h-sp f-nil)
   1773 
   1774 (define-full-operand SrcDst16-r0l-r0h-S-normal "r0l/r0h pair" (MACH16 m16c-isa)
   1775   h-sint DFLT f-5-1
   1776   ((parse "r0l_r0h") (print "r0l_r0h")) () ()
   1777 )
   1778 
   1779 (define-full-operand Regsetpop "popm regset" (all-isas) h-uint
   1780    DFLT f-8-8 ((parse "pop_regset") (print "pop_regset")) () ())
   1781 (define-full-operand Regsetpush "pushm regset" (all-isas) h-uint
   1782    DFLT f-8-8 ((parse "push_regset") (print "push_regset")) () ())
   1783 
   1784 (dnop Rn16-push-S "r0[lh]" (MACH16 m16c-isa) h-gr-QI f-4-1)
   1785 (dnop An16-push-S "a[01]"  (MACH16 m16c-isa) h-ar-HI f-4-1)
   1786 
   1787 ;-------------------------------------------------------------
   1788 ; Offsets and absolutes
   1789 ;-------------------------------------------------------------
   1790 
   1791 (define-full-operand Dsp-8-u6 "unsigned 6 bit displacement at offset 8 bits" (all-isas)
   1792   h-uint DFLT f-dsp-8-u6
   1793   ((parse "unsigned6")) () ()
   1794 )
   1795 (define-full-operand Dsp-8-u8 "unsigned 8 bit displacement at offset 8 bits" (all-isas)
   1796   h-uint DFLT f-dsp-8-u8
   1797   ((parse "unsigned8")) () ()
   1798 )
   1799 (define-full-operand Dsp-8-u16 "unsigned 16 bit displacement at offset 8 bits" (all-isas)
   1800   h-uint DFLT f-dsp-8-u16
   1801   ((parse "unsigned16")) () ()
   1802 )
   1803 (define-full-operand Dsp-8-s8 "signed 8 bit displacement at offset 8 bits" (all-isas)
   1804   h-sint DFLT f-dsp-8-s8
   1805   ((parse "signed8")) () ()
   1806 )
   1807 (define-full-operand Dsp-8-s24 "signed 24 bit displacement at offset 8 bits" (all-isas)
   1808   h-sint DFLT f-dsp-8-s24
   1809   ((parse "signed24")) () ()
   1810 )
   1811 (define-full-operand Dsp-8-u24 "unsigned 24 bit displacement at offset 8 bits" (all-isas)
   1812   h-uint DFLT f-dsp-8-u24
   1813   ((parse "unsigned24")) () ()
   1814 )
   1815 (define-full-operand Dsp-10-u6 "unsigned 6 bit displacement at offset 10 bits" (all-isas)
   1816   h-uint DFLT f-dsp-10-u6
   1817   ((parse "unsigned6")) () ()
   1818 )
   1819 (define-full-operand Dsp-16-u8 "unsigned 8 bit displacement at offset 16 bits" (all-isas)
   1820   h-uint DFLT f-dsp-16-u8
   1821   ((parse "unsigned8")) () ()
   1822 )
   1823 (define-full-operand Dsp-16-u16 "unsigned 16 bit displacement at offset 16 bits" (all-isas)
   1824   h-uint DFLT f-dsp-16-u16
   1825   ((parse "unsigned16")) () ()
   1826 )
   1827 (define-full-operand Dsp-16-u20 "unsigned 20 bit displacement at offset 16 bits" (all-isas)
   1828   h-uint DFLT f-dsp-16-u24
   1829   ((parse "unsigned20")) () ()
   1830 )
   1831 (define-full-operand Dsp-16-u24 "unsigned 24 bit displacement at offset 16 bits" (all-isas)
   1832   h-uint DFLT f-dsp-16-u24
   1833   ((parse "unsigned24")) () ()
   1834 )
   1835 (define-full-operand Dsp-16-s8 "signed 8 bit displacement at offset 16 bits" (all-isas)
   1836   h-sint DFLT f-dsp-16-s8
   1837   ((parse "signed8")) () ()
   1838 )
   1839 (define-full-operand Dsp-16-s16 "signed 16 bit displacement at offset 16 bits" (all-isas)
   1840   h-sint DFLT f-dsp-16-s16
   1841   ((parse "signed16")) () ()
   1842 )
   1843 (define-full-operand Dsp-24-u8 "unsigned 8 bit displacement at offset 24 bits" (all-isas)
   1844   h-uint DFLT f-dsp-24-u8
   1845   ((parse "unsigned8")) () ()
   1846 )
   1847 (define-full-operand Dsp-24-u16 "unsigned 16 bit displacement at offset 24 bits" (all-isas)
   1848   h-uint DFLT f-dsp-24-u16
   1849   ((parse "unsigned16")) () ()
   1850 )
   1851 (define-full-operand Dsp-24-u20 "unsigned 20 bit displacement at offset 24 bits" (all-isas)
   1852   h-uint DFLT f-dsp-24-u24
   1853   ((parse "unsigned20")) () ()
   1854 )
   1855 (define-full-operand Dsp-24-u24 "unsigned 24 bit displacement at offset 24 bits" (all-isas)
   1856   h-uint DFLT f-dsp-24-u24
   1857   ((parse "unsigned24")) () ()
   1858 )
   1859 (define-full-operand Dsp-24-s8 "signed 8 bit displacement at offset 24 bits" (all-isas)
   1860   h-sint DFLT f-dsp-24-s8
   1861   ((parse "signed8")) () ()
   1862 )
   1863 (define-full-operand Dsp-24-s16 "signed 16 bit displacement at offset 24 bits" (all-isas)
   1864   h-sint DFLT f-dsp-24-s16
   1865   ((parse "signed16")) () ()
   1866 )
   1867 (define-full-operand Dsp-32-u8 "unsigned 8 bit displacement at offset 32 bits" (all-isas)
   1868   h-uint DFLT f-dsp-32-u8
   1869   ((parse "unsigned8")) () ()
   1870 )
   1871 (define-full-operand Dsp-32-u16 "unsigned 16 bit displacement at offset 32 bits" (all-isas)
   1872   h-uint DFLT f-dsp-32-u16
   1873   ((parse "unsigned16")) () ()
   1874 )
   1875 (define-full-operand Dsp-32-u24 "unsigned 24 bit displacement at offset 32 bits" (all-isas)
   1876   h-uint DFLT f-dsp-32-u24
   1877   ((parse "unsigned24")) () ()
   1878 )
   1879 (define-full-operand Dsp-32-u20 "unsigned 20 bit displacement at offset 32 bits" (all-isas)
   1880   h-uint DFLT f-dsp-32-u24
   1881   ((parse "unsigned20")) () ()
   1882 )
   1883 (define-full-operand Dsp-32-s8 "signed 8 bit displacement at offset 32 bits" (all-isas)
   1884   h-sint DFLT f-dsp-32-s8
   1885   ((parse "signed8")) () ()
   1886 )
   1887 (define-full-operand Dsp-32-s16 "signed 16 bit displacement at offset 32 bits" (all-isas)
   1888   h-sint DFLT f-dsp-32-s16
   1889   ((parse "signed16")) () ()
   1890 )
   1891 (define-full-operand Dsp-40-u8 "unsigned 8 bit displacement at offset 40 bits" (all-isas)
   1892   h-uint DFLT f-dsp-40-u8
   1893   ((parse "unsigned8")) () ()
   1894 )
   1895 (define-full-operand Dsp-40-s8 "signed 8 bit displacement at offset 40 bits" (all-isas)
   1896   h-sint DFLT f-dsp-40-s8
   1897   ((parse "signed8")) () ()
   1898 )
   1899 (define-full-operand Dsp-40-u16 "unsigned 16 bit displacement at offset 40 bits" (all-isas)
   1900   h-uint DFLT f-dsp-40-u16
   1901   ((parse "unsigned16")) () ()
   1902 )
   1903 (define-full-operand Dsp-40-s16 "signed 16 bit displacement at offset 40 bits" (all-isas)
   1904   h-sint DFLT f-dsp-40-s16
   1905   ((parse "signed16")) () ()
   1906 )
   1907 (define-full-operand Dsp-40-u20 "unsigned 20 bit displacement at offset 40 bits" (all-isas)
   1908   h-uint DFLT f-dsp-40-u20
   1909   ((parse "unsigned20")) () ()
   1910 )
   1911 (define-full-operand Dsp-40-u24 "unsigned 24 bit displacement at offset 40 bits" (all-isas)
   1912   h-uint DFLT f-dsp-40-u24
   1913   ((parse "unsigned24")) () ()
   1914 )
   1915 (define-full-operand Dsp-48-u8 "unsigned 8 bit displacement at offset 48 bits" (all-isas)
   1916   h-uint DFLT f-dsp-48-u8
   1917   ((parse "unsigned8")) () ()
   1918 )
   1919 (define-full-operand Dsp-48-s8 "signed 8 bit displacement at offset 48 bits" (all-isas)
   1920   h-sint DFLT f-dsp-48-s8
   1921   ((parse "signed8")) () ()
   1922 )
   1923 (define-full-operand Dsp-48-u16 "unsigned 16 bit displacement at offset 48 bits" (all-isas)
   1924   h-uint DFLT f-dsp-48-u16
   1925   ((parse "unsigned16")) () ()
   1926 )
   1927 (define-full-operand Dsp-48-s16 "signed 16 bit displacement at offset 48 bits" (all-isas)
   1928   h-sint DFLT f-dsp-48-s16
   1929   ((parse "signed16")) () ()
   1930 )
   1931 (define-full-operand Dsp-48-u20 "unsigned 24 bit displacement at offset 40 bits" (all-isas)
   1932   h-uint DFLT f-dsp-48-u20
   1933   ((parse "unsigned24")) () ()
   1934 )
   1935 (define-full-operand Dsp-48-u24 "unsigned 24 bit displacement at offset 48 bits" (all-isas)
   1936   h-uint DFLT f-dsp-48-u24
   1937   ((parse "unsigned24")) () ()
   1938 )
   1939 
   1940 (define-full-operand Imm-8-s4 "signed 4 bit immediate at offset 8 bits" (all-isas)
   1941   h-sint DFLT f-imm-8-s4
   1942   ((parse "signed4")) () ()
   1943 )
   1944 (define-full-operand Imm-8-s4n "negated 4 bit immediate at offset 8 bits" (all-isas)
   1945   h-sint DFLT f-imm-8-s4
   1946   ((parse "signed4n") (print "signed4n")) () ()
   1947 )
   1948 (define-full-operand Imm-sh-8-s4 "signed 4 bit shift immediate at offset 8 bits" (all-isas)
   1949   h-shimm DFLT f-imm-8-s4
   1950   () () ()
   1951 )
   1952 (define-full-operand Imm-8-QI "signed 8 bit immediate at offset 8 bits" (all-isas)
   1953   h-sint DFLT f-dsp-8-s8
   1954   ((parse "signed8")) () ()
   1955 )
   1956 (define-full-operand Imm-8-HI "signed 16 bit immediate at offset 8 bits" (all-isas)
   1957   h-sint DFLT f-dsp-8-s16
   1958   ((parse "signed16")) () ()
   1959 )
   1960 (define-full-operand Imm-12-s4 "signed 4 bit immediate at offset 12 bits" (all-isas)
   1961   h-sint DFLT f-imm-12-s4
   1962   ((parse "signed4")) () ()
   1963 )
   1964 (define-full-operand Imm-12-s4n "negated 4 bit immediate at offset 12 bits" (all-isas)
   1965   h-sint DFLT f-imm-12-s4
   1966   ((parse "signed4n") (print "signed4n")) () ()
   1967 )
   1968 (define-full-operand Imm-sh-12-s4 "signed 4 bit shift immediate at offset 12 bits" (all-isas)
   1969   h-shimm DFLT f-imm-12-s4
   1970   () () ()
   1971 )
   1972 (define-full-operand Imm-13-u3 "signed 3 bit immediate at offset 13 bits" (all-isas)
   1973   h-sint DFLT f-imm-13-u3
   1974   ((parse "signed4")) () ()
   1975 )
   1976 (define-full-operand Imm-20-s4 "signed 4 bit immediate at offset 20 bits" (all-isas)
   1977   h-sint DFLT f-imm-20-s4
   1978   ((parse "signed4")) () ()
   1979 )
   1980 (define-full-operand Imm-sh-20-s4 "signed 4 bit shift immediate at offset 12 bits" (all-isas)
   1981   h-shimm DFLT f-imm-20-s4
   1982   () () ()
   1983 )
   1984 (define-full-operand Imm-16-QI "signed 8 bit immediate at offset 16 bits" (all-isas)
   1985   h-sint DFLT f-dsp-16-s8
   1986   ((parse "signed8")) () ()
   1987 )
   1988 (define-full-operand Imm-16-HI "signed 16 bit immediate at offset 16 bits" (all-isas)
   1989   h-sint DFLT f-dsp-16-s16
   1990   ((parse "signed16")) () ()
   1991 )
   1992 (define-full-operand Imm-16-SI "signed 32 bit immediate at offset 16 bits" (all-isas)
   1993   h-sint DFLT f-dsp-16-s32
   1994   ((parse "signed32")) () ()
   1995 )
   1996 (define-full-operand Imm-24-QI "signed 8 bit immediate at offset 24 bits" (all-isas)
   1997   h-sint DFLT f-dsp-24-s8
   1998   ((parse "signed8")) () ()
   1999 )
   2000 (define-full-operand Imm-24-HI "signed 16 bit immediate at offset 24 bits" (all-isas)
   2001   h-sint DFLT f-dsp-24-s16
   2002   ((parse "signed16")) () ()
   2003 )
   2004 (define-full-operand Imm-24-SI "signed 32 bit immediate at offset 24 bits" (all-isas)
   2005   h-sint DFLT f-dsp-24-s32
   2006   ((parse "signed32")) () ()
   2007 )
   2008 (define-full-operand Imm-32-QI "signed 8 bit immediate at offset 32 bits" (all-isas)
   2009   h-sint DFLT f-dsp-32-s8
   2010   ((parse "signed8")) () ()
   2011 )
   2012 (define-full-operand Imm-32-SI "signed 32 bit immediate at offset 32 bits" (all-isas)
   2013   h-sint DFLT f-dsp-32-s32
   2014   ((parse "signed32")) () ()
   2015 )
   2016 (define-full-operand Imm-32-HI "signed 16 bit immediate at offset 32 bits" (all-isas)
   2017   h-sint DFLT f-dsp-32-s16
   2018   ((parse "signed16")) () ()
   2019 )
   2020 (define-full-operand Imm-40-QI "signed 8 bit immediate at offset 40 bits" (all-isas)
   2021   h-sint DFLT f-dsp-40-s8
   2022   ((parse "signed8")) () ()
   2023 )
   2024 (define-full-operand Imm-40-HI "signed 16 bit immediate at offset 40 bits" (all-isas)
   2025   h-sint DFLT f-dsp-40-s16
   2026   ((parse "signed16")) () ()
   2027 )
   2028 (define-full-operand Imm-40-SI "signed 32 bit immediate at offset 40 bits" (all-isas)
   2029   h-sint DFLT f-dsp-40-s32
   2030   ((parse "signed32")) () ()
   2031 )
   2032 (define-full-operand Imm-48-QI "signed 8 bit immediate at offset 48 bits" (all-isas)
   2033   h-sint DFLT f-dsp-48-s8
   2034   ((parse "signed8")) () ()
   2035 )
   2036 (define-full-operand Imm-48-HI "signed 16 bit immediate at offset 48 bits" (all-isas)
   2037   h-sint DFLT f-dsp-48-s16
   2038   ((parse "signed16")) () ()
   2039 )
   2040 (define-full-operand Imm-48-SI "signed 32 bit immediate at offset 48 bits" (all-isas)
   2041   h-sint DFLT f-dsp-48-s32
   2042   ((parse "signed32")) () ()
   2043 )
   2044 (define-full-operand Imm-56-QI "signed 8 bit immediate at offset 56 bits" (all-isas)
   2045   h-sint DFLT f-dsp-56-s8
   2046   ((parse "signed8")) () ()
   2047 )
   2048 (define-full-operand Imm-56-HI "signed 16 bit immediate at offset 56 bits" (all-isas)
   2049   h-sint DFLT f-dsp-56-s16
   2050   ((parse "signed16")) () ()
   2051 )
   2052 (define-full-operand Imm-64-HI "signed 16 bit immediate at offset 64 bits" (all-isas)
   2053   h-sint DFLT f-dsp-64-s16
   2054   ((parse "signed16")) () ()
   2055 )
   2056 (define-full-operand Imm1-S "signed 1 bit immediate for short format binary insns" (m32c-isa)
   2057   h-sint DFLT f-imm1-S
   2058   ((parse "imm1_S")) () ()
   2059 )
   2060 (define-full-operand Imm3-S "signed 3 bit immediate for short format binary insns" (m32c-isa)
   2061   h-sint DFLT f-imm3-S
   2062   ((parse "imm3_S")) () ()
   2063 )
   2064 (define-full-operand Bit3-S "3 bit bit number" (m32c-isa)
   2065   h-sint DFLT f-imm3-S
   2066   ((parse "bit3_S")) () ()
   2067 )
   2068 
   2069 ;-------------------------------------------------------------
   2070 ; Bit numbers
   2071 ;-------------------------------------------------------------
   2072 
   2073 (define-full-operand Bitno16R "bit number for indexing registers" (m16c-isa)
   2074   h-uint DFLT f-dsp-16-u8
   2075   ((parse "Bitno16R")) () ()
   2076 )
   2077 (dnop Bitno32Prefixed "bit number for indexing objects" (m32c-isa) h-uint f-bitno32-prefixed)
   2078 (dnop Bitno32Unprefixed "bit number for indexing objects" (m32c-isa) h-uint f-bitno32-unprefixed)
   2079 
   2080 (define-full-operand BitBase16-16-u8 "unsigned bit,base:8 at offset 16for m16c" (m16c-isa)
   2081   h-uint DFLT f-dsp-16-u8
   2082   ((parse "unsigned_bitbase8") (print "unsigned_bitbase")) () ()
   2083 )
   2084 (define-full-operand BitBase16-16-s8 "signed bit,base:8 at offset 16for m16c" (m16c-isa)
   2085   h-sint DFLT f-dsp-16-s8
   2086   ((parse "signed_bitbase8") (print "signed_bitbase")) () ()
   2087 )
   2088 (define-full-operand BitBase16-16-u16 "unsigned bit,base:16 at offset 16 for m16c" (m16c-isa)
   2089   h-uint DFLT f-dsp-16-u16
   2090   ((parse "unsigned_bitbase16") (print "unsigned_bitbase")) () ()
   2091 )
   2092 (define-full-operand BitBase16-8-u11-S "signed bit,base:11 at offset 16 for m16c" (m16c-isa)
   2093   h-uint DFLT f-bitbase16-u11-S
   2094   ((parse "unsigned_bitbase11") (print "unsigned_bitbase")) () ()
   2095 )
   2096 
   2097 (define-full-operand BitBase32-16-u11-Unprefixed "unsigned bit,base:11 at offset 16 for m32c" (m32c-isa)
   2098   h-uint DFLT f-bitbase32-16-u11-unprefixed
   2099   ((parse "unsigned_bitbase11") (print "unsigned_bitbase")) () ()
   2100 )
   2101 (define-full-operand BitBase32-16-s11-Unprefixed "signed bit,base:11 at offset 16 for m32c" (m32c-isa)
   2102   h-sint DFLT f-bitbase32-16-s11-unprefixed
   2103   ((parse "signed_bitbase11") (print "signed_bitbase")) () ()
   2104 )
   2105 (define-full-operand BitBase32-16-u19-Unprefixed "unsigned bit,base:19 at offset 16 for m32c" (m32c-isa)
   2106   h-uint DFLT f-bitbase32-16-u19-unprefixed
   2107   ((parse "unsigned_bitbase19") (print "unsigned_bitbase")) () ()
   2108 )
   2109 (define-full-operand BitBase32-16-s19-Unprefixed "signed bit,base:19 at offset 16 for m32c" (m32c-isa)
   2110   h-sint DFLT f-bitbase32-16-s19-unprefixed
   2111   ((parse "signed_bitbase19") (print "signed_bitbase")) () ()
   2112 )
   2113 (define-full-operand BitBase32-16-u27-Unprefixed "unsigned bit,base:27 at offset 16 for m32c" (m32c-isa)
   2114   h-uint DFLT f-bitbase32-16-u27-unprefixed
   2115   ((parse "unsigned_bitbase27") (print "unsigned_bitbase")) () ()
   2116 )
   2117 (define-full-operand BitBase32-24-u11-Prefixed "unsigned bit,base:11 at offset 24 for m32c" (m32c-isa)
   2118   h-uint DFLT f-bitbase32-24-u11-prefixed
   2119   ((parse "unsigned_bitbase11") (print "unsigned_bitbase")) () ()
   2120 )
   2121 (define-full-operand BitBase32-24-s11-Prefixed "signed bit,base:11 at offset 24 for m32c" (m32c-isa)
   2122   h-sint DFLT f-bitbase32-24-s11-prefixed
   2123   ((parse "signed_bitbase11") (print "signed_bitbase")) () ()
   2124 )
   2125 (define-full-operand BitBase32-24-u19-Prefixed "unsigned bit,base:19 at offset 24 for m32c" (m32c-isa)
   2126   h-uint DFLT f-bitbase32-24-u19-prefixed
   2127   ((parse "unsigned_bitbase19") (print "unsigned_bitbase")) () ()
   2128 )
   2129 (define-full-operand BitBase32-24-s19-Prefixed "signed bit,base:19 at offset 24 for m32c" (m32c-isa)
   2130   h-sint DFLT f-bitbase32-24-s19-prefixed
   2131   ((parse "signed_bitbase19") (print "signed_bitbase")) () ()
   2132 )
   2133 (define-full-operand BitBase32-24-u27-Prefixed "unsigned bit,base:27 at offset 24 for m32c" (m32c-isa)
   2134   h-uint DFLT f-bitbase32-24-u27-prefixed
   2135   ((parse "unsigned_bitbase27") (print "unsigned_bitbase")) () ()
   2136 )
   2137 ;-------------------------------------------------------------
   2138 ; Labels
   2139 ;-------------------------------------------------------------
   2140 
   2141 (define-full-operand Lab-5-3 "3 bit label" (all-isas RELAX)
   2142   h-iaddr DFLT f-lab-5-3
   2143   ((parse "lab_5_3")) () () )
   2144 
   2145 (define-full-operand Lab32-jmp-s "3 bit label" (all-isas RELAX)
   2146   h-iaddr DFLT f-lab32-jmp-s
   2147   ((parse "lab_5_3")) () () )
   2148 
   2149 (dnop Lab-8-8     "8 bit label"  (all-isas RELAX) h-iaddr f-lab-8-8)
   2150 (dnop Lab-8-16    "16 bit label" (all-isas RELAX) h-iaddr f-lab-8-16)
   2151 (dnop Lab-8-24    "24 bit label" (all-isas RELAX) h-iaddr f-lab-8-24)
   2152 (dnop Lab-16-8    "8 bit label"  (all-isas RELAX) h-iaddr f-lab-16-8)
   2153 (dnop Lab-24-8    "8 bit label"  (all-isas RELAX) h-iaddr f-lab-24-8)
   2154 (dnop Lab-32-8    "8 bit label"  (all-isas RELAX) h-iaddr f-lab-32-8)
   2155 (dnop Lab-40-8    "8 bit label"  (all-isas RELAX) h-iaddr f-lab-40-8)
   2156 
   2157 ;-------------------------------------------------------------
   2158 ; Condition code bits
   2159 ;-------------------------------------------------------------
   2160 
   2161 (dnop sbit "negative    bit"      (SEM-ONLY all-isas) h-sbit f-nil)
   2162 (dnop obit "overflow    bit"      (SEM-ONLY all-isas) h-obit f-nil)
   2163 (dnop zbit "zero        bit"      (SEM-ONLY all-isas) h-zbit f-nil)
   2164 (dnop cbit "carry       bit"      (SEM-ONLY all-isas) h-cbit f-nil)
   2165 (dnop ubit "stack ptr select bit" (SEM-ONLY all-isas) h-ubit f-nil)
   2166 (dnop ibit "interrupt enable bit" (SEM-ONLY all-isas) h-ibit f-nil)
   2167 (dnop bbit "reg bank select bit"  (SEM-ONLY all-isas) h-bbit f-nil)
   2168 (dnop dbit "debug       bit"      (SEM-ONLY all-isas) h-dbit f-nil)
   2169 
   2170 ;-------------------------------------------------------------
   2171 ; Condition operands
   2172 ;-------------------------------------------------------------
   2173 
   2174 (define-pmacro (cond-operand mach offset)
   2175   (dnop (.sym cond mach - offset) "condition" ((.sym m mach c-isa)) (.sym h-cond mach) (.sym f-dsp- offset -u8))
   2176 )
   2177 
   2178 (cond-operand 16 16)
   2179 (cond-operand 16 24)
   2180 (cond-operand 16 32)
   2181 (cond-operand 32 16)
   2182 (cond-operand 32 24)
   2183 (cond-operand 32 32)
   2184 (cond-operand 32 40)
   2185 
   2186 (dnop cond16c  "condition" (m16c-isa) h-cond16c f-cond16)
   2187 (dnop cond16j  "condition" (m16c-isa) h-cond16j f-cond16)
   2188 (dnop cond16j5 "condition" (m16c-isa) h-cond16j-5 f-cond16j-5)
   2189 (dnop cond32   "condition" (m32c-isa) h-cond32  f-cond32)
   2190 (dnop cond32j  "condition" (m32c-isa) h-cond32  f-cond32j)
   2191 (dnop sccond32 "scCND condition" (m32c-isa) h-cond32 f-cond16)
   2192 (dnop flags16  "flags" (m16c-isa) h-flags f-9-3)
   2193 (dnop flags32  "flags" (m32c-isa) h-flags f-13-3)
   2194 (dnop cr16     "control" (m16c-isa) h-cr-16 f-9-3)
   2195 (dnop cr1-Unprefixed-32   "control" (m32c-isa) h-cr1-32 f-13-3)
   2196 (dnop cr1-Prefixed-32   "control" (m32c-isa) h-cr1-32 f-21-3)
   2197 (dnop cr2-32   "control" (m32c-isa) h-cr2-32 f-13-3)
   2198 (dnop cr3-Unprefixed-32   "control" (m32c-isa) h-cr3-32 f-13-3)
   2199 (dnop cr3-Prefixed-32   "control" (m32c-isa) h-cr3-32 f-21-3)
   2200 
   2201 ;-------------------------------------------------------------
   2202 ; Suffixes
   2203 ;-------------------------------------------------------------
   2204 
   2205 (define-full-operand Z "Suffix for zero format insns" (all-isas)
   2206   h-sint DFLT f-nil
   2207   ((parse "Z") (print "Z")) () ()
   2208 )
   2209 (define-full-operand S "Suffix for short format insns" (all-isas)
   2210   h-sint DFLT f-nil
   2211   ((parse "S") (print "S")) () ()
   2212 )
   2213 (define-full-operand Q "Suffix for quick format insns" (all-isas)
   2214   h-sint DFLT f-nil
   2215   ((parse "Q") (print "Q")) () ()
   2216 )
   2217 (define-full-operand G "Suffix for general format insns" (all-isas)
   2218   h-sint DFLT f-nil
   2219   ((parse "G") (print "G")) () ()
   2220 )
   2221 (define-full-operand X "Empty suffix" (all-isas)
   2222   h-sint DFLT f-nil
   2223   ((parse "X") (print "X")) () ()
   2224 )
   2225 (define-full-operand size "any size specifier" (all-isas)
   2226   h-sint DFLT f-nil
   2227   ((parse "size") (print "size")) () ()
   2228 )
   2229 ;-------------------------------------------------------------
   2230 ; Misc
   2231 ;-------------------------------------------------------------
   2232 
   2233 (dnop BitIndex "Bit Index for the next insn" (SEM-ONLY MACH32 m32c-isa) h-bit-index f-nil)
   2234 (dnop SrcIndex "Source Index for the next insn" (SEM-ONLY MACH32 m32c-isa) h-src-index f-nil)
   2235 (dnop DstIndex "Destination Index for the next insn" (SEM-ONLY MACH32 m32c-isa) h-dst-index f-nil)
   2236 (dnop NoRemainder "Place holder for when the remainder is not kept" (SEM-ONLY MACH32 m32c-isa) h-none f-nil)
   2237 
   2239 ;=============================================================
   2240 ; Derived Operands
   2241 
   2242 ; Memory reference macros that clip addresses appropriately.  Refer to
   2243 ; memory at ADDRESS in MODE, clipped appropriately for either the m16c
   2244 ; or m32c.
   2245 (define-pmacro (mem16 mode address)
   2246   (mem mode (and #xffff address)))
   2247 
   2248 (define-pmacro (mem20 mode address)
   2249   (mem mode (and #xfffff address)))
   2250 
   2251 (define-pmacro (mem32 mode address)
   2252   (mem mode (and #xffffff address)))
   2253 
   2254 ; Like mem16 and mem32, but takes MACH as a parameter.  MACH must be
   2255 ; either 16 or 32.
   2256 (define-pmacro (mem-mach mach mode address)
   2257   ((.sym mem mach) mode address))
   2258 
   2259 ;-------------------------------------------------------------
   2260 ; Source
   2261 ;-------------------------------------------------------------
   2262 ; Rn direct
   2263 ;-------------------------------------------------------------
   2264 
   2265 (define-pmacro (src16-Rn-direct-operand xmode)
   2266   (begin
   2267     (define-derived-operand
   2268       (name (.sym src16-Rn-direct- xmode))
   2269       (comment (.str "m16c Rn direct source " xmode))
   2270       (attrs (machine 16))
   2271       (mode xmode)
   2272       (args ((.sym Src16Rn xmode)))
   2273       (syntax (.str "$Src16Rn" xmode))
   2274       (base-ifield f-8-4)
   2275       (encoding (+ (f-8-2 0) (.sym Src16Rn xmode)))
   2276       (ifield-assertion (eq f-8-2 0))
   2277       (getter (trunc xmode (.sym Src16Rn xmode)))
   2278       (setter (set (.sym Src16Rn xmode) newval))
   2279     )
   2280   )
   2281 )
   2282 (src16-Rn-direct-operand QI)
   2283 (src16-Rn-direct-operand HI)
   2284 
   2285 (define-pmacro (src32-Rn-direct-operand group base xmode)
   2286   (begin
   2287     (define-derived-operand
   2288       (name (.sym src32-Rn-direct- group - xmode))
   2289       (comment (.str "m32c Rn direct source " xmode))
   2290       (attrs (machine 32))
   2291       (mode xmode)
   2292       (args ((.sym Src32Rn group xmode)))
   2293       (syntax (.str "$Src32Rn" group xmode))
   2294       (base-ifield (.sym f- base -11))
   2295       (encoding (+ ((.sym f- base -3) 4) (.sym Src32Rn group xmode)))
   2296       (ifield-assertion (eq (.sym f- base -3) 4))
   2297       (getter (trunc xmode (.sym Src32Rn group xmode)))
   2298       (setter (set (.sym Src32Rn group xmode) newval))
   2299     )
   2300   )
   2301 )
   2302 
   2303 (src32-Rn-direct-operand Unprefixed  1 QI)
   2304 (src32-Rn-direct-operand   Prefixed  9 QI)
   2305 (src32-Rn-direct-operand Unprefixed  1 HI)
   2306 (src32-Rn-direct-operand   Prefixed  9 HI)
   2307 (src32-Rn-direct-operand Unprefixed  1 SI)
   2308 (src32-Rn-direct-operand   Prefixed  9 SI)
   2309 
   2310 ;-------------------------------------------------------------
   2311 ; An direct
   2312 ;-------------------------------------------------------------
   2313 
   2314 (define-pmacro (src16-An-direct-operand xmode)
   2315   (begin
   2316     (define-derived-operand
   2317       (name (.sym src16-An-direct- xmode))
   2318       (comment (.str "m16c An direct destination " xmode))
   2319       (attrs (machine 16))
   2320       (mode xmode)
   2321       (args ((.sym Src16An xmode)))
   2322       (syntax (.str "$Src16An" xmode))
   2323       (base-ifield f-8-4)
   2324       (encoding (+ (f-8-2 1) (f-10-1 0) (.sym Src16An xmode)))
   2325       (ifield-assertion (andif (eq f-8-2 1) (eq f-10-1 0)))
   2326       (getter (trunc xmode (.sym Src16An xmode)))
   2327       (setter (set (.sym Src16An xmode) newval))
   2328     )
   2329   )
   2330 )
   2331 (src16-An-direct-operand QI)
   2332 (src16-An-direct-operand HI)
   2333 
   2334 (define-pmacro (src32-An-direct-operand group base1 base2 xmode)
   2335   (begin
   2336     (define-derived-operand
   2337       (name (.sym src32-An-direct- group - xmode))
   2338       (comment (.str "m32c An direct destination " xmode))
   2339       (attrs (machine 32))
   2340       (mode xmode)
   2341       (args ((.sym Src32An group xmode)))
   2342       (syntax (.str "$Src32An" group xmode))
   2343       (base-ifield (.sym f- base1 -11))
   2344       (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 1) (.sym Src32An group xmode)))
   2345       (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 1)))
   2346       (getter (trunc xmode (.sym Src32An group xmode)))
   2347       (setter (set (.sym Src32An group xmode) newval))
   2348     )
   2349   )
   2350 )
   2351 
   2352 (src32-An-direct-operand Unprefixed 1 10 QI)
   2353 (src32-An-direct-operand Unprefixed 1 10 HI)
   2354 (src32-An-direct-operand Unprefixed 1 10 SI)
   2355 (src32-An-direct-operand Prefixed   9 18 QI)
   2356 (src32-An-direct-operand Prefixed   9 18 HI)
   2357 (src32-An-direct-operand Prefixed   9 18 SI)
   2358 
   2359 ;-------------------------------------------------------------
   2360 ; An indirect
   2361 ;-------------------------------------------------------------
   2362 
   2363 (define-pmacro (src16-An-indirect-operand xmode)
   2364   (begin
   2365     (define-derived-operand
   2366       (name (.sym src16-An-indirect- xmode))
   2367       (comment (.str "m16c An indirect destination " xmode))
   2368       (attrs (machine 16))
   2369       (mode xmode)
   2370       (args (Src16An))
   2371       (syntax "[$Src16An]")
   2372       (base-ifield f-8-4)
   2373       (encoding (+ (f-8-2 1) (f-10-1 1) Src16An))
   2374       (ifield-assertion (andif (eq f-8-2 1) (eq f-10-1 1)))
   2375       (getter (mem16 xmode Src16An))
   2376       (setter (set (mem16 xmode Src16An) newval))
   2377     )
   2378   )
   2379 )
   2380 (src16-An-indirect-operand QI)
   2381 (src16-An-indirect-operand HI)
   2382 
   2383 (define-pmacro (src32-An-indirect-operand group base1 base2 xmode)
   2384   (begin
   2385     (define-derived-operand
   2386       (name (.sym src32-An-indirect- group - xmode))
   2387       (comment (.str "m32c An indirect destination " xmode))
   2388       (attrs (machine 32))
   2389       (mode xmode)
   2390       (args ((.sym Src32An group)))
   2391       (syntax (.str "[$Src32An" group "]"))
   2392       (base-ifield (.sym f- base1 -11))
   2393       (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 0) (.sym Src32An group)))
   2394       (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 0)))
   2395       (getter (c-call xmode (.str "operand_getter_" xmode) (.sym Src32An group)
   2396 		       (const 0)))
   2397       (setter (c-call DFLT (.str "operand_setter_" xmode)  newval
   2398 		      (.sym Src32An group) (const 0)))
   2399 ;      (getter (mem32 xmode (.sym Src32An group)))
   2400 ;      (setter (set (mem32 xmode (.sym Src32An group)) newval))
   2401     )
   2402   )
   2403 )
   2404 
   2405 (src32-An-indirect-operand Unprefixed 1 10 QI)
   2406 (src32-An-indirect-operand Unprefixed 1 10 HI)
   2407 (src32-An-indirect-operand Unprefixed 1 10 SI)
   2408 (src32-An-indirect-operand Prefixed   9 18 QI)
   2409 (src32-An-indirect-operand Prefixed   9 18 HI)
   2410 (src32-An-indirect-operand Prefixed   9 18 SI)
   2411 
   2412 ;-------------------------------------------------------------
   2413 ; dsp:d[r] relative
   2414 ;-------------------------------------------------------------
   2415 
   2416 (define-pmacro (src16-relative-operand xmode)
   2417   (begin
   2418     (define-derived-operand
   2419       (name (.sym src16-16-8-SB-relative- xmode))
   2420       (comment (.str "m16c dsp:8[sb] relative destination " xmode))
   2421       (attrs (machine 16))
   2422       (mode xmode)
   2423       (args (Dsp-16-u8))
   2424       (syntax "${Dsp-16-u8}[sb]")
   2425       (base-ifield f-8-4)
   2426       (encoding (+ (f-8-4 #xA) Dsp-16-u8))
   2427       (ifield-assertion (eq f-8-4 #xA))
   2428       (getter (mem16 xmode (add Dsp-16-u8 (reg h-sb))))
   2429       (setter (set (mem16 xmode (add Dsp-16-u8 (reg h-sb))) newval))
   2430     )
   2431     (define-derived-operand
   2432       (name (.sym src16-16-16-SB-relative- xmode))
   2433       (comment (.str "m16c dsp:16[sb] relative destination " xmode))
   2434       (attrs (machine 16))
   2435       (mode xmode)
   2436       (args (Dsp-16-u16))
   2437       (syntax "${Dsp-16-u16}[sb]")
   2438       (base-ifield f-8-4)
   2439       (encoding (+ (f-8-4 #xE) Dsp-16-u16))
   2440       (ifield-assertion (eq f-8-4 #xE))
   2441       (getter (mem16 xmode (add Dsp-16-u16 (reg h-sb))))
   2442       (setter (set (mem16 xmode (add Dsp-16-u16 (reg h-sb))) newval))
   2443     )
   2444     (define-derived-operand
   2445       (name (.sym src16-16-8-FB-relative- xmode))
   2446       (comment (.str "m16c dsp:8[fb] relative destination " xmode))
   2447       (attrs (machine 16))
   2448       (mode xmode)
   2449       (args (Dsp-16-s8))
   2450       (syntax "${Dsp-16-s8}[fb]")
   2451       (base-ifield f-8-4)
   2452       (encoding (+ (f-8-4 #xB) Dsp-16-s8))
   2453       (ifield-assertion (eq f-8-4 #xB))
   2454       (getter (mem16 xmode (add Dsp-16-s8 (reg h-fb))))
   2455       (setter (set (mem16 xmode (add Dsp-16-s8 (reg h-fb))) newval))
   2456     )
   2457     (define-derived-operand
   2458       (name (.sym src16-16-8-An-relative- xmode))
   2459       (comment (.str "m16c dsp:8[An] relative destination " xmode))
   2460       (attrs (machine 16))
   2461       (mode xmode)
   2462       (args (Src16An Dsp-16-u8))
   2463       (syntax "${Dsp-16-u8}[$Src16An]")
   2464       (base-ifield f-8-4)
   2465       (encoding (+ (f-8-2 2) (f-10-1 0) Dsp-16-u8 Src16An))
   2466       (ifield-assertion (andif (eq f-8-2 2) (eq f-10-1 0)))
   2467       (getter (mem16 xmode (add Dsp-16-u8 Src16An)))
   2468       (setter (set (mem16 xmode (add Dsp-16-u8 Src16An)) newval))
   2469     )
   2470     (define-derived-operand
   2471       (name (.sym src16-16-16-An-relative- xmode))
   2472       (comment (.str "m16c dsp:16[An] relative destination " xmode))
   2473       (attrs (machine 16))
   2474       (mode xmode)
   2475       (args (Src16An Dsp-16-u16))
   2476       (syntax "${Dsp-16-u16}[$Src16An]")
   2477       (base-ifield f-8-4)
   2478       (encoding (+ (f-8-2 3) (f-10-1 0) Dsp-16-u16 Src16An))
   2479       (ifield-assertion (andif (eq f-8-2 3) (eq f-10-1 0)))
   2480       (getter (mem16 xmode (add Dsp-16-u16 Src16An)))
   2481       (setter (set (mem16 xmode (add Dsp-16-u16 Src16An)) newval))
   2482     )
   2483     (define-derived-operand
   2484       (name (.sym src16-16-20-An-relative- xmode))
   2485       (comment (.str "m16c dsp:20[An] relative destination " xmode))
   2486       (attrs (machine 16))
   2487       (mode xmode)
   2488       (args (Src16An Dsp-16-u20))
   2489       (syntax "${Dsp-16-u20}[$Src16An]")
   2490       (base-ifield f-8-4)
   2491       (encoding (+ (f-8-2 3) (f-10-1 0) Dsp-16-u20 Src16An))
   2492       (ifield-assertion (andif (eq f-8-2 3) (eq f-10-1 0)))
   2493       (getter (mem20 xmode (add Dsp-16-u20 Src16An)))
   2494       (setter (set (mem20 xmode (add Dsp-16-u20 Src16An)) newval))
   2495     )
   2496   )
   2497 )
   2498 
   2499 (src16-relative-operand QI)
   2500 (src16-relative-operand HI)
   2501 
   2502 (define-pmacro (src32-relative-operand offset group base1 base2 xmode)
   2503   (begin
   2504     (define-derived-operand
   2505       (name (.sym src32- offset -8-SB-relative- group - xmode))
   2506       (comment (.str "m32c dsp:8[sb] relative destination " xmode))
   2507       (attrs (machine 32))
   2508       (mode xmode)
   2509       (args ((.sym Dsp- offset -u8)))
   2510       (syntax (.str "${Dsp-" offset "-u8}[sb]"))
   2511       (base-ifield (.sym f- base1 -11))
   2512       (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u8)))
   2513       (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 2)))
   2514       (getter (c-call xmode (.str "operand_getter_" xmode) sb (.sym Dsp- offset -u8)))
   2515       (setter (c-call DFLT (.str "operand_setter_" xmode) newval sb (.sym Dsp- offset -u8)))
   2516 ;       (getter (mem32 xmode (add (.sym Dsp- offset -u8) (reg h-sb))))
   2517 ;       (setter (set (mem32 xmode (add (.sym Dsp- offset -u8) (reg h-sb))) newval))
   2518     )
   2519     (define-derived-operand
   2520       (name (.sym src32- offset -16-SB-relative- group - xmode))
   2521       (comment (.str "m32c dsp:16[sb] relative destination " xmode))
   2522       (attrs (machine 32))
   2523       (mode xmode)
   2524       (args ((.sym Dsp- offset -u16)))
   2525       (syntax (.str "${Dsp-" offset "-u16}[sb]"))
   2526       (base-ifield (.sym f- base1 -11))
   2527       (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u16)))
   2528       (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 2)))
   2529       (getter (c-call xmode (.str "operand_getter_" xmode) sb (.sym Dsp- offset -u16)))
   2530       (setter (c-call DFLT (.str "operand_setter_" xmode) newval sb (.sym Dsp- offset -u16)))
   2531 ;       (getter (mem32 xmode (add (.sym Dsp- offset -u16) (reg h-sb))))
   2532 ;       (setter (set (mem32 xmode (add (.sym Dsp- offset -u16) (reg h-sb))) newval))
   2533     )
   2534     (define-derived-operand
   2535       (name (.sym src32- offset -8-FB-relative- group - xmode))
   2536       (comment (.str "m32c dsp:8[fb] relative destination " xmode))
   2537       (attrs (machine 32))
   2538       (mode xmode)
   2539       (args ((.sym Dsp- offset -s8)))
   2540       (syntax (.str "${Dsp-" offset "-s8}[fb]"))
   2541       (base-ifield (.sym f- base1 -11))
   2542       (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 3) (.sym Dsp- offset -s8)))
   2543       (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 3)))
   2544       (getter (c-call xmode (.str "operand_getter_" xmode) fb (.sym Dsp- offset -s8)))
   2545       (setter (c-call DFLT (.str "operand_setter_" xmode) newval fb (.sym Dsp- offset -s8)))
   2546 ;       (getter (mem32 xmode (add (.sym Dsp- offset -s8) (reg h-fb))))
   2547 ;       (setter (set (mem32 xmode (add (.sym Dsp- offset -s8) (reg h-fb))) newval))
   2548     )
   2549     (define-derived-operand
   2550       (name (.sym src32- offset -16-FB-relative- group - xmode))
   2551       (comment (.str "m32c dsp:16[fb] relative destination " xmode))
   2552       (attrs (machine 32))
   2553       (mode xmode)
   2554       (args ((.sym Dsp- offset -s16)))
   2555       (syntax (.str "${Dsp-" offset "-s16}[fb]"))
   2556       (base-ifield (.sym f- base1 -11))
   2557       (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 3) (.sym Dsp- offset -s16)))
   2558       (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 3)))
   2559       (getter (c-call xmode (.str "operand_getter_" xmode) fb (.sym Dsp- offset -s16)))
   2560       (setter (c-call DFLT (.str "operand_setter_" xmode) newval fb (.sym Dsp- offset -s16)))
   2561 ;       (getter (mem32 xmode (add (.sym Dsp- offset -s16) (reg h-fb))))
   2562 ;       (setter (set (mem32 xmode (add (.sym Dsp- offset -s16) (reg h-fb))) newval))
   2563     )
   2564     (define-derived-operand
   2565       (name (.sym src32- offset -8-An-relative- group - xmode))
   2566       (comment (.str "m32c dsp:8[An] relative destination " xmode))
   2567       (attrs (machine 32))
   2568       (mode xmode)
   2569       (args ((.sym Src32An group) (.sym Dsp- offset -u8)))
   2570       (syntax (.str "${Dsp-" offset "-u8}[$Src32An" group "]"))
   2571       (base-ifield (.sym f- base1 -11))
   2572       (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u8) (.sym Src32An group)))
   2573       (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -1) 0)))
   2574       (getter (c-call xmode (.str "operand_getter_" xmode) (.sym Src32An group) (.sym Dsp- offset -u8)))
   2575       (setter (c-call DFLT (.str "operand_setter_" xmode) newval (.sym Src32An group) (.sym Dsp- offset -u8)))
   2576 ;       (getter (mem32 xmode (add (.sym Dsp- offset -u8) (.sym Src32An group))))
   2577 ;       (setter (set (mem32 xmode (add (.sym Dsp- offset -u8) (.sym Src32An group))) newval))
   2578     )
   2579     (define-derived-operand
   2580       (name (.sym src32- offset -16-An-relative- group - xmode))
   2581       (comment (.str "m32c dsp:16[An] relative destination " xmode))
   2582       (attrs (machine 32))
   2583       (mode xmode)
   2584       (args ((.sym Src32An group) (.sym Dsp- offset -u16)))
   2585       (syntax (.str "${Dsp-" offset "-u16}[$Src32An" group "]"))
   2586       (base-ifield (.sym f- base1 -11))
   2587       (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u16) (.sym Src32An group)))
   2588       (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -1) 0)))
   2589       (getter (c-call xmode (.str "operand_getter_" xmode) (.sym Src32An group) (.sym Dsp- offset -u16)))
   2590       (setter (c-call DFLT (.str "operand_setter_" xmode) newval (.sym Src32An group) (.sym Dsp- offset -u16)))
   2591 ;       (getter (mem32 xmode (add (.sym Dsp- offset -u16) (.sym Src32An group))))
   2592 ;       (setter (set (mem32 xmode (add (.sym Dsp- offset -u16) (.sym Src32An group))) newval))
   2593     )
   2594     (define-derived-operand
   2595       (name (.sym src32- offset -24-An-relative- group - xmode))
   2596       (comment (.str "m32c dsp:16[An] relative destination " xmode))
   2597       (attrs (machine 32))
   2598       (mode xmode)
   2599       (args ((.sym Src32An group) (.sym Dsp- offset -u24)))
   2600       (syntax (.str "${Dsp-" offset "-u24}[$Src32An" group "]"))
   2601       (base-ifield (.sym f- base1 -11))
   2602       (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u24) (.sym Src32An group)))
   2603       (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -1) 0)))
   2604       (getter (c-call xmode (.str "operand_getter_" xmode) (.sym Src32An group) (.sym Dsp- offset -u24) ))
   2605       (setter (c-call DFLT (.str "operand_setter_" xmode) newval (.sym Src32An group) (.sym Dsp- offset -u24)))
   2606 ;       (getter (mem32 xmode (add (.sym Dsp- offset -u24) (.sym Src32An group))))
   2607 ;       (setter (set (mem32 xmode (add (.sym Dsp- offset -u24) (.sym Src32An group))) newval))
   2608     )
   2609   )
   2610 )
   2611 
   2612 (src32-relative-operand 16 Unprefixed 1 10 QI)
   2613 (src32-relative-operand 16 Unprefixed 1 10 HI)
   2614 (src32-relative-operand 16 Unprefixed 1 10 SI)
   2615 (src32-relative-operand 24 Prefixed   9 18 QI)
   2616 (src32-relative-operand 24 Prefixed   9 18 HI)
   2617 (src32-relative-operand 24 Prefixed   9 18 SI)
   2618 
   2619 ;-------------------------------------------------------------
   2620 ; Absolute address
   2621 ;-------------------------------------------------------------
   2622 
   2623 (define-pmacro (src16-absolute xmode)
   2624   (begin
   2625     (define-derived-operand
   2626       (name (.sym src16-16-16-absolute- xmode))
   2627       (comment (.str "m16c absolute address " xmode))
   2628       (attrs (machine 16))
   2629       (mode xmode)
   2630       (args (Dsp-16-u16))
   2631       (syntax (.str "${Dsp-16-u16}"))
   2632       (base-ifield f-8-4)
   2633       (encoding (+ (f-8-4 #xF) Dsp-16-u16))
   2634       (ifield-assertion (eq f-8-4 #xF))
   2635       (getter (mem16 xmode Dsp-16-u16))
   2636       (setter (set (mem16 xmode Dsp-16-u16) newval))
   2637     )
   2638   )
   2639 )
   2640 
   2641 (src16-absolute QI)
   2642 (src16-absolute HI)
   2643 
   2644 (define-pmacro (src32-absolute offset group base1 base2 xmode)
   2645   (begin
   2646     (define-derived-operand
   2647       (name (.sym src32- offset -16-absolute- group - xmode))
   2648       (comment (.str "m32c absolute address " xmode))
   2649       (attrs (machine 32))
   2650       (mode xmode)
   2651       (args ((.sym Dsp- offset -u16)))
   2652       (syntax (.str "${Dsp-" offset "-u16}"))
   2653       (base-ifield (.sym f- base1 -11))
   2654       (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 3) (.sym Dsp- offset -u16)))
   2655       (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 3)))
   2656       (getter (c-call xmode (.str "operand_getter_" xmode) (const 0) (.sym Dsp- offset -u16)))
   2657       (setter (c-call DFLT (.str "operand_setter_" xmode) newval (const 0) (.sym Dsp- offset -u16)))
   2658 ;      (getter (mem32 xmode (.sym Dsp- offset -u16)))
   2659 ;      (setter (set (mem32 xmode (.sym Dsp- offset -u16)) newval))
   2660     )
   2661     (define-derived-operand
   2662       (name (.sym src32- offset -24-absolute- group - xmode))
   2663       (comment (.str "m32c absolute address " xmode))
   2664       (attrs (machine 32))
   2665       (mode xmode)
   2666       (args ((.sym Dsp- offset -u24)))
   2667       (syntax (.str "${Dsp-" offset "-u24}"))
   2668       (base-ifield (.sym f- base1 -11))
   2669       (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u24)))
   2670       (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 2)))
   2671       (getter (c-call xmode (.str "operand_getter_" xmode) (const 0) (.sym Dsp- offset -u24)))
   2672       (setter (c-call DFLT (.str "operand_setter_" xmode) newval (const 0) (.sym Dsp- offset -u24)))
   2673 ;      (getter (mem32 xmode (.sym Dsp- offset -u24)))
   2674 ;      (setter (set (mem32 xmode (.sym Dsp- offset -u24)) newval))
   2675     )
   2676   )
   2677 )
   2678 
   2679 (src32-absolute 16 Unprefixed 1 10 QI)
   2680 (src32-absolute 16 Unprefixed 1 10 HI)
   2681 (src32-absolute 16 Unprefixed 1 10 SI)
   2682 (src32-absolute 24 Prefixed   9 18 QI)
   2683 (src32-absolute 24 Prefixed   9 18 HI)
   2684 (src32-absolute 24 Prefixed   9 18 SI)
   2685 
   2686 ;-------------------------------------------------------------
   2687 ; An indirect indirect
   2688 ;
   2689 ; Double indirect addressing uses the lower 3 bytes of the value stored
   2690 ; at the address referenced by 'op' as the effective address.
   2691 ;-------------------------------------------------------------
   2692 
   2693 (define-pmacro (indirect-addr op) (and USI (mem32 USI op) #x00ffffff))
   2694 
   2695 ; (define-pmacro (src-An-indirect-indirect-operand xmode)
   2696 ;   (define-derived-operand
   2697 ;     (name (.sym src32-An-indirect-indirect- xmode))
   2698 ;     (comment (.str "m32c An indirect indirect destination " xmode))
   2699 ;     (attrs (machine 32))
   2700 ;     (mode xmode)
   2701 ;     (args (Src32AnPrefixed))
   2702 ;     (syntax (.str "[[$Src32AnPrefixed]]"))
   2703 ;     (base-ifield f-9-11)
   2704 ;     (encoding (+ (f-9-3 0) (f-18-1 0) Src32AnPrefixed))
   2705 ;     (ifield-assertion (andif (eq f-9-3 0) (eq f-18-1 0)))
   2706 ;     (getter (mem32 xmode (indirect-addr Src32AnPrefixed)))
   2707 ;     (setter (set (mem32 xmode (indirect-addr Src32AnPrefixed)) newval))
   2708 ;   )
   2709 ; )
   2710 
   2711 ; (src-An-indirect-indirect-operand QI)
   2712 ; (src-An-indirect-indirect-operand HI)
   2713 ; (src-An-indirect-indirect-operand SI)
   2714 
   2715 ;-------------------------------------------------------------
   2716 ; Relative indirect
   2717 ;-------------------------------------------------------------
   2718 
   2719 (define-pmacro (src-relative-indirect-operand xmode)
   2720   (begin
   2721 ;     (define-derived-operand
   2722 ;       (name (.sym src32-24-8-SB-relative-indirect- xmode))
   2723 ;       (comment (.str "m32c dsp:8[sb] relative source " xmode))
   2724 ;       (attrs (machine 32))
   2725 ;       (mode xmode)
   2726 ;       (args (Dsp-24-u8))
   2727 ;       (syntax "[${Dsp-24-u8}[sb]]")
   2728 ;       (base-ifield f-9-11)
   2729 ;       (encoding (+ (f-9-3 1) (f-18-2 2) Dsp-24-u8))
   2730 ;       (ifield-assertion (andif (eq f-9-3 1) (eq f-18-2 2)))
   2731 ;       (getter (mem32 xmode (indirect-addr (add Dsp-24-u8 (reg h-sb)))))
   2732 ;       (setter (set (mem32 xmode (indirect-addr (add Dsp-24-u8 (reg h-sb)))) newval))
   2733 ;     )
   2734 ;     (define-derived-operand
   2735 ;       (name (.sym src32-24-16-SB-relative-indirect- xmode))
   2736 ;       (comment (.str "m32c dsp:16[sb] relative source " xmode))
   2737 ;       (attrs (machine 32))
   2738 ;       (mode xmode)
   2739 ;       (args (Dsp-24-u16))
   2740 ;       (syntax "[${Dsp-24-u16}[sb]]")
   2741 ;       (base-ifield f-9-11)
   2742 ;       (encoding (+ (f-9-3 2) (f-18-2 2) Dsp-24-u16))
   2743 ;       (ifield-assertion (andif (eq f-9-3 2) (eq f-18-2 2)))
   2744 ;       (getter (mem32 xmode (indirect-addr (add Dsp-24-u16 (reg h-sb)))))
   2745 ;       (setter (set (mem32 xmode (indirect-addr (add Dsp-24-u16 (reg h-sb)))) newval))
   2746 ;     )
   2747 ;     (define-derived-operand
   2748 ;       (name (.sym src32-24-8-FB-relative-indirect- xmode))
   2749 ;       (comment (.str "m32c dsp:8[fb] relative source " xmode))
   2750 ;       (attrs (machine 32))
   2751 ;       (mode xmode)
   2752 ;       (args (Dsp-24-s8))
   2753 ;       (syntax "[${Dsp-24-s8}[fb]]")
   2754 ;       (base-ifield f-9-11)
   2755 ;       (encoding (+ (f-9-3 1) (f-18-2 3) Dsp-24-s8))
   2756 ;       (ifield-assertion (andif (eq f-9-3 1) (eq f-18-2 3)))
   2757 ;       (getter (mem32 xmode (indirect-addr (add Dsp-24-s8 (reg h-fb)))))
   2758 ;       (setter (set (mem32 xmode (indirect-addr (add Dsp-24-s8 (reg h-fb)))) newval))
   2759 ;     )
   2760 ;     (define-derived-operand
   2761 ;       (name (.sym src32-24-16-FB-relative-indirect- xmode))
   2762 ;       (comment (.str "m32c dsp:16[fb] relative source " xmode))
   2763 ;       (attrs (machine 32))
   2764 ;       (mode xmode)
   2765 ;       (args (Dsp-24-s16))
   2766 ;       (syntax "[${Dsp-24-s16}[fb]]")
   2767 ;       (base-ifield f-9-11)
   2768 ;       (encoding (+ (f-9-3 2) (f-18-2 3) Dsp-24-s16))
   2769 ;       (ifield-assertion (andif (eq f-9-3 2) (eq f-18-2 3)))
   2770 ;       (getter (mem32 xmode (indirect-addr (add Dsp-24-s16 (reg h-fb)))))
   2771 ;       (setter (set (mem32 xmode (indirect-addr (add Dsp-24-s16 (reg h-fb)))) newval))
   2772 ;     )
   2773 ;     (define-derived-operand
   2774 ;       (name (.sym src32-24-8-An-relative-indirect- xmode))
   2775 ;       (comment (.str "m32c dsp:8[An] relative indirect source " xmode))
   2776 ;       (attrs (machine 32))
   2777 ;       (mode xmode)
   2778 ;       (args (Src32AnPrefixed Dsp-24-u8))
   2779 ;       (syntax "[${Dsp-24-u8}[$Src32AnPrefixed]]")
   2780 ;       (base-ifield f-9-11)
   2781 ;       (encoding (+ (f-9-3 1) (f-18-1 0) Dsp-24-u8 Src32AnPrefixed))
   2782 ;       (ifield-assertion (andif (eq f-9-3 1) (eq f-18-1 0)))
   2783 ;       (getter (mem32 xmode (indirect-addr (add Dsp-24-u8 Src32AnPrefixed))))
   2784 ;       (setter (set (mem32 xmode (indirect-addr (add Dsp-24-u8 Src32AnPrefixed))) newval))
   2785 ;     )
   2786 ;     (define-derived-operand
   2787 ;       (name (.sym src32-24-16-An-relative-indirect- xmode))
   2788 ;       (comment (.str "m32c dsp:16[An] relative source " xmode))
   2789 ;       (attrs (machine 32))
   2790 ;       (mode xmode)
   2791 ;       (args (Src32AnPrefixed Dsp-24-u16))
   2792 ;       (syntax "[${Dsp-24-u16}[$Src32AnPrefixed]]")
   2793 ;       (base-ifield f-9-11)
   2794 ;       (encoding (+ (f-9-3 2) (f-18-1 0) Dsp-24-u16 Src32AnPrefixed))
   2795 ;       (ifield-assertion (andif (eq f-9-3 2) (eq f-18-1 0)))
   2796 ;       (getter (mem32 xmode (indirect-addr (add Dsp-24-u16 Src32AnPrefixed))))
   2797 ;       (setter (set (mem32 xmode (indirect-addr (add Dsp-24-u16 Src32AnPrefixed))) newval))
   2798 ;     )
   2799 ;     (define-derived-operand
   2800 ;       (name (.sym src32-24-24-An-relative-indirect- xmode))
   2801 ;       (comment (.str "m32c dsp:24[An] relative source " xmode))
   2802 ;       (attrs (machine 32))
   2803 ;       (mode xmode)
   2804 ;       (args (Src32AnPrefixed Dsp-24-u24))
   2805 ;       (syntax "[${Dsp-24-u24}[$Src32AnPrefixed]]")
   2806 ;       (base-ifield f-9-11)
   2807 ;       (encoding (+ (f-9-3 3) (f-18-1 0) Dsp-24-u24 Src32AnPrefixed))
   2808 ;       (ifield-assertion (andif (eq f-9-3 3) (eq f-18-1 0)))
   2809 ;       (getter (mem32 xmode (indirect-addr (add Dsp-24-u24 Src32AnPrefixed))))
   2810 ;       (setter (set (mem32 xmode (indirect-addr (add Dsp-24-u24 Src32AnPrefixed))) newval))
   2811 ;     )
   2812   )
   2813 )
   2814 
   2815 ; (src-relative-indirect-operand QI)
   2816 ; (src-relative-indirect-operand HI)
   2817 ; (src-relative-indirect-operand SI)
   2818 
   2819 ;-------------------------------------------------------------
   2820 ; Absolute Indirect address
   2821 ;-------------------------------------------------------------
   2822 
   2823 (define-pmacro (src32-absolute-indirect offset base1 base2 xmode)
   2824   (begin
   2825 ;     (define-derived-operand
   2826 ;       (name (.sym src32- offset -16-absolute-indirect-derived- xmode))
   2827 ;       (comment (.str "m32c absolute indirect address " xmode))
   2828 ;       (attrs (machine 32))
   2829 ;       (mode xmode)
   2830 ;       (args ((.sym Dsp- offset -u16)))
   2831 ;       (syntax (.str "[${Dsp-" offset "-u16}]"))
   2832 ;       (base-ifield (.sym f- base1 -11))
   2833 ;       (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 3) (.sym Dsp- offset -u16)))
   2834 ;       (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 3)))
   2835 ;       (getter (mem32 xmode (indirect-addr (.sym Dsp- offset -u16))))
   2836 ;       (setter (set (mem32 xmode (indirect-addr (.sym Dsp- offset -u16))) newval))
   2837 ;     )
   2838 ;     (define-derived-operand
   2839 ;       (name (.sym src32- offset -24-absolute-indirect-derived- xmode))
   2840 ;       (comment (.str "m32c absolute indirect address " xmode))
   2841 ;       (attrs (machine 32))
   2842 ;       (mode xmode)
   2843 ;       (args ((.sym Dsp- offset -u24)))
   2844 ;       (syntax (.str "[${Dsp-" offset "-u24}]"))
   2845 ;       (base-ifield (.sym f- base1 -11))
   2846 ;       (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u24)))
   2847 ;       (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 2)))
   2848 ;       (getter (mem32 xmode (indirect-addr (.sym Dsp- offset -u24))))
   2849 ;       (setter (set (mem32 xmode (indirect-addr (.sym Dsp- offset -u24))) newval))
   2850 ;     )
   2851   )
   2852 )
   2853 
   2854 (src32-absolute-indirect 24 9 18 QI)
   2855 (src32-absolute-indirect 24 9 18 HI)
   2856 (src32-absolute-indirect 24 9 18 SI)
   2857 
   2858 ;-------------------------------------------------------------
   2859 ; Register relative source operands for short format insns
   2860 ;-------------------------------------------------------------
   2861 
   2862 (define-pmacro (src-2-S-operands mach xmode base opc1 opc2 opc3)
   2863   (begin
   2864     (define-derived-operand
   2865       (name (.sym src mach -2-S-8-SB-relative- xmode))
   2866       (comment (.str "m" mach "c SB relative address"))
   2867       (attrs (machine mach))
   2868       (mode xmode)
   2869       (args (Dsp-8-u8))
   2870       (syntax "${Dsp-8-u8}[sb]")
   2871       (base-ifield (.sym f- base -2))
   2872       (encoding (+ ((.sym f- base -2) opc1) Dsp-8-u8))
   2873       (ifield-assertion (eq (.sym f- base -2) opc1))
   2874       (getter (c-call xmode (.str "operand_getter_" xmode) sb Dsp-8-u8))
   2875       (setter (c-call DFLT (.str "operand_setter_" xmode) newval sb Dsp-8-u8))
   2876 ;       (getter (mem-mach mach xmode (indirect-addr (add (reg h-sb) Dsp-8-u8))))
   2877 ;       (setter (set (mem-mach mach xmode (indirect-addr (add (reg h-sb) Dsp-8-u8))) newval))
   2878       )
   2879     (define-derived-operand
   2880       (name (.sym src mach -2-S-8-FB-relative- xmode))
   2881       (comment (.str "m" mach "c FB relative address"))
   2882       (attrs (machine mach))
   2883       (mode xmode)
   2884       (args (Dsp-8-s8))
   2885       (syntax "${Dsp-8-s8}[fb]")
   2886       (base-ifield (.sym f- base -2))
   2887       (encoding (+ ((.sym f- base -2) opc2) Dsp-8-s8))
   2888       (ifield-assertion (eq (.sym f- base -2) opc2))
   2889       (getter (c-call xmode (.str "operand_getter_" xmode) fb Dsp-8-s8))
   2890       (setter (c-call DFLT (.str "operand_setter_" xmode) newval fb Dsp-8-s8))
   2891 ;       (getter (mem-mach mach xmode (indirect-addr (add (reg h-fb) Dsp-8-s8))))
   2892 ;       (setter (set (mem-mach mach xmode (indirect-addr (add (reg h-fb) Dsp-8-s8))) newval))
   2893       )
   2894     (define-derived-operand
   2895       (name (.sym src mach -2-S-16-absolute- xmode))
   2896       (comment (.str "m" mach "c absolute address"))
   2897       (attrs (machine mach))
   2898       (mode xmode)
   2899       (args (Dsp-8-u16))
   2900       (syntax "${Dsp-8-u16}")
   2901       (base-ifield (.sym f- base -2))
   2902       (encoding (+ ((.sym f- base -2) opc3) Dsp-8-u16))
   2903       (ifield-assertion (eq (.sym f- base -2) opc3))
   2904       (getter (c-call xmode (.str "operand_getter_" xmode) (const 0) Dsp-8-u16))
   2905       (setter (c-call DFLT (.str "operand_setter_" xmode) newval (const 0) Dsp-8-u16))
   2906 ;      (getter (mem-mach mach xmode Dsp-8-u16))
   2907 ;      (setter (set (mem-mach mach xmode Dsp-8-u16) newval))
   2908       )
   2909   )
   2910 )
   2911 
   2912 (src-2-S-operands 16 QI 6 1 2 3)
   2913 (src-2-S-operands 32 QI 2 2 3 1)
   2914 (src-2-S-operands 32 HI 2 2 3 1)
   2915 
   2916 ;=============================================================
   2917 ; Derived Operands
   2918 ;-------------------------------------------------------------
   2919 ; Destination
   2920 ;-------------------------------------------------------------
   2921 ; Rn direct
   2922 ;-------------------------------------------------------------
   2923 
   2924 (define-pmacro (dst16-Rn-direct-operand xmode)
   2925   (begin
   2926     (define-derived-operand
   2927       (name (.sym dst16-Rn-direct- xmode))
   2928       (comment (.str "m16c Rn direct destination " xmode))
   2929       (attrs (machine 16))
   2930       (mode xmode)
   2931       (args ((.sym Dst16Rn xmode)))
   2932       (syntax (.str "$Dst16Rn" xmode))
   2933       (base-ifield f-12-4)
   2934       (encoding (+ (f-12-2 0) (.sym Dst16Rn xmode)))
   2935       (ifield-assertion (eq f-12-2 0))
   2936       (getter (trunc xmode (.sym Dst16Rn xmode)))
   2937       (setter (set (.sym Dst16Rn xmode) newval))
   2938     )
   2939   )
   2940 )
   2941 
   2942 (dst16-Rn-direct-operand QI)
   2943 (dst16-Rn-direct-operand HI)
   2944 (dst16-Rn-direct-operand SI)
   2945 
   2946 (define-derived-operand
   2947   (name dst16-Rn-direct-Ext-QI)
   2948   (comment "m16c Rn direct destination QI")
   2949   (attrs (machine 16))
   2950   (mode HI)
   2951   (args (Dst16RnExtQI))
   2952   (syntax "$Dst16RnExtQI")
   2953   (base-ifield f-12-4)
   2954   (encoding (+ (f-12-2 0) Dst16RnExtQI (f-15-1 0)))
   2955   (ifield-assertion (andif (eq f-12-2 0) (eq f-15-1 0)))
   2956   (getter (trunc QI (.sym Dst16RnExtQI)))
   2957   (setter (set Dst16RnExtQI newval))
   2958 )
   2959 
   2960 (define-pmacro (dst32-Rn-direct-operand group base xmode)
   2961   (begin
   2962     (define-derived-operand
   2963       (name (.sym dst32-Rn-direct- group - xmode))
   2964       (comment (.str "m32c Rn direct destination " xmode))
   2965       (attrs (machine 32))
   2966       (mode xmode)
   2967       (args ((.sym Dst32Rn group xmode)))
   2968       (syntax (.str "$Dst32Rn" group xmode))
   2969       (base-ifield (.sym f- base -6))
   2970       (encoding (+ ((.sym f- base -3) 4) (.sym Dst32Rn group xmode)))
   2971       (ifield-assertion (eq (.sym f- base -3) 4))
   2972       (getter (trunc xmode (.sym Dst32Rn group xmode)))
   2973       (setter (set (.sym Dst32Rn group xmode) newval))
   2974     )
   2975   )
   2976 )
   2977 
   2978 (dst32-Rn-direct-operand   Unprefixed  4 QI)
   2979 (dst32-Rn-direct-operand     Prefixed 12 QI)
   2980 (dst32-Rn-direct-operand   Unprefixed  4 HI)
   2981 (dst32-Rn-direct-operand     Prefixed 12 HI)
   2982 (dst32-Rn-direct-operand   Unprefixed  4 SI)
   2983 (dst32-Rn-direct-operand     Prefixed 12 SI)
   2984 
   2985 (define-pmacro (dst32-Rn-direct-Ext-operand group base1 base2 smode dmode)
   2986   (begin
   2987     (define-derived-operand
   2988       (name (.sym dst32-Rn-direct- group - smode))
   2989       (comment (.str "m32c Rn direct destination " smode))
   2990       (attrs (machine 32))
   2991       (mode dmode)
   2992       (args ((.sym Dst32Rn group smode)))
   2993       (syntax (.str "$Dst32Rn" group smode))
   2994       (base-ifield (.sym f- base1 -6))
   2995       (encoding (+ ((.sym f- base1 -3) 4) ((.sym f- base2 -1) 1) (.sym Dst32Rn group smode)))
   2996       (ifield-assertion (andif (eq (.sym f- base1 -3) 4) (eq (.sym f- base2 -1) 1)))
   2997       (getter (trunc smode (.sym Dst32Rn group smode)))
   2998       (setter (set (.sym Dst32Rn group smode) newval))
   2999     )
   3000   )
   3001 )
   3002 
   3003 (dst32-Rn-direct-Ext-operand ExtUnprefixed 4 8 QI HI)
   3004 (dst32-Rn-direct-Ext-operand ExtUnprefixed 4 8 HI SI)
   3005 
   3006 (define-derived-operand
   3007   (name dst32-R3-direct-Unprefixed-HI)
   3008   (comment "m32c R3 direct HI")
   3009   (attrs (machine 32))
   3010   (mode HI)
   3011   (args (R3))
   3012   (syntax "$R3")
   3013   (base-ifield f-4-6)
   3014   (encoding (+ (f-4-3 4) (f-8-2 #x1)))
   3015   (ifield-assertion (andif (eq f-4-3 4) (eq f-8-2 #x1)))
   3016   (getter (trunc HI R3))
   3017   (setter (set R3 newval))
   3018 )
   3019 ;-------------------------------------------------------------
   3020 ; An direct
   3021 ;-------------------------------------------------------------
   3022 
   3023 (define-pmacro (dst16-An-direct-operand xmode)
   3024   (begin
   3025     (define-derived-operand
   3026       (name (.sym dst16-An-direct- xmode))
   3027       (comment (.str "m16c An direct destination " xmode))
   3028       (attrs (machine 16))
   3029       (mode xmode)
   3030       (args ((.sym Dst16An xmode)))
   3031       (syntax (.str "$Dst16An" xmode))
   3032       (base-ifield f-12-4)
   3033       (encoding (+ (f-12-2 1) (f-14-1 0) (.sym Dst16An xmode)))
   3034       (ifield-assertion (andif (eq f-12-2 1) (eq f-14-1 0)))
   3035       (getter (trunc xmode (.sym Dst16An xmode)))
   3036       (setter (set (.sym Dst16An xmode) newval))
   3037     )
   3038   )
   3039 )
   3040 
   3041 (dst16-An-direct-operand QI)
   3042 (dst16-An-direct-operand HI)
   3043 (dst16-An-direct-operand SI)
   3044 
   3045 (define-pmacro (dst32-An-direct-operand group base1 base2 xmode)
   3046   (begin
   3047     (define-derived-operand
   3048       (name (.sym dst32-An-direct- group - xmode))
   3049       (comment (.str "m32c An direct destination " xmode))
   3050       (attrs (machine 32))
   3051       (mode xmode)
   3052       (args ((.sym Dst32An group xmode)))
   3053       (syntax (.str "$Dst32An" group xmode))
   3054       (base-ifield (.sym f- base1 -6))
   3055       (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 1) (.sym Dst32An group xmode)))
   3056       (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 1)))
   3057       (getter (trunc xmode (.sym Dst32An group xmode)))
   3058       (setter (set (.sym Dst32An group xmode) newval))
   3059     )
   3060   )
   3061 )
   3062 
   3063 (dst32-An-direct-operand Unprefixed  4  8 QI)
   3064 (dst32-An-direct-operand   Prefixed 12 16 QI)
   3065 (dst32-An-direct-operand Unprefixed  4  8 HI)
   3066 (dst32-An-direct-operand   Prefixed 12 16 HI)
   3067 (dst32-An-direct-operand Unprefixed  4  8 SI)
   3068 (dst32-An-direct-operand   Prefixed 12 16 SI)
   3069 
   3070 ;-------------------------------------------------------------
   3071 ; An indirect
   3072 ;-------------------------------------------------------------
   3073 
   3074 (define-pmacro (dst16-An-indirect-operand xmode)
   3075   (begin
   3076     (define-derived-operand
   3077       (name (.sym dst16-An-indirect- xmode))
   3078       (comment (.str "m16c An indirect destination " xmode))
   3079       (attrs (machine 16))
   3080       (mode xmode)
   3081       (args (Dst16An))
   3082       (syntax "[$Dst16An]")
   3083       (base-ifield f-12-4)
   3084       (encoding (+ (f-12-2 1) (f-14-1 1) Dst16An))
   3085       (ifield-assertion (andif (eq f-12-2 1) (eq f-14-1 1)))
   3086       (getter (mem16 xmode Dst16An))
   3087       (setter (set (mem16 xmode Dst16An) newval))
   3088     )
   3089   )
   3090 )
   3091 
   3092 (dst16-An-indirect-operand QI)
   3093 (dst16-An-indirect-operand HI)
   3094 (dst16-An-indirect-operand SI)
   3095 
   3096 (define-derived-operand
   3097   (name dst16-An-indirect-Ext-QI)
   3098   (comment "m16c An indirect destination QI")
   3099   (attrs (machine 16))
   3100   (mode HI)
   3101   (args (Dst16An))
   3102   (syntax "[$Dst16An]")
   3103   (base-ifield f-12-4)
   3104   (encoding (+ (f-12-2 1) (f-14-1 1) Dst16An))
   3105   (ifield-assertion (andif (eq f-12-2 1) (eq f-14-1 1)))
   3106   (getter (mem16 QI Dst16An))
   3107   (setter (set (mem16 HI Dst16An) newval))
   3108 )
   3109 
   3110 (define-pmacro (dst32-An-indirect-operand group base1 base2 smode dmode)
   3111   (begin
   3112     (define-derived-operand
   3113       (name (.sym dst32-An-indirect- group - smode))
   3114       (comment (.str "m32c An indirect destination " smode))
   3115       (attrs (machine 32))
   3116       (mode dmode)
   3117       (args ((.sym Dst32An group)))
   3118       (syntax (.str "[$Dst32An" group "]"))
   3119       (base-ifield (.sym f- base1 -6))
   3120       (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 0) (.sym Dst32An group)))
   3121       (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 0)))
   3122       (getter (c-call dmode (.str "operand_getter_" dmode) (.sym Dst32An group)
   3123 		       (const 0)))
   3124       (setter (c-call DFLT (.str "operand_setter_" dmode)  newval
   3125 		      (.sym Dst32An group) (const 0)))
   3126 ;      (getter (mem32 smode (.sym Dst32An group)))
   3127 ;      (setter (set (mem32 dmode (.sym Dst32An group)) newval))
   3128     )
   3129   )
   3130 )
   3131 
   3132 (dst32-An-indirect-operand    Unprefixed  4  8 QI QI)
   3133 (dst32-An-indirect-operand      Prefixed 12 16 QI QI)
   3134 (dst32-An-indirect-operand    Unprefixed  4  8 HI HI)
   3135 (dst32-An-indirect-operand      Prefixed 12 16 HI HI)
   3136 (dst32-An-indirect-operand    Unprefixed  4  8 SI SI)
   3137 (dst32-An-indirect-operand      Prefixed 12 16 SI SI)
   3138 (dst32-An-indirect-operand ExtUnprefixed  4  8 QI HI)
   3139 (dst32-An-indirect-operand ExtUnprefixed  4  8 HI SI)
   3140 
   3141 ;-------------------------------------------------------------
   3142 ; dsp:d[r] relative
   3143 ;-------------------------------------------------------------
   3144 
   3145 (define-pmacro (dst16-relative-operand offset xmode)
   3146   (begin
   3147     (define-derived-operand
   3148       (name (.sym dst16- offset -8-SB-relative- xmode))
   3149       (comment (.str "m16c dsp:8[sb] relative destination " xmode))
   3150       (attrs (machine 16))
   3151       (mode xmode)
   3152       (args ((.sym Dsp- offset -u8)))
   3153       (syntax (.str "${Dsp-" offset "-u8}[sb]"))
   3154       (base-ifield f-12-4)
   3155       (encoding (+ (f-12-4 #xA) (.sym Dsp- offset -u8)))
   3156       (ifield-assertion (eq f-12-4 #xA))
   3157       (getter (mem16 xmode (add (.sym Dsp- offset -u8) (reg h-sb))))
   3158       (setter (set (mem16 xmode (add (.sym Dsp- offset -u8) (reg h-sb))) newval))
   3159     )
   3160     (define-derived-operand
   3161       (name (.sym dst16- offset -16-SB-relative- xmode))
   3162       (comment (.str "m16c dsp:16[sb] relative destination " xmode))
   3163       (attrs (machine 16))
   3164       (mode xmode)
   3165       (args ((.sym Dsp- offset -u16)))
   3166       (syntax (.str "${Dsp-" offset "-u16}[sb]"))
   3167       (base-ifield f-12-4)
   3168       (encoding (+ (f-12-4 #xE) (.sym Dsp- offset -u16)))
   3169       (ifield-assertion (eq f-12-4 #xE))
   3170       (getter (mem16 xmode (add (.sym Dsp- offset -u16) (reg h-sb))))
   3171       (setter (set (mem16 xmode (add (.sym Dsp- offset -u16) (reg h-sb))) newval))
   3172     )
   3173     (define-derived-operand
   3174       (name (.sym dst16- offset -8-FB-relative- xmode))
   3175       (comment (.str "m16c dsp:8[fb] relative destination " xmode))
   3176       (attrs (machine 16))
   3177       (mode xmode)
   3178       (args ((.sym Dsp- offset -s8)))
   3179       (syntax (.str "${Dsp-" offset "-s8}[fb]"))
   3180       (base-ifield f-12-4)
   3181       (encoding (+ (f-12-4 #xB) (.sym Dsp- offset -s8)))
   3182       (ifield-assertion (eq f-12-4 #xB))
   3183       (getter (mem16 xmode (add (.sym Dsp- offset -s8) (reg h-fb))))
   3184       (setter (set (mem16 xmode (add (.sym Dsp- offset -s8) (reg h-fb))) newval))
   3185     )
   3186     (define-derived-operand
   3187       (name (.sym dst16- offset -8-An-relative- xmode))
   3188       (comment (.str "m16c dsp:8[An] relative destination " xmode))
   3189       (attrs (machine 16))
   3190       (mode xmode)
   3191       (args (Dst16An (.sym Dsp- offset -u8)))
   3192       (syntax (.str "${Dsp-" offset "-u8}[$Dst16An]"))
   3193       (base-ifield f-12-4)
   3194       (encoding (+ (f-12-2 2) (f-14-1 0) (.sym Dsp- offset -u8) Dst16An))
   3195       (ifield-assertion (andif (eq f-12-2 2) (eq f-14-1 0)))
   3196       (getter (mem16 xmode (add (.sym Dsp- offset -u8) Dst16An)))
   3197       (setter (set (mem16 xmode (add (.sym Dsp- offset -u8) Dst16An)) newval))
   3198     )
   3199     (define-derived-operand
   3200       (name (.sym dst16- offset -16-An-relative- xmode))
   3201       (comment (.str "m16c dsp:16[An] relative destination " xmode))
   3202       (attrs (machine 16))
   3203       (mode xmode)
   3204       (args (Dst16An (.sym Dsp- offset -u16)))
   3205       (syntax (.str "${Dsp-" offset "-u16}[$Dst16An]"))
   3206       (base-ifield f-12-4)
   3207       (encoding (+ (f-12-2 3) (f-14-1 0) (.sym Dsp- offset -u16) Dst16An))
   3208       (ifield-assertion (andif (eq f-12-2 3) (eq f-14-1 0)))
   3209       (getter (mem16 xmode (add (.sym Dsp- offset -u16) Dst16An)))
   3210       (setter (set (mem16 xmode (add (.sym Dsp- offset -u16) Dst16An)) newval))
   3211     )
   3212     (define-derived-operand
   3213       (name (.sym dst16- offset -20-An-relative- xmode))
   3214       (comment (.str "m16c dsp:20[An] relative destination " xmode))
   3215       (attrs (machine 16))
   3216       (mode xmode)
   3217       (args (Dst16An (.sym Dsp- offset -u20)))
   3218       (syntax (.str "${Dsp-" offset "-u20}[$Dst16An]"))
   3219       (base-ifield f-12-4)
   3220       (encoding (+ (f-12-2 3) (f-14-1 0) (.sym Dsp- offset -u20) Dst16An))
   3221       (ifield-assertion (andif (eq f-12-2 3) (eq f-14-1 0)))
   3222       (getter (mem16 xmode (add (.sym Dsp- offset -u20) Dst16An)))
   3223       (setter (set (mem16 xmode (add (.sym Dsp- offset -u20) Dst16An)) newval))
   3224     )
   3225   )
   3226 )
   3227 
   3228 (dst16-relative-operand 16 QI)
   3229 (dst16-relative-operand 24 QI)
   3230 (dst16-relative-operand 32 QI)
   3231 (dst16-relative-operand 40 QI)
   3232 (dst16-relative-operand 48 QI)
   3233 (dst16-relative-operand 16 HI)
   3234 (dst16-relative-operand 24 HI)
   3235 (dst16-relative-operand 32 HI)
   3236 (dst16-relative-operand 40 HI)
   3237 (dst16-relative-operand 48 HI)
   3238 (dst16-relative-operand 16 SI)
   3239 (dst16-relative-operand 24 SI)
   3240 (dst16-relative-operand 32 SI)
   3241 (dst16-relative-operand 40 SI)
   3242 (dst16-relative-operand 48 SI)
   3243 
   3244 (define-pmacro (dst16-relative-Ext-operand offset smode dmode)
   3245   (begin
   3246     (define-derived-operand
   3247       (name (.sym dst16- offset -8-SB-relative-Ext- smode))
   3248       (comment (.str "m16c dsp:8[sb] relative destination " smode))
   3249       (attrs (machine 16))
   3250       (mode dmode)
   3251       (args ((.sym Dsp- offset -u8)))
   3252       (syntax (.str "${Dsp-" offset "-u8}[sb]"))
   3253       (base-ifield f-12-4)
   3254       (encoding (+ (f-12-4 #xA) (.sym Dsp- offset -u8)))
   3255       (ifield-assertion (eq f-12-4 #xA))
   3256       (getter (mem16 smode (add (.sym Dsp- offset -u8) (reg h-sb))))
   3257       (setter (set (mem16 dmode (add (.sym Dsp- offset -u8) (reg h-sb))) newval))
   3258     )
   3259     (define-derived-operand
   3260       (name (.sym dst16- offset -16-SB-relative-Ext- smode))
   3261       (comment (.str "m16c dsp:16[sb] relative destination " smode))
   3262       (attrs (machine 16))
   3263       (mode dmode)
   3264       (args ((.sym Dsp- offset -u16)))
   3265       (syntax (.str "${Dsp-" offset "-u16}[sb]"))
   3266       (base-ifield f-12-4)
   3267       (encoding (+ (f-12-4 #xE) (.sym Dsp- offset -u16)))
   3268       (ifield-assertion (eq f-12-4 #xE))
   3269       (getter (mem16 smode (add (.sym Dsp- offset -u16) (reg h-sb))))
   3270       (setter (set (mem16 dmode (add (.sym Dsp- offset -u16) (reg h-sb))) newval))
   3271     )
   3272     (define-derived-operand
   3273       (name (.sym dst16- offset -8-FB-relative-Ext- smode))
   3274       (comment (.str "m16c dsp:8[fb] relative destination " smode))
   3275       (attrs (machine 16))
   3276       (mode dmode)
   3277       (args ((.sym Dsp- offset -s8)))
   3278       (syntax (.str "${Dsp-" offset "-s8}[fb]"))
   3279       (base-ifield f-12-4)
   3280       (encoding (+ (f-12-4 #xB) (.sym Dsp- offset -s8)))
   3281       (ifield-assertion (eq f-12-4 #xB))
   3282       (getter (mem16 smode (add (.sym Dsp- offset -s8) (reg h-fb))))
   3283       (setter (set (mem16 dmode (add (.sym Dsp- offset -s8) (reg h-fb))) newval))
   3284     )
   3285     (define-derived-operand
   3286       (name (.sym dst16- offset -8-An-relative-Ext- smode))
   3287       (comment (.str "m16c dsp:8[An] relative destination " smode))
   3288       (attrs (machine 16))
   3289       (mode dmode)
   3290       (args (Dst16An (.sym Dsp- offset -u8)))
   3291       (syntax (.str "${Dsp-" offset "-u8}[$Dst16An]"))
   3292       (base-ifield f-12-4)
   3293       (encoding (+ (f-12-2 2) (f-14-1 0) (.sym Dsp- offset -u8) Dst16An))
   3294       (ifield-assertion (andif (eq f-12-2 2) (eq f-14-1 0)))
   3295       (getter (mem16 smode (add (.sym Dsp- offset -u8) Dst16An)))
   3296       (setter (set (mem16 dmode (add (.sym Dsp- offset -u8) Dst16An)) newval))
   3297     )
   3298     (define-derived-operand
   3299       (name (.sym dst16- offset -16-An-relative-Ext- smode))
   3300       (comment (.str "m16c dsp:16[An] relative destination " smode))
   3301       (attrs (machine 16))
   3302       (mode dmode)
   3303       (args (Dst16An (.sym Dsp- offset -u16)))
   3304       (syntax (.str "${Dsp-" offset "-u16}[$Dst16An]"))
   3305       (base-ifield f-12-4)
   3306       (encoding (+ (f-12-2 3) (f-14-1 0) (.sym Dsp- offset -u16) Dst16An))
   3307       (ifield-assertion (andif (eq f-12-2 3) (eq f-14-1 0)))
   3308       (getter (mem16 smode (add (.sym Dsp- offset -u16) Dst16An)))
   3309       (setter (set (mem16 dmode (add (.sym Dsp- offset -u16) Dst16An)) newval))
   3310     )
   3311   )
   3312 )
   3313 
   3314 (dst16-relative-Ext-operand 16 QI HI)
   3315 
   3316 (define-pmacro (dst32-relative-operand offset group base1 base2 smode dmode)
   3317   (begin
   3318     (define-derived-operand
   3319       (name (.sym dst32- offset -8-SB-relative- group - smode))
   3320       (comment (.str "m32c dsp:8[sb] relative destination " smode))
   3321       (attrs (machine 32))
   3322       (mode dmode)
   3323       (args ((.sym Dsp- offset -u8)))
   3324       (syntax (.str "${Dsp-" offset "-u8}[sb]"))
   3325       (base-ifield (.sym f- base1 -6))
   3326       (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u8)))
   3327       (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 2)))
   3328       (getter (c-call dmode (.str "operand_getter_" dmode) sb (.sym Dsp- offset -u8)))
   3329       (setter (c-call DFLT (.str "operand_setter_" dmode) newval sb (.sym Dsp- offset -u8)))
   3330 ;       (getter (mem32 smode (add (.sym Dsp- offset -u8) (reg h-sb))))
   3331 ;       (setter (set (mem32 dmode (add (.sym Dsp- offset -u8) (reg h-sb))) newval))
   3332     )
   3333     (define-derived-operand
   3334       (name (.sym dst32- offset -16-SB-relative- group - smode))
   3335       (comment (.str "m32c dsp:16[sb] relative destination " smode))
   3336       (attrs (machine 32))
   3337       (mode dmode)
   3338       (args ((.sym Dsp- offset -u16)))
   3339       (syntax (.str "${Dsp-" offset "-u16}[sb]"))
   3340       (base-ifield (.sym f- base1 -6))
   3341       (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u16)))
   3342       (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 2)))
   3343       (getter (c-call dmode (.str "operand_getter_" dmode) sb (.sym Dsp- offset -u16)))
   3344       (setter (c-call DFLT (.str "operand_setter_" dmode) newval sb (.sym Dsp- offset -u16)))
   3345 ;       (getter (mem32 smode (add (.sym Dsp- offset -u16) (reg h-sb))))
   3346 ;       (setter (set (mem32 dmode (add (.sym Dsp- offset -u16) (reg h-sb))) newval))
   3347     )
   3348     (define-derived-operand
   3349       (name (.sym dst32- offset -8-FB-relative- group - smode))
   3350       (comment (.str "m32c dsp:8[fb] relative destination " smode))
   3351       (attrs (machine 32))
   3352       (mode dmode)
   3353       (args ((.sym Dsp- offset -s8)))
   3354       (syntax (.str "${Dsp-" offset "-s8}[fb]"))
   3355       (base-ifield (.sym f- base1 -6))
   3356       (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 3) (.sym Dsp- offset -s8)))
   3357       (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 3)))
   3358       (getter (c-call dmode (.str "operand_getter_" dmode) fb (.sym Dsp- offset -s8)))
   3359       (setter (c-call DFLT (.str "operand_setter_" dmode) newval fb (.sym Dsp- offset -s8)))
   3360 ;       (getter (mem32 smode (add (.sym Dsp- offset -s8) (reg h-fb))))
   3361 ;       (setter (set (mem32 dmode (add (.sym Dsp- offset -s8) (reg h-fb))) newval))
   3362     )
   3363     (define-derived-operand
   3364       (name (.sym dst32- offset -16-FB-relative- group - smode))
   3365       (comment (.str "m32c dsp:16[fb] relative destination " smode))
   3366       (attrs (machine 32))
   3367       (mode dmode)
   3368       (args ((.sym Dsp- offset -s16)))
   3369       (syntax (.str "${Dsp-" offset "-s16}[fb]"))
   3370       (base-ifield (.sym f- base1 -6))
   3371       (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 3) (.sym Dsp- offset -s16)))
   3372       (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 3)))
   3373       (getter (c-call dmode (.str "operand_getter_" dmode) fb (.sym Dsp- offset -s16)))
   3374       (setter (c-call DFLT (.str "operand_setter_" dmode) newval fb (.sym Dsp- offset -s16)))
   3375 ;       (getter (mem32 smode (add (.sym Dsp- offset -s16) (reg h-fb))))
   3376 ;       (setter (set (mem32 dmode (add (.sym Dsp- offset -s16) (reg h-fb))) newval))
   3377     )
   3378     (define-derived-operand
   3379       (name (.sym dst32- offset -8-An-relative- group - smode))
   3380       (comment (.str "m32c dsp:8[An] relative destination " smode))
   3381       (attrs (machine 32))
   3382       (mode dmode)
   3383       (args ((.sym Dst32An group) (.sym Dsp- offset -u8)))
   3384       (syntax (.str "${Dsp-" offset "-u8}[$Dst32An" group "]"))
   3385       (base-ifield (.sym f- base1 -6))
   3386       (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u8) (.sym Dst32An group)))
   3387       (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -1) 0)))
   3388       (getter (c-call dmode (.str "operand_getter_" dmode) (.sym Dst32An group) (.sym Dsp- offset -u8)))
   3389       (setter (c-call DFLT (.str "operand_setter_" dmode) newval (.sym Dst32An group) (.sym Dsp- offset -u8)))
   3390 ;       (getter (mem32 smode (add (.sym Dsp- offset -u8) (.sym Dst32An group))))
   3391 ;       (setter (set (mem32 dmode (add (.sym Dsp- offset -u8) (.sym Dst32An group))) newval))
   3392     )
   3393     (define-derived-operand
   3394       (name (.sym dst32- offset -16-An-relative- group - smode))
   3395       (comment (.str "m32c dsp:16[An] relative destination " smode))
   3396       (attrs (machine 32))
   3397       (mode dmode)
   3398       (args ((.sym Dst32An group) (.sym Dsp- offset -u16)))
   3399       (syntax (.str "${Dsp-" offset "-u16}[$Dst32An" group "]"))
   3400       (base-ifield (.sym f- base1 -6))
   3401       (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u16) (.sym Dst32An group)))
   3402       (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -1) 0)))
   3403       (getter (c-call dmode (.str "operand_getter_" dmode) (.sym Dst32An group) (.sym Dsp- offset -u16)))
   3404       (setter (c-call DFLT (.str "operand_setter_" dmode) newval (.sym Dst32An group) (.sym Dsp- offset -u16)))
   3405 ;       (getter (mem32 smode (add (.sym Dsp- offset -u16) (.sym Dst32An group))))
   3406 ;       (setter (set (mem32 dmode (add (.sym Dsp- offset -u16) (.sym Dst32An group))) newval))
   3407     )
   3408     (define-derived-operand
   3409       (name (.sym dst32- offset -24-An-relative- group - smode))
   3410       (comment (.str "m32c dsp:16[An] relative destination " smode))
   3411       (attrs (machine 32))
   3412       (mode dmode)
   3413       (args ((.sym Dst32An group) (.sym Dsp- offset -u24)))
   3414       (syntax (.str "${Dsp-" offset "-u24}[$Dst32An" group "]"))
   3415       (base-ifield (.sym f- base1 -6))
   3416       (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -1) 0) (.sym Dsp- offset -u24) (.sym Dst32An group)))
   3417       (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -1) 0)))
   3418       (getter (c-call dmode (.str "operand_getter_" dmode) (.sym Dst32An group) (.sym Dsp- offset -u24)))
   3419       (setter (c-call DFLT (.str "operand_setter_" dmode) newval (.sym Dst32An group) (.sym Dsp- offset -u24)))
   3420 ;       (getter (mem32 smode (add (.sym Dsp- offset -u24) (.sym Dst32An group))))
   3421 ;       (setter (set (mem32 dmode (add (.sym Dsp- offset -u24) (.sym Dst32An group))) newval))
   3422     )
   3423   )
   3424 )
   3425 
   3426 (dst32-relative-operand 16 Unprefixed 4 8 QI QI)
   3427 (dst32-relative-operand 24 Unprefixed 4 8 QI QI)
   3428 (dst32-relative-operand 32 Unprefixed 4 8 QI QI)
   3429 (dst32-relative-operand 40 Unprefixed 4 8 QI QI)
   3430 (dst32-relative-operand 16 Unprefixed 4 8 HI HI)
   3431 (dst32-relative-operand 24 Unprefixed 4 8 HI HI)
   3432 (dst32-relative-operand 32 Unprefixed 4 8 HI HI)
   3433 (dst32-relative-operand 40 Unprefixed 4 8 HI HI)
   3434 (dst32-relative-operand 16 Unprefixed 4 8 SI SI)
   3435 (dst32-relative-operand 24 Unprefixed 4 8 SI SI)
   3436 (dst32-relative-operand 32 Unprefixed 4 8 SI SI)
   3437 (dst32-relative-operand 40 Unprefixed 4 8 SI SI)
   3438 
   3439 (dst32-relative-operand 24 Prefixed 12 16 QI QI)
   3440 (dst32-relative-operand 32 Prefixed 12 16 QI QI)
   3441 (dst32-relative-operand 40 Prefixed 12 16 QI QI)
   3442 (dst32-relative-operand 48 Prefixed 12 16 QI QI)
   3443 (dst32-relative-operand 24 Prefixed 12 16 HI HI)
   3444 (dst32-relative-operand 32 Prefixed 12 16 HI HI)
   3445 (dst32-relative-operand 40 Prefixed 12 16 HI HI)
   3446 (dst32-relative-operand 48 Prefixed 12 16 HI HI)
   3447 (dst32-relative-operand 24 Prefixed 12 16 SI SI)
   3448 (dst32-relative-operand 32 Prefixed 12 16 SI SI)
   3449 (dst32-relative-operand 40 Prefixed 12 16 SI SI)
   3450 (dst32-relative-operand 48 Prefixed 12 16 SI SI)
   3451 
   3452 (dst32-relative-operand 16 ExtUnprefixed 4 8 QI HI)
   3453 (dst32-relative-operand 16 ExtUnprefixed 4 8 HI SI)
   3454 
   3455 ;-------------------------------------------------------------
   3456 ; Absolute address
   3457 ;-------------------------------------------------------------
   3458 
   3459 (define-pmacro (dst16-absolute offset xmode)
   3460   (begin
   3461     (define-derived-operand
   3462       (name (.sym dst16- offset -16-absolute- xmode))
   3463       (comment (.str "m16c absolute address " xmode))
   3464       (attrs (machine 16))
   3465       (mode xmode)
   3466       (args ((.sym Dsp- offset -u16)))
   3467       (syntax (.str "${Dsp-" offset "-u16}"))
   3468       (base-ifield f-12-4)
   3469       (encoding (+ (f-12-4 #xF) (.sym Dsp- offset -u16)))
   3470       (ifield-assertion (eq f-12-4 #xF))
   3471       (getter (mem16 xmode (.sym Dsp- offset -u16)))
   3472       (setter (set (mem16 xmode (.sym Dsp- offset -u16)) newval))
   3473     )
   3474   )
   3475 )
   3476 
   3477 (dst16-absolute 16 QI)
   3478 (dst16-absolute 24 QI)
   3479 (dst16-absolute 32 QI)
   3480 (dst16-absolute 40 QI)
   3481 (dst16-absolute 48 QI)
   3482 (dst16-absolute 16 HI)
   3483 (dst16-absolute 24 HI)
   3484 (dst16-absolute 32 HI)
   3485 (dst16-absolute 40 HI)
   3486 (dst16-absolute 48 HI)
   3487 (dst16-absolute 16 SI)
   3488 (dst16-absolute 24 SI)
   3489 (dst16-absolute 32 SI)
   3490 (dst16-absolute 40 SI)
   3491 (dst16-absolute 48 SI)
   3492 
   3493 (define-derived-operand
   3494   (name dst16-16-16-absolute-Ext-QI)
   3495   (comment "m16c absolute address QI")
   3496   (attrs (machine 16))
   3497   (mode HI)
   3498   (args (Dsp-16-u16))
   3499   (syntax "${Dsp-16-u16}")
   3500   (base-ifield f-12-4)
   3501   (encoding (+ (f-12-4 #xF) Dsp-16-u16))
   3502   (ifield-assertion (eq f-12-4 #xF))
   3503   (getter (mem16 QI Dsp-16-u16))
   3504   (setter (set (mem16 HI Dsp-16-u16) newval))
   3505 )
   3506 
   3507 (define-pmacro (dst32-absolute offset group base1 base2 smode dmode)
   3508   (begin
   3509     (define-derived-operand
   3510       (name (.sym dst32- offset -16-absolute- group - smode))
   3511       (comment (.str "m32c absolute address " smode))
   3512       (attrs (machine 32))
   3513       (mode dmode)
   3514       (args ((.sym Dsp- offset -u16)))
   3515       (syntax (.str "${Dsp-" offset "-u16}"))
   3516       (base-ifield (.sym f- base1 -6))
   3517       (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 3) (.sym Dsp- offset -u16)))
   3518       (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 3)))
   3519       (getter (c-call smode (.str "operand_getter_" smode) (const 0) (.sym Dsp- offset -u16)))
   3520       (setter (c-call DFLT (.str "operand_setter_" dmode) newval (const 0) (.sym Dsp- offset -u16)))
   3521 ;      (getter (mem32 smode (.sym Dsp- offset -u16)))
   3522 ;      (setter (set (mem32 dmode (.sym Dsp- offset -u16)) newval))
   3523     )
   3524     (define-derived-operand
   3525       (name (.sym dst32- offset -24-absolute- group - smode))
   3526       (comment (.str "m32c absolute address " smode))
   3527       (attrs (machine 32))
   3528       (mode dmode)
   3529       (args ((.sym Dsp- offset -u24)))
   3530       (syntax (.str "${Dsp-" offset "-u24}"))
   3531       (base-ifield (.sym f- base1 -6))
   3532       (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 2) (.sym Dsp- offset -u24)))
   3533       (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 2)))
   3534       (getter (c-call smode (.str "operand_getter_" smode) (const 0) (.sym Dsp- offset -u24)))
   3535       (setter (c-call DFLT (.str "operand_setter_" dmode) newval (const 0) (.sym Dsp- offset -u24)))
   3536 ;      (getter (mem32 smode (.sym Dsp- offset -u24)))
   3537 ;      (setter (set (mem32 dmode (.sym Dsp- offset -u24)) newval))
   3538     )
   3539   )
   3540 )
   3541 
   3542 (dst32-absolute 16 Unprefixed 4 8 QI QI)
   3543 (dst32-absolute 24 Unprefixed 4 8 QI QI)
   3544 (dst32-absolute 32 Unprefixed 4 8 QI QI)
   3545 (dst32-absolute 40 Unprefixed 4 8 QI QI)
   3546 (dst32-absolute 16 Unprefixed 4 8 HI HI)
   3547 (dst32-absolute 24 Unprefixed 4 8 HI HI)
   3548 (dst32-absolute 32 Unprefixed 4 8 HI HI)
   3549 (dst32-absolute 40 Unprefixed 4 8 HI HI)
   3550 (dst32-absolute 16 Unprefixed 4 8 SI SI)
   3551 (dst32-absolute 24 Unprefixed 4 8 SI SI)
   3552 (dst32-absolute 32 Unprefixed 4 8 SI SI)
   3553 (dst32-absolute 40 Unprefixed 4 8 SI SI)
   3554 
   3555 (dst32-absolute 24 Prefixed 12 16 QI QI)
   3556 (dst32-absolute 32 Prefixed 12 16 QI QI)
   3557 (dst32-absolute 40 Prefixed 12 16 QI QI)
   3558 (dst32-absolute 48 Prefixed 12 16 QI QI)
   3559 (dst32-absolute 24 Prefixed 12 16 HI HI)
   3560 (dst32-absolute 32 Prefixed 12 16 HI HI)
   3561 (dst32-absolute 40 Prefixed 12 16 HI HI)
   3562 (dst32-absolute 48 Prefixed 12 16 HI HI)
   3563 (dst32-absolute 24 Prefixed 12 16 SI SI)
   3564 (dst32-absolute 32 Prefixed 12 16 SI SI)
   3565 (dst32-absolute 40 Prefixed 12 16 SI SI)
   3566 (dst32-absolute 48 Prefixed 12 16 SI SI)
   3567 
   3568 (dst32-absolute 16 ExtUnprefixed 4 8 QI HI)
   3569 (dst32-absolute 16 ExtUnprefixed 4 8 HI SI)
   3570 
   3571 ;-------------------------------------------------------------
   3572 ; An indirect indirect
   3573 ;-------------------------------------------------------------
   3574 
   3575 ;(define-pmacro (dst-An-indirect-indirect-operand xmode)
   3576 ;   (define-derived-operand
   3577 ;     (name (.sym dst32-An-indirect-indirect- xmode))
   3578 ;     (comment (.str "m32c An indirect indirect destination " xmode))
   3579 ;     (attrs (machine 32))
   3580 ;     (mode xmode)
   3581 ;     (args (Dst32AnPrefixed))
   3582 ;     (syntax (.str "[[$Dst32AnPrefixed]]"))
   3583 ;     (base-ifield f-12-6)
   3584 ;     (encoding (+ (f-12-3 0) (f-16-1 0) Dst32AnPrefixed))
   3585 ;     (ifield-assertion (andif (eq f-12-3 0) (eq f-16-1 0)))
   3586 ;     (getter (mem32 xmode (indirect-addr Dst32AnPrefixed)))
   3587 ;     (setter (set (mem32 xmode (indirect-addr Dst32AnPrefixed)) newval))
   3588 ;   )
   3589 ;)
   3590 
   3591 ; (dst-An-indirect-indirect-operand QI)
   3592 ; (dst-An-indirect-indirect-operand HI)
   3593 ; (dst-An-indirect-indirect-operand SI)
   3594 
   3595 ;-------------------------------------------------------------
   3596 ; Relative indirect
   3597 ;-------------------------------------------------------------
   3598 
   3599 (define-pmacro (dst-relative-indirect-operand offset xmode)
   3600   (begin
   3601 ;     (define-derived-operand
   3602 ;       (name (.sym dst32- offset -8-SB-relative-indirect- xmode))
   3603 ;       (comment (.str "m32c dsp:8[sb] relative destination " xmode))
   3604 ;       (attrs (machine 32))
   3605 ;       (mode xmode)
   3606 ;       (args ((.sym Dsp- offset -u8)))
   3607 ;       (syntax (.str "[${Dsp-" offset "-u8}[sb]]"))
   3608 ;       (base-ifield f-12-6)
   3609 ;       (encoding (+ (f-12-3 1) (f-16-2 2) (.sym Dsp- offset -u8)))
   3610 ;       (ifield-assertion (andif (eq f-12-3 1) (eq f-16-2 2)))
   3611 ;       (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u8) (reg h-sb)))))
   3612 ;       (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u8) (reg h-sb)))) newval))
   3613 ;     )
   3614 ;     (define-derived-operand
   3615 ;       (name (.sym dst32- offset -16-SB-relative-indirect- xmode))
   3616 ;       (comment (.str "m32c dsp:16[sb] relative destination " xmode))
   3617 ;       (attrs (machine 32))
   3618 ;       (mode xmode)
   3619 ;       (args ((.sym Dsp- offset -u16)))
   3620 ;       (syntax (.str "[${Dsp-" offset "-u16}[sb]]"))
   3621 ;       (base-ifield f-12-6)
   3622 ;       (encoding (+ (f-12-3 2) (f-16-2 2) (.sym Dsp- offset -u16)))
   3623 ;       (ifield-assertion (andif (eq f-12-3 2) (eq f-16-2 2)))
   3624 ;       (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u16) (reg h-sb)))))
   3625 ;       (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u16) (reg h-sb)))) newval))
   3626 ;     )
   3627 ;     (define-derived-operand
   3628 ;       (name (.sym dst32- offset -8-FB-relative-indirect- xmode))
   3629 ;       (comment (.str "m32c dsp:8[fb] relative destination " xmode))
   3630 ;       (attrs (machine 32))
   3631 ;       (mode xmode)
   3632 ;       (args ((.sym Dsp- offset -s8)))
   3633 ;       (syntax (.str "[${Dsp-" offset "-s8}[fb]]"))
   3634 ;       (base-ifield f-12-6)
   3635 ;       (encoding (+ (f-12-3 1) (f-16-2 3) (.sym Dsp- offset -s8)))
   3636 ;       (ifield-assertion (andif (eq f-12-3 1) (eq f-16-2 3)))
   3637 ;       (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -s8) (reg h-fb)))))
   3638 ;       (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -s8) (reg h-fb)))) newval))
   3639 ;     )
   3640 ;     (define-derived-operand
   3641 ;       (name (.sym dst32- offset -16-FB-relative-indirect- xmode))
   3642 ;       (comment (.str "m32c dsp:16[fb] relative destination " xmode))
   3643 ;       (attrs (machine 32))
   3644 ;       (mode xmode)
   3645 ;       (args ((.sym Dsp- offset -s16)))
   3646 ;       (syntax (.str "[${Dsp-" offset "-s16}[fb]]"))
   3647 ;       (base-ifield f-12-6)
   3648 ;       (encoding (+ (f-12-3 2) (f-16-2 3) (.sym Dsp- offset -s16)))
   3649 ;       (ifield-assertion (andif (eq f-12-3 2) (eq f-16-2 3)))
   3650 ;       (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -s16) (reg h-fb)))))
   3651 ;       (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -s16) (reg h-fb)))) newval))
   3652 ;     )
   3653 ;     (define-derived-operand
   3654 ;       (name (.sym dst32- offset -8-An-relative-indirect- xmode))
   3655 ;       (comment (.str "m32c dsp:8[An] relative indirect destination " xmode))
   3656 ;       (attrs (machine 32))
   3657 ;       (mode xmode)
   3658 ;       (args (Dst32AnPrefixed (.sym Dsp- offset -u8)))
   3659 ;       (syntax (.str "[${Dsp-" offset "-u8}[$Dst32AnPrefixed]]"))
   3660 ;       (base-ifield f-12-6)
   3661 ;       (encoding (+ (f-12-3 1) (f-16-1 0) (.sym Dsp- offset -u8) Dst32AnPrefixed))
   3662 ;       (ifield-assertion (andif (eq f-12-3 1) (eq f-16-1 0)))
   3663 ;       (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u8) Dst32AnPrefixed))))
   3664 ;       (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u8) Dst32AnPrefixed))) newval))
   3665 ;     )
   3666 ;     (define-derived-operand
   3667 ;       (name (.sym dst32- offset -16-An-relative-indirect- xmode))
   3668 ;       (comment (.str "m32c dsp:16[An] relative destination " xmode))
   3669 ;       (attrs (machine 32))
   3670 ;       (mode xmode)
   3671 ;       (args (Dst32AnPrefixed (.sym Dsp- offset -u16)))
   3672 ;       (syntax (.str "[${Dsp-" offset "-u16}[$Dst32AnPrefixed]]"))
   3673 ;       (base-ifield f-12-6)
   3674 ;       (encoding (+ (f-12-3 2) (f-16-1 0) (.sym Dsp- offset -u16) Dst32AnPrefixed))
   3675 ;       (ifield-assertion (andif (eq f-12-3 2) (eq f-16-1 0)))
   3676 ;       (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u16) Dst32AnPrefixed))))
   3677 ;       (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u16) Dst32AnPrefixed))) newval))
   3678 ;     )
   3679 ;     (define-derived-operand
   3680 ;       (name (.sym dst32- offset -24-An-relative-indirect- xmode))
   3681 ;       (comment (.str "m32c dsp:24[An] relative destination " xmode))
   3682 ;       (attrs (machine 32))
   3683 ;       (mode xmode)
   3684 ;       (args (Dst32AnPrefixed (.sym Dsp- offset -u24)))
   3685 ;       (syntax (.str "[${Dsp-" offset "-u24}[$Dst32AnPrefixed]]"))
   3686 ;       (base-ifield f-12-6)
   3687 ;       (encoding (+ (f-12-3 3) (f-16-1 0) (.sym Dsp- offset -u24) Dst32AnPrefixed))
   3688 ;       (ifield-assertion (andif (eq f-12-3 3) (eq f-16-1 0)))
   3689 ;       (getter (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u24) Dst32AnPrefixed))))
   3690 ;       (setter (set (mem32 xmode (indirect-addr (add (.sym Dsp- offset -u24) Dst32AnPrefixed))) newval))
   3691 ;     )
   3692   )
   3693 )
   3694 
   3695 ; (dst-relative-indirect-operand 24 QI)
   3696 ; (dst-relative-indirect-operand 32 QI)
   3697 ; (dst-relative-indirect-operand 40 QI)
   3698 ; (dst-relative-indirect-operand 48 QI)
   3699 ; (dst-relative-indirect-operand 24 HI)
   3700 ; (dst-relative-indirect-operand 32 HI)
   3701 ; (dst-relative-indirect-operand 40 HI)
   3702 ; (dst-relative-indirect-operand 48 HI)
   3703 ; (dst-relative-indirect-operand 24 SI)
   3704 ; (dst-relative-indirect-operand 32 SI)
   3705 ; (dst-relative-indirect-operand 40 SI)
   3706 ; (dst-relative-indirect-operand 48 SI)
   3707 
   3708 ;-------------------------------------------------------------
   3709 ; Absolute indirect
   3710 ;-------------------------------------------------------------
   3711 
   3712 (define-pmacro (dst-absolute-indirect offset xmode)
   3713   (begin
   3714 ;     (define-derived-operand
   3715 ;       (name (.sym dst32- offset -16-absolute-indirect-derived- xmode))
   3716 ;       (comment (.str "m32c absolute indirect address " xmode))
   3717 ;       (attrs (machine 32))
   3718 ;       (mode xmode)
   3719 ;       (args ((.sym Dsp- offset -u16)))
   3720 ;       (syntax (.str "[${Dsp-" offset "-u16}]"))
   3721 ;       (base-ifield f-12-6)
   3722 ;       (encoding (+ (f-12-3 3) (f-16-2 3) (.sym Dsp- offset -u16)))
   3723 ;       (ifield-assertion (andif (eq f-12-3 3) (eq f-16-2 3)))
   3724 ;       (getter (mem32 xmode (indirect-addr (.sym Dsp- offset -u16))))
   3725 ;       (setter (set (mem32 xmode (indirect-addr (.sym Dsp- offset -u16))) newval))
   3726 ;     )
   3727 ;     (define-derived-operand
   3728 ;       (name (.sym dst32- offset -24-absolute-indirect-derived- xmode))
   3729 ;       (comment (.str "m32c absolute indirect address " xmode))
   3730 ;       (attrs (machine 32))
   3731 ;       (mode xmode)
   3732 ;       (args ((.sym Dsp- offset -u24)))
   3733 ;       (syntax (.str "[${Dsp-" offset "-u24}]"))
   3734 ;       (base-ifield f-12-6)
   3735 ;       (encoding (+ (f-12-3 3) (f-16-2 2) (.sym Dsp- offset -u24)))
   3736 ;       (ifield-assertion (andif (eq f-12-3 3) (eq f-16-2 2)))
   3737 ;       (getter (mem32 xmode (indirect-addr (.sym Dsp- offset -u24))))
   3738 ;       (setter (set (mem32 xmode (indirect-addr (.sym Dsp- offset -u24))) newval))
   3739 ;     )
   3740   )
   3741 )
   3742 
   3743 (dst-absolute-indirect 24 QI)
   3744 (dst-absolute-indirect 32 QI)
   3745 (dst-absolute-indirect 40 QI)
   3746 (dst-absolute-indirect 48 QI)
   3747 (dst-absolute-indirect 24 HI)
   3748 (dst-absolute-indirect 32 HI)
   3749 (dst-absolute-indirect 40 HI)
   3750 (dst-absolute-indirect 48 HI)
   3751 (dst-absolute-indirect 24 SI)
   3752 (dst-absolute-indirect 32 SI)
   3753 (dst-absolute-indirect 40 SI)
   3754 (dst-absolute-indirect 48 SI)
   3755 
   3756 ;-------------------------------------------------------------
   3757 ; Bit operands
   3758 ;-------------------------------------------------------------
   3759 (define-pmacro (get-register-bit reg bitno)
   3760   (and (srl reg bitno) 1)
   3761 )
   3762 	    
   3763 (define-pmacro (set-register-bit reg bitno value)
   3764   (set reg (or (and reg (inv (sll 1 bitno)))
   3765 	       (sll (and QI value 1) bitno)))
   3766 )
   3767 
   3768 (define-pmacro (get-memory-bit mach base bitno)
   3769   (and (srl (mem-mach mach QI (add base (div bitno 8)))
   3770 	    (mod bitno 8))
   3771        1)
   3772 )
   3773 	    
   3774 (define-pmacro (set-memory-bit mach base bitno value)
   3775   (sequence ((USI addr))
   3776 	    (set addr (add base (div bitno 8)))
   3777 	    (set (mem-mach mach QI addr)
   3778 		 (or (and (mem-mach mach QI addr)
   3779 			  (inv (sll 1 (mod bitno 8))))
   3780 		     (sll (and QI value 1) (mod bitno 8)))))
   3781 )
   3782 
   3783 ;-------------------------------------------------------------
   3784 ; Rn direct
   3785 ;-------------------------------------------------------------
   3786 
   3787 (define-derived-operand
   3788   (name bit16-Rn-direct)
   3789   (comment "m16c Rn direct bit")
   3790   (attrs (machine 16))
   3791   (mode BI)
   3792   (args (Bitno16R Bit16Rn))
   3793   (syntax "$Bitno16R,$Bit16Rn")
   3794   (base-ifield f-12-4)
   3795   (encoding (+ (f-12-2 0) Bit16Rn Bitno16R))
   3796   (ifield-assertion (eq f-12-2 0))
   3797   (getter (get-register-bit Bit16Rn Bitno16R))
   3798   (setter (set-register-bit Bit16Rn Bitno16R newval))
   3799 )
   3800 
   3801 (define-pmacro (bit32-Rn-direct-operand group base)
   3802   (begin
   3803     (define-derived-operand
   3804       (name (.sym bit32-Rn-direct- group))
   3805       (comment "m32c Rn direct bit")
   3806       (attrs (machine 32))
   3807       (mode BI)
   3808       (args ((.sym Bitno32 group) (.sym Bit32Rn group)))
   3809       (syntax (.str "$Bitno32" group ",$Bit32Rn" group))
   3810       (base-ifield (.sym f- base -6))
   3811       (encoding (+ ((.sym f- base -3) 4) (.sym Bit32Rn group) (.sym Bitno32 group)))
   3812       (ifield-assertion (eq (.sym f- base -3) 4))
   3813       (getter (get-register-bit (.sym Bit32Rn group) (.sym Bitno32 group)))
   3814       (setter (set-register-bit (.sym Bit32Rn group) (.sym Bitno32 group) newval))
   3815     )
   3816   )
   3817 )
   3818 
   3819 (bit32-Rn-direct-operand Unprefixed  4)
   3820 (bit32-Rn-direct-operand   Prefixed 12)
   3821 
   3822 ;-------------------------------------------------------------
   3823 ; An direct
   3824 ;-------------------------------------------------------------
   3825 
   3826 (define-derived-operand
   3827   (name bit16-An-direct)
   3828   (comment "m16c An direct bit")
   3829   (attrs (machine 16))
   3830   (mode BI)
   3831   (args (Bitno16R Bit16An))
   3832   (syntax "$Bitno16R,$Bit16An")
   3833   (base-ifield f-12-4)
   3834   (encoding (+ (f-12-2 1) (f-14-1 0) Bit16An Bitno16R))
   3835   (ifield-assertion (andif (eq f-12-2 1) (eq f-14-1 0)))
   3836   (getter (get-register-bit Bit16An Bitno16R))
   3837   (setter (set-register-bit Bit16An Bitno16R newval))
   3838 )
   3839 
   3840 (define-pmacro (bit32-An-direct-operand group base1 base2)
   3841   (begin
   3842     (define-derived-operand
   3843       (name (.sym bit32-An-direct- group))
   3844       (comment "m32c An direct bit")
   3845       (attrs (machine 32))
   3846       (mode BI)
   3847       (args ((.sym Bitno32 group) (.sym Bit32An group)))
   3848       (syntax (.str "$Bitno32" group ",$Bit32An" group))
   3849       (base-ifield (.sym f- base1 -6))
   3850       (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 1) (.sym Bit32An group) (.sym Bitno32 group)))
   3851       (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 1)))
   3852       (getter (get-register-bit (.sym Bit32An group) (.sym Bitno32 group)))
   3853       (setter (set-register-bit (.sym Bit32An group) (.sym Bitno32 group) newval))
   3854     )
   3855   )
   3856 )
   3857 
   3858 (bit32-An-direct-operand Unprefixed  4  8)
   3859 (bit32-An-direct-operand   Prefixed 12 16)
   3860 
   3861 ;-------------------------------------------------------------
   3862 ; An indirect
   3863 ;-------------------------------------------------------------
   3864 
   3865 (define-derived-operand
   3866   (name bit16-An-indirect)
   3867   (comment "m16c An indirect bit")
   3868   (attrs (machine 16))
   3869   (mode BI)
   3870   (args (Bit16An))
   3871   (syntax "[$Bit16An]")
   3872   (base-ifield f-12-4)
   3873   (encoding (+ (f-12-2 1) (f-14-1 1) Bit16An))
   3874   (ifield-assertion (andif (eq f-12-2 1) (eq f-14-1 1)))
   3875   (getter (get-memory-bit 16 0 Bit16An))
   3876   (setter (set-memory-bit 16 0 Bit16An newval))
   3877 )
   3878 
   3879 (define-pmacro (bit32-An-indirect-operand group base1 base2)
   3880   (begin
   3881     (define-derived-operand
   3882       (name (.sym bit32-An-indirect- group))
   3883       (comment "m32c An indirect destination ")
   3884       (attrs (machine 32))
   3885       (mode BI)
   3886       (args ((.sym Bitno32 group) (.sym Bit32An group)))
   3887       (syntax (.str "$Bitno32" group ",[$Bit32An" group "]"))
   3888       (base-ifield (.sym f- base1 -6))
   3889       (encoding (+ ((.sym f- base1 -3) 0) ((.sym f- base2 -1) 0) (.sym Bit32An group) (.sym Bitno32 group)))
   3890       (ifield-assertion (andif (eq (.sym f- base1 -3) 0) (eq (.sym f- base2 -1) 0)))
   3891       (getter (get-memory-bit 32 (.sym Bit32An group) (.sym Bitno32 group)))
   3892       (setter (set-memory-bit 32 (.sym Bit32An group) (.sym Bitno32 group) newval))
   3893     )
   3894   )
   3895 )
   3896 
   3897 (bit32-An-indirect-operand Unprefixed  4  8)
   3898 (bit32-An-indirect-operand   Prefixed 12 16)
   3899 
   3900 ;-------------------------------------------------------------
   3901 ; dsp:d[r] relative
   3902 ;-------------------------------------------------------------
   3903 
   3904 (define-pmacro (bit16-relative-operand offset)
   3905   (begin
   3906     (define-derived-operand
   3907       (name (.sym bit16- offset -8-SB-relative))
   3908       (comment (.str "m16c dsp:8[sb] relative bit " xmode))
   3909       (attrs (machine 16))
   3910       (mode BI)
   3911       (args ((.sym BitBase16- offset -u8)))
   3912       (syntax (.str "${BitBase16-" offset "-u8}[sb]"))
   3913       (base-ifield f-12-4)
   3914       (encoding (+ (f-12-4 #xA) (.sym BitBase16- offset -u8)))
   3915       (ifield-assertion (eq f-12-4 #xA))
   3916       (getter (get-memory-bit 16 (reg h-sb) (.sym BitBase16- offset -u8)))
   3917       (setter (set-memory-bit 16 (reg h-sb) (.sym BitBase16- offset -u8) newval))
   3918     )
   3919     (define-derived-operand
   3920       (name (.sym bit16- offset -16-SB-relative))
   3921       (comment (.str "m16c dsp:16[sb] relative bit " xmode))
   3922       (attrs (machine 16))
   3923       (mode BI)
   3924       (args ((.sym BitBase16- offset -u16)))
   3925       (syntax (.str "${BitBase16-" offset "-u16}[sb]"))
   3926       (base-ifield f-12-4)
   3927       (encoding (+ (f-12-4 #xE) (.sym BitBase16- offset -u16)))
   3928       (ifield-assertion (eq f-12-4 #xE))
   3929       (getter (get-memory-bit 16 (reg h-sb) (.sym BitBase16- offset -u16)))
   3930       (setter (set-memory-bit 16 (reg h-sb) (.sym BitBase16- offset -u16) newval))
   3931     )
   3932     (define-derived-operand
   3933       (name (.sym bit16- offset -8-FB-relative))
   3934       (comment (.str "m16c dsp:8[fb] relative bit " xmode))
   3935       (attrs (machine 16))
   3936       (mode BI)
   3937       (args ((.sym BitBase16- offset -s8)))
   3938       (syntax (.str "${BitBase16-" offset "-s8}[fb]"))
   3939       (base-ifield f-12-4)
   3940       (encoding (+ (f-12-4 #xB) (.sym BitBase16- offset -s8)))
   3941       (ifield-assertion (eq f-12-4 #xB))
   3942       (getter (get-memory-bit 16 (reg h-fb) (.sym BitBase16- offset -s8)))
   3943       (setter (set-memory-bit 16 (reg h-fb) (.sym BitBase16- offset -s8) newval))
   3944     )
   3945     (define-derived-operand
   3946       (name (.sym bit16- offset -8-An-relative))
   3947       (comment (.str "m16c dsp:8[An] relative bit " xmode))
   3948       (attrs (machine 16))
   3949       (mode BI)
   3950       (args (Bit16An (.sym Dsp- offset -u8)))
   3951       (syntax (.str "${Dsp-" offset "-u8}[$Bit16An]"))
   3952       (base-ifield f-12-4)
   3953       (encoding (+ (f-12-2 2) (f-14-1 0) (.sym Dsp- offset -u8) Bit16An))
   3954       (ifield-assertion (andif (eq f-12-2 2) (eq f-14-1 0)))
   3955       (getter (get-memory-bit 16 (.sym Dsp- offset -u8) Bit16An))
   3956       (setter (set-memory-bit 16 (.sym Dsp- offset -u8) Bit16An newval))
   3957     )
   3958     (define-derived-operand
   3959       (name (.sym bit16- offset -16-An-relative))
   3960       (comment (.str "m16c dsp:16[An] relative bit " xmode))
   3961       (attrs (machine 16))
   3962       (mode BI)
   3963       (args (Bit16An (.sym Dsp- offset -u16)))
   3964       (syntax (.str "${Dsp-" offset "-u16}[$Bit16An]"))
   3965       (base-ifield f-12-4)
   3966       (encoding (+ (f-12-2 3) (f-14-1 0) (.sym Dsp- offset -u16) Bit16An))
   3967       (ifield-assertion (andif (eq f-12-2 3) (eq f-14-1 0)))
   3968       (getter (get-memory-bit 16 (.sym Dsp- offset -u16) Bit16An))
   3969       (setter (set-memory-bit 16 (.sym Dsp- offset -u16) Bit16An newval))
   3970     )
   3971   )
   3972 )
   3973 
   3974 (bit16-relative-operand 16)
   3975 
   3976 (define-pmacro (bit32-relative-operand offset group base1 base2)
   3977   (begin
   3978     (define-derived-operand
   3979       (name (.sym bit32- offset -11-SB-relative- group))
   3980       (comment "m32c bit,base:11[sb] relative bit")
   3981       (attrs (machine 32))
   3982       (mode BI)
   3983       (args ((.sym BitBase32- offset -u11- group)))
   3984       (syntax (.str "${BitBase32-" offset "-u11-" group "}[sb]"))
   3985       (base-ifield (.sym f- base1 -12))
   3986       (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 2) (.sym BitBase32- offset -u11- group)))
   3987       (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 2)))
   3988       (getter (get-memory-bit 32 (reg h-sb) (.sym BitBase32- offset -u11- group)))
   3989       (setter (set-memory-bit 32 (reg h-sb) (.sym BitBase32- offset -u11- group) newval))
   3990     )
   3991     (define-derived-operand
   3992       (name (.sym bit32- offset -19-SB-relative- group))
   3993       (comment "m32c bit,base:19[sb] relative bit")
   3994       (attrs (machine 32))
   3995       (mode BI)
   3996       (args ((.sym BitBase32- offset -u19- group)))
   3997       (syntax (.str "${BitBase32-" offset "-u19-" group "}[sb]"))
   3998       (base-ifield (.sym f- base1 -12))
   3999       (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 2) (.sym BitBase32- offset -u19- group)))
   4000       (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 2)))
   4001       (getter (get-memory-bit 32 (reg h-sb) (.sym BitBase32- offset -u19- group)))
   4002       (setter (set-memory-bit 32 (reg h-sb) (.sym BitBase32- offset -u19- group) newval))
   4003     )
   4004     (define-derived-operand
   4005       (name (.sym bit32- offset -11-FB-relative- group))
   4006       (comment "m32c bit,base:11[fb] relative bit")
   4007       (attrs (machine 32))
   4008       (mode BI)
   4009       (args ((.sym BitBase32- offset -s11- group)))
   4010       (syntax (.str "${BitBase32-" offset "-s11-" group "}[fb]"))
   4011       (base-ifield (.sym f- base1 -12))
   4012       (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -2) 3) (.sym BitBase32- offset -s11- group)))
   4013       (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -2) 3)))
   4014       (getter (get-memory-bit 32 (reg h-fb) (.sym BitBase32- offset -s11- group)))
   4015       (setter (set-memory-bit 32 (reg h-fb) (.sym BitBase32- offset -s11- group) newval))
   4016     )
   4017     (define-derived-operand
   4018       (name (.sym bit32- offset -19-FB-relative- group))
   4019       (comment "m32c bit,base:19[fb] relative bit")
   4020       (attrs (machine 32))
   4021       (mode BI)
   4022       (args ((.sym BitBase32- offset -s19- group)))
   4023       (syntax (.str "${BitBase32-" offset "-s19-" group "}[fb]"))
   4024       (base-ifield (.sym f- base1 -12))
   4025       (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -2) 3) (.sym BitBase32- offset -s19- group)))
   4026       (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -2) 3)))
   4027       (getter (get-memory-bit 32 (reg h-fb) (.sym BitBase32- offset -s19- group)))
   4028       (setter (set-memory-bit 32 (reg h-fb) (.sym BitBase32- offset -s19- group) newval))
   4029     )
   4030     (define-derived-operand
   4031       (name (.sym bit32- offset -11-An-relative- group))
   4032       (comment "m32c bit,base:11[An] relative bit")
   4033       (attrs (machine 32))
   4034       (mode BI)
   4035       (args ((.sym BitBase32- offset -u11- group) (.sym Bit32An group)))
   4036       (syntax (.str "${BitBase32-" offset "-u11-" group "}[$Bit32An" group "]"))
   4037       (base-ifield (.sym f- base1 -12))
   4038       (encoding (+ ((.sym f- base1 -3) 1) ((.sym f- base2 -1) 0) (.sym BitBase32- offset -u11- group) (.sym Bit32An group)))
   4039       (ifield-assertion (andif (eq (.sym f- base1 -3) 1) (eq (.sym f- base2 -1) 0)))
   4040       (getter (get-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u11- group)))
   4041       (setter (set-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u11- group) newval))
   4042     )
   4043     (define-derived-operand
   4044       (name (.sym bit32- offset -19-An-relative- group))
   4045       (comment "m32c bit,base:19[An] relative bit")
   4046       (attrs (machine 32))
   4047       (mode BI)
   4048       (args ((.sym BitBase32- offset -u19- group) (.sym Bit32An group)))
   4049       (syntax (.str "${BitBase32-" offset "-u19-" group "}[$Bit32An" group "]"))
   4050       (base-ifield (.sym f- base1 -12))
   4051       (encoding (+ ((.sym f- base1 -3) 2) ((.sym f- base2 -1) 0) (.sym BitBase32- offset -u19- group) (.sym Bit32An group)))
   4052       (ifield-assertion (andif (eq (.sym f- base1 -3) 2) (eq (.sym f- base2 -1) 0)))
   4053       (getter (get-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u19- group)))
   4054       (setter (set-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u19- group) newval))
   4055     )
   4056     (define-derived-operand
   4057       (name (.sym bit32- offset -27-An-relative- group))
   4058       (comment "m32c bit,base:27[An] relative bit")
   4059       (attrs (machine 32))
   4060       (mode BI)
   4061       (args ((.sym BitBase32- offset -u27- group) (.sym Bit32An group)))
   4062       (syntax (.str "${BitBase32-" offset "-u27-" group "}[$Bit32An" group "]"))
   4063       (base-ifield (.sym f- base1 -12))
   4064       (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -1) 0) (.sym BitBase32- offset -u27- group) (.sym Bit32An group)))
   4065       (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -1) 0)))
   4066       (getter (get-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u27- group)))
   4067       (setter (set-memory-bit 32 (.sym Bit32An group) (.sym BitBase32- offset -u27- group) newval))
   4068     )
   4069   )
   4070 )
   4071 
   4072 (bit32-relative-operand 16 Unprefixed  4  8)
   4073 (bit32-relative-operand 24   Prefixed 12 16)
   4074 
   4075 (define-derived-operand
   4076   (name bit16-11-SB-relative-S)
   4077   (comment "m16c bit,base:11[sb] relative bit")
   4078   (attrs (machine 16))
   4079   (mode BI)
   4080   (args (BitBase16-8-u11-S))
   4081   (syntax "${BitBase16-8-u11-S}[sb]")
   4082   (base-ifield (.sym f-5-3))
   4083   (encoding (+ BitBase16-8-u11-S))
   4084 ;  (ifield-assertion (#t))
   4085   (getter (get-memory-bit 16 (reg h-sb) BitBase16-8-u11-S))
   4086   (setter (set-memory-bit 16 (reg h-sb) BitBase16-8-u11-S newval))
   4087 )
   4088 
   4089 (define-derived-operand
   4090   (name Rn16-push-S-derived)
   4091   (comment "m16c r0[lh] for push,pop short version")
   4092   (attrs (machine 16))
   4093   (mode QI)
   4094   (args (Rn16-push-S))
   4095   (syntax "${Rn16-push-S}")
   4096   (base-ifield (.sym f-4-1))
   4097   (encoding (+ Rn16-push-S))
   4098 ;  (ifield-assertion (#t))
   4099   (getter (trunc QI Rn16-push-S))
   4100   (setter (set Rn16-push-S newval))
   4101 )
   4102 
   4103 (define-derived-operand
   4104   (name An16-push-S-derived)
   4105   (comment "m16c r0[lh] for push,pop short version")
   4106   (attrs (machine 16))
   4107   (mode HI)
   4108   (args (An16-push-S))
   4109   (syntax "${An16-push-S}")
   4110   (base-ifield (.sym f-4-1))
   4111   (encoding (+ An16-push-S))
   4112 ;  (ifield-assertion (#t))
   4113   (getter (trunc QI An16-push-S))
   4114   (setter (set An16-push-S newval))
   4115 )
   4116 
   4117 ;-------------------------------------------------------------
   4118 ; Absolute address
   4119 ;-------------------------------------------------------------
   4120 
   4121 (define-pmacro (bit16-absolute offset)
   4122   (begin
   4123     (define-derived-operand
   4124       (name (.sym bit16- offset -16-absolute))
   4125       (comment "m16c absolute address")
   4126       (attrs (machine 16))
   4127       (mode BI)
   4128       (args ((.sym BitBase16- offset -u16)))
   4129       (syntax (.str "${BitBase16-" offset "-u16}"))
   4130       (base-ifield f-12-4)
   4131       (encoding (+ (f-12-4 #xF) (.sym BitBase16- offset -u16)))
   4132       (ifield-assertion (eq f-12-4 #xF))
   4133       (getter (get-memory-bit 16 0 (.sym BitBase16- offset -u16)))
   4134       (setter (set-memory-bit 16 0 (.sym BitBase16- offset -u16) newval))
   4135     )
   4136   )
   4137 )
   4138 
   4139 (bit16-absolute 16)
   4140 
   4141 (define-pmacro (bit32-absolute offset group base1 base2)
   4142   (begin
   4143     (define-derived-operand
   4144       (name (.sym bit32- offset -19-absolute- group))
   4145       (comment "m32c absolute address bit")
   4146       (attrs (machine 32))
   4147       (mode BI)
   4148       (args ((.sym BitBase32- offset -u19- group)))
   4149       (syntax (.str "${BitBase32-" offset "-u19-" group "}"))
   4150       (base-ifield (.sym f- base1 -12))
   4151       (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 3) (.sym BitBase32- offset -u19- group)))
   4152       (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 3)))
   4153       (getter (get-memory-bit 32 0 (.sym BitBase32- offset -u19- group)))
   4154       (setter (set-memory-bit 32 0 (.sym BitBase32- offset -u19- group) newval))
   4155     )
   4156     (define-derived-operand
   4157       (name (.sym bit32- offset -27-absolute- group))
   4158       (comment "m32c absolute address bit")
   4159       (attrs (machine 32))
   4160       (mode BI)
   4161       (args ((.sym BitBase32- offset -u27- group)))
   4162       (syntax (.str "${BitBase32-" offset "-u27-" group "}"))
   4163       (base-ifield (.sym f- base1 -12))
   4164       (encoding (+ ((.sym f- base1 -3) 3) ((.sym f- base2 -2) 2) (.sym BitBase32- offset -u27- group)))
   4165       (ifield-assertion (andif (eq (.sym f- base1 -3) 3) (eq (.sym f- base2 -2) 2)))
   4166       (getter (get-memory-bit 32 0 (.sym BitBase32- offset -u27- group)))
   4167       (setter (set-memory-bit 32 0 (.sym BitBase32- offset -u27- group) newval))
   4168     )
   4169   )
   4170 )
   4171 
   4172 (bit32-absolute 16 Unprefixed  4  8)
   4173 (bit32-absolute 24   Prefixed 12 16)
   4174 
   4175 ;-------------------------------------------------------------
   4176 ; Destination operands for short fomat insns
   4177 ;-------------------------------------------------------------
   4178 
   4179 (define-derived-operand
   4180   (name dst16-3-S-R0l-direct-QI)
   4181   (comment "m16c R0l direct QI")
   4182   (attrs (machine 16))
   4183   (mode QI)
   4184   (args (R0l))
   4185   (syntax "r0l")
   4186   (base-ifield f-5-3)
   4187   (encoding (+ (f-5-3 4)))
   4188   (ifield-assertion (eq f-5-3 4))
   4189   (getter (trunc QI R0l))
   4190   (setter (set R0l newval))
   4191 )
   4192 (define-derived-operand
   4193   (name dst16-3-S-R0h-direct-QI)
   4194   (comment "m16c R0h direct QI")
   4195   (attrs (machine 16))
   4196   (mode QI)
   4197   (args (R0h))
   4198   (syntax "r0h")
   4199   (base-ifield f-5-3)
   4200   (encoding (+ (f-5-3 3)))
   4201   (ifield-assertion (eq f-5-3 3))
   4202   (getter (trunc QI R0h))
   4203   (setter (set R0h newval))
   4204 )
   4205 (define-derived-operand
   4206   (name dst16-3-S-8-8-SB-relative-QI)
   4207   (comment "m16c SB relative QI")
   4208   (attrs (machine 16))
   4209   (mode QI)
   4210   (args (Dsp-8-u8))
   4211   (syntax "${Dsp-8-u8}[sb]")
   4212   (base-ifield f-5-3)
   4213   (encoding (+ (f-5-3 5) Dsp-8-u8))
   4214   (ifield-assertion (eq f-5-3 5))
   4215   (getter (mem16 QI (add Dsp-8-u8 (reg h-sb))))
   4216   (setter (set (mem16 QI (add Dsp-8-u8 (reg h-sb))) newval))
   4217 )
   4218 (define-derived-operand
   4219   (name dst16-3-S-8-8-FB-relative-QI)
   4220   (comment "m16c FB relative QI")
   4221   (attrs (machine 16))
   4222   (mode QI)
   4223   (args (Dsp-8-s8))
   4224   (syntax "${Dsp-8-s8}[fb]")
   4225   (base-ifield f-5-3)
   4226   (encoding (+ (f-5-3 6) Dsp-8-s8))
   4227   (ifield-assertion (eq f-5-3 6))
   4228   (getter (mem16 QI (add Dsp-8-s8 (reg h-fb))))
   4229   (setter (set (mem16 QI (add Dsp-8-s8 (reg h-fb))) newval))
   4230 )
   4231 (define-derived-operand
   4232   (name dst16-3-S-8-16-absolute-QI)
   4233   (comment "m16c absolute address QI")
   4234   (attrs (machine 16))
   4235   (mode QI)
   4236   (args (Dsp-8-u16))
   4237   (syntax "${Dsp-8-u16}")
   4238   (base-ifield f-5-3)
   4239   (encoding (+ (f-5-3 7) Dsp-8-u16))
   4240   (ifield-assertion (eq f-5-3 7))
   4241   (getter (mem16 QI Dsp-8-u16))
   4242   (setter (set (mem16 QI Dsp-8-u16) newval))
   4243 )
   4244 (define-derived-operand
   4245   (name dst16-3-S-16-8-SB-relative-QI)
   4246   (comment "m16c SB relative QI")
   4247   (attrs (machine 16))
   4248   (mode QI)
   4249   (args (Dsp-16-u8))
   4250   (syntax "${Dsp-16-u8}[sb]")
   4251   (base-ifield f-5-3)
   4252   (encoding (+ (f-5-3 5) Dsp-16-u8))
   4253   (ifield-assertion (eq f-5-3 5))
   4254   (getter (mem16 QI (add Dsp-16-u8 (reg h-sb))))
   4255   (setter (set (mem16 QI (add Dsp-16-u8 (reg h-sb))) newval))
   4256 )
   4257 (define-derived-operand
   4258   (name dst16-3-S-16-8-FB-relative-QI)
   4259   (comment "m16c FB relative QI")
   4260   (attrs (machine 16))
   4261   (mode QI)
   4262   (args (Dsp-16-s8))
   4263   (syntax "${Dsp-16-s8}[fb]")
   4264   (base-ifield f-5-3)
   4265   (encoding (+ (f-5-3 6) Dsp-16-s8))
   4266   (ifield-assertion (eq f-5-3 6))
   4267   (getter (mem16 QI (add Dsp-16-s8 (reg h-fb))))
   4268   (setter (set (mem16 QI (add Dsp-16-s8 (reg h-fb))) newval))
   4269 )
   4270 (define-derived-operand
   4271   (name dst16-3-S-16-16-absolute-QI)
   4272   (comment "m16c absolute address QI")
   4273   (attrs (machine 16))
   4274   (mode QI)
   4275   (args (Dsp-16-u16))
   4276   (syntax "${Dsp-16-u16}")
   4277   (base-ifield f-5-3)
   4278   (encoding (+ (f-5-3 7) Dsp-16-u16))
   4279   (ifield-assertion (eq f-5-3 7))
   4280   (getter (mem16 QI Dsp-16-u16))
   4281   (setter (set (mem16 QI Dsp-16-u16) newval))
   4282 )
   4283 (define-derived-operand
   4284   (name srcdst16-r0l-r0h-S-derived)
   4285   (comment "m16c r0l/r0h operand for short format insns")
   4286   (attrs (machine 16))
   4287   (mode SI)
   4288   (args (SrcDst16-r0l-r0h-S-normal))
   4289   (syntax "${SrcDst16-r0l-r0h-S-normal}")
   4290   (base-ifield f-6-3)
   4291   (encoding (+ (f-6-2 0) SrcDst16-r0l-r0h-S-normal))
   4292   (ifield-assertion (eq f-6-2 0))
   4293   (getter (trunc SI SrcDst16-r0l-r0h-S-normal))
   4294   (setter ()) ; no setter
   4295 )
   4296 (define-derived-operand
   4297   (name dst32-2-S-R0l-direct-QI)
   4298   (comment "m32c R0l direct QI")
   4299   (attrs (machine 32))
   4300   (mode QI)
   4301   (args (R0l))
   4302   (syntax "r0l")
   4303   (base-ifield f-2-2)
   4304   (encoding (+ (f-2-2 0)))
   4305   (ifield-assertion (eq f-2-2 0))
   4306   (getter (trunc QI R0l))
   4307   (setter (set R0l newval))
   4308 )
   4309 (define-derived-operand
   4310   (name dst32-2-S-R0-direct-HI)
   4311   (comment "m32c R0 direct HI")
   4312   (attrs (machine 32))
   4313   (mode HI)
   4314   (args (R0))
   4315   (syntax "r0")
   4316   (base-ifield f-2-2)
   4317   (encoding (+ (f-2-2 0)))
   4318   (ifield-assertion (eq f-2-2 0))
   4319   (getter (trunc HI R0))
   4320   (setter (set R0 newval))
   4321 )
   4322 (define-derived-operand
   4323   (name dst32-1-S-A0-direct-HI)
   4324   (comment "m32c A0 direct HI")
   4325   (attrs (machine 32))
   4326   (mode HI)
   4327   (args (A0))
   4328   (syntax "a0")
   4329   (base-ifield f-7-1)
   4330   (encoding (+ (f-7-1 0)))
   4331   (ifield-assertion (eq f-7-1 0))
   4332   (getter (trunc HI A0))
   4333   (setter (set A0 newval))
   4334 )
   4335 (define-derived-operand
   4336   (name dst32-1-S-A1-direct-HI)
   4337   (comment "m32c A1 direct HI")
   4338   (attrs (machine 32))
   4339   (mode HI)
   4340   (args (A1))
   4341   (syntax "a1")
   4342   (base-ifield f-7-1)
   4343   (encoding (+ (f-7-1 1)))
   4344   (ifield-assertion (eq f-7-1 1))
   4345   (getter (trunc HI A1))
   4346   (setter (set A1 newval))
   4347 )
   4348 (define-pmacro (dst32-2-S-operands xmode)
   4349   (begin
   4350     (define-derived-operand
   4351       (name (.sym dst32-2-S-8-SB-relative- xmode))
   4352       (comment "m32c SB relative for short binary insns")
   4353       (attrs (machine 32))
   4354       (mode xmode)
   4355       (args (Dsp-8-u8))
   4356       (syntax "${Dsp-8-u8}[sb]")
   4357       (base-ifield f-2-2)
   4358       (encoding (+ (f-2-2 2) Dsp-8-u8))
   4359       (ifield-assertion (eq f-2-2 2))
   4360       (getter (c-call xmode (.str "operand_getter_" xmode) sb Dsp-8-u8))
   4361       (setter (c-call DFLT (.str "operand_setter_" xmode) newval sb Dsp-8-u8))
   4362 ;      (getter (mem32 xmode (add Dsp-8-u8 (reg h-sb))))
   4363 ;      (setter (set (mem32 xmode (add Dsp-8-u8 (reg h-sb))) newval))
   4364     )
   4365     (define-derived-operand
   4366       (name (.sym dst32-2-S-8-FB-relative- xmode))
   4367       (comment "m32c FB relative for short binary insns")
   4368       (attrs (machine 32))
   4369       (mode xmode)
   4370       (args (Dsp-8-s8))
   4371       (syntax "${Dsp-8-s8}[fb]")
   4372       (base-ifield f-2-2)
   4373       (encoding (+ (f-2-2 3) Dsp-8-s8))
   4374       (ifield-assertion (eq f-2-2 3))
   4375       (getter (c-call xmode (.str "operand_getter_" xmode) fb Dsp-8-s8))
   4376       (setter (c-call DFLT (.str "operand_setter_" xmode) newval fb Dsp-8-s8))
   4377 ;      (getter (mem32 xmode (add Dsp-8-s8 (reg h-fb))))
   4378 ;      (setter (set (mem32 xmode (add Dsp-8-s8 (reg h-fb))) newval))
   4379     )
   4380     (define-derived-operand
   4381       (name (.sym dst32-2-S-16-absolute- xmode))
   4382       (comment "m32c absolute address for short binary insns")
   4383       (attrs (machine 32))
   4384       (mode xmode)
   4385       (args (Dsp-8-u16))
   4386       (syntax "${Dsp-8-u16}")
   4387       (base-ifield f-2-2)
   4388       (encoding (+ (f-2-2 1) Dsp-8-u16))
   4389       (ifield-assertion (eq f-2-2 1))
   4390       (getter (c-call xmode (.str "operand_getter_" xmode) (const 0) Dsp-8-u16))
   4391       (setter (c-call DFLT (.str "operand_setter_" xmode) newval (const 0) Dsp-8-u16))
   4392 ;      (getter (mem32 xmode Dsp-8-u16))
   4393 ;      (setter (set (mem32 xmode Dsp-8-u16) newval))
   4394     )
   4395 ;     (define-derived-operand
   4396 ;       (name (.sym dst32-2-S-8-SB-relative-indirect- xmode))
   4397 ;       (comment "m32c SB relative for short binary insns")
   4398 ;       (attrs (machine 32))
   4399 ;       (mode xmode)
   4400 ;       (args (Dsp-16-u8))
   4401 ;       (syntax "[${Dsp-16-u8}[sb]]")
   4402 ;       (base-ifield f-10-2)
   4403 ;       (encoding (+ (f-10-2 2) Dsp-16-u8))
   4404 ;       (ifield-assertion (eq f-10-2 2))
   4405 ;       (getter (mem32 xmode (indirect-addr (add Dsp-16-u8 (reg h-sb)))))
   4406 ;       (setter (set (mem32 xmode (indirect-addr (add Dsp-16-u8 (reg h-sb)))) newval))
   4407 ;     )
   4408 ;     (define-derived-operand
   4409 ;       (name (.sym dst32-2-S-8-FB-relative-indirect- xmode))
   4410 ;       (comment "m32c FB relative for short binary insns")
   4411 ;       (attrs (machine 32))
   4412 ;       (mode xmode)
   4413 ;       (args (Dsp-16-s8))
   4414 ;       (syntax "[${Dsp-16-s8}[fb]]")
   4415 ;       (base-ifield f-10-2)
   4416 ;       (encoding (+ (f-10-2 3) Dsp-16-s8))
   4417 ;       (ifield-assertion (eq f-10-2 3))
   4418 ;       (getter (mem32 xmode (indirect-addr (add Dsp-16-s8 (reg h-fb)))))
   4419 ;       (setter (set (mem32 xmode (indirect-addr (add Dsp-16-s8 (reg h-fb)))) newval))
   4420 ;     )
   4421 ;     (define-derived-operand
   4422 ;       (name (.sym dst32-2-S-16-absolute-indirect- xmode))
   4423 ;       (comment "m32c absolute address for short binary insns")
   4424 ;       (attrs (machine 32))
   4425 ;       (mode xmode)
   4426 ;       (args (Dsp-16-u16))
   4427 ;       (syntax "[${Dsp-16-u16}]")
   4428 ;       (base-ifield f-10-2)
   4429 ;       (encoding (+ (f-10-2 1) Dsp-16-u16))
   4430 ;       (ifield-assertion (eq f-10-2 1))
   4431 ;       (getter (mem32 xmode (indirect-addr Dsp-16-u16)))
   4432 ;       (setter (set (mem32 xmode (indirect-addr Dsp-16-u16)) newval))
   4433 ;     )
   4434   )
   4435 )
   4436 
   4437 (dst32-2-S-operands QI)
   4438 (dst32-2-S-operands HI)
   4439 (dst32-2-S-operands SI)
   4440     
   4441 ;=============================================================
   4442 ; Anyof operands
   4443 ;-------------------------------------------------------------
   4444 ; Source operands with no additional fields
   4445 ;-------------------------------------------------------------
   4446 
   4447 (define-pmacro (src16-basic-operand xmode)
   4448   (begin
   4449     (define-anyof-operand
   4450       (name (.sym src16-basic- xmode))
   4451       (comment (.str "m16c source operand of size " xmode " with no additional fields"))
   4452       (attrs (machine 16))
   4453       (mode xmode)
   4454       (choices
   4455        (.sym src16-Rn-direct- xmode)
   4456        (.sym src16-An-direct- xmode)
   4457        (.sym src16-An-indirect- xmode)
   4458       )
   4459     )
   4460   )
   4461 )
   4462 (src16-basic-operand QI)
   4463 (src16-basic-operand HI)
   4464 
   4465 (define-pmacro (src32-basic-operand xmode)
   4466   (begin
   4467     (define-anyof-operand
   4468       (name (.sym src32-basic-Unprefixed- xmode))
   4469       (comment (.str "m32c destination operand of size " xmode " with no additional fields"))
   4470       (attrs (machine 32))
   4471       (mode xmode)
   4472       (choices
   4473        (.sym src32-Rn-direct-Unprefixed- xmode)
   4474        (.sym src32-An-direct-Unprefixed- xmode)
   4475        (.sym src32-An-indirect-Unprefixed- xmode)
   4476       )
   4477     )
   4478     (define-anyof-operand
   4479       (name (.sym src32-basic-Prefixed- xmode))
   4480       (comment (.str "m32c destination operand of size " xmode " with no additional fields"))
   4481       (attrs (machine 32))
   4482       (mode xmode)
   4483       (choices
   4484        (.sym src32-Rn-direct-Prefixed- xmode)
   4485        (.sym src32-An-direct-Prefixed- xmode)
   4486        (.sym src32-An-indirect-Prefixed- xmode)
   4487       )
   4488     )
   4489 ;     (define-anyof-operand
   4490 ;       (name (.sym src32-basic-indirect- xmode))
   4491 ;       (comment (.str "m32c destination operand of size " xmode " indirect with no additional fields"))
   4492 ;       (attrs (machine 32))
   4493 ;       (mode xmode)
   4494 ;       (choices
   4495 ;        (.sym src32-An-indirect-indirect- xmode)
   4496 ;       )
   4497 ;     )
   4498   )
   4499 )
   4500 
   4501 (src32-basic-operand QI)
   4502 (src32-basic-operand HI)
   4503 (src32-basic-operand SI)
   4504 
   4505 (define-anyof-operand
   4506   (name src32-basic-ExtPrefixed-QI)
   4507   (comment "m32c source operand of size QI with no additional fields")
   4508   (attrs (machine 32))
   4509   (mode QI)
   4510   (choices
   4511    src32-Rn-direct-Prefixed-QI
   4512    src32-An-indirect-Prefixed-QI
   4513   )
   4514 )
   4515 
   4516 ;-------------------------------------------------------------
   4517 ; Source operands with additional fields at offset 16 bits
   4518 ;-------------------------------------------------------------
   4519 
   4520 (define-pmacro (src16-16-operand xmode)
   4521   (begin
   4522     (define-anyof-operand
   4523       (name (.sym src16-16-8- xmode))
   4524       (comment (.str "m16c source operand of size " xmode " with additional 8 bit fields at offset 16"))
   4525       (attrs (machine 16))
   4526       (mode xmode)
   4527       (choices
   4528        (.sym src16-16-8-An-relative- xmode)
   4529        (.sym src16-16-8-SB-relative- xmode)
   4530        (.sym src16-16-8-FB-relative- xmode)
   4531       )
   4532     )
   4533     (define-anyof-operand
   4534       (name (.sym src16-16-16- xmode))
   4535       (comment (.str "m16c source operand of size " xmode " with additional 16 bit fields at offset 16"))
   4536       (attrs (machine 16))
   4537       (mode xmode)
   4538       (choices
   4539        (.sym src16-16-16-An-relative- xmode)
   4540        (.sym src16-16-16-SB-relative- xmode)
   4541        (.sym src16-16-16-absolute- xmode)
   4542       )
   4543     )
   4544   )
   4545 )
   4546 (src16-16-operand QI)
   4547 (src16-16-operand HI)
   4548 
   4549 (define-pmacro (src32-16-operand xmode)
   4550   (begin
   4551     (define-anyof-operand
   4552       (name (.sym src32-16-8-Unprefixed- xmode))
   4553       (comment (.str "m32c source operand of size " xmode " with additional 8 bit fields at offset 16"))
   4554       (attrs (machine 32))
   4555       (mode xmode)
   4556       (choices
   4557        (.sym src32-16-8-An-relative-Unprefixed- xmode)
   4558        (.sym src32-16-8-SB-relative-Unprefixed- xmode)
   4559        (.sym src32-16-8-FB-relative-Unprefixed- xmode)
   4560       )
   4561     )
   4562     (define-anyof-operand
   4563       (name (.sym src32-16-16-Unprefixed- xmode))
   4564       (comment (.str "m32c source operand of size " xmode " with additional 16 bit fields at offset 16"))
   4565       (attrs (machine 32))
   4566       (mode xmode)
   4567       (choices
   4568        (.sym src32-16-16-An-relative-Unprefixed- xmode)
   4569        (.sym src32-16-16-SB-relative-Unprefixed- xmode)
   4570        (.sym src32-16-16-FB-relative-Unprefixed- xmode)
   4571        (.sym src32-16-16-absolute-Unprefixed- xmode)
   4572       )
   4573     )
   4574     (define-anyof-operand
   4575       (name (.sym src32-16-24-Unprefixed- xmode))
   4576       (comment (.str "m32c source operand of size " xmode " with additional 24 bit fields at offset 16"))
   4577       (attrs (machine 32))
   4578       (mode xmode)
   4579       (choices
   4580        (.sym src32-16-24-An-relative-Unprefixed- xmode)
   4581        (.sym src32-16-24-absolute-Unprefixed- xmode)
   4582       )
   4583     )
   4584   )
   4585 )
   4586 
   4587 (src32-16-operand QI)
   4588 (src32-16-operand HI)
   4589 (src32-16-operand SI)
   4590 
   4591 ;-------------------------------------------------------------
   4592 ; Source operands with additional fields at offset 24 bits
   4593 ;-------------------------------------------------------------
   4594 
   4595 (define-pmacro (src-24-operand group xmode)
   4596   (begin
   4597     (define-anyof-operand
   4598       (name (.sym src32-24-8- group - xmode))
   4599       (comment (.str "m32c source operand of size " xmode " with additional 8 bit fields at offset 24"))
   4600       (attrs (machine 32))
   4601       (mode xmode)
   4602       (choices
   4603        (.sym src32-24-8-An-relative- group - xmode)
   4604        (.sym src32-24-8-SB-relative- group - xmode)
   4605        (.sym src32-24-8-FB-relative- group - xmode)
   4606       )
   4607     )
   4608     (define-anyof-operand
   4609       (name (.sym src32-24-16- group - xmode))
   4610       (comment (.str "m32c source operand of size " xmode " with additional 16 bit fields at offset 16"))
   4611       (attrs (machine 32))
   4612       (mode xmode)
   4613       (choices
   4614        (.sym src32-24-16-An-relative- group - xmode)
   4615        (.sym src32-24-16-SB-relative- group - xmode)
   4616        (.sym src32-24-16-FB-relative- group - xmode)
   4617        (.sym src32-24-16-absolute- group - xmode)
   4618       )
   4619     )
   4620     (define-anyof-operand
   4621       (name (.sym src32-24-24- group - xmode))
   4622       (comment (.str "m32c source operand of size " xmode " with additional 24 bit fields at offset 16"))
   4623       (attrs (machine 32))
   4624       (mode xmode)
   4625       (choices
   4626        (.sym src32-24-24-An-relative- group - xmode)
   4627        (.sym src32-24-24-absolute- group - xmode)
   4628       )
   4629     )
   4630   )
   4631 )
   4632 
   4633 (src-24-operand Prefixed   QI)
   4634 (src-24-operand Prefixed   HI)
   4635 (src-24-operand Prefixed   SI)
   4636 
   4637 (define-pmacro (src-24-indirect-operand xmode)
   4638   (begin
   4639 ;     (define-anyof-operand
   4640 ;       (name (.sym src32-24-8-indirect- xmode))
   4641 ;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
   4642 ;       (attrs (machine 32))
   4643 ;       (mode xmode)
   4644 ;       (choices
   4645 ;        (.sym src32-24-8-An-relative-indirect- xmode)
   4646 ;        (.sym src32-24-8-SB-relative-indirect- xmode)
   4647 ;        (.sym src32-24-8-FB-relative-indirect- xmode)
   4648 ;       )
   4649 ;     )
   4650 ;     (define-anyof-operand
   4651 ;       (name (.sym src32-24-16-indirect- xmode))
   4652 ;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
   4653 ;       (attrs (machine 32))
   4654 ;       (mode xmode)
   4655 ;       (choices
   4656 ;        (.sym src32-24-16-An-relative-indirect- xmode)
   4657 ;        (.sym src32-24-16-SB-relative-indirect- xmode)
   4658 ;        (.sym src32-24-16-FB-relative-indirect- xmode)
   4659 ;       )
   4660 ;     )
   4661 ;     (define-anyof-operand
   4662 ;       (name (.sym src32-24-24-indirect- xmode))
   4663 ;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
   4664 ;       (attrs (machine 32))
   4665 ;       (mode xmode)
   4666 ;       (choices
   4667 ;        (.sym src32-24-24-An-relative-indirect- xmode)
   4668 ;       )
   4669 ;     )
   4670 ;     (define-anyof-operand
   4671 ;       (name (.sym src32-24-16-absolute-indirect- xmode))
   4672 ;       (comment (.str "m32c source operand of size " xmode " 16 bit absolute indirect"))
   4673 ;       (attrs (machine 32))
   4674 ;       (mode xmode)
   4675 ;       (choices
   4676 ;        (.sym src32-24-16-absolute-indirect-derived- xmode)
   4677 ;       )
   4678 ;     )
   4679 ;     (define-anyof-operand
   4680 ;       (name (.sym src32-24-24-absolute-indirect- xmode))
   4681 ;       (comment (.str "m32c source operand of size " xmode " 24 bit absolute indirect"))
   4682 ;       (attrs (machine 32))
   4683 ;       (mode xmode)
   4684 ;       (choices
   4685 ;        (.sym src32-24-24-absolute-indirect-derived- xmode)
   4686 ;       )
   4687 ;     )
   4688   )
   4689 )
   4690 
   4691 ; (src-24-indirect-operand QI)
   4692 ; (src-24-indirect-operand HI)
   4693 ; (src-24-indirect-operand SI)
   4694 
   4695 ;-------------------------------------------------------------
   4696 ; Destination operands with no additional fields
   4697 ;-------------------------------------------------------------
   4698 
   4699 (define-pmacro (dst16-basic-operand xmode)
   4700   (begin
   4701     (define-anyof-operand
   4702       (name (.sym dst16-basic- xmode))
   4703       (comment (.str "m16c destination operand of size " xmode " with no additional fields"))
   4704       (attrs (machine 16))
   4705       (mode xmode)
   4706       (choices
   4707        (.sym dst16-Rn-direct- xmode)
   4708        (.sym dst16-An-direct- xmode)
   4709        (.sym dst16-An-indirect- xmode)
   4710       )
   4711     )
   4712   )
   4713 )
   4714 
   4715 (dst16-basic-operand QI)
   4716 (dst16-basic-operand HI)
   4717 (dst16-basic-operand SI)
   4718 
   4719 (define-pmacro (dst32-basic-operand xmode)
   4720   (begin
   4721     (define-anyof-operand
   4722       (name (.sym dst32-basic-Unprefixed- xmode))
   4723       (comment (.str "m32c destination operand of size " xmode " with no additional fields"))
   4724       (attrs (machine 32))
   4725       (mode xmode)
   4726       (choices
   4727        (.sym dst32-Rn-direct-Unprefixed- xmode)
   4728        (.sym dst32-An-direct-Unprefixed- xmode)
   4729        (.sym dst32-An-indirect-Unprefixed- xmode)
   4730       )
   4731     )
   4732     (define-anyof-operand
   4733       (name (.sym dst32-basic-Prefixed- xmode))
   4734       (comment (.str "m32c destination operand of size " xmode " with no additional fields"))
   4735       (attrs (machine 32))
   4736       (mode xmode)
   4737       (choices
   4738        (.sym dst32-Rn-direct-Prefixed- xmode)
   4739        (.sym dst32-An-direct-Prefixed- xmode)
   4740        (.sym dst32-An-indirect-Prefixed- xmode)
   4741       )
   4742     )
   4743   )
   4744 )
   4745 
   4746 (dst32-basic-operand QI)
   4747 (dst32-basic-operand HI)
   4748 (dst32-basic-operand SI)
   4749 
   4750 ;-------------------------------------------------------------
   4751 ; Destination operands with possible additional fields at offset 16 bits
   4752 ;-------------------------------------------------------------
   4753 
   4754 (define-pmacro (dst16-16-operand xmode)
   4755   (begin
   4756     (define-anyof-operand
   4757       (name (.sym dst16-16- xmode))
   4758       (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 16"))
   4759       (attrs (machine 16))
   4760       (mode xmode)
   4761       (choices
   4762        (.sym dst16-Rn-direct- xmode)
   4763        (.sym dst16-An-direct- xmode)
   4764        (.sym dst16-An-indirect- xmode)
   4765        (.sym dst16-16-8-An-relative- xmode)
   4766        (.sym dst16-16-16-An-relative- xmode)
   4767        (.sym dst16-16-8-SB-relative- xmode)
   4768        (.sym dst16-16-16-SB-relative- xmode)
   4769        (.sym dst16-16-8-FB-relative- xmode)
   4770        (.sym dst16-16-16-absolute- xmode)
   4771       )
   4772     )
   4773     (define-anyof-operand
   4774       (name (.sym dst16-16-8- xmode))
   4775       (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 16"))
   4776       (attrs (machine 16))
   4777       (mode xmode)
   4778       (choices
   4779        (.sym dst16-16-8-An-relative- xmode)
   4780        (.sym dst16-16-8-SB-relative- xmode)
   4781        (.sym dst16-16-8-FB-relative- xmode)
   4782       )
   4783     )
   4784     (define-anyof-operand
   4785       (name (.sym dst16-16-16- xmode))
   4786       (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 16"))
   4787       (attrs (machine 16))
   4788       (mode xmode)
   4789       (choices
   4790        (.sym dst16-16-16-An-relative- xmode)
   4791        (.sym dst16-16-16-SB-relative- xmode)
   4792        (.sym dst16-16-16-absolute- xmode)
   4793       )
   4794     )
   4795     (define-anyof-operand
   4796       (name (.sym dst16-16-16sa- xmode))
   4797       (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 16"))
   4798       (attrs (machine 16))
   4799       (mode xmode)
   4800       (choices
   4801        (.sym dst16-16-16-SB-relative- xmode)
   4802        (.sym dst16-16-16-absolute- xmode)
   4803       )
   4804     )
   4805     (define-anyof-operand
   4806       (name (.sym dst16-16-20ar- xmode))
   4807       (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 16"))
   4808       (attrs (machine 16))
   4809       (mode xmode)
   4810       (choices
   4811        (.sym dst16-16-20-An-relative- xmode)
   4812       )
   4813     )
   4814   )
   4815 )
   4816 
   4817 (dst16-16-operand QI)
   4818 (dst16-16-operand HI)
   4819 (dst16-16-operand SI)
   4820 
   4821 (define-anyof-operand
   4822   (name dst16-16-Ext-QI)
   4823   (comment "m16c destination operand of size QI for 'ext' insns with additional fields at offset 16")
   4824   (attrs (machine 16))
   4825   (mode QI)
   4826   (choices
   4827    dst16-Rn-direct-Ext-QI
   4828    dst16-An-indirect-Ext-QI
   4829    dst16-16-8-An-relative-Ext-QI
   4830    dst16-16-16-An-relative-Ext-QI
   4831    dst16-16-8-SB-relative-Ext-QI
   4832    dst16-16-16-SB-relative-Ext-QI
   4833    dst16-16-8-FB-relative-Ext-QI
   4834    dst16-16-16-absolute-Ext-QI
   4835   )
   4836 )
   4837 
   4838 (define-derived-operand
   4839   (name dst16-An-indirect-Mova-HI)
   4840   (comment "m16c addressof An indirect destination HI")
   4841   (attrs (ISA m16c))
   4842   (mode HI)
   4843   (args (Dst16An))
   4844   (syntax "[$Dst16An]")
   4845   (base-ifield f-12-4)
   4846   (encoding (+ (f-12-2 1) (f-14-1 1) Dst16An))
   4847   (ifield-assertion
   4848     (andif (eq f-12-2 1) (eq f-14-1 1)))
   4849   (getter Dst16An)
   4850   (setter (nop))
   4851   )
   4852 
   4853 (define-derived-operand
   4854   (name dst16-16-8-An-relative-Mova-HI)
   4855   (comment
   4856     "m16c addressof dsp:8[An] relative destination HI")
   4857   (attrs (ISA m16c))
   4858   (mode HI)
   4859   (args (Dst16An Dsp-16-u8))
   4860   (syntax "${Dsp-16-u8}[$Dst16An]")
   4861   (base-ifield f-12-4)
   4862   (encoding
   4863     (+ (f-12-2 2) (f-14-1 0) Dsp-16-u8 Dst16An))
   4864   (ifield-assertion
   4865     (andif (eq f-12-2 2) (eq f-14-1 0)))
   4866   (getter (add Dsp-16-u8 Dst16An))
   4867   (setter (nop))
   4868 )
   4869 (define-derived-operand
   4870   (name dst16-16-16-An-relative-Mova-HI)
   4871   (comment
   4872     "m16c addressof dsp:16[An] relative destination HI")
   4873   (attrs (ISA m16c))
   4874   (mode HI)
   4875   (args (Dst16An Dsp-16-u16))
   4876   (syntax "${Dsp-16-u16}[$Dst16An]")
   4877   (base-ifield f-12-4)
   4878   (encoding
   4879     (+ (f-12-2 3) (f-14-1 0) Dsp-16-u16 Dst16An))
   4880   (ifield-assertion
   4881     (andif (eq f-12-2 3) (eq f-14-1 0)))
   4882   (getter (add Dsp-16-u16 Dst16An))
   4883   (setter (nop))
   4884   )
   4885 (define-derived-operand
   4886   (name dst16-16-8-SB-relative-Mova-HI)
   4887   (comment
   4888     "m16c addressof dsp:8[sb] relative destination HI")
   4889   (attrs (ISA m16c))
   4890   (mode HI)
   4891   (args (Dsp-16-u8))
   4892   (syntax "${Dsp-16-u8}[sb]")
   4893   (base-ifield f-12-4)
   4894   (encoding (+ (f-12-4 10) Dsp-16-u8))
   4895   (ifield-assertion (eq f-12-4 10))
   4896   (getter (add Dsp-16-u8 (reg h-sb)))
   4897   (setter (nop))
   4898 )
   4899 (define-derived-operand
   4900   (name dst16-16-16-SB-relative-Mova-HI)
   4901   (comment
   4902     "m16c addressof dsp:16[sb] relative destination HI")
   4903   (attrs (ISA m16c))
   4904   (mode HI)
   4905   (args (Dsp-16-u16))
   4906   (syntax "${Dsp-16-u16}[sb]")
   4907   (base-ifield f-12-4)
   4908   (encoding (+ (f-12-4 14) Dsp-16-u16))
   4909   (ifield-assertion (eq f-12-4 14))
   4910   (getter (add Dsp-16-u16 (reg h-sb)))
   4911   (setter (nop))
   4912   )
   4913 (define-derived-operand
   4914   (name dst16-16-8-FB-relative-Mova-HI)
   4915   (comment
   4916     "m16c addressof dsp:8[fb] relative destination HI")
   4917   (attrs (ISA m16c))
   4918   (mode HI)
   4919   (args (Dsp-16-s8))
   4920   (syntax "${Dsp-16-s8}[fb]")
   4921   (base-ifield f-12-4)
   4922   (encoding (+ (f-12-4 11) Dsp-16-s8))
   4923   (ifield-assertion (eq f-12-4 11))
   4924   (getter (add Dsp-16-s8 (reg h-fb)))
   4925   (setter (nop))
   4926     )
   4927 (define-derived-operand
   4928   (name dst16-16-16-absolute-Mova-HI)
   4929   (comment "m16c addressof absolute address HI")
   4930   (attrs (ISA m16c))
   4931   (mode HI)
   4932   (args (Dsp-16-u16))
   4933   (syntax "${Dsp-16-u16}")
   4934   (base-ifield f-12-4)
   4935   (encoding (+ (f-12-4 15) Dsp-16-u16))
   4936   (ifield-assertion (eq f-12-4 15))
   4937   (getter Dsp-16-u16)
   4938   (setter (nop))
   4939   )
   4940 
   4941 (define-anyof-operand
   4942   (name dst16-16-Mova-HI)
   4943   (comment "m16c addressof destination operand of size HI with additional fields at offset 16")
   4944   (attrs (machine 16))
   4945   (mode HI)
   4946   (choices
   4947    dst16-An-indirect-Mova-HI
   4948    dst16-16-8-An-relative-Mova-HI
   4949    dst16-16-16-An-relative-Mova-HI
   4950    dst16-16-8-SB-relative-Mova-HI
   4951    dst16-16-16-SB-relative-Mova-HI
   4952    dst16-16-8-FB-relative-Mova-HI
   4953    dst16-16-16-absolute-Mova-HI
   4954   )
   4955 )
   4956 
   4957 (define-derived-operand
   4958   (name dst32-An-indirect-Unprefixed-Mova-SI)
   4959   (comment "m32c addressof An indirect destination SI")
   4960   (attrs (ISA m32c))
   4961   (mode SI)
   4962   (args (Dst32AnUnprefixed))
   4963   (syntax "[$Dst32AnUnprefixed]")
   4964   (base-ifield f-4-6)
   4965   (encoding
   4966     (+ (f-4-3 0) (f-8-1 0) Dst32AnUnprefixed))
   4967   (ifield-assertion
   4968     (andif (eq f-4-3 0) (eq f-8-1 0)))
   4969   (getter Dst32AnUnprefixed)
   4970   (setter (nop))
   4971   )
   4972 
   4973 (define-derived-operand
   4974   (name dst32-16-8-An-relative-Unprefixed-Mova-SI)
   4975   (comment "m32c addressof dsp:8[An] relative destination SI")
   4976   (attrs (ISA m32c))
   4977   (mode SI)
   4978   (args (Dst32AnUnprefixed Dsp-16-u8))
   4979   (syntax "${Dsp-16-u8}[$Dst32AnUnprefixed]")
   4980   (base-ifield f-4-6)
   4981   (encoding
   4982     (+ (f-4-3 1)
   4983        (f-8-1 0)
   4984        Dsp-16-u8
   4985        Dst32AnUnprefixed))
   4986   (ifield-assertion
   4987     (andif (eq f-4-3 1) (eq f-8-1 0)))
   4988   (getter (add Dsp-16-u8 Dst32AnUnprefixed))
   4989   (setter (nop))
   4990 )
   4991 
   4992 (define-derived-operand
   4993   (name dst32-16-16-An-relative-Unprefixed-Mova-SI)
   4994   (comment
   4995     "m32c addressof dsp:16[An] relative destination SI")
   4996   (attrs (ISA m32c))
   4997   (mode SI)
   4998   (args (Dst32AnUnprefixed Dsp-16-u16))
   4999   (syntax "${Dsp-16-u16}[$Dst32AnUnprefixed]")
   5000   (base-ifield f-4-6)
   5001   (encoding
   5002     (+ (f-4-3 2)
   5003        (f-8-1 0)
   5004        Dsp-16-u16
   5005        Dst32AnUnprefixed))
   5006   (ifield-assertion
   5007     (andif (eq f-4-3 2) (eq f-8-1 0)))
   5008   (getter (add Dsp-16-u16 Dst32AnUnprefixed))
   5009   (setter (nop))
   5010   )
   5011 
   5012 (define-derived-operand
   5013   (name dst32-16-24-An-relative-Unprefixed-Mova-SI)
   5014   (comment "addressof m32c dsp:16[An] relative destination SI")
   5015   (attrs (ISA m32c))
   5016   (mode SI)
   5017   (args (Dst32AnUnprefixed Dsp-16-u24))
   5018   (syntax "${Dsp-16-u24}[$Dst32AnUnprefixed]")
   5019   (base-ifield f-4-6)
   5020   (encoding
   5021     (+ (f-4-3 3)
   5022        (f-8-1 0)
   5023        Dsp-16-u24
   5024        Dst32AnUnprefixed))
   5025   (ifield-assertion
   5026     (andif (eq f-4-3 3) (eq f-8-1 0)))
   5027   (getter (add Dsp-16-u24 Dst32AnUnprefixed))
   5028   (setter (nop))
   5029   )
   5030 
   5031 (define-derived-operand
   5032   (name dst32-16-8-SB-relative-Unprefixed-Mova-SI)
   5033   (comment "m32c addressof dsp:8[sb] relative destination SI")
   5034   (attrs (ISA m32c))
   5035   (mode SI)
   5036   (args (Dsp-16-u8))
   5037   (syntax "${Dsp-16-u8}[sb]")
   5038   (base-ifield f-4-6)
   5039   (encoding (+ (f-4-3 1) (f-8-2 2) Dsp-16-u8))
   5040   (ifield-assertion
   5041     (andif (eq f-4-3 1) (eq f-8-2 2)))
   5042   (getter (add Dsp-16-u8 (reg h-sb)))
   5043   (setter (nop))
   5044   )
   5045 
   5046 (define-derived-operand
   5047   (name dst32-16-16-SB-relative-Unprefixed-Mova-SI)
   5048   (comment "m32c addressof dsp:16[sb] relative destination SI")
   5049   (attrs (ISA m32c))
   5050   (mode SI)
   5051   (args (Dsp-16-u16))
   5052   (syntax "${Dsp-16-u16}[sb]")
   5053   (base-ifield f-4-6)
   5054   (encoding (+ (f-4-3 2) (f-8-2 2) Dsp-16-u16))
   5055   (ifield-assertion
   5056     (andif (eq f-4-3 2) (eq f-8-2 2)))
   5057   (getter (add Dsp-16-u16 (reg h-sb)))
   5058   (setter (nop))
   5059   )
   5060 
   5061 (define-derived-operand
   5062   (name dst32-16-8-FB-relative-Unprefixed-Mova-SI)
   5063   (comment "m32c addressof dsp:8[fb] relative destination SI")
   5064   (attrs (ISA m32c))
   5065   (mode SI)
   5066   (args (Dsp-16-s8))
   5067   (syntax "${Dsp-16-s8}[fb]")
   5068   (base-ifield f-4-6)
   5069   (encoding (+ (f-4-3 1) (f-8-2 3) Dsp-16-s8))
   5070   (ifield-assertion
   5071     (andif (eq f-4-3 1) (eq f-8-2 3)))
   5072   (getter (add Dsp-16-s8 (reg h-fb)))
   5073   (setter (nop))
   5074   )
   5075 
   5076 (define-derived-operand
   5077   (name dst32-16-16-FB-relative-Unprefixed-Mova-SI)
   5078   (comment "m32c addressof dsp:16[fb] relative destination SI")
   5079   (attrs (ISA m32c))
   5080   (mode SI)
   5081   (args (Dsp-16-s16))
   5082   (syntax "${Dsp-16-s16}[fb]")
   5083   (base-ifield f-4-6)
   5084   (encoding (+ (f-4-3 2) (f-8-2 3) Dsp-16-s16))
   5085   (ifield-assertion
   5086     (andif (eq f-4-3 2) (eq f-8-2 3)))
   5087   (getter (add Dsp-16-s16 (reg h-fb)))
   5088   (setter (nop))
   5089   )
   5090 
   5091 (define-derived-operand
   5092   (name dst32-16-16-absolute-Unprefixed-Mova-SI)
   5093   (comment "m32c addressof absolute address SI") (attrs (ISA m32c))
   5094   (mode SI)
   5095   (args (Dsp-16-u16))
   5096   (syntax "${Dsp-16-u16}")
   5097   (base-ifield f-4-6)
   5098   (encoding (+ (f-4-3 3) (f-8-2 3) Dsp-16-u16))
   5099   (ifield-assertion
   5100     (andif (eq f-4-3 3) (eq f-8-2 3)))
   5101   (getter Dsp-16-u16)
   5102   (setter (nop))
   5103   )
   5104 
   5105 (define-derived-operand
   5106   (name dst32-16-24-absolute-Unprefixed-Mova-SI)
   5107   (comment "m32c addressof absolute address SI") (attrs (ISA m32c))
   5108   (mode SI)
   5109   (args (Dsp-16-u24))
   5110   (syntax "${Dsp-16-u24}")
   5111   (base-ifield f-4-6)
   5112   (encoding (+ (f-4-3 3) (f-8-2 2) Dsp-16-u24))
   5113   (ifield-assertion
   5114     (andif (eq f-4-3 3) (eq f-8-2 2)))
   5115   (getter Dsp-16-u24)
   5116   (setter (nop))
   5117   )
   5118 
   5119 (define-anyof-operand
   5120   (name dst32-16-Unprefixed-Mova-SI)
   5121   (comment
   5122     "m32c addressof destination operand of size SI with additional fields at offset 16")
   5123   (attrs (ISA m32c))
   5124   (mode SI)
   5125   (choices
   5126     dst32-An-indirect-Unprefixed-Mova-SI
   5127     dst32-16-8-An-relative-Unprefixed-Mova-SI
   5128     dst32-16-16-An-relative-Unprefixed-Mova-SI
   5129     dst32-16-24-An-relative-Unprefixed-Mova-SI
   5130     dst32-16-8-SB-relative-Unprefixed-Mova-SI
   5131     dst32-16-16-SB-relative-Unprefixed-Mova-SI
   5132     dst32-16-8-FB-relative-Unprefixed-Mova-SI
   5133     dst32-16-16-FB-relative-Unprefixed-Mova-SI
   5134     dst32-16-16-absolute-Unprefixed-Mova-SI
   5135     dst32-16-24-absolute-Unprefixed-Mova-SI))
   5136 
   5137 (define-pmacro (dst32-16-operand xmode)
   5138   (begin
   5139     (define-anyof-operand
   5140       (name (.sym dst32-16-Unprefixed- xmode))
   5141       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 16"))
   5142       (attrs (machine 32))
   5143       (mode xmode)
   5144       (choices
   5145        (.sym dst32-Rn-direct-Unprefixed- xmode)
   5146        (.sym dst32-An-direct-Unprefixed- xmode)
   5147        (.sym dst32-An-indirect-Unprefixed- xmode)
   5148        (.sym dst32-16-8-An-relative-Unprefixed- xmode)
   5149        (.sym dst32-16-16-An-relative-Unprefixed- xmode)
   5150        (.sym dst32-16-24-An-relative-Unprefixed- xmode)
   5151        (.sym dst32-16-8-SB-relative-Unprefixed- xmode)
   5152        (.sym dst32-16-16-SB-relative-Unprefixed- xmode)
   5153        (.sym dst32-16-8-FB-relative-Unprefixed- xmode)
   5154        (.sym dst32-16-16-FB-relative-Unprefixed- xmode)
   5155        (.sym dst32-16-16-absolute-Unprefixed- xmode)
   5156        (.sym dst32-16-24-absolute-Unprefixed- xmode)
   5157       )
   5158     )
   5159     (define-anyof-operand
   5160       (name (.sym dst32-16-8-Unprefixed- xmode))
   5161       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 16"))
   5162       (attrs (machine 32))
   5163       (mode xmode)
   5164       (choices
   5165        (.sym dst32-16-8-An-relative-Unprefixed- xmode)
   5166        (.sym dst32-16-8-SB-relative-Unprefixed- xmode)
   5167        (.sym dst32-16-8-FB-relative-Unprefixed- xmode)
   5168       )
   5169     )
   5170     (define-anyof-operand
   5171       (name (.sym dst32-16-16-Unprefixed- xmode))
   5172       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 16"))
   5173       (attrs (machine 32))
   5174       (mode xmode)
   5175       (choices
   5176        (.sym dst32-16-16-An-relative-Unprefixed- xmode)
   5177        (.sym dst32-16-16-SB-relative-Unprefixed- xmode)
   5178        (.sym dst32-16-16-FB-relative-Unprefixed- xmode)
   5179        (.sym dst32-16-16-absolute-Unprefixed- xmode)
   5180       )
   5181     )
   5182     (define-anyof-operand
   5183       (name (.sym dst32-16-16sa-Unprefixed- xmode))
   5184       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 16"))
   5185       (attrs (machine 32))
   5186       (mode xmode)
   5187       (choices
   5188        (.sym dst32-16-16-SB-relative-Unprefixed- xmode)
   5189        (.sym dst32-16-16-FB-relative-Unprefixed- xmode)
   5190        (.sym dst32-16-16-absolute-Unprefixed- xmode)
   5191       )
   5192     )
   5193     (define-anyof-operand
   5194       (name (.sym dst32-16-24-Unprefixed- xmode))
   5195       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 16"))
   5196       (attrs (machine 32))
   5197       (mode xmode)
   5198       (choices
   5199        (.sym dst32-16-24-An-relative-Unprefixed- xmode)
   5200        (.sym dst32-16-24-absolute-Unprefixed- xmode)
   5201       )
   5202     )
   5203   )
   5204 )
   5205 
   5206 (dst32-16-operand QI)
   5207 (dst32-16-operand HI)
   5208 (dst32-16-operand SI)
   5209 
   5210 (define-pmacro (dst32-16-Ext-operand smode dmode)
   5211   (begin
   5212     (define-anyof-operand
   5213       (name (.sym dst32-16-ExtUnprefixed- smode))
   5214       (comment (.str "m32c destination operand of size " smode " with additional fields at offset 16"))
   5215       (attrs (machine 32))
   5216       (mode dmode)
   5217       (choices
   5218        (.sym dst32-Rn-direct-ExtUnprefixed- smode)
   5219        (.sym dst32-An-direct-Unprefixed- dmode) ; ExtUnprefixed mode not required for this operand -- use the normal dmode version
   5220        (.sym dst32-An-indirect-ExtUnprefixed- smode)
   5221        (.sym dst32-16-8-An-relative-ExtUnprefixed- smode)
   5222        (.sym dst32-16-16-An-relative-ExtUnprefixed- smode)
   5223        (.sym dst32-16-24-An-relative-ExtUnprefixed- smode)
   5224        (.sym dst32-16-8-SB-relative-ExtUnprefixed- smode)
   5225        (.sym dst32-16-16-SB-relative-ExtUnprefixed- smode)
   5226        (.sym dst32-16-8-FB-relative-ExtUnprefixed- smode)
   5227        (.sym dst32-16-16-FB-relative-ExtUnprefixed- smode)
   5228        (.sym dst32-16-16-absolute-ExtUnprefixed- smode)
   5229        (.sym dst32-16-24-absolute-ExtUnprefixed- smode)
   5230       )
   5231     )
   5232   )
   5233 )
   5234 
   5235 (dst32-16-Ext-operand QI HI)
   5236 (dst32-16-Ext-operand HI SI)
   5237 
   5238 (define-anyof-operand
   5239   (name dst32-16-Unprefixed-Mulex-HI)
   5240   (comment "m32c destination operand of size HI with additional fields at offset 16")
   5241   (attrs (machine 32))
   5242   (mode HI)
   5243   (choices
   5244    dst32-R3-direct-Unprefixed-HI
   5245    dst32-An-direct-Unprefixed-HI
   5246    dst32-An-indirect-Unprefixed-HI
   5247    dst32-16-8-An-relative-Unprefixed-HI
   5248    dst32-16-16-An-relative-Unprefixed-HI
   5249    dst32-16-24-An-relative-Unprefixed-HI
   5250    dst32-16-8-SB-relative-Unprefixed-HI
   5251    dst32-16-16-SB-relative-Unprefixed-HI
   5252    dst32-16-8-FB-relative-Unprefixed-HI
   5253    dst32-16-16-FB-relative-Unprefixed-HI
   5254    dst32-16-16-absolute-Unprefixed-HI
   5255    dst32-16-24-absolute-Unprefixed-HI
   5256   )
   5257 )
   5258 ;-------------------------------------------------------------
   5259 ; Destination operands with possible additional fields at offset 24 bits
   5260 ;-------------------------------------------------------------
   5261 
   5262 (define-pmacro (dst16-24-operand xmode)
   5263   (begin
   5264     (define-anyof-operand
   5265       (name (.sym dst16-24- xmode))
   5266       (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 24"))
   5267       (attrs (machine 16))
   5268       (mode xmode)
   5269       (choices
   5270        (.sym dst16-Rn-direct- xmode)
   5271        (.sym dst16-An-direct- xmode)
   5272        (.sym dst16-An-indirect- xmode)
   5273        (.sym dst16-24-8-An-relative- xmode)
   5274        (.sym dst16-24-16-An-relative- xmode)
   5275        (.sym dst16-24-8-SB-relative- xmode)
   5276        (.sym dst16-24-16-SB-relative- xmode)
   5277        (.sym dst16-24-8-FB-relative- xmode)
   5278        (.sym dst16-24-16-absolute- xmode)
   5279       )
   5280     )
   5281   )
   5282 )
   5283 
   5284 (dst16-24-operand QI)
   5285 (dst16-24-operand HI)
   5286 
   5287 (define-pmacro (dst32-24-operand xmode)
   5288   (begin
   5289     (define-anyof-operand
   5290       (name (.sym dst32-24-Unprefixed- xmode))
   5291       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
   5292       (attrs (machine 32))
   5293       (mode xmode)
   5294       (choices
   5295        (.sym dst32-Rn-direct-Unprefixed- xmode)
   5296        (.sym dst32-An-direct-Unprefixed- xmode)
   5297        (.sym dst32-An-indirect-Unprefixed- xmode)
   5298        (.sym dst32-24-8-An-relative-Unprefixed- xmode)
   5299        (.sym dst32-24-16-An-relative-Unprefixed- xmode)
   5300        (.sym dst32-24-24-An-relative-Unprefixed- xmode)
   5301        (.sym dst32-24-8-SB-relative-Unprefixed- xmode)
   5302        (.sym dst32-24-16-SB-relative-Unprefixed- xmode)
   5303        (.sym dst32-24-8-FB-relative-Unprefixed- xmode)
   5304        (.sym dst32-24-16-FB-relative-Unprefixed- xmode)
   5305        (.sym dst32-24-16-absolute-Unprefixed- xmode)
   5306        (.sym dst32-24-24-absolute-Unprefixed- xmode)
   5307       )
   5308     )
   5309     (define-anyof-operand
   5310       (name (.sym dst32-24-Prefixed- xmode))
   5311       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
   5312       (attrs (machine 32))
   5313       (mode xmode)
   5314       (choices
   5315        (.sym dst32-Rn-direct-Prefixed- xmode)
   5316        (.sym dst32-An-direct-Prefixed- xmode)
   5317        (.sym dst32-An-indirect-Prefixed- xmode)
   5318        (.sym dst32-24-8-An-relative-Prefixed- xmode)
   5319        (.sym dst32-24-16-An-relative-Prefixed- xmode)
   5320        (.sym dst32-24-24-An-relative-Prefixed- xmode)
   5321        (.sym dst32-24-8-SB-relative-Prefixed- xmode)
   5322        (.sym dst32-24-16-SB-relative-Prefixed- xmode)
   5323        (.sym dst32-24-8-FB-relative-Prefixed- xmode)
   5324        (.sym dst32-24-16-FB-relative-Prefixed- xmode)
   5325        (.sym dst32-24-16-absolute-Prefixed- xmode)
   5326        (.sym dst32-24-24-absolute-Prefixed- xmode)
   5327       )
   5328     )
   5329     (define-anyof-operand
   5330       (name (.sym dst32-24-8-Prefixed- xmode))
   5331       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
   5332       (attrs (machine 32))
   5333       (mode xmode)
   5334       (choices
   5335        (.sym dst32-24-8-An-relative-Prefixed- xmode)
   5336        (.sym dst32-24-8-SB-relative-Prefixed- xmode)
   5337        (.sym dst32-24-8-FB-relative-Prefixed- xmode)
   5338       )
   5339     )
   5340     (define-anyof-operand
   5341       (name (.sym dst32-24-16-Prefixed- xmode))
   5342       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
   5343       (attrs (machine 32))
   5344       (mode xmode)
   5345       (choices
   5346        (.sym dst32-24-16-An-relative-Prefixed- xmode)
   5347        (.sym dst32-24-16-SB-relative-Prefixed- xmode)
   5348        (.sym dst32-24-16-FB-relative-Prefixed- xmode)
   5349        (.sym dst32-24-16-absolute-Prefixed- xmode)
   5350       )
   5351     )
   5352     (define-anyof-operand
   5353       (name (.sym dst32-24-24-Prefixed- xmode))
   5354       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
   5355       (attrs (machine 32))
   5356       (mode xmode)
   5357       (choices
   5358        (.sym dst32-24-24-An-relative-Prefixed- xmode)
   5359        (.sym dst32-24-24-absolute-Prefixed- xmode)
   5360       )
   5361     )
   5362 ;     (define-anyof-operand
   5363 ;       (name (.sym dst32-24-indirect- xmode))
   5364 ;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
   5365 ;       (attrs (machine 32))
   5366 ;       (mode xmode)
   5367 ;       (choices
   5368 ;        (.sym dst32-An-indirect-indirect- xmode)
   5369 ;        (.sym dst32-24-8-An-relative-indirect- xmode)
   5370 ;        (.sym dst32-24-16-An-relative-indirect- xmode)
   5371 ;        (.sym dst32-24-24-An-relative-indirect- xmode)
   5372 ;        (.sym dst32-24-8-SB-relative-indirect- xmode)
   5373 ;        (.sym dst32-24-16-SB-relative-indirect- xmode)
   5374 ;        (.sym dst32-24-8-FB-relative-indirect- xmode)
   5375 ;        (.sym dst32-24-16-FB-relative-indirect- xmode)
   5376 ;       )
   5377 ;     )
   5378 ;     (define-anyof-operand
   5379 ;       (name (.sym dst32-basic-indirect- xmode))
   5380 ;       (comment (.str "m32c destination operand of size " xmode " with no additional fields"))
   5381 ;       (attrs (machine 32))
   5382 ;       (mode xmode)
   5383 ;       (choices
   5384 ;        (.sym dst32-An-indirect-indirect- xmode)
   5385 ;       )
   5386 ;     )
   5387 ;     (define-anyof-operand
   5388 ;       (name (.sym dst32-24-8-indirect- xmode))
   5389 ;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
   5390 ;       (attrs (machine 32))
   5391 ;       (mode xmode)
   5392 ;       (choices
   5393 ;        (.sym dst32-24-8-An-relative-indirect- xmode)
   5394 ;        (.sym dst32-24-8-SB-relative-indirect- xmode)
   5395 ;        (.sym dst32-24-8-FB-relative-indirect- xmode)
   5396 ;       )
   5397 ;     )
   5398 ;     (define-anyof-operand
   5399 ;       (name (.sym dst32-24-16-indirect- xmode))
   5400 ;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
   5401 ;       (attrs (machine 32))
   5402 ;       (mode xmode)
   5403 ;       (choices
   5404 ;        (.sym dst32-24-16-An-relative-indirect- xmode)
   5405 ;        (.sym dst32-24-16-SB-relative-indirect- xmode)
   5406 ;        (.sym dst32-24-16-FB-relative-indirect- xmode)
   5407 ;       )
   5408 ;     )
   5409 ;     (define-anyof-operand
   5410 ;       (name (.sym dst32-24-24-indirect- xmode))
   5411 ;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 24"))
   5412 ;       (attrs (machine 32))
   5413 ;       (mode xmode)
   5414 ;       (choices
   5415 ;        (.sym dst32-24-24-An-relative-indirect- xmode)
   5416 ;       )
   5417 ;     )
   5418 ;     (define-anyof-operand
   5419 ;       (name (.sym dst32-24-absolute-indirect- xmode))
   5420 ;       (comment (.str "m32c destination operand of size " xmode " absolute indirect"))
   5421 ;       (attrs (machine 32))
   5422 ;       (mode xmode)
   5423 ;       (choices
   5424 ;        (.sym dst32-24-16-absolute-indirect-derived- xmode)
   5425 ;        (.sym dst32-24-24-absolute-indirect-derived- xmode)
   5426 ;       )
   5427 ;     )
   5428 ;     (define-anyof-operand
   5429 ;       (name (.sym dst32-24-16-absolute-indirect- xmode))
   5430 ;       (comment (.str "m32c destination operand of size " xmode " absolute indirect"))
   5431 ;       (attrs (machine 32))
   5432 ;       (mode xmode)
   5433 ;       (choices
   5434 ;        (.sym dst32-24-16-absolute-indirect-derived- xmode)
   5435 ;       )
   5436 ;     )
   5437 ;     (define-anyof-operand
   5438 ;       (name (.sym dst32-24-24-absolute-indirect- xmode))
   5439 ;       (comment (.str "m32c destination operand of size " xmode " absolute indirect"))
   5440 ;       (attrs (machine 32))
   5441 ;       (mode xmode)
   5442 ;       (choices
   5443 ;        (.sym dst32-24-24-absolute-indirect-derived- xmode)
   5444 ;       )
   5445 ;     )
   5446   )
   5447 )
   5448 
   5449 (dst32-24-operand QI)
   5450 (dst32-24-operand HI)
   5451 (dst32-24-operand SI)
   5452 
   5453 ;-------------------------------------------------------------
   5454 ; Destination operands with possible additional fields at offset 32 bits
   5455 ;-------------------------------------------------------------
   5456 
   5457 (define-pmacro (dst16-32-operand xmode)
   5458   (begin
   5459     (define-anyof-operand
   5460       (name (.sym dst16-32- xmode))
   5461       (comment (.str "m16c destination operand of size " xmode " with additional fields at offset 32"))
   5462       (attrs (machine 16))
   5463       (mode xmode)
   5464       (choices
   5465        (.sym dst16-Rn-direct- xmode)
   5466        (.sym dst16-An-direct- xmode)
   5467        (.sym dst16-An-indirect- xmode)
   5468        (.sym dst16-32-8-An-relative- xmode)
   5469        (.sym dst16-32-16-An-relative- xmode)
   5470        (.sym dst16-32-8-SB-relative- xmode)
   5471        (.sym dst16-32-16-SB-relative- xmode)
   5472        (.sym dst16-32-8-FB-relative- xmode)
   5473        (.sym dst16-32-16-absolute- xmode)
   5474       )
   5475     )
   5476   )
   5477 )
   5478 (dst16-32-operand QI)
   5479 (dst16-32-operand HI)
   5480 
   5481 ; This macro actually handles operands at offset 32, 40 and 48 bits
   5482 (define-pmacro (dst32-32plus-operand offset xmode)
   5483   (begin
   5484     (define-anyof-operand
   5485       (name (.sym dst32- offset -Unprefixed- xmode))
   5486       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 32"))
   5487       (attrs (machine 32))
   5488       (mode xmode)
   5489       (choices
   5490        (.sym dst32-Rn-direct-Unprefixed- xmode)
   5491        (.sym dst32-An-direct-Unprefixed- xmode)
   5492        (.sym dst32-An-indirect-Unprefixed- xmode)
   5493        (.sym dst32- offset -8-An-relative-Unprefixed- xmode)
   5494        (.sym dst32- offset -16-An-relative-Unprefixed- xmode)
   5495        (.sym dst32- offset -24-An-relative-Unprefixed- xmode)
   5496        (.sym dst32- offset -8-SB-relative-Unprefixed- xmode)
   5497        (.sym dst32- offset -16-SB-relative-Unprefixed- xmode)
   5498        (.sym dst32- offset -8-FB-relative-Unprefixed- xmode)
   5499        (.sym dst32- offset -16-FB-relative-Unprefixed- xmode)
   5500        (.sym dst32- offset -16-absolute-Unprefixed- xmode)
   5501        (.sym dst32- offset -24-absolute-Unprefixed- xmode)
   5502       )
   5503     )
   5504     (define-anyof-operand
   5505       (name (.sym dst32- offset -Prefixed- xmode))
   5506       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 32"))
   5507       (attrs (machine 32))
   5508       (mode xmode)
   5509       (choices
   5510        (.sym dst32-Rn-direct-Prefixed- xmode)
   5511        (.sym dst32-An-direct-Prefixed- xmode)
   5512        (.sym dst32-An-indirect-Prefixed- xmode)
   5513        (.sym dst32- offset -8-An-relative-Prefixed- xmode)
   5514        (.sym dst32- offset -16-An-relative-Prefixed- xmode)
   5515        (.sym dst32- offset -24-An-relative-Prefixed- xmode)
   5516        (.sym dst32- offset -8-SB-relative-Prefixed- xmode)
   5517        (.sym dst32- offset -16-SB-relative-Prefixed- xmode)
   5518        (.sym dst32- offset -8-FB-relative-Prefixed- xmode)
   5519        (.sym dst32- offset -16-FB-relative-Prefixed- xmode)
   5520        (.sym dst32- offset -16-absolute-Prefixed- xmode)
   5521        (.sym dst32- offset -24-absolute-Prefixed- xmode)
   5522       )
   5523     )
   5524 ;     (define-anyof-operand
   5525 ;       (name (.sym dst32- offset -indirect- xmode))
   5526 ;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 32"))
   5527 ;       (attrs (machine 32))
   5528 ;       (mode xmode)
   5529 ;       (choices
   5530 ;        (.sym dst32-An-indirect-indirect- xmode)
   5531 ;        (.sym dst32- offset -8-An-relative-indirect- xmode)
   5532 ;        (.sym dst32- offset -16-An-relative-indirect- xmode)
   5533 ;        (.sym dst32- offset -24-An-relative-indirect- xmode)
   5534 ;        (.sym dst32- offset -8-SB-relative-indirect- xmode)
   5535 ;        (.sym dst32- offset -16-SB-relative-indirect- xmode)
   5536 ;        (.sym dst32- offset -8-FB-relative-indirect- xmode)
   5537 ;        (.sym dst32- offset -16-FB-relative-indirect- xmode)
   5538 ;       )
   5539 ;     )
   5540 ;     (define-anyof-operand
   5541 ;       (name (.sym dst32- offset -absolute-indirect- xmode))
   5542 ;       (comment (.str "m32c destination operand of size " xmode " absolute indirect"))
   5543 ;       (attrs (machine 32))
   5544 ;       (mode xmode)
   5545 ;       (choices
   5546 ;        (.sym dst32- offset -16-absolute-indirect-derived- xmode)
   5547 ;        (.sym dst32- offset -24-absolute-indirect-derived- xmode)
   5548 ;       )
   5549 ;     )
   5550   )
   5551 )
   5552 
   5553 (dst32-32plus-operand 32 QI)
   5554 (dst32-32plus-operand 32 HI)
   5555 (dst32-32plus-operand 32 SI)
   5556 (dst32-32plus-operand 40 QI)
   5557 (dst32-32plus-operand 40 HI)
   5558 (dst32-32plus-operand 40 SI)
   5559 
   5560 ;-------------------------------------------------------------
   5561 ; Destination operands with possible additional fields at offset 48 bits
   5562 ;-------------------------------------------------------------
   5563 
   5564 (define-pmacro (dst32-48-operand offset xmode)
   5565   (begin
   5566     (define-anyof-operand
   5567       (name (.sym dst32- offset -Prefixed- xmode))
   5568       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 32"))
   5569       (attrs (machine 32))
   5570       (mode xmode)
   5571       (choices
   5572        (.sym dst32-Rn-direct-Prefixed- xmode)
   5573        (.sym dst32-An-direct-Prefixed- xmode)
   5574        (.sym dst32-An-indirect-Prefixed- xmode)
   5575        (.sym dst32- offset -8-An-relative-Prefixed- xmode)
   5576        (.sym dst32- offset -16-An-relative-Prefixed- xmode)
   5577        (.sym dst32- offset -24-An-relative-Prefixed- xmode)
   5578        (.sym dst32- offset -8-SB-relative-Prefixed- xmode)
   5579        (.sym dst32- offset -16-SB-relative-Prefixed- xmode)
   5580        (.sym dst32- offset -8-FB-relative-Prefixed- xmode)
   5581        (.sym dst32- offset -16-FB-relative-Prefixed- xmode)
   5582        (.sym dst32- offset -16-absolute-Prefixed- xmode)
   5583        (.sym dst32- offset -24-absolute-Prefixed- xmode)
   5584       )
   5585     )
   5586 ;     (define-anyof-operand
   5587 ;       (name (.sym dst32- offset -indirect- xmode))
   5588 ;       (comment (.str "m32c destination operand of size " xmode " with additional fields at offset 32"))
   5589 ;       (attrs (machine 32))
   5590 ;       (mode xmode)
   5591 ;       (choices
   5592 ;        (.sym dst32-An-indirect-indirect- xmode)
   5593 ;        (.sym dst32- offset -8-An-relative-indirect- xmode)
   5594 ;        (.sym dst32- offset -16-An-relative-indirect- xmode)
   5595 ;        (.sym dst32- offset -24-An-relative-indirect- xmode)
   5596 ;        (.sym dst32- offset -8-SB-relative-indirect- xmode)
   5597 ;        (.sym dst32- offset -16-SB-relative-indirect- xmode)
   5598 ;        (.sym dst32- offset -8-FB-relative-indirect- xmode)
   5599 ;        (.sym dst32- offset -16-FB-relative-indirect- xmode)
   5600 ;       )
   5601 ;     )
   5602 ;     (define-anyof-operand
   5603 ;       (name (.sym dst32- offset -absolute-indirect- xmode))
   5604 ;       (comment (.str "m32c destination operand of size " xmode " absolute indirect"))
   5605 ;       (attrs (machine 32))
   5606 ;       (mode xmode)
   5607 ;       (choices
   5608 ;        (.sym dst32- offset -16-absolute-indirect-derived- xmode)
   5609 ;        (.sym dst32- offset -24-absolute-indirect-derived- xmode)
   5610 ;       )
   5611 ;     )
   5612   )
   5613 )
   5614 
   5615 (dst32-48-operand 48 QI)
   5616 (dst32-48-operand 48 HI)
   5617 (dst32-48-operand 48 SI)
   5618 
   5619 ;-------------------------------------------------------------
   5620 ; Bit operands for m16c
   5621 ;-------------------------------------------------------------
   5622 
   5623 (define-pmacro (bit16-operand offset)
   5624   (begin
   5625     (define-anyof-operand
   5626       (name (.sym bit16- offset))
   5627       (comment (.str "m16c bit operand with possible additional fields at offset 24"))
   5628       (attrs (machine 16))
   5629       (mode BI)
   5630       (choices
   5631        bit16-Rn-direct
   5632        bit16-An-direct
   5633        bit16-An-indirect
   5634        (.sym bit16- offset -8-An-relative)
   5635        (.sym bit16- offset -16-An-relative)
   5636        (.sym bit16- offset -8-SB-relative)
   5637        (.sym bit16- offset -16-SB-relative)
   5638        (.sym bit16- offset -8-FB-relative)
   5639        (.sym bit16- offset -16-absolute)
   5640       )
   5641     )
   5642     (define-anyof-operand
   5643       (name (.sym bit16- offset -basic))
   5644       (comment (.str "m16c bit operand with no additional fields"))
   5645       (attrs (machine 16))
   5646       (mode BI)
   5647       (choices
   5648        bit16-An-indirect
   5649       )
   5650     )
   5651     (define-anyof-operand
   5652       (name (.sym bit16- offset -8))
   5653       (comment (.str "m16c bit operand with possible additional fields at offset 24"))
   5654       (attrs (machine 16))
   5655       (mode BI)
   5656       (choices
   5657        bit16-Rn-direct
   5658        bit16-An-direct
   5659        (.sym bit16- offset -8-An-relative)
   5660        (.sym bit16- offset -8-SB-relative)
   5661        (.sym bit16- offset -8-FB-relative)
   5662       )
   5663     )
   5664     (define-anyof-operand
   5665       (name (.sym bit16- offset -16))
   5666       (comment (.str "m16c bit operand with possible additional fields at offset 24"))
   5667       (attrs (machine 16))
   5668       (mode BI)
   5669       (choices
   5670        (.sym bit16- offset -16-An-relative)
   5671        (.sym bit16- offset -16-SB-relative)
   5672        (.sym bit16- offset -16-absolute)
   5673       )
   5674     )
   5675   )
   5676 )
   5677 
   5678 (bit16-operand 16)
   5679 
   5680 ;-------------------------------------------------------------
   5681 ; Bit operands for m32c
   5682 ;-------------------------------------------------------------
   5683 
   5684 (define-pmacro (bit32-operand offset group)
   5685   (begin
   5686     (define-anyof-operand
   5687       (name (.sym bit32- offset - group))
   5688       (comment (.str "m32c bit operand with possible additional fields at offset 24"))
   5689       (attrs (machine 32))
   5690       (mode BI)
   5691       (choices
   5692        (.sym bit32-Rn-direct- group)
   5693        (.sym bit32-An-direct- group)
   5694        (.sym bit32-An-indirect- group)
   5695        (.sym bit32- offset -11-An-relative- group)
   5696        (.sym bit32- offset -19-An-relative- group)
   5697        (.sym bit32- offset -27-An-relative- group)
   5698        (.sym bit32- offset -11-SB-relative- group)
   5699        (.sym bit32- offset -19-SB-relative- group)
   5700        (.sym bit32- offset -11-FB-relative- group)
   5701        (.sym bit32- offset -19-FB-relative- group)
   5702        (.sym bit32- offset -19-absolute- group)
   5703        (.sym bit32- offset -27-absolute- group)
   5704       )
   5705     )
   5706   )
   5707 )
   5708 
   5709 (bit32-operand 16 Unprefixed)
   5710 (bit32-operand 24 Prefixed)
   5711 
   5712 (define-anyof-operand
   5713   (name bit32-basic-Unprefixed)
   5714   (comment "m32c bit operand with no additional fields")
   5715   (attrs (machine 32))
   5716   (mode BI)
   5717   (choices
   5718    bit32-Rn-direct-Unprefixed
   5719    bit32-An-direct-Unprefixed
   5720    bit32-An-indirect-Unprefixed
   5721   )
   5722 )
   5723 
   5724 (define-anyof-operand
   5725   (name bit32-16-8-Unprefixed)
   5726   (comment "m32c bit operand with 8 bit additional fields")
   5727   (attrs (machine 32))
   5728   (mode BI)
   5729   (choices
   5730    bit32-16-11-An-relative-Unprefixed
   5731    bit32-16-11-SB-relative-Unprefixed
   5732    bit32-16-11-FB-relative-Unprefixed
   5733   )
   5734 )
   5735 
   5736 (define-anyof-operand
   5737   (name bit32-16-16-Unprefixed)
   5738   (comment "m32c bit operand with 16 bit additional fields")
   5739   (attrs (machine 32))
   5740   (mode BI)
   5741   (choices
   5742    bit32-16-19-An-relative-Unprefixed
   5743    bit32-16-19-SB-relative-Unprefixed
   5744    bit32-16-19-FB-relative-Unprefixed
   5745    bit32-16-19-absolute-Unprefixed
   5746   )
   5747 )
   5748 
   5749 (define-anyof-operand
   5750   (name bit32-16-24-Unprefixed)
   5751   (comment "m32c bit operand with 24 bit additional fields")
   5752   (attrs (machine 32))
   5753   (mode BI)
   5754   (choices
   5755    bit32-16-27-An-relative-Unprefixed
   5756    bit32-16-27-absolute-Unprefixed
   5757   )
   5758 )
   5759 
   5760 ;-------------------------------------------------------------
   5761 ; Operands for short format binary insns
   5762 ;-------------------------------------------------------------
   5763 
   5764 (define-anyof-operand
   5765   (name src16-2-S)
   5766   (comment "m16c source operand of size QI for short format insns")
   5767   (attrs (machine 16))
   5768   (mode QI)
   5769   (choices
   5770    src16-2-S-8-SB-relative-QI
   5771    src16-2-S-8-FB-relative-QI
   5772    src16-2-S-16-absolute-QI
   5773   )
   5774 )
   5775 
   5776 (define-anyof-operand
   5777   (name src32-2-S-QI)
   5778   (comment "m32c source operand of size QI for short format insns")
   5779   (attrs (machine 32))
   5780   (mode QI)
   5781   (choices
   5782    src32-2-S-8-SB-relative-QI
   5783    src32-2-S-8-FB-relative-QI
   5784    src32-2-S-16-absolute-QI
   5785   )
   5786 )
   5787 
   5788 (define-anyof-operand
   5789   (name src32-2-S-HI)
   5790   (comment "m32c source operand of size QI for short format insns")
   5791   (attrs (machine 32))
   5792   (mode HI)
   5793   (choices
   5794    src32-2-S-8-SB-relative-HI
   5795    src32-2-S-8-FB-relative-HI
   5796    src32-2-S-16-absolute-HI
   5797   )
   5798 )
   5799 
   5800 (define-anyof-operand
   5801   (name Dst16-3-S-8)
   5802   (comment "m16c destination operand of size QI for short format insns")
   5803   (attrs (machine 16))
   5804   (mode QI)
   5805   (choices
   5806    dst16-3-S-R0l-direct-QI
   5807    dst16-3-S-R0h-direct-QI
   5808    dst16-3-S-8-8-SB-relative-QI
   5809    dst16-3-S-8-8-FB-relative-QI
   5810    dst16-3-S-8-16-absolute-QI
   5811   )
   5812 )
   5813 
   5814 (define-anyof-operand
   5815   (name Dst16-3-S-16)
   5816   (comment "m16c destination operand of size QI for short format insns")
   5817   (attrs (machine 16))
   5818   (mode QI)
   5819   (choices
   5820    dst16-3-S-R0l-direct-QI
   5821    dst16-3-S-R0h-direct-QI
   5822    dst16-3-S-16-8-SB-relative-QI
   5823    dst16-3-S-16-8-FB-relative-QI
   5824    dst16-3-S-16-16-absolute-QI
   5825   )
   5826 )
   5827 
   5828 (define-anyof-operand
   5829   (name srcdst16-r0l-r0h-S)
   5830   (comment "m16c r0l/r0h operand of size QI for short format insns")
   5831   (attrs (machine 16))
   5832   (mode SI)
   5833   (choices
   5834    srcdst16-r0l-r0h-S-derived
   5835   )
   5836 )
   5837 
   5838 (define-anyof-operand
   5839   (name dst32-2-S-basic-QI)
   5840   (comment "m32c r0l operand of size QI for short format binary insns")
   5841   (attrs (machine 32))
   5842   (mode QI)
   5843   (choices
   5844    dst32-2-S-R0l-direct-QI
   5845   )
   5846 )
   5847 
   5848 (define-anyof-operand
   5849   (name dst32-2-S-basic-HI)
   5850   (comment "m32c r0 operand of size HI for short format binary insns")
   5851   (attrs (machine 32))
   5852   (mode HI)
   5853   (choices
   5854    dst32-2-S-R0-direct-HI
   5855   )
   5856 )
   5857 
   5858 (define-pmacro (dst32-2-S-operands xmode)
   5859   (begin
   5860     (define-anyof-operand
   5861       (name (.sym dst32-2-S-8- xmode))
   5862       (comment "m32c operand of size " xmode " for short format binary insns")
   5863       (attrs (machine 32))
   5864       (mode xmode)
   5865       (choices
   5866        (.sym dst32-2-S-8-SB-relative- xmode)
   5867        (.sym dst32-2-S-8-FB-relative- xmode)
   5868       )
   5869     )
   5870     (define-anyof-operand
   5871       (name (.sym dst32-2-S-16- xmode))
   5872       (comment "m32c operand of size " xmode " for short format binary insns")
   5873       (attrs (machine 32))
   5874       (mode xmode)
   5875       (choices
   5876        (.sym dst32-2-S-16-absolute- xmode)
   5877       )
   5878     )
   5879 ;     (define-anyof-operand
   5880 ;       (name (.sym dst32-2-S-8-indirect- xmode))
   5881 ;       (comment "m32c operand of size " xmode " for short format binary insns")
   5882 ;       (attrs (machine 32))
   5883 ;       (mode xmode)
   5884 ;       (choices
   5885 ;        (.sym dst32-2-S-8-SB-relative-indirect- xmode)
   5886 ;        (.sym dst32-2-S-8-FB-relative-indirect- xmode)
   5887 ;       )
   5888 ;     )
   5889 ;     (define-anyof-operand
   5890 ;       (name (.sym dst32-2-S-absolute-indirect- xmode))
   5891 ;       (comment "m32c operand of size " xmode " for short format binary insns")
   5892 ;       (attrs (machine 32))
   5893 ;       (mode xmode)
   5894 ;       (choices
   5895 ;        (.sym dst32-2-S-16-absolute-indirect- xmode)
   5896 ;       )
   5897 ;     )
   5898   )
   5899 )
   5900     
   5901 (dst32-2-S-operands QI)
   5902 (dst32-2-S-operands HI)
   5903 (dst32-2-S-operands SI)
   5904 
   5905 (define-anyof-operand
   5906   (name dst32-an-S)
   5907   (comment "m32c An operand for short format binary insns")
   5908   (attrs (machine 32))
   5909   (mode HI)
   5910   (choices
   5911    dst32-1-S-A0-direct-HI
   5912    dst32-1-S-A1-direct-HI
   5913   )
   5914 )
   5915 
   5916 (define-anyof-operand
   5917   (name bit16-11-S)
   5918   (comment "m16c bit operand for short format insns")
   5919   (attrs (machine 16))
   5920   (mode BI)
   5921   (choices
   5922    bit16-11-SB-relative-S
   5923   )
   5924 )
   5925 
   5926 (define-anyof-operand
   5927   (name Rn16-push-S-anyof)
   5928   (comment "m16c bit operand for short format insns")
   5929   (attrs (machine 16))
   5930   (mode QI)
   5931   (choices
   5932    Rn16-push-S-derived
   5933   )
   5934 )
   5935 
   5936 (define-anyof-operand
   5937   (name An16-push-S-anyof)
   5938   (comment "m16c bit operand for short format insns")
   5939   (attrs (machine 16))
   5940   (mode HI)
   5941   (choices
   5942    An16-push-S-derived
   5943   )
   5944 )
   5945 
   5946 ;=============================================================
   5947 ; Common macros for instruction definitions
   5948 ;
   5949 (define-pmacro (set-z x)
   5950   (sequence ()
   5951             (set zbit (zflag x)))
   5952        
   5953 )
   5954 
   5955 (define-pmacro (set-s x)
   5956   (sequence ()
   5957             (set sbit (nflag x)))
   5958 )
   5959 
   5960 (define-pmacro (set-z-and-s x)
   5961   (sequence ()
   5962             (set-z x)
   5963             (set-s x))
   5964 )
   5965 
   5967 ;=============================================================
   5968 ; Unary insn macros
   5969 ;-------------------------------------------------------------
   5970 
   5971 (define-pmacro (unary-insn-defn-g mach group mode wstr op encoding sem opg)
   5972   (dni (.sym op mach wstr - group)
   5973        (.str op wstr opg " dst" mach "-" group "-" mode)
   5974        ((machine mach) RL_1ADDR)
   5975        (.str op wstr opg " ${dst" mach "-" group "-" mode "}")
   5976        encoding
   5977        (sem mode (.sym dst mach - group - mode))
   5978        ())
   5979 )
   5980 
   5981 (define-pmacro (unary-insn-defn mach group mode wstr op encoding sem)
   5982   (unary-insn-defn-g mach group mode wstr op encoding sem "")
   5983 )
   5984 
   5985 
   5986 (define-pmacro (unary16-defn-g mode wstr wbit op opc1 opc2 opc3 sem opg)
   5987   (unary-insn-defn-g 16 16 mode wstr op
   5988 		     (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16- mode))
   5989 		     sem opg)
   5990 )
   5991 (define-pmacro (unary16-defn mode wstr wbit op opc1 opc2 opc3 sem)
   5992   (unary-16-defn-g mode wstr wbit op opc1 opc2 opc3 sem "")
   5993 )
   5994 
   5995 (define-pmacro (unary32-defn-g mode wstr wbit op opc1 opc2 opc3 sem opg)
   5996   (begin
   5997     ; Multi insns are tried for assembly in the reverse order in which they appear here, so
   5998     ; define the absolute-indirect insns first in order to prevent them from being selected
   5999     ; when the mode is register-indirect
   6000 ;     (unary-insn-defn 32 24-absolute-indirect mode wstr op
   6001 ; 		     (+ (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))
   6002 ; 		     sem)
   6003     (unary-insn-defn-g 32 16-Unprefixed mode wstr op
   6004 		       (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-16-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3))
   6005 		       sem opg)
   6006 ;     (unary-insn-defn 32 24-indirect mode wstr op
   6007 ; 		     (+ (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))
   6008 ; 		     sem)
   6009   )
   6010 )
   6011 (define-pmacro (unary32-defn mode wstr wbit op opc1 opc2 opc3 sem)
   6012   (unary32-defn-g mode wstr wbit op opc1 opc2 opc3 sem "")
   6013 )
   6014 
   6015 (define-pmacro (unary-insn-mach-g mach op opc1 opc2 opc3 sem opg)
   6016   (begin
   6017     (.apply (.sym unary mach -defn-g) (QI .b 0 op opc1 opc2 opc3 sem opg))
   6018     (.apply (.sym unary mach -defn-g) (HI .w 1 op opc1 opc2 opc3 sem opg))
   6019   )
   6020 )
   6021 (define-pmacro (unary-insn-mach mach op opc1 opc2 opc3 sem)
   6022   (unary-insn-mach-g mach op opc1 opc2 opc3 sem "")
   6023 )
   6024 
   6025 (define-pmacro (unary-insn op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
   6026   (begin
   6027     (unary-insn-mach-g 16 op opc16-1 opc16-2 opc16-3 sem "")
   6028     (unary-insn-mach-g 32 op opc32-1 opc32-2 opc32-3 sem "")
   6029   )
   6030 )
   6031 
   6032 (define-pmacro (unary-insn-g op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
   6033   (begin
   6034     (unary-insn-mach-g 16 op opc16-1 opc16-2 opc16-3 sem "$G")
   6035     (unary-insn-mach-g 32 op opc32-1 opc32-2 opc32-3 sem "$G")
   6036   )
   6037 )
   6038 
   6039 ;-------------------------------------------------------------
   6040 ; Sign/zero extension macros
   6041 ;-------------------------------------------------------------
   6042 
   6043 (define-pmacro (ext-insn-defn mach group smode dmode wstr op encoding sem)
   6044   (dni (.sym op mach wstr - group)
   6045        (.str op wstr " dst" mach "-" group "-" smode)
   6046        ((machine mach))
   6047        (.str op wstr " ${dst" mach "-" group "-" smode "}")
   6048        encoding
   6049        (sem smode dmode (.sym dst mach - group - smode) (.sym dst mach - group - smode))
   6050        ())
   6051 )
   6052 
   6053 (define-pmacro (ext16-defn smode dmode wstr wbit op opc1 opc2 opc3 sem)
   6054   (ext-insn-defn 16 16-Ext smode dmode wstr op
   6055 		   (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-Ext- smode))
   6056 		   sem)
   6057 )
   6058 
   6059 (define-pmacro (ext32-defn smode dmode wstr wbit op opc1 opc2 opc3 sem)
   6060   (ext-insn-defn 32 16-ExtUnprefixed smode dmode wstr op
   6061 		 (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst32-16-ExtUnprefixed- smode))
   6062 		 sem)
   6063 )
   6064 
   6065 (define-pmacro (ext32-binary-insn src-group dst-group op wstr encoding sem)
   6066   (dni (.sym op 32 wstr - src-group - dst-group)
   6067        (.str op 32 wstr  " src32-" src-group "-QI,dst32-" dst-group "-HI")
   6068        ((machine 32))
   6069        (.str op wstr " ${src32-" src-group "-QI},${dst32-" dst-group "-HI}")
   6070        encoding
   6071        (sem QI HI (.sym src32- src-group -QI) (.sym dst32 - dst-group -HI))
   6072        ())
   6073 )
   6074 
   6075 (define-pmacro (ext32-binary-defn op wstr opc1 opc2 sem)
   6076   (begin
   6077     (ext32-binary-insn basic-ExtPrefixed 24-Prefixed op wstr
   6078 		       (+ (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))
   6079 		       sem)
   6080     (ext32-binary-insn 24-24-Prefixed 48-Prefixed op wstr
   6081 		       (+ (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))
   6082 		       sem)
   6083     (ext32-binary-insn 24-16-Prefixed 40-Prefixed op wstr
   6084 		       (+ (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))
   6085 		       sem)
   6086     (ext32-binary-insn 24-8-Prefixed 32-Prefixed op wstr
   6087 		       (+ (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))
   6088 		       sem)
   6089   )
   6090 )
   6091 
   6092 ;=============================================================
   6093 ; Binary Arithmetic macros
   6094 ;
   6095 ;-------------------------------------------------------------
   6096 ;<arith>.size:S src2,r0[l] -- for m32c
   6097 ;-------------------------------------------------------------
   6098 
   6099 (define-pmacro (binary-arith32-S-src2 op xmode wstr wbit opc1 opc2 sem)
   6100   (dni (.sym op 32 wstr .S-src2-r0- xmode)
   6101        (.str op 32 wstr ":S src2,r0[l]")
   6102        ((machine 32))
   6103        (.str op wstr"$S ${src32-2-S-" xmode "},${Dst32R0" xmode "-S}")
   6104        (+ opc1 opc2 (.sym src32-2-S- xmode) (f-7-1 wbit))
   6105        (sem xmode (.sym src32-2-S- xmode) (.sym Dst32R0 xmode -S))
   6106        ())
   6107 )
   6108 
   6109 ;-------------------------------------------------------------
   6110 ;<arith>.b:S src2,r0l/r0h -- for m16c
   6111 ;-------------------------------------------------------------
   6112 
   6113 (define-pmacro (binary-arith16-b-S-src2 op opc1 opc2 sem)
   6114   (begin
   6115     (dni (.sym op 16 .b.S-src2)
   6116 	 (.str op ".b:S src2,r0[lh]")
   6117 	 ((machine 16))
   6118 	 (.str op ".b$S ${src16-2-S},${Dst16RnQI-S}")
   6119 	 (+ opc1 opc2 Dst16RnQI-S src16-2-S)
   6120 	 (sem QI src16-2-S Dst16RnQI-S)
   6121 	 ())
   6122     (dni (.sym op 16 .b.S-r0l-r0h)
   6123 	 (.str op ".b:S r0l/r0h")
   6124 	 ((machine 16))
   6125 	 (.str op ".b$S ${srcdst16-r0l-r0h-S}")
   6126 	 (+ opc1 opc2 srcdst16-r0l-r0h-S)
   6127 	 (if (eq srcdst16-r0l-r0h-S 0)
   6128 	     (sem QI R0h R0l)
   6129 	     (sem QI R0l R0h))
   6130 	 ())
   6131   )
   6132 )
   6133 
   6134 ;-------------------------------------------------------------
   6135 ;<arith>.b:S #imm8,dst3 -- for m16c
   6136 ;-------------------------------------------------------------
   6137 
   6138 (define-pmacro (binary-arith16-b-S-imm8-dst3 op sz opc1 opc2 sem)
   6139   (dni (.sym op 16 .b.S-imm8-dst3)
   6140        (.str op sz ":S imm8,dst3")
   6141        ((machine 16))
   6142        (.str op sz "$S #${Imm-8-QI},${Dst16-3-S-16}")
   6143        (+ opc1 opc2 Dst16-3-S-16 Imm-8-QI)
   6144        (sem QI Imm-8-QI Dst16-3-S-16)
   6145        ())
   6146 )
   6147 
   6148 ;-------------------------------------------------------------
   6149 ;<arith>.size:Q #imm4,sp -- for m16c
   6150 ;-------------------------------------------------------------
   6151 
   6152 (define-pmacro (binary-arith16-Q-sp op opc1 opc2 opc3 sem)
   6153   (dni (.sym op 16 -wQ-sp)
   6154        (.str op ".w:q #imm4,sp")
   6155        ((machine 16))
   6156        (.str op ".w$Q #${Imm-12-s4},sp")
   6157        (+ opc1 opc2 opc3 Imm-12-s4)
   6158        (sem QI Imm-12-s4 sp)
   6159        ())
   6160 )
   6161 
   6162 ;-------------------------------------------------------------
   6163 ;<arith>.size:G #imm,sp -- for m16c
   6164 ;-------------------------------------------------------------
   6165 
   6166 (define-pmacro (binary-arith16-G-sp-defn mode wstr wbit op opc1 opc2 opc3 opc4 sem)
   6167   (dni (.sym op 16 wstr - G-sp)
   6168        (.str op wstr " imm-sp " mode)
   6169        ((machine 16))
   6170        (.str op wstr "$G #${Imm-16-" mode "},sp")
   6171        (+ opc1 opc2 (f-7-1 wbit) opc3 opc4 (.sym Imm-16- mode))
   6172        (sem mode (.sym Imm-16- mode) sp)
   6173        ())
   6174 )
   6175 
   6176 (define-pmacro (binary-arith16-G-sp op opc1 opc2 opc3 opc4 sem)
   6177   (begin
   6178     (binary-arith16-G-sp-defn QI .b 0 op opc1 opc2 opc3 opc4 sem)
   6179     (binary-arith16-G-sp-defn HI .w 1 op opc1 opc2 opc3 opc4 sem)
   6180   )
   6181 )
   6182 
   6183 ;-------------------------------------------------------------
   6184 ;<arith>.size:G #imm,dst -- for m16c and m32c
   6185 ;-------------------------------------------------------------
   6186 
   6187 (define-pmacro (binary-arith-imm-dst-defn mach src dstgroup dmode wstr op suffix encoding sem)
   6188   (dni (.sym op mach wstr - imm-G - dstgroup)
   6189        (.str op wstr " " mach "-imm-G-" dstgroup "-" dmode)
   6190        ((machine mach) RL_1ADDR)
   6191        (.str op wstr "$"suffix " #${" src "},${dst" mach "-" dstgroup "-" dmode "}")
   6192        encoding
   6193        (sem dmode src (.sym dst mach - dstgroup - dmode))
   6194        ())
   6195 )
   6196 
   6197 ; m16c variants
   6198 (define-pmacro (binary-arith16-imm-dst-defn smode dmode wstr wbit op suffix opc1 opc2 opc3 sem)
   6199   (begin
   6200     (binary-arith-imm-dst-defn 16 (.sym Imm-32- smode) 16-16 dmode wstr op suffix
   6201 			       (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-16- dmode) (.sym Imm-32- smode))
   6202 			       sem)
   6203     (binary-arith-imm-dst-defn 16 (.sym Imm-24- smode) 16-8 dmode wstr op suffix
   6204 			       (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-8- dmode) (.sym Imm-24- smode))
   6205 			       sem)
   6206     (binary-arith-imm-dst-defn 16 (.sym Imm-16- smode) basic dmode wstr op suffix
   6207 			       (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-basic- dmode) (.sym Imm-16- smode))
   6208 			       sem)
   6209   )
   6210 )
   6211 
   6212 ; m32c Unprefixed variants
   6213 (define-pmacro (binary-arith32-imm-dst-Unprefixed smode dmode wstr wbit op suffix opc1 opc2 opc3 sem)
   6214   (begin
   6215     (binary-arith-imm-dst-defn 32 (.sym Imm-40- smode) 16-24-Unprefixed dmode wstr op suffix
   6216 			       (+ (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))
   6217 			       sem)
   6218     (binary-arith-imm-dst-defn 32 (.sym Imm-32- smode) 16-16-Unprefixed dmode wstr op suffix
   6219 			       (+ (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))
   6220 			       sem)
   6221     (binary-arith-imm-dst-defn 32 (.sym Imm-24- smode) 16-8-Unprefixed dmode wstr op suffix
   6222 			       (+ (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))
   6223 			       sem)
   6224     (binary-arith-imm-dst-defn 32 (.sym Imm-16- smode) basic-Unprefixed dmode wstr op suffix
   6225 			       (+ (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))
   6226 			       sem)
   6227   )
   6228 )
   6229 
   6230 ; m32c Prefixed variants
   6231 (define-pmacro (binary-arith32-imm-dst-Prefixed smode dmode wstr wbit op suffix opc1 opc2 opc3 sem)
   6232   (begin
   6233     (binary-arith-imm-dst-defn 32 (.sym Imm-48- smode) 24-24-Prefixed dmode wstr op suffix
   6234 			       (+ (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))
   6235 			       sem)
   6236     (binary-arith-imm-dst-defn 32 (.sym Imm-40- smode) 24-16-Prefixed dmode wstr op suffix
   6237 			       (+ (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))
   6238 			       sem)
   6239     (binary-arith-imm-dst-defn 32 (.sym Imm-32- smode) 24-8-Prefixed dmode wstr op suffix
   6240 			       (+ (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))
   6241 			       sem)
   6242     (binary-arith-imm-dst-defn 32 (.sym Imm-24- smode) basic-Prefixed dmode wstr op suffix
   6243 			       (+ (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))
   6244 			       sem)
   6245   )
   6246 )
   6247 
   6248 ; All m32c variants
   6249 (define-pmacro (binary-arith32-imm-dst-defn smode dmode wstr wbit op suffix opc1 opc2 opc3 sem)
   6250   (begin
   6251     ; Multi insns are tried for assembly in the reverse order in which they appear here, so
   6252     ; define the absolute-indirect insns first in order to prevent them from being selected
   6253     ; when the mode is register-indirect
   6254 ;     (binary-arith-imm-dst-defn 32 (.sym Imm-48- smode) 24-24-absolute-indirect dmode wstr op suffix
   6255 ; 			       (+ (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))
   6256 ; 			       sem)
   6257 ;     (binary-arith-imm-dst-defn 32 (.sym Imm-40- smode) 24-16-absolute-indirect dmode wstr op suffix
   6258 ; 			       (+ (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))
   6259 ; 			       sem)
   6260     ; Unprefixed modes next
   6261     (binary-arith32-imm-dst-Unprefixed smode dmode wstr wbit op suffix opc1 opc2 opc3 sem)
   6262 
   6263     ; Remaining indirect modes
   6264 ;     (binary-arith-imm-dst-defn 32 (.sym Imm-24- smode) basic-indirect dmode wstr op suffix
   6265 ; 			       (+ (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))
   6266 ; 			       sem)
   6267 ;     (binary-arith-imm-dst-defn 32 (.sym Imm-48- smode) 24-24-indirect dmode wstr op suffix
   6268 ; 			       (+ (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))
   6269 ; 			       sem)
   6270 ;     (binary-arith-imm-dst-defn 32 (.sym Imm-40- smode) 24-16-indirect dmode wstr op suffix
   6271 ; 			       (+ (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))
   6272 ; 			       sem)
   6273 ;     (binary-arith-imm-dst-defn 32 (.sym Imm-32- smode) 24-8-indirect dmode wstr op suffix
   6274 ; 			       (+ (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))
   6275 ; 			       sem)
   6276   )
   6277 )
   6278 
   6279 (define-pmacro (binary-arith-imm-dst-mach mach op suffix opc1 opc2 opc3 sem)
   6280   (begin
   6281     (.apply (.sym binary-arith mach -imm-dst-defn) (QI QI .b 0 op suffix opc1 opc2 opc3 sem))
   6282     (.apply (.sym binary-arith mach -imm-dst-defn) (HI HI .w 1 op suffix opc1 opc2 opc3 sem))
   6283   )
   6284 )
   6285 
   6286 (define-pmacro (binary-arith-imm-dst op suffix opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
   6287   (begin
   6288     (binary-arith-imm-dst-mach 16 op suffix opc16-1 opc16-2 opc16-3 sem)
   6289     (binary-arith-imm-dst-mach 32 op suffix opc32-1 opc32-2 opc32-3 sem)
   6290   )
   6291 )
   6292 
   6293 ;-------------------------------------------------------------
   6294 ;<arith>.size:Q #imm4,dst -- for m16c and m32c
   6295 ;-------------------------------------------------------------
   6296 
   6297 (define-pmacro (binary-arith-imm4-dst-defn mach src dstgroup mode wstr op encoding sem)
   6298   (dni (.sym op mach wstr - imm4-Q - dstgroup)
   6299        (.str op wstr " " mach "-imm4-Q-" dstgroup "-" mode)
   6300        ((machine mach) RL_1ADDR)
   6301        (.str op wstr "$Q #${" src "},${dst" mach "-" dstgroup "-" mode "}")
   6302        encoding
   6303        (sem mode src (.sym dst mach - dstgroup - mode))
   6304        ())
   6305 )
   6306 
   6307 ; m16c variants
   6308 (define-pmacro (binary-arith16-imm4-dst-defn mode wstr wbit1 wbit2 op opc1 opc2 sem)
   6309   (binary-arith-imm4-dst-defn 16 Imm-8-s4 16 mode wstr op
   6310 		   (+ opc1 opc2 (f-7-1 wbit2) Imm-8-s4 (.sym dst16-16- mode))
   6311 		   sem)
   6312 )
   6313 
   6314 (define-pmacro (binary-arith16-shimm4-dst-defn mode wstr wbit1 wbit2 op opc1 opc2 sem)
   6315   (binary-arith-imm4-dst-defn 16 Imm-sh-8-s4 16 mode wstr op
   6316 		   (+ opc1 opc2 (f-7-1 wbit2) Imm-sh-8-s4 (.sym dst16-16- mode))
   6317 		   sem)
   6318 )
   6319 
   6320 ; m32c variants
   6321 (define-pmacro (binary-arith32-imm4-dst-defn mode wstr wbit1 wbit2 op opc1 opc2 sem)
   6322   (begin
   6323     ; Multi insns are tried for assembly in the reverse order in which they appear here, so
   6324     ; define the absolute-indirect insns first in order to prevent them from being selected
   6325     ; when the mode is register-indirect
   6326 ;     (binary-arith-imm4-dst-defn 32 Imm-20-s4 24-absolute-indirect mode wstr op
   6327 ; 		     (+ (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)
   6328 ; 		     sem)
   6329     (binary-arith-imm4-dst-defn 32 Imm-12-s4 16-Unprefixed mode wstr op
   6330 		     (+ (f-0-3 opc1) (f-3-1 wbit1) (f-7-1 wbit2) (.sym dst32-16-Unprefixed- mode) (f-10-2 opc2) Imm-12-s4)
   6331 		     sem)
   6332 ;     (binary-arith-imm4-dst-defn 32 Imm-20-s4 24-indirect mode wstr op
   6333 ; 		     (+ (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)
   6334 ; 		     sem)
   6335   )
   6336 )
   6337 
   6338 (define-pmacro (binary-arith32-shimm4-dst-defn mode wstr wbit1 wbit2 op opc1 opc2 sem)
   6339   (begin
   6340     ; Multi insns are tried for assembly in the reverse order in which they appear here, so
   6341     ; define the absolute-indirect insns first in order to prevent them from being selected
   6342     ; when the mode is register-indirect
   6343 ;     (binary-arith-imm4-dst-defn 32 Imm-sh-20-s4 24-absolute-indirect mode wstr op
   6344 ; 		     (+ (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)
   6345 ; 		     sem)
   6346     (binary-arith-imm4-dst-defn 32 Imm-sh-12-s4 16-Unprefixed mode wstr op
   6347 		     (+ (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)
   6348 		     sem)
   6349 ;     (binary-arith-imm4-dst-defn 32 Imm-sh-20-s4 24-indirect mode wstr op
   6350 ; 		     (+ (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)
   6351 ; 		     sem)
   6352   )
   6353 )
   6354 
   6355 (define-pmacro (binary-arith-imm4-dst-mach mach op opc1 opc2 sem)
   6356   (begin
   6357     (.apply (.sym binary-arith mach -imm4-dst-defn) (QI .b 0 0 op opc1 opc2 sem))
   6358     (.apply (.sym binary-arith mach -imm4-dst-defn) (HI .w 0 1 op opc1 opc2 sem))
   6359   )
   6360 )
   6361 
   6362 (define-pmacro (binary-arith-imm4-dst op opc16-1 opc16-2 opc32-1 opc32-2 sem)
   6363   (begin
   6364     (binary-arith-imm4-dst-mach 16 op opc16-1 opc16-2 sem)
   6365     (binary-arith-imm4-dst-mach 32 op opc32-1 opc32-2 sem)
   6366   )
   6367 )
   6368 
   6369 ;-------------------------------------------------------------
   6370 ;<arith>.size:G src,dst -- for m16c and m32c
   6371 ;-------------------------------------------------------------
   6372 
   6373 (define-pmacro (binary-arith-src-dst-defn mach srcgroup dstgroup smode dmode wstr op suffix encoding sem)
   6374   (dni (.sym op mach wstr - srcgroup - dstgroup)
   6375        (.str op wstr " dst" mach "-" srcgroup "-" dstgroup "-" dmode)
   6376        ((machine mach) RL_2ADDR)
   6377        (.str op wstr "$" suffix " ${src" mach "-" srcgroup "-" smode "},${dst" mach "-" dstgroup "-" dmode "}")
   6378        encoding
   6379        (sem dmode (.sym src mach - srcgroup - smode) (.sym dst mach - dstgroup - dmode))
   6380        ())
   6381 )
   6382 
   6383 ; m16c variants
   6384 (define-pmacro (binary-arith16-src-dst-defn smode dmode wstr wbit op suffix opc1 opc2 sem)
   6385   (begin
   6386     (binary-arith-src-dst-defn 16 basic 16 smode dmode wstr op suffix
   6387 			       (+ opc1 opc2 (f-7-1 wbit) (.sym src16-basic- smode) (.sym dst16-16- dmode))
   6388 			       sem)
   6389     (binary-arith-src-dst-defn 16 16-16 32 smode dmode wstr op suffix
   6390 			       (+ opc1 opc2 (f-7-1 wbit) (.sym src16-16-16- smode) (.sym dst16-32- dmode))
   6391 			       sem)
   6392     (binary-arith-src-dst-defn 16 16-8 24 smode dmode wstr op suffix
   6393 			       (+ opc1 opc2 (f-7-1 wbit) (.sym src16-16-8- smode) (.sym dst16-24- dmode))
   6394 			       sem)
   6395   )
   6396 )
   6397 
   6398 ; m32c Prefixed variants
   6399 (define-pmacro (binary-arith32-src-dst-Prefixed smode dmode wstr wbit op suffix opc1 opc2 sem)
   6400   (begin
   6401     (binary-arith-src-dst-defn 32 basic-Prefixed 24-Prefixed smode dmode wstr op suffix
   6402 			       (+ (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))
   6403 			       sem)
   6404     (binary-arith-src-dst-defn 32 24-24-Prefixed 48-Prefixed smode dmode wstr op suffix
   6405 			       (+ (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))
   6406 			       sem)
   6407     (binary-arith-src-dst-defn 32 24-16-Prefixed 40-Prefixed smode dmode wstr op suffix
   6408 			       (+ (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))
   6409 			       sem)
   6410     (binary-arith-src-dst-defn 32 24-8-Prefixed 32-Prefixed smode dmode wstr op suffix
   6411 			       (+ (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))
   6412 			       sem)
   6413   )
   6414 )
   6415 
   6416 ; all m32c variants
   6417 (define-pmacro (binary-arith32-src-dst-defn smode dmode wstr wbit op suffix opc1 opc2 sem)
   6418   (begin
   6419     ; Multi insns are tried for assembly in the reverse order in which they appear here, so
   6420     ; define the absolute-indirect insns first in order to prevent them from being selected
   6421     ; when the mode is register-indirect
   6422 ;     (binary-arith-src-dst-defn 32 24-24-absolute-indirect 48-absolute-indirect smode dmode wstr op suffix
   6423 ; 			       (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
   6424 ; 				  (.sym src32-24-24-absolute-indirect- smode) (.sym dst32-48-absolute-indirect- dmode) (f-20-4 opc2))
   6425 ; 			       sem)
   6426 ;     (binary-arith-src-dst-defn 32 24-16-absolute-indirect 40-absolute-indirect smode dmode wstr op suffix
   6427 ; 			       (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
   6428 ; 				  (.sym src32-24-16-absolute-indirect- smode) (.sym dst32-40-absolute-indirect- dmode) (f-20-4 opc2))
   6429 ; 			       sem)
   6430 ;     (binary-arith-src-dst-defn 32 24-24-absolute-indirect 48-Prefixed smode dmode wstr op suffix
   6431 ; 			       (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
   6432 ; 				  (.sym src32-24-24-absolute-indirect- smode) (.sym dst32-48-Prefixed- dmode) (f-20-4 opc2))
   6433 ; 			       sem)
   6434 ;     (binary-arith-src-dst-defn 32 24-16-absolute-indirect 40-Prefixed smode dmode wstr op suffix
   6435 ; 			       (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
   6436 ; 				  (.sym src32-24-16-absolute-indirect- smode) (.sym dst32-40-Prefixed- dmode) (f-20-4 opc2))
   6437 ; 			       sem)
   6438 ;     (binary-arith-src-dst-defn 32 24-24-absolute-indirect 48-indirect smode dmode wstr op suffix
   6439 ; 			       (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
   6440 ; 				  (.sym src32-24-24-absolute-indirect- smode) (.sym dst32-48-indirect- dmode) (f-20-4 opc2))
   6441 ; 			       sem)
   6442 ;     (binary-arith-src-dst-defn 32 24-16-absolute-indirect 40-indirect smode dmode wstr op suffix
   6443 ; 			       (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
   6444 ; 				  (.sym src32-24-16-absolute-indirect- smode) (.sym dst32-40-indirect- dmode) (f-20-4 opc2))
   6445 ; 			       sem)
   6446 ;     (binary-arith-src-dst-defn 32 basic-Prefixed 24-absolute-indirect smode dmode wstr op suffix
   6447 ; 			       (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
   6448 ; 				  (.sym src32-basic-Prefixed- smode) (.sym dst32-24-absolute-indirect- dmode) (f-20-4 opc2))
   6449 ; 			       sem)
   6450 ;     (binary-arith-src-dst-defn 32 24-24-Prefixed 48-absolute-indirect smode dmode wstr op suffix
   6451 ; 			       (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
   6452 ; 				  (.sym src32-24-24-Prefixed- smode) (.sym dst32-48-absolute-indirect- dmode) (f-20-4 opc2))
   6453 ; 			       sem)
   6454 ;     (binary-arith-src-dst-defn 32 24-16-Prefixed 40-absolute-indirect smode dmode wstr op suffix
   6455 ; 			       (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
   6456 ; 				  (.sym src32-24-16-Prefixed- smode) (.sym dst32-40-absolute-indirect- dmode) (f-20-4 opc2))
   6457 ; 			       sem)
   6458 ;     (binary-arith-src-dst-defn 32 24-8-Prefixed 32-absolute-indirect smode dmode wstr op suffix
   6459 ; 			       (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
   6460 ; 				  (.sym src32-24-8-Prefixed- smode) (.sym dst32-32-absolute-indirect- dmode) (f-20-4 opc2))
   6461 ; 			       sem)
   6462 ;     (binary-arith-src-dst-defn 32 basic-indirect 24-absolute-indirect smode dmode wstr op suffix
   6463 ; 			       (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
   6464 ; 				  (.sym src32-basic-indirect- smode) (.sym dst32-24-absolute-indirect- dmode) (f-20-4 opc2))
   6465 ; 			       sem)
   6466 ;     (binary-arith-src-dst-defn 32 24-24-indirect 48-absolute-indirect smode dmode wstr op suffix
   6467 ; 			       (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
   6468 ; 				  (.sym src32-24-24-indirect- smode) (.sym dst32-48-absolute-indirect- dmode) (f-20-4 opc2))
   6469 ; 			       sem)
   6470 ;     (binary-arith-src-dst-defn 32 24-16-indirect 40-absolute-indirect smode dmode wstr op suffix
   6471 ; 			       (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
   6472 ; 				  (.sym src32-24-16-indirect- smode) (.sym dst32-40-absolute-indirect- dmode) (f-20-4 opc2))
   6473 ; 			       sem)
   6474 ;     (binary-arith-src-dst-defn 32 24-8-indirect 32-absolute-indirect smode dmode wstr op suffix
   6475 ; 			       (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
   6476 ; 				  (.sym src32-24-8-indirect- smode) (.sym dst32-32-absolute-indirect- dmode) (f-20-4 opc2))
   6477 ; 			       sem)
   6478     (binary-arith-src-dst-defn 32 basic-Unprefixed 16-Unprefixed smode dmode wstr op suffix
   6479 			       (+ (f-0-1 opc1) (f-7-1 wbit) (.sym src32-basic-Unprefixed- smode) (.sym dst32-16-Unprefixed- dmode) (f-12-4 opc2))
   6480 			       sem)
   6481     (binary-arith-src-dst-defn 32 16-24-Unprefixed 40-Unprefixed smode dmode wstr op suffix
   6482 			       (+ (f-0-1 opc1) (f-7-1 wbit) (.sym src32-16-24-Unprefixed- smode) (.sym dst32-40-Unprefixed- dmode) (f-12-4 opc2))
   6483 			       sem)
   6484     (binary-arith-src-dst-defn 32 16-16-Unprefixed 32-Unprefixed smode dmode wstr op suffix
   6485 			       (+ (f-0-1 opc1) (f-7-1 wbit) (.sym src32-16-16-Unprefixed- smode) (.sym dst32-32-Unprefixed- dmode) (f-12-4 opc2))
   6486 			       sem)
   6487     (binary-arith-src-dst-defn 32 16-8-Unprefixed 24-Unprefixed smode dmode wstr op suffix
   6488 			       (+ (f-0-1 opc1) (f-7-1 wbit) (.sym src32-16-8-Unprefixed- smode) (.sym dst32-24-Unprefixed- dmode) (f-12-4 opc2))
   6489 			       sem)
   6490 ;     (binary-arith-src-dst-defn 32 basic-indirect 24-Prefixed smode dmode wstr op suffix
   6491 ; 			       (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
   6492 ; 				  (.sym src32-basic-indirect- smode) (.sym dst32-24-Prefixed- dmode) (f-20-4 opc2))
   6493 ; 			       sem)
   6494 ;     (binary-arith-src-dst-defn 32 24-24-indirect 48-Prefixed smode dmode wstr op suffix
   6495 ; 			       (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
   6496 ; 				  (.sym src32-24-24-indirect- smode) (.sym dst32-48-Prefixed- dmode) (f-20-4 opc2))
   6497 ; 			       sem)
   6498 ;     (binary-arith-src-dst-defn 32 24-16-indirect 40-Prefixed smode dmode wstr op suffix
   6499 ; 			       (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
   6500 ; 				  (.sym src32-24-16-indirect- smode) (.sym dst32-40-Prefixed- dmode) (f-20-4 opc2))
   6501 ; 			       sem)
   6502 ;     (binary-arith-src-dst-defn 32 24-8-indirect 32-Prefixed smode dmode wstr op suffix
   6503 ; 			       (+ (f-0-4 4) (f-4-4 1) (f-8-1 opc1) (f-15-1 wbit)
   6504 ; 				  (.sym src32-24-8-indirect- smode) (.sym dst32-32-Prefixed- dmode) (f-20-4 opc2))
   6505 ; 			       sem)
   6506 ;     (binary-arith-src-dst-defn 32 basic-Prefixed 24-indirect smode dmode wstr op suffix
   6507 ; 			       (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
   6508 ; 				  (.sym src32-basic-Prefixed- smode) (.sym dst32-24-indirect- dmode) (f-20-4 opc2))
   6509 ; 			       sem)
   6510 ;     (binary-arith-src-dst-defn 32 24-24-Prefixed 48-indirect smode dmode wstr op suffix
   6511 ; 			       (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
   6512 ; 				  (.sym src32-24-24-Prefixed- smode) (.sym dst32-48-indirect- dmode) (f-20-4 opc2))
   6513 ; 			       sem)
   6514 ;     (binary-arith-src-dst-defn 32 24-16-Prefixed 40-indirect smode dmode wstr op suffix
   6515 ; 			       (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
   6516 ; 				  (.sym src32-24-16-Prefixed- smode) (.sym dst32-40-indirect- dmode) (f-20-4 opc2))
   6517 ; 			       sem)
   6518 ;     (binary-arith-src-dst-defn 32 24-8-Prefixed 32-indirect smode dmode wstr op suffix
   6519 ; 			       (+ (f-0-4 0) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
   6520 ; 				  (.sym src32-24-8-Prefixed- smode) (.sym dst32-32-indirect- dmode) (f-20-4 opc2))
   6521 ; 			       sem)
   6522 ;     (binary-arith-src-dst-defn 32 basic-indirect 24-indirect smode dmode wstr op suffix
   6523 ; 			       (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
   6524 ; 				  (.sym src32-basic-indirect- smode) (.sym dst32-24-indirect- dmode) (f-20-4 opc2))
   6525 ; 			       sem)
   6526 ;     (binary-arith-src-dst-defn 32 24-24-indirect 48-indirect smode dmode wstr op suffix
   6527 ; 			       (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
   6528 ; 				  (.sym src32-24-24-indirect- smode) (.sym dst32-48-indirect- dmode) (f-20-4 opc2))
   6529 ; 			       sem)
   6530 ;     (binary-arith-src-dst-defn 32 24-16-indirect 40-indirect smode dmode wstr op suffix
   6531 ; 			       (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
   6532 ; 				  (.sym src32-24-16-indirect- smode) (.sym dst32-40-indirect- dmode) (f-20-4 opc2))
   6533 ; 			       sem)
   6534 ;     (binary-arith-src-dst-defn 32 24-8-indirect 32-indirect smode dmode wstr op suffix
   6535 ; 			       (+ (f-0-4 4) (f-4-4 9) (f-8-1 opc1) (f-15-1 wbit)
   6536 ; 				  (.sym src32-24-8-indirect- smode) (.sym dst32-32-indirect- dmode) (f-20-4 opc2))
   6537 ; 			       sem)
   6538   )
   6539 )
   6540 
   6541 (define-pmacro (binary-arith-src-dst-mach mach op suffix opc1 opc2 sem)
   6542   (begin
   6543     (.apply (.sym binary-arith mach -src-dst-defn) (QI QI .b 0 op suffix opc1 opc2 sem))
   6544     (.apply (.sym binary-arith mach -src-dst-defn) (HI HI .w 1 op suffix opc1 opc2 sem))
   6545   )
   6546 )
   6547 
   6548 (define-pmacro (binary-arith-src-dst op suffix opc16-1 opc16-2 opc32-1 opc32-2 sem)
   6549   (begin
   6550     (binary-arith-src-dst-mach 16 op suffix opc16-1 opc16-2 sem)
   6551     (binary-arith-src-dst-mach 32 op suffix opc32-1 opc32-2 sem)
   6552   )
   6553 )
   6554 
   6555 ;-------------------------------------------------------------
   6556 ;<arith>.size:S #imm,dst -- for m32c
   6557 ;-------------------------------------------------------------
   6558 
   6559 (define-pmacro (binary-arith32-s-imm-dst-defn src dstgroup mode wstr op encoding sem)
   6560   (dni (.sym op 32 wstr - imm-S - dstgroup)
   6561        (.str op wstr " 32-imm-S-" dstgroup "-" mode)
   6562        ((machine 32))
   6563        (.str op wstr "$S #${" src "},${dst32-" dstgroup "-" mode "}")
   6564        encoding
   6565        (sem mode src (.sym dst32- dstgroup - mode))
   6566        ())
   6567 )
   6568 
   6569 (define-pmacro (binary-arith32-z-imm-dst-defn src dstgroup mode wstr op encoding sem)
   6570   (dni (.sym op 32 wstr - imm-Z - dstgroup)
   6571        (.str op wstr " 32-imm-Z-" dstgroup "-" mode)
   6572        ((machine 32))
   6573        (.str op wstr "$Z #0,${dst32-" dstgroup "-" mode "}")
   6574        encoding
   6575        (sem mode (const 0) (.sym dst32- dstgroup - mode))
   6576        ())
   6577 )
   6578 
   6579 (define-pmacro (binary-arith32-s-imm-dst mode wstr wbit op opc1 opc2 sem)
   6580   (begin
   6581 ;     (binary-arith32-s-imm-dst-defn (.sym Imm-32- mode) 2-S-absolute-indirect mode wstr op
   6582 ; 			       (+ (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))
   6583 ; 			       sem)
   6584     (binary-arith32-s-imm-dst-defn (.sym Imm-8- mode) 2-S-basic mode wstr op
   6585 			       (+ (f-0-2 opc1) (.sym dst32-2-S-basic- mode) (f-4-3 opc2) (f-7-1 wbit) (.sym Imm-8- mode))
   6586 			       sem)
   6587     (binary-arith32-s-imm-dst-defn (.sym Imm-24- mode) 2-S-16 mode wstr op
   6588 			       (+ (f-0-2 opc1) (.sym dst32-2-S-16- mode) (f-4-3 opc2) (f-7-1 wbit) (.sym Imm-24- mode))
   6589 			       sem)
   6590     (binary-arith32-s-imm-dst-defn (.sym Imm-16- mode) 2-S-8 mode wstr op
   6591 			       (+ (f-0-2 opc1) (.sym dst32-2-S-8- mode) (f-4-3 opc2) (f-7-1 wbit) (.sym Imm-16- mode))
   6592 			       sem)
   6593 ;     (binary-arith32-s-imm-dst-defn (.sym Imm-24- mode) 2-S-8-indirect mode wstr op
   6594 ; 			       (+ (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))
   6595 ; 			       sem)
   6596   )
   6597 )
   6598 
   6599 (define-pmacro (binary-arith32-z-imm-dst mode wstr wbit op opc1 opc2 sem)
   6600   (begin
   6601 ;     (binary-arith32-z-imm-dst-defn (.sym Imm-32- mode) 2-S-absolute-indirect mode wstr op
   6602 ; 			       (+ (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))
   6603 ; 			       sem)
   6604     (binary-arith32-z-imm-dst-defn (.sym Imm-8- mode) 2-S-basic mode wstr op
   6605 			       (+ (f-0-2 opc1) (.sym dst32-2-S-basic- mode) (f-4-3 opc2) (f-7-1 wbit))
   6606 			       sem)
   6607     (binary-arith32-z-imm-dst-defn (.sym Imm-24- mode) 2-S-16 mode wstr op
   6608 			       (+ (f-0-2 opc1) (.sym dst32-2-S-16- mode) (f-4-3 opc2) (f-7-1 wbit))
   6609 			       sem)
   6610     (binary-arith32-z-imm-dst-defn (.sym Imm-16- mode) 2-S-8 mode wstr op
   6611 			       (+ (f-0-2 opc1) (.sym dst32-2-S-8- mode) (f-4-3 opc2) (f-7-1 wbit))
   6612 			       sem)
   6613 ;     (binary-arith32-z-imm-dst-defn (.sym Imm-24- mode) 2-S-8-indirect mode wstr op
   6614 ; 			       (+ (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))
   6615 ; 			       sem)
   6616   )
   6617 )
   6618 
   6619 ;-------------------------------------------------------------
   6620 ;<arith>.L:S #imm1,An -- for m32c
   6621 ;-------------------------------------------------------------
   6622 
   6623 (define-pmacro (binary-arith32-l-s-imm1-an op opc1 opc2 sem)
   6624   (begin
   6625     (dni (.sym op 32.l-s-imm1-S-an)
   6626 	 (.str op ".l 32-imm1-S-an")
   6627 	 ((machine 32))
   6628 	 (.str op ".l$S #${Imm1-S},${dst32-an-S}")
   6629 	 (+ opc1 Imm1-S opc2 dst32-an-S)
   6630 	 (sem SI Imm1-S dst32-an-S)
   6631 	 ())
   6632   )
   6633 )
   6634 
   6635 ;-------------------------------------------------------------
   6636 ;<arith>.L:Q #imm3,sp -- for m32c
   6637 ;-------------------------------------------------------------
   6638 
   6639 (define-pmacro (binary-arith32-l-q-imm3-sp op opc1 opc2 sem)
   6640   (begin
   6641     (dni (.sym op 32.l-imm3-Q)
   6642 	 (.str op ".l 32-imm3-Q")
   6643 	 ((machine 32))
   6644 	 (.str op ".l$Q #${Imm3-S},sp")
   6645 	 (+ opc1 Imm3-S opc2)
   6646 	 (sem SI Imm3-S sp)
   6647 	 ())
   6648   )
   6649 )
   6650 
   6651 ;-------------------------------------------------------------
   6652 ;<arith>.L:S #imm8,sp -- for m32c
   6653 ;-------------------------------------------------------------
   6654 
   6655 (define-pmacro (binary-arith32-l-s-imm8-sp op opc1 opc2 opc3 opc4 sem)
   6656   (begin
   6657     (dni (.sym op 32.l-imm8-S)
   6658 	 (.str op ".l 32-imm8-S")
   6659 	 ((machine 32))
   6660 	 (.str op ".l$S #${Imm-16-QI},sp")
   6661 	 (+ opc1 opc2 opc3 opc4 Imm-16-QI)
   6662 	 (sem SI Imm-16-QI sp)
   6663 	 ())
   6664   )
   6665 )
   6666 
   6667 ;-------------------------------------------------------------
   6668 ;<arith>.L:G #imm16,sp -- for m32c
   6669 ;-------------------------------------------------------------
   6670 
   6671 (define-pmacro (binary-arith32-l-g-imm16-sp op opc1 opc2 opc3 opc4 sem)
   6672   (begin
   6673     (dni (.sym op 32.l-imm16-G)
   6674 	 (.str op ".l 32-imm16-G")
   6675 	 ((machine 32))
   6676 	 (.str op ".l$G #${Imm-16-HI},sp")
   6677 	 (+ opc1 opc2 opc3 opc4 Imm-16-HI)
   6678 	 (sem SI Imm-16-HI sp)
   6679 	 ())
   6680   )
   6681 )
   6682 
   6683 ;-------------------------------------------------------------
   6684 ;<arith>jnz.size #imm4,dst,label -- for m16c and m32c
   6685 ;-------------------------------------------------------------
   6686 
   6687 (define-pmacro (arith-jnz-imm4-dst-defn mach src dstgroup label mode wstr op encoding sem)
   6688   (dni (.sym op mach wstr - imm4 - dstgroup)
   6689        (.str op wstr " " mach "-imm4-" dstgroup "-" label "-" mode)
   6690        (RL_JUMP RELAXABLE (machine mach))
   6691        (.str op wstr " #${" src "},${dst" mach "-" dstgroup "-" mode "},${" label "}")
   6692        encoding
   6693        (sem mode src (.sym dst mach - dstgroup - mode) label)
   6694        ())
   6695 )
   6696 
   6697 ; m16c variants
   6698 (define-pmacro (arith-jnz16-imm4-dst-defn mode wstr wbit op i4n opc1 opc2 sem)
   6699   (begin
   6700     (arith-jnz-imm4-dst-defn 16 (.sym Imm-8- i4n) basic Lab-16-8 mode wstr op
   6701 			     (+ opc1 opc2 (f-7-1 wbit) (.sym Imm-8- i4n) (.sym dst16-basic- mode) Lab-16-8)
   6702 			     sem)
   6703     (arith-jnz-imm4-dst-defn 16 (.sym Imm-8- i4n) 16-16 Lab-32-8 mode wstr op
   6704 			     (+ opc1 opc2 (f-7-1 wbit) (.sym Imm-8- i4n) (.sym dst16-16-16- mode) Lab-32-8)
   6705 			     sem)
   6706     (arith-jnz-imm4-dst-defn 16 (.sym Imm-8- i4n) 16-8 Lab-24-8 mode wstr op
   6707 			     (+ opc1 opc2 (f-7-1 wbit) (.sym Imm-8- i4n) (.sym dst16-16-8- mode) Lab-24-8)
   6708 			     sem)
   6709   )
   6710 )
   6711 
   6712 ; m32c variants
   6713 (define-pmacro (arith-jnz32-imm4-dst-defn mode wstr wbit op i4n opc1 opc2 sem)
   6714   (begin
   6715     (arith-jnz-imm4-dst-defn 32 (.sym Imm-12- i4n) basic-Unprefixed Lab-16-8 mode wstr op
   6716 		     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-basic-Unprefixed- mode) (f-10-2 opc2) (.sym Imm-12- i4n) Lab-16-8)
   6717 		     sem)
   6718     (arith-jnz-imm4-dst-defn 32 (.sym Imm-12- i4n) 16-24-Unprefixed Lab-40-8 mode wstr op
   6719 		     (+ (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)
   6720 		     sem)
   6721     (arith-jnz-imm4-dst-defn 32 (.sym Imm-12- i4n) 16-16-Unprefixed Lab-32-8 mode wstr op
   6722 		     (+ (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)
   6723 		     sem)
   6724     (arith-jnz-imm4-dst-defn 32 (.sym Imm-12- i4n) 16-8-Unprefixed Lab-24-8 mode wstr op
   6725 		     (+ (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)
   6726 		     sem)
   6727   )
   6728 )
   6729 
   6730 (define-pmacro (arith-jnz-imm4-dst-mach mach op i4n opc1 opc2 sem)
   6731   (begin
   6732     (.apply (.sym arith-jnz mach -imm4-dst-defn) (QI .b 0 op i4n opc1 opc2 sem))
   6733     (.apply (.sym arith-jnz mach -imm4-dst-defn) (HI .w 1 op i4n opc1 opc2 sem))
   6734   )
   6735 )
   6736 
   6737 (define-pmacro (arith-jnz-imm4-dst op i4n opc16-1 opc16-2 opc32-1 opc32-2 sem)
   6738   (begin
   6739     (arith-jnz-imm4-dst-mach 16 op i4n opc16-1 opc16-2 sem)
   6740     (arith-jnz-imm4-dst-mach 32 op i4n opc32-1 opc32-2 sem)
   6741   )
   6742 )
   6743 
   6744 ;-------------------------------------------------------------
   6745 ;mov.size dsp8[sp],dst -- for m16c and m32c
   6746 ;-------------------------------------------------------------
   6747 (define-pmacro (mov-dspsp-dst-defn mach dstgroup dsp mode wstr op encoding sem)
   6748   (dni (.sym op mach wstr -dspsp-dst- dstgroup)
   6749        (.str op wstr " " mach "-dsp[sp]-" dstgroup "-" dsp "-" mode)
   6750        ((machine mach))
   6751        (.str op wstr "$G ${" dsp "}[sp],${dst" mach "-" dstgroup "-" mode "}")
   6752        encoding
   6753        (sem mach mode dsp (.sym dst mach - dstgroup - mode))
   6754        ())
   6755 )
   6756 (define-pmacro (mov-src-dspsp-defn mach dstgroup dsp mode wstr op encoding sem)
   6757   (dni (.sym op mach wstr -dst-dspsp- dstgroup)
   6758        (.str op wstr " " mach "-dsp[sp]-" dstgroup "-" dsp "-" mode)
   6759        ((machine mach))
   6760        (.str op wstr "$G ${dst" mach "-" dstgroup "-" mode "},${" dsp "}[sp]")
   6761        encoding
   6762        (sem mach mode (.sym dst mach - dstgroup - mode) dsp)
   6763        ())
   6764 )
   6765 
   6766 ; m16c variants
   6767 (define-pmacro (mov16-dspsp-dst-defn mode wstr wbit op opc1 opc2 opc3 sem)
   6768   (begin
   6769     (mov-dspsp-dst-defn 16 basic Dsp-16-s8 mode wstr op
   6770 			     (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-basic- mode) Dsp-16-s8)
   6771 			     sem)
   6772     (mov-dspsp-dst-defn 16 16-16 Dsp-32-s8 mode wstr op
   6773 			     (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-16- mode) Dsp-32-s8)
   6774 			     sem)
   6775     (mov-dspsp-dst-defn 16 16-8 Dsp-24-s8 mode wstr op
   6776 			     (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-8- mode) Dsp-24-s8)
   6777 			     sem)
   6778   )
   6779 )
   6780 
   6781 (define-pmacro (mov16-src-dspsp-defn mode wstr wbit op opc1 opc2 opc3 sem)
   6782   (begin
   6783     (mov-src-dspsp-defn 16 basic Dsp-16-s8 mode wstr op
   6784 			     (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-basic- mode) Dsp-16-s8)
   6785 			     sem)
   6786     (mov-src-dspsp-defn 16 16-16 Dsp-32-s8 mode wstr op
   6787 			     (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-16- mode) Dsp-32-s8)
   6788 			     sem)
   6789     (mov-src-dspsp-defn 16 16-8 Dsp-24-s8 mode wstr op
   6790 			     (+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16-8- mode) Dsp-24-s8)
   6791 			     sem)
   6792   )
   6793 )
   6794 
   6795 ; m32c variants
   6796 (define-pmacro (mov32-dspsp-dst-defn mode wstr wbit op opc1 opc2 opc3 sem)
   6797   (begin
   6798     (mov-dspsp-dst-defn 32 basic-Unprefixed Dsp-16-s8 mode wstr op
   6799 		     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-basic-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-16-s8)
   6800 		     sem)
   6801     (mov-dspsp-dst-defn 32 16-24-Unprefixed Dsp-40-s8 mode wstr op
   6802 		     (+ (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)
   6803 		     sem)
   6804     (mov-dspsp-dst-defn 32 16-16-Unprefixed Dsp-32-s8 mode wstr op
   6805 		     (+ (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)
   6806 		     sem)
   6807     (mov-dspsp-dst-defn 32 16-8-Unprefixed Dsp-24-s8 mode wstr op
   6808 		     (+ (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)
   6809 		     sem)
   6810   )
   6811 )
   6812 (define-pmacro (mov32-src-dspsp-defn mode wstr wbit op opc1 opc2 opc3 sem)
   6813   (begin
   6814     (mov-src-dspsp-defn 32 basic-Unprefixed Dsp-16-s8 mode wstr op
   6815 		     (+ (f-0-4 opc1) (f-7-1 wbit) (.sym dst32-basic-Unprefixed- mode) (f-10-2 opc2) (f-12-4 opc3) Dsp-16-s8)
   6816 		     sem)
   6817     (mov-src-dspsp-defn 32 16-24-Unprefixed Dsp-40-s8 mode wstr op
   6818 		     (+ (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)
   6819 		     sem)
   6820     (mov-src-dspsp-defn 32 16-16-Unprefixed Dsp-32-s8 mode wstr op
   6821 		     (+ (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)
   6822 		     sem)
   6823     (mov-src-dspsp-defn 32 16-8-Unprefixed Dsp-24-s8 mode wstr op
   6824 		     (+ (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)
   6825 		     sem)
   6826   )
   6827 )
   6828 
   6829 (define-pmacro (mov-src-dspsp-mach mach op opc1 opc2 opc3 sem)
   6830   (begin
   6831     (.apply (.sym mov mach -src-dspsp-defn) (QI .b 0 op opc1 opc2 opc3 sem))
   6832     (.apply (.sym mov mach -src-dspsp-defn) (HI .w 1 op opc1 opc2 opc3 sem))
   6833   )
   6834 )
   6835 
   6836 (define-pmacro (mov-dspsp-dst-mach mach op opc1 opc2 opc3 sem)
   6837   (begin
   6838     (.apply (.sym mov mach -dspsp-dst-defn) (QI .b 0 op opc1 opc2 opc3 sem))
   6839     (.apply (.sym mov mach -dspsp-dst-defn) (HI .w 1 op opc1 opc2 opc3 sem))
   6840   )
   6841 )
   6842 
   6843 (define-pmacro (mov-dspsp-dst op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
   6844   (begin
   6845     (mov-dspsp-dst-mach 16 op opc16-1 opc16-2 opc16-3 sem)
   6846     (mov-dspsp-dst-mach 32 op opc32-1 opc32-2 opc32-3 sem)
   6847   )
   6848 )
   6849 (define-pmacro (mov-src-dspsp op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
   6850   (begin
   6851     (mov-src-dspsp-mach 16 op opc16-1 opc16-2 opc16-3 sem)
   6852     (mov-src-dspsp-mach 32 op opc32-1 opc32-2 opc32-3 sem)
   6853   )
   6854 )
   6855 
   6856 ;-------------------------------------------------------------
   6857 ; lde dsp24,dst -- for m16c
   6858 ;-------------------------------------------------------------
   6859 
   6860 (define-pmacro (lde-dst-dsp mode wstr wbit dstgroup srcdisp)
   6861   (begin
   6862 
   6863     (dni (.sym lde wstr - dstgroup -u20)
   6864 	 (.str "lde" wstr "-" dstgroup "-u20")
   6865 	 ((machine 16))
   6866 	 (.str "lde" wstr " ${" srcdisp "},${dst16-" dstgroup "-" mode "}")
   6867 	 (+ (f-0-4 #x7) (f-4-3 #x2) (f-7-1 wbit) (f-8-4 #x8)
   6868 	  (.sym dst16- dstgroup - mode) srcdisp)
   6869 	 (nop)
   6870 	 ())
   6871 
   6872     (dni (.sym lde wstr - dstgroup -u20a0)
   6873 	 (.str "lde" wstr "-" dstgroup "-u20a0")
   6874 	 ((machine 16))
   6875 	 (.str "lde" wstr " ${" srcdisp "}[a0],${dst16-" dstgroup "-" mode "}")
   6876 	 (+ (f-0-4 #x7) (f-4-3 #x2) (f-7-1 wbit) (f-8-4 #x9)
   6877 	  (.sym dst16- dstgroup - mode) srcdisp)
   6878 	 (nop)
   6879 	 ())
   6880 
   6881     (dni (.sym lde wstr - dstgroup -a1a0)
   6882 	 (.str "lde" wstr "-" dstgroup "-a1a0")
   6883 	 ((machine 16))
   6884 	 (.str "lde" wstr " [a1a0],${dst16-" dstgroup "-" mode "}")
   6885 	 (+ (f-0-4 #x7) (f-4-3 #x2) (f-7-1 wbit) (f-8-4 #xa)
   6886 	  (.sym dst16- dstgroup - mode))
   6887 	 (nop)
   6888 	 ())
   6889     )
   6890   )
   6891 
   6892 (define-pmacro (lde-dst mode wstr wbit)
   6893   (begin
   6894     ; like:       QI   .b   0 
   6895     (lde-dst-dsp mode wstr wbit basic Dsp-16-u20)
   6896     (lde-dst-dsp mode wstr wbit 16-8  Dsp-24-u20)
   6897     (lde-dst-dsp mode wstr wbit 16-16 Dsp-32-u20)
   6898   )
   6899 )
   6900 
   6901 ;-------------------------------------------------------------
   6902 ; ste dst,dsp24 -- for m16c
   6903 ;-------------------------------------------------------------
   6904 
   6905 (define-pmacro (ste-dst-dsp mode wstr wbit dstgroup srcdisp)
   6906   (begin
   6907 
   6908     (dni (.sym ste wstr - dstgroup -u20)
   6909 	 (.str "ste" wstr "-" dstgroup "-u20")
   6910 	 ((machine 16))
   6911 	 (.str "ste" wstr " ${dst16-" dstgroup "-" mode "},${" srcdisp "}")
   6912 	 (+ (f-0-4 #x7) (f-4-3 #x2) (f-7-1 wbit) (f-8-4 #x0)
   6913 	  (.sym dst16- dstgroup - mode) srcdisp)
   6914 	 (nop)
   6915 	 ())
   6916 
   6917     (dni (.sym ste wstr - dstgroup -u20a0)
   6918 	 (.str "ste" wstr "-" dstgroup "-u20a0")
   6919 	 ((machine 16))
   6920 	 (.str "ste" wstr " ${dst16-" dstgroup "-" mode "},${" srcdisp "}[a0]")
   6921 	 (+ (f-0-4 #x7) (f-4-3 #x2) (f-7-1 wbit) (f-8-4 #x1)
   6922 	  (.sym dst16- dstgroup - mode) srcdisp)
   6923 	 (nop)
   6924 	 ())
   6925 
   6926     (dni (.sym ste wstr - dstgroup -a1a0)
   6927 	 (.str "ste" wstr "-" dstgroup "-a1a0")
   6928 	 ((machine 16))
   6929 	 (.str "ste" wstr " ${dst16-" dstgroup "-" mode "},[a1a0]")
   6930 	 (+ (f-0-4 #x7) (f-4-3 #x2) (f-7-1 wbit) (f-8-4 #x2)
   6931 	  (.sym dst16- dstgroup - mode))
   6932 	 (nop)
   6933 	 ())
   6934     )
   6935   )
   6936 
   6937 (define-pmacro (ste-dst mode wstr wbit)
   6938   (begin
   6939     ; like:       QI   .b   0 
   6940     (ste-dst-dsp mode wstr wbit basic Dsp-16-u20)
   6941     (ste-dst-dsp mode wstr wbit 16-8  Dsp-24-u20)
   6942     (ste-dst-dsp mode wstr wbit 16-16 Dsp-32-u20)
   6943   )
   6944 )
   6945 
   6946 ;=============================================================
   6947 ; Division
   6948 ;-------------------------------------------------------------
   6949 
   6950 (define-pmacro (div-sem divop modop opmode reg src quot rem max min)
   6951   (sequence ()
   6952 	    (if (eq src 0)
   6953 		(set obit (const BI 1))
   6954 		(sequence ((opmode quot-result) (opmode rem-result))
   6955 			  (set quot-result (divop opmode (ext opmode reg) src))
   6956 			  (set rem-result  (modop opmode (ext opmode reg) src))
   6957 			  (set obit (orif (gt opmode quot-result max)
   6958 					  (lt opmode quot-result min)))
   6959 			  (set quot quot-result)
   6960 			  (set rem  rem-result))))
   6961 )
   6962 
   6963 ;<divop>.size #imm -- for m16c and m32c
   6964 (define-pmacro (div-imm-defn mach wstr op src encoding divop modop opmode reg quot rem max min sem)
   6965   (dni (.sym op mach wstr - src)
   6966        (.str op mach wstr "-" src)
   6967        ((machine mach))
   6968        (.str op wstr " #${" src "}")
   6969        encoding
   6970        (sem divop modop opmode reg src quot rem max min)
   6971        ())
   6972 )
   6973 (define-pmacro (div16-imm-defn smode wstr wbit op divop modop opmode reg quot rem max min opc1 opc2 opc3 opc4 sem)
   6974   (div-imm-defn 16 wstr op (.sym Imm-16 - smode)
   6975 		(+ opc1 opc2 (f-7-1 wbit) opc3 opc4 (.sym Imm-16 - smode))
   6976 		divop modop opmode reg quot rem max min
   6977 		sem)
   6978 )
   6979 (define-pmacro (div32-imm-defn smode wstr wbit op divop modop opmode reg quot rem max min opc1 opc2 opc3 opc4 sem)
   6980   (div-imm-defn 32 wstr op (.sym Imm-16 - smode)
   6981 		(+ (f-0-4 opc1) (f-4-4 opc2) (f-8-3 opc3) (f-11-1 wbit) (f-12-4 opc4) (.sym Imm-16 - smode))
   6982 		divop modop opmode reg quot rem max min
   6983 		sem)
   6984 )
   6985 (define-pmacro (div-imm-mach mach op divop modop opmode max-QI min-QI max-HI min-HI opc1 opc2 opc3 opc4 sem)
   6986   (begin
   6987     (.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))
   6988     (.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))
   6989   )
   6990 )
   6991 (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)
   6992   (begin
   6993     (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)
   6994     (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)
   6995   )
   6996 )
   6997 
   6998 ;<divop>.size src -- for m16c and m32c
   6999 (define-pmacro (div-src-defn mach wstr op src encoding divop modop opmode reg quot rem max min sem)
   7000   (dni (.sym op mach wstr - src)
   7001        (.str op mach wstr "-" src)
   7002        ((machine mach))
   7003        (.str op wstr " ${" src "}")
   7004        encoding
   7005        (sem divop modop opmode reg src quot rem max min)
   7006        ())
   7007 )
   7008 (define-pmacro (div16-src-defn smode wstr wbit op divop modop opmode reg quot rem max min opc1 opc2 opc3 sem)
   7009   (div-src-defn 16 wstr op (.sym dst16-16 - smode)
   7010 		(+ opc1 opc2 (f-7-1 wbit) opc3 (.sym dst16-16 - smode))
   7011 		divop modop opmode reg quot rem max min
   7012 		sem)
   7013 )
   7014 (define-pmacro (div32-src-defn smode wstr wbit op divop modop opmode reg quot rem max min opc1 opc2 opc3 sem)
   7015   (begin
   7016     ; Multi insns are tried for assembly in the reverse order in which they appear here, so
   7017     ; define the absolute-indirect insns first in order to prevent them from being selected
   7018     ; when the mode is register-indirect
   7019 ;     (div-src-defn 32 wstr op (.sym dst32-24-absolute-indirect- smode)
   7020 ; 		  (+ (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))
   7021 ; 		  divop modop opmode reg quot rem max min
   7022 ; 		  sem)
   7023     (div-src-defn 32 wstr op (.sym dst32-16-Unprefixed- smode)
   7024 		  (+ (f-0-4 opc1) (f-7-1 wbit) (f-10-2 opc2) (f-12-4 opc3) (.sym dst32-16-Unprefixed- smode))
   7025 		  divop modop opmode reg quot rem max min
   7026 		  sem)
   7027 ;     (div-src-defn 32 wstr op (.sym dst32-24-indirect- smode)
   7028 ; 		  (+ (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))
   7029 ; 		  divop modop opmode reg quot rem max min
   7030 ; 		  sem)
   7031   )
   7032 )
   7033 (define-pmacro (div-src-mach mach op divop modop opmode max-QI min-QI max-HI min-HI opc1 opc2 opc3 sem)
   7034   (begin
   7035     (.apply (.sym div mach -src-defn) (QI .b 0 op divop modop opmode R0   R0l R0h max-QI min-QI opc1 opc2 opc3 sem))
   7036     (.apply (.sym div mach -src-defn) (HI .w 1 op divop modop opmode R2R0 R0  R2  max-HI min-HI opc1 opc2 opc3 sem))
   7037   )
   7038 )
   7039 (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)
   7040   (begin
   7041     (div-src-mach 16 op divop modop opmode max-QI min-QI max-HI min-HI opc16-1 opc16-2 opc16-3 sem)
   7042     (div-src-mach 32 op divop modop opmode max-QI min-QI max-HI min-HI opc32-1 opc32-2 opc32-3 sem)
   7043   )
   7044 )
   7045 
   7046 ;=============================================================
   7047 ; Bit manipulation
   7048 ;
   7049 (define-pmacro (bit-insn-defn mach op suffix opnd encoding sem)
   7050   (dni (.sym op mach - suffix - opnd)
   7051        (.str op mach ":" suffix " " opnd)
   7052        ((machine mach))
   7053        (.str op "$" suffix " ${" opnd "}")
   7054        encoding
   7055        (sem opnd)
   7056        ())
   7057 )
   7058 
   7059 (define-pmacro (bitsrc16-defn op opc1 opc2 opc3 sem)
   7060   (bit-insn-defn 16 op X bit16-16
   7061 		 (+ opc1 opc2 opc3 bit16-16)
   7062 		 sem)
   7063 )
   7064 
   7065 (define-pmacro (bitsrc32-defn op opc1 opc2 opc3 sem)
   7066   (begin
   7067     (bit-insn-defn 32 op X bit32-24-Prefixed
   7068 		   (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) bit32-24-Prefixed (f-15-1 opc2) (f-18-3 opc3))
   7069 		   sem)
   7070   )
   7071 )
   7072 
   7073 (define-pmacro (bitsrc-insn op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
   7074   (begin
   7075     (bitsrc16-defn op opc16-1 opc16-2 opc16-3 sem)
   7076     (bitsrc32-defn op opc32-1 opc32-2 opc32-3 sem)
   7077   )
   7078 )
   7079 
   7080 (define-pmacro (bitdst16-defn op opc1 opc2 opc3 opc4 opc5 opc6 sem)
   7081   (begin
   7082     (bit-insn-defn 16 op G bit16-16-basic (+ opc1 opc2 opc3 bit16-16-basic) sem)
   7083     (bit-insn-defn 16 op G bit16-16-16    (+ opc1 opc2 opc3 bit16-16-16) sem)
   7084     (bit-insn-defn 16 op S bit16-11-S     (+ opc4 opc5 opc6 bit16-11-S) sem)
   7085     (bit-insn-defn 16 op G bit16-16-8     (+ opc1 opc2 opc3 bit16-16-8) sem)
   7086   )
   7087 )
   7088 
   7089 (define-pmacro (bitdst32-defn op opc1 opc2 opc3 sem)
   7090   (begin
   7091     (bit-insn-defn 32 op X bit32-16-Unprefixed
   7092 		   (+ (f-0-4 opc1) bit32-16-Unprefixed (f-7-1 opc2) (f-10-3 opc3))
   7093 		   sem)
   7094   )
   7095 )
   7096 
   7097 (define-pmacro (bitdstnos-insn op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
   7098   (begin
   7099     (bitsrc16-defn op opc16-1 opc16-2 opc16-3 sem)
   7100     (bitdst32-defn op opc32-1 opc32-2 opc32-3 sem)
   7101   )
   7102 )
   7103 
   7104 (define-pmacro (bitdst-insn op opc16-1 opc16-2 opc16-3 opc16-4 opc16-5 opc16-6 opc32-1 opc32-2 opc32-3 sem)
   7105   (begin
   7106     (bitdst16-defn op opc16-1 opc16-2 opc16-3 opc16-4 opc16-5 opc16-6 sem)
   7107     (bitdst32-defn op opc32-1 opc32-2 opc32-3 sem)
   7108   )
   7109 )
   7110 
   7111 ;=============================================================
   7112 ; Bit condition
   7113 ;
   7114 (define-pmacro (bitcond-insn-defn mach op bit-opnd cond-opnd encoding sem)
   7115   (dni (.sym op mach - bit-opnd - cond-opnd)
   7116        (.str op mach " " bit-opnd " " cond-opnd)
   7117        ((machine mach))
   7118        (.str op "${" cond-opnd "} ${" bit-opnd "}")
   7119        encoding
   7120        (sem mach bit-opnd cond-opnd)
   7121        ())
   7122 )
   7123 
   7124 (define-pmacro (bitcond16-defn op opc1 opc2 opc3 sem)
   7125   (begin
   7126     (bitcond-insn-defn 16 op bit16-16-basic cond16-16 (+ opc1 opc2 opc3 bit16-16-basic cond16-16) sem)
   7127     (bitcond-insn-defn 16 op bit16-16-16    cond16-32 (+ opc1 opc2 opc3 bit16-16-16 cond16-32) sem)
   7128     (bitcond-insn-defn 16 op bit16-16-8     cond16-24 (+ opc1 opc2 opc3 bit16-16-8 cond16-24) sem) 
   7129   )
   7130 )
   7131 
   7132 (define-pmacro (bitcond32-defn op opc1 opc2 opc3 sem)
   7133   (begin
   7134     (bitcond-insn-defn 32 op bit32-16-24-Unprefixed cond32-40
   7135 		       (+ (f-0-4 opc1) bit32-16-24-Unprefixed (f-7-1 opc2) (f-10-3 opc3) cond32-40)
   7136 		       sem)
   7137     (bitcond-insn-defn 32 op bit32-16-16-Unprefixed cond32-32
   7138 		       (+ (f-0-4 opc1) bit32-16-16-Unprefixed (f-7-1 opc2) (f-10-3 opc3) cond32-32)
   7139 		       sem)
   7140     (bitcond-insn-defn 32 op bit32-16-8-Unprefixed cond32-24
   7141 		       (+ (f-0-4 opc1) bit32-16-8-Unprefixed (f-7-1 opc2) (f-10-3 opc3) cond32-24)
   7142 		       sem)
   7143     (bitcond-insn-defn 32 op bit32-basic-Unprefixed cond32-16
   7144 		       (+ (f-0-4 opc1) bit32-basic-Unprefixed (f-7-1 opc2) (f-10-3 opc3) cond32-16)
   7145 		       sem)
   7146   )
   7147 )
   7148 
   7149 (define-pmacro (bitcond-insn op opc16-1 opc16-2 opc16-3 opc32-1 opc32-2 opc32-3 sem)
   7150   (begin
   7151     (bitcond16-defn op opc16-1 opc16-2 opc16-3 sem)
   7152     (bitcond32-defn op opc32-1 opc32-2 opc32-3 sem)
   7153   )
   7154 )
   7155 
   7156 ;=============================================================
   7157 ;<insn>.size #imm1,#imm2,dst -- for m32c
   7158 ;
   7159 (define-pmacro (insn-imm1-imm2-dst-defn src1 src2 dstgroup xmode wstr op encoding sem)
   7160   (dni (.sym op 32 wstr - src1 - src2 - dstgroup)
   7161        (.str op 32 wstr "-" src1 "-" src2 "-" dstgroup "-" xmode)
   7162        ((machine 32))
   7163        (.str op wstr " #${" src1 "},#${" src2 "},${dst32-" dstgroup "-" xmode "}")
   7164        encoding
   7165        (sem xmode src1 src2 (.sym dst32- dstgroup - xmode))
   7166        ())
   7167 )
   7168 
   7169 ; m32c Prefixed variants
   7170 (define-pmacro (insn32-imm1-imm2-dst-Prefixed-defn xmode wstr wbit base1 base2 base3 base4 op opc1 opc2 opc3 sem)
   7171   (begin
   7172     (insn-imm1-imm2-dst-defn (.sym Imm-48- xmode) (.sym Imm- base4 - xmode) 24-24-Prefixed xmode wstr op
   7173 			     (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3)
   7174 				(.sym dst32-24-24-Prefixed- xmode) (.sym Imm-48- xmode) (.sym Imm- base4 - xmode))
   7175 			     sem)
   7176     (insn-imm1-imm2-dst-defn (.sym Imm-40- xmode) (.sym Imm- base3 - xmode) 24-16-Prefixed xmode wstr op
   7177 			     (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3)
   7178 				(.sym dst32-24-16-Prefixed- xmode) (.sym Imm-40- xmode) (.sym Imm- base3 - xmode))
   7179 			     sem)
   7180     (insn-imm1-imm2-dst-defn (.sym Imm-32- xmode) (.sym Imm- base2 - xmode) 24-8-Prefixed xmode wstr op
   7181 			     (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3)
   7182 				(.sym dst32-24-8-Prefixed- xmode) (.sym Imm-32- xmode) (.sym Imm- base2 - xmode))
   7183 			     sem)
   7184     (insn-imm1-imm2-dst-defn (.sym Imm-24- xmode) (.sym Imm- base1 - xmode) basic-Prefixed xmode wstr op
   7185 			     (+ (f-0-4 0) (f-4-4 1) (f-8-4 opc1) (f-18-2 opc2) (f-15-1 wbit) (f-20-4 opc3)
   7186 				(.sym dst32-basic-Prefixed- xmode) (.sym Imm-24- xmode) (.sym Imm- base1 - xmode))
   7187 			     sem)
   7188   )
   7189 )
   7190 
   7191 ; m32c Unprefixed variants
   7192 (define-pmacro (insn32-imm1-imm2-dst-Unprefixed-defn xmode wstr wbit base1 base2 base3 base4 op opc1 opc2 opc3 sem)
   7193   (begin
   7194     (insn-imm1-imm2-dst-defn (.sym Imm-40- xmode) (.sym Imm- base4 - xmode) 16-24-Unprefixed xmode wstr op
   7195 			     (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3)
   7196 				(.sym dst32-16-24-Unprefixed- xmode) (.sym Imm-40- xmode) (.sym Imm- base4 - xmode))
   7197 			     sem)
   7198     (insn-imm1-imm2-dst-defn (.sym Imm-32- xmode) (.sym Imm- base3 - xmode) 16-16-Unprefixed xmode wstr op
   7199 			     (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3)
   7200 				(.sym dst32-16-16-Unprefixed- xmode) (.sym Imm-32- xmode) (.sym Imm- base3 - xmode))
   7201 			     sem)
   7202     (insn-imm1-imm2-dst-defn (.sym Imm-24- xmode) (.sym Imm- base2 - xmode) 16-8-Unprefixed xmode wstr op
   7203 			     (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3)
   7204 				(.sym dst32-16-8-Unprefixed- xmode) (.sym Imm-24- xmode) (.sym Imm- base2 - xmode))
   7205 			     sem)
   7206     (insn-imm1-imm2-dst-defn (.sym Imm-16- xmode) (.sym Imm- base1 - xmode) basic-Unprefixed xmode wstr op
   7207 			     (+ (f-0-4 opc1) (f-10-2 opc2) (f-7-1 wbit) (f-12-4 opc3)
   7208 				(.sym dst32-basic-Unprefixed- xmode) (.sym Imm-16- xmode) (.sym Imm- base1 - xmode))
   7209 			     sem)
   7210   )
   7211 )
   7212 
   7213 (define-pmacro (insn-imm1-imm2-dst-Prefixed op opc32-1 opc32-2 opc32-3 sem)
   7214   (begin
   7215     (insn32-imm1-imm2-dst-Prefixed-defn QI .b 0 32 40 48 56 op opc32-1 opc32-2 opc32-3 sem)
   7216     (insn32-imm1-imm2-dst-Prefixed-defn HI .w 1 40 48 56 64 op opc32-1 opc32-2 opc32-3 sem)
   7217   )
   7218 )
   7219 (define-pmacro (insn-imm1-imm2-dst-Unprefixed op opc32-1 opc32-2 opc32-3 sem)
   7220   (begin
   7221     (insn32-imm1-imm2-dst-Unprefixed-defn QI .b 0 24 32 40 48 op opc32-1 opc32-2 opc32-3 sem)
   7222     (insn32-imm1-imm2-dst-Unprefixed-defn HI .w 1 32 40 48 56 op opc32-1 opc32-2 opc32-3 sem)
   7223   )
   7224 )
   7225 
   7227 ;=============================================================
   7228 ; Insn definitions
   7229 ;-------------------------------------------------------------
   7230 ; abs - absolute
   7231 ;-------------------------------------------------------------
   7232 
   7233 (define-pmacro (abs-sem mode dst)
   7234   (sequence ((mode result))
   7235 	    (set result (abs mode dst))
   7236 	    (set obit (eq result dst))
   7237 	    (set-z-and-s result)
   7238 	    (set dst result))
   7239 )
   7240 (unary-insn abs (f-0-4 7) (f-4-3 3) (f-8-4 #xF) #xA #x1 #xF abs-sem)
   7241 
   7242 ;-------------------------------------------------------------
   7243 ; adcf - addition carry flag
   7244 ;-------------------------------------------------------------
   7245 
   7246 (define-pmacro (adcf-sem mode dst)
   7247   (sequence ((mode result))
   7248 	    (set result (addc mode dst 0 cbit))
   7249 	    (set obit (add-oflag mode dst 0 cbit))
   7250 	    (set cbit (add-cflag mode dst 0 cbit))
   7251 	    (set-z-and-s result)
   7252 	    (set dst result))
   7253 )
   7254 (unary-insn adcf (f-0-4 7) (f-4-3 3) (f-8-4 #xE) #xB #x1 #xE adcf-sem)
   7255 
   7256 ;-------------------------------------------------------------
   7257 ; add - binary addition
   7258 ;-------------------------------------------------------------
   7259 
   7260 (define-pmacro (add-sem mode src1 dst)
   7261   (sequence ((mode result))
   7262 	    (set result (add mode src1 dst))
   7263 	    (set obit (add-oflag mode src1 dst 0))
   7264 	    (set cbit (add-cflag mode src1 dst 0))
   7265 	    (set-z-and-s result)
   7266 	    (set dst result))
   7267 )
   7268 
   7269 ; add.L:G #imm32,dst (m32 #2)
   7270 (binary-arith32-imm-dst-defn SI SI .l 0 add G #x8 #x3 #x1 add-sem)
   7271 ; add.size:G #imm,dst (m16 #1 m32 #1)
   7272 (binary-arith-imm-dst add G (f-0-4 7) (f-4-3 3) (f-8-4 4) #x8 #x2 #xE add-sem)
   7273 ; add.size:Q #imm4,dst (m16 #2 m32 #3)
   7274 (binary-arith-imm4-dst add (f-0-4 #xC) (f-4-3 4) #x7 #x3 add-sem)
   7275 (binary-arith32-imm4-dst-defn SI .l 1 0 add #x7 #x3 add-sem)
   7276 ; add.b:S #imm8,dst3 (m16 #3)
   7277 (binary-arith16-b-S-imm8-dst3 add ".b" (f-0-4 8) (f-4-1 0) add-sem)
   7278 ; add.BW:Q #imm4,sp (m16 #7)
   7279 (binary-arith16-Q-sp add (f-0-4 7) (f-4-4 #xD) (f-8-4 #xB) add-sem)
   7280 (dnmi add16-bQ-sp "add16-bQ-sp" ()
   7281       "add.b:q #${Imm-12-s4},sp"
   7282       (emit add16-wQ-sp Imm-12-s4))
   7283 ; add.BW:G #imm,sp (m16 #6)
   7284 (binary-arith16-G-sp add (f-0-4 7) (f-4-3 6) (f-8-4 #xE) (f-12-4 #xB) add-sem)
   7285 ; add.BW:G src,dst (m16 #4 m32 #6)
   7286 (binary-arith-src-dst add G (f-0-4 #xA) (f-4-3 0) #x1 #x8 add-sem)
   7287 ; add.B.S src2,r0l/r0h (m16 #5)
   7288 (binary-arith16-b-S-src2 add (f-0-4 2) (f-4-1 0) add-sem)
   7289 ; add.L:G src,dst (m32 #7)
   7290 (binary-arith32-src-dst-defn SI SI .l 1 add G #x1 #x2 add-sem)
   7291 ; add.L:S #imm{1,2},A0/A1 (m32 #5)
   7292 (binary-arith32-l-s-imm1-an add (f-0-2 2) (f-3-4 6) add-sem)
   7293 ; add.L:Q #imm3,sp (m32 #9)
   7294 (binary-arith32-l-q-imm3-sp add (f-0-2 1) (f-4-3 1) add-sem)
   7295 ; add.L:S #imm8,sp (m32 #10)
   7296 (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)
   7297 ; add.L:G #imm16,sp (m32 #8)
   7298 (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)
   7299 ; add.BW:S #imm,dst2 (m32 #4)
   7300 (binary-arith32-s-imm-dst QI .b 0 add #x0 #x3 add-sem)
   7301 (binary-arith32-s-imm-dst HI .w 1 add #x0 #x3 add-sem)
   7302 
   7303 ;-------------------------------------------------------------
   7304 ; adc - binary add with carry
   7305 ;-------------------------------------------------------------
   7306 
   7307 (define-pmacro (addc-sem mode src dst)
   7308   (sequence ((mode result))
   7309 	    (set result (addc mode src dst cbit))
   7310 	    (set obit (add-oflag mode src dst cbit))
   7311 	    (set cbit (add-cflag mode src dst cbit))
   7312 	    (set-z-and-s result)
   7313 	    (set dst result))
   7314 )
   7315 
   7316 ; adc.size:G #imm,dst
   7317 (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)
   7318 (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)
   7319 (binary-arith32-imm-dst-Prefixed QI QI .b 0 adc X #x8 #x2 #xE addc-sem)
   7320 (binary-arith32-imm-dst-Prefixed HI HI .w 1 adc X #x8 #x2 #xE addc-sem)
   7321 
   7322 ; adc.BW:G src,dst
   7323 (binary-arith16-src-dst-defn QI QI .b 0 adc X (f-0-4 #xB) (f-4-3 0) addc-sem)
   7324 (binary-arith16-src-dst-defn HI HI .w 1 adc X (f-0-4 #xB) (f-4-3 0) addc-sem)
   7325 (binary-arith32-src-dst-Prefixed QI QI .b 0 adc X #x1 #x4 addc-sem)
   7326 (binary-arith32-src-dst-Prefixed HI HI .w 1 adc X #x1 #x4 addc-sem)
   7327 
   7328 ;-------------------------------------------------------------
   7329 ; dadc - decimal add with carry
   7330 ; dadd - decimal addition
   7331 ;-------------------------------------------------------------
   7332 
   7333 (define-pmacro (dadc-sem mode src dst)
   7334   (sequence ((mode result))
   7335 	    (set result (subc mode dst src (not cbit)))
   7336 	    (set cbit (sub-cflag mode dst src (not cbit)))
   7337 	    (set-z-and-s result)
   7338 	    (set dst result))
   7339 )
   7340 
   7341 (define-pmacro (decimal-subtraction16-insn op opc1 opc2)
   7342   (begin
   7343     ; op.b #imm8,r0l
   7344     (dni (.sym op 16.b-imm8)
   7345 	 (.str op ".b #imm8")
   7346 	 ((machine 16))
   7347 	 (.str op ".b #${Imm-16-QI},r0l")
   7348 	 (+ (f-0-4 #x7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 opc1) Imm-16-QI)
   7349 	 ((.sym op -sem) QI Imm-16-QI R0l)
   7350 	 ())
   7351     ; op.w #imm16,r0
   7352     (dni (.sym op 16.w-imm16)
   7353 	 (.str op ".b #imm16")
   7354 	 ((machine 16))
   7355 	 (.str op ".w #${Imm-16-HI},r0")
   7356 	 (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 opc1) Imm-16-HI)
   7357 	 ((.sym op -sem) HI Imm-16-HI R0)
   7358 	 ())
   7359     ; op.b #r0h,r0l
   7360     (dni (.sym op 16.b-r0h-r0l)
   7361 	 (.str op ".b r0h,r0l")
   7362 	 ((machine 16))
   7363 	 (.str op ".b r0h,r0l")
   7364 	 (+ (f-0-4 #x7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 opc2))
   7365 	 ((.sym op -sem) QI R0h R0l)
   7366 	 ())
   7367     ; op.w #r1,r0
   7368     (dni (.sym op 16.w-r1-r0)
   7369 	 (.str op ".b r1,r0")
   7370 	 ((machine 16))
   7371 	 (.str op ".w r1,r0")
   7372 	 (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 opc2))
   7373 	 ((.sym op -sem) HI R1 R0)
   7374 	 ())
   7375   )
   7376 )
   7377 
   7378 ; dadc for m16c
   7379 (decimal-subtraction16-insn dadc #xE #x6 )
   7380 
   7381 ; dadc.size #imm,dst
   7382 (binary-arith32-imm-dst-Prefixed QI QI .b 0 dadc X #x8 #x0 #xE dadc-sem)
   7383 (binary-arith32-imm-dst-Prefixed HI HI .w 1 dadc X #x8 #x0 #xE dadc-sem)
   7384 ; dadc.BW src,dst
   7385 (binary-arith32-src-dst-Prefixed QI QI .b 0 dadc X #x1 #x8 dadc-sem)
   7386 (binary-arith32-src-dst-Prefixed HI HI .w 1 dadc X #x1 #x8 dadc-sem)
   7387 
   7388 (define-pmacro (dadd-sem mode src dst)
   7389   (sequence ((mode result))
   7390 	    (set result (subc mode dst src 0))
   7391 	    (set cbit (sub-cflag mode dst src 0))
   7392 	    (set-z-and-s result)
   7393 	    (set dst result))
   7394 )
   7395 
   7396 ; dadd for m16c
   7397 (decimal-subtraction16-insn dadd #xC #x4)
   7398 
   7399 ; dadd.size #imm,dst
   7400 (binary-arith32-imm-dst-Prefixed QI QI .b 0 dadd X #x8 #x1 #xE dadd-sem)
   7401 (binary-arith32-imm-dst-Prefixed HI HI .w 1 dadd X #x8 #x1 #xE dadd-sem)
   7402 ; dadd.BW src,dst
   7403 (binary-arith32-src-dst-Prefixed QI QI .b 0 dadd X #x1 #x0 dadd-sem)
   7404 (binary-arith32-src-dst-Prefixed HI HI .w 1 dadd X #x1 #x0 dadd-sem)
   7405 
   7406 ;-------------------------------------------------------------;
   7407 ; addx - Add extend sign with no carry
   7408 ;-------------------------------------------------------------;
   7409 
   7410 (define-pmacro (addx-sem mode src dst)
   7411   (sequence ((SI source) (SI result))
   7412 	    (set source (zext SI (trunc QI src)))
   7413 	    (set result (add SI source dst))
   7414 	    (set obit (add-oflag SI source dst 0))
   7415 	    (set cbit (add-cflag SI source dst 0))
   7416 	    (set-z-and-s result)
   7417 	    (set dst result))
   7418 )
   7419 
   7420 ; addx #imm,dst
   7421 (binary-arith32-imm-dst-defn QI SI "" 0 addx X #x8 #x1 #x1 addx-sem)
   7422 ; addx src,dst
   7423 (binary-arith32-src-dst-defn QI SI "" 0 addx X #x1 #x2 addx-sem)
   7424 
   7425 ;-------------------------------------------------------------
   7426 ; adjnz - Add/Sub and branch if not zero
   7427 ;-------------------------------------------------------------
   7428 
   7429 (define-pmacro (arith-jnz-sem mode src dst label)
   7430   (sequence ((mode result))
   7431 	    (set result (add mode src dst))
   7432 	    (set dst result)
   7433 	    (if (ne result 0)
   7434 		(set pc label)))
   7435 )
   7436 
   7437 ; adjnz.size #imm4,dst,label
   7438 (arith-jnz-imm4-dst adjnz s4 (f-0-4 #xF) (f-4-3 4) #xf #x1 arith-jnz-sem)
   7439 
   7440 ;-------------------------------------------------------------
   7441 ; and - binary and
   7442 ;-------------------------------------------------------------
   7443 
   7444 (define-pmacro (and-sem mode src1 dst)
   7445   (sequence ((mode result))
   7446 	    (set result (and mode src1 dst))
   7447 	    (set-z-and-s result)
   7448 	    (set dst result))
   7449 )
   7450 
   7451 ; and.size:G #imm,dst (m16 #1 m32 #1)
   7452 (binary-arith-imm-dst and G (f-0-4 7) (f-4-3 3) (f-8-4 2) #x8 #x3 #xF and-sem)
   7453 ; and.b:S #imm8,dst3 (m16 #2)
   7454 (binary-arith16-b-S-imm8-dst3 and ".b" (f-0-4 9) (f-4-1 0) and-sem)
   7455 ; and.BW:G src,dst (m16 #3 m32 #3)
   7456 (binary-arith-src-dst and G (f-0-4 #x9) (f-4-3 0) #x1 #xD and-sem)
   7457 ; and.B.S src2,r0l/r0h (m16 #4)
   7458 (binary-arith16-b-S-src2 and (f-0-4 1) (f-4-1 0) and-sem)
   7459 ; and.BW:S #imm,dst2 (m32 #2)
   7460 (binary-arith32-s-imm-dst QI .b 0 and #x1 #x6 and-sem)
   7461 (binary-arith32-s-imm-dst HI .w 1 and #x1 #x6 and-sem)
   7462 
   7463 ;-------------------------------------------------------------
   7464 ; band - bit and
   7465 ;-------------------------------------------------------------
   7466 
   7467 (define-pmacro (band-sem src)
   7468   (set cbit (and src cbit))
   7469 )
   7470 (bitsrc-insn band (f-0-4 7) (f-4-4 #xE) (f-8-4 4) #xD #x0 #x1 band-sem)
   7471 
   7472 ;-------------------------------------------------------------
   7473 ; bclr - bit clear
   7474 ;-------------------------------------------------------------
   7475 
   7476 (define-pmacro (bclr-sem dst)
   7477   (set dst 0)
   7478 )
   7479 (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)
   7480 
   7481 ;-------------------------------------------------------------
   7482 ; bitindex - bit index
   7483 ;-------------------------------------------------------------
   7484 
   7485 (define-pmacro (bitindex-sem mode dst)
   7486   (set BitIndex dst)
   7487 )
   7488 (unary-insn-defn 32 16-Unprefixed QI .b bitindex
   7489 		     (+ (f-0-4 #xC) (f-7-1 0) dst32-16-Unprefixed-QI (f-10-2 #x2) (f-12-4 #xE))
   7490 		     bitindex-sem)
   7491 (unary-insn-defn 32 16-Unprefixed HI .w bitindex
   7492 		     (+ (f-0-4 #xC) (f-7-1 1) dst32-16-Unprefixed-HI (f-10-2 #x2) (f-12-4 #xE))
   7493 		     bitindex-sem)
   7494 
   7495 ;-------------------------------------------------------------
   7496 ; bmCnd - bit move condition
   7497 ;-------------------------------------------------------------
   7498 
   7499 (define-pmacro (test-condition16 cond)
   7500   (case UQI cond
   7501 	((#x00) (trunc BI cbit))
   7502 	((#x01) (not (or cbit zbit)))
   7503 	((#x02) (trunc BI zbit))
   7504 	((#x03) (trunc BI sbit))
   7505 	((#x04) (or zbit (xor sbit obit)))
   7506 	((#x05) (trunc BI obit))
   7507 	((#x06) (xor sbit obit))
   7508 	((#xf8) (not cbit))
   7509 	((#xf9) (or cbit zbit))
   7510 	((#xfa) (not zbit))
   7511 	((#xfb) (not sbit))
   7512 	((#xfc) (not (or zbit (xor sbit obit))))
   7513 	((#xfd) (not obit))
   7514 	((#xfe) (not (xor sbit obit)))
   7515 	(else   (const BI 0))
   7516   )
   7517 )
   7518 
   7519 (define-pmacro (test-condition32 cond)
   7520   (case UQI cond
   7521 	((#x00) (not cbit))
   7522 	((#x01) (or cbit zbit))
   7523 	((#x02) (not zbit))
   7524 	((#x03) (not sbit))
   7525 	((#x04) (not obit))
   7526 	((#x05) (not (or zbit (xor sbit obit))))
   7527 	((#x06) (not (xor sbit obit)))
   7528 	((#x08) (trunc BI cbit))
   7529 	((#x09) (not (or cbit zbit)))
   7530 	((#x0a) (trunc BI zbit))
   7531 	((#x0b) (trunc BI sbit))
   7532 	((#x0c) (trunc BI obit))
   7533 	((#x0d) (or zbit (xor sbit obit)))
   7534 	((#x0e) (xor sbit obit))
   7535 	(else   (const BI 0))
   7536   )
   7537 )
   7538 
   7539 (define-pmacro (bitcond-sem mach op cond)
   7540   (if ((.sym test-condition mach) cond)
   7541       (set op 1)
   7542       (set op 0))
   7543 )
   7544 (bitcond-insn bm (f-0-4 7) (f-4-4 #xE) (f-8-4 2) #xD #x0 #x2 bitcond-sem)
   7545 
   7546 (dni bm16-c
   7547      "bm16 C"
   7548      ((machine 16))
   7549      "bm$cond16c c"
   7550      (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xD) cond16c)
   7551      (bitcond-sem 16 cbit cond16c)
   7552      ())
   7553 
   7554 (dni bm32-c
   7555      "bm32 C"
   7556      ((machine 32))
   7557      "bm$cond32 c"
   7558      (+ (f-0-4 #xD) (f-4-4 #x9) (f-8-1 0) (f-10-3 5) cond32)
   7559      (bitcond-sem 32 cbit cond32)
   7560      ())
   7561 
   7562 ;-------------------------------------------------------------
   7563 ; bnand
   7564 ;-------------------------------------------------------------
   7565 
   7566 (define-pmacro (bnand-sem src)
   7567   (set cbit (and (inv src) cbit))
   7568 )
   7569 (bitsrc-insn bnand (f-0-4 7) (f-4-4 #xE) (f-8-4 5) #xD #x0 #x3 bnand-sem)
   7570 
   7571 ;-------------------------------------------------------------
   7572 ; bnor
   7573 ;-------------------------------------------------------------
   7574 
   7575 (define-pmacro (bnor-sem src)
   7576   (set cbit (or (inv src) cbit))
   7577 )
   7578 (bitsrc-insn bnor (f-0-4 7) (f-4-4 #xE) (f-8-4 7) #xD #x0 #x6 bnor-sem)
   7579 
   7580 ;-------------------------------------------------------------
   7581 ; bnot
   7582 ;-------------------------------------------------------------
   7583 
   7584 (define-pmacro (bnot-sem dst)
   7585   (set dst (inv dst))
   7586 )
   7587 (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)
   7588 
   7589 ;-------------------------------------------------------------
   7590 ; bntst
   7591 ;-------------------------------------------------------------
   7592 
   7593 (define-pmacro (bntst-sem src)
   7594   (set cbit (inv src))
   7595   (set zbit (inv src))
   7596 )
   7597 (bitsrc-insn bntst (f-0-4 7) (f-4-4 #xE) (f-8-4 3) #xD #x0 #x0 bntst-sem)
   7598 
   7599 ;-------------------------------------------------------------
   7600 ; bnxor
   7601 ;-------------------------------------------------------------
   7602 
   7603 (define-pmacro (bnxor-sem src)
   7604   (set cbit (xor (inv src) cbit))
   7605 )
   7606 (bitsrc-insn bnxor (f-0-4 7) (f-4-4 #xE) (f-8-4 #xD) #xD #x0 #x7 bnxor-sem)
   7607 
   7608 ;-------------------------------------------------------------
   7609 ; bor
   7610 ;-------------------------------------------------------------
   7611 
   7612 (define-pmacro (bor-sem src)
   7613   (set cbit (or src cbit))
   7614 )
   7615 (bitsrc-insn bor (f-0-4 7) (f-4-4 #xE) (f-8-4 #x6) #xD #x0 #x4 bor-sem)
   7616 
   7617 ;-------------------------------------------------------------
   7618 ; brk
   7619 ;-------------------------------------------------------------
   7620 
   7621 (dni brk16
   7622      "brk"
   7623      ((machine 16))
   7624      "brk"
   7625      (+ (f-0-4 #x0) (f-4-4 #x0))
   7626      (nop)
   7627      ())
   7628 
   7629 (dni brk32
   7630      "brk"
   7631      ((machine 32))
   7632      "brk"
   7633      (+ (f-0-4 #x0) (f-4-4 #x0))
   7634      (nop)
   7635      ())
   7636 
   7637 ;-------------------------------------------------------------
   7638 ; brk2
   7639 ;-------------------------------------------------------------
   7640 
   7641 (dni brk232
   7642      "brk2"
   7643      ((machine 32))
   7644      "brk2"
   7645      (+ (f-0-4 #x0) (f-4-4 #x8))
   7646      (nop)
   7647      ())
   7648 
   7649 ;-------------------------------------------------------------
   7650 ; bset
   7651 ;-------------------------------------------------------------
   7652 
   7653 (define-pmacro (bset-sem dst)
   7654   (set dst 1)
   7655 )
   7656 (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)
   7657 
   7658 ;-------------------------------------------------------------
   7659 ; btst
   7660 ;-------------------------------------------------------------
   7661 
   7662 (define-pmacro (btst-sem dst)
   7663   (set zbit (inv dst))
   7664   (set cbit dst)
   7665 )
   7666 (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)
   7667 
   7668 (bit-insn-defn 32 btst G bit32-16-Unprefixed
   7669 	       (+ (f-0-4 #xD) bit32-16-Unprefixed (f-7-1 #x0) (f-10-3 #x0))
   7670 	       btst-sem)
   7671 
   7672 (dni btst.s "btst:s" ((machine 32))
   7673      "btst:s ${Bit3-S},${Dsp-8-u16}"
   7674      (+ (f-0-2 #x0) (f-4-3 #x5) Bit3-S Dsp-8-u16)
   7675      () ())
   7676 
   7677 ;-------------------------------------------------------------
   7678 ; btstc
   7679 ;-------------------------------------------------------------
   7680 
   7681 (define-pmacro (btstc-sem dst)
   7682   (set zbit (inv dst))
   7683   (set cbit dst)
   7684   (set dst (const 0))
   7685 )
   7686 (bitdstnos-insn btstc (f-0-4 7) (f-4-4 #xE) (f-8-4 #x0) #xD #x0 #x4 btstc-sem)
   7687 
   7688 ;-------------------------------------------------------------
   7689 ; btsts
   7690 ;-------------------------------------------------------------
   7691 
   7692 (define-pmacro (btsts-sem dst)
   7693   (set zbit (inv dst))
   7694   (set cbit dst)
   7695   (set dst (const 0))
   7696 )
   7697 (bitdstnos-insn btsts (f-0-4 7) (f-4-4 #xE) (f-8-4 #x1) #xD #x0 #x5 btsts-sem)
   7698 
   7699 ;-------------------------------------------------------------
   7700 ; bxor
   7701 ;-------------------------------------------------------------
   7702 
   7703 (define-pmacro (bxor-sem src)
   7704   (set cbit (xor src cbit))
   7705 )
   7706 (bitsrc-insn bxor (f-0-4 7) (f-4-4 #xE) (f-8-4 #xC) #xD #x0 #x5 bxor-sem)
   7707 
   7708 ;-------------------------------------------------------------
   7709 ; clip
   7710 ;-------------------------------------------------------------
   7711 
   7712 (define-pmacro (clip-sem mode imm1 imm2 dest)
   7713   (sequence ()
   7714 	    (if (gt mode imm1 dest)
   7715 		(set dest imm1))
   7716 	    (if (lt mode imm2 dest)
   7717 		(set dest imm2)))
   7718 )
   7719 
   7720 (insn-imm1-imm2-dst-Prefixed clip #x8 #x3 #xE clip-sem)
   7721 
   7722 ;-------------------------------------------------------------
   7723 ; cmp - binary compare
   7724 ;-------------------------------------------------------------
   7725 
   7726 (define-pmacro (cmp-sem mode src1 dst)
   7727   (sequence ((mode result))
   7728 	    (set result (sub mode dst src1))
   7729 	    (set obit (sub-oflag mode dst src1 0))
   7730 	    (set cbit (not (sub-cflag mode dst src1 0)))
   7731 	    (set-z-and-s result))
   7732 )
   7733 
   7734 ; cmp.L:G #imm32,dst (m32 #2)
   7735 (binary-arith32-imm-dst-defn SI SI .l 0 cmp G #xA #x3 #x1 cmp-sem)
   7736 ; cmp.size:G #imm,dst (m16 #1 m32 #1)
   7737 (binary-arith-imm-dst cmp G (f-0-4 7) (f-4-3 3) (f-8-4 8) #x9 #x2 #xE cmp-sem)
   7738 ; cmp.size:Q #imm4,dst (m16 #2 m32 #3)
   7739 (binary-arith-imm4-dst cmp (f-0-4 #xD) (f-4-3 0) #x7 #x1 cmp-sem)
   7740 ; cmp.b:S #imm8,dst3 (m16 #3)
   7741 (binary-arith16-b-S-imm8-dst3 cmp ".b" (f-0-4 #xE) (f-4-1 0) cmp-sem)
   7742 ; cmp.BW:G src,dst (m16 #4 m32 #5)
   7743 (binary-arith-src-dst cmp G (f-0-4 #xC) (f-4-3 0) #x1 #x6 cmp-sem)
   7744 ; cmp.B.S src2,r0l/r0h (m16 #5)
   7745 (binary-arith16-b-S-src2 cmp (f-0-4 3) (f-4-1 1) cmp-sem)
   7746 ; cmp.L:G src,dst (m32 #6)
   7747 (binary-arith32-src-dst-defn SI SI .l 1 cmp G #x1 #x1 cmp-sem)
   7748 ; cmp.BW:S #imm,dst2 (m32 #4)
   7749 (binary-arith32-s-imm-dst QI .b 0 cmp #x1 #x3 cmp-sem)
   7750 (binary-arith32-s-imm-dst HI .w 1 cmp #x1 #x3 cmp-sem)
   7751 ; cmp.BW:s src2,r0[l] (m32 #7)
   7752 (binary-arith32-S-src2 cmp QI .b 0 (f-0-2 1) (f-4-3 0) cmp-sem)
   7753 (binary-arith32-S-src2 cmp HI .w 1 (f-0-2 1) (f-4-3 0) cmp-sem)
   7754 
   7755 ;-------------------------------------------------------------
   7756 ; cmpx - binary compare extend sign
   7757 ;-------------------------------------------------------------
   7758 
   7759 (define-pmacro (cmpx-sem mode src1 dst)
   7760   (sequence ((mode result))
   7761 	    (set result (sub mode dst (ext mode src1)))
   7762 	    (set obit (sub-oflag mode dst (ext mode src1) 0))
   7763 	    (set cbit (sub-cflag mode dst (ext mode src1) 0))
   7764 	    (set-z-and-s result))
   7765 )
   7766 
   7767 (binary-arith32-imm-dst-defn QI SI "" 0 cmpx X #xA #x1 #x1 cmpx-sem)
   7768 
   7769 ;-------------------------------------------------------------
   7770 ; dec - decrement
   7771 ;-------------------------------------------------------------
   7772 
   7773 (define-pmacro (dec-sem mode dest)
   7774   (sequence ((mode result))
   7775 	    (set result (sub mode dest 1))
   7776 	    (set-z-and-s result)
   7777 	    (set dest result))
   7778 )
   7779 
   7780 (dni dec16.b
   7781      "dec.b Dst16-3-S-8"
   7782      ((machine 16))
   7783      "dec.b ${Dst16-3-S-8}"
   7784      (+ (f-0-4 #xA) (f-4-1 #x1) Dst16-3-S-8)
   7785      (dec-sem QI Dst16-3-S-8)
   7786      ())
   7787 
   7788 (dni dec16.w
   7789      "dec.w Dst16An-S"
   7790      ((machine 16))
   7791      "dec.w ${Dst16An-S}"
   7792      (+ (f-0-4 #xF) (f-5-3 #x2) Dst16An-S)
   7793      (dec-sem HI Dst16An-S)
   7794      ())
   7795 
   7796 (unary32-defn QI .b 0 dec #xB #x0 #xE dec-sem)
   7797 (unary32-defn HI .w 1 dec #xB #x0 #xE dec-sem)
   7798 
   7799 ;-------------------------------------------------------------
   7800 ; div - divide
   7801 ; divu - divide unsigned
   7802 ; divx - divide extension
   7803 ;-------------------------------------------------------------
   7804 
   7805 ; div.BW #imm
   7806 (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)
   7807 (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)
   7808 (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)
   7809 ; div.BW src
   7810 (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)
   7811 (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)
   7812 (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)
   7813 
   7814 (div-src-defn 32 .l div dst32-24-Prefixed-SI
   7815 	      (+ (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)
   7816 	      div mod SI R2R0 R2R0 NoRemainder #x7fffffff (neg SI #x80000000)
   7817 	      div-sem)
   7818 (div-src-defn 32 .l divu dst32-24-Prefixed-SI
   7819 	      (+ (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)
   7820 	      udiv umod USI R2R0 R2R0 NoRemainder #x80000000 0
   7821 	      div-sem)
   7822 (div-src-defn 32 .l divx dst32-24-Prefixed-SI
   7823 	      (+ (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)
   7824 	      div mod SI R2R0 R2R0 NoRemainder #x7fffffff (neg SI #x80000000)
   7825 	      div-sem)
   7826 
   7827 ;-------------------------------------------------------------
   7828 ; dsbb - decimal subtraction with borrow
   7829 ; dsub - decimal subtraction
   7830 ;-------------------------------------------------------------
   7831 
   7832 (define-pmacro (dsbb-sem mode src dst)
   7833   (sequence ((mode result))
   7834 	    (set result (subc mode dst src (not cbit)))
   7835 	    (set cbit (sub-cflag mode dst src (not cbit)))
   7836 	    (set-z-and-s result)
   7837 	    (set dst result))
   7838 )
   7839 
   7840 ; dsbb for m16c
   7841 (decimal-subtraction16-insn dsbb #xF #x7)
   7842 
   7843 ; dsbb.size #imm,dst
   7844 (binary-arith32-imm-dst-Prefixed QI QI .b 0 dsbb X #x9 #x0 #xE dsbb-sem)
   7845 (binary-arith32-imm-dst-Prefixed HI HI .w 1 dsbb X #x9 #x0 #xE dsbb-sem)
   7846 ; dsbb.BW src,dst
   7847 (binary-arith32-src-dst-Prefixed QI QI .b 0 dsbb X #x1 #xA dsbb-sem)
   7848 (binary-arith32-src-dst-Prefixed HI HI .w 1 dsbb X #x1 #xA dsbb-sem)
   7849 
   7850 (define-pmacro (dsub-sem mode src dst)
   7851   (sequence ((mode result))
   7852 	    (set result (subc mode dst src 0))
   7853 	    (set cbit (sub-cflag mode dst src 0))
   7854 	    (set-z-and-s result)
   7855 	    (set dst result))
   7856 )
   7857 
   7858 ; dsub for m16c
   7859 (decimal-subtraction16-insn dsub #xD #x5)
   7860 
   7861 ; dsub.size #imm,dst
   7862 (binary-arith32-imm-dst-Prefixed QI QI .b 0 dsub X #x9 #x1 #xE dsub-sem)
   7863 (binary-arith32-imm-dst-Prefixed HI HI .w 1 dsub X #x9 #x1 #xE dsub-sem)
   7864 ; dsub.BW src,dst
   7865 (binary-arith32-src-dst-Prefixed QI QI .b 0 dsub X #x1 #x2 dsub-sem)
   7866 (binary-arith32-src-dst-Prefixed HI HI .w 1 dsub X #x1 #x2 dsub-sem)
   7867 
   7868 ;-------------------------------------------------------------
   7869 ; sub - binary subtraction
   7870 ;-------------------------------------------------------------
   7871 
   7872 (define-pmacro (sub-sem mode src1 dst)
   7873   (sequence ((mode result))
   7874 	    (set result (sub mode dst src1))
   7875 	    (set obit (sub-oflag mode dst src1 0))
   7876 	    (set cbit (sub-cflag mode dst src1 0))
   7877 	    (set dst result)
   7878 	    (set-z-and-s result)))
   7879 
   7880 ; sub.size:G #imm,dst (m16 #1 m32 #1)
   7881 (binary-arith-imm-dst sub G (f-0-4 7) (f-4-3 3) (f-8-4 5) #x8 #x3 #xE sub-sem)
   7882 ; sub.b:S #imm8,dst3 (m16 #2)
   7883 (binary-arith16-b-S-imm8-dst3 sub ".b" (f-0-4 8) (f-4-1 1) sub-sem)
   7884 ; sub.BW:G src,dst (m16 #3 m32 #4)
   7885 (binary-arith-src-dst sub G (f-0-4 #xA) (f-4-3 4) #x1 #xA sub-sem)
   7886 ; sub.B.S src2,r0l/r0h (m16 #4)
   7887 (binary-arith16-b-S-src2 sub (f-0-4 2) (f-4-1 1) sub-sem)
   7888 ; sub.L:G #imm32,dst (m32 #2)
   7889 (binary-arith32-imm-dst-defn SI SI .l 0 sub G #x9 #x3 #x1 sub-sem)
   7890 ; sub.BW:S #imm,dst2 (m32 #3)
   7891 (binary-arith32-s-imm-dst QI .b 0 sub #x0 #x7 sub-sem)
   7892 (binary-arith32-s-imm-dst HI .w 1 sub #x0 #x7 sub-sem)
   7893 ; sub.L:G src,dst (m32 #5)
   7894 (binary-arith32-src-dst-defn SI SI .l 1 sub G #x1 #x0 sub-sem)
   7895 
   7896 ;-------------------------------------------------------------
   7897 ; enter - enter function
   7898 ; exitd - exit and deallocate stack frame
   7899 ;-------------------------------------------------------------
   7900 
   7901 (define-pmacro (enter16-sem mach amt)
   7902      (sequence ()
   7903                (set (reg h-sp) (sub (reg h-sp) 2))
   7904                (set (mem16 HI (reg h-sp)) (reg h-fb))
   7905                (set (reg h-fb) (reg h-sp))
   7906                (set (reg h-sp) (sub (reg h-sp) amt))))
   7907 
   7908 (define-pmacro (exit16-sem mach)
   7909      (sequence ((SI newpc))
   7910                (set (reg h-sp) (reg h-fb))
   7911                (set (reg h-fb) (mem16 HI (reg h-sp)))
   7912                (set (reg h-sp) (add (reg h-sp) 2))
   7913                (set newpc (mem16 HI (reg h-sp)))
   7914                (set (reg h-sp) (add (reg h-sp) 2))
   7915                (set newpc (or newpc (sll (mem16 QI (reg h-sp)) (const 16))))
   7916                (set (reg h-sp) (add (reg h-sp) 1))
   7917 	       (set pc newpc)))
   7918 
   7919 (define-pmacro (enter32-sem mach amt)
   7920      (sequence ()
   7921                (set (reg h-sp) (sub (reg h-sp) 4))
   7922                (set (mem32 SI (reg h-sp)) (reg h-fb))
   7923                (set (reg h-fb) (reg h-sp))
   7924                (set (reg h-sp) (sub (reg h-sp) amt))))
   7925 
   7926 (define-pmacro (exit32-sem mach)
   7927      (sequence ((SI newpc))
   7928                (set (reg h-sp) (reg h-fb))
   7929                (set (reg h-fb) (mem32 SI (reg h-sp)))
   7930                (set (reg h-sp) (add (reg h-sp) 4))
   7931                (set newpc (mem32 SI (reg h-sp)))
   7932                (set (reg h-sp) (add (reg h-sp) 4))
   7933 	       (set pc newpc)))
   7934 
   7935 (dni enter16 "enter #Imm-16-QI" ((machine 16))
   7936      ("enter #${Dsp-16-u8}")
   7937      (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xF) (f-12-4 2) Dsp-16-u8)
   7938      (enter16-sem 16 Dsp-16-u8)
   7939      ())
   7940 
   7941 (dni exitd16 "exitd" ((machine 16))
   7942      ("exitd")
   7943      (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xF) (f-12-4 2))
   7944      (exit16-sem 16)
   7945      ())
   7946 
   7947 (dni enter32 "enter #Imm-8-QI" ((machine 32))
   7948      ("enter #${Dsp-8-u8}")
   7949      (+ (f-0-4 #xE) (f-4-4 #xC) Dsp-8-u8)
   7950      (enter32-sem 32 Dsp-8-u8)
   7951      ())
   7952 
   7953 (dni exitd32 "exitd" ((machine 32))
   7954      ("exitd")
   7955      (+ (f-0-4 #xF) (f-4-4 #xC))
   7956      (exit32-sem 32)
   7957      ())
   7958 
   7959 ;-------------------------------------------------------------
   7960 ; fclr - flag register clear
   7961 ; fset - flag register set
   7962 ;-------------------------------------------------------------
   7963 
   7964 (define-pmacro (set-flags-sem flag)
   7965   (sequence ((SI tmp))
   7966 	    (case DFLT flag
   7967 		  ((#x0) (set cbit 1))
   7968 		  ((#x1) (set dbit 1))
   7969 		  ((#x2) (set zbit 1))
   7970 		  ((#x3) (set sbit 1))
   7971 		  ((#x4) (set bbit 1))
   7972 		  ((#x5) (set obit 1))
   7973 		  ((#x6) (set ibit 1))
   7974 		  ((#x7) (set ubit 1)))
   7975 	    )
   7976   )
   7977 
   7978 (define-pmacro (clear-flags-sem flag)
   7979   (sequence ((SI tmp))
   7980 	    (case DFLT flag
   7981 		  ((#x0) (set cbit 0))
   7982 		  ((#x1) (set dbit 0))
   7983 		  ((#x2) (set zbit 0))
   7984 		  ((#x3) (set sbit 0))
   7985 		  ((#x4) (set bbit 0))
   7986 		  ((#x5) (set obit 0))
   7987 		  ((#x6) (set ibit 0))
   7988 		  ((#x7) (set ubit 0)))
   7989 	    )
   7990   )
   7991 
   7992 (dni fclr16 "fclr flag" ((machine 16))
   7993      ("fclr ${flags16}")
   7994      (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-1 0) flags16 (f-12-4 5))
   7995      (clear-flags-sem flags16)
   7996      ())
   7997 
   7998 (dni fset16 "fset flag" ((machine 16))
   7999      ("fset ${flags16}")
   8000      (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-1 0) flags16 (f-12-4 4))
   8001      (set-flags-sem flags16)
   8002      ())
   8003 
   8004 (dni fclr "fclr" ((machine 32))
   8005      ("fclr ${flags32}")
   8006      (+ (f-0-4 #xD) (f-4-4 3) (f-8-4 #xE) (f-12-1 1) flags32)
   8007      (clear-flags-sem flags32)
   8008      ())
   8009 
   8010 (dni fset "fset" ((machine 32))
   8011      ("fset ${flags32}")
   8012      (+ (f-0-4 #xD) (f-4-4 1) (f-8-4 #xE) (f-12-1 1) flags32)
   8013      (set-flags-sem flags32)
   8014      ())
   8015 
   8016 ;-------------------------------------------------------------
   8017 ; inc - increment
   8018 ;-------------------------------------------------------------
   8019 
   8020 (define-pmacro (inc-sem mode dest)
   8021   (sequence ((mode result))
   8022 	    (set result (add mode dest 1))
   8023 	    (set-z-and-s result)
   8024 	    (set dest result))
   8025 )
   8026 
   8027 (dni inc16.b
   8028      "inc.b Dst16-3-S-8"
   8029      ((machine 16))
   8030      "inc.b ${Dst16-3-S-8}"
   8031      (+ (f-0-4 #xA) (f-4-1 #x0) Dst16-3-S-8)
   8032      (inc-sem QI Dst16-3-S-8)
   8033      ())
   8034 
   8035 (dni inc16.w
   8036      "inc.w Dst16An-S"
   8037      ((machine 16))
   8038      "inc.w ${Dst16An-S}"
   8039      (+ (f-0-4 #xB) (f-5-3 #x2) Dst16An-S)
   8040      (inc-sem HI Dst16An-S)
   8041      ())
   8042 
   8043 (unary32-defn QI .b 0 inc #xA #x0 #xE inc-sem)
   8044 (unary32-defn HI .w 1 inc #xA #x0 #xE inc-sem)
   8045 
   8046 ;-------------------------------------------------------------
   8047 ; freit - fast return from interrupt (m32)
   8048 ; int - interrupt
   8049 ; into - interrupt on overflow
   8050 ;-------------------------------------------------------------
   8051 
   8052 ; ??? semantics
   8053 (dni freit32 "FREIT" ((machine 32))
   8054      ("freit")
   8055      (+ (f-0-4 9) (f-4-4 #xF))
   8056      (nop)
   8057      ())
   8058 
   8059 (dni int16 "int Dsp-10-u6" ((machine 16))
   8060      ("int #${Dsp-10-u6}")
   8061      (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-2 3) Dsp-10-u6)
   8062      (c-call VOID "do_int" pc Dsp-10-u6)
   8063      ())
   8064 
   8065 (dni into16 "into" ((machine 16))
   8066      ("into")
   8067      (+ (f-0-4 #xF) (f-4-4 6))
   8068      (nop)
   8069      ())
   8070 
   8071 (dni int32 "int Dsp-8-u6" ((machine 32))
   8072      ("int #${Dsp-8-u6}")
   8073      (+ (f-0-4 #xB) (f-4-4 #xE) Dsp-8-u6 (f-14-2 0))
   8074      (c-call VOID "do_int" pc Dsp-8-u6)
   8075      ())
   8076 
   8077 (dni into32 "into" ((machine 32))
   8078      ("into")
   8079      (+ (f-0-4 #xB) (f-4-4 #xF))
   8080      (nop)
   8081      ())
   8082 
   8083 ;-------------------------------------------------------------
   8084 ; index (m32c)
   8085 ;-------------------------------------------------------------
   8086 
   8087 ; TODO add support to insns allowing index
   8088 (define-pmacro (indexb-sem mode d) (set SrcIndex d) (set DstIndex d))
   8089 (define-pmacro (indexbd-sem mode d) (set SrcIndex (const 0)) (set DstIndex d))
   8090 (define-pmacro (indexbs-sem mode d) (set SrcIndex d) (set DstIndex (const 0)))
   8091 (define-pmacro (indexw-sem mode d)
   8092   (set SrcIndex (sll d (const 2))) (set DstIndex (sll d (const 2))))
   8093 (define-pmacro (indexwd-sem mode d)
   8094   (set SrcIndex (const 0)) (set DstIndex (sll d (const 2))))
   8095 (define-pmacro (indexws-sem mode d)
   8096   (set SrcIndex (sll d (const 2))) (set DstIndex (const 0)))
   8097 (define-pmacro (indexl-sem mode d)
   8098   (set SrcIndex d) (set DstIndex (sll d (const 2))))
   8099 (define-pmacro (indexld-sem mode d)
   8100   (set SrcIndex (const 0)) (set DstIndex (sll d (const 2))))
   8101 (define-pmacro (indexls-sem mode d)
   8102   (set SrcIndex (sll d (const 2))) (set DstIndex (const 0)))
   8103 
   8104 ; Note that "wbit" not where the size bit goes here, hence, it's
   8105 ; always 0 in these calls but op2 differs instead.
   8106 
   8107 ; indexb src (index byte)
   8108 (unary32-defn QI .b 0 indexb #x8 0 #x3 indexb-sem)
   8109 (unary32-defn HI .w 0 indexb #x8 1 #x3 indexb-sem)
   8110 ; indexbd src (index byte dest)
   8111 (unary32-defn QI .b 0 indexbd #xA 0 3 indexbd-sem)
   8112 (unary32-defn HI .w 0 indexbd #xA 1 3 indexbd-sem)
   8113 ; indexbs src (index byte src)
   8114 (unary32-defn QI .b 0 indexbs #xC 0 3 indexbs-sem)
   8115 (unary32-defn HI .w 0 indexbs #xC 1 3 indexbs-sem)
   8116 ; indexl src (index long)
   8117 (unary32-defn QI .b 0 indexl 9 2 3 indexl-sem)
   8118 (unary32-defn HI .w 0 indexl 9 3 3 indexl-sem)
   8119 ; indexld src (index long dest)
   8120 (unary32-defn QI .b 0 indexld #xB 2 3 indexld-sem)
   8121 (unary32-defn HI .w 0 indexld #xB 3 3 indexld-sem)
   8122 ; indexls src (index long src)
   8123 (unary32-defn QI .b 0 indexls 9 0 3 indexls-sem)
   8124 (unary32-defn HI .w 0 indexls 9 1 3 indexls-sem)
   8125 ; indexw src (index word)
   8126 (unary32-defn QI .b 0 indexw 8 2 3 indexw-sem)
   8127 (unary32-defn HI .w 0 indexw 8 3 3 indexw-sem)
   8128 ; indexwd src (index word dest)
   8129 (unary32-defn QI .b 0 indexwd #xA 2 3 indexwd-sem)
   8130 (unary32-defn HI .w 0 indexwd #xA 3 3 indexwd-sem)
   8131 ; indexws (index word src)
   8132 (unary32-defn QI .b 0 indexws #xC 2 3 indexws-sem)
   8133 (unary32-defn HI .w 0 indexws #xC 3 3 indexws-sem)
   8134 
   8135 ;-------------------------------------------------------------
   8136 ; jcc - jump on condition
   8137 ;-------------------------------------------------------------
   8138 
   8139 (define-pmacro (jcnd32-sem cnd label)
   8140   (sequence ()
   8141 	    (case DFLT cnd
   8142 		  ((#x00) (if (not cbit) (set pc label))) ;ltu nc
   8143 		  ((#x01) (if (not (and cbit (not zbit))) (set pc label))) ;leu
   8144 		  ((#x02) (if (not zbit) (set pc label))) ;ne nz
   8145 		  ((#x03) (if (not sbit) (set pc label))) ;pz
   8146 		  ((#x04) (if (not obit) (set pc label))) ;no
   8147 		  ((#x05) (if (not (or zbit (xor sbit obit))) (set pc label))) ;gt
   8148 		  ((#x06) (if (not (xor sbit obit)) (set pc label))) ;ge
   8149 		  ((#x08) (if (trunc BI cbit) (set pc label))) ;geu c
   8150 		  ((#x09) (if (and cbit (not zbit)) (set pc label))) ;gtu
   8151 		  ((#x0a) (if (trunc BI zbit) (set pc label))) ;eq z
   8152 		  ((#x0b) (if (trunc BI sbit) (set pc label))) ;n
   8153 		  ((#x0c) (if (trunc BI obit) (set pc label))) ;o
   8154 		  ((#x0d) (if (or zbit (xor sbit obit)) (set pc label))) ;le
   8155 		  ((#x0e) (if (xor sbit obit) (set pc label))) ;lt
   8156 		  )
   8157 	)
   8158   )
   8159 
   8160 (define-pmacro (jcnd16-sem cnd label)
   8161   (sequence ()
   8162 	    (case DFLT cnd
   8163 		  ((#x00) (if (trunc BI cbit) (set pc label))) ;geu c
   8164 		  ((#x01) (if (and cbit (not zbit)) (set pc label))) ;gtu
   8165 		  ((#x02) (if (trunc BI zbit) (set pc label))) ;eq z
   8166 		  ((#x03) (if (trunc BI sbit) (set pc label))) ;n
   8167 		  ((#x04) (if (not cbit) (set pc label))) ;ltu nc
   8168 		  ((#x05) (if (not (and cbit (not zbit))) (set pc label))) ;leu
   8169 		  ((#x06) (if (not zbit) (set pc label))) ;ne nz
   8170 		  ((#x07) (if (not sbit) (set pc label))) ;pz
   8171 		  ((#x08) (if (or zbit (xor sbit obit)) (set pc label))) ;le
   8172 		  ((#x09) (if (trunc BI obit) (set pc label))) ;o
   8173 		  ((#x0a) (if (not (xor sbit obit)) (set pc label))) ;ge
   8174 		  ((#x0c) (if (not (or zbit (xor sbit obit))) (set pc label))) ;gt
   8175 		  ((#x0d) (if (not obit) (set pc label))) ;no
   8176 		  ((#x0e) (if (xor sbit obit) (set pc label))) ;lt
   8177 		  )
   8178 	)
   8179   )
   8180 
   8181 (dni jcnd16-5
   8182      "jCnd label"
   8183      (RL_JUMP RELAXABLE (machine 16))
   8184      "j$cond16j5 ${Lab-8-8}"
   8185      (+ (f-0-4 #x6) (f-4-1 1) cond16j5 Lab-8-8)
   8186      (jcnd16-sem cond16j5 Lab-8-8)
   8187      ()
   8188 )
   8189 
   8190 (dni jcnd16
   8191      "jCnd label"
   8192      (RL_JUMP RELAXABLE (machine 16))
   8193      "j$cond16j ${Lab-16-8}"
   8194      (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xC) cond16j Lab-16-8)
   8195      (jcnd16-sem cond16j Lab-16-8)
   8196      ()
   8197 )
   8198 
   8199 (dni jcnd32
   8200      "jCnd label"
   8201      (RL_JUMP RELAXABLE (machine 32))
   8202      "j$cond32j ${Lab-8-8}"
   8203      (+ (f-0-1 1) (f-4-3 5) cond32j Lab-8-8)
   8204      (jcnd32-sem cond32j Lab-8-8)
   8205      ()
   8206 )
   8207 
   8208 ;-------------------------------------------------------------
   8209 ; jmp - jump
   8210 ;-------------------------------------------------------------
   8211 
   8212 ; jmp.s label3 (m16 #1)
   8213 (dni jmp16.s "jmp.s Lab-5-3" (RL_JUMP RELAXABLE (machine 16))
   8214      ("jmp.s ${Lab-5-3}")
   8215      (+ (f-0-4 6) (f-4-1 0) Lab-5-3)
   8216      (sequence () (set pc Lab-5-3))
   8217      ())
   8218 ; jmp.b label8 (m16 #2)
   8219 (dni jmp16.b "jmp.b Lab-8-8" (RL_JUMP RELAXABLE (machine 16))
   8220      ("jmp.b ${Lab-8-8}")
   8221      (+ (f-0-4 #xF) (f-4-4 #xE) Lab-8-8)
   8222      (sequence () (set pc Lab-8-8))
   8223      ())
   8224 ; jmp.w label16 (m16 #3)
   8225 (dni jmp16.w "jmp.w Lab-8-16" (RL_JUMP RELAXABLE (machine 16))
   8226      ("jmp.w ${Lab-8-16}")
   8227      (+ (f-0-4 #xF) (f-4-4 4) Lab-8-16)
   8228      (sequence () (set pc Lab-8-16))
   8229      ())
   8230 ; jmp.a label24 (m16 #4)
   8231 (dni jmp16.a "jmp.a Lab-8-24" (RL_JUMP RELAXABLE (machine 16))
   8232      ("jmp.a ${Lab-8-24}")
   8233      (+ (f-0-4 #xF) (f-4-4 #xC) Lab-8-24)
   8234      (sequence () (set pc Lab-8-24))
   8235      ())
   8236 
   8237 (define-pmacro (jmp16-sem mode dst)
   8238   (set pc (and dst #xfffff))
   8239 )
   8240 (define-pmacro (jmp32-sem mode dst)
   8241   (set pc dst)
   8242 )
   8243 ; jmpi.w dst (m16 #1 m32 #2)
   8244 (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)
   8245 (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)
   8246 ; jmpi.a dst (m16 #2 m32 #2)
   8247 (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)
   8248 (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)
   8249 ; jmps imm8 (m16 #1)
   8250 (dni jmps16 "jmps Imm-8-QI" ((machine 16))
   8251      ("jmps #${Imm-8-QI}")
   8252      (+ (f-0-4 #xE) (f-4-4 #xE) Imm-8-QI)
   8253      (sequence () (set pc Imm-8-QI))
   8254      ())
   8255 ; jmp.s label3 (m32 #1)
   8256 (dni jmp32.s
   8257      "jmp.s label"
   8258      (RL_JUMP RELAXABLE (machine 32))
   8259      "jmp.s ${Lab32-jmp-s}"
   8260      (+ (f-0-2 1) (f-4-3 5) Lab32-jmp-s)
   8261      (set pc Lab32-jmp-s)
   8262      ()
   8263 )
   8264 ; jmp.b label8 (m32 #2)
   8265 (dni jmp32.b "jmp.b Lab-8-8" (RL_JUMP RELAXABLE (machine 32))
   8266      ("jmp.b ${Lab-8-8}")
   8267      (+ (f-0-4 #xB) (f-4-4 #xB) Lab-8-8)
   8268      (set pc Lab-8-8)
   8269      ())
   8270 ; jmp.w label16 (m32 #3)
   8271 (dni jmp32.w "jmp.w Lab-8-16" (RL_JUMP RELAXABLE (machine 32))
   8272      ("jmp.w ${Lab-8-16}")
   8273      (+ (f-0-4 #xC) (f-4-4 #xE) Lab-8-16)
   8274      (set pc Lab-8-16)
   8275      ())
   8276 ; jmp.a label24 (m32 #4)
   8277 (dni jmp32.a "jmp.a Lab-8-24" (RL_JUMP RELAXABLE (machine 32))
   8278      ("jmp.a ${Lab-8-24}")
   8279      (+ (f-0-4 #xC) (f-4-4 #xC) Lab-8-24)
   8280      (set pc Lab-8-24)
   8281      ())
   8282 ; jmp.s imm8 (m32 #1)
   8283 (dni jmps32 "jmps Imm-8-QI" (RL_JUMP (machine 32))
   8284      ("jmps #${Imm-8-QI}")
   8285      (+ (f-0-4 #xD) (f-4-4 #xC) Imm-8-QI)
   8286      (set pc Imm-8-QI)
   8287      ())
   8288 
   8289 ;-------------------------------------------------------------
   8290 ; jsr jump subroutine
   8291 ;-------------------------------------------------------------
   8292 
   8293 (define-pmacro (jsr16-sem length dst)
   8294   (sequence ((SI tpc))
   8295 	    (set tpc (add pc length))
   8296 	    (set (reg h-sp) (sub (reg h-sp) 2))
   8297 	    (set (mem16 HI (reg h-sp)) (srl (and tpc #xffff00) 8))
   8298 	    (set (reg h-sp) (sub (reg h-sp) 1))
   8299 	    (set (mem16 QI (reg h-sp)) (and tpc #xff))
   8300 	    (set pc dst)
   8301 	    )
   8302 )
   8303 (define-pmacro (jsr32-sem length dst)
   8304   (sequence ((SI tpc))
   8305 	    (set tpc (add pc length))
   8306 	    (set (reg h-sp) (sub (reg h-sp) 2))
   8307 	    (set (mem32 HI (reg h-sp)) (srl (and tpc #xffff0000) 16))
   8308 	    (set (reg h-sp) (sub (reg h-sp) 2))
   8309 	    (set (mem32 HI (reg h-sp)) (and tpc #xffff))
   8310 	    (set pc dst)
   8311 	    )
   8312 )
   8313 
   8314 ; jsr.w label16 (m16 #1)
   8315 (dni jsr16.w "jsr.w Lab-8-16" (RL_JUMP RELAXABLE (machine 16))
   8316      ("jsr.w ${Lab-8-16}")
   8317      (+ (f-0-4 #xF) (f-4-4 5) Lab-8-16)
   8318      (jsr16-sem 3 Lab-8-16)
   8319      ())
   8320 ; jsr.a label24 (m16 #2)
   8321 (dni jsr16.a "jsr.a Lab-8-24" (RL_JUMP RELAXABLE (machine 16))
   8322      ("jsr.a ${Lab-8-24}")
   8323      (+ (f-0-4 #xF) (f-4-4 #xD) Lab-8-24)
   8324      (jsr16-sem 4 Lab-8-24)
   8325      ())
   8326 (define-pmacro (jsri-defn mode op16 op16-1 op16-2 op16-3        op16-sem 
   8327 			       op32 op32-1 op32-2 op32-3 op32-4 op32-sem len)
   8328   (begin
   8329     (dni (.sym jsri16 mode - op16)
   8330 	 (.str "jsri." mode " " op16)
   8331 	 (RL_1ADDR (machine 16))
   8332 	 (.str "jsri." mode " ${" op16 "}")
   8333 	 (+ op16-1 op16-2 op16-3 op16)
   8334 	 (op16-sem len op16)
   8335 	 ())
   8336     (dni (.sym jsri32 mode - op32)
   8337 	 (.str "jsri." mode " " op32)
   8338 	 (RL_1ADDR (machine 32))
   8339 	 (.str "jsri." mode " ${" op32 "}")
   8340 	 (+ op32-1 op32-2 op32-3 op32-4 op32)
   8341 	 (op32-sem len op32)
   8342 	 ())
   8343     )
   8344   )
   8345 ; jsri.w dst (m16 #1 m32 #1))
   8346 (jsri-defn w dst16-16-20ar-HI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x3) jsr16-sem 
   8347 	      dst32-16-24-Unprefixed-HI (f-0-4 #xC) (f-7-1 1) (f-10-2 #x1) (f-12-4 #xF) jsr32-sem 4)
   8348 (jsri-defn w dst16-16-16sa-HI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x3) jsr16-sem 
   8349 	      dst32-16-16sa-Unprefixed-HI (f-0-4 #xC) (f-7-1 1) (f-10-2 #x1) (f-12-4 #xF) jsr32-sem 4)
   8350 (jsri-defn w dst16-16-8-HI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x3) jsr16-sem 
   8351 	      dst32-16-8-Unprefixed-HI (f-0-4 #xC) (f-7-1 1) (f-10-2 #x1) (f-12-4 #xF) jsr32-sem 3)
   8352 (jsri-defn w dst16-basic-HI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x3) jsr16-sem 
   8353 	      dst32-basic-Unprefixed-HI (f-0-4 #xC) (f-7-1 1) (f-10-2 #x1) (f-12-4 #xF) jsr32-sem 2)
   8354 
   8355 ; jsri.a (m16 #2 m32 #2)
   8356 (jsri-defn a dst16-16-20ar-SI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x1) jsr16-sem 
   8357 	      dst32-16-24-Unprefixed-SI (f-0-4 #x9) (f-7-1 0) (f-10-2 #x0) (f-12-4 #x1) jsr32-sem 4)
   8358 (jsri-defn a dst16-16-8-SI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x1) jsr16-sem 
   8359 	      dst32-16-8-Unprefixed-SI (f-0-4 #x9) (f-7-1 0) (f-10-2 #x0) (f-12-4 #x1) jsr32-sem 3)
   8360 (jsri-defn a dst16-16-16sa-SI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x1) jsr16-sem 
   8361 	      dst32-16-16sa-Unprefixed-SI (f-0-4 #x9) (f-7-1 0) (f-10-2 #x0) (f-12-4 #x1) jsr32-sem 4)
   8362 (jsri-defn a dst16-basic-SI (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #x1) jsr16-sem 
   8363 	      dst32-basic-Unprefixed-SI (f-0-4 #x9) (f-7-1 0) (f-10-2 #x0) (f-12-4 #x1) jsr32-sem 2)
   8364 
   8365 (dni jsri32.a "jsr.w dst32-16-24-Unprefixed-HI" (RL_1ADDR (machine 32))
   8366      ("jsri.a ${dst32-16-24-Unprefixed-SI}")
   8367      (+ (f-0-4 #x9) (f-7-1 0) dst32-16-24-Unprefixed-SI (f-10-2 #x0) (f-12-4 #x1))
   8368      (jsr32-sem 6 dst32-16-24-Unprefixed-SI)
   8369      ())
   8370 ; jsr.w label16 (m32 #1)
   8371 (dni jsr32.w "jsr.w label" (RL_JUMP RELAXABLE (machine 32))
   8372      ("jsr.w ${Lab-8-16}")
   8373      (+ (f-0-4 #xC) (f-4-4 #xF) Lab-8-16)
   8374      (jsr32-sem 3 Lab-8-16)
   8375      ())
   8376 ; jsr.a label16 (m32 #2)
   8377 (dni jsr32.a "jsr.a label" (RL_JUMP (machine 32))
   8378      ("jsr.a ${Lab-8-24}")
   8379      (+ (f-0-4 #xC) (f-4-4 #xD) Lab-8-24)
   8380      (jsr32-sem 4 Lab-8-24)
   8381      ())
   8382 ; jsrs imm8 (m16 #1)
   8383 (dni jsrs16 "jsrs Imm-8-QI" ((machine 16))
   8384      ("jsrs #${Imm-8-QI}")
   8385      (+ (f-0-4 #xE) (f-4-4 #xF) Imm-8-QI)
   8386      (jsr16-sem 2 Imm-8-QI)
   8387      ())
   8388 ; jsrs imm8 (m32 #1)
   8389 (dni jsrs "jsrs #Imm-8-QI" ((machine 32))
   8390      ("jsrs #${Imm-8-QI}")
   8391      (+ (f-0-4 #xD) (f-4-4 #xD) Imm-8-QI)
   8392      (jsr32-sem 2 Imm-8-QI)
   8393      ())
   8394 
   8395 ;-------------------------------------------------------------
   8396 ; ldc - load control register
   8397 ; stc - store control register
   8398 ;-------------------------------------------------------------
   8399 
   8400 (define-pmacro (ldc32-cr1-sem src dst)
   8401   (sequence ()
   8402 	    (case DFLT dst
   8403 		  ((#x0) (set (reg h-dct0) src))
   8404 		  ((#x1) (set (reg h-dct1) src))
   8405 		  ((#x2) (sequence ((HI tflag))
   8406 				   (set tflag src)
   8407 				   (if (and tflag #x1) (set cbit 1)) 
   8408 				   (if (and tflag #x2) (set dbit 1)) 
   8409 				   (if (and tflag #x4) (set zbit 1)) 
   8410 				   (if (and tflag #x8) (set sbit 1)) 
   8411 				   (if (and tflag #x10) (set bbit 1)) 
   8412 				   (if (and tflag #x20) (set obit 1)) 
   8413 				   (if (and tflag #x40) (set ibit 1)) 
   8414 				   (if (and tflag #x80) (set ubit 1))))
   8415 		  ((#x3) (set (reg h-svf) src))
   8416 		  ((#x4) (set (reg h-drc0) src))
   8417 		  ((#x5) (set (reg h-drc1) src))
   8418 		  ((#x6) (set (reg h-dmd0) src))
   8419 		  ((#x7) (set (reg h-dmd1) src))
   8420 	    )
   8421   )
   8422 )
   8423 (define-pmacro (ldc32-cr2-sem src dst)
   8424   (sequence ()
   8425 	    (case DFLT dst
   8426 		  ((#x0) (set (reg h-intb) src))
   8427 		  ((#x1) (set (reg h-sp) src))
   8428 		  ((#x2) (set (reg h-sb) src))
   8429 		  ((#x3) (set (reg h-fb) src))
   8430 		  ((#x4) (set (reg h-svp) src))
   8431 		  ((#x5) (set (reg h-vct) src))
   8432 		  ((#x7) (set (reg h-isp) src))
   8433 	    )
   8434   )
   8435 )
   8436 (define-pmacro (ldc32-cr3-sem src dst)
   8437   (sequence ()
   8438 	    (case DFLT dst
   8439 		  ((#x2) (set (reg h-dma0) src))
   8440 		  ((#x3) (set (reg h-dma1) src))
   8441 		  ((#x4) (set (reg h-dra0) src))
   8442 		  ((#x5) (set (reg h-dra1) src))
   8443 		  ((#x6) (set (reg h-dsa0) src))
   8444 		  ((#x7) (set (reg h-dsa1) src))
   8445 	    )
   8446   )
   8447 )
   8448 (define-pmacro (ldc16-sem src dst)
   8449   (sequence ()
   8450 	    (case DFLT dst
   8451 		  ((#x1) (set (reg h-intb) src))
   8452 		  ((#x2) (set (reg h-intb) (or (reg h-intb) (sll src (const 16)))))
   8453 		  ((#x3) (sequence ((HI tflag))
   8454 				   (set tflag src)
   8455 				   (if (and tflag #x1) (set cbit 1)) 
   8456 				   (if (and tflag #x2) (set dbit 1)) 
   8457 				   (if (and tflag #x4) (set zbit 1)) 
   8458 				   (if (and tflag #x8) (set sbit 1)) 
   8459 				   (if (and tflag #x10) (set bbit 1)) 
   8460 				   (if (and tflag #x20) (set obit 1)) 
   8461 				   (if (and tflag #x40) (set ibit 1)) 
   8462 				   (if (and tflag #x80) (set ubit 1))))
   8463 		  ((#x4) (set (reg h-isp) src))
   8464 		  ((#x5) (set (reg h-sp) src))
   8465 		  ((#x6) (set (reg h-sb) src))
   8466 		  ((#x7) (set (reg h-fb) src))
   8467 	    )
   8468   )
   8469 )
   8470 
   8471 (define-pmacro (stc32-cr1-sem src dst)
   8472   (sequence ()
   8473 	    (case DFLT src
   8474 		  ((#x0) (set dst (reg h-dct0)))
   8475 		  ((#x1) (set dst (reg h-dct1)))
   8476 		  ((#x2) (sequence ((HI tflag))
   8477 				   (set tflag 0)
   8478 				   (if (eq cbit 1) (set tflag (or tflag #x1)))
   8479 				   (if (eq dbit 1) (set tflag (or tflag #x2)))
   8480 				   (if (eq zbit 1) (set tflag (or tflag #x4)))
   8481 				   (if (eq sbit 1) (set tflag (or tflag #x8)))
   8482 				   (if (eq bbit 1) (set tflag (or tflag #x10)))
   8483 				   (if (eq obit 1) (set tflag (or tflag #x20)))
   8484 				   (if (eq ibit 1) (set tflag (or tflag #x40)))
   8485 				   (if (eq ubit 1) (set tflag (or tflag #x80)))
   8486 				   (set dst tflag)))
   8487 		  ((#x3) (set dst (reg h-svf)))
   8488 		  ((#x4) (set dst (reg h-drc0)))
   8489 		  ((#x5) (set dst (reg h-drc1)))
   8490 		  ((#x6) (set dst (reg h-dmd0)))
   8491 		  ((#x7) (set dst (reg h-dmd1)))
   8492 	    )
   8493   )
   8494 )
   8495 (define-pmacro (stc32-cr2-sem src dst)
   8496   (sequence ()
   8497 	    (case DFLT src
   8498 		  ((#x0) (set dst (reg h-intb)))
   8499 		  ((#x1) (set dst (reg h-sp)))
   8500 		  ((#x2) (set dst (reg h-sb)))
   8501 		  ((#x3) (set dst (reg h-fb)))
   8502 		  ((#x4) (set dst (reg h-svp)))
   8503 		  ((#x5) (set dst (reg h-vct)))
   8504 		  ((#x7) (set dst (reg h-isp)))
   8505 	    )
   8506   )
   8507 )
   8508 (define-pmacro (stc32-cr3-sem src dst)
   8509   (sequence ()
   8510 	    (case DFLT src
   8511 		  ((#x2) (set dst (reg h-dma0)))
   8512 		  ((#x3) (set dst (reg h-dma1)))
   8513 		  ((#x4) (set dst (reg h-dra0)))
   8514 		  ((#x5) (set dst (reg h-dra1)))
   8515 		  ((#x6) (set dst (reg h-dsa0)))
   8516 		  ((#x7) (set dst (reg h-dsa1)))
   8517 	    )
   8518   )
   8519 )
   8520 (define-pmacro (stc16-sem src dst)
   8521   (sequence ()
   8522 	    (case DFLT src
   8523 		  ((#x1) (set dst (and (reg h-intb) (const #xffff))))
   8524 		  ((#x2) (set dst (srl (reg h-intb) (const 16))))
   8525 		  ((#x3) (sequence ((HI tflag))
   8526 				   (set tflag 0)
   8527 				   (if (eq cbit 1) (set tflag (or tflag #x1)))
   8528 				   (if (eq dbit 1) (set tflag (or tflag #x2)))
   8529 				   (if (eq zbit 1) (set tflag (or tflag #x4)))
   8530 				   (if (eq sbit 1) (set tflag (or tflag #x8)))
   8531 				   (if (eq bbit 1) (set tflag (or tflag #x10)))
   8532 				   (if (eq obit 1) (set tflag (or tflag #x20)))
   8533 				   (if (eq ibit 1) (set tflag (or tflag #x40)))
   8534 				   (if (eq ubit 1) (set tflag (or tflag #x80)))
   8535 				   (set dst tflag)))
   8536 		  ((#x4) (set dst (reg h-isp)))
   8537 		  ((#x5) (set dst (reg h-sp)))
   8538 		  ((#x6) (set dst (reg h-sb)))
   8539 		  ((#x7) (set dst (reg h-fb)))
   8540 	    )
   8541   )
   8542 )
   8543 
   8544 (dni ldc16.imm16 "ldc #imm,dst" ((machine 16))
   8545      ("ldc #${Imm-16-HI},${cr16}")
   8546      (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-1 0) (f-12-4 0) cr16 Imm-16-HI)
   8547      (ldc16-sem Imm-16-HI cr16)
   8548      ())
   8549  
   8550 (dni ldc16.dst "ldc src,dest" ((machine 16))
   8551      ("ldc ${dst16-16-HI},${cr16}")
   8552      (+ (f-0-4 7) (f-4-4 #xA) (f-8-1 1) cr16 dst16-16-HI)
   8553      (ldc16-sem dst16-16-HI cr16)
   8554      ())
   8555 ; ldc src,dest (m32c #4)
   8556 (dni ldc32.src-cr1 "ldc src,dst" ((machine 32))
   8557      ("ldc ${dst32-24-Prefixed-HI},${cr1-Prefixed-32}")
   8558      (+ (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)
   8559      (ldc32-cr1-sem dst32-24-Prefixed-HI cr1-Prefixed-32)
   8560      ())
   8561 ; ldc src,dest (m32c #5)
   8562 (dni ldc32.src-cr2 "ldc src,dest" ((machine 32))
   8563      ("ldc ${dst32-16-Unprefixed-SI},${cr2-32}")
   8564      (+ (f-0-4 #xD) dst32-16-Unprefixed-SI (f-7-1 1) (f-10-2 0) (f-12-1 0) cr2-32)
   8565      (ldc32-cr2-sem dst32-16-Unprefixed-SI cr2-32)
   8566      ())
   8567 ; ldc src,dest (m32c #6)
   8568 (dni ldc32.src-cr3 "ldc src,dst" ((machine 32))
   8569      ("ldc ${dst32-24-Prefixed-SI},${cr3-Prefixed-32}")
   8570      (+ (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)
   8571      (ldc32-cr3-sem dst32-24-Prefixed-SI cr3-Prefixed-32)
   8572      ())
   8573 ; ldc src,dest (m32c #1)
   8574 (dni ldc32.imm16-cr1 "ldc #imm,dst" ((machine 32))
   8575      ("ldc #${Imm-16-HI},${cr1-Unprefixed-32}")
   8576      (+ (f-0-4 #xD) (f-4-4 5) (f-8-4 #xA) (f-12-1 1) cr1-Unprefixed-32 Imm-16-HI)
   8577      (ldc32-cr1-sem Imm-16-HI cr1-Unprefixed-32)
   8578      ())
   8579 ; ldc src,dest (m32c #2)
   8580 (dni ldc32.imm16-cr2 "ldc #imm,dst" ((machine 32))
   8581      ("ldc #${Dsp-16-u24},${cr2-32}")
   8582      (+ (f-0-4 #xD) (f-4-4 5) (f-8-4 2) (f-12-1 1)  cr2-32 Dsp-16-u24)
   8583      (ldc32-cr2-sem Dsp-16-u24 cr2-32)
   8584      ())
   8585 ; ldc src,dest (m32c #3) 
   8586 (dni ldc32.imm16-cr3 "ldc #imm,dst" ((machine 32))
   8587      ("ldc #${Dsp-16-u24},${cr3-Unprefixed-32}")
   8588      (+ (f-0-4 #xD) (f-4-4 5) (f-8-4 6) (f-12-1 1) cr3-Unprefixed-32 Dsp-16-u24)
   8589      (ldc32-cr3-sem Dsp-16-u24 cr3-Unprefixed-32)
   8590      ())
   8591  
   8592 (dni stc16.src "stc src,dest" ((machine 16))
   8593      ("stc ${cr16},${dst16-16-HI}")
   8594      (+ (f-0-4 7) (f-4-4 #xB) (f-8-1 1) cr16 dst16-16-HI)
   8595      (stc16-sem cr16 dst16-16-HI )
   8596      ())
   8597 
   8598 (dni stc16.pc "stc pc,dest" ((machine 16))
   8599      ("stc pc,${dst16-16-HI}")
   8600      (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xC) dst16-16-HI)
   8601      (sequence () (set dst16-16-HI (reg h-pc)))
   8602      ())
   8603 
   8604 (dni stc32.src-cr1 "stc src,dst" ((machine 32))
   8605      ("stc ${cr1-Prefixed-32},${dst32-24-Prefixed-HI}")
   8606      (+ (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)
   8607      (stc32-cr1-sem cr1-Prefixed-32 dst32-24-Prefixed-HI )
   8608      ())
   8609  
   8610 (dni stc32.src-cr2 "stc src,dest" ((machine 32))
   8611      ("stc ${cr2-32},${dst32-16-Unprefixed-SI}")
   8612      (+ (f-0-4 #xD) dst32-16-Unprefixed-SI (f-7-1 1) (f-10-2 0) (f-12-1 2) cr2-32)
   8613      (stc32-cr2-sem cr2-32 dst32-16-Unprefixed-SI )
   8614      ())
   8615 
   8616 (dni stc32.src-cr3 "stc src,dst" ((machine 32))
   8617      ("stc ${cr3-Prefixed-32},${dst32-24-Prefixed-SI}")
   8618      (+ (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)
   8619      (stc32-cr3-sem cr3-Prefixed-32 dst32-24-Prefixed-SI )
   8620      ())
   8621  
   8622 ;-------------------------------------------------------------
   8623 ; ldctx - load context
   8624 ; stctx - store context
   8625 ;-------------------------------------------------------------
   8626 
   8627 ; ??? semantics
   8628 (dni ldctx16 "ldctx abs16,abs24" ((machine 16))
   8629      ("ldctx ${Dsp-16-u16},${Dsp-32-u24}")
   8630      (+ (f-0-4 #x7) (f-4-4 #xC) (f-8-4 #xF) (f-12-4 #x0) Dsp-16-u16 Dsp-32-u24)
   8631      (nop)
   8632      ())
   8633 (dni ldctx32 "ldctx abs16,abs24" ((machine 32))
   8634      ("ldctx ${Dsp-16-u16},${Dsp-32-u24}")
   8635      (+ (f-0-4 #xB) (f-4-4 #x6) (f-8-4 #xC) (f-12-4 #x3) Dsp-16-u16 Dsp-32-u24)
   8636      (nop)
   8637      ())
   8638 (dni stctx16 "stctx abs16,abs24" ((machine 16))
   8639      ("stctx ${Dsp-16-u16},${Dsp-32-u24}")
   8640      (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xF) (f-12-4 #x0) Dsp-16-u16 Dsp-32-u24)
   8641      (nop)
   8642      ())
   8643 (dni stctx32 "stctx abs16,abs24" ((machine 32))
   8644      ("stctx ${Dsp-16-u16},${Dsp-32-u24}")
   8645      (+ (f-0-4 #xB) (f-4-4 #x6) (f-8-4 #xD) (f-12-4 #x3) Dsp-16-u16 Dsp-32-u24)
   8646      (nop)
   8647      ())
   8648 
   8649 ;-------------------------------------------------------------
   8650 ; lde - load from extra far data area (m16)
   8651 ; ste - store to extra far data area (m16)
   8652 ;-------------------------------------------------------------
   8653 
   8654 (lde-dst QI .b 0)
   8655 (lde-dst HI .w 1)
   8656 
   8657 (ste-dst QI .b 0)
   8658 (ste-dst HI .w 1)
   8659 
   8660 ;-------------------------------------------------------------
   8661 ; ldipl - load interrupt permission level
   8662 ;-------------------------------------------------------------
   8663 
   8664 ; ??? semantics
   8665 ; ldintb <==> ldc #imm,intbh ; ldc #imm,intbl
   8666 
   8667 (dni ldipl16.imm "ldipl #imm" ((machine 16))
   8668      ("ldipl #${Imm-13-u3}")
   8669      (+ (f-0-4 #x7) (f-4-4 #xD) (f-8-4 #xA) (f-12-1 0) Imm-13-u3)
   8670      (nop)
   8671      ())
   8672 (dni ldipl32.imm "ldipl #imm" ((machine 32))
   8673      ("ldipl #${Imm-13-u3}")
   8674      (+ (f-0-4 #xD) (f-4-4 5) (f-8-4 #xE) (f-12-1 1) Imm-13-u3)
   8675      (nop)
   8676      ())
   8677 
   8678 
   8679 ;-------------------------------------------------------------
   8680 ; max - maximum value
   8681 ;-------------------------------------------------------------
   8682 
   8683 ; TODO check semantics for min -1,0
   8684 (define-pmacro (max-sem mode src dst)
   8685   (sequence ()
   8686 	    (if (gt mode src dst)
   8687 		(set mode dst src)))
   8688 )
   8689 
   8690 ; max.size:G #imm,dst
   8691 (binary-arith32-imm-dst-Prefixed QI QI .b 0 max X #x8 #x3 #xF max-sem)
   8692 (binary-arith32-imm-dst-Prefixed HI HI .w 1 max X #x8 #x3 #xF max-sem)
   8693 
   8694 ; max.BW:G src,dst
   8695 (binary-arith32-src-dst-Prefixed QI QI .b 0 max X #x1 #xD max-sem)
   8696 (binary-arith32-src-dst-Prefixed HI HI .w 1 max X #x1 #xD max-sem)
   8697 
   8698 ;-------------------------------------------------------------
   8699 ; min - minimum value
   8700 ;-------------------------------------------------------------
   8701 
   8702 (define-pmacro (min-sem mode src dst)
   8703   (sequence ()
   8704          (if (lt mode src dst)
   8705 	     (set mode dst src)))
   8706 )
   8707 
   8708 ; min.size:G #imm,dst
   8709 (binary-arith32-imm-dst-Prefixed QI QI .b 0 min X #x8 #x2 #xF min-sem)
   8710 (binary-arith32-imm-dst-Prefixed HI HI .w 1 min X #x8 #x2 #xF min-sem)
   8711 
   8712 ; min.BW:G src,dst
   8713 (binary-arith32-src-dst-Prefixed QI QI .b 0 min X #x1 #xC min-sem)
   8714 (binary-arith32-src-dst-Prefixed HI HI .w 1 min X #x1 #xC min-sem)
   8715 
   8716 ;-------------------------------------------------------------
   8717 ; mov - move
   8718 ;-------------------------------------------------------------
   8719 
   8720 (define-pmacro (mov-sem mode src1 dst)
   8721   (sequence ((mode result))
   8722 	    (set result src1)
   8723 	    (set-z-and-s result)
   8724 	    (set mode dst src1))
   8725 )
   8726 
   8727 (define-pmacro (mov-dspsp-dst-sem mach mode src1 dst)
   8728   (set dst (mem-mach mach mode (add sp src1)))
   8729 )
   8730 
   8731 (define-pmacro (mov-src-dspsp-sem mach mode src dst1)
   8732   (set (mem-mach mach mode (add sp dst1)) src)
   8733 )
   8734 
   8735 (define-pmacro (mov16-imm-an-defn size mode imm regn op1 op2)
   8736   (dni (.sym mov16. size .S-imm- regn)
   8737        (.str "mov." size ":S " imm "," regn)
   8738        ((machine 16))
   8739        (.str "mov." size "$S #${" imm "}," regn)
   8740        (+ op1 op2 imm)
   8741        (mov-sem mode imm (reg (.sym h- regn))) 
   8742        ())
   8743 )
   8744 ; mov.size:G #imm,dst (m16 #1 m32 #1)
   8745 (binary-arith-imm-dst mov G (f-0-4 7) (f-4-3 2) (f-8-4 #xC) #x9 #x2 #xF mov-sem)
   8746 ; mov.L:G #imm32,dst (m32 #2)
   8747 (binary-arith32-imm-dst-defn SI SI .l 0 mov G #xB #x3 #x1 mov-sem)
   8748 ; mov.BW:S #imm,dst2 (m32 #4)
   8749 (binary-arith32-s-imm-dst QI .b 0 mov #x0 #x2 mov-sem)
   8750 (binary-arith32-s-imm-dst HI .w 1 mov #x0 #x2 mov-sem)
   8751 ; mov.b:S #imm8,dst3 (m16 #3)
   8752 (binary-arith16-b-S-imm8-dst3 mov ".b" (f-0-4 #xC) (f-4-1 0) mov-sem)
   8753 ; mov.b:S #imm8,aN (m16 #4)
   8754 (mov16-imm-an-defn b QI Imm-8-QI a0 (f-0-4 #xE) (f-4-4 2))
   8755 (mov16-imm-an-defn b QI Imm-8-QI a1 (f-0-4 #xE) (f-4-4 #xA))
   8756 (mov16-imm-an-defn w HI Imm-8-HI a0 (f-0-4 #xA) (f-4-4 2))
   8757 (mov16-imm-an-defn w HI Imm-8-HI a1 (f-0-4 #xA) (f-4-4 #xA))
   8758 ; mov.WL:S #imm,A0/A1 (m32 #5)
   8759 (define-pmacro (mov32-wl-s-defn mode sz op1 imm regn op2)
   8760   (dni (.sym mov32- sz - regn)
   8761        (.str "mov." sz ":s" imm "," regn)
   8762        ((machine 32))
   8763        (.str "mov." sz "$S #${" imm "}," regn)
   8764        (+ (f-0-4 op1) (f-4-4 op2) imm)
   8765        (mov-sem mode imm (reg (.sym h- regn)))
   8766        ())
   8767 )
   8768 (mov32-wl-s-defn HI w #x9 Imm-8-HI a0 #xC)
   8769 (mov32-wl-s-defn HI w #x9 Imm-8-HI a1 #xD)
   8770 (mov32-wl-s-defn SI l #xB Dsp-8-s24 a0 #xC)
   8771 (mov32-wl-s-defn SI l #xB Dsp-8-s24 a1 #xD)
   8772 
   8773 ; mov.size:Q #imm4,dst (m16 #2 m32 #3)
   8774 (binary-arith16-imm4-dst-defn QI .b 0 0 mov (f-0-4 #xD) (f-4-3 4) mov-sem)
   8775 (binary-arith16-imm4-dst-defn HI .w 0 1 mov (f-0-4 #xD) (f-4-3 4) mov-sem)
   8776 (binary-arith32-imm4-dst-defn QI .b 1 0 mov #x7 #x2 mov-sem)
   8777 (binary-arith32-imm4-dst-defn HI .w 1 1 mov #x7 #x2 mov-sem)
   8778 
   8779 ; mov.BW:Z #0,dst (m16 #5 m32 #6)
   8780 (dni mov16.b-Z-imm8-dst3
   8781      "mov.b:Z #0,Dst16-3-S-8"
   8782      ((machine 16))
   8783      "mov.b$Z #0,${Dst16-3-S-8}"
   8784      (+ (f-0-4 #xB) (f-4-1 #x0) Dst16-3-S-8)
   8785      (mov-sem QI (const 0) Dst16-3-S-8)
   8786      ())
   8787 ; (binary-arith16-b-Z-imm8-dst3 mov ".b" (f-0-4 #xB) (f-4-1 0) mov-sem)
   8788 (binary-arith32-z-imm-dst QI .b 0 mov #x0 #x1 mov-sem)
   8789 (binary-arith32-z-imm-dst HI .w 1 mov #x0 #x1 mov-sem)
   8790 ; mov.BW:G src,dst (m16 #6 m32 #7)
   8791 (binary-arith-src-dst mov G (f-0-4 #x7) (f-4-3 1) #x1 #xB mov-sem)
   8792 ; mov.B:S src2,a0/a1 (m16 #7)
   8793 (dni (.sym mov 16 .b.S-An)
   8794      (.str mov ".b:S src2,a[01]")
   8795      ((machine 16))
   8796      (.str mov ".b$S ${src16-2-S},${Dst16AnQI-S}")
   8797      (+ (f-0-4 #x3) (f-4-1 0) Dst16AnQI-S src16-2-S)
   8798      (mov-sem QI src16-2-S Dst16AnQI-S)
   8799      ())
   8800 (define-pmacro (mov16-b-s-an-defn op1 op2 op2c)
   8801   (dni (.sym mov16.b.S- op1 - op2)
   8802        (.str mov ".b:S " op1 "," op2)
   8803        ((machine 16))
   8804        (.str mov ".b$S " op1 "," op2)
   8805        (+ (f-0-4 #x3) op2c)
   8806        (mov-sem QI (reg (.sym h- op1)) (reg (.sym h- op2)))
   8807        ())
   8808   )
   8809 (mov16-b-s-an-defn r0l a1 (f-4-4 #x4))
   8810 (mov16-b-s-an-defn r0h a0 (f-4-4 #x0))
   8811 
   8812 ; mov.L:G src,dst (m32 #8)
   8813 (binary-arith32-src-dst-defn SI SI .l 1 mov G #x1 #x3 mov-sem)
   8814 ; mov.B:S r0l/r0h,dst2 (m16 #8)
   8815 (dni (.sym mov 16 .b.S-Rn-An)
   8816      (.str mov ".b:S r0[lh],src2")
   8817      ((machine 16))
   8818      (.str mov ".b$S ${Dst16RnQI-S},${src16-2-S}")
   8819      (+ (f-0-4 #x0) (f-4-1 0) Dst16RnQI-S src16-2-S)
   8820      (mov-sem QI src16-2-S Dst16RnQI-S)
   8821      ())
   8822 
   8823 ; mov.B.S src2,r0l/r0h (m16 #9)
   8824 (binary-arith16-b-S-src2 mov (f-0-4 0) (f-4-1 1) mov-sem)
   8825 
   8826 ; mov.BW:S src2,r0l/r0 (m32 #9)
   8827 ; mov.BW:S src2,r1l/r1 (m32 #10)
   8828 (define-pmacro (mov32-src-r sz szcode mode src dst opc1 opc2)
   8829   (begin
   8830     (dni (.sym mov32. sz - src - dst)
   8831 	 (.str "mov." sz "src," dst)
   8832 	 ((machine 32))
   8833 	 (.str "mov."  sz "$S ${" (.sym src - mode) "}," dst)
   8834 	 (+ (f-0-2 opc1) (.sym src - mode) (f-4-3 opc2) (f-7-1 szcode))
   8835 	 (mov-sem mode (.sym src - mode) (reg (.sym h- dst)))
   8836 	 ())
   8837     )
   8838   )
   8839 (mov32-src-r b 0 QI dst32-2-S-16 r0l 0 4)
   8840 (mov32-src-r w 1 HI dst32-2-S-16 r0 0 4)
   8841 (mov32-src-r b 0 QI dst32-2-S-8 r0l 0 4)
   8842 (mov32-src-r w 1 HI dst32-2-S-8 r0 0 4)
   8843 (mov32-src-r b 0 QI dst32-2-S-basic r1l 1 7)
   8844 (mov32-src-r w 1 HI dst32-2-S-basic r1 1 7)
   8845 (mov32-src-r b 0 QI dst32-2-S-16 r1l 1 7)
   8846 (mov32-src-r w 1 HI dst32-2-S-16 r1 1 7)
   8847 (mov32-src-r b 0 QI dst32-2-S-8 r1l 1 7)
   8848 (mov32-src-r w 1 HI dst32-2-S-8 r1 1 7)
   8849 
   8850 ; mov.BW:S r0l/r0,dst2 (m32 #11)
   8851 (define-pmacro (mov32-r-dest sz szcode mode src dst opc1 opc2)
   8852   (begin
   8853     (dni (.sym mov32. sz - src - dst)
   8854 	 (.str "mov." sz "src," dst)
   8855 	 ((machine 32))
   8856 	 (.str "mov."  sz "$S " src ",${" (.sym dst - mode) "}")
   8857 	 (+ (f-0-2 opc1) (.sym dst - mode) (f-4-3 opc2) (f-7-1 szcode))
   8858 	 (mov-sem mode (reg (.sym h- src)) (.sym dst - mode))
   8859 	 ())
   8860     )
   8861   )
   8862 (mov32-r-dest b 0 QI r0l dst32-2-S-16 0 0)
   8863 (mov32-r-dest w 1 HI r0  dst32-2-S-16 0 0)
   8864 (mov32-r-dest b 0 QI r0l dst32-2-S-8  0 0)
   8865 (mov32-r-dest w 1 HI r0  dst32-2-S-8  0 0)
   8866 
   8867 ; mov.L:S src,A0/A1    (m32 #12)
   8868 (define-pmacro (mov32-src-a src dst dstcode opc1 opc2)
   8869   (begin
   8870     (dni (.sym mov32. sz - src - dst)
   8871 	 (.str "mov." sz "src," dst)
   8872 	 ((machine 32))
   8873 	 (.str "mov.l" "$S ${" (.sym src - SI) "}," dst)
   8874 	 (+ (f-0-2 opc1) (.sym src - SI) (f-4-3 opc2) (f-7-1 dstcode))
   8875 	 (mov-sem SI (.sym src - SI) (reg (.sym h- dst)))
   8876 	 ())
   8877     )
   8878   )
   8879 (mov32-src-a dst32-2-S-16 a0 0 1 4)
   8880 (mov32-src-a dst32-2-S-16 a1 1 1 4)
   8881 (mov32-src-a dst32-2-S-8 a0 0 1 4)
   8882 (mov32-src-a dst32-2-S-8 a1 1 1 4)
   8883 
   8884 ; mov.BW:G dsp8[sp],dst (m16 #10 m32 #13)
   8885 ; mov.BW:G src,dsp8[sp] (m16 #11 m32 #14)
   8886 (mov-dspsp-dst mov (f-0-4 #x7) (f-4-3 2) (f-8-4 #xB) #xB #x0 #xF mov-dspsp-dst-sem)
   8887 (mov-src-dspsp mov (f-0-4 #x7) (f-4-3 2) (f-8-4 #x3) #xA #x0 #xF mov-src-dspsp-sem)
   8888 
   8889 ;-------------------------------------------------------------
   8890 ; mova - move effective address
   8891 ;-------------------------------------------------------------
   8892 
   8893 (define-pmacro (mov16a-defn dst dstop dstcode)
   8894   (dni (.sym mova16. src - dst)
   8895        (.str "mova src," dst)
   8896        ((machine 16))
   8897        (.str "mova ${dst16-16-Mova-HI}," dst)
   8898        (+ (f-0-4 #xE) (f-4-4 #xB) dst16-16-Mova-HI (f-8-4 dstcode))
   8899        (sequence () (set HI (reg dstop) dst16-16-Mova-HI))
   8900        ())
   8901 )
   8902 (mov16a-defn r0 h-r0 0)
   8903 (mov16a-defn r1 h-r1 1)
   8904 (mov16a-defn r2 h-r2 2)
   8905 (mov16a-defn r3 h-r3 3)
   8906 (mov16a-defn a0 h-a0 4)
   8907 (mov16a-defn a1 h-a1 5)
   8908 
   8909 (define-pmacro (mov32a-defn dst dstop dstcode)
   8910   (dni (.sym mova32. src - dst)
   8911        (.str "mova src," dst)
   8912        ((machine 32))
   8913        (.str "mova ${dst32-16-Unprefixed-Mova-SI}," dst)
   8914        (+ (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))
   8915        (sequence () (set SI (reg dstop) dst32-16-Unprefixed-Mova-SI))
   8916        ())
   8917 )
   8918 (mov32a-defn r2r0 h-r2r0 0)
   8919 (mov32a-defn r3r1 h-r3r1 1)
   8920 (mov32a-defn a0 h-a0 2)
   8921 (mov32a-defn a1 h-a1 3)
   8922 
   8923 ;-------------------------------------------------------------
   8924 ; movDir - move nibble
   8925 ;-------------------------------------------------------------
   8926 
   8927 (define-pmacro (movdir-sem nib src dst)
   8928   (sequence ((SI tmp))
   8929 	    (case DFLT nib
   8930 		  ((0) (set dst (or (and dst #xf0) (and src #xf))))
   8931 		  ((1) (set dst (or (and dst #x0f) (sll (and src #xf) 4))))
   8932 		  ((2) (set dst (or (and dst #xf0) (srl (and src #xf0) 4))))
   8933 		  ((3) (set dst (or (and dst #x0f) (and src #xf0))))
   8934 		  )
   8935 	    )
   8936   )
   8937 ; movDir src,dst
   8938 (define-pmacro (mov16dir-1-defn nib dircode dir)
   8939   (dni (.sym mov nib 16 ".r0l-dst")
   8940        (.str "mov" nib " r0l,dst")
   8941        ((machine 16))
   8942        (.str "mov" nib " r0l,${dst16-16-QI}")
   8943        (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 dir) dst16-16-QI)
   8944        (movdir-sem dircode (reg h-r0l) dst16-16-QI)
   8945        ())
   8946 )
   8947 (mov16dir-1-defn ll 0 8)
   8948 (mov16dir-1-defn lh 1 #xA)
   8949 (mov16dir-1-defn hl 2 9)
   8950 (mov16dir-1-defn hh 3 #xB)
   8951 (define-pmacro (mov16dir-2-defn nib dircode dir)
   8952   (dni (.sym mov nib 16 ".src-r0l")
   8953        (.str "mov" nib " src,r0l")
   8954        ((machine 16))
   8955        (.str "mov" nib " ${dst16-16-QI},r0l")
   8956        (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 dir) dst16-16-QI)
   8957        (movdir-sem dircode dst16-16-QI (reg h-r0l))
   8958        ())
   8959 )
   8960 (mov16dir-2-defn ll 0 0)
   8961 (mov16dir-2-defn lh 1 2)
   8962 (mov16dir-2-defn hl 2 1)
   8963 (mov16dir-2-defn hh 3 3)
   8964 
   8965 (define-pmacro (mov32dir-1-defn nib o1o0)
   8966   (dni (.sym mov nib 32 ".r0l-dst")
   8967        (.str "mov" nib " r0l,dst")
   8968        ((machine 32))
   8969        (.str "mov" nib " r0l,${dst32-24-Prefixed-QI}")
   8970        (+ (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))
   8971        (movdir-sem o1o0 (reg h-r0l) dst32-24-Prefixed-QI)
   8972        ())
   8973 )
   8974 (mov32dir-1-defn ll 0)
   8975 (mov32dir-1-defn lh 1)
   8976 (mov32dir-1-defn hl 2)
   8977 (mov32dir-1-defn hh 3)
   8978 (define-pmacro (mov32dir-2-defn nib o1o0)
   8979   (dni (.sym mov nib 32 ".src-r0l")
   8980        (.str "mov" nib " src,r0l")
   8981        ((machine 32))
   8982        (.str "mov" nib " ${dst32-24-Prefixed-QI},r0l")
   8983        (+ (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))
   8984        (movdir-sem o1o0 dst32-24-Prefixed-QI (reg h-r0l))
   8985        ())
   8986 )
   8987 (mov32dir-2-defn ll 0)
   8988 (mov32dir-2-defn lh 1)
   8989 (mov32dir-2-defn hl 2)
   8990 (mov32dir-2-defn hh 3)
   8991 
   8992 ;-------------------------------------------------------------
   8993 ; movx - move extend sign (m32)
   8994 ;-------------------------------------------------------------
   8995 
   8996 (define-pmacro (movx-sem mode src dst)
   8997   (sequence ((SI source) (SI result))
   8998 	    (set SI result src)
   8999 	    (set-z-and-s result)
   9000 	    (set dst result))
   9001 )
   9002 
   9003 ; movx #imm,dst
   9004 (binary-arith32-imm-dst-defn QI SI "" 0 movx X #xB #x1 #x1 movx-sem)
   9005 
   9006 ;-------------------------------------------------------------
   9007 ; mul - multiply
   9008 ;-------------------------------------------------------------
   9009 
   9010 (define-pmacro (mul-sem mode src1 dst)
   9011   (sequence ((mode result))
   9012 	    (set obit (add-oflag mode src1 dst 0))
   9013 	    (set result (mul mode src1 dst))
   9014 	    (set dst result))
   9015 )
   9016 
   9017 ; mul.BW #imm,dst
   9018 (binary-arith-imm-dst mul G (f-0-4 7) (f-4-3 6) (f-8-4 5) #x8 #x1 #xF mul-sem)
   9019 ; mul.BW src,dst
   9020 (binary-arith-src-dst mul G (f-0-4 #x7) (f-4-3 4) #x1 #xC mul-sem)
   9021 
   9022 (dni mul_l "mul.l src,r2r0" ((machine 32))
   9023      ("mul.l ${dst32-24-Prefixed-SI},r2r0")
   9024      (+ (f-0-4 #x0) (f-4-4 #x1) (f-8-4 #x8) (f-15-1 #x1) (f-18-2 #x1) (f-20-4 #xf)
   9025 	dst32-24-Prefixed-SI)
   9026      () ())
   9027 
   9028 (dni mulu_l "mulu.l src,r2r0" ((machine 32))
   9029      ("mulu.l ${dst32-24-Prefixed-SI},r2r0")
   9030      (+ (f-0-4 #x0) (f-4-4 #x1) (f-8-4 #x8) (f-15-1 #x1) (f-18-2 #x0) (f-20-4 #xf)
   9031 	dst32-24-Prefixed-SI)
   9032      () ())
   9033 ;-------------------------------------------------------------
   9034 ; mulex - multiple extend sign (m32)
   9035 ;-------------------------------------------------------------
   9036 
   9037 ; mulex src,dst
   9038 ; (dni mulex-absolute-indirect "mulex [src]" ((machine 32))
   9039 ;      ("mulex ${dst32-24-absolute-indirect-HI}")
   9040 ;      (+ (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))
   9041 ;      (set R1R2R0 (mul DI (ext DI R2R0) (ext DI dst32-24-absolute-indirect-HI)))
   9042 ;      ())
   9043 (dni mulex "mulex src" ((machine 32))
   9044      ("mulex ${dst32-16-Unprefixed-Mulex-HI}")
   9045      (+ (f-0-4 #xC) dst32-16-Unprefixed-Mulex-HI (f-7-1 1) (f-10-2 3) (f-12-4 #xE))
   9046      (set R1R2R0 (mul DI (ext DI R2R0) (ext DI dst32-16-Unprefixed-Mulex-HI)))
   9047      ())
   9048 ; (dni mulex-indirect "mulex [src]" ((machine 32))
   9049 ;      ("mulex ${dst32-24-indirect-HI}")
   9050 ;      (+ (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))
   9051 ;      (set R1R2R0 (mul DI (ext DI R2R0) (ext DI dst32-24-indirect-HI)))
   9052 ;      ())
   9053 
   9054 ;-------------------------------------------------------------
   9055 ; mulu - multiply unsigned
   9056 ;-------------------------------------------------------------
   9057 
   9058 (define-pmacro (mulu-sem mode src1 dst)
   9059   (sequence ((mode result))
   9060 	    (set obit (add-oflag mode src1 dst 0))
   9061 	    (set result (mul mode src1 dst))
   9062 	    (set dst result))
   9063 )
   9064 
   9065 ; mulu.BW #imm,dst
   9066 (binary-arith-imm-dst mulu G (f-0-4 7) (f-4-3 6) (f-8-4 4) #x8 #x0 #xF mulu-sem)
   9067 ; mulu.BW src,dst
   9068 (binary-arith-src-dst mulu G (f-0-4 #x7) (f-4-3 0) #x1 #x4 mulu-sem)
   9069 
   9070 ;-------------------------------------------------------------
   9071 ; neg - twos complement
   9072 ;-------------------------------------------------------------
   9073 
   9074 (define-pmacro (neg-sem mode dst)
   9075   (sequence ((mode result))
   9076 	    (set result (neg mode dst))
   9077 	    (set-z-and-s result)
   9078 	    (set dst result))
   9079 )
   9080 
   9081 ; neg.BW:G
   9082 (unary-insn neg (f-0-4 7) (f-4-3 2) (f-8-4 #x5) #xA #x2 #xF neg-sem)
   9083 
   9084 ;-------------------------------------------------------------
   9085 ; not - twos complement
   9086 ;-------------------------------------------------------------
   9087 
   9088 (define-pmacro (not-sem mode dst)
   9089   (sequence ((mode result))
   9090 	    (set result (not mode dst))
   9091 	    (set-z-and-s result)
   9092 	    (set dst result))
   9093 )
   9094 
   9095 ; not.BW:G
   9096 (unary-insn-g not (f-0-4 7) (f-4-3 2) (f-8-4 #x7) #xA #x1 #xE not-sem)
   9097 
   9098 (dni not16.b.s
   9099      "not.b:s Dst16-3-S-8"
   9100      ((machine 16))
   9101      "not.b:s ${Dst16-3-S-8}"
   9102      (+ (f-0-4 #xb) (f-4-1 #x1) Dst16-3-S-8)
   9103      (not-sem QI Dst16-3-S-8)
   9104      ())
   9105 
   9106 ;-------------------------------------------------------------
   9107 ; nop
   9108 ;-------------------------------------------------------------
   9109 
   9110 (dni nop16
   9111      "nop"
   9112      ((machine 16))
   9113      "nop"
   9114      (+ (f-0-4 #x0) (f-4-4 #x4))
   9115      (nop)
   9116      ())
   9117 
   9118 (dni nop32
   9119      "nop"
   9120      ((machine 32))
   9121      "nop"
   9122      (+ (f-0-4 #xD) (f-4-4 #xE))
   9123      (nop)
   9124      ())
   9125 
   9126 ;-------------------------------------------------------------
   9127 ; or - logical or
   9128 ;-------------------------------------------------------------
   9129 
   9130 (define-pmacro (or-sem mode src1 dst)
   9131   (sequence ((mode result))
   9132 	    (set result (or mode src1 dst))
   9133 	    (set-z-and-s result)
   9134 	    (set dst result))
   9135 )
   9136 
   9137 ; or.BW #imm,dst (m16 #1 m32 #1)
   9138 (binary-arith-imm-dst or G (f-0-4 7) (f-4-3 3) (f-8-4 3) #x8 #x2 #xF or-sem)
   9139 ; or.b:S #imm8,dst3 (m16 #2 m32 #2)
   9140 (binary-arith16-b-S-imm8-dst3 or ".b" (f-0-4 9) (f-4-1 1) or-sem)
   9141 (binary-arith32-s-imm-dst QI .b 0 or #x1 #x2 or-sem)
   9142 (binary-arith32-s-imm-dst HI .w 1 or #x1 #x2 or-sem)
   9143 ; or.BW src,dst (m16 #3 m32 #3)
   9144 (binary-arith-src-dst or G (f-0-4 #x9) (f-4-3 4) #x1 #x5 or-sem)
   9145 ; or.b:S src,r0[lh] (m16)
   9146 (binary-arith16-b-S-src2 or (f-0-4 1) (f-4-1 1) or-sem)
   9147 
   9148 ;-------------------------------------------------------------
   9149 ; pop - restore register/memory
   9150 ;-------------------------------------------------------------
   9151 
   9152 ; TODO future: split this into .b and .w semantics
   9153 (define-pmacro (pop-sem-mach mach mode dst)
   9154   (sequence ((mode b_or_w) (SI length))
   9155 	    (set b_or_w -1)
   9156 	    (set b_or_w (srl b_or_w #x8))
   9157 	    (if (eq b_or_w #x0)
   9158 		(set length 1)    ; .b
   9159 		(set length 2))   ; .w
   9160 	    
   9161 	    (case DFLT length
   9162 		  ((1) (set dst (mem-mach mach QI (reg h-sp))))
   9163 		  ((2) (set dst (mem-mach mach HI (reg h-sp)))))
   9164 	    (set (reg h-sp) (add (reg h-sp) length))
   9165 	    )
   9166 )
   9167 
   9168 (define-pmacro (pop-sem16 mode dest) (pop-sem-mach 16 mode dest))
   9169 (define-pmacro (pop-sem32 mode dest) (pop-sem-mach 32 mode dest))
   9170 
   9171 ; pop.BW:G (m16 #1)
   9172 (unary-insn-mach-g 16 pop (f-0-4 7) (f-4-3 2) (f-8-4 #xD) pop-sem16 $G)
   9173 ; pop.BW:G (m32 #1)
   9174 (unary-insn-mach 32 pop #xB #x2 #xF pop-sem32)
   9175 
   9176 ; pop.b:S r0l/r0h
   9177 (dni pop16.b-s-rn  "pop.b:S r0[lh]" ((machine 16))
   9178      "pop.b$S ${Rn16-push-S-anyof}"
   9179      (+ (f-0-4 #x9) Rn16-push-S-anyof (f-5-3 #x2))
   9180      (pop-sem16 QI Rn16-push-S-anyof)
   9181      ())
   9182 ; pop.w:S a0/a1
   9183 (dni pop16.b-s-an  "pop.w:S a[01]" ((machine 16))
   9184      "pop.w$S ${An16-push-S-anyof}"
   9185      (+ (f-0-4 #xD) An16-push-S-anyof (f-5-3 #x2))
   9186      (pop-sem16 HI An16-push-S-anyof)
   9187      ())
   9188 
   9189 ;-------------------------------------------------------------
   9190 ; popc - pop control register
   9191 ; pushc - push control register
   9192 ;-------------------------------------------------------------
   9193 
   9194 (define-pmacro (popc32-cr1-sem mode dst)
   9195   (sequence ()
   9196 	    (case DFLT dst
   9197 		  ((#x0) (set (reg h-dct0) (mem32 mode (reg h-sp))))
   9198 		  ((#x1) (set (reg h-dct1) (mem32 mode (reg h-sp))))
   9199 		  ((#x2) (sequence ((HI tflag))
   9200 				   (set tflag (mem32 mode (reg h-sp)))
   9201 				   (if (and tflag #x1) (set cbit 1)) 
   9202 				   (if (and tflag #x2) (set dbit 1)) 
   9203 				   (if (and tflag #x4) (set zbit 1)) 
   9204 				   (if (and tflag #x8) (set sbit 1)) 
   9205 				   (if (and tflag #x10) (set bbit 1)) 
   9206 				   (if (and tflag #x20) (set obit 1)) 
   9207 				   (if (and tflag #x40) (set ibit 1)) 
   9208 				   (if (and tflag #x80) (set ubit 1))))
   9209 		  ((#x3) (set (reg h-svf) (mem32 mode (reg h-sp))))
   9210 		  ((#x4) (set (reg h-drc0) (mem32 mode (reg h-sp))))
   9211 		  ((#x5) (set (reg h-drc1) (mem32 mode (reg h-sp))))
   9212 		  ((#x6) (set (reg h-dmd0) (mem32 mode (reg h-sp))))
   9213 		  ((#x7) (set (reg h-dmd1) (mem32 mode (reg h-sp))))
   9214 	    )
   9215 	    (set (reg h-sp) (add (reg h-sp) 2))
   9216   )
   9217 )
   9218 (define-pmacro (popc32-cr2-sem mode dst)
   9219   (sequence ()
   9220 	    (case DFLT dst
   9221 		  ((#x0) (set (reg h-intb) (mem32 mode (reg h-sp))))
   9222 		  ((#x1) (set (reg h-sp) (mem32 mode (reg h-sp))))
   9223 		  ((#x2) (set (reg h-sb) (mem32 mode (reg h-sp))))
   9224 		  ((#x3) (set (reg h-fb) (mem32 mode (reg h-sp))))
   9225 		  ((#x7) (set (reg h-isp) (mem32 mode (reg h-sp))))
   9226 	    )
   9227 	    (set (reg h-sp) (add (reg h-sp) 4))
   9228   )
   9229 )
   9230 (define-pmacro (popc16-sem mode dst)
   9231   (sequence ()
   9232 	    (case DFLT dst
   9233 		  ((#x1) (set (reg h-intb) (or (and (reg h-intb) #x0000)
   9234 					       (mem16 mode (reg h-sp)))))
   9235 		  ((#x2) (set (reg h-intb) (or (and (reg h-intb) #xffff0000)
   9236 					       (mem16 mode (reg h-sp)))))
   9237 		  ((#x3) (sequence ((HI tflag))
   9238 				   (set tflag (mem16 mode (reg h-sp)))
   9239 				   (if (and tflag #x1) (set cbit 1)) 
   9240 				   (if (and tflag #x2) (set dbit 1)) 
   9241 				   (if (and tflag #x4) (set zbit 1)) 
   9242 				   (if (and tflag #x8) (set sbit 1)) 
   9243 				   (if (and tflag #x10) (set bbit 1)) 
   9244 				   (if (and tflag #x20) (set obit 1)) 
   9245 				   (if (and tflag #x40) (set ibit 1)) 
   9246 				   (if (and tflag #x80) (set ubit 1))))
   9247 		  ((#x4) (set (reg h-isp) (mem16 mode (reg h-sp))))
   9248 		  ((#x5) (set (reg h-sp) (mem16 mode (reg h-sp))))
   9249 		  ((#x6) (set (reg h-sb) (mem16 mode (reg h-sp))))
   9250 		  ((#x7) (set (reg h-fb) (mem16 mode (reg h-sp))))
   9251 	    )
   9252 	    (set (reg h-sp) (add (reg h-sp) 2))
   9253   )
   9254 )
   9255 ; popc dest (m16c #1)
   9256 (dni popc16.imm16 "popc dst" ((machine 16))
   9257      ("popc ${cr16}")
   9258      (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-1 0) (f-12-4 3) cr16)
   9259      (popc16-sem HI cr16)
   9260      ())
   9261 ; popc dest (m32c #1)
   9262 (dni popc32.imm16-cr1 "popc dst" ((machine 32))
   9263      ("popc ${cr1-Unprefixed-32}")
   9264      (+ (f-0-4 #xD) (f-4-4 3) (f-8-4 #xA) (f-12-1 1) cr1-Unprefixed-32)
   9265      (popc32-cr1-sem HI cr1-Unprefixed-32)
   9266      ())
   9267 ; popc dest (m32c #2)
   9268 (dni popc32.imm16-cr2 "popc dst" ((machine 32))
   9269      ("popc ${cr2-32}")
   9270      (+ (f-0-4 #xD) (f-4-4 3) (f-8-4 2) (f-12-1 1) cr2-32)
   9271      (popc32-cr2-sem SI cr2-32)
   9272      ())
   9273 
   9274 (define-pmacro (pushc32-cr1-sem mode dst)
   9275   (sequence ()
   9276 	    (set (reg h-sp) (sub (reg h-sp) 2))
   9277 	    (case DFLT dst
   9278 		  ((#x0) (set (mem32 mode (reg h-sp)) (reg h-dct0)))
   9279 		  ((#x1) (set (mem32 mode (reg h-sp)) (reg h-dct1)))
   9280 		  ((#x2) (sequence ((HI tflag))
   9281 				   (set tflag 0)
   9282 				   (if (eq cbit 1) (set tflag (or tflag #x1)))
   9283 				   (if (eq dbit 1) (set tflag (or tflag #x2)))
   9284 				   (if (eq zbit 1) (set tflag (or tflag #x4)))
   9285 				   (if (eq sbit 1) (set tflag (or tflag #x8)))
   9286 				   (if (eq bbit 1) (set tflag (or tflag #x10)))
   9287 				   (if (eq obit 1) (set tflag (or tflag #x20)))
   9288 				   (if (eq ibit 1) (set tflag (or tflag #x40)))
   9289 				   (if (eq ubit 1) (set tflag (or tflag #x80)))
   9290 				   (set (mem32 mode (reg h-sp)) tflag)))
   9291 		  ((#x3) (set (mem32 mode (reg h-sp)) (reg h-svf)))
   9292 		  ((#x4) (set (mem32 mode (reg h-sp)) (reg h-drc0)))
   9293 		  ((#x5) (set (mem32 mode (reg h-sp)) (reg h-drc1)))
   9294 		  ((#x6) (set (mem32 mode (reg h-sp)) (reg h-dmd0)))
   9295 		  ((#x7) (set (mem32 mode (reg h-sp)) (reg h-dmd1)))
   9296 	    )
   9297   )
   9298 )
   9299 (define-pmacro (pushc32-cr2-sem mode dst)
   9300   (sequence ()
   9301 	    (set (reg h-sp) (sub (reg h-sp) 4))
   9302 	    (case DFLT dst
   9303 		  ((#x0) (set (mem32 mode (reg h-sp)) (reg h-intb)))
   9304 		  ((#x1) (set (mem32 mode (reg h-sp)) (reg h-sp)))
   9305 		  ((#x2) (set (mem32 mode (reg h-sp)) (reg h-sb)))
   9306 		  ((#x3) (set (mem32 mode (reg h-sp)) (reg h-fb)))
   9307 		  ((#x7) (set (mem32 mode (reg h-sp)) (reg h-isp)))
   9308 	    )
   9309   )
   9310 )
   9311 (define-pmacro (pushc16-sem mode dst)
   9312   (sequence ()
   9313 	    (set (reg h-sp) (sub (reg h-sp) 2))
   9314 	    (case DFLT dst
   9315 		  ((#x1) (set (mem16 mode (reg h-sp)) (and (reg h-intb) #xffff)))
   9316 		  ((#x2) (set (mem16 mode (reg h-sp)) (and (reg h-intb) #xffff0000)))
   9317 		  ((#x3) (sequence ((HI tflag))
   9318 				   (if (eq cbit 1) (set tflag (or tflag #x1)))
   9319 				   (if (eq dbit 1) (set tflag (or tflag #x2)))
   9320 				   (if (eq zbit 1) (set tflag (or tflag #x4)))
   9321 				   (if (eq sbit 1) (set tflag (or tflag #x8)))
   9322 				   (if (eq bbit 1) (set tflag (or tflag #x10)))
   9323 				   (if (eq obit 1) (set tflag (or tflag #x20)))
   9324 				   (if (eq ibit 1) (set tflag (or tflag #x40)))
   9325 				   (if (eq ubit 1) (set tflag (or tflag #x80)))
   9326 				   (set (mem16 mode (reg h-sp)) tflag)))
   9327 		   
   9328 		  ((#x4) (set (mem16 mode (reg h-sp)) (reg h-isp)))
   9329 		  ((#x5) (set (mem16 mode (reg h-sp)) (reg h-sp)))
   9330 		  ((#x6) (set (mem16 mode (reg h-sp)) (reg h-sb)))
   9331 		  ((#x7) (set (mem16 mode (reg h-sp)) (reg h-fb)))
   9332 	    )
   9333   )
   9334 )
   9335 ; pushc src (m16c)
   9336 (dni pushc16.imm16 "pushc dst" ((machine 16))
   9337      ("pushc ${cr16}")
   9338      (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-1 0) (f-12-4 2) cr16)
   9339      (pushc16-sem HI cr16)
   9340      ())
   9341 ; pushc src (m32c #1)
   9342 (dni pushc32.imm16-cr1 "pushc dst" ((machine 32))
   9343      ("pushc ${cr1-Unprefixed-32}")
   9344      (+ (f-0-4 #xD) (f-4-4 1) (f-8-4 #xA) (f-12-1 1) cr1-Unprefixed-32)
   9345      (pushc32-cr1-sem HI cr1-Unprefixed-32)
   9346      ())
   9347 ; pushc src (m32c #2)
   9348 (dni pushc32.imm16-cr2 "pushc dst" ((machine 32))
   9349      ("pushc ${cr2-32}")
   9350      (+ (f-0-4 #xD) (f-4-4 1) (f-8-4 2) (f-12-1 1) cr2-32)
   9351      (pushc32-cr2-sem SI cr2-32)
   9352      ())
   9353 
   9354 ;-------------------------------------------------------------
   9355 ; popm - pop multiple
   9356 ; pushm - push multiple
   9357 ;-------------------------------------------------------------
   9358 
   9359 (define-pmacro (popm-sem machine dst)
   9360      (sequence ((SI addrlen))
   9361 	       (if (eq machine 16)
   9362 		   (set addrlen 2)
   9363 		   (set addrlen 4))
   9364                (if (and dst 1)
   9365 		   (sequence () (set R0 (mem-mach machine HI (reg h-sp)))
   9366 			     (set (reg h-sp) (add (reg h-sp) 2))))
   9367                (if (and dst 2)
   9368 		   (sequence () (set R1 (mem-mach machine HI (reg h-sp)))
   9369 			     (set (reg h-sp) (add (reg h-sp) 2))))
   9370 	       (if (and dst 4)
   9371 		   (sequence () (set R2 (mem-mach machine HI (reg h-sp)))
   9372 			     (set (reg h-sp) (add (reg h-sp) 2))))
   9373                (if (and dst 8)
   9374 		   (sequence () (set R3 (mem-mach machine HI (reg h-sp)))
   9375 			     (set (reg h-sp) (add (reg h-sp) 2))))
   9376                (if (and dst 16)
   9377 		   (sequence () (set A0 (mem-mach machine HI (reg h-sp)))
   9378 			     (set (reg h-sp) (add (reg h-sp) addrlen))))
   9379                (if (and dst 32)
   9380 		   (sequence () (set A1 (mem-mach machine HI (reg h-sp)))
   9381 			     (set (reg h-sp) (add (reg h-sp) addrlen))))
   9382                (if (and dst 64)
   9383 		   (sequence () (set (reg h-sb) (mem-mach machine HI (reg h-sp)))
   9384 			     (set (reg h-sp) (add (reg h-sp) addrlen))))
   9385                (if (eq dst 128)
   9386 		   (sequence () (set (reg h-fb) (mem-mach machine HI (reg h-sp)))
   9387 			     (set (reg h-sp) (add (reg h-sp) addrlen))))
   9388 	       )
   9389 )
   9390 
   9391 (define-pmacro (pushm-sem machine dst)
   9392      (sequence ((SI count) (SI addrlen))
   9393 	       (if (eq machine 16)
   9394 		   (set addrlen 2)
   9395 		   (set addrlen 4))
   9396                (if (eq dst 1)
   9397 		   (sequence () (set (reg h-sp) (sub (reg h-sp) addrlen))
   9398 			     (set (mem-mach machine HI (reg h-sp)) (reg h-fb))))
   9399                (if (and dst 2)
   9400 		   (sequence () (set (reg h-sp) (sub (reg h-sp) addrlen))
   9401 			     (set (mem-mach machine HI (reg h-sp)) (reg h-sb))))
   9402                (if (and dst 4)
   9403 		   (sequence () (set (reg h-sp) (sub (reg h-sp) addrlen))
   9404 			     (set (mem-mach machine HI (reg h-sp)) A1)))
   9405                (if (and dst 8)
   9406 		   (sequence () (set (reg h-sp) (sub (reg h-sp) addrlen))
   9407 			     (set (mem-mach machine HI (reg h-sp)) A0)))
   9408                (if (and dst 16)
   9409 		   (sequence () (set (reg h-sp) (sub (reg h-sp) 2))
   9410 			     (set (mem-mach machine HI (reg h-sp)) R3)))
   9411 	       (if (and dst 32)
   9412 		   (sequence () (set (reg h-sp) (sub (reg h-sp) 2))
   9413 			     (set (mem-mach machine HI (reg h-sp)) R2)))
   9414                (if (and dst 64)
   9415 		   (sequence () (set (reg h-sp) (sub (reg h-sp) 2))
   9416 			     (set (mem-mach machine HI (reg h-sp)) R1)))
   9417                (if (and dst 128)
   9418 		   (sequence () (set (reg h-sp) (sub (reg h-sp) 2))
   9419 			     (set (mem-mach machine HI (reg h-sp)) R0)))
   9420 	       )
   9421 )
   9422 
   9423 (dni popm16 "popm regs" ((machine 16))
   9424      ("popm ${Regsetpop}")
   9425      (+ (f-0-4 #xE) (f-4-4 #xD) Regsetpop)
   9426      (popm-sem 16 Regsetpop)
   9427      ())
   9428 (dni pushm16 "pushm regs" ((machine 16))
   9429      ("pushm ${Regsetpush}")
   9430      (+ (f-0-4 #xE) (f-4-4 #xC) Regsetpush)
   9431      (pushm-sem 16 Regsetpush)
   9432      ())
   9433 (dni popm "popm regs" ((machine 32))
   9434      ("popm ${Regsetpop}")
   9435      (+ (f-0-4 #x8) (f-4-4 #xE) Regsetpop)
   9436      (popm-sem 32 Regsetpop)
   9437      ())
   9438 (dni pushm "pushm regs" ((machine 32))
   9439      ("pushm ${Regsetpush}")
   9440      (+ (f-0-4 #x8) (f-4-4 #xF) Regsetpush)
   9441      (pushm-sem 32 Regsetpush)
   9442      ())
   9443 
   9444 ;-------------------------------------------------------------
   9445 ; push - Save register/memory/immediate data
   9446 ;-------------------------------------------------------------
   9447 
   9448 ; TODO future: split this into .b and .w semantics
   9449 (define-pmacro (push-sem-mach mach mode dst)
   9450   (sequence ((mode b_or_w) (SI length))
   9451 	    (set b_or_w -1)
   9452 	    (set b_or_w (srl b_or_w #x8))
   9453 	    (if (eq b_or_w #x0)
   9454 		(set length 1)    ; .b
   9455 		(if (eq b_or_w #xff)
   9456 		    (set length 2)   ; .w
   9457 		    (set length 4))) ; .l
   9458 	    (set (reg h-sp) (sub (reg h-sp) length))
   9459 	    (case DFLT length
   9460 		  ((1) (set (mem-mach mach QI (reg h-sp)) dst))
   9461 		  ((2) (set (mem-mach mach HI (reg h-sp)) dst))
   9462 		  ((4) (set (mem-mach mach SI (reg h-sp)) dst)))
   9463 	    )
   9464   )
   9465 
   9466 (define-pmacro (push-sem16 mode dst) (push-sem-mach 16 mode dst))
   9467 (define-pmacro (push-sem32 mode dst) (push-sem-mach 32 mode dst))
   9468 
   9469 ; push.BW:G imm (m16 #1 m32 #1)
   9470 (dni push16.b.G-imm "push.b:G #Imm-16-QI" ((machine 16))
   9471      ("push.b$G #${Imm-16-QI}")
   9472      (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 2) Imm-16-QI)
   9473      (push-sem16 QI Imm-16-QI)
   9474      ())
   9475  
   9476 (dni push16.w.G-imm "push.w:G #Imm-16-HI" ((machine 16))
   9477      ("push.w$G #${Imm-16-HI}")
   9478      (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 2) Imm-16-HI)
   9479      (push-sem16 HI Imm-16-HI)
   9480      ())
   9481 
   9482 (dni push32.b.imm "push.b #Imm-8-QI" ((machine 32))
   9483      ("push.b #${Imm-8-QI}")
   9484      (+ (f-0-4 #xA) (f-4-4 #xE) Imm-8-QI)
   9485      (push-sem32 QI Imm-8-QI)
   9486      ())
   9487  
   9488 (dni push32.w.imm "push.w #Imm-8-HI" ((machine 32))
   9489      ("push.w #${Imm-8-HI}")
   9490      (+ (f-0-4 #xA) (f-4-4 #xF) Imm-8-HI)
   9491      (push-sem32 HI Imm-8-HI)
   9492      ())
   9493 
   9494 ; push.BW:G src (m16 #2)
   9495 (unary-insn-mach-g 16 push (f-0-4 7) (f-4-3 2) (f-8-4 #x4) push-sem16 $G)
   9496 ; push.BW:G src (m32 #2)
   9497 (unary-insn-mach 32 push #xC #x0 #xE push-sem32)
   9498 
   9499 
   9500 ; push.b:S r0l/r0h (m16 #3)
   9501 (dni push16.b-s-rn  "push.b:S r0[lh]" ((machine 16))
   9502      "push.b$S ${Rn16-push-S-anyof}"
   9503      (+ (f-0-4 #x8) Rn16-push-S-anyof (f-5-3 #x2))
   9504      (push-sem16 QI Rn16-push-S-anyof)
   9505      ())
   9506 ; push.w:S a0/a1 (m16 #4)
   9507 (dni push16.b-s-an  "push.w:S a[01]" ((machine 16))
   9508      "push.w$S ${An16-push-S-anyof}"
   9509      (+ (f-0-4 #xC) An16-push-S-anyof (f-5-3 #x2))
   9510      (push-sem16 HI An16-push-S-anyof)
   9511      ())
   9512 
   9513 ; push.l imm32 (m32 #3)
   9514 (dni push32.l.imm "push.l #Imm-16-SI" ((machine 32))
   9515      ("push.l #${Imm-16-SI}")
   9516      (+ (f-0-4 #xB) (f-4-4 6) (f-8-4 5) (f-12-4 3) Imm-16-SI)
   9517      (push-sem32 SI Imm-16-SI)
   9518      ())
   9519 ; push.l src (m32 #4)
   9520 (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)
   9521 
   9522 ;-------------------------------------------------------------
   9523 ; pusha - push effective address
   9524 ;------------------------------------------------------------
   9525 
   9526 (define-pmacro (push16a-sem mode dst)
   9527   (sequence ()
   9528 	    (set (reg h-sp) (sub (reg h-sp) 2))
   9529 	    (set (mem16 HI (reg h-sp)) dst))
   9530 )
   9531 (define-pmacro (push32a-sem mode dst)
   9532   (sequence ()
   9533 	    (set (reg h-sp) (sub (reg h-sp) 4))
   9534 	    (set (mem32 SI (reg h-sp)) dst))
   9535 )
   9536 (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)
   9537 (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)
   9538 
   9539 ;-------------------------------------------------------------
   9540 ; reit - return from interrupt
   9541 ;-------------------------------------------------------------
   9542 
   9543 ; ??? semantics
   9544 (dni reit16 "REIT" ((machine 16))
   9545      ("reit")
   9546      (+ (f-0-4 #xF) (f-4-4 #xB))
   9547      (nop)
   9548      ())
   9549 (dni reit32 "REIT" ((machine 32))
   9550      ("reit")
   9551      (+ (f-0-4 9) (f-4-4 #xE))
   9552      (nop)
   9553      ())
   9554 
   9555 ;-------------------------------------------------------------
   9556 ; rmpa - repeat multiple and addition
   9557 ;-------------------------------------------------------------
   9558 
   9559 ; TODO semantics
   9560 (dni rmpa16.b "rmpa.size" ((machine 16))
   9561      ("rmpa.b")
   9562      (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xF) (f-12-4 1))
   9563      (nop)
   9564      ())
   9565 (dni rmpa16.w "rmpa.size" ((machine 16))
   9566      ("rmpa.w")
   9567      (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xF) (f-12-4 1))
   9568      (nop)
   9569      ())
   9570 (dni rmpa32.b "rmpa.size" ((machine 32))
   9571      ("rmpa.b")
   9572      (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 4) (f-12-4 3))
   9573      (nop)
   9574      ())
   9575  
   9576 (dni rmpa32.w "rmpa.size" ((machine 32))
   9577      ("rmpa.w")
   9578      (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 5) (f-12-4 3))
   9579      (nop)
   9580      ())
   9581 
   9582 ;-------------------------------------------------------------
   9583 ; rolc - rotate left with carry
   9584 ;-------------------------------------------------------------
   9585 
   9586 ; TODO check semantics
   9587 ; TODO future: split this into .b and .w semantics
   9588 (define-pmacro (rolc-sem mode dst)
   9589   (sequence ((mode result) (SI ocbit) (mode b_or_w) (USI mask))
   9590 	    (set b_or_w -1)
   9591 	    (set b_or_w (srl b_or_w #x8))
   9592 	    (if (eq b_or_w #x0)
   9593 		(set mask #x8000)      ; .b
   9594 		(set mask #x80000000)) ; .w
   9595 	    (set ocbit cbit)
   9596 	    (set cbit (and dst mask))
   9597 	    (set result (sll mode dst 1))
   9598 	    (set result (or result ocbit))
   9599 	    (set-z-and-s result)
   9600 	    (set dst result))
   9601 )
   9602 ; rolc.BW src,dst
   9603 (unary-insn rolc (f-0-4 7) (f-4-3 3) (f-8-4 #xA) #xB #x2 #xE rolc-sem)
   9604 
   9605 ;-------------------------------------------------------------
   9606 ; rorc - rotate right with carry
   9607 ;-------------------------------------------------------------
   9608 
   9609 ; TODO check semantics
   9610 ; TODO future: split this into .b and .w semantics
   9611 (define-pmacro (rorc-sem mode dst)
   9612   (sequence ((mode result) (SI ocbit) (mode b_or_w) (USI mask) (SI shamt))
   9613 	    (set b_or_w -1)
   9614 	    (set b_or_w (srl b_or_w #x8))
   9615 	    (if (eq b_or_w #x0)
   9616 		(sequence () (set mask #x7fff) (set shamt 15))     ; .b
   9617 		(sequence () (set mask #x7fffffff) (set shamt 31))) ; .w
   9618 	    (set ocbit cbit)
   9619 	    (set cbit (and dst #x1))
   9620 	    (set result (srl mode dst (const 1)))
   9621 	    (set result (or (and result mask) (sll ocbit shamt)))
   9622 	    (set-z-and-s result)
   9623 	    (set dst result))
   9624 )
   9625 ; rorc.BW src,dst
   9626 (unary-insn rorc (f-0-4 7) (f-4-3 3) (f-8-4 #xB) #xA #x2 #xE rorc-sem)
   9627 
   9628 ;-------------------------------------------------------------
   9629 ; rot - rotate
   9630 ;-------------------------------------------------------------
   9631 
   9632 ; TODO future: split this into .b and .w semantics
   9633 (define-pmacro (rot-1-sem mode src1 dst)
   9634   (sequence ((mode tmp) (mode b_or_w) (USI mask) (SI shift))
   9635 	    (case DFLT src1
   9636 		  ((#x0) (set shift 1))
   9637 		  ((#x1) (set shift 2))
   9638 		  ((#x2) (set shift 3))
   9639 		  ((#x3) (set shift 4))
   9640 		  ((#x4) (set shift 5))
   9641 		  ((#x5) (set shift 6))
   9642 		  ((#x6) (set shift 7))
   9643 		  ((#x7) (set shift 8))
   9644 		  ((-8) (set shift -1))
   9645 		  ((-7) (set shift -2))
   9646 		  ((-6) (set shift -3))
   9647 		  ((-5) (set shift -4))
   9648 		  ((-4) (set shift -5))
   9649 		  ((-3) (set shift -6))
   9650 		  ((-2) (set shift -7))
   9651 		  ((-1) (set shift -8))
   9652 		  (else (set shift 0))
   9653 		  )
   9654 	    (set b_or_w -1)
   9655 	    (set b_or_w (srl b_or_w #x8))
   9656 	    (if (eq b_or_w #x0)
   9657 		(set mask #x7fff)     ; .b
   9658 		(set mask #x7fffffff)) ; .w
   9659 	    (set tmp dst)
   9660 	    (if (gt mode shift 0)
   9661 		(sequence ()
   9662 			  (set tmp (rol mode tmp shift))
   9663 			  (set cbit (and tmp #x1)))
   9664 		(sequence ()
   9665 			  (set tmp (ror mode tmp (mul shift -1)))
   9666 			  (set cbit (and tmp mask))))
   9667 	    (set-z-and-s tmp)
   9668 	    (set dst tmp))
   9669 )
   9670 (define-pmacro (rot-2-sem mode dst)
   9671   (sequence ((mode tmp) (mode b_or_w) (USI mask))
   9672 	    (set b_or_w -1)
   9673 	    (set b_or_w (srl b_or_w #x8))
   9674 	    (if (eq b_or_w #x0)
   9675 		(set mask #x7fff)     ; .b
   9676 		(set mask #x7fffffff)) ; .w
   9677 	    (set tmp dst)
   9678 	    (if (gt mode (reg h-r1h) 0)
   9679 		(sequence ()
   9680 			  (set tmp (rol mode tmp (reg h-r1h)))
   9681 			  (set cbit (and tmp #x1)))
   9682 		(sequence ()
   9683 			  (set tmp (ror mode tmp (reg h-r1h)))
   9684 			  (set cbit (and tmp mask))))
   9685 	    (set-z-and-s tmp)
   9686 	    (set dst tmp))
   9687 )
   9688 
   9689 ; rot.BW #imm4,dst
   9690 (binary-arith16-shimm4-dst-defn QI .b 0 0 rot (f-0-4 #xE) (f-4-3 0) rot-1-sem)
   9691 (binary-arith16-shimm4-dst-defn HI .w 0 1 rot (f-0-4 #xE) (f-4-3 0) rot-1-sem)
   9692 (binary-arith32-shimm4-dst-defn QI .b 0 0 rot #x7 #x2 rot-1-sem)
   9693 (binary-arith32-shimm4-dst-defn HI .w 0 1 rot #x7 #x2 rot-1-sem)
   9694 ; rot.BW src,dst
   9695 
   9696 (dni rot16.b-dst "rot r1h,dest" ((machine 16))
   9697      ("rot.b r1h,${dst16-16-QI}")
   9698      (+ (f-0-4 7) (f-4-4 #x4) (f-8-4 #x6) dst16-16-QI)
   9699      (rot-2-sem QI dst16-16-QI)
   9700      ())
   9701 (dni rot16.w-dst "rot r1h,dest" ((machine 16))
   9702      ("rot.w r1h,${dst16-16-HI}")
   9703      (+ (f-0-4 7) (f-4-4 #x5) (f-8-4 #x6) dst16-16-HI)
   9704      (rot-2-sem HI dst16-16-HI)
   9705      ())
   9706  
   9707 (dni rot32.b-dst "rot r1h,dest" ((machine 32))
   9708      ("rot.b r1h,${dst32-16-Unprefixed-QI}")
   9709      (+ (f-0-4 #xA) dst32-16-Unprefixed-QI (f-7-1 0) (f-10-2 3) (f-12-4 #xF))
   9710      (rot-2-sem QI dst32-16-Unprefixed-QI)
   9711      ())
   9712 (dni rot32.w-dst "rot r1h,dest" ((machine 32))
   9713      ("rot.w r1h,${dst32-16-Unprefixed-HI}")
   9714      (+ (f-0-4 #xA) dst32-16-Unprefixed-HI (f-7-1 1) (f-10-2 3) (f-12-4 #xF))
   9715      (rot-2-sem HI dst32-16-Unprefixed-HI)
   9716      ())
   9717 
   9718 ;-------------------------------------------------------------
   9719 ; rts - return from subroutine
   9720 ;-------------------------------------------------------------
   9721 
   9722 (define-pmacro (rts16-sem)
   9723   (sequence ((SI tpc))
   9724 	    (set tpc (mem16 HI (reg h-sp)))
   9725 	    (set (reg h-sp) (add (reg h-sp) 2))
   9726 	    (set tpc (or tpc (sll (mem16 QI (reg h-sp)) 16)))
   9727 	    (set (reg h-sp) (add (reg h-sp) 1))
   9728 	    (set pc tpc)
   9729 	    )
   9730 )
   9731 (define-pmacro (rts32-sem)
   9732   (sequence ((SI tpc))
   9733 	    (set tpc (mem32 HI (reg h-sp)))
   9734 	    (set (reg h-sp) (add (reg h-sp) 2))
   9735 	    (set tpc (or tpc (sll (mem32 HI (reg h-sp)) 16)))
   9736 	    (set (reg h-sp) (add (reg h-sp) 2))
   9737 	    (set pc tpc)
   9738 	    )
   9739 )
   9740 
   9741 (dni rts16 "rts" ((machine 16))
   9742      ("rts")
   9743      (+ (f-0-4 #xF) (f-4-4 3))
   9744      (rts16-sem)
   9745      ())
   9746 
   9747 (dni rts32 "rts" ((machine 32))
   9748      ("rts")
   9749      (+ (f-0-4 #xD) (f-4-4 #xF))
   9750      (rts32-sem)
   9751      ())
   9752 
   9753 ;-------------------------------------------------------------
   9754 ; sbb - subtract with borrow
   9755 ;-------------------------------------------------------------
   9756 
   9757 (define-pmacro (sbb-sem mode src dst)
   9758   (sequence ((mode result))
   9759 	    (set result (subc mode dst src cbit))
   9760 	    (set obit (add-oflag mode dst src cbit))
   9761 	    (set cbit (add-oflag mode dst src cbit))
   9762 	    (set-z-and-s result)
   9763 	    (set dst result))
   9764 )
   9765 
   9766 ; sbb.size:G #imm,dst
   9767 (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)
   9768 (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)
   9769 (binary-arith32-imm-dst-Prefixed QI QI .b 0 sbb X #x9 #x2 #xE sbb-sem)
   9770 (binary-arith32-imm-dst-Prefixed HI HI .w 1 sbb X #x9 #x2 #xE sbb-sem)
   9771 
   9772 ; sbb.BW:G src,dst
   9773 (binary-arith16-src-dst-defn QI QI .b 0 sbb X (f-0-4 #xB) (f-4-3 4) sbb-sem)
   9774 (binary-arith16-src-dst-defn HI HI .w 1 sbb X (f-0-4 #xB) (f-4-3 4) sbb-sem)
   9775 (binary-arith32-src-dst-Prefixed QI QI .b 0 sbb X #x1 #x6 sbb-sem)
   9776 (binary-arith32-src-dst-Prefixed HI HI .w 1 sbb X #x1 #x6 sbb-sem)
   9777 
   9778 ;-------------------------------------------------------------
   9779 ; sbjnz - subtract then jump on not zero
   9780 ;-------------------------------------------------------------
   9781 
   9782 (define-pmacro (sub-jnz-sem mode src dst label)
   9783   (sequence ((mode result))
   9784 	    (set result (sub mode dst src))
   9785 	    (set dst result)
   9786 	    (if (ne result 0)
   9787 		(set pc label)))
   9788 )
   9789 
   9790 ; sbjnz.size #imm4,dst,label
   9791 (arith-jnz-imm4-dst sbjnz s4n (f-0-4 #xF) (f-4-3 4) #xf #x1 sub-jnz-sem)
   9792 
   9793 ;-------------------------------------------------------------
   9794 ; sccnd - store condition on condition (m32)
   9795 ;-------------------------------------------------------------
   9796 
   9797 (define-pmacro (sccnd-sem cnd dst)
   9798   (sequence ()
   9799 	    (set dst 0)
   9800 	    (case DFLT cnd
   9801 		  ((#x00) (if (not cbit) (set dst 1))) ;ltu nc
   9802 		  ((#x01) (if (or cbit zbit) (set dst 1))) ;leu
   9803 		  ((#x02) (if (not zbit) (set dst 1))) ;ne nz
   9804 		  ((#x03) (if (not sbit) (set dst 1))) ;pz
   9805 		  ((#x04) (if (not obit) (set dst 1))) ;no
   9806 		  ((#x05) (if (not (or zbit (xor sbit obit))) (set dst 1))) ;gt
   9807 		  ((#x06) (if (xor sbit obit) (set dst 1))) ;ge
   9808 		  ((#x08) (if (trunc BI cbit) (set dst 1))) ;geu c
   9809 		  ((#x09) (if (not (or cbit zbit)) (set dst 1))) ;gtu
   9810 		  ((#x0a) (if (trunc BI zbit) (set dst 1))) ;eq z
   9811 		  ((#x0b) (if (trunc BI sbit) (set dst 1))) ;n
   9812 		  ((#x0c) (if (trunc BI obit) (set dst 1))) ;o
   9813 		  ((#x0d) (if (or zbit (xor sbit obit)) (set dst 1))) ;le
   9814 		  ((#x0e) (if (xor sbit obit) (set dst 1))) ;lt
   9815 		  )
   9816 	)
   9817   )
   9818 
   9819 ; scCND dst
   9820 (dni sccnd
   9821      "sccnd dst"
   9822      ((machine 32))
   9823      "sc$sccond32 ${dst32-16-Unprefixed-HI}"
   9824      (+ (f-0-4 #xD) dst32-16-Unprefixed-HI (f-7-1 1) (f-10-2 3) sccond32)
   9825      (sccnd-sem sccond32 dst32-16-Unprefixed-HI)
   9826      ())
   9827 
   9828 ;-------------------------------------------------------------
   9829 ; scmpu - string compare unequal (m32)
   9830 ;-------------------------------------------------------------
   9831 
   9832 ; TODO semantics
   9833 (dni scmpu.b "scmpu.b" ((machine 32))
   9834      ("scmpu.b")
   9835      (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 #xC) (f-12-4 3))
   9836      (c-call VOID "scmpu_QI_semantics")
   9837      ())
   9838 
   9839 (dni scmpu.w "scmpu.w" ((machine 32))
   9840      ("scmpu.w")
   9841      (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 #xD) (f-12-4 3))
   9842      (c-call VOID "scmpu_HI_semantics")
   9843      ())
   9844 
   9845 ;-------------------------------------------------------------
   9846 ; sha - shift arithmetic
   9847 ;-------------------------------------------------------------
   9848 
   9849 ; TODO future: split this into .b and .w semantics
   9850 (define-pmacro (sha-sem mode src1 dst)
   9851   (sequence ((mode result)(mode shift)(mode shmode))
   9852 	     (case DFLT src1
   9853 		   ((#x0) (set shift 1))
   9854 		   ((#x1) (set shift 2))
   9855 		   ((#x2) (set shift 3))
   9856 		   ((#x3) (set shift 4))
   9857 		   ((#x4) (set shift 5))
   9858 		   ((#x5) (set shift 6))
   9859 		   ((#x6) (set shift 7))
   9860 		   ((#x7) (set shift 8))
   9861 		   ((-8) (set shift -1))
   9862 		   ((-7) (set shift -2))
   9863 		   ((-6) (set shift -3))
   9864 		   ((-5) (set shift -4))
   9865 		   ((-4) (set shift -5))
   9866 		   ((-3) (set shift -6))
   9867 		   ((-2) (set shift -7))
   9868 		   ((-1) (set shift -8))
   9869 		   (else (set shift 0))
   9870 		   )
   9871 	     (set shmode -1)
   9872 	     (set shmode (srl shmode #x8))
   9873 	     (if (lt mode shift #x0) (set result (sra mode dst (mul shift -1))))
   9874 	     (if (gt mode shift 0) (set result (sll mode dst shift)))
   9875 	     (if (eq shmode #x0) ; QI
   9876 		 (sequence
   9877 		   ((mode cbitamt))
   9878 		    (if (lt mode shift #x0)
   9879 			(set cbitamt (sub #x8 shift)) ; sra
   9880 			(set cbitamt (sub shift 1)))  ; sll
   9881 		    (set cbit (srl (and (sll dst cbitamt) #x80) #x7))
   9882 		    (set obit (ne (and dst #x80) (and result #x80)))
   9883 		    ))
   9884 	     (if (eq shmode #xff) ; HI
   9885 		 (sequence
   9886 		   ((mode cbitamt))
   9887 		    (if (lt mode shift #x0)
   9888 			(set cbitamt (sub 16 shift)) ; sra
   9889 			(set cbitamt (sub shift 1))) ; sll
   9890 		    (set cbit (srl (and (sll dst cbitamt) #x8000) #xf))
   9891 		    (set obit (ne (and dst #x8000) (and result #x8000)))
   9892 		    ))
   9893 	    (set-z-and-s result)
   9894 	    (set dst result))
   9895 )
   9896 (define-pmacro (shar1h-sem mode dst)
   9897   (sequence ((mode result)(mode shmode))
   9898 	     (set shmode -1)
   9899 	     (set shmode (srl shmode #x8))
   9900 	     (if (lt mode (reg h-r1h) 0) (set result (sra mode dst (reg h-r1h))))
   9901 	     (if (gt mode (reg h-r1h) 0) (set result (sll mode dst (reg h-r1h))))
   9902 	     (if (eq shmode #x0) ; QI
   9903 		 (sequence
   9904 		   ((mode cbitamt))
   9905 		    (if (lt mode (reg h-r1h) #x0)
   9906 			(set cbitamt (sub #x8 (reg h-r1h))) ; sra
   9907 			(set cbitamt (sub (reg h-r1h) 1)))  ; sll
   9908 		    (set cbit (srl (and (sll dst cbitamt) #x80) #x7))
   9909 		    (set obit (ne (and dst #x80) (and result #x80)))
   9910 		    ))
   9911 	     (if (eq shmode #xff) ; HI
   9912 		 (sequence
   9913 		   ((mode cbitamt))
   9914 		    (if (lt mode (reg h-r1h) #x0)
   9915 			(set cbitamt (sub 16 (reg h-r1h))) ; sra
   9916 			(set cbitamt (sub (reg h-r1h) 1))) ; sll
   9917 		    (set cbit (srl (and (sll dst cbitamt) #x8000) #xf))
   9918 		    (set obit (ne (and dst #x8000) (and result #x8000)))
   9919 		    ))
   9920 	    (set-z-and-s result)
   9921 	    (set dst result))
   9922 )
   9923 ; sha.BW #imm4,dst (m16 #1 m32 #1)
   9924 (binary-arith16-shimm4-dst-defn QI .b 0 0 sha (f-0-4 #xF) (f-4-3 0) sha-sem)
   9925 (binary-arith16-shimm4-dst-defn HI .w 0 1 sha (f-0-4 #xF) (f-4-3 0) sha-sem)
   9926 (binary-arith32-shimm4-dst-defn QI .b 1 0 sha #x7 #x0 sha-sem)
   9927 (binary-arith32-shimm4-dst-defn HI .w 1 1 sha #x7 #x0 sha-sem)
   9928 ; sha.BW r1h,dst (m16 #2 m32 #3)
   9929 (dni sha16.b-dst "sha.b r1h,dest" ((machine 16))
   9930      ("sha.b r1h,${dst16-16-QI}")
   9931      (+ (f-0-4 7) (f-4-4 4) (f-8-4 #xF) dst16-16-QI)
   9932      (shar1h-sem HI dst16-16-QI)
   9933      ())
   9934 (dni sha16.w-dst "sha.w r1h,dest" ((machine 16))
   9935      ("sha.w r1h,${dst16-16-HI}")
   9936      (+ (f-0-4 7) (f-4-4 5) (f-8-4 #xF) dst16-16-HI)
   9937      (shar1h-sem HI dst16-16-HI)
   9938      ())
   9939 (dni sha32.b-dst "sha.b r1h,dest" ((machine 32))
   9940      ("sha.b r1h,${dst32-16-Unprefixed-QI}")
   9941      (+ (f-0-4 #xB) dst32-16-Unprefixed-QI (f-7-1 0) (f-10-2 3) (f-12-4 #xE))
   9942      (shar1h-sem QI dst32-16-Unprefixed-QI)
   9943      ())
   9944 (dni sha32.w-dst "sha.w r1h,dest" ((machine 32))
   9945      ("sha.w r1h,${dst32-16-Unprefixed-HI}")
   9946      (+ (f-0-4 #xB) dst32-16-Unprefixed-HI (f-7-1 1) (f-10-2 3) (f-12-4 #xE))
   9947      (shar1h-sem HI dst32-16-Unprefixed-HI)
   9948      ())
   9949 ; sha.L #imm,dst (m16 #3)
   9950 (dni sha16-L-imm-r2r0 "sha.L #Imm-sh-12-s4,r2r0" ((machine 16))
   9951      "sha.l #${Imm-sh-12-s4},r2r0"
   9952      (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 #xA) Imm-sh-12-s4)
   9953      (sha-sem SI Imm-sh-12-s4 (reg h-r2r0))
   9954      ())
   9955 (dni sha16-L-imm-r3r1 "sha.L #Imm-sh-12-s4,r3r1" ((machine 16))
   9956      "sha.l #${Imm-sh-12-s4},r3r1"
   9957      (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 #xB) Imm-sh-12-s4)
   9958      (sha-sem SI Imm-sh-12-s4 (reg h-r3r1))
   9959      ())
   9960 ; sha.L r1h,dst (m16 #4)
   9961 (dni sha16-L-r1h-r2r0 "sha.L r1h,r2r0" ((machine 16))
   9962      "sha.l r1h,r2r0"
   9963      (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 2) (f-12-4 1))
   9964      (sha-sem SI (reg h-r1h) (reg h-r2r0))
   9965      ())
   9966 (dni sha16-L-r1h-r3r1 "sha.L r1h,r3r1" ((machine 16))
   9967      "sha.l r1h,r3r1"
   9968      (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 3) (f-12-4 1))
   9969      (sha-sem SI (reg h-r1h) (reg h-r3r1))
   9970      ())
   9971 ; sha.L #imm8,dst (m32 #2)
   9972 (binary-arith32-imm-dst-defn QI SI .l 0 sha X #xA #x2 #x1 sha-sem)
   9973 ; sha.L r1h,dst (m32 #4)
   9974 (dni sha32.l-dst "sha.l r1h,dest" ((machine 32))
   9975      ("sha.l r1h,${dst32-16-Unprefixed-SI}")
   9976      (+ (f-0-4 #xC) dst32-16-Unprefixed-SI (f-7-1 0) (f-10-2 1) (f-12-4 1))
   9977      (shar1h-sem QI dst32-16-Unprefixed-SI)
   9978      ())
   9979 
   9980 ;-------------------------------------------------------------
   9981 ; shanc - shift arithmetic non carry (m32)
   9982 ;-------------------------------------------------------------
   9983 
   9984 ; TODO check semantics
   9985 ; shanc.L #imm8,dst
   9986 (binary-arith32-imm-dst-defn QI SI .l 0 shanc X #xC #x2 #x1 sha-sem)
   9987 
   9988 ;-------------------------------------------------------------
   9989 ; shl - shift logical
   9990 ;-------------------------------------------------------------
   9991 
   9992 ; TODO future: split this into .b and .w semantics
   9993 (define-pmacro (shl-sem mode src1 dst)
   9994   (sequence ((mode result)(mode shift)(mode shmode))
   9995 	    (case DFLT src1
   9996 		  ((#x0) (set shift 1))
   9997 		  ((#x1) (set shift 2))
   9998 		  ((#x2) (set shift 3))
   9999 		  ((#x3) (set shift 4))
   10000 		  ((#x4) (set shift 5))
   10001 		  ((#x5) (set shift 6))
   10002 		  ((#x6) (set shift 7))
   10003 		  ((#x7) (set shift 8))
   10004 		  ((-8) (set shift -1))
   10005 		  ((-7) (set shift -2))
   10006 		  ((-6) (set shift -3))
   10007 		  ((-5) (set shift -4))
   10008 		  ((-4) (set shift -5))
   10009 		  ((-3) (set shift -6))
   10010 		  ((-2) (set shift -7))
   10011 		  ((-1) (set shift -8))
   10012 		  (else (set shift 0))
   10013 		  )
   10014 	    (set shmode -1)
   10015 	    (set shmode (srl shmode #x8))
   10016 	    (if (lt mode shift #x0) (set result (srl mode dst (mul shift -1))))
   10017 	    (if (gt mode shift 0) (set result (sll mode dst shift)))
   10018 	    (if (eq shmode #x0) ; QI
   10019 		(sequence
   10020 		  ((mode cbitamt))
   10021 		  (if (lt mode shift #x0)
   10022 		      (set cbitamt (sub #x8 shift)); srl
   10023 		      (set cbitamt (sub shift 1))) ; sll
   10024 		  (set cbit (srl (and (sll dst cbitamt) #x80) #x7))
   10025 		  (set obit (ne (and dst #x80) (and result #x80)))
   10026 		  ))
   10027 	    (if (eq shmode #xff) ; HI
   10028 		(sequence
   10029 		  ((mode cbitamt))
   10030 		  (if (lt mode shift #x0)
   10031 		      (set cbitamt (sub 16 shift)) ; srl
   10032 		      (set cbitamt (sub shift 1))) ; sll
   10033 		  (set cbit (srl (and (sll dst cbitamt) #x8000) #xf))
   10034 		  (set obit (ne (and dst #x8000) (and result #x8000)))
   10035 		  ))
   10036 	    (set-z-and-s result)
   10037 	    (set dst result))
   10038   )
   10039 (define-pmacro (shlr1h-sem mode dst)
   10040   (sequence ((mode result)(mode shmode))
   10041 	    (set shmode -1)
   10042 	    (set shmode (srl shmode #x8))
   10043 	    (if (lt mode (reg h-r1h) 0) (set result (srl mode dst (reg h-r1h))))
   10044 	    (if (gt mode (reg h-r1h) 0) (set result (sll mode dst (reg h-r1h))))
   10045 	    (if (eq shmode #x0) ; QI
   10046 		(sequence
   10047 		  ((mode cbitamt))
   10048 		  (if (lt mode (reg h-r1h) #x0)
   10049 		      (set cbitamt (sub #x8 (reg h-r1h))) ; srl
   10050 		      (set cbitamt (sub (reg h-r1h) 1)))  ; sll
   10051 		  (set cbit (srl (and (sll dst cbitamt) #x80) #x7))
   10052 		  (set obit (ne (and dst #x80) (and result #x80)))
   10053 		  ))
   10054 	    (if (eq shmode #xff) ; HI
   10055 		(sequence
   10056 		  ((mode cbitamt))
   10057 		  (if (lt mode (reg h-r1h) #x0)
   10058 		      (set cbitamt (sub 16 (reg h-r1h))) ; srl
   10059 		      (set cbitamt (sub (reg h-r1h) 1))) ; sll
   10060 		  (set cbit (srl (and (sll dst cbitamt) #x8000) #xf))
   10061 		  (set obit (ne (and dst #x8000) (and result #x8000)))
   10062 		  ))
   10063 	    (set-z-and-s result)
   10064 	    (set dst result))
   10065   )
   10066 ; shl.BW #imm4,dst (m16 #1 m32 #1)
   10067 (binary-arith16-shimm4-dst-defn QI .b 0 0 shl (f-0-4 #xE) (f-4-3 4) shl-sem)
   10068 (binary-arith16-shimm4-dst-defn HI .w 0 1 shl (f-0-4 #xE) (f-4-3 4) shl-sem)
   10069 (binary-arith32-shimm4-dst-defn QI .b 0 0 shl #x7 #x0 shl-sem)
   10070 (binary-arith32-shimm4-dst-defn HI .w 0 1 shl #x7 #x0 shl-sem)
   10071 ; shl.BW r1h,dst (m16 #2 m32 #3)
   10072 (dni shl16.b-dst "shl.b r1h,dest" ((machine 16))
   10073      ("shl.b r1h,${dst16-16-QI}")
   10074      (+ (f-0-4 7) (f-4-4 4) (f-8-4 #xE) dst16-16-QI)
   10075      (shlr1h-sem HI dst16-16-QI)
   10076      ())
   10077 (dni shl16.w-dst "shl.w r1h,dest" ((machine 16))
   10078      ("shl.w r1h,${dst16-16-HI}")
   10079      (+ (f-0-4 7) (f-4-4 5) (f-8-4 #xE) dst16-16-HI)
   10080      (shlr1h-sem HI dst16-16-HI)
   10081      ())
   10082 (dni shl32.b-dst "shl.b r1h,dest" ((machine 32))
   10083      ("shl.b r1h,${dst32-16-Unprefixed-QI}")
   10084      (+ (f-0-4 #xA) dst32-16-Unprefixed-QI (f-7-1 0) (f-10-2 3) (f-12-4 #xE))
   10085      (shlr1h-sem QI dst32-16-Unprefixed-QI)
   10086      ())
   10087 (dni shl32.w-dst "shl.w r1h,dest" ((machine 32))
   10088      ("shl.w r1h,${dst32-16-Unprefixed-HI}")
   10089      (+ (f-0-4 #xA) dst32-16-Unprefixed-HI (f-7-1 1) (f-10-2 3) (f-12-4 #xE))
   10090      (shlr1h-sem HI dst32-16-Unprefixed-HI)
   10091      ())
   10092 ; shl.L #imm,dst (m16 #3)
   10093 (dni shl16-L-imm-r2r0 "shl.L #Imm-sh-12-s4,r2r0" ((machine 16))
   10094      "shl.l #${Imm-sh-12-s4},r2r0"
   10095      (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 #x8) Imm-sh-12-s4)
   10096      (shl-sem SI Imm-sh-12-s4 (reg h-r2r0))
   10097      ())
   10098 (dni shl16-L-imm-r3r1 "shl.L #Imm-sh-12-s4,r3r1" ((machine 16))
   10099      "shl.l #${Imm-sh-12-s4},r3r1"
   10100      (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 #x9) Imm-sh-12-s4)
   10101      (shl-sem SI Imm-sh-12-s4 (reg h-r3r1))
   10102      ())
   10103 ; shl.L r1h,dst (m16 #4)
   10104 (dni shl16-L-r1h-r2r0 "shl.L r1h,r2r0" ((machine 16))
   10105      "shl.l r1h,r2r0"
   10106      (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 0) (f-12-4 1))
   10107      (shl-sem SI (reg h-r1h) (reg h-r2r0))
   10108      ())
   10109 (dni shl16-L-r1h-r3r1 "shl.L r1h,r3r1" ((machine 16))
   10110      "shl.l r1h,r3r1"
   10111      (+ (f-0-4 #xE) (f-4-4 #xB) (f-8-4 1) (f-12-4 1))
   10112      (shl-sem SI (reg h-r1h) (reg h-r3r1))
   10113      ())
   10114 ; shl.L #imm8,dst (m32 #2)
   10115 (binary-arith32-imm-dst-defn QI SI .l 0 shl X #x9 #x2 #x1 shl-sem)
   10116 ; shl.L r1h,dst (m32 #4)
   10117 (dni shl32.l-dst "shl.l r1h,dest" ((machine 32))
   10118      ("shl.l r1h,${dst32-16-Unprefixed-SI}")
   10119      (+ (f-0-4 #xC) dst32-16-Unprefixed-SI (f-7-1 0) (f-10-2 0) (f-12-4 1))
   10120      (shlr1h-sem QI dst32-16-Unprefixed-SI)
   10121      ())
   10122 
   10123 ;-------------------------------------------------------------
   10124 ; shlnc - shift logical non carry
   10125 ;-------------------------------------------------------------
   10126 
   10127 ; TODO check semantics
   10128 ; shlnc.L #imm8,dst
   10129 (binary-arith32-imm-dst-defn QI SI .l 0 shlnc X #x8 #x2 #x1 shl-sem)
   10130 
   10131 ;-------------------------------------------------------------
   10132 ; sin - string input (m32)
   10133 ;-------------------------------------------------------------
   10134 
   10135 ; TODO semantics
   10136 (dni sin32.b "sin" ((machine 32))
   10137      ("sin.b")
   10138      (+ (f-0-4 #xB) (f-4-4 2) (f-8-4 8) (f-12-4 3))
   10139      (c-call VOID "sin_QI_semantics")
   10140      ())
   10141 
   10142 (dni sin32.w "sin" ((machine 32))
   10143      ("sin.w")
   10144      (+ (f-0-4 #xB) (f-4-4 2) (f-8-4 9) (f-12-4 3))
   10145      (c-call VOID "sin_HI_semantics")
   10146      ())
   10147 
   10148 ;-------------------------------------------------------------
   10149 ; smovb - string move backward
   10150 ;-------------------------------------------------------------
   10151 
   10152 ; TODO semantics
   10153 (dni smovb16.b "smovb.b" ((machine 16))
   10154      ("smovb.b")
   10155      (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 9))
   10156      (c-call VOID "smovb_QI_semantics")
   10157      ())
   10158  
   10159 (dni smovb16.w "smovb.w" ((machine 16))
   10160      ("smovb.w")
   10161      (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 9))
   10162      (c-call VOID "smovb_HI_semantics")
   10163      ())
   10164 
   10165 (dni smovb32.b "smovb.b" ((machine 32))
   10166      ("smovb.b")
   10167      (+ (f-0-4 #xB) (f-4-4 6) (f-8-4 8) (f-12-4 3))
   10168      (c-call VOID "smovb_QI_semantics")
   10169      ())
   10170 
   10171 (dni smovb32.w "smovb.w" ((machine 32))
   10172      ("smovb.w")
   10173      (+ (f-0-4 #xB) (f-4-4 6) (f-8-4 9) (f-12-4 3))
   10174      (c-call VOID "smovb_HI_semantics")
   10175      ())
   10176 
   10177 ;-------------------------------------------------------------
   10178 ; smovf - string move forward (m32)
   10179 ;-------------------------------------------------------------
   10180 
   10181 ; TODO semantics
   10182 (dni smovf16.b "smovf.b" ((machine 16))
   10183      ("smovf.b")
   10184      (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 8))
   10185      (c-call VOID "smovf_QI_semantics")
   10186      ())
   10187 
   10188 (dni smovf16.w "smovf.w" ((machine 16))
   10189      ("smovf.w")
   10190      (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 8))
   10191      (c-call VOID "smovf_HI_semantics")
   10192      ())
   10193 
   10194 (dni smovf32.b "smovf.b" ((machine 32))
   10195      ("smovf.b")
   10196      (+ (f-0-4 #xB) (f-4-4 0) (f-8-4 8)  (f-12-4 3))
   10197      (c-call VOID "smovf_QI_semantics")
   10198      ())
   10199 
   10200 (dni smovf32.w "smovf.w" ((machine 32))
   10201      ("smovf.w")
   10202      (+ (f-0-4 #xB) (f-4-4 0) (f-8-4 9)  (f-12-4 3))
   10203      (c-call VOID "smovf_HI_semantics")
   10204      ())
   10205 
   10206 ;-------------------------------------------------------------
   10207 ; smovu - string move unequal (m32)
   10208 ;-------------------------------------------------------------
   10209 
   10210 ; TODO semantics
   10211 (dni smovu.b "smovu.b" ((machine 32))
   10212      ("smovu.b")
   10213      (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 8)  (f-12-4 3))
   10214      (c-call VOID "smovu_QI_semantics")
   10215      ())
   10216 
   10217 (dni smovu.w "smovu.w" ((machine 32))
   10218      ("smovu.w")
   10219      (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 9)  (f-12-4 3))
   10220      (c-call VOID "smovu_HI_semantics")
   10221      ())
   10222 
   10223 ;-------------------------------------------------------------
   10224 ; sout - string output (m32)
   10225 ;-------------------------------------------------------------
   10226 
   10227 ; TODO semantics
   10228 (dni sout.b "sout.b" ((machine 32))
   10229      ("sout.b")
   10230      (+ (f-0-4 #xB) (f-4-4 4) (f-8-4 8) (f-12-4 3))
   10231      (c-call VOID "sout_QI_semantics")
   10232      ())
   10233 
   10234 (dni sout.w "sout" ((machine 32))
   10235      ("sout.w")
   10236      (+ (f-0-4 #xB) (f-4-4 4) (f-8-4 9) (f-12-4 3))
   10237      (c-call VOID "sout_HI_semantics")
   10238      ())
   10239 
   10240 ;-------------------------------------------------------------
   10241 ; sstr - string store
   10242 ;-------------------------------------------------------------
   10243 
   10244 ; TODO semantics
   10245 (dni sstr16.b "sstr.b" ((machine 16))
   10246      ("sstr.b")
   10247      (+ (f-0-4 7) (f-4-4 #xC) (f-8-4 #xE) (f-12-4 #xA))
   10248      (c-call VOID "sstr_QI_semantics")
   10249      ())
   10250 
   10251 (dni sstr16.w "sstr.w" ((machine 16))
   10252      ("sstr.w")
   10253      (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xE) (f-12-4 #xA))
   10254      (c-call VOID "sstr_HI_semantics")
   10255      ())
   10256 
   10257 (dni sstr.b "sstr" ((machine 32))
   10258      ("sstr.b")
   10259      (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 0) (f-12-4 3))
   10260      (c-call VOID "sstr_QI_semantics")
   10261      ())
   10262 
   10263 (dni sstr.w "sstr" ((machine 32))
   10264      ("sstr.w")
   10265      (+ (f-0-4 #xB) (f-4-4 8) (f-8-4 1) (f-12-4 3))
   10266      (c-call VOID "sstr_HI_semantics")
   10267      ())
   10268 
   10269 ;-------------------------------------------------------------
   10270 ; stnz - store on not zero
   10271 ;-------------------------------------------------------------
   10272 
   10273 (define-pmacro (stnz-sem mode src dst)
   10274   (sequence ()
   10275 	    (if (ne zbit (const 1))
   10276 		(set dst src)))
   10277 )
   10278 ; stnz #imm8,dst3 (m16)
   10279 (binary-arith16-b-S-imm8-dst3 stnz "" (f-0-4 #xD) (f-4-1 0) stnz-sem)
   10280 ; stnz.BW #imm,dst (m32)
   10281 (binary-arith32-imm-dst-defn QI QI .b 0 stnz X #x9 #x1 #xF stnz-sem)
   10282 (binary-arith32-imm-dst-defn HI HI .w 1 stnz X #x9 #x1 #xF stnz-sem)
   10283 
   10284 ;-------------------------------------------------------------
   10285 ; stz - store on zero
   10286 ;-------------------------------------------------------------
   10287 
   10288 (define-pmacro (stz-sem mode src dst)
   10289   (sequence ()
   10290 	    (if (eq zbit (const 1))
   10291 		(set dst src)))
   10292 )
   10293 ; stz #imm8,dst3 (m16)
   10294 (binary-arith16-b-S-imm8-dst3 stz "" (f-0-4 #xC) (f-4-1 1) stz-sem)
   10295 ; stz.BW #imm,dst (m32)
   10296 (binary-arith32-imm-dst-defn QI QI .b 0 stz X #x9 #x0 #xF stz-sem)
   10297 (binary-arith32-imm-dst-defn HI HI .w 1 stz X #x9 #x0 #xF stz-sem)
   10298 
   10299 ;-------------------------------------------------------------
   10300 ; stzx - store on zero extention
   10301 ;-------------------------------------------------------------
   10302 
   10303 (define-pmacro (stzx-sem mode src1 src2 dst)
   10304   (sequence ()
   10305 	    (if (eq zbit (const 1))
   10306 		(set dst src1)
   10307 		(set dst src2)))
   10308   )
   10309 ; stzx #imm8,dst3 (m16)
   10310 (dni stzx16-imm8-imm8-r0h "stzx #Imm8,#Imm8,r0h" ((machine 16))
   10311      ("stzx #${Imm-8-QI},#${Imm-16-QI},r0h")
   10312      (+ (f-0-4 #xD) (f-4-4 #xB) Imm-8-QI Imm-16-QI)
   10313      (stzx-sem QI Imm-8-QI Imm-16-QI (reg h-r0h))
   10314      ())
   10315 (dni stzx16-imm8-imm8-r0l "stzx #Imm8,#Imm8,r0l" ((machine 16))
   10316      ("stzx #${Imm-8-QI},#${Imm-16-QI},r0l")
   10317      (+ (f-0-4 #xD) (f-4-4 #xC) Imm-8-QI Imm-16-QI)
   10318      (stzx-sem QI Imm-8-QI Imm-16-QI (reg h-r0l))
   10319      ())
   10320 (dni stzx16-imm8-imm8-dsp8sb "stzx #Imm8,#Imm8,dsp8[sb]" ((machine 16))
   10321      ("stzx #${Imm-8-QI},#${Imm-24-QI},${Dsp-16-u8}[sb]")
   10322      (+ (f-0-4 #xD) (f-4-4 #xD) Imm-8-QI Dsp-16-u8 Imm-24-QI)
   10323      (stzx-sem QI Imm-8-QI Imm-16-QI (mem16 QI (add (reg h-sb) Dsp-24-u8)))
   10324      ())
   10325 (dni stzx16-imm8-imm8-dsp8fb "stzx #Imm8,#Imm8,dsp8[fb]" ((machine 16))
   10326      ("stzx #${Imm-8-QI},#${Imm-24-QI},${Dsp-16-s8}[fb]")
   10327      (+ (f-0-4 #xD) (f-4-4 #xE) Imm-8-QI Dsp-16-s8 Imm-24-QI)
   10328      (stzx-sem QI Imm-8-QI Imm-24-QI (mem16 QI (add (reg h-fb) Dsp-16-s8)))
   10329      ())
   10330 (dni stzx16-imm8-imm8-abs16 "stzx #Imm8,#Imm8,abs16" ((machine 16))
   10331      ("stzx #${Imm-8-QI},#${Imm-32-QI},${Dsp-16-u16}")
   10332      (+ (f-0-4 #xD) (f-4-4 #xF) Imm-8-QI Dsp-16-u16 Imm-32-QI)
   10333      (stzx-sem QI Imm-8-QI Imm-32-QI (mem16 QI Dsp-16-u16))
   10334      ())
   10335 ; stzx.BW #imm,dst (m32)
   10336 (insn-imm1-imm2-dst-Unprefixed stzx #x9 #x3 #xF stzx-sem)
   10337 
   10338 ;-------------------------------------------------------------
   10339 ; subx - subtract extend (m32)
   10340 ;-------------------------------------------------------------
   10341 
   10342 (define-pmacro (subx-sem mode src1 dst)
   10343   (sequence ((mode result))
   10344 	    (set result (sub mode dst (ext mode src1)))
   10345 	    (set obit (sub-oflag mode dst (ext mode src1) 0))
   10346 	    (set cbit (sub-cflag mode dst (ext mode src1) 0))
   10347 	    (set dst result)
   10348 	    (set-z-and-s result)))
   10349 ; subx #imm8,dst
   10350 (binary-arith32-imm-dst-defn QI SI "" 0 subx G #x9 #x1 #x1 subx-sem)
   10351 ; subx src,dst
   10352 (binary-arith32-src-dst-defn QI SI "" 0 subx G #x1 #x0 subx-sem)
   10353 
   10354 ;-------------------------------------------------------------
   10355 ; tst - test
   10356 ;-------------------------------------------------------------
   10357 
   10358 (define-pmacro (tst-sem mode src1 dst)
   10359   (sequence ((mode result))
   10360 	    (set result (and mode dst src1))
   10361 	    (set-z-and-s result))
   10362 )
   10363 
   10364 ; tst.BW #imm,dst (m16 #1 m32 #1)
   10365 (binary-arith-imm-dst tst G (f-0-4 7) (f-4-3 3) (f-8-4 0) #x9 #x3 #xE tst-sem)
   10366 ; tst.BW src,dst (m16 #2 m32 #3)
   10367 (binary-arith16-src-dst-defn QI QI .b 0 tst X (f-0-4 #x8) (f-4-3 0) tst-sem)
   10368 (binary-arith16-src-dst-defn HI HI .w 1 tst X (f-0-4 #x8) (f-4-3 0) tst-sem)
   10369 (binary-arith32-src-dst-Prefixed QI QI .b 0 tst G #x1 #x9 tst-sem)
   10370 (binary-arith32-src-dst-Prefixed HI HI .w 1 tst G #x1 #x9 tst-sem)
   10371 ; tst.BW:S #imm,dst2 (m32 #2)
   10372 (binary-arith32-s-imm-dst QI .b 0 tst #x0 #x6 tst-sem)
   10373 (binary-arith32-s-imm-dst HI .w 1 tst #x0 #x6 tst-sem)
   10374 
   10375 ;-------------------------------------------------------------
   10376 ; und - undefined
   10377 ;-------------------------------------------------------------
   10378 
   10379 (dni und16 "und" ((machine 16))
   10380      ("und")
   10381      (+ (f-0-4 #xF) (f-4-4 #xF))
   10382      (nop)
   10383      ())
   10384 
   10385 (dni und32 "und" ((machine 32))
   10386      ("und")
   10387      (+ (f-0-4 #xF) (f-4-4 #xF))
   10388      (nop)
   10389      ())
   10390 
   10391 ;-------------------------------------------------------------
   10392 ; wait
   10393 ;-------------------------------------------------------------
   10394 
   10395 ; ??? semantics
   10396 (dni wait16 "wait" ((machine 16))
   10397      ("wait")
   10398      (+ (f-0-4 7) (f-4-4 #xD) (f-8-4 #xF) (f-12-4 3))
   10399      (nop)
   10400      ())
   10401 
   10402 (dni wait "wait" ((machine 32))
   10403      ("wait")
   10404      (+ (f-0-4 #xB) (f-4-4 2) (f-8-4 0) (f-12-4 3))
   10405      (nop)
   10406      ())
   10407 
   10408 ;-------------------------------------------------------------
   10409 ; xchg - exchange
   10410 ;-------------------------------------------------------------
   10411 
   10412 (define-pmacro (xchg-sem mode src dst)
   10413   (sequence ((mode result))
   10414 	    (set result src)
   10415 	    (set src dst)
   10416 	    (set dst result))
   10417   )
   10418 (define-pmacro (xchg16-defn mode sz szc src srcreg)
   10419   (dni (.sym xchg16 sz - srcreg)
   10420        (.str "xchg" sz "-" srcreg ",dst16-16-" mode)
   10421        ((machine 16))
   10422        (.str "xchg." sz " " srcreg ",${dst16-16-" mode "}")
   10423        (+ (f-0-4 #x7) (f-4-3 #x5) (f-7-1 szc) (f-8-2 0) (f-10-2 src) (.sym dst16-16- mode))
   10424        (xchg-sem mode (reg (.sym h- srcreg)) (.sym dst16-16- mode))
   10425        ())
   10426 )
   10427 (xchg16-defn QI b 0 0 r0l)
   10428 (xchg16-defn QI b 0 1 r0h)
   10429 (xchg16-defn QI b 0 2 r1l)
   10430 (xchg16-defn QI b 0 3 r1h)
   10431 (xchg16-defn HI w 1 0 r0)
   10432 (xchg16-defn HI w 1 1 r1)
   10433 (xchg16-defn HI w 1 2 r2)
   10434 (xchg16-defn HI w 1 3 r3)
   10435 (define-pmacro (xchg32-defn mode sz szc src srcreg)
   10436   (dni (.sym xchg32 sz - srcreg)
   10437        (.str "xchg" sz "-" srcreg ",dst32-16-Unprefixed-" mode)
   10438        ((machine 32))
   10439        (.str "xchg." sz " " srcreg ",${dst32-16-Unprefixed-" mode "}")
   10440        (+ (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))
   10441        (xchg-sem mode (reg (.sym h- srcreg)) (.sym dst32-16-Unprefixed- mode))
   10442        ())
   10443 ) 
   10444 (xchg32-defn QI b 0 0 r0l)
   10445 (xchg32-defn QI b 0 1 r1l)
   10446 (xchg32-defn QI b 0 2 a0)
   10447 (xchg32-defn QI b 0 3 a1)
   10448 (xchg32-defn QI b 0 4 r0h)
   10449 (xchg32-defn QI b 0 5 r1h)
   10450 (xchg32-defn HI w 1 0 r0)
   10451 (xchg32-defn HI w 1 1 r1)
   10452 (xchg32-defn HI w 1 2 a0)
   10453 (xchg32-defn HI w 1 3 a1)
   10454 (xchg32-defn HI w 1 4 r2)
   10455 (xchg32-defn HI w 1 5 r3)
   10456 
   10457 ;-------------------------------------------------------------
   10458 ; xor - exclusive or
   10459 ;-------------------------------------------------------------
   10460 
   10461 (define-pmacro (xor-sem mode src1 dst)
   10462   (sequence ((mode result))
   10463 	    (set result (xor mode src1 dst))
   10464 	    (set-z-and-s result)
   10465 	    (set dst result))
   10466 )
   10467 
   10468 ; xor.BW #imm,dst (m16 #1 m32 #1)
   10469 (binary-arith-imm-dst xor G (f-0-4 7) (f-4-3 3) (f-8-4 1) #x9 #x0 #xE xor-sem)
   10470 ; xor.BW src,dst (m16 #3 m32 #3)
   10471 (binary-arith-src-dst xor G (f-0-4 #x8) (f-4-3 4) #x1 #x9 xor-sem)
   10472 
   10473 ;-------------------------------------------------------------
   10474 ; Widening
   10475 ;-------------------------------------------------------------
   10476 
   10477 (define-pmacro (exts-sem smode dmode src dst)
   10478   (set dst (ext dmode (trunc smode src)))
   10479 )
   10480 (define-pmacro (extz-sem smode dmode src dst)
   10481   (set dst (zext dmode (trunc smode src)))
   10482 )
   10483 
   10484 ; exts.b dst for m16c
   10485 (ext16-defn QI HI .b 0 exts (f-0-4 7) (f-4-3 6) (f-8-4 6) exts-sem)
   10486 
   10487 ; exts.w r0 for m16c
   10488 (dni exts16.w-r0
   10489      "exts.w r0"
   10490      ((machine 16))
   10491      "exts.w r0"
   10492      (+ (f-0-4 #x7) (f-4-4 #xC) (f-8-4 #xF) (f-12-4 3))
   10493      (exts-sem HI SI R0 R2R0)
   10494      ())
   10495 
   10496 ; exts.size dst for m32c
   10497 (ext32-defn QI HI .b 0 exts (f-0-4 #xC) (f-10-2 1) (f-12-4 #xE) exts-sem)
   10498 (ext32-defn HI SI .w 1 exts (f-0-4 #xC) (f-10-2 1) (f-12-4 #xE) exts-sem)
   10499 ; exts.b src,dst for m32c
   10500 (ext32-binary-defn exts .b #x1 #x7 exts-sem)
   10501 
   10502 ; extz.b src,dst for m32c
   10503 (ext32-binary-defn extz "" #x1 #xB extz-sem)
   10504 
   10505 ;-------------------------------------------------------------
   10506 ; Indirect
   10507 ;-------------------------------------------------------------
   10508  
   10509 ; TODO semantics
   10510 (dni srcind "SRC-INDIRECT" ((machine 32))
   10511      ("src-indirect")
   10512      (+ (f-0-4 4) (f-4-4 1))
   10513      (set (reg h-src-indirect) 1)
   10514      ())
   10515  
   10516 (dni destind "DEST-INDIRECT" ((machine 32))
   10517      ("dest-indirect")
   10518      (+ (f-0-4 0) (f-4-4 9))
   10519      (set (reg h-dst-indirect) 1)
   10520      ())
   10521  
   10522 (dni srcdestind "SRC-DEST-INDIRECT" ((machine 32))
   10523      ("src-dest-indirect")
   10524      (+ (f-0-4 4) (f-4-4 9))
   10525      (sequence () (set (reg h-src-indirect) 1) (set (reg h-dst-indirect) 1))
   10526      ())
   10527