Commit Graph

11 Commits

Author SHA1 Message Date
Jakob Stoklund Olesen
5d8fb0fdc3 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
cbf78c294b Print a type suffix on some polymorphic instructions. 2016-07-05 13:45:15 -07:00
Jakob Stoklund Olesen
5ce1a4f0e8 Parse and write IR in the 'cat' subcommand.
The 'cton-util cat' command parses the given files and writes them out again to
stdout. This has the effect of reformatting and stripping comments.

Fix a writer bug that inverted the blank line before the first EBB.
2016-07-01 14:12:39 -07:00
Jakob Stoklund Olesen
8ebf6e775d Parse controlling type variable. Do basic type inference.
Replace the make_multi_inst() function with a make_inst_results() which uses
the constraint system to create the result values. A typevar argument ensures
that this function does not infer anything from the instruction data arguments.
These arguments may not be valid during parsing.

Implement basic type inference in the parser. If the designated value operand
on a polymorphic instruction refers to a known value, use that to infer the
controlling type variable.

This simple method of type inference requires the operand value to be defined
above the use in the text. Since reordering the EBBs could place a dominating
EBB below the current one, this is a bit fragile. One possibility would be to
require the value is defined in the same EBB. In all other cases, the
controlling typevar should be explicit.
2016-06-01 10:38:34 -07:00
Jakob Stoklund Olesen
96cfb40507 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
cc71744b74 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
ceb134ac32 Add a BinaryOverflow instruction format.
This will eventualy be used for add-with-carry and add-with-overflow type
instructions. For now it only serves as a representative of instruction formats
that have multiple_results=True and boxed_storage=False at the same time.
2016-05-19 10:43:14 -07:00
Jakob Stoklund Olesen
b06f5ef72f 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
1be81c4352 Implement write_instruction and write_ebb.
Use the new iterators to write out the contents of a function.
2016-05-14 11:33:07 -07:00
Jakob Stoklund Olesen
01ed9fc6c8 Rename libraries
libctonfile -> libreader.

This library will only provide .cton file reading/parsing services which are
not needed after deployment.

Code for writing .cton files lives in the main cretonne library because it is
fairly small, and because it is useful for extracting test cases from a
deployed library.
2016-04-29 15:00:16 -07:00
Jakob Stoklund Olesen
b390b3113a Add a write.rs module.
Convert a function to text.
2016-04-29 13:53:14 -07:00