Comments (11)
На v4 нет 128-bit атомарных операций, для v5 и далее - есть, так в МЦСТ ответили и баг закрыли. Версию архитектуры можно узнать на этапе компиляции по значению макроса __iset__
.
from libatomic_ops.
Tip for me: code of libatomic - https://github.com/OpenE2K/gcc/tree/gcc-runtime-mcst/libatomic
from libatomic_ops.
На v4 нет 128-bit атомарных операций, для v5 и далее - есть, так в МЦСТ ответили и баг закрыли. Версию архитектуры можно узнать на этапе компиляции по значению макроса
__iset__
.
Got it. Thank you! I will do a compile-time check based on the macro.
from libatomic_ops.
Note: there was also a suggestion to use a runtime check (`__builtin_cpu_arch()') but according to the design of libatomic_ops availability of a particular atomic operation should be detectable thru a macro.
from libatomic_ops.
И еще добавили, что в v4 есть атомарные 128-бит запись/чтение, это для указателей 128-бит режима. Но нет эквивалента exchange/compare_exchange на 128 бит.
from libatomic_ops.
И еще добавили, что в v4 есть атомарные 128-бит запись/чтение, это для указателей 128-бит режима. Но нет эквивалента exchange/compare_exchange на 128 бит.
О, спасибо, это понадобится когда буду добавлять поддержку ЗР в libgc.
from libatomic_ops.
Предлагают вместо __iset__
использовать проверку на макрос __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16
для определения наличия интринсика в компиляторе, для Clang тоже работает.
from libatomic_ops.
Предлагают вместо
__iset__
использовать проверку на макрос__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16
для определения наличия интринсика в компиляторе, для Clang тоже работает.
I agree that about gcc your suggestion is good, but not for clang: clang -m64 -dM -E ... | grep GCC_HAVE_SYNC
gives nothing.
But I will use it at least for gcc. Thank you!
from libatomic_ops.
Для Clang-9 на x86_64 это работает (https://godbolt.org/z/P7Gqoa3qM):
#ifndef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8
#error
#endif
На 16 байт у x86_64 нет.
В Clang от МЦСТ интринсики вроде есть, а макроса нет. На это баг уже завели.
Но это был совет от МЦСТ с этим макросом, я бы предпочёл использовать __iset__
, чем непонятные макросы от компилятора.
from libatomic_ops.
Для Clang-9 на x86_64 это работает (https://godbolt.org/z/P7Gqoa3qM):
На 16 байт у x86_64 нет.
Да, интринсик есть для 16 байт а макроса нет. У Clang.
from libatomic_ops.
В Clang от МЦСТ интринсики вроде есть, а макроса нет. На это баг уже завели.
There 2 extra issues with clang 16-byte compare and exchange (I mean difference from gcc) besides absence of the feature macro:
src/atomic_ops/sysdeps/gcc/generic.h:227:19: warning: large atomic operation may incur significant performance penalty; the access size (16 bytes) exceeds the max lock-free size (8 bytes) [-Watomic-alignment]
return (int)__atomic_compare_exchange_n(&addr->AO_whole,
^
1 warning generated.
/usr/bin/ld: /tmp/atomic_ops_stack-eb3351.o: в функции «AO_stack_pop_acquire»:
-:(.text+0x26c): неопределённая ссылка на «__atomic_compare_exchange»
/usr/bin/ld: -:(.text+0x36c): неопределённая ссылка на «__atomic_compare_exchange»
clang-13: error: linker command failed with exit code 1 (use -v to see invocation)
As a workaround this could be used by client: CFLAGS=-Wno-atomic-alignment LDFLAGS=-latomic
from libatomic_ops.
Related Issues (20)
- How can I get libatomic_ops.a ? HOT 3
- coredump with '__atomic_fetch_add' function on aarch64 HOT 2
- [x86 gcc] Missing dx side effect in AO_compare_double_and_swap_double_full HOT 10
- SIGSEGV in test_malloc on Alpine linux/s390x HOT 12
- test_stack fail on linux/arm64 (clang) HOT 13
- FTBFS in the testsuite on riscv64 HOT 6
- Incorrect use of sizeof operator to verify alignment HOT 5
- Downstream libatomic_ops releases (Sep 2021) HOT 26
- Explore existing changes in forks (Nov 2021) HOT 3
- test_malloc abort on sparc HOT 3
- Downstream libatomic_ops releases (Aug 2022) HOT 18
- Outdated config.guess Files HOT 3
- Downstream libatomic_ops release (Mar 2023) HOT 24
- Undefined reference to AO_pt_lock on Ubuntu 22.04 when building with configure and clang-16 HOT 2
- test_atomic fail with 'Saw release store out of order' on ppc64 HOT 11
- configure AC_FUNC_MMAP does not detect mmap on CheriBSD HOT 2
- Support protected mode of E2K HOT 1
- Downstream libatomic_ops v7.8.2 HOT 10
- Invalid instruction in test_stack on E2K-v5 in protected mode HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from libatomic_ops.