風邪をひいて、昨日はダウンしてしまいました。

今日も体調悪く働いています。

まず前半は、プログラムの話。

ここ最近、勉強しはじめたAVXの話。

■AVX2の特徴

■実際にやってみた
サンプルコードを作ってみました。

#include <stdio.h>
#include <immintrin.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>

#define MAX (10000000) /* 1000万 */

int main(int argc, char **argv)
{
        /* ベクトルの要素数を指定 */
        const int32_t n = 8;
        int32_t i;
        __m256i a;
        __m256i b;
        __m256i result;

        for (i=0; i < MAX; i++) {
                /* ベクトルAとベクトルBを初期化 */
                a = _mm256_set_epi32(1, 2, 3, 4, 5, 6, 7, 8);
                b = _mm256_set_epi32(8, 7, 6, 5, 4, 3, 2, 1);

                /* ベクトルAとベクトルBを加算 */
                result = _mm256_add_epi32(a, b);
        }

        /* 結果を表示 */
        int* res = (int*)&result;
        printf("ベクトルA + ベクトルB = [%d, %d, %d, %d, %d, %d, %d, %d]\n", res[7], res[6], res[5], res[4], res[3], res[2], res[1], res[0]);

        exit(0);
}

サンプルコードは、AVXのさわりということでベクトル計算の加算で確認
使ってのは、以下の関数
_mm256_set_epi32
_mm256_add_epi32

32bitの整数値の加算のコードを作成
実行結果自体は、単純なもの

raichi@lena:~/works/R-MIX/TP/tp113 % time ./a.out
ベクトルA + ベクトルB = [9, 9, 9, 9, 9, 9, 9, 9]
0.000u 0.008s 0:00.00 0.0%      0+0k 0+0io 0pf+0w

まぁ、1,000万回しても軽く動きます。
そして、実際にCからアセンブラにして実際に使用されている命令がどうなっているか確認

        .file   "a.c"
        .text
        .section        .rodata
        .align 8
.LC0:
        .string "\343\203\231\343\202\257\343\203\210\343\203\253A + \343\203\231\343\202\257\343\203\210\343\203\253B = [%d, %d, %d, %d, %d, %d, %d, %d]\n"
        .text
        .globl  main
        .type   main, @function
main:
.LFB4201:
        .cfi_startproc
        leaq    8(%rsp), %r10
        .cfi_def_cfa 10, 0
        andq    $-32, %rsp
        pushq   -8(%r10)
        pushq   %rbp
        movq    %rsp, %rbp
        .cfi_escape 0x10,0x6,0x2,0x76,0
        pushq   %r10
        .cfi_escape 0xf,0x3,0x76,0x78,0x6
        subq    $296, %rsp
        movl    %edi, -276(%rbp)
        movq    %rsi, -288(%rbp)
        movl    $8, -24(%rbp)
        movl    $0, -20(%rbp)
        jmp     .L2
.L6:
        movl    $1, -212(%rbp)
        movl    $2, -216(%rbp)
        movl    $3, -220(%rbp)
        movl    $4, -224(%rbp)
        movl    $5, -228(%rbp)
        movl    $6, -232(%rbp)
        movl    $7, -236(%rbp)
        movl    $8, -240(%rbp)
        movl    -212(%rbp), %eax
        movl    -216(%rbp), %edx
        vmovd   %edx, %xmm3
        vpinsrd $1, %eax, %xmm3, %xmm1
        movl    -220(%rbp), %eax
        movl    -224(%rbp), %edx
        vmovd   %edx, %xmm4
        vpinsrd $1, %eax, %xmm4, %xmm0
        vpunpcklqdq     %xmm1, %xmm0, %xmm1
        movl    -228(%rbp), %eax
        movl    -232(%rbp), %edx
        vmovd   %edx, %xmm5
        vpinsrd $1, %eax, %xmm5, %xmm2
        movl    -236(%rbp), %eax
        movl    -240(%rbp), %edx
        vmovd   %edx, %xmm6
        vpinsrd $1, %eax, %xmm6, %xmm0
        vpunpcklqdq     %xmm2, %xmm0, %xmm0
        vinserti128     $0x1, %xmm1, %ymm0, %ymm0
        vmovdqa %ymm0, -80(%rbp)
        movl    $8, -180(%rbp)
        movl    $7, -184(%rbp)
        movl    $6, -188(%rbp)
        movl    $5, -192(%rbp)
        movl    $4, -196(%rbp)
        movl    $3, -200(%rbp)
        movl    $2, -204(%rbp)
        movl    $1, -208(%rbp)
        movl    -180(%rbp), %eax
        movl    -184(%rbp), %edx
        vmovd   %edx, %xmm7
        vpinsrd $1, %eax, %xmm7, %xmm1
        movl    -188(%rbp), %eax
        movl    -192(%rbp), %edx
        vmovd   %edx, %xmm3
        vpinsrd $1, %eax, %xmm3, %xmm0
        vpunpcklqdq     %xmm1, %xmm0, %xmm1
        movl    -196(%rbp), %eax
        movl    -200(%rbp), %edx
        vmovd   %edx, %xmm4
        vpinsrd $1, %eax, %xmm4, %xmm2
        movl    -204(%rbp), %eax
        movl    -208(%rbp), %edx
        vmovd   %edx, %xmm5
        vpinsrd $1, %eax, %xmm5, %xmm0
        vpunpcklqdq     %xmm2, %xmm0, %xmm0
        vinserti128     $0x1, %xmm1, %ymm0, %ymm0
        vmovdqa %ymm0, -112(%rbp)
        vmovdqa -80(%rbp), %ymm0
        vmovdqa %ymm0, -144(%rbp)
        vmovdqa -112(%rbp), %ymm0
        vmovdqa %ymm0, -176(%rbp)
        vmovdqa -144(%rbp), %ymm1
        vmovdqa -176(%rbp), %ymm0
        vpaddd  %ymm0, %ymm1, %ymm0
        nop
        vmovdqa %ymm0, -272(%rbp)
        addl    $1, -20(%rbp)
.L2:
        cmpl    $9999999, -20(%rbp)
        jle     .L6
        leaq    -272(%rbp), %rax
        movq    %rax, -32(%rbp)
        movq    -32(%rbp), %rax
        movl    (%rax), %r8d
        movq    -32(%rbp), %rax
        addq    $4, %rax
        movl    (%rax), %edi
        movq    -32(%rbp), %rax
        addq    $8, %rax
        movl    (%rax), %esi
        movq    -32(%rbp), %rax
        addq    $12, %rax
        movl    (%rax), %r9d
        movq    -32(%rbp), %rax
        addq    $16, %rax
        movl    (%rax), %r10d
        movq    -32(%rbp), %rax
        addq    $20, %rax
        movl    (%rax), %ecx
        movq    -32(%rbp), %rax
        addq    $24, %rax
        movl    (%rax), %edx
        movq    -32(%rbp), %rax
        addq    $28, %rax
        movl    (%rax), %eax
        subq    $8, %rsp
        pushq   %r8
        pushq   %rdi
        pushq   %rsi
        movl    %r10d, %r8d
        movl    %eax, %esi
        movl    $.LC0, %edi
        movl    $0, %eax
        call    printf
        addq    $32, %rsp
        movl    $0, %edi
        call    exit
        .cfi_endproc
.LFE4201:
        .size   main, .-main
        .ident  "GCC: (FreeBSD Ports Collection) 11.3.0"
        .section        .note.GNU-stack,"",@progbits

vmovd
vpinsrd
vpunpcklqdq
vinserti128

32bitの整数していでしたが、64bitのfloatを使用している?
ちなみに、gcc11を使用してコンパイルをかけています。
さて、この結果を、師匠の師匠(みたいな人)にこの結果の話をしたところ、「a.outも確認してみたら?」っとのことでったので、
a.outを逆アセンブラしてみました。


./a.out:     ファイル形式 elf64-x86-64-freebsd


セクション .init の逆アセンブル:

00000000004004a8 <_init>:
  4004a8:       48 83 ec 08             sub    $0x8,%rsp
  4004ac:       e8 df 03 00 00          call   400890 <frame_dummy>
  4004b1:       e8 3a 04 00 00          call   4008f0 <__do_global_ctors_aux>
  4004b6:       48 83 c4 08             add    $0x8,%rsp
  4004ba:       c3                      ret

セクション .plt の逆アセンブル:

00000000004004c0 <atexit@plt-0x10>:
  4004c0:       ff 35 12 17 00 00       push   0x1712(%rip)        # 401bd8 <_GLOBAL_OFFSET_TABLE_+0x8>
  4004c6:       ff 25 14 17 00 00       jmp    *0x1714(%rip)        # 401be0 <_GLOBAL_OFFSET_TABLE_+0x10>
  4004cc:       0f 1f 40 00             nopl   0x0(%rax)

00000000004004d0 <atexit@plt>:
  4004d0:       ff 25 12 17 00 00       jmp    *0x1712(%rip)        # 401be8 <atexit@FBSD_1.0>
  4004d6:       68 00 00 00 00          push   $0x0
  4004db:       e9 e0 ff ff ff          jmp    4004c0 <_init+0x18>

00000000004004e0 <printf@plt>:
  4004e0:       ff 25 0a 17 00 00       jmp    *0x170a(%rip)        # 401bf0 <printf@FBSD_1.0>
  4004e6:       68 01 00 00 00          push   $0x1
  4004eb:       e9 d0 ff ff ff          jmp    4004c0 <_init+0x18>

00000000004004f0 <exit@plt>:
  4004f0:       ff 25 02 17 00 00       jmp    *0x1702(%rip)        # 401bf8 <exit@FBSD_1.0>
  4004f6:       68 02 00 00 00          push   $0x2
  4004fb:       e9 c0 ff ff ff          jmp    4004c0 <_init+0x18>

0000000000400500 <_init_tls@plt>:
  400500:       ff 25 fa 16 00 00       jmp    *0x16fa(%rip)        # 401c00 <_init_tls@FBSD_1.0>
  400506:       68 03 00 00 00          push   $0x3
  40050b:       e9 b0 ff ff ff          jmp    4004c0 <_init+0x18>

セクション .text の逆アセンブル:

0000000000400510 <_start>:
  400510:       55                      push   %rbp
  400511:       48 89 e5                mov    %rsp,%rbp
  400514:       41 57                   push   %r15
  400516:       41 56                   push   %r14
  400518:       41 55                   push   %r13
  40051a:       41 54                   push   %r12
  40051c:       53                      push   %rbx
  40051d:       50                      push   %rax
  40051e:       49 89 fe                mov    %rdi,%r14
  400521:       4c 8b 3f                mov    (%rdi),%r15
  400524:       49 63 c7                movslq %r15d,%rax
  400527:       48 8d 1c c7             lea    (%rdi,%rax,8),%rbx
  40052b:       48 83 c3 10             add    $0x10,%rbx
  40052f:       48 83 3d e1 16 00 00    cmpq   $0x0,0x16e1(%rip)        # 401c18 <environ>
  400536:       00
  400537:       75 07                   jne    400540 <_start+0x30>
  400539:       48 89 1d d8 16 00 00    mov    %rbx,0x16d8(%rip)        # 401c18 <environ>
  400540:       49 83 c6 08             add    $0x8,%r14
  400544:       45 85 ff                test   %r15d,%r15d
  400547:       7e 2f                   jle    400578 <_start+0x68>
  400549:       49 8b 06                mov    (%r14),%rax
  40054c:       48 85 c0                test   %rax,%rax
  40054f:       74 27                   je     400578 <_start+0x68>
  400551:       66 2e 0f 1f 84 00 00    cs nopw 0x0(%rax,%rax,1)
  400558:       00 00 00
  40055b:       0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)
  400560:       48 89 05 a1 16 00 00    mov    %rax,0x16a1(%rip)        # 401c08 <__progname>
  400567:       48 83 c0 01             add    $0x1,%rax
  40056b:       0f b6 48 ff             movzbl -0x1(%rax),%ecx
  40056f:       80 f9 2f                cmp    $0x2f,%cl
  400572:       74 ec                   je     400560 <_start+0x50>
  400574:       84 c9                   test   %cl,%cl
  400576:       75 ef                   jne    400567 <_start+0x57>
  400578:       b8 30 1a 40 00          mov    $0x401a30,%eax
  40057d:       48 85 c0                test   %rax,%rax
  400580:       74 0a                   je     40058c <_start+0x7c>
  400582:       48 89 f7                mov    %rsi,%rdi
  400585:       e8 46 ff ff ff          call   4004d0 <atexit@plt>
  40058a:       eb 68                   jmp    4005f4 <_start+0xe4>
  40058c:       48 89 5d d0             mov    %rbx,-0x30(%rbp)
  400590:       41 bd a8 04 40 00       mov    $0x4004a8,%r13d
  400596:       eb 0c                   jmp    4005a4 <_start+0x94>
  400598:       0f 1f 84 00 00 00 00    nopl   0x0(%rax,%rax,1)
  40059f:       00
  4005a0:       49 83 c5 18             add    $0x18,%r13
  4005a4:       49 81 fd a8 04 40 00    cmp    $0x4004a8,%r13
  4005ab:       73 3e                   jae    4005eb <_start+0xdb>
  4005ad:       b8 01 00 00 00          mov    $0x1,%eax
  4005b2:       0f a2                   cpuid
  4005b4:       89 d7                   mov    %edx,%edi
  4005b6:       89 ce                   mov    %ecx,%esi
  4005b8:       31 c0                   xor    %eax,%eax
  4005ba:       0f a2                   cpuid
  4005bc:       bb 00 00 00 00          mov    $0x0,%ebx
  4005c1:       b9 00 00 00 00          mov    $0x0,%ecx
  4005c6:       83 f8 07                cmp    $0x7,%eax
  4005c9:       72 09                   jb     4005d4 <_start+0xc4>
  4005cb:       31 c9                   xor    %ecx,%ecx
  4005cd:       b8 07 00 00 00          mov    $0x7,%eax
  4005d2:       0f a2                   cpuid
  4005d4:       41 83 7d 08 25          cmpl   $0x25,0x8(%r13)
  4005d9:       75 c5                   jne    4005a0 <_start+0x90>
  4005db:       4d 8b 65 00             mov    0x0(%r13),%r12
  4005df:       89 da                   mov    %ebx,%edx
  4005e1:       41 ff 55 10             call   *0x10(%r13)
  4005e5:       49 89 04 24             mov    %rax,(%r12)
  4005e9:       eb b5                   jmp    4005a0 <_start+0x90>
  4005eb:       e8 10 ff ff ff          call   400500 <_init_tls@plt>
  4005f0:       48 8b 5d d0             mov    -0x30(%rbp),%rbx
  4005f4:       44 89 ff                mov    %r15d,%edi
  4005f7:       4c 89 f6                mov    %r14,%rsi
  4005fa:       48 89 da                mov    %rbx,%rdx
  4005fd:       e8 1e 00 00 00          call   400620 <handle_static_init>
  400602:       44 89 ff                mov    %r15d,%edi
  400605:       4c 89 f6                mov    %r14,%rsi
  400608:       48 89 da                mov    %rbx,%rdx
  40060b:       e8 85 02 00 00          call   400895 <main>
  400610:       89 c7                   mov    %eax,%edi
  400612:       e8 d9 fe ff ff          call   4004f0 <exit@plt>
  400617:       66 0f 1f 84 00 00 00    nopw   0x0(%rax,%rax,1)
  40061e:       00 00

