LINUX.ORG.RU

Операции с векторами в gcc 4.9. ЧЯДНТ?

 ,


0

1

Вот хочу впилить поддержку вычислений упакованных чиселок с SSE в свою вокселе-библиотеку и посмотреть, будет ли профит.

У меня gcc4.9

Пишу такой код:

#include <xmmintrin.h>
...
typedef union
{
    float c[4];
    __v4sf vect;
} dot __attribute__ ((aligned (16)));
...
void calc_bounding_box (const dot *set, unsigned int n, dot *min, dot *max)
{
    int i;

    min->vect = set[0].vect;
    max->vect = set[0].vect;
    
    for (i=1; i<n; i++)
    {
        min->vect = __buildin_ia32_minps (min->vect, set[i].vect);
        max->vect = __buildin_ia32_maxps (max->vect, set[i].vect);
    }
}

А при компиляции рядом с min(/max)->vect = : error: incompatible types when assigning to type '__v4sf' from type 'int'.

Вот и не могу понять, откуда там int?

Из xmmintrin.h:

typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
...
extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_min_ps (__m128 __A, __m128 __B)
{
  return (__m128) __builtin_ia32_minps ((__v4sf)__A, (__v4sf)__B);
}

extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_max_ps (__m128 __A, __m128 __B)
{
  return (__m128) __builtin_ia32_maxps ((__v4sf)__A, (__v4sf)__B);
}

Вроде этот __m128 вполне можно прировнять __v4sf, так почему же не работает? На всякий случай, вся «программа»:

http://pastebin.com/Hz4xhg3H

А эти векторы в gcc это некий bleeding edge, или у них всё более-менее устаканилось? По крайней мере с 4.6 и -O0 прога отрабатывает неверно (хотя вроде моей вины нет). С -O2 работает. В 4.9 работает всегда.

Это если убрать calc_bounding_box, естественно.

HNO-Arzt_
() автор топика
Ответ на: комментарий от buddhist

Ну так может именно эти вектора там устаканились и из версии в версию не меняются.

HNO-Arzt_
() автор топика

gcc 4.9. ЧЯДНТ?

недаром говорят, что ответ содержится в вопросе

anonymous
()
Ответ на: комментарий от HNO-Arzt_

Да какая разница?

gcc 4.9 ещё даже не бета

тебе папаша не объяснял почему нежелательно так делать?

anonymous
()
Ответ на: комментарий от anonymous

Ты мудак или как? Я написал, что на 4.6 тоже пробовал. А для тебя собираю ещё и 4.8

HNO-Arzt_
() автор топика

Забавно. Модераторы всю интригу вырезали, и как было найдено решение темы, и почему TS ушел с лора.

anonymous
()
Ответ на: комментарий от anonymous

А почему он ушел?

Решение в криворукости аффтара. Он олбанским не владеет обдалбос. Вообще не понимаю как можно написать buildin вместо builtin.

anonymous
()
Ответ на: комментарий от anonymous

Вообще не понимаю как можно написать buildin вместо builtin.

Ну, вообще-то d и t находятся рядом, а созвучные литеры при слепом наборе часто подменяются.

Deleted
()
Ответ на: комментарий от anonymous

build и built - это одно слово, просто в разных временных формах.

gnu-eabi
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.