Commit Graph

6609 Commits

Author SHA1 Message Date
Benjamin Bouvier
f78a61b998 [meta] Rename base/ to shared/ in the Rust meta crate; 2019-02-12 08:19:57 -08:00
Benjamin Bouvier
25fdda6134 [meta] Move source generation responsibility into the meta crate itself; 2019-02-12 08:19:57 -08:00
Benjamin Bouvier
afa4a749c5 Fix #666: Change the way we consider a block has been visited in relaxation;
This was previously using the following condition to decide that a block
hadn't been visited yet: either dest_offset is non-0 or the block isn't
the entry block. Unfortunately, this didn't work when the first block
would be non-empty but wouldn't generate code at all.

Since the original code would do at least one pass over the entire code,
the first pass that determines initial EBB offsets is done separately,
without considering branch relaxation. This ensures that all EBBs have
been visited and have correct initial offsets, and doesn't require a
special check to know whether an EBB has been visited or not.
2019-02-12 14:39:45 +01:00
Jef
680a8ed585 Add select 2019-02-08 13:24:59 +01:00
Jef
7788e6cb6b Change wasmparser.rs upstream 2019-02-08 11:53:31 +01:00
Jef
7e5c3c567f Signature checking for call_indirect, integrate with wasmtime 2019-02-08 11:46:25 +01:00
Rett Berg
68479e6115 Clarify br_table
From comments in
https://github.com/CraneStation/cranelift/issues/101#issuecomment-461284555
2019-02-07 09:18:07 -08:00
Dan Gohman
9f9c306091 Fix indentation warnings reported by flake8. 2019-02-06 21:37:05 -08:00
Dan Gohman
d2082abb73 Look for Cargo.toml files only in crate directories. 2019-02-06 21:37:05 -08:00
Rett Berg
084722a118 fix typos in cranelift-frontend/src/lib.rs 2019-02-06 20:31:01 -08:00
Dan Gohman
a94d3587e6 Add vmctx parameters to the spectest implementation functions.
This fixes a mismatch with the change to pass the VMContext parameter
as the first argument.
2019-02-06 06:12:53 -08:00
Dan Gohman
602e81a895 Minor code reorganization. 2019-02-01 18:20:59 -08:00
Dan Gohman
ddb8453b0d Move wasmtime's instantiation test into a separate file. 2019-02-01 18:20:59 -08:00
Dan Gohman
72ee874986 Factor out a function for reading a wasm file. 2019-02-01 18:20:59 -08:00
Dan Gohman
8b140cc748 Create a Context class to group together various state objects. 2019-02-01 18:20:59 -08:00
Dan Gohman
4675948c2a Switch to passing the vmctx hidden argument at the beginning.
This switches to passing the vmctx hidden argument at the beginning of
the argument list, rather than the end.
2019-02-01 18:20:28 -08:00
Jef
2fad984a0d Shift and rotate 2019-01-30 11:06:32 +01:00
Yury Delendik
e66f01b923 Update cranelift libraries to 0.28.0 2019-01-29 16:45:41 -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
Lukas Bergdoll
54959cf5bb Fix link to cargo workspace documentation 2019-01-28 14:38:44 -08:00
Joel Martin
fdcb2184a8 Support 32-bit build. (#44)
* Support 32-bit build.

Signatures/functions/imports/exports etc are defined as varuint32 in
the WebAssembly specification so use u32 rather than u64.

Decrease the static memory constants for 32-bit addressing mode so
that they fit within 32-bit memory constraints.

Conditionalize cmake compile of SignalHandlers.cpp so that -m32 is
passed when building 32-bit.

Add a no-op match for Reloc::X86CallPCRel4 during linking. This is
probably the wrong thing, but it allows the tests to pass. Using the
same logic from the Reloc::X86PCRel4 case did not work.
2019-01-24 13:40:25 -08:00
Dan Gohman
45cd3f6193 Bump version to 0.28.0 2019-01-22 23:50:12 -08:00
Dan Gohman
6326140227 Fix legalization of bxor_imm. 2019-01-22 23:45:23 -08:00
Dan Gohman
c8febc1a37 Bump version to 0.27.0.
Major API-incompatible changes include:
 - Introduce TrapCode::UnreachableCodeReached, used for unreachable in wasm.
 - cranelift-wasm's `declare_signature` now takes its signature by value
 - cranelift-wasm's `declare_table_elements` `elems` parameter now takes a boxed slice
 - Remove cranelift-wasm's `ModuleEnvironment`'s `get_signature`,
   `get_num_func_imports`, `get_func_type`, and `get_global`.
2019-01-22 20:06:34 -08:00
Dan Gohman
1bbd2ebb77 Update to region 2.0.0. 2019-01-22 20:03:28 -08:00
Dan Gohman
00a4e93bcd Add a concept of "global exports".
This adds a feature which allows one to look up an export by name
without knowing what module it's in -- `lookup_global_export` on an
`InstanceContents`.

The main expected use for this is to support APIs where module A
imports a function from module B, and module B needs to access module
A's memory. B can't import it from A in the normal way, because that
would create a dependency cycle. So for now, allow B to look up A's
exported memory dynamically with `lookup_global_export`.

In the future, with reference types and possibly host bindings, we'll be
able to pass references to memory as arguments, which will obviate the
need for this mechanism.
2019-01-22 16:32:07 -08:00
Dan Gohman
dae04be948 Switch from hashmap_core to hashbrown.
As suggested
[here](https://github.com/Amanieu/hashmap_core/pull/10#issuecomment-455866083).

This also allows us to re-enable the basic compile fuzz target.
2019-01-22 13:41:04 -08:00
Dan Gohman
1fdf1c92d9 Update to the rustfmt in rust 1.32, which is now stable. 2019-01-22 13:27:03 -08:00
Nathan Froyd
363eea6960 avoid directories for cargo build dependencies
We are facing peculiar Windows-only regressions in build times in
https://bugzilla.mozilla.org/show_bug.cgi?id=1506511 and while the build
times might just be Windows being slow, putting directories in
`rerun-if-changed` might also be causing problems.  The build only
depends on the files, anyway, so let's just say that.
2019-01-22 13:20:55 -08:00
Dan Gohman
8769febdbd Formest with latest stable rustfmt. 2019-01-20 10:42:50 -08:00
Jef
26cb8de303 Only generate a single trap to reduce code size and complexity in call_indirect 2019-01-18 16:59:29 +01:00
Jef
2c8efa32b8 Unnecessarily optimise asm_println 2019-01-18 14:03:23 +01:00
Jef
c7956dbdb2 Fail if we try to call past the end of the table 2019-01-18 14:01:12 +01:00
Jef
b6e29a899e Add todo comments 2019-01-18 13:07:41 +01:00
Jef
b23e00893c Fix saving volatile registers now that we use unused args as scratch 2019-01-18 13:04:53 +01:00
Jef
e57cec3b3f Do call_indirect properly, by accessing the table section 2019-01-18 13:01:42 +01:00
Jef
d06be92a4e Don't allocate context if it's unused 2019-01-17 14:34:34 +01:00
Jef
e0f032a0e5 clz/ctz/popcnt 2019-01-17 13:51:18 +01:00
Jef
74d168ec4b Merge ends, store locals in registers where possible 2019-01-17 11:07:51 +01:00
Dan Gohman
06a072ead0 Mention wasmtime as a planned use. 2019-01-16 14:13:54 -08:00
Jef
a7fa7da7d4 Support a proper vmctx that contains more than just memory offset 2019-01-16 16:34:24 +01:00
bjorn3
eb032fd0f4 Simplify 2019-01-16 07:07:31 -08:00
bjorn3
80031cb2b4 Add TargetIsa 2019-01-16 07:07:31 -08:00
bjorn3
eedc7cabf1 Allow peeking at the compiled function 2019-01-16 07:07:31 -08:00
Jef
d7434fe5d2 Have vmctx be the first argument so we (almost) never have to shuffle it around 2019-01-16 09:33:46 +01:00
Jef
b86d11e4ad Avoid unnecessary work when passing arguments on 2019-01-15 17:24:30 +01:00
Jef
62fe065e85 Fix miscompilation for maliciously-crafted use of locals 2019-01-15 14:00:43 +01:00
Jef
45b2a5dae2 Merge remote-tracking branch 'forked/master' into loops 2019-01-15 12:59:55 +01:00
Jef
1b6952bb99 Implement vmctx as a hidden argument for cranelift compat 2019-01-15 12:27:55 +01:00
Dan Gohman
aeb9161e2c Update no_std support for Rust 2018 Edition.
With Rust 2018 Edition, the `mod std` trick to alias `core` names to
`std` no longer works, so switch to just having the code use `core`
explicitly.

So instead, switch to just using `core::*` for things that in core.
This is more consistent with other Rust no_std code. And it allows
us to enable `no_std` mode unconditionally in the crates that support
it, which makes testing a little easier.

There actually three cases:

 - For things in std and also in core, like `cmp`: Just use them via
   `core::*`.

 - For things in std and also in alloc, like `Vec`: Import alloc as std, as
   use them from std. This allows them to work on both stable (which
   doesn't provide alloc, but we don't support no_std mode anyway) and
   nightly.

 - For HashMap and similar which are not in core or alloc, import them in
   the top-level lib.rs files from either std or the third-party hashmap_core
   crate, and then have the code use super::hashmap_core.

Also, no_std support continues to be "best effort" at this time and not
something most people need to be testing.
2019-01-14 21:48:15 -08:00