0000000000400620 <handle_static_init>:
  400620:       55                      push   %rbp
  400621:       48 89 e5                mov    %rsp,%rbp
  400624:       41 57                   push   %r15
  400626:       41 56                   push   %r14
  400628:       41 55                   push   %r13
  40062a:       41 54                   push   %r12
  40062c:       53                      push   %rbx
  40062d:       50                      push   %rax
  40062e:       b8 30 1a 40 00          mov    $0x401a30,%eax
  400633:       48 85 c0                test   %rax,%rax
  400636:       0f 85 e8 00 00 00       jne    400724 <handle_static_init+0x104>
  40063c:       49 89 d6                mov    %rdx,%r14
  40063f:       49 89 f7                mov    %rsi,%r15
  400642:       41 89 fc                mov    %edi,%r12d
  400645:       bf 40 07 40 00          mov    $0x400740,%edi
  40064a:       e8 81 fe ff ff          call   4004d0 <atexit@plt>
  40064f:       b8 10 1a 40 00          mov    $0x401a10,%eax
  400654:       b9 10 1a 40 00          mov    $0x401a10,%ecx
  400659:       48 29 c1                sub    %rax,%rcx
  40065c:       48 8d 41 07             lea    0x7(%rcx),%rax
  400660:       48 85 c9                test   %rcx,%rcx
  400663:       48 89 ca                mov    %rcx,%rdx
  400666:       48 0f 48 d0             cmovs  %rax,%rdx
  40066a:       48 c1 fa 03             sar    $0x3,%rdx
  40066e:       74 44                   je     4006b4 <handle_static_init+0x94>
  400670:       48 85 c9                test   %rcx,%rcx
  400673:       48 0f 49 c1             cmovns %rcx,%rax
  400677:       48 c1 f8 03             sar    $0x3,%rax
  40067b:       48 83 f8 02             cmp    $0x2,%rax
  40067f:       41 bd 01 00 00 00       mov    $0x1,%r13d
  400685:       4c 0f 43 e8             cmovae %rax,%r13
  400689:       31 db                   xor    %ebx,%ebx
  40068b:       eb 0c                   jmp    400699 <handle_static_init+0x79>
  40068d:       0f 1f 00                nopl   (%rax)
  400690:       48 83 c3 01             add    $0x1,%rbx
  400694:       49 39 dd                cmp    %rbx,%r13
  400697:       74 1b                   je     4006b4 <handle_static_init+0x94>
  400699:       48 8b 04 dd 10 1a 40    mov    0x401a10(,%rbx,8),%rax
  4006a0:       00
  4006a1:       48 83 f8 02             cmp    $0x2,%rax
  4006a5:       72 e9                   jb     400690 <handle_static_init+0x70>
  4006a7:       44 89 e7                mov    %r12d,%edi
  4006aa:       4c 89 fe                mov    %r15,%rsi
  4006ad:       4c 89 f2                mov    %r14,%rdx
  4006b0:       ff d0                   call   *%rax
  4006b2:       eb dc                   jmp    400690 <handle_static_init+0x70>
  4006b4:       e8 ef fd ff ff          call   4004a8 <_init>
  4006b9:       b8 10 1a 40 00          mov    $0x401a10,%eax
  4006be:       b9 10 1a 40 00          mov    $0x401a10,%ecx
  4006c3:       48 29 c1                sub    %rax,%rcx
  4006c6:       48 8d 41 07             lea    0x7(%rcx),%rax
  4006ca:       48 85 c9                test   %rcx,%rcx
  4006cd:       48 89 ca                mov    %rcx,%rdx
  4006d0:       48 0f 48 d0             cmovs  %rax,%rdx
  4006d4:       48 c1 fa 03             sar    $0x3,%rdx
  4006d8:       74 4a                   je     400724 <handle_static_init+0x104>
  4006da:       48 85 c9                test   %rcx,%rcx
  4006dd:       48 0f 49 c1             cmovns %rcx,%rax
  4006e1:       48 c1 f8 03             sar    $0x3,%rax
  4006e5:       48 83 f8 02             cmp    $0x2,%rax
  4006e9:       41 bd 01 00 00 00       mov    $0x1,%r13d
  4006ef:       4c 0f 43 e8             cmovae %rax,%r13
  4006f3:       31 db                   xor    %ebx,%ebx
  4006f5:       eb 12                   jmp    400709 <handle_static_init+0xe9>
  4006f7:       66 0f 1f 84 00 00 00    nopw   0x0(%rax,%rax,1)
  4006fe:       00 00
  400700:       48 83 c3 01             add    $0x1,%rbx
  400704:       49 39 dd                cmp    %rbx,%r13
  400707:       74 1b                   je     400724 <handle_static_init+0x104>
  400709:       48 8b 04 dd 10 1a 40    mov    0x401a10(,%rbx,8),%rax
  400710:       00
  400711:       48 83 f8 02             cmp    $0x2,%rax
  400715:       72 e9                   jb     400700 <handle_static_init+0xe0>
  400717:       44 89 e7                mov    %r12d,%edi
  40071a:       4c 89 fe                mov    %r15,%rsi
  40071d:       4c 89 f2                mov    %r14,%rdx
  400720:       ff d0                   call   *%rax
  400722:       eb dc                   jmp    400700 <handle_static_init+0xe0>
  400724:       48 83 c4 08             add    $0x8,%rsp
  400728:       5b                      pop    %rbx
  400729:       41 5c                   pop    %r12
  40072b:       41 5d                   pop    %r13
  40072d:       41 5e                   pop    %r14
  40072f:       41 5f                   pop    %r15
  400731:       5d                      pop    %rbp
  400732:       c3                      ret
  400733:       66 2e 0f 1f 84 00 00    cs nopw 0x0(%rax,%rax,1)
  40073a:       00 00 00
  40073d:       0f 1f 00                nopl   (%rax)

0000000000400740 <finalizer>:
  400740:       55                      push   %rbp
  400741:       48 89 e5                mov    %rsp,%rbp
  400744:       53                      push   %rbx
  400745:       50                      push   %rax
  400746:       b9 10 1a 40 00          mov    $0x401a10,%ecx
  40074b:       b8 10 1a 40 00          mov    $0x401a10,%eax
  400750:       48 29 c8                sub    %rcx,%rax
  400753:       48 8d 58 07             lea    0x7(%rax),%rbx
  400757:       48 85 c0                test   %rax,%rax
  40075a:       48 89 c1                mov    %rax,%rcx
  40075d:       48 0f 48 cb             cmovs  %rbx,%rcx
  400761:       48 c1 f9 03             sar    $0x3,%rcx
  400765:       75 0b                   jne    400772 <finalizer+0x32>
  400767:       48 83 c4 08             add    $0x8,%rsp
  40076b:       5b                      pop    %rbx
  40076c:       5d                      pop    %rbp
  40076d:       e9 c2 01 00 00          jmp    400934 <_fini>
  400772:       48 85 c0                test   %rax,%rax
  400775:       48 0f 49 d8             cmovns %rax,%rbx
  400779:       48 c1 fb 03             sar    $0x3,%rbx
  40077d:       eb 06                   jmp    400785 <finalizer+0x45>
  40077f:       90                      nop
  400780:       48 85 db                test   %rbx,%rbx
  400783:       74 e2                   je     400767 <finalizer+0x27>
  400785:       48 8b 04 dd 08 1a 40    mov    0x401a08(,%rbx,8),%rax
  40078c:       00
  40078d:       48 83 c3 ff             add    $0xffffffffffffffff,%rbx
  400791:       48 83 f8 02             cmp    $0x2,%rax
  400795:       72 e9                   jb     400780 <finalizer+0x40>
  400797:       ff d0                   call   *%rax
  400799:       eb e5                   jmp    400780 <finalizer+0x40>
  40079b:       cc                      int3
  40079c:       0f 1f 40 00             nopl   0x0(%rax)

00000000004007a0 <deregister_tm_clones>:
  4007a0:       48 8d 3d 71 14 00 00    lea    0x1471(%rip),%rdi        # 401c18 <environ>
  4007a7:       48 8d 05 6a 14 00 00    lea    0x146a(%rip),%rax        # 401c18 <environ>
  4007ae:       48 39 f8                cmp    %rdi,%rax
  4007b1:       74 15                   je     4007c8 <deregister_tm_clones+0x28>
  4007b3:       48 8b 05 06 14 00 00    mov    0x1406(%rip),%rax        # 401bc0 <_ITM_deregisterTMCloneTable@Base>
  4007ba:       48 85 c0                test   %rax,%rax
  4007bd:       74 09                   je     4007c8 <deregister_tm_clones+0x28>
  4007bf:       ff e0                   jmp    *%rax
  4007c1:       0f 1f 80 00 00 00 00    nopl   0x0(%rax)
  4007c8:       c3                      ret
  4007c9:       0f 1f 80 00 00 00 00    nopl   0x0(%rax)

00000000004007d0 <register_tm_clones>:
  4007d0:       48 8d 3d 41 14 00 00    lea    0x1441(%rip),%rdi        # 401c18 <environ>
  4007d7:       48 8d 35 3a 14 00 00    lea    0x143a(%rip),%rsi        # 401c18 <environ>
  4007de:       48 29 fe                sub    %rdi,%rsi
  4007e1:       48 89 f0                mov    %rsi,%rax
  4007e4:       48 c1 ee 3f             shr    $0x3f,%rsi
  4007e8:       48 c1 f8 03             sar    $0x3,%rax
  4007ec:       48 01 c6                add    %rax,%rsi
  4007ef:       48 d1 fe                sar    %rsi
  4007f2:       74 14                   je     400808 <register_tm_clones+0x38>
  4007f4:       48 8b 05 cd 13 00 00    mov    0x13cd(%rip),%rax        # 401bc8 <_ITM_registerTMCloneTable@Base>
  4007fb:       48 85 c0                test   %rax,%rax
  4007fe:       74 08                   je     400808 <register_tm_clones+0x38>
  400800:       ff e0                   jmp    *%rax
  400802:       66 0f 1f 44 00 00       nopw   0x0(%rax,%rax,1)
  400808:       c3                      ret
  400809:       0f 1f 80 00 00 00 00    nopl   0x0(%rax)

