MUDA: Vector type is not allowed as return type for external function.

by syoyo

今まで, MUDA では


// NG
vec func(vec a)
{
    return a + a;
}

という関数の戻り値に vector 型を指定できるようにしていたのですが、
C とのインターフェイスを考えると, これが以外とめんどくさい.
C 側にネイティブ型(__m128 とか)が見えてしまう.
かといって union or struct で隠すと union or struct 返しになって
面倒だし C コンパイラにとっても最適化しづらくなる.

そんなわけでスカラ型しか関数の戻り値の型として指定できないようにしました.

vector 型を返したい場合は、out 引数を使って以下のようにします.


void func(out vec ret, vec a)
{
    ret = a + a;
}

ただし、static や inline の付いた関数では vector 型はサポートされます.


// OK
static vec func(vec a)
{
    return a + a;
}

external な MUDA 関数(C から見える関数) でなければ、
C とのインターフェイスを考えなくていいので、
内部では void func(out vec ret, vec a) というような関数に変えて
コードエミットするということができるので.

Advertisements