Commit Graph

1840 Commits

Author SHA1 Message Date
pup
b36fc6b75f Issue 311 - Add a pass to make NaN bits deterministic. (#322) 2018-05-09 15:11:58 -05:00
Tyler McMullen
f636d795c5 load_complex and store_complex instructions (#309)
* Start adding the load_complex and store_complex instructions.

N.b.:
The text format is not correct yet. Requires changes to the lexer and parser.
I'm not sure why I needed to change the RuntimeError to Exception yet. Will fix.

* Get first few encodings of load_complex working. Still needs var args type checking.

* Clean up ModRM helper functions in binemit.

* Implement 32-bit displace for load_complex

* Use encoding helpers instead of doing them all by hand

* Initial implementation of store_complex

* Parse value list for load/store_complex with + as delimiter. Looks nice.

* Add sign/zero-extension and size variants for load_complex.

* Add size variants of store_complex.

* Add asm helper lines to load/store complex bin tests.

* Example of length-checking the instruction ValueList for an encoding. Extremely questionable implementation.

* Fix Python linting issues

* First draft of postopt pass to fold adds and loads into load_complex. Just simple loads for now.

* Optimization pass now works with all types of loads.

* Add store+add -> store_complex to postopt pass

* Put complex address optimization behind ISA flag.

* Add load/store complex for f32 and f64

* Fixes changes to lexer that broke NaN parsing.

Abstracts away the repeated checks for whether or not the characters
following a + or - are going to be parsed as a number or not.

* Fix formatting issues

* Fix register restrictions for complex addresses.

* Encoding tests for x86-32.

* Add documentation for newly added instructions, recipes, and cdsl changes.

* Fix python formatting again

* Apply value-list length predicates to all LoadComplex and StoreComplex instructions.

* Add predicate types to new encoding helpers for mypy.

* Import FieldPredicate to satisfy mypy.

* Add and fix some "asm" strings in the encoding tests.

* Line-up 'bin' comments in x86/binary64 test

* Test parsing of offset-less store_complex instruction.

* 'sNaN' not 'sNan'

* Bounds check the lookup for polymorphic typevar operand.

* Fix encodings for istore16_complex.
2018-05-09 14:07:00 -05:00
Steffen Butzer
5aa84a744b windows fastcall (x64) call convention (#314)
* initial set of work for windows fastcall (x64) call convention

- call conventions: rename `fastcall` to `windows_fastcall`
- add initial set of filetests
- ensure arguments are written after the shadow space/store (offset-wise)
  The shadow space available before the arguments (range 0..32)
  is not used as spill space yet.

* address review feedback
2018-05-09 13:18:30 -05:00
Ty Overby
09f883182d document that low bitsize integers don't have complete arithmetic support (#320)
* document that low bitsize integers don't have complete arithmetic support
2018-05-07 11:10:01 -05:00
Dan Gohman
5b69930e03 Legalize bnot using xor with -1. 2018-05-05 11:21:06 -05:00
Pat Hickey
bb612af37a x86 recipes: emit StackOverflow trap for all sp-relative loads and stores (#325)
* x86 recipes: emit StackOverflow trap for all sp-relative loads and stores

* x86 recipes: emit StackOverflow trap for push and pop

* x86 binary filetests: add stk_ovf trap annotations
2018-05-03 18:09:07 -07:00
Dan Gohman
846a71d93b Fixes for mypy 0.600 (#324)
* Remove the mypy version constraint and set strict_optional to False.

* Add type annotations for `ISA` variables.

mypy 0.600 seems to require explicit annotations here.

* Annotate the ISA variables in the defs.py files too.
2018-05-03 12:12:19 -07:00
Pat Hickey
69468915d5 cretonne-faerie: add a translation mechanism for LibCalls (#321)
* cretonne-faerie: add a translation mechanism for LibCalls

* cretonne-faerie: docs for libcall_names, rustfmt

* cretonne-faerie: switch libcall naming to use a closure

* travis: debug mypy version

* travis: pin mypy to 0.521

mypy released 0.600 today and even with `--no-strict-optional` flag
passed to it (in lib/codegen/meta/check.sh) it fails to infer the type
of values that did not need type annotations in the past

* faerie-backend: fix swapped nearbyint functions

* cretonne-faerie: move boxing out of FaerieBuilder
2018-05-03 06:54:55 -07:00
Dan Gohman
7e1f157692 Use %esp rather than %rsp in x86-32 test comments. 2018-05-02 09:41:34 -07:00
Dan Gohman
b4f9eb5e55 Bump versino to 0.8.0 2018-05-01 19:54:21 -07:00
Dan Gohman
5c2ada88f5 Add support for target_os = "nebulet". (#319) 2018-05-01 05:37:56 -07:00
Dan Gohman
8fa0e6da99 Fix simplejit's memory size computations.
@steffengy noticed that the code to round allocation sizes up to the
neareset page size was incorrect. It was masking off the low bits rather
than the high bits.

Also, while here, add more comments to `Memory`'s implementation.
2018-04-30 17:08:37 -07:00
Dan Gohman
9c87f3ac87 Fix some warnings in no_std builds.
The dbg! macro expands to nothing in no_std mode, so variables that are
only used for debugging prompt unused variable warnings.

Also, allow unstable_features in no_std builds, since they use
feature(alloc), which is an unstable feature.
2018-04-30 14:04:14 -07:00
Dan Gohman
94a883abae Make settings::Flags::new consume the Builder.
This makes it more clear what the relationship is between the Builder
and the resulting Flags.
2018-04-30 13:53:36 -07:00
Dan Gohman
b7f38ac8bc Replace Builder's Vec<u8> with a Box<[u8]>.
It doesn't need to dynamically grow, and `Box<[u8]>` is smaller.
2018-04-30 13:53:29 -07:00
Dan Gohman
f4fe438bae Suppress a warning about AsciiExt being deprecated.
We currently support versions of Rust which need this import, so
suppress the warning on versions of Rust which deprecated it.
2018-04-30 13:53:29 -07:00
Dan Gohman
4942772f90 Add several more x86 CPU models. 2018-04-30 13:53:29 -07:00
pup
afd5442722 Minor comment typo fix. (#315) 2018-04-30 13:26:21 -07:00
Dan Gohman
525f01713b Bump version to 0.7.0 2018-04-27 06:10:15 -07:00
Dan Gohman
c40a4ddc53 Add functions to Module for initializing Contexts.
This allows Module to assign the Context the TargetIsa's default calling
convention.
2018-04-27 06:02:59 -07:00
Dan Gohman
9e48344f7f Update examples to reflect that Cretonne indices typically start at 0. 2018-04-27 06:02:59 -07:00
Dan Gohman
779114aaed Require at least Sphinx 1.4 since the format of index tuples changed. 2018-04-27 06:02:59 -07:00
Pat Hickey
ee9dcb8367 Improvements to Modules API (#307)
* test-no_std: use cargo +nightly

assume folks have rustup set to use stable by default

* cretonne-module, -faerie, -simplejit: use new ModuleError enum

CtonError is not really appropriate for use in the module system.
Instead, create a new enum ModuleError, which implements failure::Fail
(works with no_std). Translate existing panics and unimplemented
error cases to return ModuleErrors.

* cretonne-faerie: export FaerieProduct

* cretonne-module: expose FuncOrDataId, and Module::get_name to lookup

This is helpful for looking up a name that has already been declared.
Also, implement FuncOrDataId -> ExternalName conversion.

* cretonne-faerie: depend on faerie 0.3.0

which has bugfix for data relocations

* cretonne-module: change InvalidDefinition to InvalidImportDefinition

per dan's code review. plus another typo fix

* cretonne-faerie: add optional manifest of all traps from codegen

* cretonne-module: provide more context in panics

* cretonne-faerie: updates to docs

* cretonne-faerie: return an Err instead of debug_assert when isa not pic
2018-04-26 22:02:35 -07:00
John Rieth
948d5fdeec Document that i8 and i16 arithmetic support is incomplete (#299)
* Document that i8 and i16 arithmetic support is incomplete
2018-04-26 11:07:34 -07:00
Tyler McMullen
8351ba3e3e Disassemble compiled binary for debugging (#308)
* Use Capstone to disassemble and print code after compilation in cton-util.

* Fix rustfmt errors
2018-04-23 20:24:02 -07:00
Dan Gohman
e356c742aa Bump version to 0.6.0 2018-04-23 14:35:23 -07:00
Dan Gohman
229b748f02 Update to wasmparser 0.16.1. 2018-04-23 14:06:54 -07:00
Dan Gohman
834df5290d Add more comments to module.rs. 2018-04-23 10:26:33 -07:00
Dan Gohman
0ef032cc41 Add more commonly-used names to the prelude. 2018-04-23 10:14:32 -07:00
Dan Gohman
103a65f171 Mention the prelude in the umbrella README. 2018-04-23 10:14:14 -07:00
Dan Gohman
5bcfd47f3f Remove the non-REX encodings for regmove et al.
regmove, regfill, and regspill have immediates which aren't value
operands, so they aren't in the set of things that can be described by
the existing constraint system. Consequently, constraints saying that
the non-REX encodings only support registers that don't need REX
prefixes don't work. Fow now, just remove the non-REX encodings, so
that they don't get selected when they aren't valid.

This fixes the last known issue with instruction shrinking, so it can
be re-enabled.
2018-04-22 22:31:56 -07:00
Dan Gohman
56b3465ed0 Use more lower-case letters for github URLs.
This is a continuation of 362f8f13e2b8c7dd79b043c491479bb9fc6f69e9.
2018-04-22 22:09:31 -07:00
Dan Gohman
9f0a35103a Update a comment. 2018-04-22 21:53:53 -07:00
Dan Gohman
beddcc50f2 Minor code refactoring. 2018-04-22 21:53:53 -07:00
Dan Gohman
3b1d805758 Stack overflow checking with stack probes.
This adds a libcall name, a calling convention, and settings for
emitting stack probes, and implements them for x86 system_v ABIs.
2018-04-22 21:52:12 -07:00
Dan Gohman
c5b15c2396 Refactor calling convention settings. (#304)
Add a calling-convention setting to the `Flags` used as part of the
`TargetIsa`. This allows Cretonne code that generates calls to use the
correct convention, such as when emitting libcalls during legalization
or when the wasm frontend is decoding functions. This setting can be
overridden per-function.

This also adds "fast", "cold", and "fastcall" conventions, with "fast"
as the new default. Note that "fast" and "cold" are not intended to be
ABI-compatible across Cretonne versions.

This will also ensure Windows users will get an `unimplemented!` rather
than silent calling-convention mismatches, which reflects the fact that
Windows calling conventions are not yet implemented.

This also renames SpiderWASM, which isn't camel-case, to Baldrdash,
which is, and which is also a more relevant name.
2018-04-22 21:35:18 -07:00
Dan Gohman
8a9e4b9cff Update to faerie 0.2.0. 2018-04-20 16:39:15 -07:00
Dan Gohman
7079c72b28 Add comments to DataContext's import_function and import_global_var.
These are the main obvious place where ExternalName is exposed in the
Module API, so add comments advising users that they can use Module to
call these functions with the appropriate ExternalNames automatically.
2018-04-20 16:36:08 -07:00
Dan Gohman
dfb24f1934 Fix x86 encoding of uextend/sextend from 8-bit inputs.
The x86-32 and non-REX encodings of movsbl and movzbl require one of
the ABCD registers as input.
2018-04-20 12:12:29 -07:00
Dan Gohman
e876529152 Merge pull request #303 from sunfishcode/no_std_merge
Merge no_std into master
2018-04-20 12:11:53 -07:00
Dan Gohman
653c11d580 Use "set -euo pipefail" in test-no_std.sh.
This makes it consistent with other shell scripts in the repo.
2018-04-20 11:11:38 -07:00
Dan Gohman
9249080ce8 Fix URL syntax. 2018-04-20 11:06:25 -07:00
Dan Gohman
33e266eeeb Fix missing word. 2018-04-20 11:04:13 -07:00
Dan Gohman
cb3c5a1384 Revert the change to this test that accompanied the shrinking pass too. 2018-04-19 18:57:59 -07:00
Dan Gohman
3e4531657c Temporarily disable the shink_instruction pass.
It appears some of the instruction encodings are incorrect. Temporarily
disable the use of shorter encodings until these are fixed.
2018-04-19 17:49:48 -07:00
Dan Gohman
5434f4dafa Update to raw_cpuid 3.1.0.
This hopefully fixes MSVC build issues; see #302.
2018-04-19 17:09:39 -07:00
Dan Gohman
bce8af97e3 Add an instruction shrinking pass.
When an instruction has multiple valid encodings, such as with and
without a REX prefix on x86-64, Cretonne typically picks the encoding
which gives the register allocator the most flexibility, which is
typically the longest encoding. This patch adds a pass that runs after
register allocation that picks the smallest encoding, working within the
constraints of the register allocator's choices. The result is smaller
and easier to read encodings.

In the future, we may want to merge this pass into the relaxation pass,
or possibly fold it into the final encoding step, however for now, a
discrete pass will suffice.
2018-04-19 17:04:56 -07:00
Dan Gohman
583ae56fd2 Use opt_level instead of is_compressed for encoding optimizations.
Choosing smaller instruction encodings on eg. x86 is an optimization,
rather than a useful discrete setting.

Use "is_compressed" only for ISAs that have an explicit compression feature
that users of the output may to be aware of, such as RISC-V's RVC or
ARM's Thumb-2.
2018-04-19 16:33:38 -07:00
Dan Gohman
fd8df67cfd Convert an http link to https. 2018-04-19 13:52:27 -07:00
Dan Gohman
c9a606da69 Use more lower-case letters for github URLs.
This is a continuation of 362f8f13e2b8c7dd79b043c491479bb9fc6f69e9.
2018-04-19 13:44:07 -07:00