0000000000400810 <__do_global_dtors_aux>:
  400810:       80 3d 09 14 00 00 00    cmpb   $0x0,0x1409(%rip)        # 401c20 <completed.1>
  400817:       75 67                   jne    400880 <__do_global_dtors_aux+0x70>
  400819:       55                      push   %rbp
  40081a:       48 8d 05 ff 11 00 00    lea    0x11ff(%rip),%rax        # 401a20 <__DTOR_LIST__>
  400821:       48 89 e5                mov    %rsp,%rbp
  400824:       41 54                   push   %r12
  400826:       49 89 c4                mov    %rax,%r12
  400829:       53                      push   %rbx
  40082a:       48 8d 1d f7 11 00 00    lea    0x11f7(%rip),%rbx        # 401a28 <__DTOR_END__>
  400831:       48 29 c3                sub    %rax,%rbx
  400834:       48 8b 05 ed 13 00 00    mov    0x13ed(%rip),%rax        # 401c28 <dtor_idx.0>
  40083b:       48 c1 fb 03             sar    $0x3,%rbx
  40083f:       48 83 eb 01             sub    $0x1,%rbx
  400843:       48 39 d8                cmp    %rbx,%rax
  400846:       73 23                   jae    40086b <__do_global_dtors_aux+0x5b>
  400848:       0f 1f 84 00 00 00 00    nopl   0x0(%rax,%rax,1)
  40084f:       00
  400850:       48 83 c0 01             add    $0x1,%rax
  400854:       48 89 05 cd 13 00 00    mov    %rax,0x13cd(%rip)        # 401c28 <dtor_idx.0>
  40085b:       41 ff 14 c4             call   *(%r12,%rax,8)
  40085f:       48 8b 05 c2 13 00 00    mov    0x13c2(%rip),%rax        # 401c28 <dtor_idx.0>
  400866:       48 39 d8                cmp    %rbx,%rax
  400869:       72 e5                   jb     400850 <__do_global_dtors_aux+0x40>
  40086b:       e8 30 ff ff ff          call   4007a0 <deregister_tm_clones>
  400870:       5b                      pop    %rbx
  400871:       41 5c                   pop    %r12
  400873:       c6 05 a6 13 00 00 01    movb   $0x1,0x13a6(%rip)        # 401c20 <completed.1>
  40087a:       5d                      pop    %rbp
  40087b:       c3                      ret
  40087c:       0f 1f 40 00             nopl   0x0(%rax)
  400880:       c3                      ret
  400881:       66 66 2e 0f 1f 84 00    data16 cs nopw 0x0(%rax,%rax,1)
  400888:       00 00 00 00
  40088c:       0f 1f 40 00             nopl   0x0(%rax)

0000000000400890 <frame_dummy>:
  400890:       e9 3b ff ff ff          jmp    4007d0 <register_tm_clones>

0000000000400895 <main>:
  400895:       55                      push   %rbp
  400896:       48 89 e5                mov    %rsp,%rbp
  400899:       b8 80 96 98 00          mov    $0x989680,%eax
  40089e:       83 e8 01                sub    $0x1,%eax
  4008a1:       75 fb                   jne    40089e <main+0x9>
  4008a3:       48 83 ec 08             sub    $0x8,%rsp
  4008a7:       6a 09                   push   $0x9
  4008a9:       6a 09                   push   $0x9
  4008ab:       6a 09                   push   $0x9
  4008ad:       41 b9 09 00 00 00       mov    $0x9,%r9d
  4008b3:       41 b8 09 00 00 00       mov    $0x9,%r8d
  4008b9:       b9 09 00 00 00          mov    $0x9,%ecx
  4008be:       ba 09 00 00 00          mov    $0x9,%edx
  4008c3:       be 09 00 00 00          mov    $0x9,%esi
  4008c8:       bf 50 09 40 00          mov    $0x400950,%edi
  4008cd:       b8 00 00 00 00          mov    $0x0,%eax
  4008d2:       e8 09 fc ff ff          call   4004e0 <printf@plt>
  4008d7:       48 83 c4 20             add    $0x20,%rsp
  4008db:       bf 00 00 00 00          mov    $0x0,%edi
  4008e0:       e8 0b fc ff ff          call   4004f0 <exit@plt>
  4008e5:       66 2e 0f 1f 84 00 00    cs nopw 0x0(%rax,%rax,1)
  4008ec:       00 00 00
  4008ef:       90                      nop

00000000004008f0 <__do_global_ctors_aux>:
  4008f0:       48 8b 05 19 11 00 00    mov    0x1119(%rip),%rax        # 401a10 <__CTOR_LIST__>
  4008f7:       48 83 f8 ff             cmp    $0xffffffffffffffff,%rax
  4008fb:       74 33                   je     400930 <__do_global_ctors_aux+0x40>
  4008fd:       55                      push   %rbp
  4008fe:       48 89 e5                mov    %rsp,%rbp
  400901:       53                      push   %rbx
  400902:       48 8d 1d 07 11 00 00    lea    0x1107(%rip),%rbx        # 401a10 <__CTOR_LIST__>
  400909:       48 83 ec 08             sub    $0x8,%rsp
  40090d:       0f 1f 00                nopl   (%rax)
  400910:       ff d0                   call   *%rax
  400912:       48 8b 43 f8             mov    -0x8(%rbx),%rax
  400916:       48 83 eb 08             sub    $0x8,%rbx
  40091a:       48 83 f8 ff             cmp    $0xffffffffffffffff,%rax
  40091e:       75 f0                   jne    400910 <__do_global_ctors_aux+0x20>
  400920:       48 8b 5d f8             mov    -0x8(%rbp),%rbx
  400924:       c9                      leave
  400925:       c3                      ret
  400926:       66 2e 0f 1f 84 00 00    cs nopw 0x0(%rax,%rax,1)
  40092d:       00 00 00
  400930:       c3                      ret
  400931:       0f 1f 00                nopl   (%rax)

セクション .fini の逆アセンブル:

0000000000400934 <_fini>:
  400934:       48 83 ec 08             sub    $0x8,%rsp
  400938:       e8 d3 fe ff ff          call   400810 <__do_global_dtors_aux>
  40093d:       48 83 c4 08             add    $0x8,%rsp
  400941:       c3                      ret

x87演算?
AVXはどこに?

逆アセンブルの結果をみるとCからアセンブラに変えた命令内容と違うぞ?
これを、リアルの話で例えると、

巨乳だと思って付き合っていた人が、外部(ブラジャ)の力を使い実は、巨乳ではなかった。

ということになります。
確かに、そこに(機能として)オパーイはあるけど、私の(求めていた)オパーイがないわけです。
結果は、一緒なのですが、これはアカンっと思います。
離婚問題勃発になるわけです。

分かった時は、今まで書いたコードが、自分の意図してないものになっていたのではと、アキバでホッピー飲みながらクダを巻きちらし、夜中には嘔吐するという精神的ショックを受けたわけです。

・・・さて、1日色々と考え、(gccと)対話したところ、これは私とgccとのすれ違いであったことがわかりました。

端的に言うと、以下の内容がわかるかった

  1. a.outでAVXで利用していない理由は、最適化オプション(-02)を利用していたから
  2. サンプルコードで利用している値が、固定値だったから

ということです。
これで、離婚は解消されました。
まだ、clangに完全乗り換えではなく、gccも利用できます。

実際にそれぞれ逆アセンブルした内容を掲示します。
まずは、サンプルコードを改造

#include <stdio.h>
#include <immintrin.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>

#define MAX (10000000) /* 1000万 */

int main(int argc, char **argv)
{
        /* ベクトルの要素数を指定 */
        const int32_t n = 8;
        int32_t i;
        __m256i a;
        __m256i b;
        __m256i result;

        for (i=0; i < MAX; i++) {
                /* ベクトルAとベクトルBを初期化 */
                a = _mm256_set_epi32((1+rand()), (2+rand()), (3+rand()), (4+rand()), (5+rand()), (6+rand()), (7+rand()), (8+rand()));
                b = _mm256_set_epi32((8+rand()), (7+rand()), (6+rand()), (5+rand()), (4+rand()), (3+rand()), (2+rand()), (1+rand()));

                /* ベクトルAとベクトルBを加算 */
                result = _mm256_add_epi32(a, b);
        }

        /* 結果を表示 */
        int* res = (int*)&result;
        printf("ベクトルA + ベクトルB = [%d, %d, %d, %d, %d, %d, %d, %d]\n", res[7], res[6], res[5], res[4], res[3], res[2], res[1], res[0]);

        exit(0);
}

改造の点は、2つ

  1. 計算する値を、固定値ではなくrand()を利用(元々演算結果が、あっているかどうかを確認していたので、今回は検証せず単純にコードと速度を確認)
  2. 最適化オプション(-02)を外す

上記の結果したところ、面白い結果になりました。


./a.out:     ファイル形式 elf64-x86-64-freebsd


セクション .init の逆アセンブル:

00000000004004a8 <_init>:
  4004a8:       48 83 ec 08             sub    $0x8,%rsp
  4004ac:       e8 df 03 00 00          call   400890 <frame_dummy>
  4004b1:       e8 5a 06 00 00          call   400b10 <__do_global_ctors_aux>
  4004b6:       48 83 c4 08             add    $0x8,%rsp
  4004ba:       c3                      ret

セクション .plt の逆アセンブル:

00000000004004c0 <atexit@plt-0x10>:
  4004c0:       ff 35 3a 19 00 00       push   0x193a(%rip)        # 401e00 <_GLOBAL_OFFSET_TABLE_+0x8>
  4004c6:       ff 25 3c 19 00 00       jmp    *0x193c(%rip)        # 401e08 <_GLOBAL_OFFSET_TABLE_+0x10>
  4004cc:       0f 1f 40 00             nopl   0x0(%rax)

00000000004004d0 <atexit@plt>:
  4004d0:       ff 25 3a 19 00 00       jmp    *0x193a(%rip)        # 401e10 <atexit@FBSD_1.0>
  4004d6:       68 00 00 00 00          push   $0x0
  4004db:       e9 e0 ff ff ff          jmp    4004c0 <_init+0x18>

00000000004004e0 <printf@plt>:
  4004e0:       ff 25 32 19 00 00       jmp    *0x1932(%rip)        # 401e18 <printf@FBSD_1.0>
  4004e6:       68 01 00 00 00          push   $0x1
  4004eb:       e9 d0 ff ff ff          jmp    4004c0 <_init+0x18>

00000000004004f0 <exit@plt>:
  4004f0:       ff 25 2a 19 00 00       jmp    *0x192a(%rip)        # 401e20 <exit@FBSD_1.0>
  4004f6:       68 02 00 00 00          push   $0x2
  4004fb:       e9 c0 ff ff ff          jmp    4004c0 <_init+0x18>

0000000000400500 <_init_tls@plt>:
  400500:       ff 25 22 19 00 00       jmp    *0x1922(%rip)        # 401e28 <_init_tls@FBSD_1.0>
  400506:       68 03 00 00 00          push   $0x3
  40050b:       e9 b0 ff ff ff          jmp    4004c0 <_init+0x18>

セクション .text の逆アセンブル:

0000000000400510 <_start>:
  400510:       55                      push   %rbp
  400511:       48 89 e5                mov    %rsp,%rbp
  400514:       41 57                   push   %r15
  400516:       41 56                   push   %r14
  400518:       41 55                   push   %r13
  40051a:       41 54                   push   %r12
  40051c:       53                      push   %rbx
  40051d:       50                      push   %rax
  40051e:       49 89 fe                mov    %rdi,%r14
  400521:       4c 8b 3f                mov    (%rdi),%r15
  400524:       49 63 c7                movslq %r15d,%rax
  400527:       48 8d 1c c7             lea    (%rdi,%rax,8),%rbx
  40052b:       48 83 c3 10             add    $0x10,%rbx
  40052f:       48 83 3d 09 19 00 00    cmpq   $0x0,0x1909(%rip)        # 401e40 <environ>
  400536:       00
  400537:       75 07                   jne    400540 <_start+0x30>
  400539:       48 89 1d 00 19 00 00    mov    %rbx,0x1900(%rip)        # 401e40 <environ>
  400540:       49 83 c6 08             add    $0x8,%r14
  400544:       45 85 ff                test   %r15d,%r15d
  400547:       7e 2f                   jle    400578 <_start+0x68>
  400549:       49 8b 06                mov    (%r14),%rax
  40054c:       48 85 c0                test   %rax,%rax
  40054f:       74 27                   je     400578 <_start+0x68>
  400551:       66 2e 0f 1f 84 00 00    cs nopw 0x0(%rax,%rax,1)
  400558:       00 00 00
  40055b:       0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)
  400560:       48 89 05 c9 18 00 00    mov    %rax,0x18c9(%rip)        # 401e30 <__progname>
  400567:       48 83 c0 01             add    $0x1,%rax
  40056b:       0f b6 48 ff             movzbl -0x1(%rax),%ecx
  40056f:       80 f9 2f                cmp    $0x2f,%cl
  400572:       74 ec                   je     400560 <_start+0x50>
  400574:       84 c9                   test   %cl,%cl
  400576:       75 ef                   jne    400567 <_start+0x57>
  400578:       b8 58 1c 40 00          mov    $0x401c58,%eax
  40057d:       48 85 c0                test   %rax,%rax
  400580:       74 0a                   je     40058c <_start+0x7c>
  400582:       48 89 f7                mov    %rsi,%rdi
  400585:       e8 46 ff ff ff          call   4004d0 <atexit@plt>
  40058a:       eb 68                   jmp    4005f4 <_start+0xe4>
  40058c:       48 89 5d d0             mov    %rbx,-0x30(%rbp)
  400590:       41 bd a8 04 40 00       mov    $0x4004a8,%r13d
  400596:       eb 0c                   jmp    4005a4 <_start+0x94>
  400598:       0f 1f 84 00 00 00 00    nopl   0x0(%rax,%rax,1)
  40059f:       00
  4005a0:       49 83 c5 18             add    $0x18,%r13
  4005a4:       49 81 fd a8 04 40 00    cmp    $0x4004a8,%r13
  4005ab:       73 3e                   jae    4005eb <_start+0xdb>
  4005ad:       b8 01 00 00 00          mov    $0x1,%eax
  4005b2:       0f a2                   cpuid
  4005b4:       89 d7                   mov    %edx,%edi
  4005b6:       89 ce                   mov    %ecx,%esi
  4005b8:       31 c0                   xor    %eax,%eax
  4005ba:       0f a2                   cpuid
  4005bc:       bb 00 00 00 00          mov    $0x0,%ebx
  4005c1:       b9 00 00 00 00          mov    $0x0,%ecx
  4005c6:       83 f8 07                cmp    $0x7,%eax
  4005c9:       72 09                   jb     4005d4 <_start+0xc4>
  4005cb:       31 c9                   xor    %ecx,%ecx
  4005cd:       b8 07 00 00 00          mov    $0x7,%eax
  4005d2:       0f a2                   cpuid
  4005d4:       41 83 7d 08 25          cmpl   $0x25,0x8(%r13)
  4005d9:       75 c5                   jne    4005a0 <_start+0x90>
  4005db:       4d 8b 65 00             mov    0x0(%r13),%r12
  4005df:       89 da                   mov    %ebx,%edx
  4005e1:       41 ff 55 10             call   *0x10(%r13)
  4005e5:       49 89 04 24             mov    %rax,(%r12)
  4005e9:       eb b5                   jmp    4005a0 <_start+0x90>
  4005eb:       e8 10 ff ff ff          call   400500 <_init_tls@plt>
  4005f0:       48 8b 5d d0             mov    -0x30(%rbp),%rbx
  4005f4:       44 89 ff                mov    %r15d,%edi
  4005f7:       4c 89 f6                mov    %r14,%rsi
  4005fa:       48 89 da                mov    %rbx,%rdx
  4005fd:       e8 1e 00 00 00          call   400620 <handle_static_init>
  400602:       44 89 ff                mov    %r15d,%edi
  400605:       4c 89 f6                mov    %r14,%rsi
  400608:       48 89 da                mov    %rbx,%rdx
  40060b:       e8 85 02 00 00          call   400895 <main>
  400610:       89 c7                   mov    %eax,%edi
  400612:       e8 d9 fe ff ff          call   4004f0 <exit@plt>
  400617:       66 0f 1f 84 00 00 00    nopw   0x0(%rax,%rax,1)
  40061e:       00 00

