Skip to content

Instantly share code, notes, and snippets.

@maxhaton
Created January 24, 2021 06:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maxhaton/7fc69be09e4d4fcd1fa5c3df6e371f49 to your computer and use it in GitHub Desktop.
Save maxhaton/7fc69be09e4d4fcd1fa5c3df6e371f49 to your computer and use it in GitHub Desktop.
pure nothrow @safe std.bigint.BigInt example.fib1!(std.bigint.BigInt).fib1(std.bigint.BigInt):
        push    rbp
        push    r15
        push    r14
        push    r13
        push    r12
        push    rbx
        sub     rsp, 168
        mov     rbx, rdi
        mov     rax, qword ptr [rip + std.bigint.BigInt.__init@GOTPCREL]
        mov     r12, qword ptr [rax + 16]
        mov     qword ptr [rdi + 16], r12
        movups  xmm0, xmmword ptr [rax]
        movaps  xmmword ptr [rsp + 128], xmm0
        movups  xmmword ptr [rdi], xmm0
        mov     r15, qword ptr [rip + TypeInfo_Ayk.__init@GOTPCREL]
        mov     esi, 1
        mov     rdi, r15
        call    _d_newarrayU@PLT
        mov     dword ptr [rdx], 0
        mov     qword ptr [rbx], 1
        mov     qword ptr [rbx + 8], rdx
        mov     rdi, rbx
        call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
        mov     rax, qword ptr [rip + immutable(uint[]) std.internal.math.biguintcore.ONE@GOTPCREL]
        mov     rbp, qword ptr [rax]
        mov     r14, qword ptr [rax + 8]
        mov     qword ptr [rbx], rbp
        mov     qword ptr [rbx + 8], r14
        mov     rdi, rbx
        call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
        mov     byte ptr [rbx + 16], 0
        movups  xmm0, xmmword ptr [rbx]
        movaps  xmmword ptr [rsp + 96], xmm0
        mov     qword ptr [rsp + 88], rbx
        mov     rax, qword ptr [rbx + 16]
        mov     qword ptr [rsp + 112], rax
        movaps  xmm0, xmmword ptr [rsp + 128]
        movaps  xmmword ptr [rsp], xmm0
        mov     qword ptr [rsp + 16], r12
        mov     esi, 1
        mov     rdi, r15
        call    _d_newarrayU@PLT
        mov     dword ptr [rdx], 0
        mov     qword ptr [rsp], 1
        mov     qword ptr [rsp + 8], rdx
        mov     rbx, rsp
        mov     rdi, rbx
        call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
        mov     qword ptr [rsp], rbp
        mov     qword ptr [rsp + 8], r14
        mov     rdi, rbx
        call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
        mov     byte ptr [rsp + 16], 0
        movaps  xmm0, xmmword ptr [rsp + 224]
        movaps  xmmword ptr [rsp + 64], xmm0
        mov     rax, qword ptr [rsp + 240]
        mov     qword ptr [rsp + 80], rax
        xor     eax, eax
        jmp     .LBB4_1
.LBB4_3:
        lea     rdi, [rsp + 64]
        call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
