Поиск имени "__rotatel4" не нашел объявление - PullRequest
0 голосов
/ 21 ноября 2018

Я работаю над GCC111 из фермы компиляции.Это AIX 7.1, POWER7 с IBM XLC 12.1.Я пытаюсь использовать __rotatel4:

$ cat test.cxx
#include <cstdlib>

unsigned int Foo (unsigned int x)
{
  return __rotatel4(x, 4U);
}

Результат компиляции:

$ xlC -O3 -c test.cxx
"test.cxx", line 5.10: 1540-0274 (S) The name lookup for "__rotatel4" did not find a declaration.

Согласно руководству по компилятору IBM XL C / C ++ для AIX, V12.1 (стр. 486) встроенные функции должны быть доступны.Вот прототип, и он не имеет ограничений, таких как POWER6:

unsigned int __rotatel4 (unsigned int rs, unsigned int shift)

Добавление -qarch=pwr7 и / или -D_XOPEN_SOURCE=600 привело к той же ошибке.Я обнаружил неожиданную ошибку при поиске имени "1540-0274 (S)" при компиляции кода с шаблонами , но, похоже, она здесь не применима.

Как использовать __rotatel4 впрограмма?


gcc111$ oslevel -s
7100-03-02-1412

gcc111$ xlC -qversion
IBM XL C/C++ for AIX, V12.1 (5765-J02, 5725-C72)
Version: 12.01.0000.0000

1 Ответ

0 голосов
/ 21 ноября 2018

Для XL C / C ++ V12.1 вам необходимо включить <builtins.h>:

$ cat aaa.cpp
#include <cstdlib>

unsigned int Foo (unsigned int x)
{
  return __rotatel4(x, 4U);
}
$ xlC aaa.cpp -c
"aaa.cpp", line 5.10: 1540-0274 (S) The name lookup for "__rotatel4" did not find a declaration.
$ cat aaa.cpp
#include <cstdlib>
#include <builtins.h>

unsigned int Foo (unsigned int x)
{
  return __rotatel4(x, 4U);
}
$ xlC aaa.cpp -c
$

Для предстоящего выпуска 16.1, который находится в бета-версии, он вам не нужен.(Это будет работать с и без него.)

...