Benjamin Bouvier
1e42aac41a
[meta] Add new instruction predicates and the InstructionPredicateMap;
...
The latter helps deduplicating predicates during encodings and recipes
construction.
2019-07-04 16:38:28 +02:00
Benjamin Bouvier
ec5678ab7a
[meta] Add the ability to bind any type to an instruction;
2019-07-03 18:39:28 +02:00
Benjamin Bouvier
18fb87cd9c
[meta] Refactor instruction predicates to distinguish format and type checks;
...
Also add the instruction format name in format predicates, since they're
going to be used when generating encodings.
2019-07-03 18:39:28 +02:00
Benjamin Bouvier
f1d1d1e960
[meta] Uniquely number every instruction in the Rust crate;
2019-07-03 18:39:28 +02:00
Benjamin Bouvier
70f79d23bf
[meta] Make Builders build() instead of finish();
2019-05-29 14:05:01 +02:00
Benjamin Bouvier
d9277f249b
[meta] Introduce the InstructionGroupBuilder;
...
This follows the rest of the code base data structures, where we have a
mutable data structure builder; once the data structure is constructed,
it's immutable.
This also makes the definition of instructions easier, and it paves the
way for defining immediate variants.
2019-05-29 14:05:01 +02:00
Benjamin Bouvier
feb90e376a
[meta] Make Instruction name/doc Strings so they can be automatically generated;
2019-05-29 14:05:01 +02:00
Benjamin Bouvier
22a6823496
[meta] Rename cdsl/inst to cdsl/instructions;
2019-05-29 14:05:01 +02:00
Benjamin Bouvier
6935033c9e
[meta] Have bind() be a method of {Bound,}Instruction instead of a static method;
2019-05-23 14:31:00 +02:00
Benjamin Bouvier
724d1cd2a1
[meta] Rename ApplyTarget to InstSpec;
2019-05-23 14:31:00 +02:00
Benjamin Bouvier
a46b2d7173
[meta] Move ApplyTarget/bind to cdsl/inst;
2019-05-23 14:31:00 +02:00
Benjamin Bouvier
97ebaa6f37
Add Rust implementation and address review comments of #742 ;
2019-05-20 11:52:43 +02:00
Benjamin Bouvier
390cfb37da
[meta] Use named predicates for x86 settings in the Rust crate too;
...
And generate them using the same deterministic order that the Python
code uses.
2019-05-03 12:01:12 +02:00
Benjamin Bouvier
1f21349c4b
[meta] Add CPU modes to the meta crate;
2019-04-25 11:44:56 +02:00
Benjamin Bouvier
494f3abf1d
[meta] Add type inference, transforms and AST helpers for legalization;
2019-04-25 11:44:56 +02:00
Benjamin Bouvier
dfb27c3402
[meta] Make TypeVar shareable and mutable;
...
... since its type set can change over time during type inference. Use a
Rc<RefCell> to achieve this.
2019-04-25 11:44:56 +02:00
Benjamin Bouvier
b85146e945
[meta] Add helper methods and tests to TypeSet;
2019-04-25 11:44:56 +02:00
Benjamin Bouvier
e71ae7b02f
[meta] Add instruction predicates;
2019-04-25 11:44:56 +02:00
Benjamin Bouvier
d92778a19e
[meta] Add Instruction helpers and change its representation to make it easily copiable;
...
- adds helpers used by other parts of the code
- allows cheap copies by having Instruction be a lightweight ref-cloned
wrapper of the actual instruction's content.
2019-04-25 11:44:56 +02:00
Benjamin Bouvier
d2d2cdcd78
[meta] Rejigger comments in cdsl/formats;
2019-04-24 10:47:26 +02:00
Benjamin Bouvier
2dd1552369
[meta] Make Typevar::type_set private, and add a second getter to read it directly;
...
There might be a silent bug in the Python module which directly reads
from this type_set field; in particular, it does so when reading all
controlling type variables, which all seem to be free variables (i.e. no
parent typevar). So imitate this behavior here, until we're sure there
are no other meta generators that rely on this.
2019-04-02 17:30:50 +02:00
Benjamin Bouvier
5edee84f67
[meta] Port TypeVar's test_functions to Rust;
...
Fixes two issues:
- name of derived type variables wasn't correct. (This is used during
code generation.)
- the TypeVar::derived() function wasn't creating the correct type set
(and would instead propagate the parent's one).
2019-04-02 17:30:50 +02:00
Benjamin Bouvier
dd63ebfb68
[meta] Port typeset_singleton tests to the Rust crate;
2019-04-02 17:30:50 +02:00
Benjamin Bouvier
ac37cb9bf5
[meta] Add test for {half/double}_{vector/width} and as_bool;
2019-04-02 17:30:50 +02:00
Benjamin Bouvier
6053201128
[meta] Move the TypeSet building out of the TypeVar builder so as to test it;
2019-04-02 17:30:50 +02:00
Benjamin Bouvier
3e7543df79
[meta] Introduce the num_set! macro to create NumSet as vec! does;
2019-04-02 17:30:50 +02:00
Benjamin Bouvier
3c31eac48c
[meta] Port Instruction/InstructionGroup to the Rust meta crate;
2019-03-28 14:13:29 +01:00
Benjamin Bouvier
d59bef1902
[meta] Port Formats and Operands to the Rust crate;
2019-03-27 14:43:27 +01:00
Benjamin Bouvier
146e0bd2f5
[meta] Port Typevar to the Rust crate;
2019-03-27 14:43:27 +01:00
Benjamin Bouvier
049f067168
[meta] Build registers with their own builder and immutably construct the TargetIsa;
2019-02-12 08:19:57 -08:00
Benjamin Bouvier
f78a61b998
[meta] Rename base/ to shared/ in the Rust meta crate;
2019-02-12 08:19:57 -08:00
lazypassion
747ad3c4c5
moved crates in lib/ to src/, renamed crates, modified some files' text ( #660 )
...
moved crates in lib/ to src/, renamed crates, modified some files' text (#660 )
2019-01-28 15:56:54 -08:00