mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-12-16 04:09:39 +00:00
This allows the compiler to eliminate a static constructor that
initializes the table, and instead precompute all of the data ahead of
time.
e.g. We get something like so on GCC without constexpr:
_GLOBAL__sub_I_PowerPC::ConditionRegister::s_crTable:
movdqa xmm0, XMMWORD PTR .LC0[rip]
movaps XMMWORD PTR PowerPC::ConditionRegister::s_crTable[rip], xmm0
movdqa xmm0, XMMWORD PTR .LC1[rip]
movaps XMMWORD PTR PowerPC::ConditionRegister::s_crTable[rip+16], xmm0
movdqa xmm0, XMMWORD PTR .LC2[rip]
movaps XMMWORD PTR PowerPC::ConditionRegister::s_crTable[rip+32], xmm0
movdqa xmm0, XMMWORD PTR .LC3[rip]
movaps XMMWORD PTR PowerPC::ConditionRegister::s_crTable[rip+48], xmm0
movdqa xmm0, XMMWORD PTR .LC4[rip]
movaps XMMWORD PTR PowerPC::ConditionRegister::s_crTable[rip+64], xmm0
movdqa xmm0, XMMWORD PTR .LC5[rip]
movaps XMMWORD PTR PowerPC::ConditionRegister::s_crTable[rip+80], xmm0
movdqa xmm0, XMMWORD PTR .LC6[rip]
movaps XMMWORD PTR PowerPC::ConditionRegister::s_crTable[rip+96], xmm0
movdqa xmm0, XMMWORD PTR .LC7[rip]
movaps XMMWORD PTR PowerPC::ConditionRegister::s_crTable[rip+112], xmm0
ret
PowerPC::ConditionRegister::s_crTable:
.zero 128
.LC0:
.quad -9223372032559808511
.quad -8646911280256385023
.LC1:
.quad -9223372032559808512
.quad -8646911280256385024
.LC2:
.quad 4294967297
.quad 576460756598390785
.LC3:
.quad 4294967296
.quad 576460756598390784
.LC4:
.quad -4611686014132420607
.quad -4035225261828997119
.LC5:
.quad -4611686014132420608
.quad -4035225261828997120
.LC6:
.quad 4611686022722355201
.quad 5188146775025778689
.LC7:
.quad 4611686022722355200
.quad 5188146775025778688
and with constexpr, this all get collapsed into:
PowerPC::ConditionRegister::s_crTable:
.quad -9223372032559808511
.quad -8646911280256385023
.quad -9223372032559808512
.quad -8646911280256385024
.quad 4294967297
.quad 576460756598390785
.quad 4294967296
.quad 576460756598390784
.quad -4611686014132420607
.quad -4035225261828997119
.quad -4611686014132420608
.quad -4035225261828997120
.quad 4611686022722355201
.quad 5188146775025778689
.quad 4611686022722355200
.quad 5188146775025778688
completely eliminating the static constructor. MSVC also exhibits this,
whereas clang is a little better and does this anyway, even without
constexpr.
|
||
|---|---|---|
| .. | ||
| AudioCommon | ||
| Common | ||
| Core | ||
| DiscIO | ||
| DolphinNoGUI | ||
| DolphinQt | ||
| DolphinTool | ||
| InputCommon | ||
| MacUpdater | ||
| UICommon | ||
| UpdaterCommon | ||
| VideoBackends | ||
| VideoCommon | ||
| WinUpdater | ||
| CMakeLists.txt | ||
| DolphinLib.ARM64.props | ||
| DolphinLib.props | ||
| DolphinLib.vcxproj | ||
| DolphinLib.vcxproj.user | ||
| DolphinLib.x64.props | ||