; Renesas M32R CPU description.  -*- Scheme -*-
;
; Copyright 1998, 1999, 2000, 2001, 2003, 2007 Free Software Foundation, Inc.
;
; Contributed by Red Hat Inc; developed under contract from Mitsubishi
; Electric Corporation.
;
; This file is part of the GNU Binutils.
;
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 3 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program; if not, write to the Free Software
; Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
; MA 02110-1301, USA.

(include "simplify.inc")

; FIXME: Delete sign extension of accumulator results.
; Sign extension is done when accumulator is read.

; define-arch must appear first

(define-arch
  (name m32r) ; name of cpu family
  (comment "Renesas M32R")
  (default-alignment aligned)
  (insn-lsb0? #f)
  (machs m32r m32rx m32r2)
  (isas m32r)
)

; Attributes.

; An attribute to describe which pipeline an insn runs in.
; O_OS is a special attribute for sll, sra, sla, slli, srai, slai.
; These instructions have O attribute for m32rx and OS attribute for m32r2.

(define-attr
  (for insn)
  (type enum)
  (name PIPE)
  (comment "parallel execution pipeline selection")
  (values NONE O S OS O_OS)
)

; A derived attribute that says which insns can be executed in parallel
; with others.  This is a required attribute for architectures with
; parallel execution.

(define-attr
  (for insn)
  (type enum)
  (name PARALLEL)
  (attrs META) ; do not define in any generated file for now
  (values NO YES)
  (default (if (eq-attr (current-insn) PIPE NONE) (symbol NO) (symbol YES)))
)

; Instruction set parameters.

(define-isa
  (name m32r)

  ; This is 32 because 16 bit insns always appear as pairs.
  ; ??? See if this can go away.  It's only used by the disassembler (right?)
  ; to decide how long an unknown insn is.  One value isn't sufficient (e.g. if
  ; on a 16 bit (and not 32 bit) boundary, will only want to advance pc by 16.)
  (default-insn-bitsize 32)

  ; Number of bytes of insn we can initially fetch.
  ; The M32R is tricky in that insns are either two 16-bit insns
  ; (executed sequentially or in parallel) or one 32-bit insn.
  ; So on one hand the base insn size is 16 bits, but on another it's 32.
  ; 32 is chosen because:
  ; - if the chip were ever bi-endian it is believed that the byte order would
  ;   be based on 32 bit quantities
  ; - 32 bit insns are always aligned on 32 bit boundaries
  ; - the pc will never stop on a 16 bit (and not 32 bit) boundary
  ;   [well actually it can, but there are no branches to such places]
  (base-insn-bitsize 32)

  ; Used in computing bit numbers.
  (default-insn-word-bitsize 32)

  ; The m32r fetches 2 insns at a time.
  (liw-insns 2)

  ; While the m32r can execute insns in parallel, the base mach can't
  ; (other than nop).  The base mach is greatly handicapped by this, but
  ; we still need to cleanly handle it.
  (parallel-insns 2)

  ; Initial bitnumbers to decode insns by.
  (decode-assist (0 1 2 3 8 9 10 11))

  ; Classification of instructions that fit in the various frames.
  ; wip, not currently used
  (insn-types (long ; name
	       31 ; length
	       (eq-attr (current-insn) LENGTH 31) ; matching insns
	       (0 1 2 7 8 9 10) ; decode-assist
	       )
	      (short
	       15
	       (eq-attr (current-insn) LENGTH 15) ; matching insns
	       (0 1 2 7 8 9 10)
	       )
	      )

  ; Instruction framing.
  ; Each m32r insn is either one 32 bit insn, two 16 bit insns executed
  ; serially (left->right), or two 16 bit insns executed parallelly.
  ; wip, not currently used
  (frame long32 ; name
	 ((long)) ; list of insns in frame, plus constraint
	 "$0"   ; assembler
	 (+ (1 1) (31 $0)) ; value
	 (sequence () (execute $0)) ; action
	 )
  (frame serial2x16
	 ((short)
	  (short))
	 "$0 -> $1"
	 (+ (1 0) (15 $0) (1 0) (15 $1))
	 (sequence ()
		   (execute $0)
		   (execute $1))
	 )
  (frame parallel2x16
	 ((short (eq-attr (current-insn) PIPE "O,BOTH"))
	  (short (eq-attr (current-insn) PIPE "S,BOTH")))
	 "$0 || $1"
	 (+ (1 0) (15 $0) (1 1) (15 $1))
	 (parallel ()
		   (execute $0)
		   (execute $1))
	 )
)

; Cpu family definitions.

