diff options
| author | Thiago Macieira <thiago.macieira@intel.com> | 2023-07-07 11:16:00 -0700 |
|---|---|---|
| committer | Thiago Macieira <thiago.macieira@intel.com> | 2023-07-24 20:24:36 +0000 |
| commit | 4a43149d7b1ba10a96826a2bb38f1d5d608b6cb0 (patch) | |
| tree | 1061ae9b9085e241a925c2ac9df12052548ebbdb /src/concurrent/qtconcurrentthreadengine.cpp | |
| parent | 41f41393067080223422122b8ae1a0dcfe9e5f8f (diff) | |
QThreadPipe & QEvent: use a simpler atomic operation
This causes modern compilers (i.e., not MSVC) to emit a single
bit-test-and-set instruction instead of a cmpxchg. It's still an atomic
operation, so it's not that much faster (if at all), but it has simpler
encoding.
Previous:
000000000026bca0 <QEventDispatcherUNIX::wakeUp()>:
26bca0: mov 0x8(%rdi),%rdx
26bca4: xor %eax,%eax
26bca6: mov $0x1,%ecx
26bcab: lock cmpxchg %ecx,0x98(%rdx)
26bcb3: jne 26bcc5 <QEventDispatcherUNIX::wakeUp()+0x25>
26bcb5: mov 0x90(%rdx),%edi
26bcbb: mov $0x1,%esi
26bcc0: jmp c01d0 <eventfd_write@plt>
26bcc5: ret
Now:
26b3a0: mov 0x8(%rdi),%rax
26b3a4: lock btsl $0x0,0x98(%rax)
26b3ad: jae 26b3b0 <QEventDispatcherUNIX::wakeUp()+0x10>
26b3af: ret
26b3b0: mov 0x90(%rax),%edi
26b3b6: mov $0x1,%esi
26b3bb: jmp c11d0 <eventfd_write@plt>
Change-Id: I53335f845a1345299031fffd176fa8ac1de3ad13
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/concurrent/qtconcurrentthreadengine.cpp')
0 files changed, 0 insertions, 0 deletions