0000000000400620 <handle_static_init>:
  400620:       55                      push   %rbp
  400621:       48 89 e5                mov    %rsp,%rbp
  400624:       41 57                   push   %r15
  400626:       41 56                   push   %r14
  400628:       41 55                   push   %r13
  40062a:       41 54                   push   %r12
  40062c:       53                      push   %rbx
  40062d:       50                      push   %rax
  40062e:       b8 58 1c 40 00          mov    $0x401c58,%eax
  400633:       48 85 c0                test   %rax,%rax
  400636:       0f 85 e8 00 00 00       jne    400724 <handle_static_init+0x104>
  40063c:       49 89 d6                mov    %rdx,%r14
  40063f:       49 89 f7                mov    %rsi,%r15
  400642:       41 89 fc                mov    %edi,%r12d
  400645:       bf 40 07 40 00          mov    $0x400740,%edi
  40064a:       e8 81 fe ff ff          call   4004d0 <atexit@plt>
  40064f:       b8 38 1c 40 00          mov    $0x401c38,%eax
  400654:       b9 38 1c 40 00          mov    $0x401c38,%ecx
  400659:       48 29 c1                sub    %rax,%rcx
  40065c:       48 8d 41 07             lea    0x7(%rcx),%rax
  400660:       48 85 c9                test   %rcx,%rcx
  400663:       48 89 ca                mov    %rcx,%rdx
  400666:       48 0f 48 d0             cmovs  %rax,%rdx
  40066a:       48 c1 fa 03             sar    $0x3,%rdx
  40066e:       74 44                   je     4006b4 <handle_static_init+0x94>
  400670:       48 85 c9                test   %rcx,%rcx
  400673:       48 0f 49 c1             cmovns %rcx,%rax
  400677:       48 c1 f8 03             sar    $0x3,%rax
  40067b:       48 83 f8 02             cmp    $0x2,%rax
  40067f:       41 bd 01 00 00 00       mov    $0x1,%r13d
  400685:       4c 0f 43 e8             cmovae %rax,%r13
  400689:       31 db                   xor    %ebx,%ebx
  40068b:       eb 0c                   jmp    400699 <handle_static_init+0x79>
  40068d:       0f 1f 00                nopl   (%rax)
  400690:       48 83 c3 01             add    $0x1,%rbx
  400694:       49 39 dd                cmp    %rbx,%r13
  400697:       74 1b                   je     4006b4 <handle_static_init+0x94>
  400699:       48 8b 04 dd 38 1c 40    mov    0x401c38(,%rbx,8),%rax
  4006a0:       00
  4006a1:       48 83 f8 02             cmp    $0x2,%rax
  4006a5:       72 e9                   jb     400690 <handle_static_init+0x70>
  4006a7:       44 89 e7                mov    %r12d,%edi
  4006aa:       4c 89 fe                mov    %r15,%rsi
  4006ad:       4c 89 f2                mov    %r14,%rdx
  4006b0:       ff d0                   call   *%rax
  4006b2:       eb dc                   jmp    400690 <handle_static_init+0x70>
  4006b4:       e8 ef fd ff ff          call   4004a8 <_init>
  4006b9:       b8 38 1c 40 00          mov    $0x401c38,%eax
  4006be:       b9 38 1c 40 00          mov    $0x401c38,%ecx
  4006c3:       48 29 c1                sub    %rax,%rcx
  4006c6:       48 8d 41 07             lea    0x7(%rcx),%rax
  4006ca:       48 85 c9                test   %rcx,%rcx
  4006cd:       48 89 ca                mov    %rcx,%rdx
  4006d0:       48 0f 48 d0             cmovs  %rax,%rdx
  4006d4:       48 c1 fa 03             sar    $0x3,%rdx
  4006d8:       74 4a                   je     400724 <handle_static_init+0x104>
  4006da:       48 85 c9                test   %rcx,%rcx
  4006dd:       48 0f 49 c1             cmovns %rcx,%rax
  4006e1:       48 c1 f8 03             sar    $0x3,%rax
  4006e5:       48 83 f8 02             cmp    $0x2,%rax
  4006e9:       41 bd 01 00 00 00       mov    $0x1,%r13d
  4006ef:       4c 0f 43 e8             cmovae %rax,%r13
  4006f3:       31 db                   xor    %ebx,%ebx
  4006f5:       eb 12                   jmp    400709 <handle_static_init+0xe9>
  4006f7:       66 0f 1f 84 00 00 00    nopw   0x0(%rax,%rax,1)
  4006fe:       00 00
  400700:       48 83 c3 01             add    $0x1,%rbx
  400704:       49 39 dd                cmp    %rbx,%r13
  400707:       74 1b                   je     400724 <handle_static_init+0x104>
  400709:       48 8b 04 dd 38 1c 40    mov    0x401c38(,%rbx,8),%rax
  400710:       00
  400711:       48 83 f8 02             cmp    $0x2,%rax
  400715:       72 e9                   jb     400700 <handle_static_init+0xe0>
  400717:       44 89 e7                mov    %r12d,%edi
  40071a:       4c 89 fe                mov    %r15,%rsi
  40071d:       4c 89 f2                mov    %r14,%rdx
  400720:       ff d0                   call   *%rax
  400722:       eb dc                   jmp    400700 <handle_static_init+0xe0>
  400724:       48 83 c4 08             add    $0x8,%rsp
  400728:       5b                      pop    %rbx
  400729:       41 5c                   pop    %r12
  40072b:       41 5d                   pop    %r13
  40072d:       41 5e                   pop    %r14
  40072f:       41 5f                   pop    %r15
  400731:       5d                      pop    %rbp
  400732:       c3                      ret
  400733:       66 2e 0f 1f 84 00 00    cs nopw 0x0(%rax,%rax,1)
  40073a:       00 00 00
  40073d:       0f 1f 00                nopl   (%rax)

0000000000400740 <finalizer>:
  400740:       55                      push   %rbp
  400741:       48 89 e5                mov    %rsp,%rbp
  400744:       53                      push   %rbx
  400745:       50                      push   %rax
  400746:       b9 38 1c 40 00          mov    $0x401c38,%ecx
  40074b:       b8 38 1c 40 00          mov    $0x401c38,%eax
  400750:       48 29 c8                sub    %rcx,%rax
  400753:       48 8d 58 07             lea    0x7(%rax),%rbx
  400757:       48 85 c0                test   %rax,%rax
  40075a:       48 89 c1                mov    %rax,%rcx
  40075d:       48 0f 48 cb             cmovs  %rbx,%rcx
  400761:       48 c1 f9 03             sar    $0x3,%rcx
  400765:       75 0b                   jne    400772 <finalizer+0x32>
  400767:       48 83 c4 08             add    $0x8,%rsp
  40076b:       5b                      pop    %rbx
  40076c:       5d                      pop    %rbp
  40076d:       e9 e2 03 00 00          jmp    400b54 <_fini>
  400772:       48 85 c0                test   %rax,%rax
  400775:       48 0f 49 d8             cmovns %rax,%rbx
  400779:       48 c1 fb 03             sar    $0x3,%rbx
  40077d:       eb 06                   jmp    400785 <finalizer+0x45>
  40077f:       90                      nop
  400780:       48 85 db                test   %rbx,%rbx
  400783:       74 e2                   je     400767 <finalizer+0x27>
  400785:       48 8b 04 dd 30 1c 40    mov    0x401c30(,%rbx,8),%rax
  40078c:       00
  40078d:       48 83 c3 ff             add    $0xffffffffffffffff,%rbx
  400791:       48 83 f8 02             cmp    $0x2,%rax
  400795:       72 e9                   jb     400780 <finalizer+0x40>
  400797:       ff d0                   call   *%rax
  400799:       eb e5                   jmp    400780 <finalizer+0x40>
  40079b:       cc                      int3
  40079c:       0f 1f 40 00             nopl   0x0(%rax)

00000000004007a0 <deregister_tm_clones>:
  4007a0:       48 8d 3d 99 16 00 00    lea    0x1699(%rip),%rdi        # 401e40 <environ>
  4007a7:       48 8d 05 92 16 00 00    lea    0x1692(%rip),%rax        # 401e40 <environ>
  4007ae:       48 39 f8                cmp    %rdi,%rax
  4007b1:       74 15                   je     4007c8 <deregister_tm_clones+0x28>
  4007b3:       48 8b 05 2e 16 00 00    mov    0x162e(%rip),%rax        # 401de8 <_ITM_deregisterTMCloneTable@Base>
  4007ba:       48 85 c0                test   %rax,%rax
  4007bd:       74 09                   je     4007c8 <deregister_tm_clones+0x28>
  4007bf:       ff e0                   jmp    *%rax
  4007c1:       0f 1f 80 00 00 00 00    nopl   0x0(%rax)
  4007c8:       c3                      ret
  4007c9:       0f 1f 80 00 00 00 00    nopl   0x0(%rax)

00000000004007d0 <register_tm_clones>:
  4007d0:       48 8d 3d 69 16 00 00    lea    0x1669(%rip),%rdi        # 401e40 <environ>
  4007d7:       48 8d 35 62 16 00 00    lea    0x1662(%rip),%rsi        # 401e40 <environ>
  4007de:       48 29 fe                sub    %rdi,%rsi
  4007e1:       48 89 f0                mov    %rsi,%rax
  4007e4:       48 c1 ee 3f             shr    $0x3f,%rsi
  4007e8:       48 c1 f8 03             sar    $0x3,%rax
  4007ec:       48 01 c6                add    %rax,%rsi
  4007ef:       48 d1 fe                sar    %rsi
  4007f2:       74 14                   je     400808 <register_tm_clones+0x38>
  4007f4:       48 8b 05 f5 15 00 00    mov    0x15f5(%rip),%rax        # 401df0 <_ITM_registerTMCloneTable@Base>
  4007fb:       48 85 c0                test   %rax,%rax
  4007fe:       74 08                   je     400808 <register_tm_clones+0x38>
  400800:       ff e0                   jmp    *%rax
  400802:       66 0f 1f 44 00 00       nopw   0x0(%rax,%rax,1)
  400808:       c3                      ret
  400809:       0f 1f 80 00 00 00 00    nopl   0x0(%rax)

