Commit Graph

513 Commits

Author SHA1 Message Date
Jakob Stoklund Olesen
49ae98a1e9 Implement std::str::FromStr for matching opcodes.
Replace the home-grown from_str function.
2016-04-08 11:06:33 -07:00
Jakob Stoklund Olesen
66778dc23c Typo. 2016-04-08 10:31:14 -07:00
Jakob Stoklund Olesen
24e0828d20 Generate a constant hash table for recognizing opcodes.
Use a simple quadratically probed, open addressed hash table. We could use a
parfect hash function, but it would take longer to compute in Python, and this
is not in the critical path performancewise.
2016-04-07 20:24:21 -07:00
Jakob Stoklund Olesen
3dcd2f8e58 Generate an opcode_name() function.
This function returning a &'static str is more primitive that the Display
implementation. It allows the opcode strings to be reused by the parser.
2016-04-07 13:49:35 -07:00
Jakob Stoklund Olesen
3a570e8b21 Add repr.rs module containing the representation of functions.
A function owns instructions and extended basic blocks. References to these
entities are implemented as opaque structs indexing into the functions internal
tables. This avoids fighting Rust's ownership checking and it also makes
references 4 bytes on all platforms.

SSA values are identified similarly, but with an optimization for the first
value produced by an instruction. Very few instructions will produce more than
one value, and there is an extended value table for those.
2016-04-07 11:53:37 -07:00
Jakob Stoklund Olesen
d650d551a0 Include generated Opcode enum in the immediates module.
Generate nice doc comments for the Opcode enum variants that 'cargo doc'
will pick up.

Include a `Display` trait implementation that prints the lower
snake-case version of the opcode name.
2016-04-06 14:55:21 -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
d32d78d16c Add scaffolding for a Python build script.
Hook up a Cargo build script that runs a Python script in the meta directory.
2016-04-05 13:36:04 -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
38d0f626a7 Implement Imm64 in an 'immediates.rs' module.
Format larger immediates as hexadecimal with a multiple of 4 digits and '_'
group separators.
2016-04-01 10:08:01 -07:00
Jakob Stoklund Olesen
4ba29e594f Make the types module public, add documentation comments. 2016-03-11 16:06:14 -08:00
Jakob Stoklund Olesen
82e05bcbc9 Implement type representation in Rust.
Start the Cretonne library as a Rust crate.
2016-03-11 15:54:28 -08:00