Skip to content

Commit 4832c82

Browse files
authored
Winch: Fix consts and multivalue returns (#10315)
1 parent e33c426 commit 4832c82

3 files changed

Lines changed: 20 additions & 16 deletions

File tree

tests/disas/winch/x64/v128_const/multivalue.wat

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
;; movq 0x10(%r11), %r11
1515
;; addq $0x30, %r11
1616
;; cmpq %rsp, %r11
17-
;; ja 0x68
17+
;; ja 0x67
1818
;; 1c: movq %rsi, %r14
1919
;; subq $0x20, %rsp
2020
;; movq %rsi, 0x18(%rsp)
@@ -23,23 +23,23 @@
2323
;; movdqu 0x36(%rip), %xmm0
2424
;; subq $0x10, %rsp
2525
;; movdqu 0x29(%rip), %xmm15
26-
;; movdqu %xmm15, 0x30(%rsp)
26+
;; movdqu %xmm15, (%rsp)
2727
;; movq 0x18(%rsp), %rax
2828
;; movdqu (%rsp), %xmm15
2929
;; addq $0x10, %rsp
3030
;; movdqu %xmm15, (%rax)
3131
;; addq $0x20, %rsp
3232
;; popq %rbp
3333
;; retq
34-
;; 68: ud2
35-
;; 6a: addb %al, (%rax)
36-
;; 6c: addb %al, (%rax)
37-
;; 6e: addb %al, (%rax)
38-
;; 70: addb %al, (%rax)
39-
;; 72: addb %al, (%rax)
40-
;; 74: addb %al, (%rax)
41-
;; 76: addb %al, (%rax)
42-
;; 78: addb %al, (%rax)
43-
;; 7a: addb %al, (%rax)
44-
;; 7c: addb %al, (%rax)
45-
;; 7e: addb %al, (%rax)
34+
;; 67: ud2
35+
;; 69: addb %al, (%rax)
36+
;; 6b: addb %al, (%rax)
37+
;; 6d: addb %al, (%rax)
38+
;; 6f: addb %al, (%rax)
39+
;; 71: addb %al, (%rax)
40+
;; 73: addb %al, (%rax)
41+
;; 75: addb %al, (%rax)
42+
;; 77: addb %al, (%rax)
43+
;; 79: addb %al, (%rax)
44+
;; 7b: addb %al, (%rax)
45+
;; 7d: addb %al, (%rax)

tests/misc_testsuite/winch/simd_multivalue.wast

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,7 @@
33
;; test that swapping the parameters results in swapped return values
44
(module (func (export "f") (param v128) (param v128) (result v128) (result v128) (local.get 1) (local.get 0)))
55
(assert_return (invoke "f" (v128.const i64x2 2 1) (v128.const i64x2 1 2)) (v128.const i64x2 1 2) (v128.const i64x2 2 1))
6+
7+
;; test 0 consts
8+
(module (func (export "consts") (result v128) (result v128) (v128.const i64x2 0 0) (v128.const i64x2 0 0)))
9+
(assert_return (invoke "consts") (v128.const i64x2 0 0) (v128.const i64x2 0 0))

winch/codegen/src/codegen/control.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -932,8 +932,8 @@ impl ControlStackFrame {
932932
masm.store(RegImm::f64(v.bits()), addr, (*ty).try_into()?)?;
933933
}
934934
(ABIOperand::Stack { ty, offset, .. }, Val::V128(v)) => {
935-
let addr =
936-
masm.address_at_sp(SPOffset::from_u32(results_offset.as_u32() - *offset))?;
935+
let addr = masm
936+
.address_from_sp(SPOffset::from_u32(results_offset.as_u32() - *offset))?;
937937
masm.store(RegImm::v128(*v), addr, (*ty).try_into()?)?;
938938
}
939939
(_, v) => debug_assert!(v.is_mem()),

0 commit comments

Comments
 (0)