Commit Graph

49 Commits

Author SHA1 Message Date
Jakob Stoklund Olesen
ad79ad753d Documentation typos. 2016-07-27 16:10:02 -07:00
Jakob Stoklund Olesen
f116f03327 Move entry_block() into Layout.
The single entry block in a function is simply the first block in the layout.

Remove the 'entry' keyword from the textual IL, the lexer and parser.
2016-07-22 10:06:51 -07:00
Jakob Stoklund Olesen
e7adcf9af9 Delete the concept of 'local SSA form'.
This was supposed to make verification fast, but WebAssembly is no longer in
this form since it's blocks can produce values.

Also, computing a flow graph and dominator tree is really fast anyway.
2016-07-08 16:26:11 -07:00
Jakob Stoklund Olesen
520a438c42 Define a return instruction.
It is possible to return multiple values from a function, so ReturnData contains
a VariableArgs instance.

We don't want return instructions to appear as 'return (v1)', so tweak the
printing of VariableArgs so the parantheses are added externally.
2016-07-08 16:19:26 -07:00
Jakob Stoklund Olesen
fd9f08c30f Define floating point conversion instructions. 2016-07-08 11:20:19 -07:00
Jakob Stoklund Olesen
6321fd1f5f Metadefs for integer reduce and extend operations.
Naming is interesting here. Since 'truncate' refers to removing the least
significant digits, use 'ireduce' instead. The 'extend' use is fairly
established. Don't abbreviate, avoid unfortunate modern vernacular.
2016-07-07 18:17:16 -07:00
Jakob Stoklund Olesen
4a929f5e41 Add meta definition for bitcast.
This instruction uses two type variables: input and output. Make sure that our
parser can handle it. The output type variable annotation is mandatory.

Add a ValueTypeSet::example() method which is used to provide better diagnostics
for a missing type variable.
2016-07-07 14:01:00 -07:00
Jakob Stoklund Olesen
2bfb4ca5b7 Add meta definitions for floating point operations.
Rename the Select instruction format to Ternary since it is also used by the fma
instruction.
2016-07-07 13:16:24 -07:00
Jakob Stoklund Olesen
86688053a6 Define icmp and fcmp comparison instructions.
Add new intcc and floatcc operand types for the immediate condition codes on
these instructions.

Add new IntCompare and FloatCompare instruction formats.

Add a generic match_enum() parser function that can match any identifier-like
enumerated operand kind that implements FromStr.

Define the icmp and fcmp instructions in case.py. Include documentation for the
condition codes with these two instructions.
2016-07-07 11:43:12 -07:00
Jakob Stoklund Olesen
b1dd4ad373 Add vector instructions.
Use derived type variables with the 'LaneOf' function.

Add u8 immediates to be used for lane indexes and bit shifts.
2016-05-20 15:36:03 -07:00
Jakob Stoklund Olesen
b44d6c6541 Implement select and vselect instructions.
This gives us the opportunity to use the AsBool derived type variables and a
Select instruction format with a non-default typevar_operand setting.
2016-05-20 15:11:17 -07:00
Jakob Stoklund Olesen
1e631fdbd6 Verify restrictions on polymorphism.
Add a typevar_operand argument to the InstructionFormat constructor which
determines the operand used for inferring the controlling type variable.

Identify polymorphic instructions when they are created, determine if the
controlling type variable can be inferred from the typevar_operand, and verify
the use of type variables in the other operands.

Generate type variable summary in the documentation, including how the
controlling type variable is inferred.
2016-05-19 14:59:46 -07:00
Jakob Stoklund Olesen
ebe224a912 Define control flow instructions.
Rename 'br' to 'jump'. We'll use jump/br to mean unconditional/conditional
control transfer respectively.
2016-05-19 09:01:40 -07:00
Jakob Stoklund Olesen
d85fda0346 Add entity references as a new operand kind.
Define known entities in the cretonne.entities module.
2016-05-18 15:31:02 -07:00
Jakob Stoklund Olesen
2dc15b78ae Add restrictions on polymorphism.
Also introduce the concept of a derived type variable, and provide two
methods for deriving type vars: lane() and as_bool().
2016-05-18 12:27:12 -07:00
Jakob Stoklund Olesen
bd221af412 Reorganize meta language reference.
Separate instruction descriptions from instruction formats which deal with the
Rust representation.

Add type class restrictions to type variables.
2016-05-18 12:27:12 -07:00
Jakob Stoklund Olesen
814231245c Add OperandKind to the meta language.
We have a two-level type system: OperandKinds and ValueTypes. The value types
only apply to value operands, but there are many more kinds of operands:
immediate numbers, condition codes, basic block references, etc.
2016-05-12 15:59:40 -07:00
Jakob Stoklund Olesen
42364fda59 Add top-level productions to language reference. 2016-04-28 14:39:42 -07:00
Jakob Stoklund Olesen
8d0311b642 Simplify parser.
Use 'if let' instead of 'match' where it makes sense.

