; OpenRISC 1000 32-bit CPU hardware description.  -*- Scheme -*-
; Copyright 2000-2014 Free Software Foundation, Inc.
; Contributed for OR32 by Johan Rydberg, jrydberg@opencores.org
; Modified by Julius Baxter, juliusbaxter@gmail.com
;
; 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, see <http://www.gnu.org/licenses/>

; 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.

(define-hardware
  (name h-pc)
  (comment "program counter")
  (attrs PC (MACH ORBIS-MACHS))
  (type pc UWI)
  (get () (raw-reg h-pc))
  (set (newval) (sequence ()
                 (set (reg h-sys-ppc) (raw-reg h-pc))
                 (set (raw-reg h-pc) newval)
                ))
  )

(define-pmacro REG-INDICES
  ((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)
   (r16 16)
   (r17 17)
   (r18 18)
   (r19 19)
   (r20 20)
   (r21 21)
   (r22 22)
   (r23 23)
   (r24 24)
   (r25 25)
   (r26 26)
   (r27 27)
   (r28 28)
   (r29 29)
   (r30 30)
   (r31 31)
   (lr 9)
   (sp 1)
   (fp 2))
  )

(define-hardware
  (name h-fsr)
  (comment "floating point registers (single, virtual)")
  (attrs VIRTUAL (MACH ORFPX32-MACHS))
  (type register SF (32))
  (indices keyword "" REG-INDICES)
  (get (index) (subword SF (trunc SI (reg h-gpr index)) 0))
  (set (index newval) (set UWI (reg h-gpr index) (zext UWI (subword SI newval 0))))
  )

(define-hardware
  (name h-fdr) (comment "floating point registers (double, virtual)")
  (attrs VIRTUAL (MACH ORFPX64-MACHS))
  (type register DF (32))
  (indices keyword "" REG-INDICES)
  (get (index) (subword DF (trunc DI (reg h-gpr index)) 0))
  (set (index newval) (set UDI (reg h-gpr index) (zext UDI (subword DI newval 0))))
  )

