summaryrefslogtreecommitdiff
path: root/cpu/or1k.cpu
blob: 3a932bcb900940eb7520cac1a45b4736b9c65a85 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
; OpenRISC 1000 architecture.  -*- Scheme -*-
; Copyright 2000-2014 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
;
; 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 or64 or64nd)
  (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 OR64-MACHS    or64,or64nd)
(define-pmacro ORBIS-MACHS   or32,or32nd,or64,or64nd)
(define-pmacro ORFPX-MACHS   or32,or32nd,or64,or64nd)
(define-pmacro ORFPX32-MACHS or32,or32nd,or64,or64nd)
(define-pmacro ORFPX64-MACHS or64,or64nd)

(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")
        (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")
        (attrs NO-DELAY-SLOT)
        (mach or32nd)
        (unit u-exec "Execution Unit" () 1 1 () () () ())
        )
      )
    )

(if (keep-mach? (or64 or64nd))
    (begin
      (define-cpu
        (name or1k64bf)
        (comment "OpenRISC 1000 64-bit CPU family")
        (insn-endian big)
        (data-endian big)
        (word-bitsize 64)
        (file-transform "64")
        )

      (define-mach
        (name or64)
        (comment "Generic OpenRISC 1000 64-bit CPU")
        (cpu or1k64bf)
        (bfd-name "or1k64")
        )

      (define-mach
        (name or64nd)
        (comment "Generic OpenRISC 1000 ND 64-bit CPU")
        (cpu or1k64bf)
        (bfd-name "or1k64nd")
        )
      )
    )

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