tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: PATCH libatomic
I am under the impression that (at least GCC) compilers will not emit
intrinsic calls if they are guaranteed to be available on the target.
This means libatomic needs to:
- Optimize: we can runtime detect, which emitted code cannot do.
Note that this means providing this libatomic will cause us to stop
noticing 64-bit atomics used when compiling for -march=i486, our default
for i386. We will stop upgrading those to -march=i586 and users will see
a performance penalty.
- Provide the fallback code
And that it isn't necessary for libatomic to:
- Attempt to cause the compiler to emit the intrinsic
Which should make this code a lot simpler.
---
+#define LOCK_FREE_ACTION(type) \
+ return atomic_compare_exchange_strong_explicit( \
+ (_Atomic(type) *)ptr, (type *)expected, *(type *)desired, success, \
+ failure)
+ LOCK_FREE_CASES();
+#undef LOCK_FREE_ACTION
This feels a bit offensive...
Mentally I am reading this as "I don't believe the compiler will
optimize out some scenarios in cleaner code with static inline, so
forcing the optimization to happen via C preprocessor".
I wonder if it's really true.
The macros seem overly complicated to avoid generics, I don't think
pre-C11 is a concern for us. I wonder if it can be simplified.
Home |
Main Index |
Thread Index |
Old Index