0000000000400810 <__do_global_dtors_aux>:
  400810:       80 3d 31 16 00 00 00    cmpb   $0x0,0x1631(%rip)        # 401e48 <completed.1>
  400817:       75 67                   jne    400880 <__do_global_dtors_aux+0x70>
  400819:       55                      push   %rbp
  40081a:       48 8d 05 27 14 00 00    lea    0x1427(%rip),%rax        # 401c48 <__DTOR_LIST__>
  400821:       48 89 e5                mov    %rsp,%rbp
  400824:       41 54                   push   %r12
  400826:       49 89 c4                mov    %rax,%r12
  400829:       53                      push   %rbx
  40082a:       48 8d 1d 1f 14 00 00    lea    0x141f(%rip),%rbx        # 401c50 <__DTOR_END__>
  400831:       48 29 c3                sub    %rax,%rbx
  400834:       48 8b 05 15 16 00 00    mov    0x1615(%rip),%rax        # 401e50 <dtor_idx.0>
  40083b:       48 c1 fb 03             sar    $0x3,%rbx
  40083f:       48 83 eb 01             sub    $0x1,%rbx
  400843:       48 39 d8                cmp    %rbx,%rax
  400846:       73 23                   jae    40086b <__do_global_dtors_aux+0x5b>
  400848:       0f 1f 84 00 00 00 00    nopl   0x0(%rax,%rax,1)
  40084f:       00
  400850:       48 83 c0 01             add    $0x1,%rax
  400854:       48 89 05 f5 15 00 00    mov    %rax,0x15f5(%rip)        # 401e50 <dtor_idx.0>
  40085b:       41 ff 14 c4             call   *(%r12,%rax,8)
  40085f:       48 8b 05 ea 15 00 00    mov    0x15ea(%rip),%rax        # 401e50 <dtor_idx.0>
  400866:       48 39 d8                cmp    %rbx,%rax
  400869:       72 e5                   jb     400850 <__do_global_dtors_aux+0x40>
  40086b:       e8 30 ff ff ff          call   4007a0 <deregister_tm_clones>
  400870:       5b                      pop    %rbx
  400871:       41 5c                   pop    %r12
  400873:       c6 05 ce 15 00 00 01    movb   $0x1,0x15ce(%rip)        # 401e48 <completed.1>
  40087a:       5d                      pop    %rbp
  40087b:       c3                      ret
  40087c:       0f 1f 40 00             nopl   0x0(%rax)
  400880:       c3                      ret
  400881:       66 66 2e 0f 1f 84 00    data16 cs nopw 0x0(%rax,%rax,1)
  400888:       00 00 00 00
  40088c:       0f 1f 40 00             nopl   0x0(%rax)

0000000000400890 <frame_dummy>:
  400890:       e9 3b ff ff ff          jmp    4007d0 <register_tm_clones>

0000000000400895 <main>:
  400895:       4c 8d 54 24 08          lea    0x8(%rsp),%r10
  40089a:       48 83 e4 e0             and    $0xffffffffffffffe0,%rsp
  40089e:       41 ff 72 f8             push   -0x8(%r10)
  4008a2:       55                      push   %rbp
  4008a3:       48 89 e5                mov    %rsp,%rbp
  4008a6:       41 52                   push   %r10
  4008a8:       48 81 ec 28 01 00 00    sub    $0x128,%rsp
  4008af:       89 bd ec fe ff ff       mov    %edi,-0x114(%rbp)
  4008b5:       48 89 b5 e0 fe ff ff    mov    %rsi,-0x120(%rbp)
  4008bc:       c7 45 e8 08 00 00 00    movl   $0x8,-0x18(%rbp)
  4008c3:       c7 45 ec 00 00 00 00    movl   $0x0,-0x14(%rbp)
  4008ca:       e9 b0 01 00 00          jmp    400a7f <main+0x1ea>
  4008cf:       c7 85 2c ff ff ff 01    movl   $0x1,-0xd4(%rbp)
  4008d6:       00 00 00
  4008d9:       c7 85 28 ff ff ff 02    movl   $0x2,-0xd8(%rbp)
  4008e0:       00 00 00
  4008e3:       c7 85 24 ff ff ff 03    movl   $0x3,-0xdc(%rbp)
  4008ea:       00 00 00
  4008ed:       c7 85 20 ff ff ff 04    movl   $0x4,-0xe0(%rbp)
  4008f4:       00 00 00
  4008f7:       c7 85 1c ff ff ff 05    movl   $0x5,-0xe4(%rbp)
  4008fe:       00 00 00
  400901:       c7 85 18 ff ff ff 06    movl   $0x6,-0xe8(%rbp)
  400908:       00 00 00
  40090b:       c7 85 14 ff ff ff 07    movl   $0x7,-0xec(%rbp)
  400912:       00 00 00
  400915:       c7 85 10 ff ff ff 08    movl   $0x8,-0xf0(%rbp)
  40091c:       00 00 00
  40091f:       8b 85 2c ff ff ff       mov    -0xd4(%rbp),%eax
  400925:       8b 95 28 ff ff ff       mov    -0xd8(%rbp),%edx
  40092b:       c5 f9 6e da             vmovd  %edx,%xmm3
  40092f:       c4 e3 61 22 c8 01       vpinsrd $0x1,%eax,%xmm3,%xmm1
  400935:       8b 85 24 ff ff ff       mov    -0xdc(%rbp),%eax
  40093b:       8b 95 20 ff ff ff       mov    -0xe0(%rbp),%edx
  400941:       c5 f9 6e e2             vmovd  %edx,%xmm4
  400945:       c4 e3 59 22 c0 01       vpinsrd $0x1,%eax,%xmm4,%xmm0
  40094b:       c5 f9 6c c9             vpunpcklqdq %xmm1,%xmm0,%xmm1
  40094f:       8b 85 1c ff ff ff       mov    -0xe4(%rbp),%eax
  400955:       8b 95 18 ff ff ff       mov    -0xe8(%rbp),%edx
  40095b:       c5 f9 6e ea             vmovd  %edx,%xmm5
  40095f:       c4 e3 51 22 d0 01       vpinsrd $0x1,%eax,%xmm5,%xmm2
  400965:       8b 85 14 ff ff ff       mov    -0xec(%rbp),%eax
  40096b:       8b 95 10 ff ff ff       mov    -0xf0(%rbp),%edx
  400971:       c5 f9 6e f2             vmovd  %edx,%xmm6
  400975:       c4 e3 49 22 c0 01       vpinsrd $0x1,%eax,%xmm6,%xmm0
  40097b:       c5 f9 6c c2             vpunpcklqdq %xmm2,%xmm0,%xmm0
  40097f:       c4 e3 7d 38 c1 01       vinserti128 $0x1,%xmm1,%ymm0,%ymm0
  400985:       c5 fd 7f 45 b0          vmovdqa %ymm0,-0x50(%rbp)
  40098a:       c7 85 4c ff ff ff 08    movl   $0x8,-0xb4(%rbp)
  400991:       00 00 00
  400994:       c7 85 48 ff ff ff 07    movl   $0x7,-0xb8(%rbp)
  40099b:       00 00 00
  40099e:       c7 85 44 ff ff ff 06    movl   $0x6,-0xbc(%rbp)
  4009a5:       00 00 00
  4009a8:       c7 85 40 ff ff ff 05    movl   $0x5,-0xc0(%rbp)
  4009af:       00 00 00
  4009b2:       c7 85 3c ff ff ff 04    movl   $0x4,-0xc4(%rbp)
  4009b9:       00 00 00
  4009bc:       c7 85 38 ff ff ff 03    movl   $0x3,-0xc8(%rbp)
  4009c3:       00 00 00
  4009c6:       c7 85 34 ff ff ff 02    movl   $0x2,-0xcc(%rbp)
  4009cd:       00 00 00
  4009d0:       c7 85 30 ff ff ff 01    movl   $0x1,-0xd0(%rbp)
  4009d7:       00 00 00
  4009da:       8b 85 4c ff ff ff       mov    -0xb4(%rbp),%eax
  4009e0:       8b 95 48 ff ff ff       mov    -0xb8(%rbp),%edx
  4009e6:       c5 f9 6e fa             vmovd  %edx,%xmm7
  4009ea:       c4 e3 41 22 c8 01       vpinsrd $0x1,%eax,%xmm7,%xmm1
  4009f0:       8b 85 44 ff ff ff       mov    -0xbc(%rbp),%eax
  4009f6:       8b 95 40 ff ff ff       mov    -0xc0(%rbp),%edx
  4009fc:       c5 f9 6e da             vmovd  %edx,%xmm3
  400a00:       c4 e3 61 22 c0 01       vpinsrd $0x1,%eax,%xmm3,%xmm0
  400a06:       c5 f9 6c c9             vpunpcklqdq %xmm1,%xmm0,%xmm1
  400a0a:       8b 85 3c ff ff ff       mov    -0xc4(%rbp),%eax
  400a10:       8b 95 38 ff ff ff       mov    -0xc8(%rbp),%edx
  400a16:       c5 f9 6e e2             vmovd  %edx,%xmm4
  400a1a:       c4 e3 59 22 d0 01       vpinsrd $0x1,%eax,%xmm4,%xmm2
  400a20:       8b 85 34 ff ff ff       mov    -0xcc(%rbp),%eax
  400a26:       8b 95 30 ff ff ff       mov    -0xd0(%rbp),%edx
  400a2c:       c5 f9 6e ea             vmovd  %edx,%xmm5
  400a30:       c4 e3 51 22 c0 01       vpinsrd $0x1,%eax,%xmm5,%xmm0
  400a36:       c5 f9 6c c2             vpunpcklqdq %xmm2,%xmm0,%xmm0
  400a3a:       c4 e3 7d 38 c1 01       vinserti128 $0x1,%xmm1,%ymm0,%ymm0
  400a40:       c5 fd 7f 45 90          vmovdqa %ymm0,-0x70(%rbp)
  400a45:       c5 fd 6f 45 b0          vmovdqa -0x50(%rbp),%ymm0
  400a4a:       c5 fd 7f 85 70 ff ff    vmovdqa %ymm0,-0x90(%rbp)
  400a51:       ff
  400a52:       c5 fd 6f 45 90          vmovdqa -0x70(%rbp),%ymm0
  400a57:       c5 fd 7f 85 50 ff ff    vmovdqa %ymm0,-0xb0(%rbp)
  400a5e:       ff
  400a5f:       c5 fd 6f 8d 70 ff ff    vmovdqa -0x90(%rbp),%ymm1
  400a66:       ff
  400a67:       c5 fd 6f 85 50 ff ff    vmovdqa -0xb0(%rbp),%ymm0
  400a6e:       ff
  400a6f:       c5 f5 fe c0             vpaddd %ymm0,%ymm1,%ymm0
  400a73:       90                      nop
  400a74:       c5 fd 7f 85 f0 fe ff    vmovdqa %ymm0,-0x110(%rbp)
  400a7b:       ff
  400a7c:       ff 45 ec                incl   -0x14(%rbp)
  400a7f:       81 7d ec 7f 96 98 00    cmpl   $0x98967f,-0x14(%rbp)
  400a86:       0f 8e 43 fe ff ff       jle    4008cf <main+0x3a>
  400a8c:       48 8d 85 f0 fe ff ff    lea    -0x110(%rbp),%rax
  400a93:       48 89 45 e0             mov    %rax,-0x20(%rbp)
  400a97:       48 8b 45 e0             mov    -0x20(%rbp),%rax
  400a9b:       44 8b 00                mov    (%rax),%r8d
  400a9e:       48 8b 45 e0             mov    -0x20(%rbp),%rax
  400aa2:       48 83 c0 04             add    $0x4,%rax
  400aa6:       8b 38                   mov    (%rax),%edi
  400aa8:       48 8b 45 e0             mov    -0x20(%rbp),%rax
  400aac:       48 83 c0 08             add    $0x8,%rax
  400ab0:       8b 30                   mov    (%rax),%esi
  400ab2:       48 8b 45 e0             mov    -0x20(%rbp),%rax
  400ab6:       48 83 c0 0c             add    $0xc,%rax
  400aba:       44 8b 08                mov    (%rax),%r9d
  400abd:       48 8b 45 e0             mov    -0x20(%rbp),%rax
  400ac1:       48 83 c0 10             add    $0x10,%rax
  400ac5:       44 8b 10                mov    (%rax),%r10d
  400ac8:       48 8b 45 e0             mov    -0x20(%rbp),%rax
  400acc:       48 83 c0 14             add    $0x14,%rax
  400ad0:       8b 08                   mov    (%rax),%ecx
  400ad2:       48 8b 45 e0             mov    -0x20(%rbp),%rax
  400ad6:       48 83 c0 18             add    $0x18,%rax
  400ada:       8b 10                   mov    (%rax),%edx
  400adc:       48 8b 45 e0             mov    -0x20(%rbp),%rax
  400ae0:       48 83 c0 1c             add    $0x1c,%rax
  400ae4:       8b 00                   mov    (%rax),%eax
  400ae6:       48 83 ec 08             sub    $0x8,%rsp
  400aea:       41 50                   push   %r8
  400aec:       57                      push   %rdi
  400aed:       56                      push   %rsi
  400aee:       45 89 d0                mov    %r10d,%r8d
  400af1:       89 c6                   mov    %eax,%esi
  400af3:       bf 70 0b 40 00          mov    $0x400b70,%edi
  400af8:       b8 00 00 00 00          mov    $0x0,%eax
  400afd:       e8 de f9 ff ff          call   4004e0 <printf@plt>
  400b02:       48 83 c4 20             add    $0x20,%rsp
  400b06:       bf 00 00 00 00          mov    $0x0,%edi
  400b0b:       e8 e0 f9 ff ff          call   4004f0 <exit@plt>

