ошибка компиляции в функции, возвращающей структуру в C - PullRequest
1 голос
/ 02 декабря 2010

Я получаю эту ошибку компиляции:

ошибка: ожидается ‘;’, ‘,’ или ‘)’ до символа ‘&’

в отмеченной строке ниже:

//128 bit vector struct (4 integers)
typedef struct {
  int w, x, y, z;
} iVector4;

iVector4 SSEadd(iVector4 &v1, iVector4 &v2)  // <-- this line
{
  iVector4 vr;
  asm
  {
    MOV EAX v1
    MOV EBX v2
    //
    MOVUPS XMM0, [EAX]
    MOVUPS XMM1, [EBX]
    //
    PADDD XMM0 XMM1
    MOVUPS [rv]
  }
  return rv;
}

Я действительно не вижу, что не так: в чем проблема?

EDIT:

Привет, спасибо за все ответы.

Я использую gcc в качестве компилятора, и я понимаю, что предоставленный мною ассемблерный код также был неверным. Мне было интересно, лучше ли использовать встроенные функции из -msse / -msse2.

Кроме того, каков наиболее эффективный способ загрузки и извлечения значений из вектора, такого как v4si?

Я считаю, что загрузка и извлечение из вектора - это дорогостоящая операция.

Когда вы говорите sse intrinsics, что именно вы имели в виду?

Спасибо за помощь.

Ответы [ 4 ]

7 голосов
/ 02 декабря 2010

C не имеет ссылок.Вы должны скомпилировать как C ++ для тех.

4 голосов
/ 02 декабря 2010

C не имеет ссылок. Вместо этого вы должны использовать указатель или C ++.

iVector4 SSEadd(iVector4 *v1, iVector4 *v2)

Теперь следующий вопрос - вы можете вернуть объекты в C? Мой C ржавый. Если это не так, вам нужно:

void  SSEadd(iVector4 *v1, iVector4 *v2, iVector4 *vOut)

РЕДАКТИРОВАТЬ: Как указал Джастин, это возможно, поэтому вам не нужно идти по этому пути. Вы все еще можете, хотя - в зависимости от обстоятельств, это может быть более производительным.

1 голос
/ 02 декабря 2010

Вы также можете рассмотреть возможность использования встроенных функций SSE вместо того, что выглядит как вы.

1 голос
/ 02 декабря 2010

Я думаю, что ваше определение функции должно быть:

iVector4 SSEadd(iVector4 *v1, iVector4 *v2);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...