`urm_noflags` is a variant of `urm` which doesn't clobber the flags, and
`urm_noflags_abcd` is a further variant for ABCD registers, so it also
doesn't clobber the flags.
This switches from a custom list of architectures to use the
target-lexicon crate.
- "set is_64bit=1; isa x86" is replaced with "target x86_64", and
similar for other architectures, and the `is_64bit` flag is removed
entirely.
- The `is_compressed` flag is removed too; it's no longer being used to
control REX prefixes on x86-64, ARM and Thumb are separate
architectures in target-lexicon, and we can figure out how to
select RISC-V compressed encodings when we're ready.
* Update to rustfmt-preview.
* Run "cargo fmt --all" with rustfmt 0.4.1.
rustfmt 0.4.1 is the latest release of rustfmt-preview available on the
stable channel.
* Fix a long line that rustfmt 0.4.1 can't handle.
* Remove unneeded commas left behind by rustfmt.
With 8f4a3586e5a787fd32a9afe35df4a9811d92c66b, we now have proper wabt
integration, so we no longer need to download and install a separate
binary package.
* Optimize 0.0 floating point constants. Rather than using the existing
process of emitting bit patterns and moving them into floating point
registers, use the `xorps` instruction to zero out the register.
* is_zero predicate function will not accept negative zero. Fixed formatting for encoding recipe and filetests.
Define `WasmError` (and an accompanying `WasmResult`) to represent
errors translating WebAssembly functions. Make `translate_call` and
related functions return `WasmResult`s so that embedders have the
flexibility to reject features they don't support.
Move `InvalidInput` out of `CtonError` and into `WasmError`, where it's
now named `InvalidWebAssembly`, as it's a WebAssembly-specific error
condition. Also extend it to preserve the original error message and
bytecode offset.
* Use FxHashMap instead of HashMap for better performance
* Replace the binary search in the coalescing pass with a FxHashMap
This speeds up coalescing by up to 16% and overall compilation by 9%
* Generate debug symbols in optimized builds.
This allows profiling tools to provide more accurate information,
especially details about inlined functions.
* Rewrite and optimize partition_slice
This improves the performance of the register allocation passes
which use LiveValueTracker.
With new versions of cretonne-codegen:
- Non-colocated calls are emitted as a movabs with an indirect call.
This uses an Abs8 relocation.
- Colocated calls are emitted as direct calls, but the "+ 4"
adjustment is now folded into the addend, so we don't need to
handle it explicitly in the X86PCRel4 code anymore.
The wasm function index space consists of the index space of the
imported functions concatenated with the index space of the defined
functions. When iterating through function definitions, it's necessary
to adjust the index when a function-index-space index is needed.
Include the name of the variable when diagnosing uses and defs of
undeclared variables. And, add an assert to def_var to check that the
declared type of a variable matches the value type of the def.
With this change, `Variable` implementations must now implement `Debug`.