0000000000400b10 <__do_global_ctors_aux>:
  400b10:       48 8b 05 21 11 00 00    mov    0x1121(%rip),%rax        # 401c38 <__CTOR_LIST__>
  400b17:       48 83 f8 ff             cmp    $0xffffffffffffffff,%rax
  400b1b:       74 33                   je     400b50 <__do_global_ctors_aux+0x40>
  400b1d:       55                      push   %rbp
  400b1e:       48 89 e5                mov    %rsp,%rbp
  400b21:       53                      push   %rbx
  400b22:       48 8d 1d 0f 11 00 00    lea    0x110f(%rip),%rbx        # 401c38 <__CTOR_LIST__>
  400b29:       48 83 ec 08             sub    $0x8,%rsp
  400b2d:       0f 1f 00                nopl   (%rax)
  400b30:       ff d0                   call   *%rax
  400b32:       48 8b 43 f8             mov    -0x8(%rbx),%rax
  400b36:       48 83 eb 08             sub    $0x8,%rbx
  400b3a:       48 83 f8 ff             cmp    $0xffffffffffffffff,%rax
  400b3e:       75 f0                   jne    400b30 <__do_global_ctors_aux+0x20>
  400b40:       48 8b 5d f8             mov    -0x8(%rbp),%rbx
  400b44:       c9                      leave
  400b45:       c3                      ret
  400b46:       66 2e 0f 1f 84 00 00    cs nopw 0x0(%rax,%rax,1)
  400b4d:       00 00 00
  400b50:       c3                      ret
  400b51:       0f 1f 00                nopl   (%rax)

セクション .fini の逆アセンブル:

0000000000400b54 <_fini>:
  400b54:       48 83 ec 08             sub    $0x8,%rsp
  400b58:       e8 b3 fc ff ff          call   400810 <__do_global_dtors_aux>
  400b5d:       48 83 c4 08             add    $0x8,%rsp
  400b61:       c3                      ret

うむ。処理数が大幅にアップしましましたが、AVXを利用しているのを確認

で、実際に実行してみると

raichi@lena:~/works/R-MIX/TP/tp113 % time ./a.out
ベクトルA + ベクトルB = [-2000199036, -828670540, -277146058, 1109089554, 1912549470, 1446969634, -2107940384, -1895884243]
1.127u 0.000s 0:01.12 100.0%    5+168k 0+0io 0pf+0w
raichi@lena:~/works/R-MIX/TP/tp113 % time ./a.out
ベクトルA + ベクトルB = [-2000199036, -828670540, -277146058, 1109089554, 1912549470, 1446969634, -2107940384, -1895884243]
1.128u 0.000s 0:01.12 100.0%    5+168k 0+0io 0pf+0w
raichi@lena:~/works/R-MIX/TP/tp113 % time ./a.out
ベクトルA + ベクトルB = [-2000199036, -828670540, -277146058, 1109089554, 1912549470, 1446969634, -2107940384, -1895884243]
1.137u 0.000s 0:01.13 100.0%    5+168k 0+0io 0pf+0w
raichi@lena:~/works/R-MIX/TP/tp113 %

うん、rand()を利用したとは言え、各段に遅くなっています。

では、最適化オプションを利用してみます


./a.out:     ファイル形式 elf64-x86-64-freebsd


セクション .init の逆アセンブル:

0000000000400500 <_init>:
  400500:       48 83 ec 08             sub    $0x8,%rsp
  400504:       e8 d7 05 00 00          call   400ae0 <frame_dummy>
  400509:       e8 e2 05 00 00          call   400af0 <__do_global_ctors_aux>
  40050e:       48 83 c4 08             add    $0x8,%rsp
  400512:       c3                      ret

セクション .plt の逆アセンブル:

0000000000400520 <atexit@plt-0x10>:
  400520:       ff 35 d2 18 00 00       push   0x18d2(%rip)        # 401df8 <_GLOBAL_OFFSET_TABLE_+0x8>
  400526:       ff 25 d4 18 00 00       jmp    *0x18d4(%rip)        # 401e00 <_GLOBAL_OFFSET_TABLE_+0x10>
  40052c:       0f 1f 40 00             nopl   0x0(%rax)

0000000000400530 <atexit@plt>:
  400530:       ff 25 d2 18 00 00       jmp    *0x18d2(%rip)        # 401e08 <atexit@FBSD_1.0>
  400536:       68 00 00 00 00          push   $0x0
  40053b:       e9 e0 ff ff ff          jmp    400520 <_init+0x20>

0000000000400540 <printf@plt>:
  400540:       ff 25 ca 18 00 00       jmp    *0x18ca(%rip)        # 401e10 <printf@FBSD_1.0>
  400546:       68 01 00 00 00          push   $0x1
  40054b:       e9 d0 ff ff ff          jmp    400520 <_init+0x20>

0000000000400550 <exit@plt>:
  400550:       ff 25 c2 18 00 00       jmp    *0x18c2(%rip)        # 401e18 <exit@FBSD_1.0>
  400556:       68 02 00 00 00          push   $0x2
  40055b:       e9 c0 ff ff ff          jmp    400520 <_init+0x20>

0000000000400560 <rand@plt>:
  400560:       ff 25 ba 18 00 00       jmp    *0x18ba(%rip)        # 401e20 <rand@FBSD_1.6>
  400566:       68 03 00 00 00          push   $0x3
  40056b:       e9 b0 ff ff ff          jmp    400520 <_init+0x20>

0000000000400570 <_init_tls@plt>:
  400570:       ff 25 b2 18 00 00       jmp    *0x18b2(%rip)        # 401e28 <_init_tls@FBSD_1.0>
  400576:       68 04 00 00 00          push   $0x4
  40057b:       e9 a0 ff ff ff          jmp    400520 <_init+0x20>

セクション .text の逆アセンブル:

0000000000400580 <main>:
  400580:       4c 8d 54 24 08          lea    0x8(%rsp),%r10
  400585:       48 83 e4 e0             and    $0xffffffffffffffe0,%rsp
  400589:       41 ff 72 f8             push   -0x8(%r10)
  40058d:       55                      push   %rbp
  40058e:       48 89 e5                mov    %rsp,%rbp
  400591:       41 57                   push   %r15
  400593:       41 bf 80 96 98 00       mov    $0x989680,%r15d
  400599:       41 56                   push   %r14
  40059b:       41 55                   push   %r13
  40059d:       41 54                   push   %r12
  40059f:       41 52                   push   %r10
  4005a1:       53                      push   %rbx
  4005a2:       48 83 ec 40             sub    $0x40,%rsp
  4005a6:       66 2e 0f 1f 84 00 00    cs nopw 0x0(%rax,%rax,1)
  4005ad:       00 00 00
  4005b0:       e8 ab ff ff ff          call   400560 <rand@plt>
  4005b5:       89 45 cc                mov    %eax,-0x34(%rbp)
  4005b8:       e8 a3 ff ff ff          call   400560 <rand@plt>
  4005bd:       89 45 c8                mov    %eax,-0x38(%rbp)
  4005c0:       e8 9b ff ff ff          call   400560 <rand@plt>
  4005c5:       89 45 c4                mov    %eax,-0x3c(%rbp)
  4005c8:       e8 93 ff ff ff          call   400560 <rand@plt>
  4005cd:       89 45 c0                mov    %eax,-0x40(%rbp)
  4005d0:       e8 8b ff ff ff          call   400560 <rand@plt>
  4005d5:       89 45 bc                mov    %eax,-0x44(%rbp)
  4005d8:       e8 83 ff ff ff          call   400560 <rand@plt>
  4005dd:       89 45 b8                mov    %eax,-0x48(%rbp)
  4005e0:       e8 7b ff ff ff          call   400560 <rand@plt>
  4005e5:       89 45 b4                mov    %eax,-0x4c(%rbp)
  4005e8:       e8 73 ff ff ff          call   400560 <rand@plt>
  4005ed:       89 45 b0                mov    %eax,-0x50(%rbp)
  4005f0:       e8 6b ff ff ff          call   400560 <rand@plt>
  4005f5:       89 c3                   mov    %eax,%ebx
  4005f7:       e8 64 ff ff ff          call   400560 <rand@plt>
  4005fc:       41 89 c6                mov    %eax,%r14d
  4005ff:       e8 5c ff ff ff          call   400560 <rand@plt>
  400604:       41 89 c4                mov    %eax,%r12d
  400607:       e8 54 ff ff ff          call   400560 <rand@plt>
  40060c:       89 45 ac                mov    %eax,-0x54(%rbp)
  40060f:       e8 4c ff ff ff          call   400560 <rand@plt>
  400614:       89 45 a8                mov    %eax,-0x58(%rbp)
  400617:       e8 44 ff ff ff          call   400560 <rand@plt>
  40061c:       89 45 a4                mov    %eax,-0x5c(%rbp)
  40061f:       e8 3c ff ff ff          call   400560 <rand@plt>
  400624:       41 89 c5                mov    %eax,%r13d
  400627:       e8 34 ff ff ff          call   400560 <rand@plt>
  40062c:       41 ff cf                dec    %r15d
  40062f:       0f 85 7b ff ff ff       jne    4005b0 <main+0x30>
  400635:       8d 7b 01                lea    0x1(%rbx),%edi
  400638:       c5 f9 6e c7             vmovd  %edi,%xmm0
  40063c:       8b 7d a8                mov    -0x58(%rbp),%edi
  40063f:       8b 4d a4                mov    -0x5c(%rbp),%ecx
  400642:       83 c7 05                add    $0x5,%edi
  400645:       8b 55 ac                mov    -0x54(%rbp),%edx
  400648:       41 83 c5 07             add    $0x7,%r13d
  40064c:       83 c1 06                add    $0x6,%ecx
  40064f:       83 c0 08                add    $0x8,%eax
  400652:       41 83 c4 03             add    $0x3,%r12d
  400656:       c5 f9 6e cf             vmovd  %edi,%xmm1
  40065a:       c4 c1 79 6e ed          vmovd  %r13d,%xmm5
  40065f:       c4 e3 51 22 d0 01       vpinsrd $0x1,%eax,%xmm5,%xmm2
  400665:       83 c2 04                add    $0x4,%edx
  400668:       8b 45 cc                mov    -0x34(%rbp),%eax
  40066b:       41 83 c6 02             add    $0x2,%r14d
  40066f:       c4 e3 71 22 c9 01       vpinsrd $0x1,%ecx,%xmm1,%xmm1
  400675:       c4 c1 79 6e f4          vmovd  %r12d,%xmm6
  40067a:       c5 f1 6c ca             vpunpcklqdq %xmm2,%xmm1,%xmm1
  40067e:       c4 c3 79 22 c6 01       vpinsrd $0x1,%r14d,%xmm0,%xmm0
  400684:       c4 e3 49 22 d2 01       vpinsrd $0x1,%edx,%xmm6,%xmm2
  40068a:       83 c0 08                add    $0x8,%eax
  40068d:       c5 f9 6c c2             vpunpcklqdq %xmm2,%xmm0,%xmm0
  400691:       8b 75 bc                mov    -0x44(%rbp),%esi
  400694:       c4 e3 7d 38 c1 01       vinserti128 $0x1,%xmm1,%ymm0,%ymm0
  40069a:       c5 f9 6e c8             vmovd  %eax,%xmm1
  40069e:       8b 45 c4                mov    -0x3c(%rbp),%eax
  4006a1:       83 c6 04                add    $0x4,%esi
  4006a4:       83 c0 06                add    $0x6,%eax
  4006a7:       8b 7d b4                mov    -0x4c(%rbp),%edi
  4006aa:       8b 55 c8                mov    -0x38(%rbp),%edx
  4006ad:       8b 4d b8                mov    -0x48(%rbp),%ecx
  4006b0:       c5 f9 6e d8             vmovd  %eax,%xmm3
  4006b4:       c5 f9 6e d6             vmovd  %esi,%xmm2
  4006b8:       8b 45 c0                mov    -0x40(%rbp),%eax
  4006bb:       8b 75 b0                mov    -0x50(%rbp),%esi
  4006be:       83 c7 02                add    $0x2,%edi
  4006c1:       83 c2 07                add    $0x7,%edx
  4006c4:       83 c0 05                add    $0x5,%eax
  4006c7:       83 c1 03                add    $0x3,%ecx
  4006ca:       ff c6                   inc    %esi
  4006cc:       c5 f9 6e e7             vmovd  %edi,%xmm4
  4006d0:       c4 e3 59 22 e6 01       vpinsrd $0x1,%esi,%xmm4,%xmm4
  4006d6:       c4 e3 61 22 d8 01       vpinsrd $0x1,%eax,%xmm3,%xmm3
  4006dc:       c4 e3 69 22 d1 01       vpinsrd $0x1,%ecx,%xmm2,%xmm2
  4006e2:       c4 e3 71 22 ca 01       vpinsrd $0x1,%edx,%xmm1,%xmm1
  4006e8:       c5 e9 6c d4             vpunpcklqdq %xmm4,%xmm2,%xmm2
  4006ec:       c5 f1 6c cb             vpunpcklqdq %xmm3,%xmm1,%xmm1
  4006f0:       c4 e3 75 38 ca 01       vinserti128 $0x1,%xmm2,%ymm1,%ymm1
  4006f6:       c5 fd fe c1             vpaddd %ymm1,%ymm0,%ymm0
  4006fa:       c5 f9 6f c8             vmovdqa %xmm0,%xmm1
  4006fe:       48 83 ec 08             sub    $0x8,%rsp
  400702:       48 8d 64 24 f8          lea    -0x8(%rsp),%rsp
  400707:       c4 e3 79 16 c8 01       vpextrd $0x1,%xmm1,%eax
  40070d:       c5 f9 7e 0c 24          vmovd  %xmm1,(%rsp)
  400712:       50                      push   %rax
  400713:       c4 e3 79 16 c8 02       vpextrd $0x2,%xmm1,%eax
  400719:       c4 e3 7d 39 c0 01       vextracti128 $0x1,%ymm0,%xmm0
  40071f:       50                      push   %rax
  400720:       c4 e3 79 16 c1 01       vpextrd $0x1,%xmm0,%ecx
  400726:       c4 e3 79 16 c2 02       vpextrd $0x2,%xmm0,%edx
  40072c:       c4 e3 79 16 c6 03       vpextrd $0x3,%xmm0,%esi
  400732:       c4 c3 79 16 c9 03       vpextrd $0x3,%xmm1,%r9d
  400738:       c4 c1 79 7e c0          vmovd  %xmm0,%r8d
  40073d:       bf 50 0b 40 00          mov    $0x400b50,%edi
  400742:       31 c0                   xor    %eax,%eax
  400744:       c5 f8 77                vzeroupper
  400747:       e8 f4 fd ff ff          call   400540 <printf@plt>
  40074c:       48 83 c4 20             add    $0x20,%rsp
  400750:       31 ff                   xor    %edi,%edi
  400752:       e8 f9 fd ff ff          call   400550 <exit@plt>
  400757:       66 0f 1f 84 00 00 00    nopw   0x0(%rax,%rax,1)
  40075e:       00 00

