D 1.0   D 2.0
About Japanese Translation

Last update Tue Sep 2 19:07:10 2008

std.intrinsic

コンパイラ組み込みの関数です。

Intrinsic の関数はコンパイラ組み込みの関数です。 外部関数で扱うには非効率な、 特定のCPU機能の恩恵を受けるためのものです。 コンパイラの最適化ルーチンとコード生成器は intrinsic 関数と完全に連携して、 その力を十分に活用します。 結果、驚くほどのスピードアップに結びつくことがあります。

License:
Public Domain

Authors:
Walter Bright

int bsf(size_t v);
v の bit 0 から始めて、 最初に立っているbitを探します。

Returns:
最初に立っているビット番号。 vが0の場合の結果は未定義です。

int bsr(size_t v);
v の最上位ビットから始めて、 最初に立っている bit を探します。

Returns:
最初に立っているビット番号。 vが0の場合の結果は未定義です。

Example:
 import std.stdio;
 import std.intrinsic;

 int main()
 {
     uint v;
     int x;

     v = 0x21;
     x = bsf(v);
     writefln("bsf(x%x) = %d", v, x);
     x = bsr(v);
     writefln("bsr(x%x) = %d", v, x);
     return 0;
 }


Output:
bsf(x21) = 0
bsr(x21) = 5

int bt(uint* p, size_t bitnum);
ビット判定

int btc(uint* p, size_t bitnum);
ビットを判定してから反転

int btr(uint* p, size_t bitnum);
ビット判定してから、そのビットを0にする

int bts(uint* p, size_t bitnum);
ビット判定してからそのビットを1にセット(Test and Set)

Params:
uint* p uint の配列を指す NULL でないポインタ
index ビット番号で、p[0] の bit 0 から始まって増加していく番号です。 言い方を変えると、次のビットに対応します。。
p[index / (uint.sizeof*8)] & (1 << (index & ((uint.sizeof*8) - 1)))

Returns:
ビットが立っていたら非0、 いなければ0を返します。

Example:
import std.stdio;
import std.intrinsic;

int main()
{
    size_t array[2];

    array[0] = 2;
    array[1] = 0x100;

    writefln("btc(array, 35) = %d", <b>btc</b>(array, 35));
    writefln("array = [0]:x%x, [1]:x%x", array[0], array[1]);

    writefln("btc(array, 35) = %d", <b>btc</b>(array, 35));
    writefln("array = [0]:x%x, [1]:x%x", array[0], array[1]);

    writefln("bts(array, 35) = %d", <b>bts</b>(array, 35));
    writefln("array = [0]:x%x, [1]:x%x", array[0], array[1]);

    writefln("btr(array, 35) = %d", <b>btr</b>(array, 35));
    writefln("array = [0]:x%x, [1]:x%x", array[0], array[1]);

    writefln("bt(array, 1) = %d", <b>bt</b>(array, 1));
    writefln("array = [0]:x%x, [1]:x%x", array[0], array[1]);

    return 0;
}


Output:
btc(array, 35) = 0
array = [0]:x2, [1]:x108
btc(array, 35) = -1
array = [0]:x2, [1]:x100
bts(array, 35) = 0
array = [0]:x2, [1]:x108
btr(array, 35) = -1
array = [0]:x2, [1]:x100
bt(array, 1) = -1
array = [0]:x2, [1]:x100


uint bswap(uint v);
4バイトのuint型中の各バイトを、前と後ろで交換します。つまり byte0 は byte3 になり、byte1 は byte2 になり、 byte2 は byte1 になり、byte3 は byte0 になります。

ubyte inp(uint port_address);
ushort inpw(uint port_address);
uint inpl(uint port_address);
I/Oポート port_address を読みとります。

ubyte outp(uint port_address, ubyte value);
ushort outpw(uint port_address, ushort value);
uint outpl(uint port_address, uint value);
I/Oポート port_addressvalue を書き込みその値を返します。