| ; 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") |