0000000000400760 <_start>:
  400760:       55                      push   %rbp
  400761:       48 89 e5                mov    %rsp,%rbp
  400764:       41 57                   push   %r15
  400766:       41 56                   push   %r14
  400768:       41 55                   push   %r13
  40076a:       41 54                   push   %r12
  40076c:       53                      push   %rbx
  40076d:       50                      push   %rax
  40076e:       49 89 fe                mov    %rdi,%r14
  400771:       4c 8b 3f                mov    (%rdi),%r15
  400774:       49 63 c7                movslq %r15d,%rax
  400777:       48 8d 1c c7             lea    (%rdi,%rax,8),%rbx
  40077b:       48 83 c3 10             add    $0x10,%rbx
  40077f:       48 83 3d b9 16 00 00    cmpq   $0x0,0x16b9(%rip)        # 401e40 <environ>
  400786:       00
  400787:       75 07                   jne    400790 <_start+0x30>
  400789:       48 89 1d b0 16 00 00    mov    %rbx,0x16b0(%rip)        # 401e40 <environ>
  400790:       49 83 c6 08             add    $0x8,%r14
  400794:       45 85 ff                test   %r15d,%r15d
  400797:       7e 2f                   jle    4007c8 <_start+0x68>
  400799:       49 8b 06                mov    (%r14),%rax
  40079c:       48 85 c0                test   %rax,%rax
  40079f:       74 27                   je     4007c8 <_start+0x68>
  4007a1:       66 2e 0f 1f 84 00 00    cs nopw 0x0(%rax,%rax,1)
  4007a8:       00 00 00
  4007ab:       0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)
  4007b0:       48 89 05 79 16 00 00    mov    %rax,0x1679(%rip)        # 401e30 <__progname>
  4007b7:       48 83 c0 01             add    $0x1,%rax
  4007bb:       0f b6 48 ff             movzbl -0x1(%rax),%ecx
  4007bf:       80 f9 2f                cmp    $0x2f,%cl
  4007c2:       74 ec                   je     4007b0 <_start+0x50>
  4007c4:       84 c9                   test   %cl,%cl
  4007c6:       75 ef                   jne    4007b7 <_start+0x57>
  4007c8:       b8 50 1c 40 00          mov    $0x401c50,%eax
  4007cd:       48 85 c0                test   %rax,%rax
  4007d0:       74 0a                   je     4007dc <_start+0x7c>
  4007d2:       48 89 f7                mov    %rsi,%rdi
  4007d5:       e8 56 fd ff ff          call   400530 <atexit@plt>
  4007da:       eb 68                   jmp    400844 <_start+0xe4>
  4007dc:       48 89 5d d0             mov    %rbx,-0x30(%rbp)
  4007e0:       41 bd 00 05 40 00       mov    $0x400500,%r13d
  4007e6:       eb 0c                   jmp    4007f4 <_start+0x94>
  4007e8:       0f 1f 84 00 00 00 00    nopl   0x0(%rax,%rax,1)
  4007ef:       00
  4007f0:       49 83 c5 18             add    $0x18,%r13
  4007f4:       49 81 fd 00 05 40 00    cmp    $0x400500,%r13
  4007fb:       73 3e                   jae    40083b <_start+0xdb>
  4007fd:       b8 01 00 00 00          mov    $0x1,%eax
  400802:       0f a2                   cpuid
  400804:       89 d7                   mov    %edx,%edi
  400806:       89 ce                   mov    %ecx,%esi
  400808:       31 c0                   xor    %eax,%eax
  40080a:       0f a2                   cpuid
  40080c:       bb 00 00 00 00          mov    $0x0,%ebx
  400811:       b9 00 00 00 00          mov    $0x0,%ecx
  400816:       83 f8 07                cmp    $0x7,%eax
  400819:       72 09                   jb     400824 <_start+0xc4>
  40081b:       31 c9                   xor    %ecx,%ecx
  40081d:       b8 07 00 00 00          mov    $0x7,%eax
  400822:       0f a2                   cpuid
  400824:       41 83 7d 08 25          cmpl   $0x25,0x8(%r13)
  400829:       75 c5                   jne    4007f0 <_start+0x90>
  40082b:       4d 8b 65 00             mov    0x0(%r13),%r12
  40082f:       89 da                   mov    %ebx,%edx
  400831:       41 ff 55 10             call   *0x10(%r13)
  400835:       49 89 04 24             mov    %rax,(%r12)
  400839:       eb b5                   jmp    4007f0 <_start+0x90>
  40083b:       e8 30 fd ff ff          call   400570 <_init_tls@plt>
  400840:       48 8b 5d d0             mov    -0x30(%rbp),%rbx
  400844:       44 89 ff                mov    %r15d,%edi
  400847:       4c 89 f6                mov    %r14,%rsi
  40084a:       48 89 da                mov    %rbx,%rdx
  40084d:       e8 1e 00 00 00          call   400870 <handle_static_init>
  400852:       44 89 ff                mov    %r15d,%edi
  400855:       4c 89 f6                mov    %r14,%rsi
  400858:       48 89 da                mov    %rbx,%rdx
  40085b:       e8 20 fd ff ff          call   400580 <main>
  400860:       89 c7                   mov    %eax,%edi
  400862:       e8 e9 fc ff ff          call   400550 <exit@plt>
  400867:       66 0f 1f 84 00 00 00    nopw   0x0(%rax,%rax,1)
  40086e:       00 00

0000000000400870 <handle_static_init>:
  400870:       55                      push   %rbp
  400871:       48 89 e5                mov    %rsp,%rbp
  400874:       41 57                   push   %r15
  400876:       41 56                   push   %r14
  400878:       41 55                   push   %r13
  40087a:       41 54                   push   %r12
  40087c:       53                      push   %rbx
  40087d:       50                      push   %rax
  40087e:       b8 50 1c 40 00          mov    $0x401c50,%eax
  400883:       48 85 c0                test   %rax,%rax
  400886:       0f 85 e8 00 00 00       jne    400974 <handle_static_init+0x104>
  40088c:       49 89 d6                mov    %rdx,%r14
  40088f:       49 89 f7                mov    %rsi,%r15
  400892:       41 89 fc                mov    %edi,%r12d
  400895:       bf 90 09 40 00          mov    $0x400990,%edi
  40089a:       e8 91 fc ff ff          call   400530 <atexit@plt>
  40089f:       b8 30 1c 40 00          mov    $0x401c30,%eax
  4008a4:       b9 30 1c 40 00          mov    $0x401c30,%ecx
  4008a9:       48 29 c1                sub    %rax,%rcx
  4008ac:       48 8d 41 07             lea    0x7(%rcx),%rax
  4008b0:       48 85 c9                test   %rcx,%rcx
  4008b3:       48 89 ca                mov    %rcx,%rdx
  4008b6:       48 0f 48 d0             cmovs  %rax,%rdx
  4008ba:       48 c1 fa 03             sar    $0x3,%rdx
  4008be:       74 44                   je     400904 <handle_static_init+0x94>
  4008c0:       48 85 c9                test   %rcx,%rcx
  4008c3:       48 0f 49 c1             cmovns %rcx,%rax
  4008c7:       48 c1 f8 03             sar    $0x3,%rax
  4008cb:       48 83 f8 02             cmp    $0x2,%rax
  4008cf:       41 bd 01 00 00 00       mov    $0x1,%r13d
  4008d5:       4c 0f 43 e8             cmovae %rax,%r13
  4008d9:       31 db                   xor    %ebx,%ebx
  4008db:       eb 0c                   jmp    4008e9 <handle_static_init+0x79>
  4008dd:       0f 1f 00                nopl   (%rax)
  4008e0:       48 83 c3 01             add    $0x1,%rbx
  4008e4:       49 39 dd                cmp    %rbx,%r13
  4008e7:       74 1b                   je     400904 <handle_static_init+0x94>
  4008e9:       48 8b 04 dd 30 1c 40    mov    0x401c30(,%rbx,8),%rax
  4008f0:       00
  4008f1:       48 83 f8 02             cmp    $0x2,%rax
  4008f5:       72 e9                   jb     4008e0 <handle_static_init+0x70>
  4008f7:       44 89 e7                mov    %r12d,%edi
  4008fa:       4c 89 fe                mov    %r15,%rsi
  4008fd:       4c 89 f2                mov    %r14,%rdx
  400900:       ff d0                   call   *%rax
  400902:       eb dc                   jmp    4008e0 <handle_static_init+0x70>
  400904:       e8 f7 fb ff ff          call   400500 <_init>
  400909:       b8 30 1c 40 00          mov    $0x401c30,%eax
  40090e:       b9 30 1c 40 00          mov    $0x401c30,%ecx
  400913:       48 29 c1                sub    %rax,%rcx
  400916:       48 8d 41 07             lea    0x7(%rcx),%rax
  40091a:       48 85 c9                test   %rcx,%rcx
  40091d:       48 89 ca                mov    %rcx,%rdx
  400920:       48 0f 48 d0             cmovs  %rax,%rdx
  400924:       48 c1 fa 03             sar    $0x3,%rdx
  400928:       74 4a                   je     400974 <handle_static_init+0x104>
  40092a:       48 85 c9                test   %rcx,%rcx
  40092d:       48 0f 49 c1             cmovns %rcx,%rax
  400931:       48 c1 f8 03             sar    $0x3,%rax
  400935:       48 83 f8 02             cmp    $0x2,%rax
  400939:       41 bd 01 00 00 00       mov    $0x1,%r13d
  40093f:       4c 0f 43 e8             cmovae %rax,%r13
  400943:       31 db                   xor    %ebx,%ebx
  400945:       eb 12                   jmp    400959 <handle_static_init+0xe9>
  400947:       66 0f 1f 84 00 00 00    nopw   0x0(%rax,%rax,1)
  40094e:       00 00
  400950:       48 83 c3 01             add    $0x1,%rbx
  400954:       49 39 dd                cmp    %rbx,%r13
  400957:       74 1b                   je     400974 <handle_static_init+0x104>
  400959:       48 8b 04 dd 30 1c 40    mov    0x401c30(,%rbx,8),%rax
  400960:       00
  400961:       48 83 f8 02             cmp    $0x2,%rax
  400965:       72 e9                   jb     400950 <handle_static_init+0xe0>
  400967:       44 89 e7                mov    %r12d,%edi
  40096a:       4c 89 fe                mov    %r15,%rsi
  40096d:       4c 89 f2                mov    %r14,%rdx
  400970:       ff d0                   call   *%rax
  400972:       eb dc                   jmp    400950 <handle_static_init+0xe0>
  400974:       48 83 c4 08             add    $0x8,%rsp
  400978:       5b                      pop    %rbx
  400979:       41 5c                   pop    %r12
  40097b:       41 5d                   pop    %r13
  40097d:       41 5e                   pop    %r14
  40097f:       41 5f                   pop    %r15
  400981:       5d                      pop    %rbp
  400982:       c3                      ret
  400983:       66 2e 0f 1f 84 00 00    cs nopw 0x0(%rax,%rax,1)
  40098a:       00 00 00
  40098d:       0f 1f 00                nopl   (%rax)

