Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bytecodealliance
GitHub Repository: bytecodealliance/wasmtime
Path: blob/main/tests/disas/exceptions.wat
1690 views
;;! target = "x86_64"
;;! test = "compile"
;;! flags = ["-Wexceptions=yes", "-Wgc=yes"]

(module
 (tag $e0 (param i32 i64))

 (func $throw (param i32 i64)
       (throw $e0 (local.get 0) (local.get 1)))

 (func $catch (export "catch") (param i32 i64) (result i32 i64)

       (block $b (result i32 i64)
              (try_table (result i32 i64)
                         (catch $e0 $b)
                         (call $throw (local.get 0) (local.get 1))
                         (i32.const 42)
                         (i64.const 100)))))
;; wasm[0]::function[0]::throw:
;;       pushq   %rbp
;;       movq    %rsp, %rbp
;;       movq    8(%rdi), %r10
;;       movq    0x10(%r10), %r10
;;       addq    $0x50, %r10
;;       cmpq    %rsp, %r10
;;       ja      0xa2
;;   19: subq    $0x40, %rsp
;;       movq    %rbx, 0x10(%rsp)
;;       movq    %r12, 0x18(%rsp)
;;       movq    %r13, 0x20(%rsp)
;;       movq    %r14, 0x28(%rsp)
;;       movq    %r15, 0x30(%rsp)
;;       movq    %rdi, %r12
;;       movq    %rcx, %r13
;;       movq    %rdx, %r15
;;       callq   0x360
;;       movq    %rax, %r14
;;       movl    $0x4000000, %esi
;;       movl    $3, %edx
;;       movl    $0x30, %ecx
;;       movl    $8, %r8d
;;       movq    %r12, %rdi
;;       callq   0x2fd
;;       movq    8(%r12), %r8
;;       movq    0x18(%r8), %r8
;;       movl    %eax, %r9d
;;       movq    %r15, %rdx
;;       movl    %edx, 0x20(%r8, %r9)
;;       movq    %r13, %rcx
;;       movq    %rcx, 0x28(%r8, %r9)
;;       movq    %r14, %r10
;;       movl    %r10d, 0x18(%r8, %r9)
;;       movl    $0, 0x1c(%r8, %r9)
;;       movq    %rax, %rsi
;;       movq    %r12, %rdi
;;       movq    %r12, (%rsp)
;;       callq   0x38c
;;       ud2
;;       ud2
;;
;; wasm[0]::function[1]::catch:
;;       pushq   %rbp
;;       movq    %rsp, %rbp
;;       movq    8(%rdi), %r10
;;       movq    0x10(%r10), %r10
;;       addq    $0x50, %r10
;;       cmpq    %rsp, %r10
;;       ja      0x14f
;;   d9: subq    $0x40, %rsp
;;       movq    %rbx, 0x10(%rsp)
;;       movq    %r12, 0x18(%rsp)
;;       movq    %r13, 0x20(%rsp)
;;       movq    %r14, 0x28(%rsp)
;;       movq    %r15, 0x30(%rsp)
;;       movq    %rdi, (%rsp)
;;       movq    (%rsp), %rsi
;;       movq    (%rsp), %rdi
;;       callq   0
;;       ├─╼ exception frame offset: SP = FP - 0x40
;;       ╰─╼ exception handler: tag=0, context at [SP+0x0], handler=0x116
;;       movl    $0x2a, %eax
;;       movl    $0x64, %ecx
;;       jmp     0x12d
;;  116: movq    (%rsp), %rdi
;;       movq    8(%rdi), %rcx
;;       movq    0x18(%rcx), %rcx
;;       movl    %eax, %edx
;;       movl    0x20(%rcx, %rdx), %eax
;;       movq    0x28(%rcx, %rdx), %rcx
;;       movq    0x10(%rsp), %rbx
;;       movq    0x18(%rsp), %r12
;;       movq    0x20(%rsp), %r13
;;       movq    0x28(%rsp), %r14
;;       movq    0x30(%rsp), %r15
;;       addq    $0x40, %rsp
;;       movq    %rbp, %rsp
;;       popq    %rbp
;;       retq
;;  14f: ud2