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
Benjamin Bouvier
6f5403a94b
machinst x64: lower Ctz using the Bsf x86 instruction
2020-07-16 18:21:06 +02:00
Benjamin Bouvier
33e0d05645
machinst x64: have cmov modify its destination operand;
...
This is tricky: the control flow implicitly implied by the operand makes
it so that the output register may be undefined, if we mark it only as a
"def". Make it a "mod" instead, which matches our usage in the codebase,
and will make it crash if the output operand isn't unconditionally
defined before the instruction.
2020-07-16 18:21:06 +02:00
Benjamin Bouvier
aa7db7fd7b
machinst x64: fix JmpUnknown register mapping;
2020-07-16 18:21:06 +02:00
Benjamin Bouvier
fe7dd41435
machinst x64: fix iconst emission
2020-07-16 18:21:06 +02:00
Benjamin Bouvier
ec2209665a
machinst x64: implement bsr and lower Clz;
2020-07-16 18:21:06 +02:00
Benjamin Bouvier
eda2d143ed
machinst x64: add support for umulhi/smulhi;
2020-07-16 18:21:06 +02:00
Benjamin Bouvier
571061fe4c
machinst x64: add support for rotations;
2020-07-16 18:21:06 +02:00
Benjamin Bouvier
22892466e7
machinst x64: fix implementation of *reduce;
...
They should just generate a plain move, since the high bits are then
ignored, and not an extended move.
2020-07-16 18:21:06 +02:00
Benjamin Bouvier
abf157bd69
machinst x64: Only use the feature flag to enable the x64 new backend;
...
Before this patch, running the x64 new backend would require both
compiling with --features experimental_x64 and running with
`use_new_backend`.
This patches changes this behavior so that the runtime flag is not
needed anymore: using the feature flag will enforce usage of the new
backend everywhere, making using and testing it much simpler:
cargo run --features experimental_x64 ;; other CLI options/flags
This also gives a hint at what the meta language generation would look
like after switching to the new backend.
Compiling only with the x64 codegen flag gives a nice compile time speedup.
2020-07-15 13:11:28 +02:00
Chris Fallin
26529006e0
Address review comments.
2020-07-14 10:17:29 -07:00
Chris Fallin
08353fcc14
Reftypes part two: add support for stackmaps.
...
This commit adds support for generating stackmaps at safepoints to the
new backend framework and to the AArch64 backend in particular. It has
been tested to work with SpiderMonkey.
2020-07-14 10:17:27 -07:00
Benjamin Bouvier
9d5be00de4
Address review comments
...
- put the division in the synthetic instruction as well,
- put the branch table check in the inst's emission code,
- replace OneWayCondJmp by TrapIf vcode instruction,
- add comments describing code generated by the synthetic instructions
2020-07-03 14:33:52 +02:00
Benjamin Bouvier
2115e70acb
machinst x64: implement enough to support branch tables;
2020-07-03 14:33:52 +02:00
Benjamin Bouvier
f86ecdcb86
machinst x64: lower and implement div/idiv; ADD TESTS
2020-07-03 14:33:52 +02:00
Benjamin Bouvier
da30527368
machinst x64: implement one way conditional jmp
2020-07-03 14:33:52 +02:00
Benjamin Bouvier
9d1bcfb2e8
machinst x64: implement cmov
2020-07-03 14:33:52 +02:00
Benjamin Bouvier
bd88065571
machinst x64: lower binary ALU operators;
2020-07-03 14:33:52 +02:00
Benjamin Bouvier
faeed3c7a4
machinst x64: implement spills and reloads
2020-07-03 14:33:52 +02:00
Benjamin Bouvier
08efcbd9d5
machinst x64: use movss for f32 loads;
2020-07-03 11:19:32 +02:00
Johnnie Birch
0aa56c500c
Add x64 lowering of Clif flt load instruction for new backend
...
Adds support for the clif flt load instruction.
2020-07-01 17:48:33 -07:00
Johnnie Birch
f2dd1535d5
Add x64 lowering of Clif flt store instruction for new backend
...
Adds support for the clif flt store instruction.
2020-07-01 14:54:59 -07:00
Benjamin Bouvier
de9fbfa095
machinst x64: correctly assign FP registers for incoming args;
...
Fixes #1943 .
Thanks to @jlb6740 for noticing the issue and @bjorn3 for catching the
error!
2020-07-01 15:00:43 +02:00