; 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 Register")
   (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 indices"
  ()
  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)")
  )
