Встроенные элементы GCC: есть ли список, показывающий, какие платформы поддерживаются? - PullRequest
4 голосов
/ 19 октября 2011

Есть ли сайт, на котором перечислены различные платформы и их поддержка атомарных встроенных компонентов GCC для различных версий GCC?

EDIT:

Чтобы быть более понятным: GCC добавляет _ sync ... в качестве встроенных функций для платформ, которые он поддерживает. На всех других платформах он сохраняет их как обычные объявления функций, но не предоставляет реализацию. Это должно быть сделано какой-то структурой.

Таким образом, вопрос: для каких платформ GCC предоставляет какие встроенные компоненты без необходимости добавлять реализацию функции?

Ответы [ 2 ]

3 голосов
/ 25 октября 2011

Я не знаю, есть ли такой список, однако http://gcc.gnu.org/projects/cxx0x.html говорит, что атомы поддерживаются начиная с GCC 4.4.

GCC libstdc ++ реализует поверх встроенных функций `__sync_fetch_and_add 'и друзья (http://gcc.gnu.org/onlinedocs/gcc-4.6.1/gcc/Atomic-Builtins.html).

Эти функции расширяются либо с использованием специфичных для машины расширителей в описании машины цели (обычно в файле с именем `sync.md '), либо без таких расширителей, используя цикл CAS.Если наличие файла `sync.md 'является указанием на правильную поддержку атомарности, то вы можете рассчитывать на MIPS, i386, ARM, BlackFin, Alpha, PowerPC, IA64 и Sparc.

2 голосов
/ 25 июня 2014

[Хотя это старый вопрос, я подумал, что мне следует обновить и завершить ответ]

Мне не известны таблицы версий для каждой архитектуры и версии gcc, описывающие поддерживаемые встроенныеins.

Встроенные в __sync функции gcc существуют начиная с версии 4.1 (см., например, gcc 4.1.2 руководство . Как указано здесь:

Не все операции поддерживаются всеми целевыми процессорами. Если конкретная операция не может быть реализована на целевом процессоре, будет сгенерировано предупреждение и сгенерирован вызов внешней функции. Внешняя функция будет иметь то же имя, что и встроенная, сдополнительный суффикс `_n ', где n - размер типа данных.

Таким образом, когда нет реализации для конкретной архитектуры, появится предупреждение о компиляции и, я думаю, ссылка-time ошибка, если только вы не предоставили требуемую функцию с соответствующим именем.

После gcc 4.7 есть также встроенные встроенные __atomic и встроенные __syncs устарели.Например, посмотрите, как Fedora использует gcc __sync и __atomic здесь

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