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:
19
tests/misc_testsuite/simd/v128-select.wast
Normal file
19
tests/misc_testsuite/simd/v128-select.wast
Normal 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))
|
||||
Reference in New Issue
Block a user