.LBB4_8:
        mov     r12, qword ptr [rsp + 96]
        mov     r13, qword ptr [rsp + 104]
        movzx   ecx, byte ptr [rsp + 112]
        mov     byte ptr [rsp + 128], cl
        mov     r14, qword ptr [rsp + 88]
        movups  xmm0, xmmword ptr [r14]
        movaps  xmmword ptr [rsp + 32], xmm0
        mov     rax, qword ptr [r14 + 16]
        mov     qword ptr [rsp + 48], rax
        mov     r8, qword ptr [rsp + 32]
        mov     r9, qword ptr [rsp + 40]
        xor     esi, esi
        cmp     al, cl
        setne   sil
        lea     rdi, [rsp + 48]
        mov     rdx, r12
        mov     rcx, r13
        call    pure nothrow @safe std.internal.math.biguintcore.BigUint std.internal.math.biguintcore.BigUint.addOrSub(std.internal.math.biguintcore.BigUint, std.internal.math.biguintcore.BigUint, bool, bool*)@PLT
        mov     rbp, rax
        mov     r15, rdx
        lea     rbx, [rsp + 32]
        mov     rdi, rbx
        call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
        mov     qword ptr [rsp + 32], rbp
        mov     qword ptr [rsp + 40], r15
        mov     rdi, rbx
        call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
        movaps  xmm0, xmmword ptr [rsp + 32]
        movaps  xmmword ptr [rsp + 144], xmm0
        movzx   ebx, byte ptr [rsp + 48]
        lea     rbp, [rsp + 96]
        mov     rdi, rbp
        call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
        movaps  xmm0, xmmword ptr [rsp + 144]
        movaps  xmmword ptr [rsp + 96], xmm0
        mov     rdi, rbp
        call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
        mov     byte ptr [rsp + 112], bl
        mov     rdi, r14
        call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
        mov     qword ptr [r14], r12
        mov     qword ptr [r14 + 8], r13
        mov     rdi, r14
        call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
        movzx   eax, byte ptr [rsp + 128]
        mov     byte ptr [r14 + 16], al
        mov     rcx, qword ptr [rsp]
        mov     r8, qword ptr [rsp + 8]
        movzx   esi, byte ptr [rsp + 16]
        mov     edx, 1
        lea     rdi, [rsp + 16]
        call    pure nothrow @safe std.internal.math.biguintcore.BigUint std.internal.math.biguintcore.BigUint.addOrSubInt!(ulong).addOrSubInt(const(std.internal.math.biguintcore.BigUint), ulong, bool, ref bool)@PLT
        mov     rbp, rax
        mov     rbx, rdx
        mov     r14, rsp
        mov     rdi, r14
        call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
        mov     qword ptr [rsp], rbp
        mov     qword ptr [rsp + 8], rbx
        mov     rdi, r14
        call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
        movzx   eax, byte ptr [rsp + 16]
.LBB4_1:
        cmp     al, byte ptr [rsp + 80]
        jne     .LBB4_8
        lea     rdi, [rsp + 64]
        call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
        mov     rdx, qword ptr [rsp]
        cmp     rdx, qword ptr [rsp + 64]
        jne     .LBB4_3
        test    rdx, rdx
        je      .LBB4_5
        mov     rdi, qword ptr [rsp + 8]
        mov     rsi, qword ptr [rsp + 72]
        shl     rdx, 2
        call    bcmp@PLT
        mov     ebp, eax
        lea     rdi, [rsp + 64]
        call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
        test    ebp, ebp
        jne     .LBB4_8
        jmp     .LBB4_6
.LBB4_5:
        lea     rdi, [rsp + 64]
        call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
.LBB4_6:
        mov     rax, qword ptr [rsp + 88]
        add     rsp, 168
        pop     rbx
        pop     r12
        pop     r13
        pop     r14
        pop     r15
        pop     rbp
        ret
        
