1;;! target = "x86_64"
2;;! test = "winch"
3
4
5(module
6  (table $t3 2 funcref)
7  (elem (table $t3) (i32.const 1) func $dummy)
8  (func $dummy)
9
10  (func (export "set-funcref") (param $i i32) (param $r funcref)
11    (table.set $t3 (local.get $i) (local.get $r))
12  )
13  (func (export "set-funcref-from") (param $i i32) (param $j i32)
14    (table.set $t3 (local.get $i) (table.get $t3 (local.get $j)))
15  )
16)
17
18;; wasm[0]::function[0]::dummy:
19;;       pushq   %rbp
20;;       movq    %rsp, %rbp
21;;       movq    8(%rdi), %r11
22;;       movq    0x18(%r11), %r11
23;;       addq    $0x10, %r11
24;;       cmpq    %rsp, %r11
25;;       ja      0x38
26;;   1c: movq    %rdi, %r14
27;;       subq    $0x10, %rsp
28;;       movq    %rdi, 8(%rsp)
29;;       movq    %rsi, (%rsp)
30;;       addq    $0x10, %rsp
31;;       popq    %rbp
32;;       retq
33;;   38: ud2
34;;
35;; wasm[0]::function[1]:
36;;       pushq   %rbp
37;;       movq    %rsp, %rbp
38;;       movq    8(%rdi), %r11
39;;       movq    0x18(%r11), %r11
40;;       addq    $0x20, %r11
41;;       cmpq    %rsp, %r11
42;;       ja      0xbd
43;;   5c: movq    %rdi, %r14
44;;       subq    $0x20, %rsp
45;;       movq    %rdi, 0x18(%rsp)
46;;       movq    %rsi, 0x10(%rsp)
47;;       movl    %edx, 0xc(%rsp)
48;;       movq    %rcx, (%rsp)
49;;       movq    (%rsp), %rax
50;;       movl    0xc(%rsp), %ecx
51;;       movq    %r14, %rdx
52;;       movq    0x38(%rdx), %rbx
53;;       cmpq    %rbx, %rcx
54;;       jae     0xbf
55;;   90: movq    %rcx, %r11
56;;       imulq   $8, %r11, %r11
57;;       movq    0x30(%rdx), %rdx
58;;       movq    %rdx, %rsi
59;;       addq    %r11, %rdx
60;;       cmpq    %rbx, %rcx
61;;       cmovaeq %rsi, %rdx
62;;       orq     $1, %rax
63;;       movq    %rax, (%rdx)
64;;       addq    $0x20, %rsp
65;;       popq    %rbp
66;;       retq
67;;   bd: ud2
68;;   bf: ud2
69;;
70;; wasm[0]::function[2]:
71;;       pushq   %rbp
72;;       movq    %rsp, %rbp
73;;       movq    8(%rdi), %r11
74;;       movq    0x18(%r11), %r11
75;;       addq    $0x30, %r11
76;;       cmpq    %rsp, %r11
77;;       ja      0x1f0
78;;   ec: movq    %rdi, %r14
79;;       subq    $0x20, %rsp
80;;       movq    %rdi, 0x18(%rsp)
81;;       movq    %rsi, 0x10(%rsp)
82;;       movl    %edx, 0xc(%rsp)
83;;       movl    %ecx, 8(%rsp)
84;;       movl    0xc(%rsp), %r11d
85;;       subq    $4, %rsp
86;;       movl    %r11d, (%rsp)
87;;       movl    0xc(%rsp), %r11d
88;;       subq    $4, %rsp
89;;       movl    %r11d, (%rsp)
90;;       movl    (%rsp), %ecx
91;;       addq    $4, %rsp
92;;       movq    %r14, %rdx
93;;       movq    0x38(%rdx), %rbx
94;;       cmpq    %rbx, %rcx
95;;       jae     0x1f2
96;;  142: movq    %rcx, %r11
97;;       imulq   $8, %r11, %r11
98;;       movq    0x30(%rdx), %rdx
99;;       movq    %rdx, %rsi
100;;       addq    %r11, %rdx
101;;       cmpq    %rbx, %rcx
102;;       cmovaeq %rsi, %rdx
103;;       movq    (%rdx), %rax
104;;       testq   %rax, %rax
105;;       jne     0x1a3
106;;  169: subq    $4, %rsp
107;;       movl    %ecx, (%rsp)
108;;       subq    $8, %rsp
109;;       movq    %r14, %rdi
110;;       movl    $0, %esi
111;;       movl    8(%rsp), %edx
112;;       callq   0x4b7
113;;       addq    $8, %rsp
114;;       addq    $4, %rsp
115;;       movq    0x1c(%rsp), %r14
116;;       jmp     0x1a9
117;;  1a3: andq    $0xfffffffffffffffe, %rax
118;;       movl    (%rsp), %ecx
119;;       addq    $4, %rsp
120;;       movq    %r14, %rdx
121;;       movq    0x38(%rdx), %rbx
122;;       cmpq    %rbx, %rcx
123;;       jae     0x1f4
124;;  1c3: movq    %rcx, %r11
125;;       imulq   $8, %r11, %r11
126;;       movq    0x30(%rdx), %rdx
127;;       movq    %rdx, %rsi
128;;       addq    %r11, %rdx
129;;       cmpq    %rbx, %rcx
130;;       cmovaeq %rsi, %rdx
131;;       orq     $1, %rax
132;;       movq    %rax, (%rdx)
133;;       addq    $0x20, %rsp
134;;       popq    %rbp
135;;       retq
136;;  1f0: ud2
137;;  1f2: ud2
138;;  1f4: ud2
139