Dan Gohman
d13f29cfe4
Update to wasmparser 0.11.2.
2017-09-26 14:58:50 -07:00
Jakob Stoklund Olesen
6ff681a90d
Add general legalization for the select instruction.
2017-09-26 14:16:35 -07:00
Jakob Stoklund Olesen
ce767be703
Intel encodings for floating point copies.
2017-09-26 13:54:38 -07:00
Jakob Stoklund Olesen
7fb6159a85
Add Intel encodings for the fcmp instruction.
...
Not all floating point condition codes are directly supported by the
ucimiss/ucomisd instructions. Some inequalities need to be reversed and
eq+ne require two separate tests.
2017-09-26 11:17:32 -07:00
Jakob Stoklund Olesen
79968a2325
Add standard expansions for fcopysign.
...
This is also just a sign bit manipulation.
2017-09-25 15:17:32 -07:00
Jakob Stoklund Olesen
6bec5f8507
Intel encodings for nearest/floor/ceil/trunc.
...
These floating point rounding operations all use the roundss/roundsd
instructions that are available in SSE 4.1.
2017-09-25 15:08:04 -07:00
Jakob Stoklund Olesen
ac343ba92a
Add encodings for square root instructions.
2017-09-25 13:15:09 -07:00
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
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
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
Dan Gohman
74845fed6c
Use more helper functions on CursorBase to reduce cursor repositioning.
2017-09-20 11:19:35 -07:00
Dan Gohman
482439c94b
Minor code cleanups in simple_gvn's main loop.
...
Redundant load/store elimination isn't critical for the use case of
optimizing wasm code which has already been optimized, so remove the
TODO for that for now.
2017-09-20 09:55:01 -07:00
Dan Gohman
b888894fbb
Use CursorBase utility functions to reduce repositioning clutter.
2017-09-20 09:06:17 -07:00
Dan Gohman
144d39a53d
Minor code simplification.
2017-09-20 08:17:40 -07:00