; ??? define-cpu-family [and in general "cpu-family"] might be clearer than
; define-cpu.
; ??? Have define-arch provide defaults for architecture that define-cpu can
; then override [reduces duplication in define-cpu].
; ??? Another way to go is to delete cpu-families entirely and have one mach
; able to inherit things from another mach (would also need the ability to
; not only override specific inherited things but also disable some,
; e.g. if an insn wasn't supported).

(define-cpu
  ; cpu names must be distinct from the architecture name and machine names.
  ; The "b" suffix stands for "base" and is the convention.
  ; The "f" suffix stands for "family" and is the convention.
  (name m32rbf)
  (comment "Renesas M32R base family")
  (endian either)
  (word-bitsize 32)
  ; Override isa spec (??? keeps things simpler, though it was more true
  ; in the early days and not so much now).
  (parallel-insns 1)
)

(define-cpu
  (name m32rxf)
  (comment "Renesas M32Rx family")
  (endian either)
  (word-bitsize 32)
  ; Generated files have an "x" suffix.
  (file-transform "x")
)

(define-cpu
  (name m32r2f)
  (comment "Renesas M32R2 family")
  (endian either)
  (word-bitsize 32)
  ; Generated files have an "2" suffix.
  (file-transform "2")
)

(define-mach
  (name m32r)
  (comment "Generic M32R cpu")
  (cpu m32rbf)
)

(define-mach
  (name m32rx)
  (comment "M32RX cpu")
  (cpu m32rxf)
)

(define-mach
  (name m32r2)
  (comment "M32R2 cpu")
  (cpu m32r2f)
)

; Model descriptions.

; The meaning of this value is wip but at the moment it's intended to describe
; the implementation (i.e. what -mtune=foo does in sparc gcc).
;
; Notes while wip:
; - format of pipeline entry:
;   (pipeline name (stage1-name ...) (stage2-name ...) ...)
;   The contents of a stage description is wip.
; - each mach must have at least one model
; - the default model must be the first one
;- maybe have `retire' support update total cycle count to handle current
;  parallel insn cycle counting problems

(define-model
  (name m32r/d) (comment "m32r/d") (attrs)
  (mach m32r)

  ;(prefetch)
  ;(retire)

  (pipeline p-non-mem "" () ((fetch) (decode) (execute) (writeback)))
  (pipeline p-mem "" () ((fetch) (decode) (execute) (memory) (writeback)))

  ; `state' is a list of variables for recording model state
  (state
   ; bit mask of h-gr registers, =1 means value being loaded from memory
   (h-gr UINT)
   )

  (unit u-exec "Execution Unit" ()
	1 1 ; issue done
	() ; state
	((sr INT -1) (dr INT -1)) ; inputs
	((dr INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-cmp "Compare Unit" ()
	1 1 ; issue done
	() ; state
	((src1 INT -1) (src2 INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  (unit u-mac "Multiply/Accumulate Unit" ()
	1 1 ; issue done
	() ; state
	((src1 INT -1) (src2 INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  (unit u-cti "Branch Unit" ()
	1 1 ; issue done
	() ; state
	((sr INT -1)) ; inputs
	((pc)) ; outputs
	() ; profile action (default)
	)
  (unit u-load "Memory Load Unit" ()
	1 1 ; issue done
	() ; state
	((sr INT)
	 ;(ld-mem AI)
	 ) ; inputs
	((dr INT)) ; outputs
	() ; profile action (default)
	)
  (unit u-store "Memory Store Unit" ()
	1 1 ; issue done
	() ; state
	((src1 INT) (src2 INT)) ; inputs
	() ; ((st-mem AI)) ; outputs
	() ; profile action (default)
	)
)

(define-model
  (name test) (comment "test") (attrs)
  (mach m32r)
  (pipeline all "" () ((fetch) (decode) (execute) (writeback)))
  (unit u-exec "Execution Unit" ()
	1 1 ; issue done
	() () () ())
)

; Each mach must have at least one model.

(define-model
  (name m32rx) (comment "m32rx") (attrs)
  (mach m32rx)

  ; ??? It's 6 stages but I forget the details right now.
  (pipeline p-o "" () ((fetch) (decode) (execute) (writeback)))
  (pipeline p-s "" () ((fetch) (decode) (execute) (writeback)))
  (pipeline p-o-mem "" () ((fetch) (decode) (execute) (memory) (writeback)))

  (unit u-exec "Execution Unit" ()
	1 1 ; issue done
	() ; state
	((sr INT -1) (dr INT -1)) ; inputs
	((dr INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-cmp "Compare Unit" ()
	1 1 ; issue done
	() ; state
	((src1 INT -1) (src2 INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  (unit u-mac "Multiply/Accumulate Unit" ()
	1 1 ; issue done
	() ; state
	((src1 INT -1) (src2 INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  (unit u-cti "Branch Unit" ()
	1 1 ; issue done
	() ; state
	((sr INT -1)) ; inputs
	((pc)) ; outputs
	() ; profile action (default)
	)
  (unit u-load "Memory Load Unit" ()
	1 1 ; issue done
	() ; state
	((sr INT)) ; inputs
	((dr INT)) ; outputs
	() ; profile action (default)
	)
  (unit u-store "Memory Store Unit" ()
	1 1 ; issue done
	() ; state
	((src1 INT) (src2 INT)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
)

(define-model
  (name m32r2) (comment "m32r2") (attrs)
  (mach m32r2)

  ; ??? It's 6 stages but I forget the details right now.
  (pipeline p-o "" () ((fetch) (decode) (execute) (writeback)))
  (pipeline p-s "" () ((fetch) (decode) (execute) (writeback)))
  (pipeline p-o-mem "" () ((fetch) (decode) (execute) (memory) (writeback)))

  (unit u-exec "Execution Unit" ()
	1 1 ; issue done
	() ; state
	((sr INT -1) (dr INT -1)) ; inputs
	((dr INT -1)) ; outputs
	() ; profile action (default)
	)
  (unit u-cmp "Compare Unit" ()
	1 1 ; issue done
	() ; state
	((src1 INT -1) (src2 INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  (unit u-mac "Multiply/Accumulate Unit" ()
	1 1 ; issue done
	() ; state
	((src1 INT -1) (src2 INT -1)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
  (unit u-cti "Branch Unit" ()
	1 1 ; issue done
	() ; state
	((sr INT -1)) ; inputs
	((pc)) ; outputs
	() ; profile action (default)
	)
  (unit u-load "Memory Load Unit" ()
	1 1 ; issue done
	() ; state
	((sr INT)) ; inputs
	((dr INT)) ; outputs
	() ; profile action (default)
	)
  (unit u-store "Memory Store Unit" ()
	1 1 ; issue done
	() ; state
	((src1 INT) (src2 INT)) ; inputs
	() ; outputs
	() ; profile action (default)
	)
)

; The instruction fetch/execute cycle.
; This is split into two parts as sometimes more than one instruction is
; decoded at once.
; The `const SI' argument to decode/execute is used to distinguish
; multiple instructions processed at the same time (e.g. m32r).
;
; ??? This is wip, and not currently used.
; ??? Needs to be moved to define-isa.

; This is how to fetch and decode an instruction.

;(define-extract
;  (sequence VOID
;	    (if VOID (ne AI (and AI pc (const AI 3)) (const AI 0))
;		(sequence VOID
;			  (set-quiet USI (scratch UHI insn1) (ifetch UHI pc))
;			  (decode VOID pc (and UHI insn1 (const UHI #x7fff))
;				  (const SI 0)))
;		(sequence VOID
;			  (set-quiet USI (scratch USI insn) (ifetch USI pc))
;			  (if VOID (ne USI (and USI insn (const USI #x80000000))
;				     (const USI 0))
;			      (decode VOID pc (srl USI insn (const WI 16)) (const SI 0))
;			      (sequence VOID
;					; ??? parallel support
;					(decode VOID pc (srl USI insn (const WI 16))
;						(const SI 0))
;					(decode VOID (add AI pc (const AI 2))
;						(and USI insn (const WI #x7fff))
;						(const SI 1))))))
;	    )
;)

; This is how to execute a decoded instruction.

;(define-execute
;  (sequence VOID () ; () is empty option list
;	     ((AI new_pc))
;	     (set AI new_pc (execute: AI (const 0)) #:quiet)
;	     (set AI pc new_pc #:direct)
;	     )
;)

; FIXME: It might simplify things to separate the execute process from the
; one that updates the PC.

; Instruction fields.
;
; Attributes:
; PCREL-ADDR: pc relative value (for reloc and disassembly purposes)
; ABS-ADDR: absolute address (for reloc and disassembly purposes?)
; RESERVED: bits are not used to decode insn, must be all 0
; RELOC: there is a relocation associated with this field (experiment)

(define-attr
  (for ifield operand)
  (type boolean)
  (name RELOC)
  (comment "there is a reloc associated with this field (experiment)")
)

(dnf f-op1       "op1"                 () 0 4)
(dnf f-op2       "op2"                 () 8 4)
(dnf f-cond      "cond"                () 4 4)
(dnf f-r1        "r1"                  () 4 4)
(dnf f-r2        "r2"                  () 12 4)
(df f-simm8      "simm8"               () 8 8 INT #f #f)
(df f-simm16     "simm16"              () 16 16 INT #f #f)
(dnf f-shift-op2 "shift op2"           () 8 3)
(dnf f-uimm3     "uimm3"               () 5 3)
(dnf f-uimm4     "uimm4"               () 12 4)
(dnf f-uimm5     "uimm5"               () 11 5)
(dnf f-uimm8     "uimm8"               () 8 8)
(dnf f-uimm16    "uimm16"              () 16 16)
(dnf f-uimm24    "uimm24"              (ABS-ADDR RELOC) 8 24)
(dnf f-hi16      "high 16 bits"        (SIGN-OPT) 16 16)
(df f-disp8      "disp8, slot unknown" (PCREL-ADDR RELOC) 8 8 INT
    ((value pc) (sra WI (sub WI value (and WI pc (const -4))) (const 2)))
    ((value pc) (add WI (sll WI value (const 2)) (and WI pc (const -4)))))
(df f-disp16     "disp16"              (PCREL-ADDR RELOC) 16 16 INT
    ((value pc) (sra WI (sub WI value pc) (const 2)))
    ((value pc) (add WI (sll WI value (const 2)) pc)))
(df f-disp24     "disp24"              (PCREL-ADDR RELOC) 8 24 INT
    ((value pc) (sra WI (sub WI value pc) (const 2)))
    ((value pc) (add WI (sll WI value (const 2)) pc)))

(dnf f-op23      "op2.3"               ()  9 3)
(dnf f-op3       "op3"                 () 14 2)
(dnf f-acc       "acc"                 ()  8 1)
(dnf f-accs      "accs"                () 12 2)
(dnf f-accd      "accd"                ()  4 2)
(dnf f-bits67    "bits67"              ()  6 2)
(dnf f-bit4      "bit4"                ()  4 1)
(dnf f-bit14     "bit14"               () 14 1)

(define-ifield (name f-imm1) (comment "1 bit immediate, 0->1 1->2")
  (attrs)
  (start 15) (length 1)
  (encode (value pc) (sub WI value (const WI 1)))
  (decode (value pc) (add WI value (const WI 1)))
)

; Enums.

; insn-op1: bits 0-3
; FIXME: should use die macro or some such
(define-normal-insn-enum insn-op1 "insn format enums" () OP1_ f-op1
  ("0" "1" "2" "3" "4" "5" "6" "7"
   "8" "9" "10" "11" "12" "13" "14" "15")
)

; insn-op2: bits 8-11
; FIXME: should use die macro or some such
(define-normal-insn-enum insn-op2 "op2 enums" () OP2_ f-op2
  ("0" "1" "2" "3" "4" "5" "6" "7"
   "8" "9" "10" "11" "12" "13" "14" "15")
)

; Hardware pieces.
; These entries list the elements of the raw hardware.
; They're also used to provide tables and other elements of the assembly
; language.

(dnh h-pc "program counter" (PC PROFILE) (pc) () () ())

(dnh h-hi16 "high 16 bits" ()
     (immediate (UINT 16))
     () () ()
)

; These two aren't technically needed.
; They're here for illustration sake mostly.
; Plus they cause the value to be stored in the extraction buffers to only
; be 16 bits wide (vs 32 or 64).  Whoopie ding.  But it's fun.
(dnh h-slo16 "signed low 16 bits" ()
     (immediate (INT 16))
     () () ()
)
(dnh h-ulo16 "unsigned low 16 bits" ()
     (immediate (UINT 16))
     () () ()
)

(define-keyword
  (name gr-names)
  (print-name h-gr)
  (prefix "")
  (values (fp 13) (lr 14) (sp 15)
	  (r0 0) (r1 1) (r2 2) (r3 3) (r4 4) (r5 5) (r6 6) (r7 7)
	  (r8 8) (r9 9) (r10 10) (r11 11) (r12 12) (r13 13) (r14 14) (r15 15))
)

(define-hardware
  (name h-gr)
  (comment "general registers")
  (attrs PROFILE CACHE-ADDR)
  (type register WI (16))
  (indices extern-keyword gr-names)
)

(define-keyword
  (name cr-names)
  (print-name h-cr)
  (prefix "")
  (values (psw 0)   (cbr 1)   (spi 2)   (spu 3)
	  (bpc 6)   (bbpsw 8) (bbpc 14) (evb 5)
	  (cr0 0)   (cr1 1)   (cr2 2)   (cr3 3)
	  (cr4 4)   (cr5 5)   (cr6 6)   (cr7 7)
	  (cr8 8)   (cr9 9)   (cr10 10) (cr11 11)
	  (cr12 12) (cr13 13) (cr14 14) (cr15 15))
)

(define-hardware
  (name h-cr)
  (comment "control registers")
  (type register UWI (16))
  (indices extern-keyword cr-names)
  (get (index) (c-call UWI "@cpu@_h_cr_get_handler" index))
  (set (index newval) (c-call VOID "@cpu@_h_cr_set_handler" index newval))
)

; The actual accumulator is only 56 bits.
; The top 8 bits are sign extended from bit 8 (when counting msb = bit 0).
; To simplify the accumulator instructions, no attempt is made to keep the
; top 8 bits properly sign extended (currently there's no point since they
; all ignore them).  When the value is read it is properly sign extended
; [in the `get' handler].
(define-hardware
  (name h-accum)
  (comment "accumulator")
  (type register DI)
  (get () (c-call DI "@cpu@_h_accum_get_handler"))
  (set (newval) (c-call VOID "@cpu@_h_accum_set_handler" newval))
)

; FIXME: Revisit after sanitization can be removed.  Remove h-accum.
(define-hardware
  (name h-accums)
  (comment "accumulators")
  (attrs (MACH m32rx,m32r2))
  (type register DI (2))
  (indices keyword "" ((a0 0) (a1 1)))
  ; get/set so a0 accesses are redirected to h-accum.
  ; They're also so reads can properly sign extend the value.
  ; FIXME: Needn't be a function call.
  (get (index) (c-call DI "@cpu@_h_accums_get_handler" index))
  (set (index newval) (c-call VOID "@cpu@_h_accums_set_handler" index newval))
)

; For condbit operand.  FIXME: Need to allow spec of get/set of operands.
; Having this separate from h-psw keeps the parts that use it simpler
; [since they greatly outnumber those that use h-psw].
(dsh h-cond "condition bit" () (register BI))

; The actual values of psw,bpsw,bbpsw are recorded here to allow access
; to them as a unit.
(define-hardware
  (name h-psw)
  (comment "psw part of psw")
  (type register UQI)
  ; get/set to handle cond bit.
  ; FIXME: missing: use's and clobber's
  ; FIXME: remove c-call?
  (get () (c-call UQI "@cpu@_h_psw_get_handler"))
  (set (newval) (c-call VOID "@cpu@_h_psw_set_handler" newval))
)
(dsh h-bpsw  "backup psw"      () (register UQI))
(dsh h-bbpsw "backup bpsw"     () (register UQI))

; FIXME: Later make add get/set specs and support SMP.
(dsh h-lock  "lock"  () (register BI))

; Instruction Operands.
; These entries provide a layer between the assembler and the raw hardware
; description, and are used to refer to hardware elements in the semantic
; code.  Usually there's a bit of over-specification, but in more complicated
; instruction sets there isn't.

; M32R specific operand attributes:

(define-attr
  (for operand)
  (type boolean)
  (name HASH-PREFIX)
  (comment "immediates have an optional '#' prefix")
)

; ??? Convention says this should be o-sr, but then the insn definitions
; should refer to o-sr which is clumsy.  The "o-" could be implicit, but
; then it should be implicit for all the symbols here, but then there would
; be confusion between (f-)simm8 and (h-)simm8.
; So for now the rule is exactly as it appears here.

(dnop sr     "source register"              () h-gr   f-r2)
(dnop dr     "destination register"         () h-gr   f-r1)
;; The assembler relies upon the fact that dr and src1 are the same field.
;; FIXME: Revisit.
(dnop src1   "source register 1"            () h-gr   f-r1)
(dnop src2   "source register 2"            () h-gr   f-r2)
(dnop scr    "source control register"      () h-cr   f-r2)
(dnop dcr    "destination control register" () h-cr   f-r1)

(dnop simm8  "8 bit signed immediate"       (HASH-PREFIX) h-sint f-simm8)
(dnop simm16 "16 bit signed immediate"      (HASH-PREFIX) h-sint f-simm16)
(dnop uimm3  "3 bit unsigned number"        (HASH-PREFIX) h-uint f-uimm3)
(dnop uimm4  "4 bit trap number"            (HASH-PREFIX) h-uint f-uimm4)
(dnop uimm5  "5 bit shift count"            (HASH-PREFIX) h-uint f-uimm5)
(dnop uimm8  "8 bit unsigned immediate"     (HASH-PREFIX) h-uint f-uimm8)
(dnop uimm16 "16 bit unsigned immediate"    (HASH-PREFIX) h-uint f-uimm16)

(dnop imm1   "1 bit immediate"              ((MACH m32rx,m32r2) HASH-PREFIX) h-uint f-imm1)
(dnop accd   "accumulator destination register" ((MACH m32rx,m32r2))        h-accums f-accd)
(dnop accs   "accumulator source register"  ((MACH m32rx,m32r2))            h-accums f-accs)
(dnop acc    "accumulator reg (d)"          ((MACH m32rx,m32r2))            h-accums f-acc)

; slo16,ulo16 are used in both with-hash-prefix/no-hash-prefix cases.
; e.g. add3 r3,r3,#1 and ld r3,@(4,r4).  We could use HASH-PREFIX.
; Instead we create a fake operand `hash'.  The m32r is an illustration port,
; so we often try out various ways of doing things.

(define-operand (name hash) (comment "# prefix") (attrs)
  (type h-sint) ; doesn't really matter
  (index f-nil)
  (handlers (parse "hash") (print "hash"))
)

; For high(foo),shigh(foo).
(define-operand
  (name hi16)
  (comment "high 16 bit immediate, sign optional")
  (attrs)
  (type h-hi16)
  (index f-hi16)
  (handlers (parse "hi16"))
)

; For low(foo),sda(foo).
(define-operand
  (name slo16)
  (comment "16 bit signed immediate, for low()")
  (attrs)
  (type h-slo16)
  (index f-simm16)
  (handlers (parse "slo16"))
)

; For low(foo).
(define-operand
  (name ulo16)
  (comment "16 bit unsigned immediate, for low()")
  (attrs)
  (type h-ulo16)
  (index f-uimm16)
  (handlers (parse "ulo16"))
)

(dnop uimm24 "24 bit address" (HASH-PREFIX) h-addr f-uimm24)

(define-operand
  (name disp8)
  (comment "8 bit displacement")
  (attrs RELAX)
  (type h-iaddr)
  (index f-disp8)
  ; ??? Early experiments had insert/extract fields here.
  ; Moving these to f-disp8 made things cleaner, but may wish to re-introduce
  ; fields here to handle more complicated cases.
)

(dnop disp16 "16 bit displacement" () h-iaddr f-disp16)
(dnop disp24 "24 bit displacement" (RELAX) h-iaddr f-disp24)

; These hardware elements are refered to frequently.

(dnop condbit "condition bit" (SEM-ONLY) h-cond f-nil)
(dnop accum "accumulator" (SEM-ONLY) h-accum f-nil)

; Instruction definitions.
;
; Notes while wip:
; - dni is a cover macro to the real "this is an instruction" keyword.
;   The syntax of the real one is yet to be determined.
;   At the lowest level (i.e. the "real" one) it will probably take a variable
;   list of arguments where each argument [perhaps after the standard three of
;   name, comment, attrs] is "(keyword arg-to-keyword)".  This syntax is simple
;   and yet completely upward extensible.  And given the macro facility, one
;   needn't code at that low a level so even though it'll be more verbose than
;   necessary it won't matter.  This same reasoning can be applied to most
;   types of entries in this file.

; M32R specific instruction attributes:

; FILL-SLOT: Need next insn to begin on 32 bit boundary.
; (A "slot" as used here is a 32 bit quantity that can either be filled with
; one 32 bit insn or two 16 bit insns which go in the "left bin" and "right
; bin" where the left bin is the one with a lower address).

(define-attr
  (for insn)
  (type boolean)
  (name FILL-SLOT)
  (comment "fill right bin with `nop' if insn is in left bin")
)

(define-attr
  (for insn)
  (type boolean)
  (name SPECIAL)
  (comment "non-public m32rx insn")
)

(define-attr
  (for insn)
  (type boolean)
  (name SPECIAL_M32R)
  (comment "non-public m32r insn")
)

(define-attr
  (for insn)
  (type boolean)
  (name SPECIAL_FLOAT)
  (comment "floating point insn")
)

; IDOC attribute for instruction documentation.

(define-attr
  (for insn)
  (type enum)
  (name IDOC)
  (comment "insn kind for documentation")
  (attrs META)
  (values
   (MEM - () "Memory")
   (ALU - () "ALU")
   (BR - () "Branch")
   (ACCUM - () "Accumulator")
   (MAC - () "Multiply/Accumulate")
   (MISC - () "Miscellaneous")
  )
)

(define-pmacro (bin-op mnemonic op2-op sem-op imm-prefix imm)
  (begin
     (dni mnemonic
	  (.str mnemonic " reg/reg")
	  ((PIPE OS) (IDOC ALU))
	  (.str mnemonic " $dr,$sr")
	  (+ OP1_0 op2-op dr sr)
	  (set dr (sem-op dr sr))
	  ()
     )
     (dni (.sym mnemonic "3")
	  (.str mnemonic " reg/" imm)
	  ((IDOC ALU))
	  (.str mnemonic "3 $dr,$sr," imm-prefix "$" imm)
	  (+ OP1_8 op2-op dr sr imm)
	  (set dr (sem-op sr imm))
	  ()
     )
   )
)
(bin-op add OP2_10 add "$hash" slo16)
; sub isn't present because sub3 doesn't exist.
(bin-op and OP2_12 and "" uimm16)
(bin-op or OP2_14 or "$hash" ulo16)
(bin-op xor OP2_13 xor "" uimm16)

(dni addi "addi"
     ((PIPE OS) (IDOC ALU))
     ;#.(string-append "addi " "$dr,$simm8") ; #. experiment
     "addi $dr,$simm8"
     (+ OP1_4 dr simm8)
     (set dr (add dr simm8))
     ((m32r/d (unit u-exec))
      (m32rx (unit u-exec))
      (m32r2 (unit u-exec)))
)

(dni addv "addv"
     ((PIPE OS) (IDOC ALU))
     "addv $dr,$sr"
     (+ OP1_0 OP2_8 dr sr)
     (parallel ()
	       (set dr (add dr sr))
	       (set condbit (add-oflag dr sr (const 0))))
     ()
)

(dni addv3 "addv3"
     ((IDOC ALU))
     "addv3 $dr,$sr,$simm16"
     (+ OP1_8 OP2_8 dr sr simm16)
     (parallel ()
	       (set dr (add sr simm16))
	       (set condbit (add-oflag sr simm16 (const 0))))
     ()
)

(dni addx "addx"
     ((PIPE OS) (IDOC ALU))
     "addx $dr,$sr"
     (+ OP1_0 OP2_9 dr sr)
     (parallel ()
	       (set dr (addc dr sr condbit))
	       (set condbit (add-cflag dr sr condbit)))
     ()
)

(dni bc8 "bc with 8 bit displacement"
     (COND-CTI (PIPE O) (IDOC BR))
     "bc.s $disp8"
     (+ OP1_7 (f-r1 12) disp8)
     (if condbit (set pc disp8))
     ((m32r/d (unit u-cti))
      (m32rx (unit u-cti))
      (m32r2 (unit u-cti)))
)

(dnmi bc8r "relaxable bc8"
     (COND-CTI RELAXABLE (PIPE O) (IDOC BR))
     "bc $disp8"
     (emit bc8 disp8)
)

(dni bc24 "bc with 24 bit displacement"
     (COND-CTI (IDOC BR))
     "bc.l $disp24"
     (+ OP1_15 (f-r1 12) disp24)
     (if condbit (set pc disp24))
     ((m32r/d (unit u-cti))
      (m32rx (unit u-cti))
      (m32r2 (unit u-cti)))
)

(dnmi bc24r "relaxable bc24"
     (COND-CTI RELAXED (IDOC BR))
     "bc $disp24"
     (emit bc24 disp24)
)

(dni beq "beq"
     (COND-CTI (IDOC BR))
     "beq $src1,$src2,$disp16"
     (+ OP1_11 OP2_0 src1 src2 disp16)
     (if (eq src1 src2) (set pc disp16))
     ((m32r/d (unit u-cti) (unit u-cmp (cycles 0)))
      (m32rx (unit u-cti) (unit u-cmp (cycles 0)))
      (m32r2 (unit u-cti) (unit u-cmp (cycles 0))))
)

(define-pmacro (cbranch sym comment op2-op comp-op)
  (dni sym comment (COND-CTI (IDOC BR))
	(.str sym " $src2,$disp16")
	(+ OP1_11 op2-op (f-r1 0) src2 disp16)
	(if (comp-op src2 (const WI 0)) (set pc disp16))
	((m32r/d (unit u-cti) (unit u-cmp (cycles 0)))
	 (m32rx (unit u-cti) (unit u-cmp (cycles 0)))
	 (m32r2 (unit u-cti) (unit u-cmp (cycles 0))))
	)
)
(cbranch beqz "beqz" OP2_8 eq)
(cbranch bgez "bgez" OP2_11 ge)
(cbranch bgtz "bgtz" OP2_13 gt)
(cbranch blez "blez" OP2_12 le)
(cbranch bltz "bltz" OP2_10 lt)
(cbranch bnez "bnez" OP2_9 ne)

(dni bl8 "bl with 8 bit displacement"
     (UNCOND-CTI FILL-SLOT (PIPE O) (IDOC BR))
     "bl.s $disp8"
     (+ OP1_7 (f-r1 14) disp8)
     (sequence ()
	       (set (reg h-gr 14)
		    (add (and pc (const -4)) (const 4)))
	       (set pc disp8))
     ((m32r/d (unit u-cti))
      (m32rx (unit u-cti))
      (m32r2 (unit u-cti)))
)

(dnmi bl8r "relaxable bl8"
     (UNCOND-CTI FILL-SLOT RELAXABLE (PIPE O) (IDOC BR))
     "bl $disp8"
     (emit bl8 disp8)
)

(dni bl24 "bl with 24 bit displacement"
     (UNCOND-CTI (IDOC BR))
     "bl.l $disp24"
     (+ OP1_15 (f-r1 14) disp24)
     (sequence ()
	       (set (reg h-gr 14) (add pc (const 4)))
	       (set pc disp24))
     ((m32r/d (unit u-cti))
      (m32rx (unit u-cti))
      (m32r2 (unit u-cti)))
)

(dnmi bl24r "relaxable bl24"
     (UNCOND-CTI RELAXED (IDOC BR))
     "bl $disp24"
     (emit bl24 disp24)
)

(dni bcl8 "bcl with 8 bit displacement"
     (COND-CTI FILL-SLOT (MACH m32rx,m32r2) (PIPE O) (IDOC BR))
     "bcl.s $disp8"
     (+ OP1_7 (f-r1 8) disp8)
     (if condbit
         (sequence ()
		   (set (reg h-gr 14)
			(add (and pc (const -4))
			     (const 4)))
		   (set pc disp8)))
     ((m32rx (unit u-cti))
      (m32r2 (unit u-cti)))
)

(dnmi bcl8r "relaxable bcl8"
     (COND-CTI FILL-SLOT (MACH m32rx,m32r2) (PIPE O) RELAXABLE (IDOC BR))
     "bcl $disp8"
     (emit bcl8 disp8)
)

(dni bcl24 "bcl with 24 bit displacement"
     (COND-CTI (MACH m32rx,m32r2) (IDOC BR))
     "bcl.l $disp24"
     (+ OP1_15 (f-r1 8) disp24)
     (if condbit
         (sequence ()
		   (set (reg h-gr 14) (add pc (const 4)))
		   (set pc disp24)))
     ((m32rx (unit u-cti))
      (m32r2 (unit u-cti)))
)

(dnmi bcl24r "relaxable bcl24"
     (COND-CTI (MACH m32rx,m32r2) RELAXED (IDOC BR))
     "bcl $disp24"
     (emit bcl24 disp24)
)

(dni bnc8 "bnc with 8 bit displacement"
     (COND-CTI (PIPE O) (IDOC BR))
     "bnc.s $disp8"
     (+ OP1_7 (f-r1 13) disp8)
     (if (not condbit) (set pc disp8))
     ((m32r/d (unit u-cti))
      (m32rx (unit u-cti))
      (m32r2 (unit u-cti)))
)

(dnmi bnc8r "relaxable bnc8"
     (COND-CTI RELAXABLE (PIPE O) (IDOC BR))
     "bnc $disp8"
     (emit bnc8 disp8)
)

(dni bnc24 "bnc with 24 bit displacement"
     (COND-CTI (IDOC BR))
     "bnc.l $disp24"
     (+ OP1_15 (f-r1 13) disp24)
     (if (not condbit) (set pc disp24))
     ((m32r/d (unit u-cti))
      (m32rx (unit u-cti))
      (m32r2 (unit u-cti)))
)

(dnmi bnc24r "relaxable bnc24"
     (COND-CTI RELAXED (IDOC BR))
     "bnc $disp24"
     (emit bnc24 disp24)
)

(dni bne "bne"
     (COND-CTI (IDOC BR))
     "bne $src1,$src2,$disp16"
     (+ OP1_11 OP2_1 src1 src2 disp16)
     (if (ne src1 src2) (set pc disp16))
     ((m32r/d (unit u-cti) (unit u-cmp (cycles 0)))
      (m32rx (unit u-cti) (unit u-cmp (cycles 0)))
      (m32r2 (unit u-cti) (unit u-cmp (cycles 0))))
)

(dni bra8 "bra with 8 bit displacement"
     (UNCOND-CTI FILL-SLOT (PIPE O) (IDOC BR))
     "bra.s $disp8"
     (+ OP1_7 (f-r1 15) disp8)
     (set pc disp8)
     ((m32r/d (unit u-cti))
      (m32rx (unit u-cti))
      (m32r2 (unit u-cti)))
)

(dnmi bra8r "relaxable bra8"
     (UNCOND-CTI FILL-SLOT RELAXABLE (PIPE O) (IDOC BR))
     "bra $disp8"
     (emit bra8 disp8)
)

(dni bra24 "bra with 24 displacement"
     (UNCOND-CTI (IDOC BR))
     "bra.l $disp24"
     (+ OP1_15 (f-r1 15) disp24)
     (set pc disp24)
     ((m32r/d (unit u-cti))
      (m32rx (unit u-cti))
      (m32r2 (unit u-cti)))
)

(dnmi bra24r "relaxable bra24"
     (UNCOND-CTI RELAXED (IDOC BR))
     "bra $disp24"
     (emit bra24 disp24)
)

(dni bncl8 "bncl with 8 bit displacement"
     (COND-CTI FILL-SLOT (MACH m32rx,m32r2) (PIPE O) (IDOC BR))
     "bncl.s $disp8"
     (+ OP1_7 (f-r1 9) disp8)
     (if (not condbit) 
         (sequence ()
		   (set (reg h-gr 14)
			(add (and pc (const -4))
			     (const 4)))
		   (set pc disp8)))
     ((m32rx (unit u-cti))
      (m32r2 (unit u-cti)))
)

(dnmi bncl8r "relaxable bncl8"
     (COND-CTI FILL-SLOT (MACH m32rx,m32r2) (PIPE O) RELAXABLE (IDOC BR))
     "bncl $disp8"
     (emit bncl8 disp8)
)

(dni bncl24 "bncl with 24 bit displacement"
     (COND-CTI (MACH m32rx,m32r2) (IDOC BR))
     "bncl.l $disp24"
     (+ OP1_15 (f-r1 9) disp24)
     (if (not condbit)
         (sequence ()
		   (set (reg h-gr 14) (add pc (const 4)))
		   (set pc disp24)))
     ((m32rx (unit u-cti))
      (m32r2 (unit u-cti)))
)

(dnmi bncl24r "relaxable bncl24"
     (COND-CTI (MACH m32rx,m32r2) RELAXED (IDOC BR))
     "bncl $disp24"
     (emit bncl24 disp24)
)

(dni cmp "cmp"
     ((PIPE OS) (IDOC ALU))
     "cmp $src1,$src2"
     (+ OP1_0 OP2_4 src1 src2)
     (set condbit (lt src1 src2))
     ((m32r/d (unit u-cmp))
      (m32rx (unit u-cmp))
      (m32r2 (unit u-cmp)))
)

(dni cmpi "cmpi"
     ((IDOC ALU))
     "cmpi $src2,$simm16"
     (+ OP1_8 (f-r1 0) OP2_4 src2 simm16)
     (set condbit (lt src2 simm16))
     ((m32r/d (unit u-cmp))
      (m32rx (unit u-cmp))
      (m32r2 (unit u-cmp)))
)

(dni cmpu "cmpu"
     ((PIPE OS) (IDOC ALU))
     "cmpu $src1,$src2"
     (+ OP1_0 OP2_5 src1 src2)
     (set condbit (ltu src1 src2))
     ((m32r/d (unit u-cmp))
      (m32rx (unit u-cmp))
      (m32r2 (unit u-cmp)))
)

(dni cmpui "cmpui"
     ((IDOC ALU))
     "cmpui $src2,$simm16"
     (+ OP1_8 (f-r1 0) OP2_5 src2 simm16)
     (set condbit (ltu src2 simm16))
     ((m32r/d (unit u-cmp))
      (m32rx (unit u-cmp))
      (m32r2 (unit u-cmp)))
)

(dni cmpeq "cmpeq"
     ((MACH m32rx,m32r2) (PIPE OS) (IDOC ALU))
     "cmpeq $src1,$src2"
     (+ OP1_0 OP2_6 src1 src2)
     (set condbit (eq src1 src2))
     ((m32rx (unit u-cmp))
      (m32r2 (unit u-cmp)))
)

(dni cmpz "cmpz"
     ((MACH m32rx,m32r2) (PIPE OS) (IDOC ALU))
     "cmpz $src2"
     (+ OP1_0 OP2_7 (f-r1 0) src2)
     (set condbit (eq src2 (const 0)))
     ((m32rx (unit u-cmp))
      (m32r2 (unit u-cmp)))
)

(dni div "div"
     ((IDOC ALU))
     "div $dr,$sr"
     (+ OP1_9 OP2_0 dr sr (f-simm16 0))
     (if (ne sr (const 0)) (set dr (div dr sr)))
     ((m32r/d (unit u-exec (cycles 37)))
      (m32rx (unit u-exec (cycles 37)))
      (m32r2 (unit u-exec (cycles 37))))
)

(dni divu "divu"
     ((IDOC ALU))
     "divu $dr,$sr"
     (+ OP1_9 OP2_1 dr sr (f-simm16 0))
     (if (ne sr (const 0)) (set dr (udiv dr sr)))
     ((m32r/d (unit u-exec (cycles 37)))
      (m32rx (unit u-exec (cycles 37)))
      (m32r2 (unit u-exec (cycles 37))))
)

(dni rem "rem"
     ((IDOC ALU))
     "rem $dr,$sr"
     (+ OP1_9 OP2_2 dr sr (f-simm16 0))
     ; FIXME: Check rounding direction.
     (if (ne sr (const 0)) (set dr (mod dr sr)))
     ((m32r/d (unit u-exec (cycles 37)))
      (m32rx (unit u-exec (cycles 37)))
      (m32r2 (unit u-exec (cycles 37))))
)

(dni remu "remu"
     ((IDOC ALU))
     "remu $dr,$sr"
     (+ OP1_9 OP2_3 dr sr (f-simm16 0))
     ; FIXME: Check rounding direction.
     (if (ne sr (const 0)) (set dr (umod dr sr)))
     ((m32r/d (unit u-exec (cycles 37)))
      (m32rx (unit u-exec (cycles 37)))
      (m32r2 (unit u-exec (cycles 37))))
)

(dni remh "remh"
     ((MACH m32r2))
     "remh $dr,$sr"
     (+ OP1_9 OP2_2 dr sr (f-simm16 #x10))
     ; FIXME: Check rounding direction.
     (if (ne sr (const 0)) (set dr (mod (ext WI (trunc HI dr)) sr)))
     ((m32r2 (unit u-exec (cycles 21))))
)

(dni remuh "remuh"
     ((MACH m32r2))
     "remuh $dr,$sr"
     (+ OP1_9 OP2_3 dr sr (f-simm16 #x10))
     ; FIXME: Check rounding direction.
     (if (ne sr (const 0)) (set dr (umod dr sr)))
     ((m32r2 (unit u-exec (cycles 21))))
)

(dni remb "remb"
     ((MACH m32r2))
     "remb $dr,$sr"
     (+ OP1_9 OP2_2 dr sr (f-simm16 #x18))
     ; FIXME: Check rounding direction.
     (if (ne sr (const 0)) (set dr (mod (ext WI (trunc BI dr)) sr)))
     ((m32r2 (unit u-exec (cycles 21))))
)

(dni remub "remub"
     ((MACH m32r2))
     "remub $dr,$sr"
     (+ OP1_9 OP2_3 dr sr (f-simm16 #x18))
     ; FIXME: Check rounding direction.
     (if (ne sr (const 0)) (set dr (umod dr sr)))
     ((m32r2 (unit u-exec (cycles 21))))
)

(dni divuh "divuh"
     ((MACH m32r2))
     "divuh $dr,$sr"
     (+ OP1_9 OP2_1 dr sr (f-simm16 #x10))
     (if (ne sr (const 0)) (set dr (udiv dr sr)))
     ((m32r2 (unit u-exec (cycles 21))))
)

(dni divb "divb"
     ((MACH m32r2))
     "divb $dr,$sr"
     (+ OP1_9 OP2_0 dr sr (f-simm16 #x18))
     (if (ne sr (const 0)) (set dr (div (ext WI (trunc BI dr)) sr)))
     ((m32r2 (unit u-exec (cycles 21))))
)

(dni divub "divub"
     ((MACH m32r2))
     "divub $dr,$sr"
     (+ OP1_9 OP2_1 dr sr (f-simm16 #x18))
     (if (ne sr (const 0)) (set dr (udiv dr sr)))
     ((m32r2 (unit u-exec (cycles 21))))
)

(dni divh "divh"
     ((MACH m32rx,m32r2) (IDOC ALU))
     "divh $dr,$sr"
     (+ OP1_9 OP2_0 dr sr (f-simm16 #x10))
     (if (ne sr (const 0)) (set dr (div (ext WI (trunc HI dr)) sr)))
     ((m32rx (unit u-exec (cycles 21)))
      (m32r2 (unit u-exec (cycles 21))))
)

(dni jc "jc"
     (COND-CTI (MACH m32rx,m32r2) (PIPE O) SPECIAL (IDOC BR))
     "jc $sr"
     (+ OP1_1 (f-r1 12) OP2_12 sr)
     (if condbit (set pc (and sr (const -4))))
     ((m32rx (unit u-cti))
      (m32r2 (unit u-cti)))
)

(dni jnc "jnc"
     (COND-CTI (MACH m32rx,m32r2) (PIPE O) SPECIAL (IDOC BR))
     "jnc $sr"
     (+ OP1_1 (f-r1 13) OP2_12 sr)
     (if (not condbit) (set pc (and sr (const -4))))
     ((m32rx (unit u-cti))
      (m32r2 (unit u-cti)))
)

(dni jl "jl"
     (UNCOND-CTI FILL-SLOT (PIPE O) (IDOC BR))
     "jl $sr"
     (+ OP1_1 (f-r1 14) OP2_12 sr)
     (parallel ()
	       (set (reg h-gr 14)
		    (add (and pc (const -4)) (const 4)))
	       (set pc (and sr (const -4))))
     ((m32r/d (unit u-cti))
      (m32rx (unit u-cti))
      (m32r2 (unit u-cti)))
)

(dni jmp "jmp"
     (UNCOND-CTI (PIPE O) (IDOC BR))
     "jmp $sr"
     (+ OP1_1 (f-r1 15) OP2_12 sr)
     (set pc (and sr (const -4)))
     ; The above works now so this kludge has been commented out.
     ; It's kept around because the f-r1 reference in the semantic part
     ; should work.
     ; FIXME: kludge, instruction decoding not finished.
     ; But this should work, so that's another FIXME.
     ;(sequence VOID (if VOID (eq SI f-r1 (const SI 14))
     ; FIXME: abuf->insn should be a macro of some sort.
     ;(sequence VOID
     ;	       (if VOID (eq SI (c-code SI "((abuf->insn >> 8) & 15)")
     ;			  (const SI 14))
     ;		   (set WI (reg WI h-gr 14)
     ;			(add WI (and WI pc (const WI -4)) (const WI 4))))
     ;	       (set WI pc sr))
     ((m32r/d (unit u-cti))
      (m32rx (unit u-cti))
      (m32r2 (unit u-cti)))
)

(define-pmacro (no-ext-expr mode expr) expr)
(define-pmacro (ext-expr mode expr) (ext mode expr))
(define-pmacro (zext-expr mode expr) (zext mode expr))

(define-pmacro (load-op suffix op2-op mode ext-op)
  (begin
    (dni (.sym ld suffix) (.str "ld" suffix)
	 ((PIPE O) (IDOC MEM))
	 (.str "ld" suffix " $dr,@$sr")
	 (+ OP1_2 op2-op dr sr)
	 (set dr (ext-op WI (mem mode sr)))
	 ((m32r/d (unit u-load))
	  (m32rx (unit u-load))
	  (m32r2 (unit u-load)))
	 )
    (dnmi (.sym ld suffix "-2") (.str "ld" suffix "-2")
	  (NO-DIS (PIPE O) (IDOC MEM))
	  (.str "ld" suffix " $dr,@($sr)")
	  (emit (.sym ld suffix) dr sr))
    (dni (.sym ld suffix -d) (.str "ld" suffix "-d")
	 ((IDOC MEM))
	 (.str "ld" suffix " $dr,@($slo16,$sr)")
	 (+ OP1_10 op2-op dr sr slo16)
	 (set dr (ext-op WI (mem mode (add sr slo16))))
	 ((m32r/d (unit u-load (cycles 2)))
	  (m32rx (unit u-load (cycles 2)))
	  (m32r2 (unit u-load (cycles 2))))
	 )
    (dnmi (.sym ld suffix -d2) (.str "ld" suffix "-d2")
	  (NO-DIS (IDOC MEM))
	  (.str "ld" suffix " $dr,@($sr,$slo16)")
	  (emit (.sym ld suffix -d) dr sr slo16))
    )
)
(load-op "" OP2_12 WI no-ext-expr)
(load-op b OP2_8 QI ext-expr)
(load-op h OP2_10 HI ext-expr)
(load-op ub OP2_9 QI zext-expr)
(load-op uh OP2_11 HI zext-expr)

(dni ld-plus "ld+"
     ((PIPE O) (IDOC MEM))
     "ld $dr,@$sr+"
     (+ OP1_2 dr OP2_14 sr)
     (parallel ()
	       ; wip: memory addresses in profiling support
	       ;(set dr (name ld-mem (mem WI sr)))
	       (set dr (mem WI sr))
	       (set sr (add sr (const 4))))
     ; Note: `pred' is the constraint.  Also useful here is (ref name)
     ; and returns true if operand <name> was referenced
     ; (where "referenced" means _read_ if input operand and _written_ if
     ; output operand).
     ; args to unit are "unit-name (name1 value1) ..."
     ; - cycles(done),issue,pred are also specified this way
     ; - if unspecified, default is used
     ; - for ins/outs, extra arg is passed that says what was specified
     ;   - this is AND'd with `written' for outs
     ((m32r/d (unit u-load (pred (const 1)))
	      (unit u-exec (in sr #f) (in dr sr) (out dr sr) (cycles 0) (pred (const 1))))
      (m32rx (unit u-load)
	     (unit u-exec (in sr #f) (in dr sr) (out dr sr) (cycles 0) (pred (const 1))))
      (m32r2 (unit u-load)
	     (unit u-exec (in sr #f) (in dr sr) (out dr sr) (cycles 0) (pred (const 1))))
      )
)

(dnmi pop "pop"
      ((PIPE O) (IDOC MEM))
      "pop $dr"
      (emit ld-plus dr (sr 15)) ; "ld %0,@sp+"
)

(dni ld24 "ld24"
     ((IDOC MEM))
     "ld24 $dr,$uimm24"
     (+ OP1_14 dr uimm24)
     (set dr uimm24)
     ()
)

; ldi8 appears before ldi16 so we try the shorter version first

(dni ldi8 "ldi8"
     ((PIPE OS) (IDOC ALU))
     "ldi8 $dr,$simm8"
     (+ OP1_6 dr simm8)
     (set dr simm8)
     ()
)

(dnmi ldi8a "ldi8 alias"
     ((PIPE OS) (IDOC ALU))
     "ldi $dr,$simm8"
     (emit ldi8 dr simm8)
)

(dni ldi16 "ldi16"
     ((IDOC ALU))
     "ldi16 $dr,$hash$slo16"
     (+ OP1_9 OP2_15 (f-r2 0) dr slo16)
     (set dr slo16)
     ()
)

(dnmi ldi16a "ldi16 alias"
     ((IDOC ALU))
     "ldi $dr,$hash$slo16"
     (emit ldi16 dr slo16)
)

(dni lock "lock"
     ((PIPE O) (IDOC MISC))
     "lock $dr,@$sr"
     (+ OP1_2 OP2_13 dr sr)
     (sequence ()
	       (set (reg h-lock) (const BI 1))
	       (set dr (mem WI sr)))
     ((m32r/d (unit u-load))
      (m32rx (unit u-load))
      (m32r2 (unit u-load)))
)

(dni machi "machi"
     (
      ; (MACH m32r) is a temporary hack.  This insn collides with machi-a
      ; in the simulator so disable it for m32rx.
      (MACH m32r) (PIPE S) (IDOC MAC)
     )
     "machi $src1,$src2"
     (+ OP1_3 OP2_4 src1 src2)
     ; FIXME: TRACE_RESULT will print the wrong thing since we
     ; alter one of the arguments.
     (set accum
	  (sra DI
	       (sll DI
		    (add DI
			 accum
			 (mul DI
			      (ext DI (and WI src1 (const #xffff0000)))
			      (ext DI (trunc HI (sra WI src2 (const 16))))))
		    (const 8))
	       (const 8)))
     ((m32r/d (unit u-mac)))
)

(dni machi-a "machi-a"
     ((MACH m32rx,m32r2) (PIPE S) (IDOC MAC))
     "machi $src1,$src2,$acc"
     (+ OP1_3 src1 acc (f-op23 4) src2)
     (set acc
	  (sra DI
	       (sll DI
		    (add DI
			 acc
			 (mul DI
			      (ext DI (and WI src1 (const #xffff0000)))
			      (ext DI (trunc HI (sra WI src2 (const 16))))))
		    (const 8))
	       (const 8)))
     ((m32rx (unit u-mac))
      (m32r2 (unit u-mac)))
)

(dni maclo "maclo"
     ((MACH m32r) (PIPE S) (IDOC MAC))
     "maclo $src1,$src2"
     (+ OP1_3 OP2_5 src1 src2)
     (set accum
	  (sra DI
	       (sll DI
		    (add DI
			 accum
			 (mul DI
			      (ext DI (sll WI src1 (const 16)))
			      (ext DI (trunc HI src2))))
		    (const 8))
	       (const 8)))
     ((m32r/d (unit u-mac)))
)

(dni maclo-a "maclo-a"
     ((MACH m32rx,m32r2) (PIPE S) (IDOC MAC))
     "maclo $src1,$src2,$acc"
     (+ OP1_3 src1 acc (f-op23 5) src2)
     (set acc
	  (sra DI
	       (sll DI
		    (add DI
			 acc
			 (mul DI
			      (ext DI (sll WI src1 (const 16)))
			      (ext DI (trunc HI src2))))
		    (const 8))
	       (const 8)))
     ((m32rx (unit u-mac))
      (m32r2 (unit u-mac)))
)

(dni macwhi "macwhi"
     ((MACH m32r) (PIPE S) (IDOC MAC))
     "macwhi $src1,$src2"
     (+ OP1_3 OP2_6 src1 src2)
     (set accum
	  (sra DI
	       (sll DI
		    (add DI
			 accum
			 (mul DI
			      (ext DI src1)
			      (ext DI (trunc HI (sra WI src2 (const 16))))))
		    (const 8))
	       (const 8)))
     ((m32r/d (unit u-mac)))
)

(dni macwhi-a "macwhi-a"
     ((MACH m32rx,m32r2) (PIPE S) SPECIAL (IDOC MAC))
     "macwhi $src1,$src2,$acc"
     (+ OP1_3 src1 acc (f-op23 6) src2)
     ; Note that this doesn't do the sign extension, which is correct.
     (set acc
	  (add acc
	       (mul (ext DI src1)
		    (ext DI (trunc HI (sra src2 (const 16)))))))
     ((m32rx (unit u-mac))
      (m32r2 (unit u-mac)))
)

(dni macwlo "macwlo"
     ((MACH m32r) (PIPE S) (IDOC MAC))
     "macwlo $src1,$src2"
     (+ OP1_3 OP2_7 src1 src2)
     (set accum
	  (sra DI
	       (sll DI
		    (add DI
			 accum
			 (mul DI
			      (ext DI src1)
			      (ext DI (trunc HI src2))))
		    (const 8))
	       (const 8)))
     ((m32r/d (unit u-mac)))
)

(dni macwlo-a "macwlo-a"
     ((MACH m32rx,m32r2) (PIPE S) SPECIAL (IDOC MAC))
     "macwlo $src1,$src2,$acc"
     (+ OP1_3 src1 acc (f-op23 7) src2)
     ; Note that this doesn't do the sign extension, which is correct.
     (set acc
	  (add acc
	       (mul (ext DI src1)
		    (ext DI (trunc HI src2)))))
     ((m32rx (unit u-mac))
      (m32r2 (unit u-mac)))
)

(dni mul "mul"
     ((PIPE S) (IDOC ALU))
     "mul $dr,$sr"
     (+ OP1_1 OP2_6 dr sr)
     (set dr (mul dr sr))
     ((m32r/d (unit u-exec (cycles 4)))
      (m32rx (unit u-exec (cycles 4)))
      (m32r2 (unit u-exec (cycles 4))))
)

(dni mulhi "mulhi"
     ((MACH m32r) (PIPE S) (IDOC ACCUM))
     "mulhi $src1,$src2"
     (+ OP1_3 OP2_0 src1 src2)
     (set accum
	  (sra DI
	       (sll DI
		    (mul DI
			 (ext DI (and WI src1 (const #xffff0000)))
			 (ext DI (trunc HI (sra WI src2 (const 16)))))
		    (const 16))
	       (const 16)))
     ((m32r/d (unit u-mac)))
)

(dni mulhi-a "mulhi-a"
     ((MACH m32rx,m32r2) (PIPE S) (IDOC ACCUM))
     "mulhi $src1,$src2,$acc"
     (+ OP1_3 (f-op23 0) src1 acc src2)
     (set acc
	  (sra DI
	       (sll DI
		    (mul DI
			 (ext DI (and WI src1 (const #xffff0000)))
			 (ext DI (trunc HI (sra WI src2 (const 16)))))
		    (const 16))
	       (const 16)))
     ((m32rx (unit u-mac))
      (m32r2 (unit u-mac)))
)

(dni mullo "mullo"
     ((MACH m32r) (PIPE S) (IDOC ACCUM))
     "mullo $src1,$src2"
     (+ OP1_3 OP2_1 src1 src2)
     (set accum
	  (sra DI
	       (sll DI
		    (mul DI
			 (ext DI (sll WI src1 (const 16)))
			 (ext DI (trunc HI src2)))
		    (const 16))
	       (const 16)))
     ((m32r/d (unit u-mac)))
)

(dni mullo-a "mullo-a"
     ((MACH m32rx,m32r2) (PIPE S) (IDOC ACCUM))
     "mullo $src1,$src2,$acc"
     (+ OP1_3 src1 acc (f-op23 1) src2)
     (set acc
	  (sra DI
	       (sll DI
		    (mul DI
			 (ext DI (sll WI src1 (const 16)))
			 (ext DI (trunc HI src2)))
		    (const 16))
	       (const 16)))
     ((m32rx (unit u-mac))
      (m32r2 (unit u-mac)))
)

(dni mulwhi "mulwhi"
     ((MACH m32r) (PIPE S) (IDOC ACCUM))
     "mulwhi $src1,$src2"
     (+ OP1_3 OP2_2 src1 src2)
     (set accum
	  (sra DI
	       (sll DI
		    (mul DI
			 (ext DI src1)
			 (ext DI (trunc HI (sra WI src2 (const 16)))))
		    (const 8))
	       (const 8)))
     ((m32r/d (unit u-mac)))
)

(dni mulwhi-a "mulwhi-a"
     ((MACH m32rx,m32r2) (PIPE S) SPECIAL (IDOC ACCUM))
     "mulwhi $src1,$src2,$acc"
     (+ OP1_3 src1 acc (f-op23 2) src2)
     ; Note that this doesn't do the sign extension, which is correct.
     (set acc
	  (mul (ext DI src1)
	       (ext DI (trunc HI (sra src2 (const 16))))))
     ((m32rx (unit u-mac))
      (m32r2 (unit u-mac)))
)

(dni mulwlo "mulwlo"
     ((MACH m32r) (PIPE S) (IDOC ACCUM))
     "mulwlo $src1,$src2"
     (+ OP1_3 OP2_3 src1 src2)
     (set accum
	  (sra DI
	       (sll DI
		    (mul DI
			 (ext DI src1)
			 (ext DI (trunc HI src2)))
		    (const 8))
	       (const 8)))
     ((m32r/d (unit u-mac)))
)

(dni mulwlo-a "mulwlo-a"
     ((MACH m32rx,m32r2) (PIPE S) SPECIAL (IDOC ACCUM))
     "mulwlo $src1,$src2,$acc"
     (+ OP1_3 src1 acc (f-op23 3) src2)
     ; Note that this doesn't do the sign extension, which is correct.
     (set acc
	  (mul (ext DI src1)
	       (ext DI (trunc HI src2))))
     ((m32rx (unit u-mac))
      (m32r2 (unit u-mac)))
)

(dni mv "mv"
     ((PIPE OS) (IDOC ALU))
     "mv $dr,$sr"
     (+ OP1_1 OP2_8 dr sr)
     (set dr sr)
     ()
)

(dni mvfachi "mvfachi"
     ((MACH m32r) (PIPE S) (IDOC ACCUM))
     "mvfachi $dr"
     (+ OP1_5 OP2_15 (f-r2 0) dr)
     (set dr (trunc WI (sra DI accum (const 32))))
     ((m32r/d (unit u-exec (cycles 2))))
)

(dni mvfachi-a "mvfachi-a"
     ((MACH m32rx,m32r2) (PIPE S) (IDOC ACCUM))
     "mvfachi $dr,$accs"
     (+ OP1_5 dr OP2_15 accs (f-op3 0))
     (set dr (trunc WI (sra DI accs (const 32))))
     ((m32rx (unit u-exec (cycles 2)))
      (m32r2 (unit u-exec (cycles 2))))
)

(dni mvfaclo "mvfaclo"
     ((MACH m32r) (PIPE S) (IDOC ACCUM))
     "mvfaclo $dr"
     (+ OP1_5 OP2_15 (f-r2 1) dr)
     (set dr (trunc WI accum))
     ((m32r/d (unit u-exec (cycles 2))))
)

(dni mvfaclo-a "mvfaclo-a"
     ((MACH m32rx,m32r2) (PIPE S) (IDOC ACCUM))
     "mvfaclo $dr,$accs"
     (+ OP1_5 dr OP2_15 accs (f-op3 1))
     (set dr (trunc WI accs))
     ((m32rx (unit u-exec (cycles 2)))
      (m32r2 (unit u-exec (cycles 2))))
)

(dni mvfacmi "mvfacmi"
     ((MACH m32r) (PIPE S) (IDOC ACCUM))
     "mvfacmi $dr"
     (+ OP1_5 OP2_15 (f-r2 2) dr)
     (set dr (trunc WI (sra DI accum (const 16))))
     ((m32r/d (unit u-exec (cycles 2))))
)

(dni mvfacmi-a "mvfacmi-a"
     ((MACH m32rx,m32r2) (PIPE S) (IDOC ACCUM))
     "mvfacmi $dr,$accs"
     (+ OP1_5 dr OP2_15 accs (f-op3 2))
     (set dr (trunc WI (sra DI accs (const 16))))
     ((m32rx (unit u-exec (cycles 2)))
      (m32r2 (unit u-exec (cycles 2))))
)

(dni mvfc "mvfc"
     ((PIPE O) (IDOC MISC))
     "mvfc $dr,$scr"
     (+ OP1_1 OP2_9 dr scr)
     (set dr scr)
     ()
)

(dni mvtachi "mvtachi"
     ((MACH m32r) (PIPE S) (IDOC ACCUM))
     "mvtachi $src1"
     (+ OP1_5 OP2_7 (f-r2 0) src1)
     (set accum
	  (or DI
	      (and DI accum (const DI #xffffffff))
	      (sll DI (ext DI src1) (const 32))))
     ((m32r/d (unit u-exec (in sr src1))))
)

(dni mvtachi-a "mvtachi-a"
     ((MACH m32rx,m32r2) (PIPE S) (IDOC ACCUM))
     "mvtachi $src1,$accs"
     (+ OP1_5 src1 OP2_7 accs (f-op3 0))
     (set accs
	  (or DI
	      (and DI accs (const DI #xffffffff))
	      (sll DI (ext DI src1) (const 32))))
     ((m32rx (unit u-exec (in sr src1)))
      (m32r2 (unit u-exec (in sr src1))))
)

(dni mvtaclo "mvtaclo"
     ((MACH m32r) (PIPE S) (IDOC ACCUM))
     "mvtaclo $src1"
     (+ OP1_5 OP2_7 (f-r2 1) src1)
     (set accum
	  (or DI
	      (and DI accum (const DI #xffffffff00000000))
	      (zext DI src1)))
     ((m32r/d (unit u-exec (in sr src1))))
)

(dni mvtaclo-a "mvtaclo-a"
     ((MACH m32rx,m32r2) (PIPE S) (IDOC ACCUM))
     "mvtaclo $src1,$accs"
     (+ OP1_5 src1 OP2_7 accs (f-op3 1))
     (set accs
	  (or DI
	      (and DI accs (const DI #xffffffff00000000))
	      (zext DI src1)))
     ((m32rx (unit u-exec (in sr src1)))
      (m32r2 (unit u-exec (in sr src1))))
)

(dni mvtc "mvtc"
     ((PIPE O) (IDOC MISC))
     "mvtc $sr,$dcr"
     (+ OP1_1 OP2_10 dcr sr)
     (set dcr sr)
     ()
)

(dni neg "neg"
     ((PIPE OS) (IDOC ALU))
     "neg $dr,$sr"
     (+ OP1_0 OP2_3 dr sr)
     (set dr (neg sr))
     ()
)

(dni nop "nop"
     ((PIPE OS) (IDOC MISC))
     "nop"
     (+ OP1_7 OP2_0 (f-r1 0) (f-r2 0))
     (c-code VOID "PROFILE_COUNT_FILLNOPS (current_cpu, abuf->addr);\n")
     ; FIXME: quick hack: parallel nops don't contribute to cycle count.
     ; Other kinds of nops do however (which we currently ignore).
     ((m32r/d (unit u-exec (cycles 0)))
      (m32rx (unit u-exec (cycles 0)))
      (m32r2 (unit u-exec (cycles 0))))
)

(dni not "not"
     ((PIPE OS) (IDOC ALU))
     "not $dr,$sr"
     (+ OP1_0 OP2_11 dr sr)
     (set dr (inv sr))
     ()
)

(dni rac "rac"
     ((MACH m32r) (PIPE S) (IDOC MAC))
     "rac"
     (+ OP1_5 OP2_9 (f-r1 0) (f-r2 0))
     (sequence ((DI tmp1))
	       (set tmp1 (sll DI accum (const 1)))
	       (set tmp1 (add DI tmp1 (const DI #x8000)))
	       (set accum
		    (cond DI
			  ((gt tmp1 (const DI #x00007fffffff0000))
			   (const DI #x00007fffffff0000))
			  ((lt tmp1 (const DI #xffff800000000000))
			   (const DI #xffff800000000000))
			  (else (and tmp1 (const DI #xffffffffffff0000)))))
	       )
     ((m32r/d (unit u-mac)))
)

(dni rac-dsi "rac-dsi"
     ((MACH m32rx,m32r2) (PIPE S) (IDOC MAC))
     "rac $accd,$accs,$imm1"
     (+ OP1_5 accd (f-bits67 0) OP2_9 accs (f-bit14 0) imm1)
     (sequence ((DI tmp1))
	       (set tmp1 (sll accs imm1))
	       (set tmp1 (add tmp1 (const DI #x8000)))
	       (set accd
		    (cond DI
			  ((gt tmp1 (const DI #x00007fffffff0000))
			   (const DI #x00007fffffff0000))
			  ((lt tmp1 (const DI #xffff800000000000))
			   (const DI #xffff800000000000))
			  (else (and tmp1 (const DI #xffffffffffff0000)))))
	       )
     ((m32rx (unit u-mac))
      (m32r2 (unit u-mac)))
)

(dnmi rac-d "rac-d"
     ((MACH m32rx,m32r2) (PIPE S) (IDOC MAC))
     "rac $accd"
     (emit rac-dsi accd (f-accs 0) (f-imm1 0))
)

(dnmi rac-ds "rac-ds"
     ((MACH m32rx,m32r2) (PIPE S) (IDOC MAC))
     "rac $accd,$accs"
     (emit rac-dsi accd accs (f-imm1 0))
)


(dni rach "rach"
     ((MACH m32r) (PIPE S) (IDOC MAC))
     "rach"
     (+ OP1_5 OP2_8 (f-r1 0) (f-r2 0))
     (sequence ((DI tmp1))
	       ; Lop off top 8 bits.
	       ; The sign bit we want to use is bit 55 so the 64 bit value
	       ; isn't properly signed which we deal with in the if's below.
	       (set tmp1 (and accum (const DI #xffffffffffffff)))
	       (if (andif (ge tmp1 (const DI #x003fff80000000))
			  (le tmp1 (const DI #x7fffffffffffff)))
		   (set tmp1 (const DI #x003fff80000000))
		   ; else part
		   (if (andif (ge tmp1 (const DI #x80000000000000))
			      (le tmp1 (const DI #xffc00000000000)))
		       (set tmp1 (const DI #xffc00000000000))
		       (set tmp1 (and (add accum (const DI #x40000000))
				      (const DI #xffffffff80000000)))))
	       (set tmp1 (sll tmp1 (const 1)))
	       ; Sign extend top 8 bits.
	       (set accum
		    ; FIXME: 7?
		    (sra DI (sll DI tmp1 (const 7)) (const 7)))
	       )
     ((m32r/d (unit u-mac)))
)

(dni rach-dsi "rach-dsi"
     ((MACH m32rx,m32r2) (PIPE S) (IDOC MAC))
     "rach $accd,$accs,$imm1"
     (+ OP1_5 accd (f-bits67 0) OP2_8 accs (f-bit14 0) imm1)
     (sequence ((DI tmp1))
	       (set tmp1 (sll accs imm1))
	       (set tmp1 (add tmp1 (const DI #x80000000)))
	       (set accd
		    (cond DI
			  ((gt tmp1 (const DI #x00007fff00000000))
			   (const DI #x00007fff00000000))
			  ((lt tmp1 (const DI #xffff800000000000))
			   (const DI #xffff800000000000))
			  (else (and tmp1 (const DI #xffffffff00000000)))))
	       )
     ((m32rx (unit u-mac))
      (m32r2 (unit u-mac)))
)

(dnmi rach-d "rach-d"
     ((MACH m32rx,m32r2) (PIPE S) (IDOC MAC))
     "rach $accd"
     (emit rach-dsi accd (f-accs 0) (f-imm1 0))
)

(dnmi rach-ds "rach-ds"
     ((MACH m32rx,m32r2) (PIPE S) (IDOC MAC))
     "rach $accd,$accs"
     (emit rach-dsi accd accs (f-imm1 0))
)

(dni rte "rte"
     (UNCOND-CTI (PIPE O) (IDOC BR))
     "rte"
     (+ OP1_1 OP2_13 (f-r1 0) (f-r2 6))
     (sequence ()
	       ; pc = bpc & -4
	       (set pc (and (reg h-cr 6) (const -4)))
	       ; bpc = bbpc
	       (set (reg h-cr 6) (reg h-cr 14))
	       ; psw = bpsw
	       (set (reg h-psw) (reg h-bpsw))
	       ; bpsw = bbpsw
	       (set (reg h-bpsw) (reg h-bbpsw))
     )
     ()
)

(dni seth "seth"
     ((IDOC ALU))
     "seth $dr,$hash$hi16"
     (+ OP1_13 OP2_12 dr (f-r2 0) hi16)
     (set dr (sll WI hi16 (const 16)))
     ()
)

(define-pmacro (shift-op sym op2-r-op op2-3-op op2-i-op sem-op)
  (begin
     (dni sym sym ((PIPE O_OS) (IDOC ALU))
	  (.str sym " $dr,$sr")
	  (+ OP1_1 op2-r-op dr sr)
	  (set dr (sem-op dr (and sr (const 31))))
	  ()
     )
     (dni (.sym sym "3") sym ((IDOC ALU))
	  (.str sym "3 $dr,$sr,$simm16")
	  (+ OP1_9 op2-3-op dr sr simm16)
	  (set dr (sem-op sr (and WI simm16 (const 31))))
	  ()
     )
     (dni (.sym sym "i") sym ((PIPE O_OS) (IDOC ALU))
	  (.str sym "i $dr,$uimm5")
	  (+ OP1_5 (f-shift-op2 op2-i-op) dr uimm5)
	  (set dr (sem-op dr uimm5))
	  ()
     )
   )
)
(shift-op sll OP2_4 OP2_12 2 sll)
(shift-op sra OP2_2 OP2_10 1 sra)
(shift-op srl OP2_0 OP2_8 0 srl)

(define-pmacro (store-op suffix op2-op mode)
  (begin
    (dni (.sym st suffix) (.str "st" suffix)
	 ((PIPE O) (IDOC MEM))
	 (.str "st" suffix " $src1,@$src2")
	 (+ OP1_2 op2-op src1 src2)
	 (set mode (mem mode src2) src1)
	 ((m32r/d (unit u-store (cycles 1)))
	  (m32rx (unit u-store (cycles 1)))
	  (m32r2 (unit u-store (cycles 1))))
	 )
    (dnmi (.sym st suffix "-2") (.str "st" suffix "-2")
	  (NO-DIS (PIPE O) (IDOC MEM))
	  (.str "st" suffix " $src1,@($src2)")
	  (emit (.sym st suffix) src1 src2))
    (dni (.sym st suffix -d) (.str "st" suffix "-d")
	 ((IDOC MEM))
	 (.str "st" suffix " $src1,@($slo16,$src2)")
	 (+ OP1_10 op2-op src1 src2 slo16)
	 (set mode (mem mode (add src2 slo16)) src1)
	 ((m32r/d (unit u-store (cycles 2)))
	  (m32rx (unit u-store (cycles 2)))
	  (m32r2 (unit u-store (cycles 2))))
	 )
    (dnmi (.sym st suffix -d2) (.str "st" suffix "-d2")
	  (NO-DIS (IDOC MEM))
	  (.str "st" suffix " $src1,@($src2,$slo16)")
	  (emit (.sym st suffix -d) src1 src2 slo16))
    )
)
(store-op "" OP2_4 WI)
(store-op b OP2_0 QI)
(store-op h OP2_2 HI)

(dni st-plus "st+"
     ((PIPE O) (IDOC MEM))
     "st $src1,@+$src2"
     (+ OP1_2 OP2_6 src1 src2)
     ; This has to be coded carefully to avoid an "earlyclobber" of src2.
     (sequence ((WI new-src2))
	       (set new-src2 (add WI src2 (const WI 4)))
	       (set (mem WI new-src2) src1)
	       (set src2 new-src2))
     ((m32r/d (unit u-store)
	      (unit u-exec (in dr src2) (out dr src2) (cycles 0)))
      (m32rx (unit u-store)
	     (unit u-exec (in dr src2) (out dr src2) (cycles 0)))
      (m32r2 (unit u-store)
	     (unit u-exec (in dr src2) (out dr src2) (cycles 0)))
      )
)

(dni sth-plus "sth+"
     ((MACH m32rx,m32r2) (PIPE O) SPECIAL)
     "sth $src1,@$src2+"
     (+ OP1_2 OP2_3 src1 src2)
     ; This has to be coded carefully to avoid an "earlyclobber" of src2.
     (sequence ((HI new-src2))
             (set (mem HI new-src2) src1)
             (set new-src2 (add src2 (const 2)))
             (set src2 new-src2))
     ((m32rx (unit u-store)
           (unit u-exec (in dr src2) (out dr src2) (cycles 0)))
      (m32r2 (unit u-store)
           (unit u-exec (in dr src2) (out dr src2) (cycles 0)))
      )
)

(dni stb-plus "stb+"
     ((MACH m32rx,m32r2) (PIPE O) SPECIAL)
     "stb $src1,@$src2+"
     (+ OP1_2 OP2_1 src1 src2)
     ; This has to be coded carefully to avoid an "earlyclobber" of src2.
     (sequence ((QI new-src2))
             (set (mem QI new-src2) src1)
             (set new-src2 (add src2 (const 1)))
             (set src2 new-src2))
     ((m32rx (unit u-store)
           (unit u-exec (in dr src2) (out dr src2) (cycles 0)))
      (m32r2 (unit u-store)
           (unit u-exec (in dr src2) (out dr src2) (cycles 0)))
      )
)

(dni st-minus "st-"
     ((PIPE O) (IDOC MEM))
     "st $src1,@-$src2"
     (+ OP1_2 OP2_7 src1 src2)
     ; This is the original way.  It doesn't work for parallel execution
     ; because of the earlyclobber of src2.
     ;(sequence ()
     ;	       (set src2 (sub src2 (const 4)))
     ;	       (set (mem WI src2) src1))
     (sequence ((WI new-src2))
	       (set new-src2 (sub src2 (const 4)))
	       (set (mem WI new-src2) src1)
	       (set src2 new-src2))
     ((m32r/d (unit u-store)
	      (unit u-exec (in dr src2) (out dr src2) (cycles 0)))
      (m32rx (unit u-store)
	     (unit u-exec (in dr src2) (out dr src2) (cycles 0)))
      (m32r2 (unit u-store)
	     (unit u-exec (in dr src2) (out dr src2) (cycles 0)))
      )
)

(dnmi push "push" ((PIPE O) (IDOC MEM))
  "push $src1"
  (emit st-minus src1 (src2 15)) ; "st %0,@-sp"
)

(dni sub "sub"
     ((PIPE OS) (IDOC ALU))
     "sub $dr,$sr"
     (+ OP1_0 OP2_2 dr sr)
     (set dr (sub dr sr))
     ()
)

(dni subv "sub:rv"
     ((PIPE OS) (IDOC ALU))
     "subv $dr,$sr"
     (+ OP1_0 OP2_0 dr sr)
     (parallel ()
	       (set dr (sub dr sr))
	       (set condbit (sub-oflag dr sr (const 0))))
     ()
)

(dni subx "sub:rx"
     ((PIPE OS) (IDOC ALU))
     "subx $dr,$sr"
     (+ OP1_0 OP2_1 dr sr)
     (parallel ()
	       (set dr (subc dr sr condbit))
	       (set condbit (sub-cflag dr sr condbit)))
     ()
)

(dni trap "trap"
     (UNCOND-CTI FILL-SLOT (PIPE O) (IDOC MISC))
     "trap $uimm4"
     (+ OP1_1 OP2_15 (f-r1 0) uimm4)
     (sequence ()
	       ; bbpc = bpc
	       (set (reg h-cr 14) (reg h-cr 6))
	       ; Set bpc to the return address.  Actually it's not quite the
	       ; return address as RTE rounds the address down to a word
	       ; boundary.
	       (set (reg h-cr 6) (add pc (const 4)))
	       ; bbpsw = bpsw
	       (set (reg h-bbpsw) (reg h-bpsw))
	       ; bpsw = psw
	       (set (reg h-bpsw) (reg h-psw))
	       ; sm is unchanged, ie,c are set to zero.
	       (set (reg h-psw) (and (reg h-psw) (const #x80)))
	       ; m32r_trap handles operating vs user mode
	       (set WI pc (c-call WI "m32r_trap" pc uimm4))
     )
     ()
)

(dni unlock "unlock"
     ((PIPE O) (IDOC MISC))
     "unlock $src1,@$src2"
     (+ OP1_2 OP2_5 src1 src2)
     (sequence ()
	       (if (reg h-lock)
		   (set (mem WI src2) src1))
	       (set (reg h-lock) (const BI 0)))
     ((m32r/d (unit u-load))
      (m32rx (unit u-load))
      (m32r2 (unit u-load)))
)

; Saturate into byte.
(dni satb "satb"
     ((MACH m32rx,m32r2) (IDOC ALU))
     "satb $dr,$sr"
     (+ OP1_8 dr OP2_6 sr (f-uimm16 #x0300))
     (set dr
	  ; FIXME: min/max would simplify this nicely of course.
	  (cond WI
		((ge sr (const 127)) (const 127))
		((le sr (const -128)) (const -128))
		(else sr)))
     ()
)

; Saturate into half word.
(dni sath "sath"
     ((MACH m32rx,m32r2) (IDOC ALU))
     "sath $dr,$sr"
     (+ OP1_8 dr OP2_6 sr (f-uimm16 #x0200))
     (set dr
	  (cond WI
		((ge sr (const 32767)) (const 32767))
		((le sr (const -32768)) (const -32768))
		(else sr)))
     ()
)

; Saturate word.
(dni sat "sat"
     ((MACH m32rx,m32r2) SPECIAL (IDOC ALU))
     "sat $dr,$sr"
     (+ OP1_8 dr OP2_6 sr (f-uimm16 0))
     (set dr
	  (if WI condbit
	       (if WI (lt sr (const 0))
		    (const #x7fffffff)
		    (const #x80000000))
	       sr))
     ()
)

; Parallel compare byte zeros.
; Set C bit in condition register if any byte in source register is zero.
(dni pcmpbz "pcmpbz"
     ((MACH m32rx,m32r2) (PIPE OS) SPECIAL (IDOC ALU))
     "pcmpbz $src2"
     (+ OP1_0 (f-r1 3) OP2_7 src2)
     (set condbit
	  (cond BI
		 ((eq (and src2 (const #xff)) (const 0)) (const BI 1))
		 ((eq (and src2 (const #xff00)) (const 0)) (const BI 1))
		 ((eq (and src2 (const #xff0000)) (const 0)) (const BI 1))
		 ((eq (and src2 (const #xff000000)) (const 0)) (const BI 1))
		 (else (const BI 0))))
     ((m32rx (unit u-cmp))
      (m32r2 (unit u-cmp)))
)

; Add accumulators
(dni sadd "sadd"
     ((MACH m32rx,m32r2) (PIPE S) (IDOC ACCUM))
     "sadd"
     (+ OP1_5 (f-r1 0) OP2_14 (f-r2 4))
     (set (reg h-accums 0)
	  (add (sra (reg h-accums 1) (const 16))
	       (reg h-accums 0)))
     ((m32rx (unit u-mac))
      (m32r2 (unit u-mac)))
)

; Multiply and add into accumulator 1
(dni macwu1 "macwu1"
     ((MACH m32rx,m32r2) (PIPE S) (IDOC MAC))
     "macwu1 $src1,$src2"
     (+ OP1_5 src1 OP2_11 src2)
     (set (reg h-accums 1)
	  (sra DI
		(sll DI
		      (add DI
			    (reg h-accums 1)
			    (mul DI
				  (ext DI src1)
				  (ext DI (and src2 (const #xffff)))))
		      (const 8))
		(const 8)))
     ((m32rx (unit u-mac))
      (m32r2 (unit u-mac)))
)

; Multiply and subtract from accumulator 0
(dni msblo "msblo"
     ((MACH m32rx,m32r2) (PIPE S) (IDOC MAC))
     "msblo $src1,$src2"
     (+ OP1_5 src1 OP2_13 src2)
     (set accum
	  (sra DI
		(sll DI
		      (sub accum
			   (sra DI
				 (sll DI
				       (mul DI
					     (ext DI (trunc HI src1))
					     (ext DI (trunc HI src2)))
				       (const 32))
				 (const 16)))
		      (const 8))
		(const 8)))
     ((m32rx (unit u-mac))
      (m32r2 (unit u-mac)))
)

; Multiply into accumulator 1
(dni mulwu1 "mulwu1"
     ((MACH m32rx,m32r2) (PIPE S) (IDOC MAC))
     "mulwu1 $src1,$src2"
     (+ OP1_5 src1 OP2_10 src2)
     (set (reg h-accums 1)
	  (sra DI
		(sll DI
		      (mul DI
			    (ext DI src1)
			    (ext DI (and src2 (const #xffff))))
		      (const 16))
		(const 16)))
     ((m32rx (unit u-mac))
      (m32r2 (unit u-mac)))
)

; Multiply and add into accumulator 1
(dni maclh1 "maclh1"
     ((MACH m32rx,m32r2) (PIPE S) (IDOC MAC))
     "maclh1 $src1,$src2"
     (+ OP1_5 src1 OP2_12 src2)
     (set (reg h-accums 1)
	  (sra DI
		(sll DI
		    (add DI
			  (reg h-accums 1)
			  (sll DI
				(ext DI
				      (mul SI
					    (ext SI (trunc HI src1))
					    (sra SI src2 (const SI 16))))
			      (const 16)))
		    (const 8))
	       (const 8)))
     ((m32rx (unit u-mac))
      (m32r2 (unit u-mac)))
)

; skip instruction if C
(dni sc "sc"
     ((MACH m32rx,m32r2) (PIPE O) SPECIAL (IDOC BR))
     "sc"
     (+ OP1_7 (f-r1 4) OP2_0 (f-r2 1))
     (skip (zext INT condbit))
     ()
)

; skip instruction if not C
(dni snc "snc"
     ((MACH m32rx,m32r2) (PIPE O) SPECIAL (IDOC BR))
     "snc"
     (+ OP1_7 (f-r1 5) OP2_0 (f-r2 1))
     (skip (zext INT (not condbit)))
     ()
)

; PSW &= ~((unsigned char) uimm8 | 0x000ff00)
(dni clrpsw "clrpsw"
     ((PIPE O) SPECIAL_M32R)
     "clrpsw $uimm8"
     (+ OP1_7 (f-r1 2) uimm8)
     (set USI (reg h-cr 0)
              (and USI (reg h-cr 0)
                     (or USI (inv BI uimm8) (const #xff00))))
     ()
)

; PSW |= (unsigned char) uimm8
(dni setpsw "setpsw"
     ((PIPE O) SPECIAL_M32R)
     "setpsw $uimm8"
     (+ OP1_7 (f-r1 1) uimm8)
     (set USI (reg h-cr 0) uimm8)
     ()
)

; bset
(dni bset "bset"
     (SPECIAL_M32R)
     "bset $uimm3,@($slo16,$sr)"
     (+ OP1_10 (f-bit4 0) uimm3 OP2_6 sr slo16)
     (set QI (mem QI (add sr slo16))
             (or QI (mem QI (add sr slo16))
                  (sll USI (const 1) (sub (const 7) uimm3))))
     ()
)

; bclr
(dni bclr "bclr"
     (SPECIAL_M32R)
     "bclr $uimm3,@($slo16,$sr)"
     (+ OP1_10 (f-bit4 0) uimm3  OP2_7 sr slo16)
     (set QI (mem QI (add sr slo16))
             (and QI (mem QI (add sr slo16))
                   (inv QI (sll USI (const 1) (sub (const 7) uimm3)))))
     ()
)

; btst
(dni btst "btst"
     (SPECIAL_M32R (PIPE O))
     "btst $uimm3,$sr"
     (+ OP1_0 (f-bit4 0) uimm3 OP2_15 sr)
     (set condbit (and QI (srl USI sr (sub (const 7) uimm3)) (const 1)))
     ()
)