pure nothrow @safe std.bigint.BigInt example.fib2!(std.bigint.BigInt).fib2(std.bigint.BigInt):
      push    rbp
      push    r15
      push    r14
      push    r13
      push    r12
      push    rbx
      sub     rsp, 280
      mov     qword ptr [rsp + 216], rdi
      mov     r14, qword ptr [rip + TypeInfo_Ayk.__init@GOTPCREL]
      mov     esi, 1
      mov     rdi, r14
      call    _d_newarrayU@PLT
      mov     dword ptr [rdx], 0
      mov     qword ptr [rsp + 152], 0
      mov     esi, 1
      mov     rdi, r14
      call    _d_newarrayU@PLT
      mov     dword ptr [rdx], 0
      mov     qword ptr [rsp + 136], 1
      mov     qword ptr [rsp + 144], rdx
      lea     rbp, [rsp + 136]
      mov     rdi, rbp
      call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
      mov     rax, qword ptr [rip + immutable(uint[]) std.internal.math.biguintcore.ONE@GOTPCREL]
      mov     rbx, qword ptr [rax]
      mov     r15, qword ptr [rax + 8]
      mov     qword ptr [rsp + 136], rbx
      mov     qword ptr [rsp + 144], r15
      mov     rdi, rbp
      call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
      mov     byte ptr [rsp + 152], 0
      mov     esi, 1
      mov     rdi, r14
      call    _d_newarrayU@PLT
      mov     dword ptr [rdx], 0
      mov     qword ptr [rsp + 128], 0
      mov     esi, 1
      mov     rdi, r14
      call    _d_newarrayU@PLT
      mov     dword ptr [rdx], 0
      mov     qword ptr [rsp + 112], 1
      mov     qword ptr [rsp + 120], rdx
      lea     rbp, [rsp + 112]
      mov     rdi, rbp
      call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
      mov     qword ptr [rsp + 112], rbx
      mov     qword ptr [rsp + 120], r15
      mov     rdi, rbp
      call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
      mov     byte ptr [rsp + 128], 0
      mov     rax, qword ptr [rsp + 152]
      mov     qword ptr [rsp + 48], rax
      movups  xmm0, xmmword ptr [rsp + 136]
      movaps  xmmword ptr [rsp + 32], xmm0
      movups  xmm0, xmmword ptr [rsp + 112]
      movaps  xmmword ptr [rsp + 224], xmm0
      mov     rax, qword ptr [rsp + 128]
      mov     qword ptr [rsp + 240], rax
      mov     esi, 1
      mov     rdi, r14
      call    _d_newarrayU@PLT
      mov     dword ptr [rdx], 0
      movaps  xmm0, xmmword ptr [rsp + 32]
      movaps  xmmword ptr [rsp + 160], xmm0
      mov     rax, qword ptr [rsp + 48]
      mov     qword ptr [rsp + 176], rax
      mov     rax, qword ptr [rsp + 240]
      mov     qword ptr [rsp + 200], rax
      movaps  xmm0, xmmword ptr [rsp + 224]
      movups  xmmword ptr [rsp + 184], xmm0
      mov     rax, qword ptr [rip + std.bigint.BigInt.__init@GOTPCREL]
      mov     rcx, qword ptr [rax + 16]
      mov     qword ptr [rsp + 16], rcx
      movups  xmm0, xmmword ptr [rax]
      movaps  xmmword ptr [rsp], xmm0
      mov     esi, 1
      mov     rdi, r14
      call    _d_newarrayU@PLT
      mov     dword ptr [rdx], 0
      mov     qword ptr [rsp], 1
      mov     qword ptr [rsp + 8], rdx
      mov     rbp, rsp
      mov     rdi, rbp
      call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
      mov     qword ptr [rsp], rbx
      mov     qword ptr [rsp + 8], r15
      mov     rdi, rbp
      call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
      mov     byte ptr [rsp + 16], 0
      movaps  xmm0, xmmword ptr [rsp + 336]
      movaps  xmmword ptr [rsp + 80], xmm0
      mov     rax, qword ptr [rsp + 352]
      mov     qword ptr [rsp + 96], rax
      xor     eax, eax
      jmp     .LBB7_1
.LBB7_3:
      lea     rdi, [rsp + 80]
      call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