(define-hardware
  (name h-spr) (comment "special purpose registers")
  (attrs VIRTUAL (MACH ORBIS-MACHS))
  (type register UWI (#x20000))
  (get (index) (c-call UWI "@cpu@_h_spr_get_raw" index))
  (set (index newval) (c-call VOID "@cpu@_h_spr_set_raw" index newval))
)

(define-pmacro spr-shift 11)
(define-pmacro (spr-address spr-group spr-index)
  (or (sll UWI (enum UWI (.sym "SPR-GROUP-" spr-group)) spr-shift)
      (enum UWI (.sym "SPR-INDEX-" spr-group "-" spr-index))))

(define-hardware
  (name h-gpr) (comment "general registers")
  (attrs (MACH ORBIS-MACHS))
  (type register UWI (32))
  (indices keyword "" REG-INDICES)
  (get (index) (reg UWI h-spr (add index (spr-address SYS GPR0))))
  (set (index newval) (set UWI (reg UWI h-spr (add index (spr-address SYS GPR0))) newval))
  )

(define-normal-enum
  except-number
  "Exception numbers"
  ()
  EXCEPT-
  (("NONE"     #x00)
   ("RESET"    #x01)
   ("BUSERR"   #x02)
   ("DPF"      #x03)
   ("IPF"      #x04)
   ("TICK"     #x05)
   ("ALIGN"    #x06)
   ("ILLEGAL"  #x07)
   ("INT"      #x08)
   ("DTLBMISS" #x09)
   ("ITLBMISS" #x0a)
   ("RANGE"    #x0b)
   ("SYSCALL"  #x0c)
   ("FPE"      #x0d)
   ("TRAP"     #x0e)
   )
  )

(define-pmacro (raise-exception exnum)
  (c-call VOID "@cpu@_exception" pc exnum))

(define-normal-enum
  spr-groups
  "special purpose register groups"
  ()
  SPR-GROUP-
  (("SYS"          #x0)
   ("DMMU"         #x1)
   ("IMMU"         #x2)
   ("DCACHE"       #x3)
   ("ICACHE"       #x4)
   ("MAC"          #x5)
   ("DEBUG"        #x6)
   ("PERF"         #x7)
   ("POWER"        #x8)
   ("PIC"          #x9)
   ("TICK"         #xa)
   ("FPU"          #xb)
   )
  )

(define-pmacro (spr-reg-info)
  (.splice
   (SYS VR       #x000 "version register")
   (SYS UPR      #x001 "unit present register")
   (SYS CPUCFGR  #x002 "cpu configuration register")
   (SYS DMMUCFGR #x003 "Data MMU configuration register")
   (SYS IMMUCFGR #x004 "Insn MMU configuration register")
   (SYS DCCFGR   #x005 "Data cache configuration register")
   (SYS ICCFGR   #x006 "Insn cache configuration register")
   (SYS DCFGR    #x007 "Debug configuration register")
   (SYS PCCFGR   #x008 "Performance counters configuration register")
   (SYS NPC      #x010 "Next program counter")
   (SYS SR       #x011 "Supervision Regsiter")
   (SYS PPC      #x012 "Previous program counter")
   (SYS FPCSR    #x014 "Floating point control status register")
   (.unsplice
    (.map (.pmacro (n) (.splice SYS (.sym "EPCR" n) (.add n #x20) (.str "Exception PC register " n)))
          (.iota #x10)))
   (.unsplice
    (.map (.pmacro (n) (.splice SYS (.sym "EEAR" n) (.add n #x30) (.str "Exception effective address register " n)))
          (.iota #x10)))
   (.unsplice
    (.map (.pmacro (n) (.splice SYS (.sym "ESR" n) (.add n #x40) (.str "Exception supervision register " n)))
          (.iota #x10)))
   (.unsplice
    (.map (.pmacro (n) (.splice SYS (.sym "GPR" n) (.add n #x400) (.str "General purpose register " n)))
          (.iota #x200)))

   (MAC MACLO    #x001 "Multiply and accumulate result (low)")
   (MAC MACHI    #x002 "Multiply and accumulate result (high)")
   (TICK TTMR    #x000 "Tick timer mode register")
   )
  )

(define-normal-enum
  spr-reg-indices
  "special purpose register indicies"
  ()
  SPR-INDEX-
  (.map (.pmacro (args)
                 (.apply (.pmacro (group index n comment)
                                  ((.sym group "-" index) n))
                         args)
                 )
        (spr-reg-info)
        )
  )

(define-pmacro (define-h-spr-reg spr-group spr-index n spr-comment)
  (define-hardware
    (name (.sym "h-" (.downcase spr-group) "-" (.downcase spr-index)))
    (comment spr-comment)
    (attrs VIRTUAL (MACH ORBIS-MACHS))
    (type register UWI)
    (get ()       (reg UWI h-spr (spr-address spr-group spr-index)))
    (set (newval) (set (reg UWI h-spr (spr-address spr-group spr-index)) newval))
    )
  )
(.splice begin (.unsplice (.map (.pmacro (args) (.apply define-h-spr-reg args)) (spr-reg-info))))

(define-pmacro (spr-field-info)
  ((SYS VR      REV    5  0 "revision field")
   (SYS VR      CFG   23 16 "configuration template field")
   (SYS VR      VER   31 24 "version field")
   (SYS UPR     UP     0  0 "UPR present bit")
   (SYS UPR     DCP    1  1 "data cache present bit")
   (SYS UPR     ICP    2  2 "insn cache present bit")
   (SYS UPR     DMP    3  3 "data MMU present bit")
   (SYS UPR     MP     4  4 "MAC unit present bit")
   (SYS UPR     IMP    5  5 "insn MMU present bit")
   (SYS UPR     DUP    6  6 "debug unit present bit")
   (SYS UPR     PCUP   7  7 "performance counters unit present bit")
   (SYS UPR     PICP   8  8 "programmable interrupt controller present bit")
   (SYS UPR     PMP    9  9 "power management present bit")
   (SYS UPR     TTP   10 10 "tick timer present bit")
   (SYS UPR     CUP   31 24 "custom units present field")
   (SYS CPUCFGR NSGR   3  0 "number of shadow GPR files field")
   (SYS CPUCFGR CGF    4  4 "custom GPR file bit")
   (SYS CPUCFGR OB32S  5  5 "ORBIS32 supported bit")
   (SYS CPUCFGR OB64S  6  6 "ORBIS64 supported bit")
   (SYS CPUCFGR OF32S  7  7 "ORFPX32 supported bit")
   (SYS CPUCFGR OF64S  8  8 "ORFPX64 supported bit")
   (SYS CPUCFGR OV64S  9  9 "ORVDX64 supported bit")
   (SYS CPUCFGR ND    10 10 "no transfer delay bit")
   (SYS SR      SM     0  0 "supervisor mode bit")
   (SYS SR      TEE    1  1 "tick timer exception enabled bit")
   (SYS SR      IEE    2  2 "interrupt exception enabled bit")
   (SYS SR      DCE    3  3 "data cache enabled bit")
   (SYS SR      ICE    4  4 "insn cache enabled bit")
   (SYS SR      DME    5  5 "data MMU enabled bit")
   (SYS SR      IME    6  6 "insn MMU enabled bit")
   (SYS SR      LEE    7  7 "little endian enabled bit")
   (SYS SR      CE     8  8 "CID enable bit")
   (SYS SR      F      9  9 "flag bit")
   (SYS SR      CY    10 10 "carry bit")
   (SYS SR      OV    11 11 "overflow bit")
   (SYS SR      OVE   12 12 "overflow exception enabled bit")
   (SYS SR      DSX   13 13 "delay slot exception bit")
   (SYS SR      EPH   14 14 "exception prefix high bit")
   (SYS SR      FO    15 15 "fixed one bit")
   (SYS SR      SUMRA 16 16 "SPRs user mode read access bit")
   (SYS SR      CID   31 28 "context ID field")
   (SYS FPCSR   FPEE   0  0 "floating point exceptions enabled bit")
   (SYS FPCSR   RM     2  1 "floating point rounding mode field")
   (SYS FPCSR   OVF    3  3 "floating point overflow flag bit")
   (SYS FPCSR   UNF    4  4 "floating point underflow bit")
   (SYS FPCSR   SNF    5  5 "floating point SNAN flag bit")
   (SYS FPCSR   QNF    6  6 "floating point QNAN flag bit")
   (SYS FPCSR   ZF     7  7 "floating point zero flag bit")
   (SYS FPCSR   IXF    8  8 "floating point inexact flag bit")
   (SYS FPCSR   IVF    9  9 "floating point invalid flag bit")
   (SYS FPCSR   INF   10 10 "floating point infinity flag bit")
   (SYS FPCSR   DZF   11 11 "floating point divide by zero flag bit")
   )
  )

(define-normal-enum
  spr-field-msbs
  "SPR field msb positions"
  ()
  SPR-FIELD-MSB-
  (.map (.pmacro (args)
                 (.apply (.pmacro (group index field msb lsb comment)
                                  ((.sym group "-" index "-" field) msb)
                                  )
                         args
                         )
                 )
        (spr-field-info)
        )
  )

(define-normal-enum
  spr-field-lsbs
  "SPR field lsb positions"
  ()
  SPR-FIELD-SIZE-
  (.map (.pmacro (args)
                 (.apply (.pmacro (group index field msb lsb comment)
                                  ((.sym group "-" index "-" field) lsb)
                                  )
                         args
                         )
                 )
        (spr-field-info)
        )
  )

(define-normal-enum
  spr-field-masks
  "SPR field masks"
  ()
  SPR-FIELD-MASK-
  (.map (.pmacro (args)
                 (.apply (.pmacro (group index field msb lsb comment)
                                  (.splice (.str group "-" index "-" field) (.sll (.inv (.sll (.inv 0) (.add (.sub msb lsb) 1))) lsb))
                                  )
                         args
                         )
                 )
        (spr-field-info)
        )
  )

(define-pmacro (define-h-spr-field spr-group spr-index spr-field spr-field-msb spr-field-lsb spr-field-comment)
  (.let ((spr-field-name (.sym "h-" (.downcase spr-group) "-" (.downcase spr-index) "-" (.downcase spr-field)))
         )
        (begin
          (define-hardware
            (name spr-field-name)
            (comment spr-field-comment)
            (attrs VIRTUAL (MACH ORBIS-MACHS))
            (type register UWI)
            (get ()      (c-call UWI  "@cpu@_h_spr_field_get_raw" (spr-address spr-group spr-index) spr-field-msb spr-field-lsb))
            (set (value) (c-call VOID "@cpu@_h_spr_field_set_raw" (spr-address spr-group spr-index) spr-field-msb spr-field-lsb value))
            )
          )
        )
  )
(.splice begin (.unsplice (.map (.pmacro (args) (.apply define-h-spr-field args)) (spr-field-info))))

(define-attr
  (type boolean)
  (for insn)
  (name DELAYED-CTI)
  (comment "delayed control transfer instruction")
  (values #f #t)
  (default #f)
  )

(define-attr
  (for insn)
  (type boolean)
  (name NOT-IN-DELAY-SLOT)
  (comment "instruction cannot be in delay slot")
  (values #f #t)
  (default #f)
  )

(define-attr
  (for insn)
  (type boolean)
  (name FORCED-CTI)
  (comment "instruction may forcefully transfer control (e.g., rfe)")
  )
