Andrew Brown
cf598dc35b
machinst x64: add packed moves for different vector types
2020-08-20 12:37:22 -07:00
Johnnie Birch
a31336996c
Add support for some packed multiplication for new x64 backend
...
Adds support for i32x4, and i16x8 and lowering for pmuludq in
preperation for i64x2.
2020-08-19 10:24:14 -07:00
Johnnie Birch
38ef98700f
Adds packed integer subtraction
2020-08-12 09:41:20 -07:00
Nick Fitzgerald
fdbc9e351f
Merge pull request #2111 from fitzgen/rename-stackmap-to-stack-map
...
Rename "Stackmap" to "StackMap"
2020-08-07 10:46:38 -07:00
Nick Fitzgerald
05bf9ea3f3
Rename "Stackmap" to "StackMap"
...
And "stackmap" to "stack_map".
This commit is purely mechanical.
2020-08-07 10:08:44 -07:00
Johnnie Birch
e60a6f2ad2
Fixup packed integer add lowering
...
Remove stray print statement
Fix bug in match statement causing unreachable code.
2020-08-06 22:25:18 -07:00
Johnnie Birch
f5909b37c3
Add emit tests for packed integer add instructions
2020-08-06 22:25:18 -07:00
Johnnie Birch
dd6ba5f9d7
Lower packed integer add instructions (v128)
...
Adds lowering support for packed integer add instructions and helper
function for determining if a type for an instruction indicates it is
packed.
2020-08-06 22:25:18 -07:00
Johnnie Birch
2eadc6e2a8
Add packed integer add opcodes (v128) to instruction set enum
2020-08-06 22:25:18 -07:00
Andrew Brown
4cb36afd7b
machinst x64: refactor to use types::[type] everywhere
...
This change is a pure refactoring--no change to functionality. It removes `use crate::ir::types::*` imports and uses instead `types::I32`, e.g., throughout the x64 code. Though it increases code verbosity, this change makes it more clear where the type identifiers come from (they are generated by `cranelif-codegen-meta` so without a prefix it is difficult to find their origin), avoids IDE confusion (e.g. CLion flags the un-prefixed identifiers as errors), and avoids importing unwanted identifiers into the namespace.
2020-08-05 10:45:45 -07:00
Andrew Brown
8cfff26957
machinst x64: implement floating point comparisons
...
Note that this fixes an encoding issue in which the packed single and packed double prefixes were flipped.
2020-08-04 13:24:38 -07:00
Andrew Brown
c21fe0eb73
machinst x64: use assert_eq! when possible
2020-08-04 09:18:45 -07:00
Andrew Brown
999e04a2c4
machinst x64: refactor imports to use rustfmt convention
...
This change is a pure refactoring--no change to functionality. It removes newlines between the `use ...` statements in the x64 backend so that rustfmt can format them according to its convention. I noticed some files had followed a manual convention but subsequent additions did not seem to fit; this change fixes that and lightly coalesces some of the occurrences of `use a::b; use a::c;` into `use::{b, c}`.
2020-08-04 09:17:54 -07:00
Benjamin Bouvier
e108f14620
machinst x64: use xor/xorpss/xorpd to generate zero constants;
2020-07-31 13:17:52 -07:00
Chris Fallin
9a9b5015d0
Merge pull request #2081 from cfallin/aarch64-baldrdash-fix
...
Aarch64: fix narrow integer-register extension with Baldrdash ABI.
2020-07-31 12:13:38 -07:00
Chris Fallin
1fbdf169b5
Aarch64: fix narrow integer-register extension with Baldrdash ABI.
...
In the Baldrdash (SpiderMonkey) embedding, we must take care to
zero-extend all function arguments to callees in integer registers when
the types are narrower than 64 bits. This is because, unlike the native
SysV ABI, the Baldrdash ABI expects high bits to be cleared. Not doing
so leads to difficult-to-trace errors where high bits falsely tag an
int32 as e.g. an object pointer, leading to potential security issues.
2020-07-31 10:19:13 -07:00
Andrew Brown
999fa00d6a
machinst x64: add loading of inline 128-bit constants
...
Eventually the `load + jmp + constant` pattern should be replaced with just `load` once constant pools are more tightly integrated.
2020-07-30 14:16:12 -07:00
Andrew Brown
eda5c6d370
machinst x64: add packed FP negation
2020-07-30 14:16:12 -07:00
Andrew Brown
c74a9d1225
machinst x64: add packed shifts
2020-07-30 14:16:12 -07:00
Andrew Brown
0398033447
machinst x64: add packed FP comparisons
...
Re-orders the SseOpcode variants alphabetically.
2020-07-30 14:16:12 -07:00
Andrew Brown
e3bd8d696b
machinst x64: add basic packed FP arithmetic
...
Includes instruction definition of packed min/max.
2020-07-30 14:16:12 -07:00
Andrew Brown
77cc2f69c1
machinst x64: allow use of vector-length types
2020-07-30 14:16:12 -07:00
Andrew Brown
dc6220b87c
machinst x64: add uses for crate dependencies
2020-07-30 14:16:12 -07:00
Benjamin Bouvier
79abcdb035
machinst x64: add testing to the CI;
2020-07-30 10:32:00 +02:00
Benjamin Bouvier
7f109a5198
machinst x64: use a sign-extension when loading jump table offsets;
...
The jump table offset that's loaded out of the jump table could be
signed (if it's an offset to before the jump table itself), so we should
use a signed extension there, not an unsigned extension.
2020-07-28 12:29:49 +02:00
Benjamin Bouvier
35d9ab19b7
Review fixes;
2020-07-24 19:29:12 +02:00
Benjamin Bouvier
ad4a2f919f
machinst x64: implement support for reference types;
2020-07-24 19:29:12 +02:00
Benjamin Bouvier
987c616bf5
machinst x64: implement support for dynamic heaps and explicit bound checks;
2020-07-24 19:29:12 +02:00
Benjamin Bouvier
2e3ad3227d
machinst x64: fix encoding of movzx/movsx with non-ABCD input registers;
...
Using an input register that doesn't belong to the ABCD family (al,
etc.) as the source of movsx/movzx requires a redundant REX prefix, that
was not emitted.
2020-07-24 19:29:12 +02:00
Benjamin Bouvier
de4923356a
machinst x64: fix fcmp comparison for NotEqual;
...
We have to emit both checks against the parity bit (for unordered) and
non-equality bit (for equality), otherwise this returns false when
comparing NaN against itself.
2020-07-24 19:29:12 +02:00
Benjamin Bouvier
4b26f5b120
machinst x64: baldrdash: fix multi-value when both gpr and xmm are returned;
...
In baldrdash, only the first return value may live in a register, be it
an integer or a floating point value.
2020-07-24 19:29:12 +02:00
Benjamin Bouvier
aa103698d4
machinst x64: extend Copysign to work for f64 inputs too;
2020-07-24 19:29:12 +02:00
Benjamin Bouvier
694af3aec2
machinst x64: implement float Floor/Ceil/Trunc/Nearest as VM calls;
2020-07-24 19:29:12 +02:00
Benjamin Bouvier
48ec806a9d
machinst x64: implement Fabs/Fneg in terms of other instructions;
2020-07-24 19:29:12 +02:00
Benjamin Bouvier
03b9e1e86a
machinst x64: implement float min/max with the right semantics;
2020-07-24 19:29:12 +02:00
Benjamin Bouvier
e43310a088
machinst x64: adapt conversions for saturation behaviors;
2020-07-24 19:29:12 +02:00
Benjamin Bouvier
cd54f05efd
machinst x64: implement float-to-int and int-to-float conversions;
2020-07-24 19:29:12 +02:00
Johnnie Birch
a7cedf3100
Add support for 32 bit and 64 bit fcmp for the new backend
...
Implements commiss and commisd.
2020-07-17 13:46:54 -07:00
Benjamin Bouvier
ead8a835c4
machinst x64: add more FP support
2020-07-17 15:56:44 +02:00
Benjamin Bouvier
bab337fc32
Address review comments;
2020-07-16 18:21:06 +02:00
Benjamin Bouvier
5a55646fc3
machinst x64: support out-of-bounds memory accesses;
2020-07-16 18:21:06 +02:00
Benjamin Bouvier
ea33ce9116
machinst x64: basic support for baldrdash
...
+ fix multi-value support
2020-07-16 18:21:06 +02:00
Benjamin Bouvier
00b38c91f6
machinst x64: fix generation of RegMemImm immediate operands;
2020-07-16 18:21:06 +02:00
Benjamin Bouvier
1430c5e436
machinst x64: fix index handling of jump table;
...
The index should be truncated to 32 bits before being used for the jump
table entry computation.
2020-07-16 18:21:06 +02:00
Benjamin Bouvier
55b9059954
machinst x64: remove spurious assertion about FP offset requiring to be 16-bytes aligned
2020-07-16 18:21:06 +02:00
Benjamin Bouvier
3905a1b17b
machinst x64: implement SymbolValue and FuncAddr with a movabsq+reloc;
2020-07-16 18:21:06 +02:00
Benjamin Bouvier
cfa0a0c4e8
machinst x64: lower resumable_trap as trap;
2020-07-16 18:21:06 +02:00
Benjamin Bouvier
311027869b
machinst x64: implement popcnt.i64
2020-07-16 18:21:06 +02:00
Benjamin Bouvier
d9310e8d90
machinst x64: fix checked div sequence
...
- it should mark as clobbering (def) rdx, not modifying it
- the signed-div check requires a temporary to compare against int64_min
2020-07-16 18:21:06 +02:00
Benjamin Bouvier
f932bccaf8
machinst x64: fix sign-extension at boundary
2020-07-16 18:21:06 +02:00