.LBB7_8:
      mov     r14, qword ptr [rsp + 184]
      mov     r15, qword ptr [rsp + 192]
      mov     rbx, qword ptr [rsp + 200]
      movaps  xmm0, xmmword ptr [rsp + 160]
      movaps  xmmword ptr [rsp + 32], xmm0
      mov     rax, qword ptr [rsp + 176]
      mov     qword ptr [rsp + 48], rax
      mov     r8, qword ptr [rsp + 32]
      mov     r9, qword ptr [rsp + 40]
      xor     esi, esi
      cmp     al, bl
      setne   sil
      lea     rdi, [rsp + 48]
      mov     rdx, r14
      mov     rcx, r15
      call    pure nothrow @safe std.internal.math.biguintcore.BigUint std.internal.math.biguintcore.BigUint.addOrSub(std.internal.math.biguintcore.BigUint, std.internal.math.biguintcore.BigUint, bool, bool*)@PLT
      mov     rbp, rax
      mov     r12, rdx
      lea     r13, [rsp + 32]
      mov     rdi, r13
      call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
      mov     qword ptr [rsp + 32], rbp
      mov     qword ptr [rsp + 40], r12
      mov     rdi, r13
      call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
      mov     rax, qword ptr [rsp + 48]
      mov     qword ptr [rsp + 272], rax
      movaps  xmm0, xmmword ptr [rsp + 32]
      movaps  xmmword ptr [rsp + 256], xmm0
      mov     qword ptr [rsp + 32], r14
      mov     qword ptr [rsp + 40], r15
      mov     qword ptr [rsp + 48], rbx
      lea     rcx, [rsp + 48]
      mov     qword ptr [rcx + 24], rax
      movups  xmmword ptr [rcx + 8], xmm0
      mov     rax, qword ptr [rsp + 32]
      mov     rcx, qword ptr [rsp + 40]
      mov     rdx, qword ptr [rsp + 48]
      mov     rsi, qword ptr [rsp + 56]
      movups  xmm0, xmmword ptr [rsp + 64]
      mov     qword ptr [rsp + 160], rax
      mov     qword ptr [rsp + 168], rcx
      mov     qword ptr [rsp + 176], rdx
      mov     qword ptr [rsp + 184], rsi
      movaps  xmmword ptr [rsp + 192], xmm0
      mov     rcx, qword ptr [rsp]
      mov     r8, qword ptr [rsp + 8]
      movzx   esi, byte ptr [rsp + 16]
      mov     edx, 1
      lea     rdi, [rsp + 16]
      call    pure nothrow @safe std.internal.math.biguintcore.BigUint std.internal.math.biguintcore.BigUint.addOrSubInt!(ulong).addOrSubInt(const(std.internal.math.biguintcore.BigUint), ulong, bool, ref bool)@PLT
      mov     rbp, rax
      mov     rbx, rdx
      mov     r14, rsp
      mov     rdi, r14
      call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
      mov     qword ptr [rsp], rbp
      mov     qword ptr [rsp + 8], rbx
      mov     rdi, r14
      call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
      movzx   eax, byte ptr [rsp + 16]
.LBB7_1:
      cmp     al, byte ptr [rsp + 96]
      jne     .LBB7_8
      lea     rdi, [rsp + 80]
      call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
      mov     rdx, qword ptr [rsp]
      cmp     rdx, qword ptr [rsp + 80]
      jne     .LBB7_3
      test    rdx, rdx
      je      .LBB7_5
      mov     rdi, qword ptr [rsp + 8]
      mov     rsi, qword ptr [rsp + 88]
      shl     rdx, 2
      call    bcmp@PLT
      mov     ebp, eax
      lea     rdi, [rsp + 80]
      call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
      test    ebp, ebp
      jne     .LBB7_8
      jmp     .LBB7_6
.LBB7_5:
      lea     rdi, [rsp + 80]
      call    const pure void std.internal.math.biguintcore.BigUint.__invariant()@PLT
.LBB7_6:
      mov     rcx, qword ptr [rsp + 176]
      mov     rax, qword ptr [rsp + 216]
      mov     qword ptr [rax + 16], rcx
      movaps  xmm0, xmmword ptr [rsp + 160]
      movups  xmmword ptr [rax], xmm0
      add     rsp, 280
      pop     rbx
      pop     r12
      pop     r13
      pop     r14
      pop     r15
      pop     rbp
      ret
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment