x64: Fix codegen for the select instruction with v128 (#4317)

This commit fixes a bug in the previous codegen for the `select`
instruction when the operations of the `select` were of the `v128` type.
Previously teh `XmmCmove` instruction only stored an `OperandSize` of 32
or 64 for a 64 or 32-bit move, but this was also used for these 128-bit
types which meant that when used the wrong move instruction was
generated. The fix applied here is to store the whole `Type` being moved
so the 128-bit variant can be selected as well.
This commit is contained in:
Alex Crichton
2022-06-27 13:02:40 -05:00
committed by GitHub
parent 23ae9016af
commit 8bb07523e2
5 changed files with 49 additions and 28 deletions

View File

@@ -0,0 +1,19 @@
(module
(func (export "select") (param v128 v128 i32) (result v128)
local.get 0
local.get 1
local.get 2
select)
)
(assert_return (invoke "select"
(v128.const i64x2 1 1)
(v128.const i64x2 2 2)
(i32.const 0))
(v128.const i64x2 2 2))
(assert_return (invoke "select"
(v128.const i64x2 1 1)
(v128.const i64x2 2 2)
(i32.const 1))
(v128.const i64x2 1 1))