Add a RISC-V target.
Flesh out the directory structure for defining target instruction set architectures. Use RISC-V as a startgin point because it is so simple.
This commit is contained in:
2
cranelift/.gitignore
vendored
2
cranelift/.gitignore
vendored
@@ -1,3 +1 @@
|
|||||||
*.pyc
|
*.pyc
|
||||||
Cargo.lock
|
|
||||||
target
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ domain specific language embedded in Python.
|
|||||||
An instruction set is described by a Python module under the :file:`meta`
|
An instruction set is described by a Python module under the :file:`meta`
|
||||||
directory that has a global variable called ``instructions``. The basic
|
directory that has a global variable called ``instructions``. The basic
|
||||||
Cretonne instruction set described in :doc:`langref` is defined by the Python
|
Cretonne instruction set described in :doc:`langref` is defined by the Python
|
||||||
module :mod:`cretonne.instrs`.
|
module :mod:`cretonne.base`.
|
||||||
|
|
||||||
.. module:: cretonne
|
.. module:: cretonne
|
||||||
|
|
||||||
@@ -74,3 +74,19 @@ class.
|
|||||||
.. autoclass:: Instruction
|
.. autoclass:: Instruction
|
||||||
.. autoclass:: InstructionGroup
|
.. autoclass:: InstructionGroup
|
||||||
:members:
|
: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
|
||||||
|
|||||||
2
cranelift/src/.gitignore
vendored
Normal file
2
cranelift/src/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
target
|
||||||
|
Cargo.lock
|
||||||
@@ -267,3 +267,21 @@ class Instruction(object):
|
|||||||
for op in x:
|
for op in x:
|
||||||
assert isinstance(op, Operand)
|
assert isinstance(op, Operand)
|
||||||
return x
|
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
meta/target/__init__.py
Normal file
16
meta/target/__init__.py
Normal file
@@ -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
meta/target/riscv/__init__.py
Normal file
30
meta/target/riscv/__init__.py
Normal file
@@ -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])
|
||||||
Reference in New Issue
Block a user