Skip to content

Commit

Permalink
Add a RISC-V target.
Browse files Browse the repository at this point in the history
Flesh out the directory structure for defining target instruction set
architectures. Use RISC-V as a startgin point because it is so simple.
  • Loading branch information
Jakob Stoklund Olesen committed Apr 6, 2016
1 parent 936d6e5 commit 7bf4570
Show file tree
Hide file tree
Showing 6 changed files with 83 additions and 3 deletions.
2 changes: 0 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1 @@
*.pyc
Cargo.lock
target
18 changes: 17 additions & 1 deletion docs/metaref.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ domain specific language embedded in Python.
An instruction set is described by a Python module under the :file:`meta`
directory that has a global variable called ``instructions``. The basic
Cretonne instruction set described in :doc:`langref` is defined by the Python
module :mod:`cretonne.instrs`.
module :mod:`cretonne.base`.

.. module:: cretonne

Expand Down Expand Up @@ -74,3 +74,19 @@ class.
.. autoclass:: Instruction
.. autoclass:: InstructionGroup
:members:

Targets
=======

Cretonne can be compiled with support for multiple target instruction set
architectures. Each ISA is represented by a :py:class`cretonne.Target` instance.

.. autoclass:: Target

The definitions for each supported target live in a package under
:file:`meta/target`.

.. automodule:: target
:members:

.. automodule:: target.riscv
18 changes: 18 additions & 0 deletions meta/cretonne/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -267,3 +267,21 @@ def _to_operand_tuple(x):
for op in x:
assert isinstance(op, Operand)
return x

#
# Defining targets
#
class Target(object):
"""
A target instruction set architecture.
The `Target` class collects everything known about a target ISA.
:param name: Short mnemonic name for the ISA.
:param instruction_groups: List of `InstructionGroup` instances that are
relevant for this ISA.
"""

def __init__(self, name, instrution_groups):
self.name = name
self.instruction_groups = instrution_groups
16 changes: 16 additions & 0 deletions meta/target/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
"""
Cretonne target definitions
---------------------------
The :py:mod:`target` package contains sub-packages for each target instruction
set architecture supported by Cretonne.
"""

from . import riscv

def all_targets():
"""
Get a list of all the supported targets. Each target is represented as a
:py:class:`cretonne.Target` instance.
"""
return [riscv.target]
30 changes: 30 additions & 0 deletions meta/target/riscv/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
"""
RISC-V Target
-------------
`RISC-V <http://riscv.org/>`_ is an open instruction set architecture originally
developed at UC Berkeley. It is a RISC-style ISA with either a 32-bit (RV32I) or
64-bit (RV32I) base instruction set and a number of optional extensions:
RV32M / RV64M
Integer multiplication and division.
RV32A / RV64A
Atomics.
RV32F / RV64F
Single-precision IEEE floating point.
RV32D / RV64D
Double-precision IEEE floating point.
RV32G / RV64G
General purpose instruction sets. This represents the union of the I, M, A,
F, and D instruction sets listed above.
"""

from cretonne import Target
import cretonne.base

target = Target('riscv', [cretonne.base.instructions])
2 changes: 2 additions & 0 deletions src/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
target
Cargo.lock

0 comments on commit 7bf4570

Please sign in to comment.