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