; Renesas M32R CPU description.  -*- Scheme -*-
;
; Copyright 1998, 1999, 2000, 2001, 2003 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 2 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)))
     ()
)

