You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Tree:
0d8ef2d3b9
2ndAdjustmentVulkanV3-STOP_FORCE_PUSHING_CAMILLE
2ndAdjustmentVulkanv2
2ndgpuopts
John-android-rescale-toggle
TTYD
Update-some-barriers-test
android-meows
bcn-ternary-soft
bioshock
blit-fixes
bump-httplib-minver
camile/wawawawa
civa
crueter-patch-1
crueter-patch-3
crueter-patch-4
descriptor_set
dmnt2
dynarmic
dynarmic-ppc64
eden-managarm
eden-orbis-ps4
eden-wasm
feat/android_kotlin_compose
feat/game_override
fix-cpmutil-win
fix-friend-list-freeze
fix-grid-autoalign
fix-update-android
flatopsfixes23485
fs-try
funny-meows
hid_core
kosmickrisp
liz-heaptrack-fix
lizzie/1st-anniversary-icon
lizzie/adjust-stream-buffer
lizzie/adl-fix-remove
lizzie/anv-cached-mesa-hack
lizzie/areafixnvidia
lizzie/astc-decode-opts1
lizzie/better-mscxr
lizzie/brunofix7546847
lizzie/bump-18-version-cache
lizzie/clang-fix-gixel
lizzie/cleanup-dynarmic-cmake
lizzie/debug-assert-demote-dynarmic
lizzie/docs-lz12
lizzie/dynarmic-abort-path-12
lizzie/dynarmic-exclusive-fixups
lizzie/eh-signed
lizzie/emulate-bgr565-android-only
lizzie/enable-icf
lizzie/fbsd-shm_create_largepage
lizzie/ffmpeg-fix-externel
lizzie/fix-nvmap-handles
lizzie/fxaa-123
lizzie/hbloader-fix
lizzie/heap-corrupt-unique-fix
lizzie/inline-audio-structure-parent-refs
lizzie/inlinecodecnvenc
lizzie/invert-gyro
lizzie/ios-port-sud
lizzie/jamboree-audio-crash
lizzie/joycon-revision
lizzie/lto-fafaf-test-123
lizzie/macos-network-ifaces
lizzie/marknocore
lizzie/memcorrupt-afuzz1
lizzie/mlibc-fixes
lizzie/mlp223
lizzie/nce-invalidate-split
lizzie/netbsdgcc14-fix
lizzie/noexcept-dynarmic
lizzie/non-english-policy
lizzie/nuke-cubeb-2
lizzie/nuke-oboe
lizzie/nuke-ssl
lizzie/opus-regr-not-rep
lizzie/pixelphonefix
lizzie/pkza-mwait
lizzie/pokemon-search-fix
lizzie/powerunswizzle
lizzie/product-model-wawa
lizzie/ptable-revert-1212
lizzie/rdynr
lizzie/refactor-networking-12
lizzie/remove-concepts-common-hdr
lizzie/remove-disassembler-dynarmic
lizzie/remove-memcpy-on-vector
lizzie/remove-vector-math-unused
lizzie/revert-opt-pagetable-djgdjgdfjg
lizzie/rework-cmdline-args
lizzie/sd-gamemode-fix-queue
lizzie/sdl-nuke-SDL_Vibration-thread
lizzie/settings-preserve-across
lizzie/simplify-invalid-acc
lizzie/smallvector-use-on-ipc
lizzie/ssaa-what-the-fuck
lizzie/stable-shader-pools
lizzie/swkbd-mhu
lizzie/thread-names-log
lizzie/trivial-warn-fixes-4
lizzie/tryfixrandomvkshit
lizzie/ulaunch-attempt1
lizzie/unaligned-attempt-2
lizzie/usepoolinstdynarm
lizzie/vk-ext-fault-info
lizzie/vkweep12
lizzie/vp9-remove-stream
lizzie/wstring-uni-123
lizzie/xcode-evil-shit-123
lsfg-android
macroify-surface-stuffs
master
memory_changes
mmap-fixews
mutliplayer-filter-better1
n64
pr-template-v2
querybugfix
release/0.0.3
release/0.0.4
release/0.1.0
release/0.2.0
restore-metal-surface
sjkdbsdfjkbsdf-2834
temporary-branch
tiled-gpu
tiled-gpu-v2
unified-memory-access
update-deps-1780370490
update-deps-1780370770
update-translations-1777730513
update-translations-1788192077
vk-experiments5
vk-experiments7
vk-experiments8
warp-fixes
xbzk/fragmented-storage-buffers
xbzk/hb-tico-support-part-2
xbzk/opus-proper-limit-and-error
xbzk/unreal-unsafe-junk-guards
0.0.0
0.0.1-pre-alpha
0.0.2-pre-alpha
test-tag1
test-tag2
v0.0.3
v0.0.3-rc1
v0.0.3-rc2
v0.0.3-rc3
v0.0.3.git
v0.0.4
v0.0.4-rc1
v0.0.4-rc2
v0.0.4-rc2.test
v0.0.4-rc2.test2
v0.0.4-rc3
v0.0.4-rc3.test1
v0.0.4-rc3.test2
v0.0.4.test
v0.1.0
v0.1.0-rc1
v0.1.1
v0.2.0
v0.2.0-rc1
v0.2.0-rc2
v0.2.1
${ noResults }
eden/.appveyor
Uses arithmetic that can be identified more trivially by compilers for
optimizations. e.g. Rather than shifting the halves of the value and
then swapping and combining them, we can swap them in place.
e.g. for the original swap32 code on x86-64, clang 8.0 would generate:
mov ecx, edi
rol cx, 8
shl ecx, 16
shr edi, 16
rol di, 8
movzx eax, di
or eax, ecx
ret
while GCC 8.3 would generate the ideal:
mov eax, edi
bswap eax
ret
now both generate the same optimal output.
MSVC used to generate the following with the old code:
mov eax, ecx
rol cx, 8
shr eax, 16
rol ax, 8
movzx ecx, cx
movzx eax, ax
shl ecx, 16
or eax, ecx
ret 0
Now MSVC also generates a similar, but equally optimal result as clang/GCC:
bswap ecx
mov eax, ecx
ret 0
====
In the swap64 case, for the original code, clang 8.0 would generate:
mov eax, edi
bswap eax
shl rax, 32
shr rdi, 32
bswap edi
or rax, rdi
ret
(almost there, but still missing the mark)
while, again, GCC 8.3 would generate the more ideal:
mov rax, rdi
bswap rax
ret
now clang also generates the optimal sequence for this fallback as well.
This is a case where MSVC unfortunately falls short, despite the new
code, this one still generates a doozy of an output.
mov r8, rcx
mov r9, rcx
mov rax, 71776119061217280
mov rdx, r8
and r9, rax
and edx, 65280
mov rax, rcx
shr rax, 16
or r9, rax
mov rax, rcx
shr r9, 16
mov rcx, 280375465082880
and rax, rcx
mov rcx, 1095216660480
or r9, rax
mov rax, r8
and rax, rcx
shr r9, 16
or r9, rax
mov rcx, r8
mov rax, r8
shr r9, 8
shl rax, 16
and ecx, 16711680
or rdx, rax
mov eax, -16777216
and rax, r8
shl rdx, 16
or rdx, rcx
shl rdx, 16
or rax, rdx
shl rax, 8
or rax, r9
ret 0
which is pretty unfortunate.
|
8 years ago | |
|---|---|---|
| .. | ||
| UtilityFunctions.ps1 | Implement Citra pull 3043 | 9 years ago |