; OpenRISC 1000 architecture.  -*- Scheme -*-
; Copyright 2000-2019 Free Software Foundation, Inc.
; Contributed for OR32 by Johan Rydberg, jrydberg@opencores.org
; Modified by Julius Baxter, juliusbaxter@gmail.com
; Modified by Peter Gavin, pgavin@gmail.com
; Modified by Andrey Bacherov, avbacherov@opencores.org
;
; 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/>

(include "simplify.inc")

; The OpenRISC family is a set of RISC microprocessor architectures with an
; emphasis on scalability and is targetted at embedded use.
; The CPU RTL development is a collaborative open source effort.
; http://opencores.org/or1k
; http://openrisc.net

(define-arch
  (name or1k)
  (comment "OpenRISC 1000")
  (default-alignment aligned)
  (insn-lsb0? #t)
  (machs or32 or32nd)
  (isas openrisc)
)

; Instruction set parameters.
(define-isa
  ; Name of the ISA.
  (name openrisc)
  ; Base insturction length.  The insns are always 32 bits wide.
  (base-insn-bitsize 32)
  )

(define-pmacro OR32-MACHS       or32,or32nd)
(define-pmacro ORBIS-MACHS      or32,or32nd)
(define-pmacro ORFPX32-MACHS    or32,or32nd)
(define-pmacro ORFPX64A32-MACHS or32,or32nd) ; float64 for 32-bit machs

(define-attr
  (for model)
  (type boolean)
  (name NO-DELAY-SLOT)
  (comment "does not have delay slots")
  )

(if (keep-mach? (or32 or32nd))
    (begin
      (define-cpu
        (name or1k32bf)
        (comment "OpenRISC 1000 32-bit CPU family")
        (insn-endian big)
        (data-endian big)
        (word-bitsize 32)
        (file-transform "")
        )

      (define-mach
        (name or32)
        (comment "Generic OpenRISC 1000 32-bit CPU")
        (cpu or1k32bf)
        (bfd-name "or1k")
        )

      (define-mach
        (name or32nd)
        (comment "Generic OpenRISC 1000 32-bit CPU with no branch delay slot")
        (cpu or1k32bf)
        (bfd-name "or1knd")
        )

      ; OpenRISC 1200 - 32-bit or1k CPU implementation
      (define-model
        (name or1200) (comment "OpenRISC 1200 model")
        (attrs)
        (mach or32)
        (unit u-exec "Execution Unit" () 1 1 () () () ())
        )

      ; OpenRISC 1200 - 32-bit or1k CPU implementation
      (define-model
        (name or1200nd) (comment "OpenRISC 1200 model with no branch delay slot")
        (attrs NO-DELAY-SLOT)
        (mach or32nd)
        (unit u-exec "Execution Unit" () 1 1 () () () ())
        )
      )
    )

(include "or1kcommon.cpu")
(include "or1korbis.cpu")
(include "or1korfpx.cpu")
