Dan Gohman
36585ddc4f
Wasm control stack entries only need the number of return types.
...
This eliminates heap-allocated vectors which stored the actual types.
2017-09-25 13:05:29 -07:00
Dan Gohman
55e48ce7aa
Simplify translate_type's return type.
2017-09-25 13:05:29 -07:00
Dan Gohman
14d6d1117d
Clean up unneeded '&'s.
2017-09-25 13:05:29 -07:00
Jakob Stoklund Olesen
8deca67968
Add legalization patterns for fabs and fneg.
...
These sign bit manipulations need to use a -0.0 floating point constant
which we didn't have a way of materializing previously.
Add a ieee32.bits(0x...) syntax to the Python AST nodes that creates am
f32 immediate value with the exact requested bitwise representation.
2017-09-25 12:15:33 -07:00
Jakob Stoklund Olesen
ba1c50d6c1
Test WebAssembly floating point constants.
...
f64.const does not yet work on 32-bit Intel.
2017-09-25 11:06:18 -07:00
Jakob Stoklund Olesen
fdb97da21b
Implement a poor man's jump table.
...
We will eventually support real jump tables, but for now just expand
br_table into a sequence of conditional branches.
2017-09-25 10:56:14 -07:00
Dan Gohman
e64eb79aaf
Fix dependency paths. wasmstandalone no longer depends on out-of-tree patches.
2017-09-23 15:38:38 -07:00
Dan Gohman
666d565fd4
Clean up unused imports.
2017-09-23 15:38:38 -07:00
Dan Gohman
0c78a2f298
Import the wasm2obj experiment and minimally update it.
2017-09-23 15:38:38 -07:00
Dan Gohman
06f0b00c2d
Add an assert on an implemented feature rather than letting it silently fail.
2017-09-22 16:26:43 -07:00
Dan Gohman
64d596005c
Reduce the extent of unsafe code.
2017-09-22 16:21:25 -07:00
Dan Gohman
ecd746718b
Remove comments about manually saving callee-saved registers.
...
Even though Cretonne doesn't implement callee-saved registers yet,
it will, so we shouldn't need manual save/restore code when calling it.
2017-09-22 16:17:08 -07:00
Dan Gohman
4c5f584d01
Use debug_assert_eq! where applicable.
2017-09-22 16:13:04 -07:00
Dan Gohman
b583d75c7a
Fix redundant borrows.
2017-09-22 16:11:11 -07:00
Dan Gohman
382415ed0c
Fix a useless format!.
2017-09-22 16:09:10 -07:00
Jakob Stoklund Olesen
29dfcf5dfb
Add spill/fill encodings for Intel ISAs.
...
To begin with, these are catch-all encodings with a SIB byte and a
32-bit displacement, so they can access any stack slot via both the
stack pointer and the frame pointer.
In the future, we will add encodings for 8-bit displacements as well as
EBP-relative references without a SIB byte.
2017-09-22 16:05:26 -07:00
Dan Gohman
b89277d9ce
Rename "wast" to "wat".
2017-09-22 15:57:32 -07:00
Dan Gohman
cdffc1b50a
Roughly update for the recent Cretonne API changes.
...
Everything builds and simple modules run, though there's still lots more
to do.
2017-09-22 15:56:18 -07:00
Jakob Stoklund Olesen
76eb7df9f0
Add an isa::StackRef type.
...
This contains encoding details for a stack reference: The base register
and offset to use in the specific instruction encoding.
Generate StackRef objects called in_stk0 etc for the binemit recipe
code. All binemit recipes need to compute base pointer offsets for stack
references, so have the automatically generated code do it.
2017-09-22 13:34:33 -07:00
Jakob Stoklund Olesen
2946cc54d3
Add more trap codes.
...
These are codes that come up naturally when translating WebAssembly and
legalizing the Cretonne instruction set.
2017-09-22 08:51:55 -07:00
Angus Holder
7fbf1cb810
Revert accidental change
2017-09-22 07:54:26 -07:00
Angus Holder
b003605132
Adapt intel to be able to correctly choose compressed instruction encodings: create a register class to identify the lower 8 registers, omit unnecessary REX prefixes, and fix the tests
2017-09-22 07:54:26 -07:00
Angus Holder
3b66c0be40
Emit compressed instruction encodings for instructions where constraints allow
2017-09-22 07:54:26 -07:00
Jakob Stoklund Olesen
2d4c860187
Convert legalizer::split and generated legalization code to FuncCursor.
2017-09-21 17:05:51 -07:00
Jakob Stoklund Olesen
a9acbd1afd
Convert the legalizer/boundary module to FuncCursor.
...
This is a larger refactoring because all the changes need to be done
together. Either you pass a Function reference around, or you pass
around references to the parts. There is no in between.
2017-09-21 16:43:47 -07:00
Jakob Stoklund Olesen
85e4e9f511
Assign source locations when translating WebAssembly to Cretonne.
...
The source locations are byte code offsets relative to the beginning of
the function.
2017-09-21 14:37:54 -07:00
Jakob Stoklund Olesen
4d4da2dc60
Add source location support to FuncCursor and EncCursor.
...
A cursor now also remembers a current source location which will be
assigned to all new instructions created with the cursor.
The old layout::Cursor can't support source locations because it doesn't
have a reference to the full ir::Function.
2017-09-21 14:37:54 -07:00
Jakob Stoklund Olesen
b2a314a229
Add per-instruction source locations to the Cretonne IR.
...
Source locations are opaque 32-bit entities that can be used to
represent WebAssembly byte-code positions or some other source
identifier.
2017-09-21 14:24:26 -07:00
Dan Gohman
16eb689dd1
Use Self instead of repeating the type name.
2017-09-21 14:21:30 -07:00
Dan Gohman
e5e4b59683
Tidy up some asserts.
2017-09-21 14:21:30 -07:00
Dan Gohman
e75558b800
Fix spelling of "adjustment".
2017-09-21 14:21:30 -07:00
Dan Gohman
dda8293668
Restructure code to avoid a heap allocation.
2017-09-21 14:21:30 -07:00
Dan Gohman
ff18772d0e
Avoid a heap allocation.
2017-09-21 14:21:30 -07:00
Dan Gohman
22b769b716
Convert use_var and predecessors_lookup into a state machine to avoid recursion.
2017-09-21 14:21:30 -07:00
Dan Gohman
9cda4eacde
Minor refactor.
2017-09-21 14:21:30 -07:00
Dan Gohman
df5ba8bbba
Correct a comment.
2017-09-21 14:21:30 -07:00
Dan Gohman
f524977920
Factor some logic out of seal_ebb_header_block into parts.
...
This allows append_jump_argument to call just the part that it needs
instead of the whole of seal_ebb_header_block, which is a nice cleanup
on its own, and it also eliminates a cycle from the static call graph.
2017-09-21 14:21:30 -07:00
Jakob Stoklund Olesen
218959ff65
Convert more tests to FuncCursor.
2017-09-21 13:30:00 -07:00
Jakob Stoklund Olesen
8e93aa7ce7
Remove layout::Cursor from the legalizer::split API.
...
We still use the cursor internally, but don't require callers to use it
too.
2017-09-21 13:07:17 -07:00
Jakob Stoklund Olesen
1cd91b6f30
Eliminate layout::Cursor from cton_frontend.
...
Replace all uses with a FuncCursor.
Avoid the anti-pattern of passing parts of a function around as
independent references.
2017-09-21 12:24:27 -07:00
Jakob Stoklund Olesen
03dee5e442
Replace some uses of layout::Cursor with FuncCursor.
...
The layout::Cursor is unfortunate because it doesn't reference the whole
function.
2017-09-21 11:27:15 -07:00
Dan Gohman
ed6630dc02
Move verify calls back into Context, using FlagsOrIsa.
...
With FlagsOrIsa, we can pass around the information we need to run
the verifier from the Context even when a TargetIsa is not available.
2017-09-20 16:42:13 -07:00
Dan Gohman
f80ee7af39
Add a "host" crate for autodetecting the host. ( #159 )
...
* Add a "native" crate for autodetecting the host.
* Remove the redundant .gitignore.
* Use the proper builder for enabling subtarget flags.
2017-09-20 16:14:26 -07:00
Jakob Stoklund Olesen
8def91b4ad
Remove the unused Nullary instruction format.
...
This format was only used by the trap instruction which has its own
format now.
2017-09-20 15:59:13 -07:00
Jakob Stoklund Olesen
e8723be33f
Add trap codes to the Cretonne IL.
...
The trap and trapz/trapnz instructions now take a trap code immediate
operand which indicates the reason for trapping.
2017-09-20 15:50:02 -07:00
Jakob Stoklund Olesen
0f21fd342a
Remove the HeapLoad/HeapStore instruction formats.
...
These formats are not used any longer after the heap_load and heap_store
instructions were replaced by heap_addr.
Also drop the Uoffset32 immediate operand type which isn't used either.
2017-09-20 15:43:25 -07:00
Dan Gohman
d3f3fdf5af
Remove a redundant .gitignore file.
2017-09-20 15:35:26 -07:00
Dan Gohman
ce94a3fa39
Use ScopedHashMap in simple_gvn.
...
This avoids effectively ending up with most of a function body
stored in the hash map at once by removing elements promptly when
they go out of scope.
2017-09-20 14:21:44 -07:00
Dan Gohman
6710216e96
Add next_inst and prev_inst helper functions to Layout.
2017-09-20 12:38:13 -07:00
Dan Gohman
42af6d59bf
Add a ScopedHashMap class, for use in a future GVN implementation.
2017-09-20 11:28:55 -07:00