0000000000400990 <finalizer>:
  400990:       55                      push   %rbp
  400991:       48 89 e5                mov    %rsp,%rbp
  400994:       53                      push   %rbx
  400995:       50                      push   %rax
  400996:       b9 30 1c 40 00          mov    $0x401c30,%ecx
  40099b:       b8 30 1c 40 00          mov    $0x401c30,%eax
  4009a0:       48 29 c8                sub    %rcx,%rax
  4009a3:       48 8d 58 07             lea    0x7(%rax),%rbx
  4009a7:       48 85 c0                test   %rax,%rax
  4009aa:       48 89 c1                mov    %rax,%rcx
  4009ad:       48 0f 48 cb             cmovs  %rbx,%rcx
  4009b1:       48 c1 f9 03             sar    $0x3,%rcx
  4009b5:       75 0b                   jne    4009c2 <finalizer+0x32>
  4009b7:       48 83 c4 08             add    $0x8,%rsp
  4009bb:       5b                      pop    %rbx
  4009bc:       5d                      pop    %rbp
  4009bd:       e9 72 01 00 00          jmp    400b34 <_fini>
  4009c2:       48 85 c0                test   %rax,%rax
  4009c5:       48 0f 49 d8             cmovns %rax,%rbx
  4009c9:       48 c1 fb 03             sar    $0x3,%rbx
  4009cd:       eb 06                   jmp    4009d5 <finalizer+0x45>
  4009cf:       90                      nop
  4009d0:       48 85 db                test   %rbx,%rbx
  4009d3:       74 e2                   je     4009b7 <finalizer+0x27>
  4009d5:       48 8b 04 dd 28 1c 40    mov    0x401c28(,%rbx,8),%rax
  4009dc:       00
  4009dd:       48 83 c3 ff             add    $0xffffffffffffffff,%rbx
  4009e1:       48 83 f8 02             cmp    $0x2,%rax
  4009e5:       72 e9                   jb     4009d0 <finalizer+0x40>
  4009e7:       ff d0                   call   *%rax
  4009e9:       eb e5                   jmp    4009d0 <finalizer+0x40>
  4009eb:       cc                      int3
  4009ec:       0f 1f 40 00             nopl   0x0(%rax)

00000000004009f0 <deregister_tm_clones>:
  4009f0:       48 8d 3d 49 14 00 00    lea    0x1449(%rip),%rdi        # 401e40 <environ>
  4009f7:       48 8d 05 42 14 00 00    lea    0x1442(%rip),%rax        # 401e40 <environ>
  4009fe:       48 39 f8                cmp    %rdi,%rax
  400a01:       74 15                   je     400a18 <deregister_tm_clones+0x28>
  400a03:       48 8b 05 d6 13 00 00    mov    0x13d6(%rip),%rax        # 401de0 <_ITM_deregisterTMCloneTable@Base>
  400a0a:       48 85 c0                test   %rax,%rax
  400a0d:       74 09                   je     400a18 <deregister_tm_clones+0x28>
  400a0f:       ff e0                   jmp    *%rax
  400a11:       0f 1f 80 00 00 00 00    nopl   0x0(%rax)
  400a18:       c3                      ret
  400a19:       0f 1f 80 00 00 00 00    nopl   0x0(%rax)

0000000000400a20 <register_tm_clones>:
  400a20:       48 8d 3d 19 14 00 00    lea    0x1419(%rip),%rdi        # 401e40 <environ>
  400a27:       48 8d 35 12 14 00 00    lea    0x1412(%rip),%rsi        # 401e40 <environ>
  400a2e:       48 29 fe                sub    %rdi,%rsi
  400a31:       48 89 f0                mov    %rsi,%rax
  400a34:       48 c1 ee 3f             shr    $0x3f,%rsi
  400a38:       48 c1 f8 03             sar    $0x3,%rax
  400a3c:       48 01 c6                add    %rax,%rsi
  400a3f:       48 d1 fe                sar    %rsi
  400a42:       74 14                   je     400a58 <register_tm_clones+0x38>
  400a44:       48 8b 05 9d 13 00 00    mov    0x139d(%rip),%rax        # 401de8 <_ITM_registerTMCloneTable@Base>
  400a4b:       48 85 c0                test   %rax,%rax
  400a4e:       74 08                   je     400a58 <register_tm_clones+0x38>
  400a50:       ff e0                   jmp    *%rax
  400a52:       66 0f 1f 44 00 00       nopw   0x0(%rax,%rax,1)
  400a58:       c3                      ret
  400a59:       0f 1f 80 00 00 00 00    nopl   0x0(%rax)

0000000000400a60 <__do_global_dtors_aux>:
  400a60:       80 3d e1 13 00 00 00    cmpb   $0x0,0x13e1(%rip)        # 401e48 <completed.1>
  400a67:       75 67                   jne    400ad0 <__do_global_dtors_aux+0x70>
  400a69:       55                      push   %rbp
  400a6a:       48 8d 05 cf 11 00 00    lea    0x11cf(%rip),%rax        # 401c40 <__DTOR_LIST__>
  400a71:       48 89 e5                mov    %rsp,%rbp
  400a74:       41 54                   push   %r12
  400a76:       49 89 c4                mov    %rax,%r12
  400a79:       53                      push   %rbx
  400a7a:       48 8d 1d c7 11 00 00    lea    0x11c7(%rip),%rbx        # 401c48 <__DTOR_END__>
  400a81:       48 29 c3                sub    %rax,%rbx
  400a84:       48 8b 05 c5 13 00 00    mov    0x13c5(%rip),%rax        # 401e50 <dtor_idx.0>
  400a8b:       48 c1 fb 03             sar    $0x3,%rbx
  400a8f:       48 83 eb 01             sub    $0x1,%rbx
  400a93:       48 39 d8                cmp    %rbx,%rax
  400a96:       73 23                   jae    400abb <__do_global_dtors_aux+0x5b>
  400a98:       0f 1f 84 00 00 00 00    nopl   0x0(%rax,%rax,1)
  400a9f:       00
  400aa0:       48 83 c0 01             add    $0x1,%rax
  400aa4:       48 89 05 a5 13 00 00    mov    %rax,0x13a5(%rip)        # 401e50 <dtor_idx.0>
  400aab:       41 ff 14 c4             call   *(%r12,%rax,8)
  400aaf:       48 8b 05 9a 13 00 00    mov    0x139a(%rip),%rax        # 401e50 <dtor_idx.0>
  400ab6:       48 39 d8                cmp    %rbx,%rax
  400ab9:       72 e5                   jb     400aa0 <__do_global_dtors_aux+0x40>
  400abb:       e8 30 ff ff ff          call   4009f0 <deregister_tm_clones>
  400ac0:       5b                      pop    %rbx
  400ac1:       41 5c                   pop    %r12
  400ac3:       c6 05 7e 13 00 00 01    movb   $0x1,0x137e(%rip)        # 401e48 <completed.1>
  400aca:       5d                      pop    %rbp
  400acb:       c3                      ret
  400acc:       0f 1f 40 00             nopl   0x0(%rax)
  400ad0:       c3                      ret
  400ad1:       66 66 2e 0f 1f 84 00    data16 cs nopw 0x0(%rax,%rax,1)
  400ad8:       00 00 00 00
  400adc:       0f 1f 40 00             nopl   0x0(%rax)

0000000000400ae0 <frame_dummy>:
  400ae0:       e9 3b ff ff ff          jmp    400a20 <register_tm_clones>
  400ae5:       66 2e 0f 1f 84 00 00    cs nopw 0x0(%rax,%rax,1)
  400aec:       00 00 00
  400aef:       90                      nop

0000000000400af0 <__do_global_ctors_aux>:
  400af0:       48 8b 05 39 11 00 00    mov    0x1139(%rip),%rax        # 401c30 <__CTOR_LIST__>
  400af7:       48 83 f8 ff             cmp    $0xffffffffffffffff,%rax
  400afb:       74 33                   je     400b30 <__do_global_ctors_aux+0x40>
  400afd:       55                      push   %rbp
  400afe:       48 89 e5                mov    %rsp,%rbp
  400b01:       53                      push   %rbx
  400b02:       48 8d 1d 27 11 00 00    lea    0x1127(%rip),%rbx        # 401c30 <__CTOR_LIST__>
  400b09:       48 83 ec 08             sub    $0x8,%rsp
  400b0d:       0f 1f 00                nopl   (%rax)
  400b10:       ff d0                   call   *%rax
  400b12:       48 8b 43 f8             mov    -0x8(%rbx),%rax
  400b16:       48 83 eb 08             sub    $0x8,%rbx
  400b1a:       48 83 f8 ff             cmp    $0xffffffffffffffff,%rax
  400b1e:       75 f0                   jne    400b10 <__do_global_ctors_aux+0x20>
  400b20:       48 8b 5d f8             mov    -0x8(%rbp),%rbx
  400b24:       c9                      leave
  400b25:       c3                      ret
  400b26:       66 2e 0f 1f 84 00 00    cs nopw 0x0(%rax,%rax,1)
  400b2d:       00 00 00
  400b30:       c3                      ret
  400b31:       0f 1f 00                nopl   (%rax)

セクション .fini の逆アセンブル:

0000000000400b34 <_fini>:
  400b34:       48 83 ec 08             sub    $0x8,%rsp
  400b38:       e8 23 ff ff ff          call   400a60 <__do_global_dtors_aux>
  400b3d:       48 83 c4 08             add    $0x8,%rsp
  400b41:       c3                      ret

うん。今度は、最適化オプションを利用してもAVXが利用されている

raichi@lena:~/works/R-MIX/TP/tp113 % time ./a.out
ベクトルA + ベクトルB = [-2000199036, -828670540, -277146058, 1109089554, 1912549470, 1446969634, -2107940384, -1895884243]
1.136u 0.000s 0:01.13 100.0%    5+168k 0+0io 0pf+0w
raichi@lena:~/works/R-MIX/TP/tp113 % time ./a.out
ベクトルA + ベクトルB = [-2000199036, -828670540, -277146058, 1109089554, 1912549470, 1446969634, -2107940384, -1895884243]
1.127u 0.000s 0:01.12 100.0%    5+168k 0+0io 0pf+0w
raichi@lena:~/works/R-MIX/TP/tp113 % time ./a.out
ベクトルA + ベクトルB = [-2000199036, -828670540, -277146058, 1109089554, 1912549470, 1446969634, -2107940384, -1895884243]
1.118u 0.007s 0:01.12 99.1%     5+168k 0+0io 0pf+0w

若干?気持ち?早くなった?って程度ですね。

今回は、サンプルで実施してみましたが、実際に目的をもって記載する場合は、オプション等々も考慮して書いていこうと思います

っと、ここまでがプログラムの話、次は、懐古厨の話

第4話「いいんだよ!」

ちゃんと聞くと、立木さんのように聞こえる。(初回は、福島さんの声で聞こえました)

前回、守くんが会社を飛び出して、「タイムトラベラーならば、干渉するな」的な発言をされて終了しましたが、彼女アホなのか結構色々と今回もやらかしました

一応、この時は、守くんの言葉を守り、未来の物(自分の絵)のことを、ごまかしましたが、

ここ(じゃんがら)であっさり暴露。この時代、タペストリーと言っても分からないだろうけど、おまけのラインナップが、もう「美少女」じゃねぇだろっという。まぁ、こんかいのBDもある意味、特典(カバーソング)につられた所があるので、「おまけ」大事だとは思います。

次回、コノハのエロゲーコレクションの変化が気になります。

しかし、外でガッツリ寝れるのを見ていると、ポジティブおばけすぎますね。どんな修羅場も潜り抜けられそう。

今回は、AT互換機と国民機がでてました。

どちらも刻印がありませんが、外で設置されたのは、32bit?国民機でしょうか。

左側は、NXでしょうか。今でもWindowsがいいとは、まったく思えませんが、絵描きの人たちには、色数が増えるのはうれしいのでしょうね。

たぶん、このシーンで、「Windowsは、音がいい」という印象を付けようとしているかと思いますが、そもそもBeepと普通のサウンドドライバを使ってスピーカ(アンプつき)からでた音に違いがあるのは当たり前で同じ土俵にするのは、どうかと。ハーレムブレードのOPも良い音でしたよ。

あと、ココですごいのが、98で音声を作っているのですが、ディスクが入ってない所と、黒コードが3本(1本は電源、1本はモニタケーブルとして、1本が不明)からN88(ROM)からBeepで、音声(もどき)を出していると想定されます。すごいっすよ、守くん

そして、極めつけの守くんのすごさ。

守くん、98のエロゲー及び趣味のコードは、MS-DOSでアセンブラで書いていましたが、WindowsだとVCを使っている。

アレだけ渋っりぐわいでしたが、プログラマの性で、勉強していたというこだと思いますが、マルチプロセス、オブジェクト指向等々色々と変わった中で、短期間に商品になるものが作成できるのは鬼っすね。私も熟練した今なら構造化プログラムとオブジェクトプログラムを同時に作ることはできますが、昔のこの時点ではできないっすよ。

あと、タブレットの電源周り。

絵からすと、タイプAかな?弱電もできて、おそろしい。

次は、1999年に移動するのでしょうか。

今回の写真、今後未来に行ったら、バックトゥザフューチャーみたく、自分やアルコールソフトのメンバーの下半身が消えていったりすでしょうか。

そろそろこのあたりの時間転移に関わっていそうな人たちの露出があるのでしょうか。

男性は、杉田さんっすかね?