Hello,SIMD World!!

x86アセンブラ言語入門を買ったので、早速SIMDを体験したいと思います。

いくぞ128ビットな世界へ〜。

Pentium4以上、gasは最新版をお使い下さいませ。

hello.s
.data
        .align 16
m128:   .long 0x12,0x34,0x56,0x78

.text
.global main
main:   movapd m128,%xmm7
        mov $0,%eax
        ret

movしてみました。コンパイルしてみまっす。

% gcc -g -o hello hello.s

ほっ。無事コンパイル出来た。

gdbデバッグしまっす。

% gdb hello
(gdb) b main
(gdb) r
(gdb) si
(gdb) i all-registers
...(略
xmm7           {
  v4_float = {0x0, 0x0, 0x0, 0x0},
  v2_double = {0x0, 0x0},
  v16_int8 = {0x12, 0x0, 0x0, 0x0, 0x34, 0x0, 0x0, 0x0, 0x56, 0x0, 0x0,
    0x0, 0x78, 0x0, 0x0, 0x0},
  v8_int16 = {0x12, 0x0, 0x34, 0x0, 0x56, 0x0, 0x78, 0x0},
  v4_int32 = {0x12, 0x34, 0x56, 0x78},
  v2_int64 = {0x3400000012, 0x7800000056},
  uint128 = 0x00000078000000560000003400000012
}

おぉぉぉぉ。128ビットなげぇぇぇぇぇ。

128ビットを使うことはまず無さそうですが、並列演算には使えそうですね。

あぁ〜。ぐりぐりしてぇ〜。