Use EBNF notation for the grammar rules. This simplifies repetition a lot.
2016-04-28 08:06:30 -07:00
Jakob Stoklund Olesen
7bf4570ba1 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.
2016-04-06 12:00:35 -07:00
Jakob Stoklund Olesen
6f083a310a Collect all instructions into instruction groups. 2016-04-05 14:42:41 -07:00
Jakob Stoklund Olesen
d197f8a104 Add an autohtml target to docs/Makefile.
This runs the convenient sphinx-autobuild web server for docs development.
2016-04-05 11:11:53 -07:00
Jakob Stoklund Olesen
043bb1aba5 Replace bool with b1, b8, b16, ...
The b1 type is an abstract boolean value. The others are concrete
representations.
2016-04-05 10:45:00 -07:00
Jakob Stoklund Olesen
79e765a183 Display quiet NaNs as 'NaN'.
This is recommended by IEEE 754-2008.

We still distinguish signaling NaNs with 'sNaN'.
2016-04-05 10:27:18 -07:00
Jakob Stoklund Olesen
5f706b0a1f Implement IEEE immediates for binary32 and binary64.
Clarify the textual encoding of floating point numbers.

Don't allow decimal floating point since conversion to/from binary can produce
rounding problems on some (buggy) systems.
2016-04-01 14:40:15 -07:00
Jakob Stoklund Olesen
e5305c249b Move constant instructions into meta.
Add new immediate types for floating point and vector immediates.
Use new immediates to define the constant value instructions in meta.

Split the fconst instruction into two: f32const and f64const. This prevents
confusion about the interpretation of 64 immediate bits when generating an f32
constant.

Add an immvector ImmediateType. This immediate type is variable length, and
provides all the bits of a SIMD vector directly.
2016-04-01 10:08:57 -07:00
Jakob Stoklund Olesen
c3233fb332 Move instruction definitions into meta.
Use the meta language to define instructions, just insert 'autoinst' references
in langref.
2016-04-01 10:08:57 -07:00
Jakob Olesen
a76a0da826 Add Instruction and Operand classes to the meta language. 2016-04-01 10:08:57 -07:00
Jakob Stoklund Olesen
10903503c4 Add ImmediateType for declaring immediate operands. 2016-03-30 14:17:42 -07:00
Jakob Olesen
29481a5851 Add type variables. 2016-03-16 10:41:24 -07:00
Jakob Olesen
29cc36c8d9 Enable inheritance diagrams. 2016-02-09 08:11:20 -08:00
Jakob Olesen
06f9b65e12 Add a TypeDocumenter for Cretonne types.
Use the autodoc Sphinx module to add a .. autoctontype:: directive which
generates documentation for one of the types in the cretonne.types module.
2016-02-09 06:55:53 -08:00
Jakob Olesen
ec918fe332 Begin defining the meta language.
The Cretonne meta language is used to describe Cretonne instructions, both the
target independent ones in the base instruction set and real target
instructions.

Start by providing type definitions matching langref, and begin the meta
language reference using autodoc to pull in the PYthon definitions.
2016-02-04 19:51:38 -08:00
Jakob Olesen
f66d2a26a2 Add some more type classes. 2016-02-04 12:19:08 -08:00
Jakob Stoklund Olesen
ec7d65d8f1 Clean up the list of operations somewhat. 2016-01-22 17:30:30 -08:00
Jakob Stoklund Olesen
519fed894b Document heaps. 2016-01-22 16:48:11 -08:00
Jakob Stoklund Olesen
095190b1a7 Load, store, local variables. 2016-01-22 15:47:15 -08:00
Jakob Stoklund Olesen
43b4f7f4e7 Expand on control flow and direct function calls.
Define the syntax for function signatures.
2016-01-22 13:47:53 -08:00
Jakob Stoklund Olesen
74eb6ce901 Clarify local SSA form.
Rename 'local' to 'stack_slot'.
2016-01-22 12:13:38 -08:00
Jakob Olesen
189fc7dfb7 Add hexadecimal numbers to the lexer.
Also decimal and hexadecimal exponential notation for float constants.
2016-01-22 10:31:24 -08:00
Jakob Stoklund Olesen
45caa52622 Document control flow instructions. 2016-01-21 17:15:20 -08:00
Jakob Stoklund Olesen
a3f97e4d1f Switch SIMD type spelling to i32x4.
Add support for 'type variables' in type directives.
2016-01-21 16:39:45 -08:00
Jakob Stoklund Olesen
401afdc48c Update language reference.
Add a glossary and explain the overall shape of a Cretonne function.
2016-01-21 14:25:16 -08:00
Jakob Olesen
2b2b79dcf8 Add langref example 2016-01-21 11:46:30 -08:00
Jakob Olesen
36cb753c4f Cretonne pygments lexer 2016-01-20 07:13:02 -08:00
Jakob Olesen
edb2440eaf Emit list of todo items. 2016-01-19 19:54:33 -08:00
Jakob Olesen
b5ee157d46 Begin the intermediate language reference. 2016-01-19 19:54:33 -08:00
Jakob Olesen
c8f20534d3 Add a Cretonne domain for Sphinx.
Include roles for documenting IL instructions and types, including
index cross references.
2016-01-19 19:54:27 -08:00
Jakob Olesen
ae54206e66 Initial Sphinx configuration. 2016-01-12 16:51:35 -08:00