From 147188b143f67c27d8da396e759c19336f64c105 Mon Sep 17 00:00:00 2001 From: nmzik Date: Thu, 16 Jul 2026 10:21:41 +0200 Subject: [PATCH] Initial commit --- .../kytyps5-game-emulation.yaml | 156 + .gitignore | 5 + .gitmodules | 41 + .vscode/launch.json | 37 + .vscode/settings.json | 16 + 3rdparty/CMakeLists.txt | 103 + 3rdparty/LibAtrac9 | 1 + 3rdparty/SDL2 | 1 + 3rdparty/SPIRV-Headers | 1 + 3rdparty/SPIRV-Tools | 1 + 3rdparty/Vulkan-Headers | 1 + 3rdparty/VulkanMemoryAllocator | 1 + 3rdparty/cpuinfo/CMakeLists.txt | 97 + 3rdparty/cpuinfo/LICENSE | 27 + 3rdparty/cpuinfo/deps/clog/LICENSE | 26 + 3rdparty/cpuinfo/deps/clog/include/clog.h | 100 + 3rdparty/cpuinfo/deps/clog/src/clog.c | 423 + 3rdparty/cpuinfo/include/cpuinfo-mock.h | 78 + 3rdparty/cpuinfo/include/cpuinfo.h | 1894 +++ 3rdparty/cpuinfo/src/api.c | 410 + 3rdparty/cpuinfo/src/arm/android/api.h | 20 + 3rdparty/cpuinfo/src/arm/android/properties.c | 67 + 3rdparty/cpuinfo/src/arm/api.h | 122 + 3rdparty/cpuinfo/src/arm/cache.c | 1737 +++ 3rdparty/cpuinfo/src/arm/linux/aarch32-isa.c | 271 + 3rdparty/cpuinfo/src/arm/linux/aarch64-isa.c | 139 + 3rdparty/cpuinfo/src/arm/linux/api.h | 384 + 3rdparty/cpuinfo/src/arm/linux/chipset.c | 3937 ++++++ 3rdparty/cpuinfo/src/arm/linux/clusters.c | 493 + 3rdparty/cpuinfo/src/arm/linux/cp.h | 44 + 3rdparty/cpuinfo/src/arm/linux/cpuinfo.c | 908 ++ 3rdparty/cpuinfo/src/arm/linux/hwcap.c | 159 + 3rdparty/cpuinfo/src/arm/linux/init.c | 765 ++ 3rdparty/cpuinfo/src/arm/linux/midr.c | 863 ++ 3rdparty/cpuinfo/src/arm/mach/init.c | 619 + 3rdparty/cpuinfo/src/arm/midr.h | 260 + 3rdparty/cpuinfo/src/arm/tlb.c | 133 + 3rdparty/cpuinfo/src/arm/uarch.c | 370 + 3rdparty/cpuinfo/src/cache.c | 18 + 3rdparty/cpuinfo/src/cpuinfo/common.h | 40 + 3rdparty/cpuinfo/src/cpuinfo/internal-api.h | 62 + 3rdparty/cpuinfo/src/cpuinfo/log.h | 17 + 3rdparty/cpuinfo/src/cpuinfo/utils.h | 19 + 3rdparty/cpuinfo/src/emscripten/init.c | 277 + 3rdparty/cpuinfo/src/init.c | 59 + 3rdparty/cpuinfo/src/linux/api.h | 59 + 3rdparty/cpuinfo/src/linux/cpulist.c | 214 + 3rdparty/cpuinfo/src/linux/mockfile.c | 105 + 3rdparty/cpuinfo/src/linux/multiline.c | 106 + 3rdparty/cpuinfo/src/linux/processors.c | 406 + 3rdparty/cpuinfo/src/linux/smallfile.c | 70 + 3rdparty/cpuinfo/src/mach/api.h | 16 + 3rdparty/cpuinfo/src/mach/topology.c | 73 + 3rdparty/cpuinfo/src/x86/api.h | 159 + 3rdparty/cpuinfo/src/x86/cache/descriptor.c | 1726 +++ .../cpuinfo/src/x86/cache/deterministic.c | 257 + 3rdparty/cpuinfo/src/x86/cache/init.c | 88 + 3rdparty/cpuinfo/src/x86/cpuid.h | 79 + 3rdparty/cpuinfo/src/x86/info.c | 19 + 3rdparty/cpuinfo/src/x86/init.c | 75 + 3rdparty/cpuinfo/src/x86/isa.c | 724 + 3rdparty/cpuinfo/src/x86/linux/api.h | 20 + 3rdparty/cpuinfo/src/x86/linux/cpuinfo.c | 207 + 3rdparty/cpuinfo/src/x86/linux/init.c | 629 + 3rdparty/cpuinfo/src/x86/mach/init.c | 356 + 3rdparty/cpuinfo/src/x86/mockcpuid.c | 70 + 3rdparty/cpuinfo/src/x86/name.c | 708 + 3rdparty/cpuinfo/src/x86/topology.c | 127 + 3rdparty/cpuinfo/src/x86/uarch.c | 241 + 3rdparty/cpuinfo/src/x86/vendor.c | 189 + 3rdparty/cpuinfo/src/x86/windows/api.h | 41 + 3rdparty/cpuinfo/src/x86/windows/init.c | 634 + 3rdparty/ffmpeg-core | 1 + 3rdparty/fmt | 1 + 3rdparty/magic_enum | 1 + 3rdparty/nlohmann_json | 1 + 3rdparty/spdlog | 1 + 3rdparty/stb/LICENSE | 37 + 3rdparty/stb/stb_image.h | 7897 +++++++++++ 3rdparty/stb/stb_truetype.h | 5079 +++++++ 3rdparty/tracy | 1 + 3rdparty/winpthread/CMakeLists.txt | 8 + 3rdparty/winpthread/COPYING | 57 + 3rdparty/winpthread/bin/libwinpthread-1.dll | Bin 0 -> 90084 bytes 3rdparty/winpthread/include/pthread.h | 692 + 3rdparty/winpthread/include/pthread_compat.h | 86 + 3rdparty/winpthread/include/pthread_signal.h | 29 + 3rdparty/winpthread/include/pthread_time.h | 98 + 3rdparty/winpthread/include/pthread_unistd.h | 192 + 3rdparty/winpthread/include/sched.h | 79 + 3rdparty/winpthread/include/semaphore.h | 81 + 3rdparty/winpthread/lib/libwinpthread.dll.a | Bin 0 -> 88994 bytes 3rdparty/xxHash | 1 + LICENSE | 339 + LICENSES/Kyty-MIT.txt | 21 + README.md | 190 + docs/screenshots/.gitkeep | 1 + docs/screenshots/ps5-01.png | Bin 0 -> 1653769 bytes docs/screenshots/ps5-03.png | Bin 0 -> 333829 bytes docs/screenshots/ps5-04.png | Bin 0 -> 2821508 bytes docs/screenshots/ps5-05.png | Bin 0 -> 89241 bytes src/.clang-format | 200 + src/.clang-tidy | 52 + src/.gitattributes | 3 + src/.gitignore | 1 + src/CMakeLists.txt | 338 + src/cmake_config.h.in | 8 + src/common/CMakeLists.txt | 34 + src/common/abi.h | 12 + src/common/assert.cpp | 65 + src/common/assert.h | 67 + src/common/byteBuffer.h | 165 + src/common/common.h | 43 + src/common/commonSubsystem.cpp | 21 + src/common/commonSubsystem.h | 12 + src/common/config.h | 22 + src/common/dateTime.cpp | 694 + src/common/dateTime.h | 183 + src/common/debug.cpp | 44 + src/common/debug.h | 42 + src/common/emulatorConfig.cpp | 104 + src/common/emulatorConfig.h | 75 + src/common/file.cpp | 561 + src/common/file.h | 124 + src/common/hash.h | 156 + src/common/hostException.cpp | 151 + src/common/hostException.h | 44 + src/common/logging/log.cpp | 189 + src/common/logging/log.h | 48 + src/common/magicEnum.h | 42 + src/common/platform/sysDbg.h | 33 + src/common/platform/sysFileIO.h | 86 + src/common/platform/sysLinuxDbg.cpp | 123 + src/common/platform/sysLinuxFileIO.cpp | 557 + src/common/platform/sysLinuxVirtual.cpp | 451 + src/common/platform/sysSwapByteOrder.h | 53 + src/common/platform/sysTimer.h | 221 + src/common/platform/sysVirtual.h | 28 + src/common/platform/sysWindowsDbg.cpp | 105 + src/common/platform/sysWindowsFileIO.cpp | 576 + src/common/platform/sysWindowsVirtual.cpp | 355 + src/common/profiler.cpp | 89 + src/common/profiler.h | 78 + src/common/singleton.h | 36 + src/common/stringUtils.h | 344 + src/common/subsystems.cpp | 232 + src/common/subsystems.h | 91 + src/common/systemInfo.cpp | 18 + src/common/systemInfo.h | 16 + src/common/threads.cpp | 419 + src/common/threads.h | 107 + src/common/timer.cpp | 94 + src/common/timer.h | 47 + src/common/virtualMemory.cpp | 82 + src/common/virtualMemory.h | 46 + src/emulator.cpp | 223 + src/emulator.h | 21 + src/generate_version.cmake | 8 + src/graphics/asyncJob.h | 96 + .../command_processor/commandProcessor.h | 268 + .../command_processor/pm4Dispatch.cpp | 260 + .../guest_gpu/command_processor/pm4Dispatch.h | 171 + .../command_processor/pm4Handlers.cpp | 4778 +++++++ src/graphics/guest_gpu/gpu_defs.h | 437 + src/graphics/guest_gpu/gpu_format.cpp | 145 + src/graphics/guest_gpu/gpu_format.h | 33 + src/graphics/guest_gpu/graphicsRun.cpp | 1968 +++ src/graphics/guest_gpu/graphicsRun.h | 38 + src/graphics/guest_gpu/hardwareContext.h | 1047 ++ src/graphics/guest_gpu/pm4.cpp | 153 + src/graphics/guest_gpu/pm4.h | 1041 ++ src/graphics/guest_gpu/tile.cpp | 3166 +++++ src/graphics/guest_gpu/tile.h | 104 + src/graphics/host_gpu/graphicContext.h | 179 + src/graphics/host_gpu/hostMemory.cpp | 141 + src/graphics/host_gpu/hostMemory.h | 21 + src/graphics/host_gpu/memoryTracker.cpp | 255 + src/graphics/host_gpu/memoryTracker.h | 185 + src/graphics/host_gpu/objects/label.cpp | 432 + src/graphics/host_gpu/objects/label.h | 30 + .../host_gpu/objects/textureCommon.cpp | 1108 ++ src/graphics/host_gpu/objects/textureCommon.h | 140 + src/graphics/host_gpu/pageManager.cpp | 647 + src/graphics/host_gpu/pageManager.h | 60 + src/graphics/host_gpu/rangeSet.h | 93 + src/graphics/host_gpu/regionDefinitions.h | 20 + src/graphics/host_gpu/regionManager.h | 349 + .../host_gpu/renderer/bufferCache.cpp | 1632 +++ src/graphics/host_gpu/renderer/bufferCache.h | 106 + .../host_gpu/renderer/colorRenderTarget.cpp | 515 + src/graphics/host_gpu/renderer/context.cpp | 674 + src/graphics/host_gpu/renderer/debug.cpp | 1364 ++ .../host_gpu/renderer/depthRenderTarget.cpp | 357 + .../host_gpu/renderer/descriptorCache.cpp | 303 + .../host_gpu/renderer/descriptorCache.h | 118 + .../host_gpu/renderer/descriptors.cpp | 698 + src/graphics/host_gpu/renderer/descriptors.h | 22 + .../host_gpu/renderer/framebufferCache.cpp | 422 + .../host_gpu/renderer/framebufferCache.h | 80 + src/graphics/host_gpu/renderer/gdsBuffer.cpp | 70 + src/graphics/host_gpu/renderer/gdsBuffer.h | 36 + .../host_gpu/renderer/gpuResourceManager.cpp | 120 + .../host_gpu/renderer/gpuResourceManager.h | 56 + src/graphics/host_gpu/renderer/image.h | 74 + src/graphics/host_gpu/renderer/imageInfo.h | 487 + src/graphics/host_gpu/renderer/imageView.h | 141 + src/graphics/host_gpu/renderer/internal.h | 12 + .../host_gpu/renderer/pipelineCache.cpp | 296 + .../host_gpu/renderer/pipelineCache.h | 152 + src/graphics/host_gpu/renderer/render.h | 191 + .../host_gpu/renderer/renderCompute.cpp | 577 + .../host_gpu/renderer/renderContext.cpp | 97 + .../host_gpu/renderer/renderContext.h | 72 + src/graphics/host_gpu/renderer/renderDraw.cpp | 1295 ++ .../host_gpu/renderer/renderInternal.h | 21 + src/graphics/host_gpu/renderer/renderState.h | 281 + .../renderer/renderTargetBarriers.cpp | 226 + .../host_gpu/renderer/renderVertex.cpp | 28 + .../host_gpu/renderer/resourceMutex.cpp | 93 + .../host_gpu/renderer/resourceMutex.h | 48 + .../host_gpu/renderer/samplerCache.cpp | 146 + src/graphics/host_gpu/renderer/samplerCache.h | 46 + .../renderer/shaderResourceBarrier.cpp | 127 + .../host_gpu/renderer/shaderResourceBarrier.h | 34 + .../host_gpu/renderer/shaderSubgroup.cpp | 50 + .../host_gpu/renderer/shaderSubgroup.h | 31 + src/graphics/host_gpu/renderer/shaders.cpp | 1054 ++ .../host_gpu/renderer/streamBuffer.cpp | 99 + src/graphics/host_gpu/renderer/streamBuffer.h | 48 + src/graphics/host_gpu/renderer/sync.cpp | 483 + .../host_gpu/renderer/textureCache.cpp | 3414 +++++ src/graphics/host_gpu/renderer/textureCache.h | 143 + src/graphics/host_gpu/renderer/tiler.cpp | 124 + src/graphics/host_gpu/renderer/tiler.h | 30 + src/graphics/host_gpu/utils.cpp | 1161 ++ src/graphics/host_gpu/utils.h | 136 + src/graphics/host_gpu/vma.cpp | 197 + src/graphics/host_gpu/vma.h | 28 + src/graphics/host_gpu/vulkanInstance.h | 59 + src/graphics/presentation/displayBuffer.h | 25 + src/graphics/presentation/renderDoc.cpp | 293 + src/graphics/presentation/renderDoc.h | 20 + src/graphics/presentation/videoOut.cpp | 1891 +++ src/graphics/presentation/videoOut.h | 84 + src/graphics/presentation/window.h | 25 + .../presentation/window/swapchain.cpp | 389 + .../presentation/window/vulkanWindow.cpp | 1120 ++ src/graphics/presentation/window/window.cpp | 1155 ++ .../presentation/window/windowInternal.h | 53 + src/graphics/rt/hardware.cpp | 98 + src/graphics/rt/hardware.h | 22 + .../shader/recompiler/BindingLayout.cpp | 293 + .../shader/recompiler/BindingLayout.h | 20 + src/graphics/shader/recompiler/BufferFormat.h | 256 + src/graphics/shader/recompiler/ExecMask.cpp | 51 + src/graphics/shader/recompiler/ExecMask.h | 34 + src/graphics/shader/recompiler/ExportOps.cpp | 53 + src/graphics/shader/recompiler/ExportOps.h | 13 + src/graphics/shader/recompiler/ImageOps.cpp | 331 + src/graphics/shader/recompiler/ImageOps.h | 17 + src/graphics/shader/recompiler/MemoryOps.cpp | 480 + src/graphics/shader/recompiler/MemoryOps.h | 21 + .../recompiler/ResourceMaterialization.cpp | 354 + .../recompiler/ResourceMaterialization.h | 42 + .../shader/recompiler/ResourceTracking.cpp | 449 + .../shader/recompiler/ResourceTracking.h | 14 + .../shader/recompiler/ScalarAluOps.cpp | 283 + src/graphics/shader/recompiler/ScalarAluOps.h | 21 + .../shader/recompiler/ScalarProvenance.cpp | 946 ++ .../shader/recompiler/ScalarProvenance.h | 20 + src/graphics/shader/recompiler/ShaderCFG.cpp | 1539 +++ src/graphics/shader/recompiler/ShaderCFG.h | 118 + .../shader/recompiler/ShaderDecoder.cpp | 1216 ++ .../shader/recompiler/ShaderDecoder.h | 677 + src/graphics/shader/recompiler/ShaderIR.h | 763 ++ .../recompiler/ShaderInfoCollection.cpp | 225 + .../shader/recompiler/ShaderInfoCollection.h | 20 + .../shader/recompiler/ShaderRecompiler.cpp | 872 ++ .../shader/recompiler/ShaderRecompiler.h | 51 + .../shader/recompiler/SpirvBuilder.cpp | 160 + src/graphics/shader/recompiler/SpirvBuilder.h | 56 + .../shader/recompiler/SpirvEmitter.cpp | 491 + src/graphics/shader/recompiler/SpirvEmitter.h | 22 + src/graphics/shader/recompiler/SrtPatcher.cpp | 133 + src/graphics/shader/recompiler/SrtPatcher.h | 14 + src/graphics/shader/recompiler/SrtWalker.cpp | 655 + src/graphics/shader/recompiler/SrtWalker.h | 55 + .../shader/recompiler/VectorAluOps.cpp | 1833 +++ src/graphics/shader/recompiler/VectorAluOps.h | 23 + .../shader/recompiler/shaderIR/ShaderIR.cpp | 1227 ++ .../recompiler/shaderIR/ShaderIRInternal.h | 57 + .../recompiler/shaderIR/ShaderIRLog.cpp | 559 + .../recompiler/shaderIR/ShaderIRMemory.cpp | 788 ++ .../recompiler/shaderIR/ShaderIROpcodes.cpp | 534 + .../spirvEmitter/spirvEmitterAluOps.cpp | 2549 ++++ .../spirvEmitter/spirvEmitterAnalysis.cpp | 752 ++ .../spirvEmitter/spirvEmitterControlFlow.cpp | 1095 ++ .../spirvEmitter/spirvEmitterExport.cpp | 154 + .../spirvEmitter/spirvEmitterFlowOps.cpp | 381 + .../spirvEmitter/spirvEmitterImageHelpers.cpp | 314 + .../spirvEmitter/spirvEmitterImageOps.cpp | 361 + .../spirvEmitter/spirvEmitterInternal.h | 1555 +++ .../spirvEmitter/spirvEmitterMemory.cpp | 1587 +++ .../spirvEmitter/spirvEmitterModule.cpp | 929 ++ .../spirvEmitter/spirvEmitterValues.cpp | 840 ++ src/graphics/shader/shader.cpp | 1721 +++ src/graphics/shader/shader.h | 246 + src/graphics/shader/shaderBindings.cpp | 37 + src/graphics/shader/shaderBindings.h | 191 + src/graphics/shader/shaderStageRuntime.cpp | 32 + src/graphics/shader/shaderVertexMetadata.cpp | 96 + src/graphics/shader/shaderVertexMetadata.h | 24 + src/kernel/eventFlag.cpp | 380 + src/kernel/eventFlag.h | 28 + src/kernel/eventQueue.cpp | 621 + src/kernel/eventQueue.h | 85 + src/kernel/fileSystem.cpp | 1161 ++ src/kernel/fileSystem.h | 61 + src/kernel/memory.cpp | 3971 ++++++ src/kernel/memory.h | 164 + src/kernel/memoryAddressSpace.inc | 1378 ++ src/kernel/pthread.cpp | 4408 ++++++ src/kernel/pthread.h | 283 + src/kernel/semaphore.cpp | 745 ++ src/kernel/semaphore.h | 44 + src/kytyGitVersion.h.in | 1 + src/launcher/CMakeLists.txt | 103 + .../forms/configuration_edit_dialog.ui | 338 + .../forms/configuration_list_widget.ui | 223 + src/launcher/forms/main_dialog.ui | 101 + src/launcher/include/common.h | 20 + src/launcher/include/compatibilityDatabase.h | 40 + src/launcher/include/configuration.h | 178 + .../include/configurationEditDialog.h | 65 + src/launcher/include/configurationItem.h | 48 + .../include/configurationListWidget.h | 86 + src/launcher/include/gameListTreeWidget.h | 73 + src/launcher/include/mainDialog.h | 40 + src/launcher/include/mandatoryLineEdit.h | 29 + src/launcher/include/trophyViewerDialog.h | 27 + src/launcher/src/compatibilityDatabase.cpp | 200 + src/launcher/src/configurationEditDialog.cpp | 331 + src/launcher/src/configurationItem.cpp | 257 + src/launcher/src/configurationListWidget.cpp | 908 ++ src/launcher/src/main.cpp | 24 + src/launcher/src/mainDialog.cpp | 374 + src/launcher/src/mandatoryLineEdit.cpp | 44 + src/launcher/src/trophyViewerDialog.cpp | 582 + src/libs/agc.cpp | 4108 ++++++ src/libs/agc.h | 311 + src/libs/agcRegisterDefaults.inc | 2787 ++++ src/libs/ajm.cpp | 1361 ++ src/libs/ajm/aac_decoder.h | 363 + src/libs/ajm/atrac9_decoder.h | 530 + src/libs/ajm/ffmpeg_decoder_common.h | 65 + src/libs/ajm/mp3_decoder.h | 393 + src/libs/audio.cpp | 2639 ++++ src/libs/audio.h | 353 + src/libs/audio_internal.h | 33 + src/libs/avPlayer.cpp | 1591 +++ src/libs/controller.cpp | 546 + src/libs/controller.h | 70 + src/libs/dialog.cpp | 627 + src/libs/dialog.h | 77 + src/libs/errno.cpp | 11 + src/libs/errno.h | 666 + src/libs/guestPrintf.cpp | 808 ++ src/libs/guestPrintf.h | 25 + src/libs/libAmpr.cpp | 2754 ++++ src/libs/libAppContent.cpp | 254 + src/libs/libAudio.cpp | 1134 ++ src/libs/libAudio2.cpp | 929 ++ src/libs/libC.cpp | 898 ++ src/libs/libDbgAsan.cpp | 235 + src/libs/libDebug.cpp | 29 + src/libs/libDialog.cpp | 136 + src/libs/libFont.cpp | 2291 ++++ src/libs/libFontFt.cpp | 45 + src/libs/libGraphicsDriver.cpp | 324 + src/libs/libJson2.cpp | 992 ++ src/libs/libKernel.cpp | 3092 +++++ src/libs/libNet.cpp | 3982 ++++++ src/libs/libPad.cpp | 444 + src/libs/libPlayGo.cpp | 458 + src/libs/libPngDec.cpp | 381 + src/libs/libPsml.cpp | 353 + src/libs/libRtc.cpp | 594 + src/libs/libRudp.cpp | 65 + src/libs/libSaveData.cpp | 916 ++ src/libs/libShare.cpp | 245 + src/libs/libSysmodule.cpp | 75 + src/libs/libSystemService.cpp | 569 + src/libs/libUlt.cpp | 566 + src/libs/libUserService.cpp | 279 + src/libs/libVideoDec2.cpp | 455 + src/libs/libVideoOut.cpp | 54 + src/libs/libs.cpp | 237 + src/libs/libs.h | 78 + src/libs/network.cpp | 3727 ++++++ src/libs/network.h | 188 + src/libs/padData.h | 54 + src/libs/vaContext.h | 209 + src/loader/elf.cpp | 646 + src/loader/elf.h | 308 + src/loader/jit.h | 167 + src/loader/runtimeLinker.cpp | 2387 ++++ src/loader/runtimeLinker.h | 209 + src/loader/symbolDatabase.cpp | 94 + src/loader/symbolDatabase.h | 62 + src/loader/systemContent.cpp | 677 + src/loader/systemContent.h | 23 + src/loader/timer.cpp | 40 + src/loader/timer.h | 21 + src/loader/x64InstructionEmulator.cpp | 155 + src/loader/x64InstructionEmulator.h | 10 + src/main.cpp | 274 + src/utils.cmake | 131 + tests/MemoryTrackerTests.cpp | 1042 ++ tests/PageManagerTests.cpp | 631 + tests/ResourceMutexTests.cpp | 244 + tests/ResourceTrackingTests.cpp | 1783 +++ tests/ScalarProvenanceTests.cpp | 1081 ++ tests/ShaderRecompilerComputeTests.cpp | 11095 ++++++++++++++++ tests/ShaderStageRuntimeTests.cpp | 107 + tests/ShaderVertexMetadataTests.cpp | 152 + tests/VirtualMemoryAllocationTests.cpp | 1226 ++ tests/shaderCfgTests.cpp | 6735 ++++++++++ 427 files changed, 205923 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/kytyps5-game-emulation.yaml create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 3rdparty/CMakeLists.txt create mode 160000 3rdparty/LibAtrac9 create mode 160000 3rdparty/SDL2 create mode 160000 3rdparty/SPIRV-Headers create mode 160000 3rdparty/SPIRV-Tools create mode 160000 3rdparty/Vulkan-Headers create mode 160000 3rdparty/VulkanMemoryAllocator create mode 100644 3rdparty/cpuinfo/CMakeLists.txt create mode 100644 3rdparty/cpuinfo/LICENSE create mode 100644 3rdparty/cpuinfo/deps/clog/LICENSE create mode 100644 3rdparty/cpuinfo/deps/clog/include/clog.h create mode 100644 3rdparty/cpuinfo/deps/clog/src/clog.c create mode 100644 3rdparty/cpuinfo/include/cpuinfo-mock.h create mode 100644 3rdparty/cpuinfo/include/cpuinfo.h create mode 100644 3rdparty/cpuinfo/src/api.c create mode 100644 3rdparty/cpuinfo/src/arm/android/api.h create mode 100644 3rdparty/cpuinfo/src/arm/android/properties.c create mode 100644 3rdparty/cpuinfo/src/arm/api.h create mode 100644 3rdparty/cpuinfo/src/arm/cache.c create mode 100644 3rdparty/cpuinfo/src/arm/linux/aarch32-isa.c create mode 100644 3rdparty/cpuinfo/src/arm/linux/aarch64-isa.c create mode 100644 3rdparty/cpuinfo/src/arm/linux/api.h create mode 100644 3rdparty/cpuinfo/src/arm/linux/chipset.c create mode 100644 3rdparty/cpuinfo/src/arm/linux/clusters.c create mode 100644 3rdparty/cpuinfo/src/arm/linux/cp.h create mode 100644 3rdparty/cpuinfo/src/arm/linux/cpuinfo.c create mode 100644 3rdparty/cpuinfo/src/arm/linux/hwcap.c create mode 100644 3rdparty/cpuinfo/src/arm/linux/init.c create mode 100644 3rdparty/cpuinfo/src/arm/linux/midr.c create mode 100644 3rdparty/cpuinfo/src/arm/mach/init.c create mode 100644 3rdparty/cpuinfo/src/arm/midr.h create mode 100644 3rdparty/cpuinfo/src/arm/tlb.c create mode 100644 3rdparty/cpuinfo/src/arm/uarch.c create mode 100644 3rdparty/cpuinfo/src/cache.c create mode 100644 3rdparty/cpuinfo/src/cpuinfo/common.h create mode 100644 3rdparty/cpuinfo/src/cpuinfo/internal-api.h create mode 100644 3rdparty/cpuinfo/src/cpuinfo/log.h create mode 100644 3rdparty/cpuinfo/src/cpuinfo/utils.h create mode 100644 3rdparty/cpuinfo/src/emscripten/init.c create mode 100644 3rdparty/cpuinfo/src/init.c create mode 100644 3rdparty/cpuinfo/src/linux/api.h create mode 100644 3rdparty/cpuinfo/src/linux/cpulist.c create mode 100644 3rdparty/cpuinfo/src/linux/mockfile.c create mode 100644 3rdparty/cpuinfo/src/linux/multiline.c create mode 100644 3rdparty/cpuinfo/src/linux/processors.c create mode 100644 3rdparty/cpuinfo/src/linux/smallfile.c create mode 100644 3rdparty/cpuinfo/src/mach/api.h create mode 100644 3rdparty/cpuinfo/src/mach/topology.c create mode 100644 3rdparty/cpuinfo/src/x86/api.h create mode 100644 3rdparty/cpuinfo/src/x86/cache/descriptor.c create mode 100644 3rdparty/cpuinfo/src/x86/cache/deterministic.c create mode 100644 3rdparty/cpuinfo/src/x86/cache/init.c create mode 100644 3rdparty/cpuinfo/src/x86/cpuid.h create mode 100644 3rdparty/cpuinfo/src/x86/info.c create mode 100644 3rdparty/cpuinfo/src/x86/init.c create mode 100644 3rdparty/cpuinfo/src/x86/isa.c create mode 100644 3rdparty/cpuinfo/src/x86/linux/api.h create mode 100644 3rdparty/cpuinfo/src/x86/linux/cpuinfo.c create mode 100644 3rdparty/cpuinfo/src/x86/linux/init.c create mode 100644 3rdparty/cpuinfo/src/x86/mach/init.c create mode 100644 3rdparty/cpuinfo/src/x86/mockcpuid.c create mode 100644 3rdparty/cpuinfo/src/x86/name.c create mode 100644 3rdparty/cpuinfo/src/x86/topology.c create mode 100644 3rdparty/cpuinfo/src/x86/uarch.c create mode 100644 3rdparty/cpuinfo/src/x86/vendor.c create mode 100644 3rdparty/cpuinfo/src/x86/windows/api.h create mode 100644 3rdparty/cpuinfo/src/x86/windows/init.c create mode 160000 3rdparty/ffmpeg-core create mode 160000 3rdparty/fmt create mode 160000 3rdparty/magic_enum create mode 160000 3rdparty/nlohmann_json create mode 160000 3rdparty/spdlog create mode 100644 3rdparty/stb/LICENSE create mode 100644 3rdparty/stb/stb_image.h create mode 100644 3rdparty/stb/stb_truetype.h create mode 160000 3rdparty/tracy create mode 100644 3rdparty/winpthread/CMakeLists.txt create mode 100644 3rdparty/winpthread/COPYING create mode 100644 3rdparty/winpthread/bin/libwinpthread-1.dll create mode 100644 3rdparty/winpthread/include/pthread.h create mode 100644 3rdparty/winpthread/include/pthread_compat.h create mode 100644 3rdparty/winpthread/include/pthread_signal.h create mode 100644 3rdparty/winpthread/include/pthread_time.h create mode 100644 3rdparty/winpthread/include/pthread_unistd.h create mode 100644 3rdparty/winpthread/include/sched.h create mode 100644 3rdparty/winpthread/include/semaphore.h create mode 100644 3rdparty/winpthread/lib/libwinpthread.dll.a create mode 160000 3rdparty/xxHash create mode 100644 LICENSE create mode 100644 LICENSES/Kyty-MIT.txt create mode 100644 README.md create mode 100644 docs/screenshots/.gitkeep create mode 100644 docs/screenshots/ps5-01.png create mode 100644 docs/screenshots/ps5-03.png create mode 100644 docs/screenshots/ps5-04.png create mode 100644 docs/screenshots/ps5-05.png create mode 100644 src/.clang-format create mode 100644 src/.clang-tidy create mode 100644 src/.gitattributes create mode 100644 src/.gitignore create mode 100644 src/CMakeLists.txt create mode 100644 src/cmake_config.h.in create mode 100644 src/common/CMakeLists.txt create mode 100644 src/common/abi.h create mode 100644 src/common/assert.cpp create mode 100644 src/common/assert.h create mode 100644 src/common/byteBuffer.h create mode 100644 src/common/common.h create mode 100644 src/common/commonSubsystem.cpp create mode 100644 src/common/commonSubsystem.h create mode 100644 src/common/config.h create mode 100644 src/common/dateTime.cpp create mode 100644 src/common/dateTime.h create mode 100644 src/common/debug.cpp create mode 100644 src/common/debug.h create mode 100644 src/common/emulatorConfig.cpp create mode 100644 src/common/emulatorConfig.h create mode 100644 src/common/file.cpp create mode 100644 src/common/file.h create mode 100644 src/common/hash.h create mode 100644 src/common/hostException.cpp create mode 100644 src/common/hostException.h create mode 100644 src/common/logging/log.cpp create mode 100644 src/common/logging/log.h create mode 100644 src/common/magicEnum.h create mode 100644 src/common/platform/sysDbg.h create mode 100644 src/common/platform/sysFileIO.h create mode 100644 src/common/platform/sysLinuxDbg.cpp create mode 100644 src/common/platform/sysLinuxFileIO.cpp create mode 100644 src/common/platform/sysLinuxVirtual.cpp create mode 100644 src/common/platform/sysSwapByteOrder.h create mode 100644 src/common/platform/sysTimer.h create mode 100644 src/common/platform/sysVirtual.h create mode 100644 src/common/platform/sysWindowsDbg.cpp create mode 100644 src/common/platform/sysWindowsFileIO.cpp create mode 100644 src/common/platform/sysWindowsVirtual.cpp create mode 100644 src/common/profiler.cpp create mode 100644 src/common/profiler.h create mode 100644 src/common/singleton.h create mode 100644 src/common/stringUtils.h create mode 100644 src/common/subsystems.cpp create mode 100644 src/common/subsystems.h create mode 100644 src/common/systemInfo.cpp create mode 100644 src/common/systemInfo.h create mode 100644 src/common/threads.cpp create mode 100644 src/common/threads.h create mode 100644 src/common/timer.cpp create mode 100644 src/common/timer.h create mode 100644 src/common/virtualMemory.cpp create mode 100644 src/common/virtualMemory.h create mode 100644 src/emulator.cpp create mode 100644 src/emulator.h create mode 100644 src/generate_version.cmake create mode 100644 src/graphics/asyncJob.h create mode 100644 src/graphics/guest_gpu/command_processor/commandProcessor.h create mode 100644 src/graphics/guest_gpu/command_processor/pm4Dispatch.cpp create mode 100644 src/graphics/guest_gpu/command_processor/pm4Dispatch.h create mode 100644 src/graphics/guest_gpu/command_processor/pm4Handlers.cpp create mode 100644 src/graphics/guest_gpu/gpu_defs.h create mode 100644 src/graphics/guest_gpu/gpu_format.cpp create mode 100644 src/graphics/guest_gpu/gpu_format.h create mode 100644 src/graphics/guest_gpu/graphicsRun.cpp create mode 100644 src/graphics/guest_gpu/graphicsRun.h create mode 100644 src/graphics/guest_gpu/hardwareContext.h create mode 100644 src/graphics/guest_gpu/pm4.cpp create mode 100644 src/graphics/guest_gpu/pm4.h create mode 100644 src/graphics/guest_gpu/tile.cpp create mode 100644 src/graphics/guest_gpu/tile.h create mode 100644 src/graphics/host_gpu/graphicContext.h create mode 100644 src/graphics/host_gpu/hostMemory.cpp create mode 100644 src/graphics/host_gpu/hostMemory.h create mode 100644 src/graphics/host_gpu/memoryTracker.cpp create mode 100644 src/graphics/host_gpu/memoryTracker.h create mode 100644 src/graphics/host_gpu/objects/label.cpp create mode 100644 src/graphics/host_gpu/objects/label.h create mode 100644 src/graphics/host_gpu/objects/textureCommon.cpp create mode 100644 src/graphics/host_gpu/objects/textureCommon.h create mode 100644 src/graphics/host_gpu/pageManager.cpp create mode 100644 src/graphics/host_gpu/pageManager.h create mode 100644 src/graphics/host_gpu/rangeSet.h create mode 100644 src/graphics/host_gpu/regionDefinitions.h create mode 100644 src/graphics/host_gpu/regionManager.h create mode 100644 src/graphics/host_gpu/renderer/bufferCache.cpp create mode 100644 src/graphics/host_gpu/renderer/bufferCache.h create mode 100644 src/graphics/host_gpu/renderer/colorRenderTarget.cpp create mode 100644 src/graphics/host_gpu/renderer/context.cpp create mode 100644 src/graphics/host_gpu/renderer/debug.cpp create mode 100644 src/graphics/host_gpu/renderer/depthRenderTarget.cpp create mode 100644 src/graphics/host_gpu/renderer/descriptorCache.cpp create mode 100644 src/graphics/host_gpu/renderer/descriptorCache.h create mode 100644 src/graphics/host_gpu/renderer/descriptors.cpp create mode 100644 src/graphics/host_gpu/renderer/descriptors.h create mode 100644 src/graphics/host_gpu/renderer/framebufferCache.cpp create mode 100644 src/graphics/host_gpu/renderer/framebufferCache.h create mode 100644 src/graphics/host_gpu/renderer/gdsBuffer.cpp create mode 100644 src/graphics/host_gpu/renderer/gdsBuffer.h create mode 100644 src/graphics/host_gpu/renderer/gpuResourceManager.cpp create mode 100644 src/graphics/host_gpu/renderer/gpuResourceManager.h create mode 100644 src/graphics/host_gpu/renderer/image.h create mode 100644 src/graphics/host_gpu/renderer/imageInfo.h create mode 100644 src/graphics/host_gpu/renderer/imageView.h create mode 100644 src/graphics/host_gpu/renderer/internal.h create mode 100644 src/graphics/host_gpu/renderer/pipelineCache.cpp create mode 100644 src/graphics/host_gpu/renderer/pipelineCache.h create mode 100644 src/graphics/host_gpu/renderer/render.h create mode 100644 src/graphics/host_gpu/renderer/renderCompute.cpp create mode 100644 src/graphics/host_gpu/renderer/renderContext.cpp create mode 100644 src/graphics/host_gpu/renderer/renderContext.h create mode 100644 src/graphics/host_gpu/renderer/renderDraw.cpp create mode 100644 src/graphics/host_gpu/renderer/renderInternal.h create mode 100644 src/graphics/host_gpu/renderer/renderState.h create mode 100644 src/graphics/host_gpu/renderer/renderTargetBarriers.cpp create mode 100644 src/graphics/host_gpu/renderer/renderVertex.cpp create mode 100644 src/graphics/host_gpu/renderer/resourceMutex.cpp create mode 100644 src/graphics/host_gpu/renderer/resourceMutex.h create mode 100644 src/graphics/host_gpu/renderer/samplerCache.cpp create mode 100644 src/graphics/host_gpu/renderer/samplerCache.h create mode 100644 src/graphics/host_gpu/renderer/shaderResourceBarrier.cpp create mode 100644 src/graphics/host_gpu/renderer/shaderResourceBarrier.h create mode 100644 src/graphics/host_gpu/renderer/shaderSubgroup.cpp create mode 100644 src/graphics/host_gpu/renderer/shaderSubgroup.h create mode 100644 src/graphics/host_gpu/renderer/shaders.cpp create mode 100644 src/graphics/host_gpu/renderer/streamBuffer.cpp create mode 100644 src/graphics/host_gpu/renderer/streamBuffer.h create mode 100644 src/graphics/host_gpu/renderer/sync.cpp create mode 100644 src/graphics/host_gpu/renderer/textureCache.cpp create mode 100644 src/graphics/host_gpu/renderer/textureCache.h create mode 100644 src/graphics/host_gpu/renderer/tiler.cpp create mode 100644 src/graphics/host_gpu/renderer/tiler.h create mode 100644 src/graphics/host_gpu/utils.cpp create mode 100644 src/graphics/host_gpu/utils.h create mode 100644 src/graphics/host_gpu/vma.cpp create mode 100644 src/graphics/host_gpu/vma.h create mode 100644 src/graphics/host_gpu/vulkanInstance.h create mode 100644 src/graphics/presentation/displayBuffer.h create mode 100644 src/graphics/presentation/renderDoc.cpp create mode 100644 src/graphics/presentation/renderDoc.h create mode 100644 src/graphics/presentation/videoOut.cpp create mode 100644 src/graphics/presentation/videoOut.h create mode 100644 src/graphics/presentation/window.h create mode 100644 src/graphics/presentation/window/swapchain.cpp create mode 100644 src/graphics/presentation/window/vulkanWindow.cpp create mode 100644 src/graphics/presentation/window/window.cpp create mode 100644 src/graphics/presentation/window/windowInternal.h create mode 100644 src/graphics/rt/hardware.cpp create mode 100644 src/graphics/rt/hardware.h create mode 100644 src/graphics/shader/recompiler/BindingLayout.cpp create mode 100644 src/graphics/shader/recompiler/BindingLayout.h create mode 100644 src/graphics/shader/recompiler/BufferFormat.h create mode 100644 src/graphics/shader/recompiler/ExecMask.cpp create mode 100644 src/graphics/shader/recompiler/ExecMask.h create mode 100644 src/graphics/shader/recompiler/ExportOps.cpp create mode 100644 src/graphics/shader/recompiler/ExportOps.h create mode 100644 src/graphics/shader/recompiler/ImageOps.cpp create mode 100644 src/graphics/shader/recompiler/ImageOps.h create mode 100644 src/graphics/shader/recompiler/MemoryOps.cpp create mode 100644 src/graphics/shader/recompiler/MemoryOps.h create mode 100644 src/graphics/shader/recompiler/ResourceMaterialization.cpp create mode 100644 src/graphics/shader/recompiler/ResourceMaterialization.h create mode 100644 src/graphics/shader/recompiler/ResourceTracking.cpp create mode 100644 src/graphics/shader/recompiler/ResourceTracking.h create mode 100644 src/graphics/shader/recompiler/ScalarAluOps.cpp create mode 100644 src/graphics/shader/recompiler/ScalarAluOps.h create mode 100644 src/graphics/shader/recompiler/ScalarProvenance.cpp create mode 100644 src/graphics/shader/recompiler/ScalarProvenance.h create mode 100644 src/graphics/shader/recompiler/ShaderCFG.cpp create mode 100644 src/graphics/shader/recompiler/ShaderCFG.h create mode 100644 src/graphics/shader/recompiler/ShaderDecoder.cpp create mode 100644 src/graphics/shader/recompiler/ShaderDecoder.h create mode 100644 src/graphics/shader/recompiler/ShaderIR.h create mode 100644 src/graphics/shader/recompiler/ShaderInfoCollection.cpp create mode 100644 src/graphics/shader/recompiler/ShaderInfoCollection.h create mode 100644 src/graphics/shader/recompiler/ShaderRecompiler.cpp create mode 100644 src/graphics/shader/recompiler/ShaderRecompiler.h create mode 100644 src/graphics/shader/recompiler/SpirvBuilder.cpp create mode 100644 src/graphics/shader/recompiler/SpirvBuilder.h create mode 100644 src/graphics/shader/recompiler/SpirvEmitter.cpp create mode 100644 src/graphics/shader/recompiler/SpirvEmitter.h create mode 100644 src/graphics/shader/recompiler/SrtPatcher.cpp create mode 100644 src/graphics/shader/recompiler/SrtPatcher.h create mode 100644 src/graphics/shader/recompiler/SrtWalker.cpp create mode 100644 src/graphics/shader/recompiler/SrtWalker.h create mode 100644 src/graphics/shader/recompiler/VectorAluOps.cpp create mode 100644 src/graphics/shader/recompiler/VectorAluOps.h create mode 100644 src/graphics/shader/recompiler/shaderIR/ShaderIR.cpp create mode 100644 src/graphics/shader/recompiler/shaderIR/ShaderIRInternal.h create mode 100644 src/graphics/shader/recompiler/shaderIR/ShaderIRLog.cpp create mode 100644 src/graphics/shader/recompiler/shaderIR/ShaderIRMemory.cpp create mode 100644 src/graphics/shader/recompiler/shaderIR/ShaderIROpcodes.cpp create mode 100644 src/graphics/shader/recompiler/spirvEmitter/spirvEmitterAluOps.cpp create mode 100644 src/graphics/shader/recompiler/spirvEmitter/spirvEmitterAnalysis.cpp create mode 100644 src/graphics/shader/recompiler/spirvEmitter/spirvEmitterControlFlow.cpp create mode 100644 src/graphics/shader/recompiler/spirvEmitter/spirvEmitterExport.cpp create mode 100644 src/graphics/shader/recompiler/spirvEmitter/spirvEmitterFlowOps.cpp create mode 100644 src/graphics/shader/recompiler/spirvEmitter/spirvEmitterImageHelpers.cpp create mode 100644 src/graphics/shader/recompiler/spirvEmitter/spirvEmitterImageOps.cpp create mode 100644 src/graphics/shader/recompiler/spirvEmitter/spirvEmitterInternal.h create mode 100644 src/graphics/shader/recompiler/spirvEmitter/spirvEmitterMemory.cpp create mode 100644 src/graphics/shader/recompiler/spirvEmitter/spirvEmitterModule.cpp create mode 100644 src/graphics/shader/recompiler/spirvEmitter/spirvEmitterValues.cpp create mode 100644 src/graphics/shader/shader.cpp create mode 100644 src/graphics/shader/shader.h create mode 100644 src/graphics/shader/shaderBindings.cpp create mode 100644 src/graphics/shader/shaderBindings.h create mode 100644 src/graphics/shader/shaderStageRuntime.cpp create mode 100644 src/graphics/shader/shaderVertexMetadata.cpp create mode 100644 src/graphics/shader/shaderVertexMetadata.h create mode 100644 src/kernel/eventFlag.cpp create mode 100644 src/kernel/eventFlag.h create mode 100644 src/kernel/eventQueue.cpp create mode 100644 src/kernel/eventQueue.h create mode 100644 src/kernel/fileSystem.cpp create mode 100644 src/kernel/fileSystem.h create mode 100644 src/kernel/memory.cpp create mode 100644 src/kernel/memory.h create mode 100644 src/kernel/memoryAddressSpace.inc create mode 100644 src/kernel/pthread.cpp create mode 100644 src/kernel/pthread.h create mode 100644 src/kernel/semaphore.cpp create mode 100644 src/kernel/semaphore.h create mode 100644 src/kytyGitVersion.h.in create mode 100644 src/launcher/CMakeLists.txt create mode 100644 src/launcher/forms/configuration_edit_dialog.ui create mode 100644 src/launcher/forms/configuration_list_widget.ui create mode 100644 src/launcher/forms/main_dialog.ui create mode 100644 src/launcher/include/common.h create mode 100644 src/launcher/include/compatibilityDatabase.h create mode 100644 src/launcher/include/configuration.h create mode 100644 src/launcher/include/configurationEditDialog.h create mode 100644 src/launcher/include/configurationItem.h create mode 100644 src/launcher/include/configurationListWidget.h create mode 100644 src/launcher/include/gameListTreeWidget.h create mode 100644 src/launcher/include/mainDialog.h create mode 100644 src/launcher/include/mandatoryLineEdit.h create mode 100644 src/launcher/include/trophyViewerDialog.h create mode 100644 src/launcher/src/compatibilityDatabase.cpp create mode 100644 src/launcher/src/configurationEditDialog.cpp create mode 100644 src/launcher/src/configurationItem.cpp create mode 100644 src/launcher/src/configurationListWidget.cpp create mode 100644 src/launcher/src/main.cpp create mode 100644 src/launcher/src/mainDialog.cpp create mode 100644 src/launcher/src/mandatoryLineEdit.cpp create mode 100644 src/launcher/src/trophyViewerDialog.cpp create mode 100644 src/libs/agc.cpp create mode 100644 src/libs/agc.h create mode 100644 src/libs/agcRegisterDefaults.inc create mode 100644 src/libs/ajm.cpp create mode 100644 src/libs/ajm/aac_decoder.h create mode 100644 src/libs/ajm/atrac9_decoder.h create mode 100644 src/libs/ajm/ffmpeg_decoder_common.h create mode 100644 src/libs/ajm/mp3_decoder.h create mode 100644 src/libs/audio.cpp create mode 100644 src/libs/audio.h create mode 100644 src/libs/audio_internal.h create mode 100644 src/libs/avPlayer.cpp create mode 100644 src/libs/controller.cpp create mode 100644 src/libs/controller.h create mode 100644 src/libs/dialog.cpp create mode 100644 src/libs/dialog.h create mode 100644 src/libs/errno.cpp create mode 100644 src/libs/errno.h create mode 100644 src/libs/guestPrintf.cpp create mode 100644 src/libs/guestPrintf.h create mode 100644 src/libs/libAmpr.cpp create mode 100644 src/libs/libAppContent.cpp create mode 100644 src/libs/libAudio.cpp create mode 100644 src/libs/libAudio2.cpp create mode 100644 src/libs/libC.cpp create mode 100644 src/libs/libDbgAsan.cpp create mode 100644 src/libs/libDebug.cpp create mode 100644 src/libs/libDialog.cpp create mode 100644 src/libs/libFont.cpp create mode 100644 src/libs/libFontFt.cpp create mode 100644 src/libs/libGraphicsDriver.cpp create mode 100644 src/libs/libJson2.cpp create mode 100644 src/libs/libKernel.cpp create mode 100644 src/libs/libNet.cpp create mode 100644 src/libs/libPad.cpp create mode 100644 src/libs/libPlayGo.cpp create mode 100644 src/libs/libPngDec.cpp create mode 100644 src/libs/libPsml.cpp create mode 100644 src/libs/libRtc.cpp create mode 100644 src/libs/libRudp.cpp create mode 100644 src/libs/libSaveData.cpp create mode 100644 src/libs/libShare.cpp create mode 100644 src/libs/libSysmodule.cpp create mode 100644 src/libs/libSystemService.cpp create mode 100644 src/libs/libUlt.cpp create mode 100644 src/libs/libUserService.cpp create mode 100644 src/libs/libVideoDec2.cpp create mode 100644 src/libs/libVideoOut.cpp create mode 100644 src/libs/libs.cpp create mode 100644 src/libs/libs.h create mode 100644 src/libs/network.cpp create mode 100644 src/libs/network.h create mode 100644 src/libs/padData.h create mode 100644 src/libs/vaContext.h create mode 100644 src/loader/elf.cpp create mode 100644 src/loader/elf.h create mode 100644 src/loader/jit.h create mode 100644 src/loader/runtimeLinker.cpp create mode 100644 src/loader/runtimeLinker.h create mode 100644 src/loader/symbolDatabase.cpp create mode 100644 src/loader/symbolDatabase.h create mode 100644 src/loader/systemContent.cpp create mode 100644 src/loader/systemContent.h create mode 100644 src/loader/timer.cpp create mode 100644 src/loader/timer.h create mode 100644 src/loader/x64InstructionEmulator.cpp create mode 100644 src/loader/x64InstructionEmulator.h create mode 100644 src/main.cpp create mode 100644 src/utils.cmake create mode 100644 tests/MemoryTrackerTests.cpp create mode 100644 tests/PageManagerTests.cpp create mode 100644 tests/ResourceMutexTests.cpp create mode 100644 tests/ResourceTrackingTests.cpp create mode 100644 tests/ScalarProvenanceTests.cpp create mode 100644 tests/ShaderRecompilerComputeTests.cpp create mode 100644 tests/ShaderStageRuntimeTests.cpp create mode 100644 tests/ShaderVertexMetadataTests.cpp create mode 100644 tests/VirtualMemoryAllocationTests.cpp create mode 100644 tests/shaderCfgTests.cpp diff --git a/.github/ISSUE_TEMPLATE/kytyps5-game-emulation.yaml b/.github/ISSUE_TEMPLATE/kytyps5-game-emulation.yaml new file mode 100644 index 000000000..02321f9be --- /dev/null +++ b/.github/ISSUE_TEMPLATE/kytyps5-game-emulation.yaml @@ -0,0 +1,156 @@ +name: Game Emulation Bug Report +description: Report KytyPS5 game boot, crash, freeze, rendering, audio, input, or gameplay behavior problems. +title: "[GAME BUG]: " +body: + - type: markdown + attributes: + value: | + ## Quick checks + + Before submitting, please: + - Search existing issues first. + - Re-test with a clean game dump. + - Attach the complete log file instead of edited snippets. + + - type: markdown + attributes: + value: | + ## Game and build + + - type: input + id: game-title + attributes: + label: Game title + description: Use the full title shown by the game or launcher. + placeholder: "Example: Astro Bot" + validations: + required: true + + - type: input + id: game-id + attributes: + label: Game ID / serial + description: Enter the ID or serial when available. If you cannot find it, write "Unknown". + placeholder: "Example: PPSA12345 or Unknown" + validations: + required: true + + - type: input + id: kyty-version + attributes: + label: KytyPS5 version + description: Include the exact build you tested so the report can be matched to the right code. + placeholder: "Example: v0.0.1" + validations: + required: true + + - type: input + id: regression-builds + attributes: + label: Last working build / first broken build + description: Optional. Fill this in if the same game worked in an older KytyPS5 build. + placeholder: "Example: last worked in v0.0.1, first broke in v0.0.1" + + - type: markdown + attributes: + value: | + ## Problem details + + - type: textarea + id: what-happened + attributes: + label: What happened? + description: Describe the failure or incorrect behavior as directly as possible. + placeholder: "Example: The game reaches the main menu, then freezes after selecting Continue." + validations: + required: true + + - type: textarea + id: steps-to-reproduce + attributes: + label: Steps to reproduce + description: List the shortest path that triggers the problem from a fresh KytyPS5 start. + placeholder: | + 1. Open KytyPS5. + 2. Boot the game. + 3. Select ... + validations: + required: true + + - type: textarea + id: expected-behavior + attributes: + label: Expected behavior + description: Explain what should happen at the same point in the game. + placeholder: "Example: The save should load and gameplay should continue normally." + validations: + required: true + + - type: markdown + attributes: + value: | + ## Host system + + - type: input + id: os + attributes: + label: OS + description: Include the operating system name, version, and edition when useful. + placeholder: "Example: Windows 11 Pro 25H2" + validations: + required: true + + - type: input + id: cpu + attributes: + label: CPU + description: Include the exact processor model. + placeholder: "Example: AMD Ryzen 9 9950X3D" + validations: + required: true + + - type: input + id: gpu + attributes: + label: GPU + description: Include the graphics card model and driver version when available. + placeholder: "Example: NVIDIA GeForce RTX 5080, driver 576.80" + validations: + required: true + + - type: input + id: ram-vram + attributes: + label: RAM / VRAM + description: Include both system memory and video memory. + placeholder: "Example: 64 GB DDR5 RAM / 16 GB VRAM" + validations: + required: true + + - type: markdown + attributes: + value: | + ## Evidence + + - type: textarea + id: log-file + attributes: + label: Log file upload + description: Drag the full KytyPS5 log (_kyty.txt) into this box, or link to the complete unmodified file. + placeholder: "Attach the full log file here." + validations: + required: true + + - type: textarea + id: screenshots-video + attributes: + label: Screenshots/video + description: Optional. Add images or footage when the problem is visible or audible. + placeholder: "Drag and drop media here, or paste links." + + - type: textarea + id: extra-notes + attributes: + label: Extra notes + description: Optional. Add settings, unusual hardware details, or anything else that may help. + placeholder: "Any extra context goes here." diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..92f28ecb0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +# Visual Studio 2015 cache/options directory +.vs/ +.idea/ +build/ +_Build/vscode-clang/ \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..ea1f6aca4 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,41 @@ +[submodule "3rdparty/SDL2"] + path = 3rdparty/SDL2 + url = https://github.com/libsdl-org/SDL.git + branch = SDL2 +[submodule "3rdparty/magic_enum"] + path = 3rdparty/magic_enum + url = https://github.com/Neargye/magic_enum.git +[submodule "3rdparty/xxHash"] + path = 3rdparty/xxHash + url = https://github.com/Cyan4973/xxHash.git +[submodule "3rdparty/Vulkan-Headers"] + path = 3rdparty/Vulkan-Headers + url = https://github.com/KhronosGroup/Vulkan-Headers.git +[submodule "3rdparty/SPIRV-Tools"] + path = 3rdparty/SPIRV-Tools + url = https://github.com/KhronosGroup/SPIRV-Tools.git +[submodule "3rdparty/SPIRV-Headers"] + path = 3rdparty/SPIRV-Headers + url = https://github.com/KhronosGroup/SPIRV-Headers.git +[submodule "3rdparty/VulkanMemoryAllocator"] + path = 3rdparty/VulkanMemoryAllocator + url = https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git +[submodule "3rdparty/ffmpeg-core"] + path = 3rdparty/ffmpeg-core + url = https://github.com/shadps4-emu/ext-ffmpeg-core.git + shallow = true +[submodule "3rdparty/fmt"] + path = 3rdparty/fmt + url = https://github.com/fmtlib/fmt.git +[submodule "3rdparty/tracy"] + path = 3rdparty/tracy + url = https://github.com/wolfpld/tracy.git +[submodule "3rdparty/spdlog"] + path = 3rdparty/spdlog + url = https://github.com/gabime/spdlog.git +[submodule "3rdparty/LibAtrac9"] + path = 3rdparty/LibAtrac9 + url = https://github.com/shadps4-emu/ext-LibAtrac9.git +[submodule "3rdparty/nlohmann_json"] + path = 3rdparty/nlohmann_json + url = https://github.com/nlohmann/json.git diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..0c51cfa60 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,37 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Debug launcher UI", + "type": "cppvsdbg", + "request": "launch", + "program": "${workspaceFolder}\\_Build\\vscode-clang\\launcher\\launcher.exe", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}\\_Build\\vscode-clang\\launcher", + "environment": [], + "externalConsole": false + }, + { + "name": "Debug kyty_emulator", + "type": "cppvsdbg", + "request": "launch", + "program": "${workspaceFolder}\\_Build\\vscode-clang\\kyty_emulator.exe", + "args": [ + "--game", "D:/gamesps5/PPSA07429", + "--printf-direction", "File", + "--graphics-debug-dump", "True" + ], + "stopAtEntry": false, + "cwd": "${workspaceFolder}\\_Build\\vscode-clang", + "environment": [], + "externalConsole": true + }, + { + "name": "Attach to running kyty_emulator", + "type": "cppvsdbg", + "request": "attach", + "processId": "${command:pickProcess}" + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..69f8e2895 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,16 @@ +{ + "cmake.sourceDirectory": "${workspaceFolder}/src", + "cmake.buildDirectory": "${workspaceFolder}/_Build/vscode-clang", + "cmake.generator": "Ninja", + "cmake.environment": { + "CC": "clang-cl", + "CXX": "clang-cl", + "PATH": "${env:ProgramFiles}/Microsoft Visual Studio/18/Community/VC/Tools/Llvm/x64/bin;${env:ProgramFiles}/Microsoft Visual Studio/18/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja;${env:PATH}" + }, + "cmake.configureSettings": { + "CMAKE_C_COMPILER": "clang-cl", + "CMAKE_CXX_COMPILER": "clang-cl", + "CMAKE_PREFIX_PATH": "C:/Qt/6.11.0/msvc2022_64" + } +} + diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt new file mode 100644 index 000000000..e61ef4508 --- /dev/null +++ b/3rdparty/CMakeLists.txt @@ -0,0 +1,103 @@ +set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) + +add_subdirectory(cpuinfo) + +set(SDL_SHARED OFF CACHE BOOL "" FORCE) +add_subdirectory(SDL2) + +add_library(vulkan-1 UNKNOWN IMPORTED GLOBAL) + +if(MINGW) + find_library(Vulkan_Lib NAMES libvulkan-1.dll.a vulkan-1 + PATHS "$ENV{VULKAN_SDK}/Lib" "$ENV{VULKAN_SDK}/Lib32" NO_DEFAULT_PATH) + if(NOT Vulkan_Lib) + find_library(Vulkan_Lib NAMES libvulkan-1.dll.a vulkan-1) + endif() +elseif(WIN32) + find_library(Vulkan_Lib NAMES vulkan-1 + PATHS "$ENV{VULKAN_SDK}/Lib" "$ENV{VULKAN_SDK}/Lib32" NO_DEFAULT_PATH) + if(NOT Vulkan_Lib) + find_library(Vulkan_Lib NAMES vulkan-1) + endif() +elseif(LINUX) + find_library(Vulkan_Lib vulkan) +endif() + +if(NOT Vulkan_Lib OR Vulkan_Lib MATCHES "-NOTFOUND$") + message(FATAL_ERROR "Vulkan library was not found") +endif() + +set_target_properties(vulkan-1 PROPERTIES IMPORTED_LOCATION "${Vulkan_Lib}") + +set(SPIRV_SKIP_TESTS ON CACHE BOOL "" FORCE) +set(SPIRV_SKIP_EXECUTABLES ON CACHE BOOL "" FORCE) +set(SKIP_SPIRV_TOOLS_INSTALL ON CACHE BOOL "" FORCE) +set(SPIRV_WERROR OFF CACHE BOOL "" FORCE) +set(SPIRV-Headers_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/SPIRV-Headers" CACHE PATH "" FORCE) +add_subdirectory(SPIRV-Tools) + +add_library(spirv-tools ALIAS SPIRV-Tools-static) +add_library(spirv-tools-opt ALIAS SPIRV-Tools-opt) + +add_subdirectory(xxHash/build/cmake) + +set(FMT_DOC OFF CACHE BOOL "" FORCE) +set(FMT_INSTALL OFF CACHE BOOL "" FORCE) +set(FMT_MODULE OFF CACHE BOOL "" FORCE) +set(FMT_TEST OFF CACHE BOOL "" FORCE) +add_subdirectory(fmt EXCLUDE_FROM_ALL) + +set(JSON_BuildTests OFF CACHE BOOL "" FORCE) +set(JSON_Install OFF CACHE BOOL "" FORCE) +add_subdirectory(nlohmann_json EXCLUDE_FROM_ALL) + +set(SPDLOG_BUILD_ALL OFF CACHE BOOL "" FORCE) +set(SPDLOG_BUILD_EXAMPLE OFF CACHE BOOL "" FORCE) +set(SPDLOG_BUILD_TESTS OFF CACHE BOOL "" FORCE) +set(SPDLOG_BUILD_BENCH OFF CACHE BOOL "" FORCE) +set(SPDLOG_BUILD_WARNINGS OFF CACHE BOOL "" FORCE) +set(SPDLOG_INSTALL OFF CACHE BOOL "" FORCE) +set(SPDLOG_FMT_EXTERNAL ON CACHE BOOL "" FORCE) +set(SPDLOG_NO_EXCEPTIONS ON CACHE BOOL "" FORCE) +add_subdirectory(spdlog EXCLUDE_FROM_ALL) + +if (NOT TARGET FFmpeg::ffmpeg) + if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64|ARM64)$") + set(ARCHITECTURE arm64) + else() + set(ARCHITECTURE x86_64) + endif() + add_subdirectory(ffmpeg-core) + add_library(FFmpeg::ffmpeg ALIAS ffmpeg) +endif() + +file(GLOB LIBATRAC9_SOURCES LibAtrac9/C/src/*.c) +add_library(LibAtrac9 STATIC ${LIBATRAC9_SOURCES}) +target_include_directories(LibAtrac9 PUBLIC LibAtrac9/C/src) +if(MSVC) + target_compile_options(LibAtrac9 PRIVATE /W0) +endif() + +set(TRACY_STATIC ON CACHE BOOL "" FORCE) +set(TRACY_ENABLE ON CACHE BOOL "" FORCE) +set(TRACY_ON_DEMAND ON CACHE BOOL "" FORCE) +set(TRACY_DELAYED_INIT ON CACHE BOOL "" FORCE) +set(TRACY_MANUAL_LIFETIME ON CACHE BOOL "" FORCE) +add_subdirectory(tracy EXCLUDE_FROM_ALL) +if (TARGET TracyClient) + if (MSVC) + target_compile_options(TracyClient PRIVATE /WX-) + endif() + if (CLANG) + target_compile_options(TracyClient PRIVATE + -Wno-error + -Wno-braced-scalar-init + -Wno-format + -Wno-unused-variable + ) + endif() +endif() + +if (CLANG AND MSVC) +add_subdirectory(winpthread) +endif() diff --git a/3rdparty/LibAtrac9 b/3rdparty/LibAtrac9 new file mode 160000 index 000000000..ec8899dad --- /dev/null +++ b/3rdparty/LibAtrac9 @@ -0,0 +1 @@ +Subproject commit ec8899dadf393f655f2871a94e0fe4b3d6220c9a diff --git a/3rdparty/SDL2 b/3rdparty/SDL2 new file mode 160000 index 000000000..4b69833bc --- /dev/null +++ b/3rdparty/SDL2 @@ -0,0 +1 @@ +Subproject commit 4b69833bc54abf3dd3288d4aa7afbba527775e5b diff --git a/3rdparty/SPIRV-Headers b/3rdparty/SPIRV-Headers new file mode 160000 index 000000000..01e057791 --- /dev/null +++ b/3rdparty/SPIRV-Headers @@ -0,0 +1 @@ +Subproject commit 01e0577914a75a2569c846778c2f93aa8e6feddd diff --git a/3rdparty/SPIRV-Tools b/3rdparty/SPIRV-Tools new file mode 160000 index 000000000..7f2d9ee92 --- /dev/null +++ b/3rdparty/SPIRV-Tools @@ -0,0 +1 @@ +Subproject commit 7f2d9ee926f98fc77a3ed1e1e0f113b8c9c49458 diff --git a/3rdparty/Vulkan-Headers b/3rdparty/Vulkan-Headers new file mode 160000 index 000000000..2fa203425 --- /dev/null +++ b/3rdparty/Vulkan-Headers @@ -0,0 +1 @@ +Subproject commit 2fa203425eb4af9dfc6b03f97ef72b0b5bcb8350 diff --git a/3rdparty/VulkanMemoryAllocator b/3rdparty/VulkanMemoryAllocator new file mode 160000 index 000000000..a1d434708 --- /dev/null +++ b/3rdparty/VulkanMemoryAllocator @@ -0,0 +1 @@ +Subproject commit a1d434708c217b2a6c7b365f1fe41fa03a562e59 diff --git a/3rdparty/cpuinfo/CMakeLists.txt b/3rdparty/cpuinfo/CMakeLists.txt new file mode 100644 index 000000000..92d218e79 --- /dev/null +++ b/3rdparty/cpuinfo/CMakeLists.txt @@ -0,0 +1,97 @@ +set(cpuinfo_src + src/init.c + src/api.c + src/cache.c + deps/clog/src/clog.c +) + +if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(i[3-6]86|AMD64|x86(_64)?)$") + list(APPEND cpuinfo_src + src/x86/init.c + src/x86/info.c + src/x86/vendor.c + src/x86/uarch.c + src/x86/name.c + src/x86/topology.c + src/x86/isa.c + src/x86/cache/init.c + src/x86/cache/descriptor.c + src/x86/cache/deterministic.c) + if(LINUX OR ANDROID) + list(APPEND cpuinfo_src src/x86/linux/init.c src/x86/linux/cpuinfo.c) + else() + list(APPEND cpuinfo_src src/x86/windows/init.c) + endif() + +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv[5-8].*|aarch64|arm64)$") + list(APPEND cpuinfo_src src/arm/uarch.c src/arm/cache.c) + + if(LINUX OR ANDROID) + list(APPEND cpuinfo_src + src/arm/linux/init.c + src/arm/linux/cpuinfo.c + src/arm/linux/clusters.c + src/arm/linux/chipset.c + src/arm/linux/midr.c + src/arm/linux/hwcap.c) + + if(CMAKE_SYSTEM_PROCESSOR MATCHES "^armv[5-8]") + list(APPEND cpuinfo_src src/arm/linux/aarch32-isa.c) + + if(ANDROID AND ANDROID_ABI STREQUAL "armeabi") + set_source_files_properties(src/arm/linux/aarch32-isa.c PROPERTIES COMPILE_FLAGS -marm) + endif() + + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64)$") + list(APPEND cpuinfo_src src/arm/linux/aarch64-isa.c) + endif() + + endif() + + if(ANDROID) + list(APPEND cpuinfo_src src/arm/android/properties.c) + endif() + +endif() + +if(LINUX OR ANDROID) + list(APPEND cpuinfo_src + src/linux/smallfile.c + src/linux/multiline.c + src/linux/cpulist.c + src/linux/processors.c) +endif() + +if (LINUX) + set_source_files_properties(${cpuinfo_src} PROPERTIES COMPILE_FLAGS "-D_GNU_SOURCE=1") +endif() + +include_directories(include src deps/clog/include) + +add_library(cpuinfo STATIC ${cpuinfo_src}) + +if (MINGW) + if (CLANG) + target_compile_options(cpuinfo PRIVATE -Wno-unused-variable -Wno-implicit-function-declaration) + else() + target_compile_options(cpuinfo PRIVATE -Wno-maybe-uninitialized -Wno-unused-variable -Wno-implicit-function-declaration -Wno-format -Wno-format-extra-args) + endif() +elseif (LINUX) + if (CLANG) + else() + target_compile_options(cpuinfo PRIVATE -Wno-unused-result) + endif() +elseif (MSVC) + if (CLANG) + target_compile_options(cpuinfo PRIVATE -Wno-unused-variable -Wno-deprecated-declarations -Wno-implicit-function-declaration) + else() + endif() +elseif(ANDROID) + target_compile_options(cpuinfo PRIVATE -Wno-implicit-function-declaration) +endif() + + +target_include_directories(cpuinfo PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include") + + + diff --git a/3rdparty/cpuinfo/LICENSE b/3rdparty/cpuinfo/LICENSE new file mode 100644 index 000000000..3f9a4f020 --- /dev/null +++ b/3rdparty/cpuinfo/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2019 Google LLC +Copyright (c) 2017-2018 Facebook Inc. +Copyright (C) 2012-2017 Georgia Institute of Technology +Copyright (C) 2010-2012 Marat Dukhan + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/3rdparty/cpuinfo/deps/clog/LICENSE b/3rdparty/cpuinfo/deps/clog/LICENSE new file mode 100644 index 000000000..306de3d8f --- /dev/null +++ b/3rdparty/cpuinfo/deps/clog/LICENSE @@ -0,0 +1,26 @@ +Copyright (C) 2018 Marat Dukhan +Copyright (c) 2017-2018 Facebook Inc. +Copyright (c) 2017 Georgia Institute of Technology + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/3rdparty/cpuinfo/deps/clog/include/clog.h b/3rdparty/cpuinfo/deps/clog/include/clog.h new file mode 100644 index 000000000..414376116 --- /dev/null +++ b/3rdparty/cpuinfo/deps/clog/include/clog.h @@ -0,0 +1,100 @@ +#pragma once + +#include +#include +#include + +#define CLOG_NONE 0 +#define CLOG_FATAL 1 +#define CLOG_ERROR 2 +#define CLOG_WARNING 3 +#define CLOG_INFO 4 +#define CLOG_DEBUG 5 + +#ifndef CLOG_VISIBILITY + #if defined(__ELF__) + #define CLOG_VISIBILITY __attribute__((__visibility__("internal"))) + #elif defined(__MACH__) + #define CLOG_VISIBILITY __attribute__((__visibility__("hidden"))) + #else + #define CLOG_VISIBILITY + #endif +#endif + +#ifndef CLOG_ARGUMENTS_FORMAT + #if defined(__GNUC__) + #define CLOG_ARGUMENTS_FORMAT __attribute__((__format__(__printf__, 1, 2))) + #else + #define CLOG_ARGUMENTS_FORMAT + #endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +CLOG_VISIBILITY void clog_vlog_debug(const char* module, const char* format, va_list args); +CLOG_VISIBILITY void clog_vlog_info(const char* module, const char* format, va_list args); +CLOG_VISIBILITY void clog_vlog_warning(const char* module, const char* format, va_list args); +CLOG_VISIBILITY void clog_vlog_error(const char* module, const char* format, va_list args); +CLOG_VISIBILITY void clog_vlog_fatal(const char* module, const char* format, va_list args); + +#define CLOG_DEFINE_LOG_DEBUG(log_debug_function_name, module, level) \ + CLOG_ARGUMENTS_FORMAT \ + inline static void log_debug_function_name(const char* format, ...) { \ + if (level >= CLOG_DEBUG) { \ + va_list args; \ + va_start(args, format); \ + clog_vlog_debug(module, format, args); \ + va_end(args); \ + } \ + } + +#define CLOG_DEFINE_LOG_INFO(log_info_function_name, module, level) \ + CLOG_ARGUMENTS_FORMAT \ + inline static void log_info_function_name(const char* format, ...) { \ + if (level >= CLOG_INFO) { \ + va_list args; \ + va_start(args, format); \ + clog_vlog_info(module, format, args); \ + va_end(args); \ + } \ + } + +#define CLOG_DEFINE_LOG_WARNING(log_warning_function_name, module, level) \ + CLOG_ARGUMENTS_FORMAT \ + inline static void log_warning_function_name(const char* format, ...) { \ + if (level >= CLOG_WARNING) { \ + va_list args; \ + va_start(args, format); \ + clog_vlog_warning(module, format, args); \ + va_end(args); \ + } \ + } + +#define CLOG_DEFINE_LOG_ERROR(log_error_function_name, module, level) \ + CLOG_ARGUMENTS_FORMAT \ + inline static void log_error_function_name(const char* format, ...) { \ + if (level >= CLOG_ERROR) { \ + va_list args; \ + va_start(args, format); \ + clog_vlog_error(module, format, args); \ + va_end(args); \ + } \ + } + +#define CLOG_DEFINE_LOG_FATAL(log_fatal_function_name, module, level) \ + CLOG_ARGUMENTS_FORMAT \ + inline static void log_fatal_function_name(const char* format, ...) { \ + if (level >= CLOG_FATAL) { \ + va_list args; \ + va_start(args, format); \ + clog_vlog_fatal(module, format, args); \ + va_end(args); \ + } \ + abort(); \ + } + +#ifdef __cplusplus +} /* extern "C" */ +#endif diff --git a/3rdparty/cpuinfo/deps/clog/src/clog.c b/3rdparty/cpuinfo/deps/clog/src/clog.c new file mode 100644 index 000000000..fe5d43e1f --- /dev/null +++ b/3rdparty/cpuinfo/deps/clog/src/clog.c @@ -0,0 +1,423 @@ +#include +#include +#include +#include +#ifdef _WIN32 + #include +#else + #include +#endif +#ifdef __ANDROID__ + #include +#endif + +#ifndef CLOG_LOG_TO_STDIO + #ifdef __ANDROID__ + #define CLOG_LOG_TO_STDIO 0 + #else + #define CLOG_LOG_TO_STDIO 1 + #endif +#endif + +#include + + +/* Messages up to this size are formatted entirely on-stack, and don't allocate heap memory */ +#define CLOG_STACK_BUFFER_SIZE 1024 + +#define CLOG_FATAL_PREFIX "Fatal error: " +#define CLOG_FATAL_PREFIX_LENGTH 13 +#define CLOG_FATAL_PREFIX_FORMAT "Fatal error in %s: " +#define CLOG_ERROR_PREFIX "Error: " +#define CLOG_ERROR_PREFIX_LENGTH 7 +#define CLOG_ERROR_PREFIX_FORMAT "Error in %s: " +#define CLOG_WARNING_PREFIX "Warning: " +#define CLOG_WARNING_PREFIX_LENGTH 9 +#define CLOG_WARNING_PREFIX_FORMAT "Warning in %s: " +#define CLOG_INFO_PREFIX "Note: " +#define CLOG_INFO_PREFIX_LENGTH 6 +#define CLOG_INFO_PREFIX_FORMAT "Note (%s): " +#define CLOG_DEBUG_PREFIX "Debug: " +#define CLOG_DEBUG_PREFIX_LENGTH 7 +#define CLOG_DEBUG_PREFIX_FORMAT "Debug (%s): " +#define CLOG_SUFFIX_LENGTH 1 + +void clog_vlog_fatal(const char* module, const char* format, va_list args) { + #if defined(__ANDROID__) && !CLOG_LOG_TO_STDIO + __android_log_vprint(ANDROID_LOG_FATAL, module, format, args); + #else + char stack_buffer[CLOG_STACK_BUFFER_SIZE]; + char* heap_buffer = NULL; + char* out_buffer = &stack_buffer[0]; + + /* The first call to vsnprintf will clobber args, thus need a copy in case a second vsnprintf call is needed */ + va_list args_copy; + va_copy(args_copy, args); + + int prefix_chars = CLOG_FATAL_PREFIX_LENGTH; + if (module == NULL) { + memcpy(stack_buffer, CLOG_FATAL_PREFIX, CLOG_FATAL_PREFIX_LENGTH); + } else { + prefix_chars = snprintf(stack_buffer, CLOG_STACK_BUFFER_SIZE, CLOG_FATAL_PREFIX_FORMAT, module); + if (prefix_chars < 0) { + /* Format error in prefix (possible if prefix is modified): skip prefix and continue as if nothing happened. */ + prefix_chars = 0; + } + } + + int format_chars; + if (prefix_chars + CLOG_SUFFIX_LENGTH >= CLOG_STACK_BUFFER_SIZE) { + /* + * Prefix + suffix alone would overflow the on-stack buffer, thus need to use on-heap buffer. + * Do not even try to format the string into on-stack buffer. + */ + format_chars = vsnprintf(NULL, 0, format, args); + } else { + format_chars = + vsnprintf( + &stack_buffer[prefix_chars], + CLOG_STACK_BUFFER_SIZE - prefix_chars - CLOG_SUFFIX_LENGTH, + format, + args); + } + if (format_chars < 0) { + /* Format error in the message: silently ignore this particular message. */ + goto cleanup; + } + if (prefix_chars + format_chars + CLOG_SUFFIX_LENGTH > CLOG_STACK_BUFFER_SIZE) { + /* Allocate a buffer on heap, and vsnprintf to this buffer */ + heap_buffer = malloc(prefix_chars + format_chars + CLOG_SUFFIX_LENGTH); + if (heap_buffer == NULL) { + goto cleanup; + } + + if (prefix_chars > CLOG_STACK_BUFFER_SIZE) { + /* Prefix didn't fit into on-stack buffer, re-format it again to on-heap buffer */ + snprintf(heap_buffer, prefix_chars + 1 /* for '\0'-terminator */, CLOG_FATAL_PREFIX_FORMAT, module); + } else { + /* Copy pre-formatted prefix from on-stack buffer to on-heap buffer */ + memcpy(heap_buffer, stack_buffer, prefix_chars); + } + vsnprintf(heap_buffer + prefix_chars, format_chars + CLOG_SUFFIX_LENGTH, format, args_copy); + out_buffer = heap_buffer; + } + out_buffer[prefix_chars + format_chars] = '\n'; + #ifdef _WIN32 + DWORD bytes_written; + WriteFile( + GetStdHandle(STD_ERROR_HANDLE), + out_buffer, prefix_chars + format_chars + CLOG_SUFFIX_LENGTH, + &bytes_written, NULL); + #else + write(STDERR_FILENO, out_buffer, prefix_chars + format_chars + CLOG_SUFFIX_LENGTH); + #endif + +cleanup: + free(heap_buffer); + va_end(args_copy); + #endif +} + +void clog_vlog_error(const char* module, const char* format, va_list args) { + #if defined(__ANDROID__) && !CLOG_LOG_TO_STDIO + __android_log_vprint(ANDROID_LOG_ERROR, module, format, args); + #else + char stack_buffer[CLOG_STACK_BUFFER_SIZE]; + char* heap_buffer = NULL; + char* out_buffer = &stack_buffer[0]; + + /* The first call to vsnprintf will clobber args, thus need a copy in case a second vsnprintf call is needed */ + va_list args_copy; + va_copy(args_copy, args); + + int prefix_chars = CLOG_ERROR_PREFIX_LENGTH; + if (module == NULL) { + memcpy(stack_buffer, CLOG_ERROR_PREFIX, CLOG_ERROR_PREFIX_LENGTH); + } else { + prefix_chars = snprintf(stack_buffer, CLOG_STACK_BUFFER_SIZE, CLOG_ERROR_PREFIX_FORMAT, module); + if (prefix_chars < 0) { + /* Format error in prefix (possible if prefix is modified): skip prefix and continue as if nothing happened. */ + prefix_chars = 0; + } + } + + int format_chars; + if (prefix_chars + CLOG_SUFFIX_LENGTH >= CLOG_STACK_BUFFER_SIZE) { + /* + * Prefix + suffix alone would overflow the on-stack buffer, thus need to use on-heap buffer. + * Do not even try to format the string into on-stack buffer. + */ + format_chars = vsnprintf(NULL, 0, format, args); + } else { + format_chars = + vsnprintf( + &stack_buffer[prefix_chars], + CLOG_STACK_BUFFER_SIZE - prefix_chars - CLOG_SUFFIX_LENGTH, + format, + args); + } + if (format_chars < 0) { + /* Format error in the message: silently ignore this particular message. */ + goto cleanup; + } + if (prefix_chars + format_chars + CLOG_SUFFIX_LENGTH > CLOG_STACK_BUFFER_SIZE) { + /* Allocate a buffer on heap, and vsnprintf to this buffer */ + heap_buffer = malloc(prefix_chars + format_chars + CLOG_SUFFIX_LENGTH); + if (heap_buffer == NULL) { + goto cleanup; + } + + if (prefix_chars > CLOG_STACK_BUFFER_SIZE) { + /* Prefix didn't fit into on-stack buffer, re-format it again to on-heap buffer */ + snprintf(heap_buffer, prefix_chars + 1 /* for '\0'-terminator */, CLOG_ERROR_PREFIX_FORMAT, module); + } else { + /* Copy pre-formatted prefix from on-stack buffer to on-heap buffer */ + memcpy(heap_buffer, stack_buffer, prefix_chars); + } + vsnprintf(heap_buffer + prefix_chars, format_chars + CLOG_SUFFIX_LENGTH, format, args_copy); + out_buffer = heap_buffer; + } + out_buffer[prefix_chars + format_chars] = '\n'; + #ifdef _WIN32 + DWORD bytes_written; + WriteFile( + GetStdHandle(STD_ERROR_HANDLE), + out_buffer, prefix_chars + format_chars + CLOG_SUFFIX_LENGTH, + &bytes_written, NULL); + #else + write(STDERR_FILENO, out_buffer, prefix_chars + format_chars + CLOG_SUFFIX_LENGTH); + #endif + +cleanup: + free(heap_buffer); + va_end(args_copy); + #endif +} + +void clog_vlog_warning(const char* module, const char* format, va_list args) { + #if defined(__ANDROID__) && !CLOG_LOG_TO_STDIO + __android_log_vprint(ANDROID_LOG_WARN, module, format, args); + #else + char stack_buffer[CLOG_STACK_BUFFER_SIZE]; + char* heap_buffer = NULL; + char* out_buffer = &stack_buffer[0]; + + /* The first call to vsnprintf will clobber args, thus need a copy in case a second vsnprintf call is needed */ + va_list args_copy; + va_copy(args_copy, args); + + int prefix_chars = CLOG_WARNING_PREFIX_LENGTH; + if (module == NULL) { + memcpy(stack_buffer, CLOG_WARNING_PREFIX, CLOG_WARNING_PREFIX_LENGTH); + } else { + prefix_chars = snprintf(stack_buffer, CLOG_STACK_BUFFER_SIZE, CLOG_WARNING_PREFIX_FORMAT, module); + if (prefix_chars < 0) { + /* Format error in prefix (possible if prefix is modified): skip prefix and continue as if nothing happened. */ + prefix_chars = 0; + } + } + + int format_chars; + if (prefix_chars + CLOG_SUFFIX_LENGTH >= CLOG_STACK_BUFFER_SIZE) { + /* + * Prefix + suffix alone would overflow the on-stack buffer, thus need to use on-heap buffer. + * Do not even try to format the string into on-stack buffer. + */ + format_chars = vsnprintf(NULL, 0, format, args); + } else { + format_chars = + vsnprintf( + &stack_buffer[prefix_chars], + CLOG_STACK_BUFFER_SIZE - prefix_chars - CLOG_SUFFIX_LENGTH, + format, + args); + } + if (format_chars < 0) { + /* Format error in the message: silently ignore this particular message. */ + goto cleanup; + } + if (prefix_chars + format_chars + CLOG_SUFFIX_LENGTH > CLOG_STACK_BUFFER_SIZE) { + /* Allocate a buffer on heap, and vsnprintf to this buffer */ + heap_buffer = malloc(prefix_chars + format_chars + CLOG_SUFFIX_LENGTH); + if (heap_buffer == NULL) { + goto cleanup; + } + + if (prefix_chars > CLOG_STACK_BUFFER_SIZE) { + /* Prefix didn't fit into on-stack buffer, re-format it again to on-heap buffer */ + snprintf(heap_buffer, prefix_chars + 1 /* for '\0'-terminator */, CLOG_WARNING_PREFIX_FORMAT, module); + } else { + /* Copy pre-formatted prefix from on-stack buffer to on-heap buffer */ + memcpy(heap_buffer, stack_buffer, prefix_chars); + } + vsnprintf(heap_buffer + prefix_chars, format_chars + CLOG_SUFFIX_LENGTH, format, args_copy); + out_buffer = heap_buffer; + } + out_buffer[prefix_chars + format_chars] = '\n'; + #ifdef _WIN32 + DWORD bytes_written; + WriteFile( + GetStdHandle(STD_ERROR_HANDLE), + out_buffer, prefix_chars + format_chars + CLOG_SUFFIX_LENGTH, + &bytes_written, NULL); + #else + write(STDERR_FILENO, out_buffer, prefix_chars + format_chars + CLOG_SUFFIX_LENGTH); + #endif + +cleanup: + free(heap_buffer); + va_end(args_copy); + #endif +} + +void clog_vlog_info(const char* module, const char* format, va_list args) { + #if defined(__ANDROID__) && !CLOG_LOG_TO_STDIO + __android_log_vprint(ANDROID_LOG_INFO, module, format, args); + #else + char stack_buffer[CLOG_STACK_BUFFER_SIZE]; + char* heap_buffer = NULL; + char* out_buffer = &stack_buffer[0]; + + /* The first call to vsnprintf will clobber args, thus need a copy in case a second vsnprintf call is needed */ + va_list args_copy; + va_copy(args_copy, args); + + int prefix_chars = CLOG_INFO_PREFIX_LENGTH; + if (module == NULL) { + memcpy(stack_buffer, CLOG_INFO_PREFIX, CLOG_INFO_PREFIX_LENGTH); + } else { + prefix_chars = snprintf(stack_buffer, CLOG_STACK_BUFFER_SIZE, CLOG_INFO_PREFIX_FORMAT, module); + if (prefix_chars < 0) { + /* Format error in prefix (possible if prefix is modified): skip prefix and continue as if nothing happened. */ + prefix_chars = 0; + } + } + + int format_chars; + if (prefix_chars + CLOG_SUFFIX_LENGTH >= CLOG_STACK_BUFFER_SIZE) { + /* + * Prefix + suffix alone would overflow the on-stack buffer, thus need to use on-heap buffer. + * Do not even try to format the string into on-stack buffer. + */ + format_chars = vsnprintf(NULL, 0, format, args); + } else { + format_chars = + vsnprintf( + &stack_buffer[prefix_chars], + CLOG_STACK_BUFFER_SIZE - prefix_chars - CLOG_SUFFIX_LENGTH, + format, + args); + } + if (format_chars < 0) { + /* Format error in the message: silently ignore this particular message. */ + goto cleanup; + } + if (prefix_chars + format_chars + CLOG_SUFFIX_LENGTH > CLOG_STACK_BUFFER_SIZE) { + /* Allocate a buffer on heap, and vsnprintf to this buffer */ + heap_buffer = malloc(prefix_chars + format_chars + CLOG_SUFFIX_LENGTH); + if (heap_buffer == NULL) { + goto cleanup; + } + + if (prefix_chars > CLOG_STACK_BUFFER_SIZE) { + /* Prefix didn't fit into on-stack buffer, re-format it again to on-heap buffer */ + snprintf(heap_buffer, prefix_chars + 1 /* for '\0'-terminator */, CLOG_INFO_PREFIX_FORMAT, module); + } else { + /* Copy pre-formatted prefix from on-stack buffer to on-heap buffer */ + memcpy(heap_buffer, stack_buffer, prefix_chars); + } + vsnprintf(heap_buffer + prefix_chars, format_chars + CLOG_SUFFIX_LENGTH, format, args_copy); + out_buffer = heap_buffer; + } + out_buffer[prefix_chars + format_chars] = '\n'; + #ifdef _WIN32 + DWORD bytes_written; + WriteFile( + GetStdHandle(STD_OUTPUT_HANDLE), + out_buffer, prefix_chars + format_chars + CLOG_SUFFIX_LENGTH, + &bytes_written, NULL); + #else + write(STDOUT_FILENO, out_buffer, prefix_chars + format_chars + CLOG_SUFFIX_LENGTH); + #endif + +cleanup: + free(heap_buffer); + va_end(args_copy); + #endif +} + +void clog_vlog_debug(const char* module, const char* format, va_list args) { + #if defined(__ANDROID__) && !CLOG_LOG_TO_STDIO + __android_log_vprint(ANDROID_LOG_DEBUG, module, format, args); + #else + char stack_buffer[CLOG_STACK_BUFFER_SIZE]; + char* heap_buffer = NULL; + char* out_buffer = &stack_buffer[0]; + + /* The first call to vsnprintf will clobber args, thus need a copy in case a second vsnprintf call is needed */ + va_list args_copy; + va_copy(args_copy, args); + + int prefix_chars = CLOG_DEBUG_PREFIX_LENGTH; + if (module == NULL) { + memcpy(stack_buffer, CLOG_DEBUG_PREFIX, CLOG_DEBUG_PREFIX_LENGTH); + } else { + prefix_chars = snprintf(stack_buffer, CLOG_STACK_BUFFER_SIZE, CLOG_DEBUG_PREFIX_FORMAT, module); + if (prefix_chars < 0) { + /* Format error in prefix (possible if prefix is modified): skip prefix and continue as if nothing happened. */ + prefix_chars = 0; + } + } + + int format_chars; + if (prefix_chars + CLOG_SUFFIX_LENGTH >= CLOG_STACK_BUFFER_SIZE) { + /* + * Prefix + suffix alone would overflow the on-stack buffer, thus need to use on-heap buffer. + * Do not even try to format the string into on-stack buffer. + */ + format_chars = vsnprintf(NULL, 0, format, args); + } else { + format_chars = + vsnprintf( + &stack_buffer[prefix_chars], + CLOG_STACK_BUFFER_SIZE - prefix_chars - CLOG_SUFFIX_LENGTH, + format, + args); + } + if (format_chars < 0) { + /* Format error in the message: silently ignore this particular message. */ + goto cleanup; + } + if (prefix_chars + format_chars + CLOG_SUFFIX_LENGTH > CLOG_STACK_BUFFER_SIZE) { + /* Allocate a buffer on heap, and vsnprintf to this buffer */ + heap_buffer = malloc(prefix_chars + format_chars + CLOG_SUFFIX_LENGTH); + if (heap_buffer == NULL) { + goto cleanup; + } + + if (prefix_chars > CLOG_STACK_BUFFER_SIZE) { + /* Prefix didn't fit into on-stack buffer, re-format it again to on-heap buffer */ + snprintf(heap_buffer, prefix_chars + 1 /* for '\0'-terminator */, CLOG_DEBUG_PREFIX_FORMAT, module); + } else { + /* Copy pre-formatted prefix from on-stack buffer to on-heap buffer */ + memcpy(heap_buffer, stack_buffer, prefix_chars); + } + vsnprintf(heap_buffer + prefix_chars, format_chars + CLOG_SUFFIX_LENGTH, format, args_copy); + out_buffer = heap_buffer; + } + out_buffer[prefix_chars + format_chars] = '\n'; + #ifdef _WIN32 + DWORD bytes_written; + WriteFile( + GetStdHandle(STD_OUTPUT_HANDLE), + out_buffer, prefix_chars + format_chars + CLOG_SUFFIX_LENGTH, + &bytes_written, NULL); + #else + write(STDOUT_FILENO, out_buffer, prefix_chars + format_chars + CLOG_SUFFIX_LENGTH); + #endif + +cleanup: + free(heap_buffer); + va_end(args_copy); + #endif +} diff --git a/3rdparty/cpuinfo/include/cpuinfo-mock.h b/3rdparty/cpuinfo/include/cpuinfo-mock.h new file mode 100644 index 000000000..3c1f637d9 --- /dev/null +++ b/3rdparty/cpuinfo/include/cpuinfo-mock.h @@ -0,0 +1,78 @@ +#pragma once +#ifndef CPUINFO_MOCK_H +#define CPUINFO_MOCK_H + +#include +#include + +#include +#if defined(__linux__) + #include +#endif + +#if !defined(CPUINFO_MOCK) || !(CPUINFO_MOCK) + #error This header is intended only for test use +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +#if CPUINFO_ARCH_ARM + void CPUINFO_ABI cpuinfo_set_fpsid(uint32_t fpsid); + void CPUINFO_ABI cpuinfo_set_wcid(uint32_t wcid); +#endif /* CPUINFO_ARCH_ARM */ + +#if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + struct cpuinfo_mock_cpuid { + uint32_t input_eax; + uint32_t input_ecx; + uint32_t eax; + uint32_t ebx; + uint32_t ecx; + uint32_t edx; + }; + + void CPUINFO_ABI cpuinfo_mock_set_cpuid(struct cpuinfo_mock_cpuid* dump, size_t entries); + void CPUINFO_ABI cpuinfo_mock_get_cpuid(uint32_t eax, uint32_t regs[4]); + void CPUINFO_ABI cpuinfo_mock_get_cpuidex(uint32_t eax, uint32_t ecx, uint32_t regs[4]); +#endif /* CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 */ + +struct cpuinfo_mock_file { + const char* path; + size_t size; + const char* content; + size_t offset; +}; + +struct cpuinfo_mock_property { + const char* key; + const char* value; +}; + +#if defined(__linux__) + void CPUINFO_ABI cpuinfo_mock_filesystem(struct cpuinfo_mock_file* files); + int CPUINFO_ABI cpuinfo_mock_open(const char* path, int oflag); + int CPUINFO_ABI cpuinfo_mock_close(int fd); + ssize_t CPUINFO_ABI cpuinfo_mock_read(int fd, void* buffer, size_t capacity); + + #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + void CPUINFO_ABI cpuinfo_set_hwcap(uint32_t hwcap); + #endif + #if CPUINFO_ARCH_ARM + void CPUINFO_ABI cpuinfo_set_hwcap2(uint32_t hwcap2); + #endif +#endif + +#if defined(__ANDROID__) + void CPUINFO_ABI cpuinfo_mock_android_properties(struct cpuinfo_mock_property* properties); + void CPUINFO_ABI cpuinfo_mock_gl_renderer(const char* renderer); +#endif + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* CPUINFO_MOCK_H */ diff --git a/3rdparty/cpuinfo/include/cpuinfo.h b/3rdparty/cpuinfo/include/cpuinfo.h new file mode 100644 index 000000000..258abd029 --- /dev/null +++ b/3rdparty/cpuinfo/include/cpuinfo.h @@ -0,0 +1,1894 @@ +#pragma once +#ifndef CPUINFO_H +#define CPUINFO_H + +#ifndef __cplusplus + #include +#endif + +#ifdef __APPLE__ + #include +#endif + +#include + +/* Identify architecture and define corresponding macro */ + +#if defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) || defined(_M_IX86) + #define CPUINFO_ARCH_X86 1 +#endif + +#if defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64) + #define CPUINFO_ARCH_X86_64 1 +#endif + +#if defined(__arm__) || defined(_M_ARM) + #define CPUINFO_ARCH_ARM 1 +#endif + +#if defined(__aarch64__) || defined(_M_ARM64) + #define CPUINFO_ARCH_ARM64 1 +#endif + +#if defined(__PPC64__) || defined(__powerpc64__) || defined(_ARCH_PPC64) + #define CPUINFO_ARCH_PPC64 1 +#endif + +#if defined(__asmjs__) + #define CPUINFO_ARCH_ASMJS 1 +#endif + +#if defined(__wasm__) + #if defined(__wasm_simd128__) + #define CPUINFO_ARCH_WASMSIMD 1 + #else + #define CPUINFO_ARCH_WASM 1 + #endif +#endif + +/* Define other architecture-specific macros as 0 */ + +#ifndef CPUINFO_ARCH_X86 + #define CPUINFO_ARCH_X86 0 +#endif + +#ifndef CPUINFO_ARCH_X86_64 + #define CPUINFO_ARCH_X86_64 0 +#endif + +#ifndef CPUINFO_ARCH_ARM + #define CPUINFO_ARCH_ARM 0 +#endif + +#ifndef CPUINFO_ARCH_ARM64 + #define CPUINFO_ARCH_ARM64 0 +#endif + +#ifndef CPUINFO_ARCH_PPC64 + #define CPUINFO_ARCH_PPC64 0 +#endif + +#ifndef CPUINFO_ARCH_ASMJS + #define CPUINFO_ARCH_ASMJS 0 +#endif + +#ifndef CPUINFO_ARCH_WASM + #define CPUINFO_ARCH_WASM 0 +#endif + +#ifndef CPUINFO_ARCH_WASMSIMD + #define CPUINFO_ARCH_WASMSIMD 0 +#endif + +#if CPUINFO_ARCH_X86 && defined(_MSC_VER) + #define CPUINFO_ABI __cdecl +#elif CPUINFO_ARCH_X86 && defined(__GNUC__) + #define CPUINFO_ABI __attribute__((__cdecl__)) +#else + #define CPUINFO_ABI +#endif + +#define CPUINFO_CACHE_UNIFIED 0x00000001 +#define CPUINFO_CACHE_INCLUSIVE 0x00000002 +#define CPUINFO_CACHE_COMPLEX_INDEXING 0x00000004 + +struct cpuinfo_cache { + /** Cache size in bytes */ + uint32_t size; + /** Number of ways of associativity */ + uint32_t associativity; + /** Number of sets */ + uint32_t sets; + /** Number of partitions */ + uint32_t partitions; + /** Line size in bytes */ + uint32_t line_size; + /** + * Binary characteristics of the cache (unified cache, inclusive cache, cache with complex indexing). + * + * @see CPUINFO_CACHE_UNIFIED, CPUINFO_CACHE_INCLUSIVE, CPUINFO_CACHE_COMPLEX_INDEXING + */ + uint32_t flags; + /** Index of the first logical processor that shares this cache */ + uint32_t processor_start; + /** Number of logical processors that share this cache */ + uint32_t processor_count; +}; + +struct cpuinfo_trace_cache { + uint32_t uops; + uint32_t associativity; +}; + +#define CPUINFO_PAGE_SIZE_4KB 0x1000 +#define CPUINFO_PAGE_SIZE_1MB 0x100000 +#define CPUINFO_PAGE_SIZE_2MB 0x200000 +#define CPUINFO_PAGE_SIZE_4MB 0x400000 +#define CPUINFO_PAGE_SIZE_16MB 0x1000000 +#define CPUINFO_PAGE_SIZE_1GB 0x40000000 + +struct cpuinfo_tlb { + uint32_t entries; + uint32_t associativity; + uint64_t pages; +}; + +/** Vendor of processor core design */ +enum cpuinfo_vendor { + /** Processor vendor is not known to the library, or the library failed to get vendor information from the OS. */ + cpuinfo_vendor_unknown = 0, + + /* Active vendors of modern CPUs */ + + /** + * Intel Corporation. Vendor of x86, x86-64, IA64, and ARM processor microarchitectures. + * + * Sold its ARM design subsidiary in 2006. The last ARM processor design was released in 2004. + */ + cpuinfo_vendor_intel = 1, + /** Advanced Micro Devices, Inc. Vendor of x86 and x86-64 processor microarchitectures. */ + cpuinfo_vendor_amd = 2, + /** ARM Holdings plc. Vendor of ARM and ARM64 processor microarchitectures. */ + cpuinfo_vendor_arm = 3, + /** Qualcomm Incorporated. Vendor of ARM and ARM64 processor microarchitectures. */ + cpuinfo_vendor_qualcomm = 4, + /** Apple Inc. Vendor of ARM and ARM64 processor microarchitectures. */ + cpuinfo_vendor_apple = 5, + /** Samsung Electronics Co., Ltd. Vendir if ARM64 processor microarchitectures. */ + cpuinfo_vendor_samsung = 6, + /** Nvidia Corporation. Vendor of ARM64-compatible processor microarchitectures. */ + cpuinfo_vendor_nvidia = 7, + /** MIPS Technologies, Inc. Vendor of MIPS processor microarchitectures. */ + cpuinfo_vendor_mips = 8, + /** International Business Machines Corporation. Vendor of PowerPC processor microarchitectures. */ + cpuinfo_vendor_ibm = 9, + /** Ingenic Semiconductor. Vendor of MIPS processor microarchitectures. */ + cpuinfo_vendor_ingenic = 10, + /** + * VIA Technologies, Inc. Vendor of x86 and x86-64 processor microarchitectures. + * + * Processors are designed by Centaur Technology, a subsidiary of VIA Technologies. + */ + cpuinfo_vendor_via = 11, + /** Cavium, Inc. Vendor of ARM64 processor microarchitectures. */ + cpuinfo_vendor_cavium = 12, + /** Broadcom, Inc. Vendor of ARM processor microarchitectures. */ + cpuinfo_vendor_broadcom = 13, + /** Applied Micro Circuits Corporation (APM). Vendor of ARM64 processor microarchitectures. */ + cpuinfo_vendor_apm = 14, + /** + * Huawei Technologies Co., Ltd. Vendor of ARM64 processor microarchitectures. + * + * Processors are designed by HiSilicon, a subsidiary of Huawei. + */ + cpuinfo_vendor_huawei = 15, + /** + * Hygon (Chengdu Haiguang Integrated Circuit Design Co., Ltd), Vendor of x86-64 processor microarchitectures. + * + * Processors are variants of AMD cores. + */ + cpuinfo_vendor_hygon = 16, + + /* Active vendors of embedded CPUs */ + + /** Texas Instruments Inc. Vendor of ARM processor microarchitectures. */ + cpuinfo_vendor_texas_instruments = 30, + /** Marvell Technology Group Ltd. Vendor of ARM processor microarchitectures. */ + cpuinfo_vendor_marvell = 31, + /** RDC Semiconductor Co., Ltd. Vendor of x86 processor microarchitectures. */ + cpuinfo_vendor_rdc = 32, + /** DM&P Electronics Inc. Vendor of x86 processor microarchitectures. */ + cpuinfo_vendor_dmp = 33, + /** Motorola, Inc. Vendor of PowerPC and ARM processor microarchitectures. */ + cpuinfo_vendor_motorola = 34, + + /* Defunct CPU vendors */ + + /** + * Transmeta Corporation. Vendor of x86 processor microarchitectures. + * + * Now defunct. The last processor design was released in 2004. + * Transmeta processors implemented VLIW ISA and used binary translation to execute x86 code. + */ + cpuinfo_vendor_transmeta = 50, + /** + * Cyrix Corporation. Vendor of x86 processor microarchitectures. + * + * Now defunct. The last processor design was released in 1996. + */ + cpuinfo_vendor_cyrix = 51, + /** + * Rise Technology. Vendor of x86 processor microarchitectures. + * + * Now defunct. The last processor design was released in 1999. + */ + cpuinfo_vendor_rise = 52, + /** + * National Semiconductor. Vendor of x86 processor microarchitectures. + * + * Sold its x86 design subsidiary in 1999. The last processor design was released in 1998. + */ + cpuinfo_vendor_nsc = 53, + /** + * Silicon Integrated Systems. Vendor of x86 processor microarchitectures. + * + * Sold its x86 design subsidiary in 2001. The last processor design was released in 2001. + */ + cpuinfo_vendor_sis = 54, + /** + * NexGen. Vendor of x86 processor microarchitectures. + * + * Now defunct. The last processor design was released in 1994. + * NexGen designed the first x86 microarchitecture which decomposed x86 instructions into simple microoperations. + */ + cpuinfo_vendor_nexgen = 55, + /** + * United Microelectronics Corporation. Vendor of x86 processor microarchitectures. + * + * Ceased x86 in the early 1990s. The last processor design was released in 1991. + * Designed U5C and U5D processors. Both are 486 level. + */ + cpuinfo_vendor_umc = 56, + /** + * Digital Equipment Corporation. Vendor of ARM processor microarchitecture. + * + * Sold its ARM designs in 1997. The last processor design was released in 1997. + */ + cpuinfo_vendor_dec = 57, +}; + +/** + * Processor microarchitecture + * + * Processors with different microarchitectures often have different instruction performance characteristics, + * and may have dramatically different pipeline organization. + */ +enum cpuinfo_uarch { + /** Microarchitecture is unknown, or the library failed to get information about the microarchitecture from OS */ + cpuinfo_uarch_unknown = 0, + + /** Pentium and Pentium MMX microarchitecture. */ + cpuinfo_uarch_p5 = 0x00100100, + /** Intel Quark microarchitecture. */ + cpuinfo_uarch_quark = 0x00100101, + + /** Pentium Pro, Pentium II, and Pentium III. */ + cpuinfo_uarch_p6 = 0x00100200, + /** Pentium M. */ + cpuinfo_uarch_dothan = 0x00100201, + /** Intel Core microarchitecture. */ + cpuinfo_uarch_yonah = 0x00100202, + /** Intel Core 2 microarchitecture on 65 nm process. */ + cpuinfo_uarch_conroe = 0x00100203, + /** Intel Core 2 microarchitecture on 45 nm process. */ + cpuinfo_uarch_penryn = 0x00100204, + /** Intel Nehalem and Westmere microarchitectures (Core i3/i5/i7 1st gen). */ + cpuinfo_uarch_nehalem = 0x00100205, + /** Intel Sandy Bridge microarchitecture (Core i3/i5/i7 2nd gen). */ + cpuinfo_uarch_sandy_bridge = 0x00100206, + /** Intel Ivy Bridge microarchitecture (Core i3/i5/i7 3rd gen). */ + cpuinfo_uarch_ivy_bridge = 0x00100207, + /** Intel Haswell microarchitecture (Core i3/i5/i7 4th gen). */ + cpuinfo_uarch_haswell = 0x00100208, + /** Intel Broadwell microarchitecture. */ + cpuinfo_uarch_broadwell = 0x00100209, + /** Intel Sky Lake microarchitecture (14 nm, including Kaby/Coffee/Whiskey/Amber/Comet/Cascade/Cooper Lake). */ + cpuinfo_uarch_sky_lake = 0x0010020A, + /** DEPRECATED (Intel Kaby Lake microarchitecture). */ + cpuinfo_uarch_kaby_lake = 0x0010020A, + /** Intel Palm Cove microarchitecture (10 nm, Cannon Lake). */ + cpuinfo_uarch_palm_cove = 0x0010020B, + /** Intel Sunny Cove microarchitecture (10 nm, Ice Lake). */ + cpuinfo_uarch_sunny_cove = 0x0010020C, + + /** Pentium 4 with Willamette, Northwood, or Foster cores. */ + cpuinfo_uarch_willamette = 0x00100300, + /** Pentium 4 with Prescott and later cores. */ + cpuinfo_uarch_prescott = 0x00100301, + + /** Intel Atom on 45 nm process. */ + cpuinfo_uarch_bonnell = 0x00100400, + /** Intel Atom on 32 nm process. */ + cpuinfo_uarch_saltwell = 0x00100401, + /** Intel Silvermont microarchitecture (22 nm out-of-order Atom). */ + cpuinfo_uarch_silvermont = 0x00100402, + /** Intel Airmont microarchitecture (14 nm out-of-order Atom). */ + cpuinfo_uarch_airmont = 0x00100403, + /** Intel Goldmont microarchitecture (Denverton, Apollo Lake). */ + cpuinfo_uarch_goldmont = 0x00100404, + /** Intel Goldmont Plus microarchitecture (Gemini Lake). */ + cpuinfo_uarch_goldmont_plus = 0x00100405, + + /** Intel Knights Ferry HPC boards. */ + cpuinfo_uarch_knights_ferry = 0x00100500, + /** Intel Knights Corner HPC boards (aka Xeon Phi). */ + cpuinfo_uarch_knights_corner = 0x00100501, + /** Intel Knights Landing microarchitecture (second-gen MIC). */ + cpuinfo_uarch_knights_landing = 0x00100502, + /** Intel Knights Hill microarchitecture (third-gen MIC). */ + cpuinfo_uarch_knights_hill = 0x00100503, + /** Intel Knights Mill Xeon Phi. */ + cpuinfo_uarch_knights_mill = 0x00100504, + + /** Intel/Marvell XScale series. */ + cpuinfo_uarch_xscale = 0x00100600, + + /** AMD K5. */ + cpuinfo_uarch_k5 = 0x00200100, + /** AMD K6 and alike. */ + cpuinfo_uarch_k6 = 0x00200101, + /** AMD Athlon and Duron. */ + cpuinfo_uarch_k7 = 0x00200102, + /** AMD Athlon 64, Opteron 64. */ + cpuinfo_uarch_k8 = 0x00200103, + /** AMD Family 10h (Barcelona, Istambul, Magny-Cours). */ + cpuinfo_uarch_k10 = 0x00200104, + /** + * AMD Bulldozer microarchitecture + * Zambezi FX-series CPUs, Zurich, Valencia and Interlagos Opteron CPUs. + */ + cpuinfo_uarch_bulldozer = 0x00200105, + /** + * AMD Piledriver microarchitecture + * Vishera FX-series CPUs, Trinity and Richland APUs, Delhi, Seoul, Abu Dhabi Opteron CPUs. + */ + cpuinfo_uarch_piledriver = 0x00200106, + /** AMD Steamroller microarchitecture (Kaveri APUs). */ + cpuinfo_uarch_steamroller = 0x00200107, + /** AMD Excavator microarchitecture (Carizzo APUs). */ + cpuinfo_uarch_excavator = 0x00200108, + /** AMD Zen microarchitecture (12/14 nm Ryzen and EPYC CPUs). */ + cpuinfo_uarch_zen = 0x00200109, + /** AMD Zen 2 microarchitecture (7 nm Ryzen and EPYC CPUs). */ + cpuinfo_uarch_zen2 = 0x0020010A, + /** AMD Zen 3 microarchitecture. */ + cpuinfo_uarch_zen3 = 0x0020010B, + + /** NSC Geode and AMD Geode GX and LX. */ + cpuinfo_uarch_geode = 0x00200200, + /** AMD Bobcat mobile microarchitecture. */ + cpuinfo_uarch_bobcat = 0x00200201, + /** AMD Jaguar mobile microarchitecture. */ + cpuinfo_uarch_jaguar = 0x00200202, + /** AMD Puma mobile microarchitecture. */ + cpuinfo_uarch_puma = 0x00200203, + + /** ARM7 series. */ + cpuinfo_uarch_arm7 = 0x00300100, + /** ARM9 series. */ + cpuinfo_uarch_arm9 = 0x00300101, + /** ARM 1136, ARM 1156, ARM 1176, or ARM 11MPCore. */ + cpuinfo_uarch_arm11 = 0x00300102, + + /** ARM Cortex-A5. */ + cpuinfo_uarch_cortex_a5 = 0x00300205, + /** ARM Cortex-A7. */ + cpuinfo_uarch_cortex_a7 = 0x00300207, + /** ARM Cortex-A8. */ + cpuinfo_uarch_cortex_a8 = 0x00300208, + /** ARM Cortex-A9. */ + cpuinfo_uarch_cortex_a9 = 0x00300209, + /** ARM Cortex-A12. */ + cpuinfo_uarch_cortex_a12 = 0x00300212, + /** ARM Cortex-A15. */ + cpuinfo_uarch_cortex_a15 = 0x00300215, + /** ARM Cortex-A17. */ + cpuinfo_uarch_cortex_a17 = 0x00300217, + + /** ARM Cortex-A32. */ + cpuinfo_uarch_cortex_a32 = 0x00300332, + /** ARM Cortex-A35. */ + cpuinfo_uarch_cortex_a35 = 0x00300335, + /** ARM Cortex-A53. */ + cpuinfo_uarch_cortex_a53 = 0x00300353, + /** ARM Cortex-A55 revision 0 (restricted dual-issue capabilities compared to revision 1+). */ + cpuinfo_uarch_cortex_a55r0 = 0x00300354, + /** ARM Cortex-A55. */ + cpuinfo_uarch_cortex_a55 = 0x00300355, + /** ARM Cortex-A57. */ + cpuinfo_uarch_cortex_a57 = 0x00300357, + /** ARM Cortex-A65. */ + cpuinfo_uarch_cortex_a65 = 0x00300365, + /** ARM Cortex-A72. */ + cpuinfo_uarch_cortex_a72 = 0x00300372, + /** ARM Cortex-A73. */ + cpuinfo_uarch_cortex_a73 = 0x00300373, + /** ARM Cortex-A75. */ + cpuinfo_uarch_cortex_a75 = 0x00300375, + /** ARM Cortex-A76. */ + cpuinfo_uarch_cortex_a76 = 0x00300376, + /** ARM Cortex-A77. */ + cpuinfo_uarch_cortex_a77 = 0x00300377, + /** ARM Cortex-A78. */ + cpuinfo_uarch_cortex_a78 = 0x00300378, + + /** ARM Neoverse N1. */ + cpuinfo_uarch_neoverse_n1 = 0x00300400, + /** ARM Neoverse E1. */ + cpuinfo_uarch_neoverse_e1 = 0x00300401, + /** ARM Neoverse V1. */ + cpuinfo_uarch_neoverse_v1 = 0x00300402, + /** ARM Neoverse N2. */ + cpuinfo_uarch_neoverse_n2 = 0x00300403, + + /** ARM Cortex-X1. */ + cpuinfo_uarch_cortex_x1 = 0x00300500, + + /** Qualcomm Scorpion. */ + cpuinfo_uarch_scorpion = 0x00400100, + /** Qualcomm Krait. */ + cpuinfo_uarch_krait = 0x00400101, + /** Qualcomm Kryo. */ + cpuinfo_uarch_kryo = 0x00400102, + /** Qualcomm Falkor. */ + cpuinfo_uarch_falkor = 0x00400103, + /** Qualcomm Saphira. */ + cpuinfo_uarch_saphira = 0x00400104, + + /** Nvidia Denver. */ + cpuinfo_uarch_denver = 0x00500100, + /** Nvidia Denver 2. */ + cpuinfo_uarch_denver2 = 0x00500101, + /** Nvidia Carmel. */ + cpuinfo_uarch_carmel = 0x00500102, + + /** Samsung Exynos M1 (Exynos 8890 big cores). */ + cpuinfo_uarch_exynos_m1 = 0x00600100, + /** Samsung Exynos M2 (Exynos 8895 big cores). */ + cpuinfo_uarch_exynos_m2 = 0x00600101, + /** Samsung Exynos M3 (Exynos 9810 big cores). */ + cpuinfo_uarch_exynos_m3 = 0x00600102, + /** Samsung Exynos M4 (Exynos 9820 big cores). */ + cpuinfo_uarch_exynos_m4 = 0x00600103, + /** Samsung Exynos M5 (Exynos 9830 big cores). */ + cpuinfo_uarch_exynos_m5 = 0x00600104, + + /* Deprecated synonym for Cortex-A76 */ + cpuinfo_uarch_cortex_a76ae = 0x00300376, + /* Deprecated names for Exynos. */ + cpuinfo_uarch_mongoose_m1 = 0x00600100, + cpuinfo_uarch_mongoose_m2 = 0x00600101, + cpuinfo_uarch_meerkat_m3 = 0x00600102, + cpuinfo_uarch_meerkat_m4 = 0x00600103, + + /** Apple A6 and A6X processors. */ + cpuinfo_uarch_swift = 0x00700100, + /** Apple A7 processor. */ + cpuinfo_uarch_cyclone = 0x00700101, + /** Apple A8 and A8X processor. */ + cpuinfo_uarch_typhoon = 0x00700102, + /** Apple A9 and A9X processor. */ + cpuinfo_uarch_twister = 0x00700103, + /** Apple A10 and A10X processor. */ + cpuinfo_uarch_hurricane = 0x00700104, + /** Apple A11 processor (big cores). */ + cpuinfo_uarch_monsoon = 0x00700105, + /** Apple A11 processor (little cores). */ + cpuinfo_uarch_mistral = 0x00700106, + /** Apple A12 processor (big cores). */ + cpuinfo_uarch_vortex = 0x00700107, + /** Apple A12 processor (little cores). */ + cpuinfo_uarch_tempest = 0x00700108, + /** Apple A13 processor (big cores). */ + cpuinfo_uarch_lightning = 0x00700109, + /** Apple A13 processor (little cores). */ + cpuinfo_uarch_thunder = 0x0070010A, + /** Apple M1 processor (big cores). */ + cpuinfo_uarch_firestorm = 0x0070010B, + /** Apple M1 processor (little cores). */ + cpuinfo_uarch_icestorm = 0x0070010C, + + /** Cavium ThunderX. */ + cpuinfo_uarch_thunderx = 0x00800100, + /** Cavium ThunderX2 (originally Broadcom Vulkan). */ + cpuinfo_uarch_thunderx2 = 0x00800200, + + /** Marvell PJ4. */ + cpuinfo_uarch_pj4 = 0x00900100, + + /** Broadcom Brahma B15. */ + cpuinfo_uarch_brahma_b15 = 0x00A00100, + /** Broadcom Brahma B53. */ + cpuinfo_uarch_brahma_b53 = 0x00A00101, + + /** Applied Micro X-Gene. */ + cpuinfo_uarch_xgene = 0x00B00100, + + /* Hygon Dhyana (a modification of AMD Zen for Chinese market). */ + cpuinfo_uarch_dhyana = 0x01000100, + + /** HiSilicon TaiShan v110 (Huawei Kunpeng 920 series processors). */ + cpuinfo_uarch_taishan_v110 = 0x00C00100, +}; + +struct cpuinfo_processor { + /** SMT (hyperthread) ID within a core */ + uint32_t smt_id; + /** Core containing this logical processor */ + const struct cpuinfo_core* core; + /** Cluster of cores containing this logical processor */ + const struct cpuinfo_cluster* cluster; + /** Physical package containing this logical processor */ + const struct cpuinfo_package* package; +#if defined(__linux__) + /** + * Linux-specific ID for the logical processor: + * - Linux kernel exposes information about this logical processor in /sys/devices/system/cpu/cpu/ + * - Bit in the cpu_set_t identifies this logical processor + */ + int linux_id; +#endif +#if defined(_WIN32) || defined(__CYGWIN__) + /** Windows-specific ID for the group containing the logical processor. */ + uint16_t windows_group_id; + /** + * Windows-specific ID of the logical processor within its group: + * - Bit in the KAFFINITY mask identifies this logical processor within its group. + */ + uint16_t windows_processor_id; +#endif +#if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + /** APIC ID (unique x86-specific ID of the logical processor) */ + uint32_t apic_id; +#endif + struct { + /** Level 1 instruction cache */ + const struct cpuinfo_cache* l1i; + /** Level 1 data cache */ + const struct cpuinfo_cache* l1d; + /** Level 2 unified or data cache */ + const struct cpuinfo_cache* l2; + /** Level 3 unified or data cache */ + const struct cpuinfo_cache* l3; + /** Level 4 unified or data cache */ + const struct cpuinfo_cache* l4; + } cache; +}; + +struct cpuinfo_core { + /** Index of the first logical processor on this core. */ + uint32_t processor_start; + /** Number of logical processors on this core */ + uint32_t processor_count; + /** Core ID within a package */ + uint32_t core_id; + /** Cluster containing this core */ + const struct cpuinfo_cluster* cluster; + /** Physical package containing this core. */ + const struct cpuinfo_package* package; + /** Vendor of the CPU microarchitecture for this core */ + enum cpuinfo_vendor vendor; + /** CPU microarchitecture for this core */ + enum cpuinfo_uarch uarch; +#if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + /** Value of CPUID leaf 1 EAX register for this core */ + uint32_t cpuid; +#elif CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + /** Value of Main ID Register (MIDR) for this core */ + uint32_t midr; +#endif + /** Clock rate (non-Turbo) of the core, in Hz */ + uint64_t frequency; +}; + +struct cpuinfo_cluster { + /** Index of the first logical processor in the cluster */ + uint32_t processor_start; + /** Number of logical processors in the cluster */ + uint32_t processor_count; + /** Index of the first core in the cluster */ + uint32_t core_start; + /** Number of cores on the cluster */ + uint32_t core_count; + /** Cluster ID within a package */ + uint32_t cluster_id; + /** Physical package containing the cluster */ + const struct cpuinfo_package* package; + /** CPU microarchitecture vendor of the cores in the cluster */ + enum cpuinfo_vendor vendor; + /** CPU microarchitecture of the cores in the cluster */ + enum cpuinfo_uarch uarch; +#if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + /** Value of CPUID leaf 1 EAX register of the cores in the cluster */ + uint32_t cpuid; +#elif CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + /** Value of Main ID Register (MIDR) of the cores in the cluster */ + uint32_t midr; +#endif + /** Clock rate (non-Turbo) of the cores in the cluster, in Hz */ + uint64_t frequency; +}; + +#define CPUINFO_PACKAGE_NAME_MAX 48 + +struct cpuinfo_package { + /** SoC or processor chip model name */ + char name[CPUINFO_PACKAGE_NAME_MAX]; + /** Index of the first logical processor on this physical package */ + uint32_t processor_start; + /** Number of logical processors on this physical package */ + uint32_t processor_count; + /** Index of the first core on this physical package */ + uint32_t core_start; + /** Number of cores on this physical package */ + uint32_t core_count; + /** Index of the first cluster of cores on this physical package */ + uint32_t cluster_start; + /** Number of clusters of cores on this physical package */ + uint32_t cluster_count; +}; + +struct cpuinfo_uarch_info { + /** Type of CPU microarchitecture */ + enum cpuinfo_uarch uarch; +#if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + /** Value of CPUID leaf 1 EAX register for the microarchitecture */ + uint32_t cpuid; +#elif CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + /** Value of Main ID Register (MIDR) for the microarchitecture */ + uint32_t midr; +#endif + /** Number of logical processors with the microarchitecture */ + uint32_t processor_count; + /** Number of cores with the microarchitecture */ + uint32_t core_count; +}; + +#ifdef __cplusplus +extern "C" { +#endif + +bool CPUINFO_ABI cpuinfo_initialize(void); + +void CPUINFO_ABI cpuinfo_deinitialize(void); + +#if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + /* This structure is not a part of stable API. Use cpuinfo_has_x86_* functions instead. */ + struct cpuinfo_x86_isa { + #if CPUINFO_ARCH_X86 + bool rdtsc; + #endif + bool rdtscp; + bool rdpid; + bool sysenter; + #if CPUINFO_ARCH_X86 + bool syscall; + #endif + bool msr; + bool clzero; + bool clflush; + bool clflushopt; + bool mwait; + bool mwaitx; + #if CPUINFO_ARCH_X86 + bool emmx; + #endif + bool fxsave; + bool xsave; + #if CPUINFO_ARCH_X86 + bool fpu; + bool mmx; + bool mmx_plus; + #endif + bool three_d_now; + bool three_d_now_plus; + #if CPUINFO_ARCH_X86 + bool three_d_now_geode; + #endif + bool prefetch; + bool prefetchw; + bool prefetchwt1; + #if CPUINFO_ARCH_X86 + bool daz; + bool sse; + bool sse2; + #endif + bool sse3; + bool ssse3; + bool sse4_1; + bool sse4_2; + bool sse4a; + bool misaligned_sse; + bool avx; + bool fma3; + bool fma4; + bool xop; + bool f16c; + bool avx2; + bool avx512f; + bool avx512pf; + bool avx512er; + bool avx512cd; + bool avx512dq; + bool avx512bw; + bool avx512vl; + bool avx512ifma; + bool avx512vbmi; + bool avx512vbmi2; + bool avx512bitalg; + bool avx512vpopcntdq; + bool avx512vnni; + bool avx512bf16; + bool avx512vp2intersect; + bool avx512_4vnniw; + bool avx512_4fmaps; + bool hle; + bool rtm; + bool xtest; + bool mpx; + #if CPUINFO_ARCH_X86 + bool cmov; + bool cmpxchg8b; + #endif + bool cmpxchg16b; + bool clwb; + bool movbe; + #if CPUINFO_ARCH_X86_64 + bool lahf_sahf; + #endif + bool fs_gs_base; + bool lzcnt; + bool popcnt; + bool tbm; + bool bmi; + bool bmi2; + bool adx; + bool aes; + bool vaes; + bool pclmulqdq; + bool vpclmulqdq; + bool gfni; + bool rdrand; + bool rdseed; + bool sha; + bool rng; + bool ace; + bool ace2; + bool phe; + bool pmm; + bool lwp; + }; + + extern struct cpuinfo_x86_isa cpuinfo_isa; +#endif + +static inline bool cpuinfo_has_x86_rdtsc(void) { + #if CPUINFO_ARCH_X86_64 + return true; + #elif CPUINFO_ARCH_X86 + #if defined(__ANDROID__) + return true; + #else + return cpuinfo_isa.rdtsc; + #endif + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_rdtscp(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.rdtscp; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_rdpid(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.rdpid; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_clzero(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.clzero; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_mwait(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.mwait; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_mwaitx(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.mwaitx; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_fxsave(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.fxsave; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_xsave(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.xsave; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_fpu(void) { + #if CPUINFO_ARCH_X86_64 + return true; + #elif CPUINFO_ARCH_X86 + #if defined(__ANDROID__) + return true; + #else + return cpuinfo_isa.fpu; + #endif + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_mmx(void) { + #if CPUINFO_ARCH_X86_64 + return true; + #elif CPUINFO_ARCH_X86 + #if defined(__ANDROID__) + return true; + #else + return cpuinfo_isa.mmx; + #endif + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_mmx_plus(void) { + #if CPUINFO_ARCH_X86_64 + return true; + #elif CPUINFO_ARCH_X86 + #if defined(__ANDROID__) + return true; + #else + return cpuinfo_isa.mmx_plus; + #endif + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_3dnow(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.three_d_now; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_3dnow_plus(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.three_d_now_plus; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_3dnow_geode(void) { + #if CPUINFO_ARCH_X86_64 + return false; + #elif CPUINFO_ARCH_X86 + #if defined(__ANDROID__) + return false; + #else + return cpuinfo_isa.three_d_now_geode; + #endif + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_prefetch(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.prefetch; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_prefetchw(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.prefetchw; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_prefetchwt1(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.prefetchwt1; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_daz(void) { + #if CPUINFO_ARCH_X86_64 + return true; + #elif CPUINFO_ARCH_X86 + #if defined(__ANDROID__) + return true; + #else + return cpuinfo_isa.daz; + #endif + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_sse(void) { + #if CPUINFO_ARCH_X86_64 + return true; + #elif CPUINFO_ARCH_X86 + #if defined(__ANDROID__) + return true; + #else + return cpuinfo_isa.sse; + #endif + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_sse2(void) { + #if CPUINFO_ARCH_X86_64 + return true; + #elif CPUINFO_ARCH_X86 + #if defined(__ANDROID__) + return true; + #else + return cpuinfo_isa.sse2; + #endif + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_sse3(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + #if defined(__ANDROID__) + return true; + #else + return cpuinfo_isa.sse3; + #endif + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_ssse3(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + #if defined(__ANDROID__) + return true; + #else + return cpuinfo_isa.ssse3; + #endif + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_sse4_1(void) { + #if CPUINFO_ARCH_X86_64 + #if defined(__ANDROID__) + return true; + #else + return cpuinfo_isa.sse4_1; + #endif + #elif CPUINFO_ARCH_X86 + return cpuinfo_isa.sse4_1; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_sse4_2(void) { + #if CPUINFO_ARCH_X86_64 + #if defined(__ANDROID__) + return true; + #else + return cpuinfo_isa.sse4_2; + #endif + #elif CPUINFO_ARCH_X86 + return cpuinfo_isa.sse4_2; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_sse4a(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.sse4a; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_misaligned_sse(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.misaligned_sse; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_avx(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.avx; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_fma3(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.fma3; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_fma4(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.fma4; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_xop(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.xop; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_f16c(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.f16c; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_avx2(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.avx2; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_avx512f(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.avx512f; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_avx512pf(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.avx512pf; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_avx512er(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.avx512er; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_avx512cd(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.avx512cd; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_avx512dq(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.avx512dq; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_avx512bw(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.avx512bw; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_avx512vl(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.avx512vl; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_avx512ifma(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.avx512ifma; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_avx512vbmi(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.avx512vbmi; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_avx512vbmi2(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.avx512vbmi2; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_avx512bitalg(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.avx512bitalg; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_avx512vpopcntdq(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.avx512vpopcntdq; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_avx512vnni(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.avx512vnni; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_avx512bf16(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.avx512bf16; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_avx512vp2intersect(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.avx512vp2intersect; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_avx512_4vnniw(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.avx512_4vnniw; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_avx512_4fmaps(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.avx512_4fmaps; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_hle(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.hle; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_rtm(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.rtm; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_xtest(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.xtest; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_mpx(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.mpx; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_cmov(void) { + #if CPUINFO_ARCH_X86_64 + return true; + #elif CPUINFO_ARCH_X86 + return cpuinfo_isa.cmov; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_cmpxchg8b(void) { + #if CPUINFO_ARCH_X86_64 + return true; + #elif CPUINFO_ARCH_X86 + return cpuinfo_isa.cmpxchg8b; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_cmpxchg16b(void) { + #if CPUINFO_ARCH_X86_64 + return cpuinfo_isa.cmpxchg16b; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_clwb(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.clwb; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_movbe(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.movbe; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_lahf_sahf(void) { + #if CPUINFO_ARCH_X86 + return true; + #elif CPUINFO_ARCH_X86_64 + return cpuinfo_isa.lahf_sahf; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_lzcnt(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.lzcnt; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_popcnt(void) { + #if CPUINFO_ARCH_X86_64 + #if defined(__ANDROID__) + return true; + #else + return cpuinfo_isa.popcnt; + #endif + #elif CPUINFO_ARCH_X86 + return cpuinfo_isa.popcnt; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_tbm(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.tbm; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_bmi(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.bmi; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_bmi2(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.bmi2; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_adx(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.adx; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_aes(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.aes; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_vaes(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.vaes; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_pclmulqdq(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.pclmulqdq; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_vpclmulqdq(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.vpclmulqdq; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_gfni(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.gfni; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_rdrand(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.rdrand; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_rdseed(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.rdseed; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_x86_sha(void) { + #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + return cpuinfo_isa.sha; + #else + return false; + #endif +} + +#if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + /* This structure is not a part of stable API. Use cpuinfo_has_arm_* functions instead. */ + struct cpuinfo_arm_isa { + #if CPUINFO_ARCH_ARM + bool thumb; + bool thumb2; + bool thumbee; + bool jazelle; + bool armv5e; + bool armv6; + bool armv6k; + bool armv7; + bool armv7mp; + bool armv8; + bool idiv; + + bool vfpv2; + bool vfpv3; + bool d32; + bool fp16; + bool fma; + + bool wmmx; + bool wmmx2; + bool neon; + #endif + #if CPUINFO_ARCH_ARM64 + bool atomics; + bool bf16; + bool sve; + bool svebf16; + bool sve2; + #endif + bool rdm; + bool fp16arith; + bool dot; + bool jscvt; + bool fcma; + + bool aes; + bool sha1; + bool sha2; + bool pmull; + bool crc32; + }; + + extern struct cpuinfo_arm_isa cpuinfo_isa; +#endif + +static inline bool cpuinfo_has_arm_thumb(void) { + #if CPUINFO_ARCH_ARM + return cpuinfo_isa.thumb; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_thumb2(void) { + #if CPUINFO_ARCH_ARM + return cpuinfo_isa.thumb2; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_v5e(void) { + #if CPUINFO_ARCH_ARM + return cpuinfo_isa.armv5e; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_v6(void) { + #if CPUINFO_ARCH_ARM + return cpuinfo_isa.armv6; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_v6k(void) { + #if CPUINFO_ARCH_ARM + return cpuinfo_isa.armv6k; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_v7(void) { + #if CPUINFO_ARCH_ARM + return cpuinfo_isa.armv7; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_v7mp(void) { + #if CPUINFO_ARCH_ARM + return cpuinfo_isa.armv7mp; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_v8(void) { + #if CPUINFO_ARCH_ARM64 + return true; + #elif CPUINFO_ARCH_ARM + return cpuinfo_isa.armv8; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_idiv(void) { + #if CPUINFO_ARCH_ARM64 + return true; + #elif CPUINFO_ARCH_ARM + return cpuinfo_isa.idiv; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_vfpv2(void) { + #if CPUINFO_ARCH_ARM + return cpuinfo_isa.vfpv2; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_vfpv3(void) { + #if CPUINFO_ARCH_ARM64 + return true; + #elif CPUINFO_ARCH_ARM + return cpuinfo_isa.vfpv3; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_vfpv3_d32(void) { + #if CPUINFO_ARCH_ARM64 + return true; + #elif CPUINFO_ARCH_ARM + return cpuinfo_isa.vfpv3 && cpuinfo_isa.d32; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_vfpv3_fp16(void) { + #if CPUINFO_ARCH_ARM64 + return true; + #elif CPUINFO_ARCH_ARM + return cpuinfo_isa.vfpv3 && cpuinfo_isa.fp16; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_vfpv3_fp16_d32(void) { + #if CPUINFO_ARCH_ARM64 + return true; + #elif CPUINFO_ARCH_ARM + return cpuinfo_isa.vfpv3 && cpuinfo_isa.fp16 && cpuinfo_isa.d32; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_vfpv4(void) { + #if CPUINFO_ARCH_ARM64 + return true; + #elif CPUINFO_ARCH_ARM + return cpuinfo_isa.vfpv3 && cpuinfo_isa.fma; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_vfpv4_d32(void) { + #if CPUINFO_ARCH_ARM64 + return true; + #elif CPUINFO_ARCH_ARM + return cpuinfo_isa.vfpv3 && cpuinfo_isa.fma && cpuinfo_isa.d32; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_wmmx(void) { + #if CPUINFO_ARCH_ARM + return cpuinfo_isa.wmmx; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_wmmx2(void) { + #if CPUINFO_ARCH_ARM + return cpuinfo_isa.wmmx2; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_neon(void) { + #if CPUINFO_ARCH_ARM64 + return true; + #elif CPUINFO_ARCH_ARM + return cpuinfo_isa.neon; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_neon_fp16(void) { + #if CPUINFO_ARCH_ARM64 + return true; + #elif CPUINFO_ARCH_ARM + return cpuinfo_isa.neon && cpuinfo_isa.fp16; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_neon_fma(void) { + #if CPUINFO_ARCH_ARM64 + return true; + #elif CPUINFO_ARCH_ARM + return cpuinfo_isa.neon && cpuinfo_isa.fma; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_neon_v8(void) { + #if CPUINFO_ARCH_ARM64 + return true; + #elif CPUINFO_ARCH_ARM + return cpuinfo_isa.neon && cpuinfo_isa.armv8; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_atomics(void) { + #if CPUINFO_ARCH_ARM64 + return cpuinfo_isa.atomics; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_neon_rdm(void) { + #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + return cpuinfo_isa.rdm; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_neon_fp16_arith(void) { + #if CPUINFO_ARCH_ARM + return cpuinfo_isa.neon && cpuinfo_isa.fp16arith; + #elif CPUINFO_ARCH_ARM64 + return cpuinfo_isa.fp16arith; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_fp16_arith(void) { + #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + return cpuinfo_isa.fp16arith; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_neon_dot(void) { + #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + return cpuinfo_isa.dot; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_jscvt(void) { + #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + return cpuinfo_isa.jscvt; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_fcma(void) { + #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + return cpuinfo_isa.fcma; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_aes(void) { + #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + return cpuinfo_isa.aes; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_sha1(void) { + #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + return cpuinfo_isa.sha1; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_sha2(void) { + #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + return cpuinfo_isa.sha2; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_pmull(void) { + #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + return cpuinfo_isa.pmull; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_crc32(void) { + #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + return cpuinfo_isa.crc32; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_sve(void) { + #if CPUINFO_ARCH_ARM64 + return cpuinfo_isa.sve; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_sve2(void) { + #if CPUINFO_ARCH_ARM64 + return cpuinfo_isa.sve2; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_bf16(void) { + #if CPUINFO_ARCH_ARM64 + return cpuinfo_isa.bf16; + #else + return false; + #endif +} + +static inline bool cpuinfo_has_arm_svebf16(void) { + #if CPUINFO_ARCH_ARM64 + return cpuinfo_isa.svebf16; + #else + return false; + #endif +} + +const struct cpuinfo_processor* CPUINFO_ABI cpuinfo_get_processors(void); +const struct cpuinfo_core* CPUINFO_ABI cpuinfo_get_cores(void); +const struct cpuinfo_cluster* CPUINFO_ABI cpuinfo_get_clusters(void); +const struct cpuinfo_package* CPUINFO_ABI cpuinfo_get_packages(void); +const struct cpuinfo_uarch_info* CPUINFO_ABI cpuinfo_get_uarchs(void); +const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l1i_caches(void); +const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l1d_caches(void); +const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l2_caches(void); +const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l3_caches(void); +const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l4_caches(void); + +const struct cpuinfo_processor* CPUINFO_ABI cpuinfo_get_processor(uint32_t index); +const struct cpuinfo_core* CPUINFO_ABI cpuinfo_get_core(uint32_t index); +const struct cpuinfo_cluster* CPUINFO_ABI cpuinfo_get_cluster(uint32_t index); +const struct cpuinfo_package* CPUINFO_ABI cpuinfo_get_package(uint32_t index); +const struct cpuinfo_uarch_info* CPUINFO_ABI cpuinfo_get_uarch(uint32_t index); +const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l1i_cache(uint32_t index); +const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l1d_cache(uint32_t index); +const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l2_cache(uint32_t index); +const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l3_cache(uint32_t index); +const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l4_cache(uint32_t index); + +uint32_t CPUINFO_ABI cpuinfo_get_processors_count(void); +uint32_t CPUINFO_ABI cpuinfo_get_cores_count(void); +uint32_t CPUINFO_ABI cpuinfo_get_clusters_count(void); +uint32_t CPUINFO_ABI cpuinfo_get_packages_count(void); +uint32_t CPUINFO_ABI cpuinfo_get_uarchs_count(void); +uint32_t CPUINFO_ABI cpuinfo_get_l1i_caches_count(void); +uint32_t CPUINFO_ABI cpuinfo_get_l1d_caches_count(void); +uint32_t CPUINFO_ABI cpuinfo_get_l2_caches_count(void); +uint32_t CPUINFO_ABI cpuinfo_get_l3_caches_count(void); +uint32_t CPUINFO_ABI cpuinfo_get_l4_caches_count(void); + +/** + * Returns upper bound on cache size. + */ +uint32_t CPUINFO_ABI cpuinfo_get_max_cache_size(void); + +/** + * Identify the logical processor that executes the current thread. + * + * There is no guarantee that the thread will stay on the same logical processor for any time. + * Callers should treat the result as only a hint, and be prepared to handle NULL return value. + */ +const struct cpuinfo_processor* CPUINFO_ABI cpuinfo_get_current_processor(void); + +/** + * Identify the core that executes the current thread. + * + * There is no guarantee that the thread will stay on the same core for any time. + * Callers should treat the result as only a hint, and be prepared to handle NULL return value. + */ +const struct cpuinfo_core* CPUINFO_ABI cpuinfo_get_current_core(void); + +/** + * Identify the microarchitecture index of the core that executes the current thread. + * If the system does not support such identification, the function returns 0. + * + * There is no guarantee that the thread will stay on the same type of core for any time. + * Callers should treat the result as only a hint. + */ +uint32_t CPUINFO_ABI cpuinfo_get_current_uarch_index(void); + +/** + * Identify the microarchitecture index of the core that executes the current thread. + * If the system does not support such identification, the function returns the user-specified default value. + * + * There is no guarantee that the thread will stay on the same type of core for any time. + * Callers should treat the result as only a hint. + */ +uint32_t CPUINFO_ABI cpuinfo_get_current_uarch_index_with_default(uint32_t default_uarch_index); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* CPUINFO_H */ diff --git a/3rdparty/cpuinfo/src/api.c b/3rdparty/cpuinfo/src/api.c new file mode 100644 index 000000000..f91b421cc --- /dev/null +++ b/3rdparty/cpuinfo/src/api.c @@ -0,0 +1,410 @@ +#include +#include + +#include +#include +#include + +#ifdef __linux__ + #include + + #include + #include + #if !defined(__NR_getcpu) + #include + #endif +#endif + +bool cpuinfo_is_initialized = false; + +struct cpuinfo_processor* cpuinfo_processors = NULL; +struct cpuinfo_core* cpuinfo_cores = NULL; +struct cpuinfo_cluster* cpuinfo_clusters = NULL; +struct cpuinfo_package* cpuinfo_packages = NULL; +struct cpuinfo_cache* cpuinfo_cache[cpuinfo_cache_level_max] = { NULL }; + +uint32_t cpuinfo_processors_count = 0; +uint32_t cpuinfo_cores_count = 0; +uint32_t cpuinfo_clusters_count = 0; +uint32_t cpuinfo_packages_count = 0; +uint32_t cpuinfo_cache_count[cpuinfo_cache_level_max] = { 0 }; +uint32_t cpuinfo_max_cache_size = 0; + +#if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + struct cpuinfo_uarch_info* cpuinfo_uarchs = NULL; + uint32_t cpuinfo_uarchs_count = 0; +#else + struct cpuinfo_uarch_info cpuinfo_global_uarch = { cpuinfo_uarch_unknown }; +#endif + +#ifdef __linux__ + uint32_t cpuinfo_linux_cpu_max = 0; + const struct cpuinfo_processor** cpuinfo_linux_cpu_to_processor_map = NULL; + const struct cpuinfo_core** cpuinfo_linux_cpu_to_core_map = NULL; + #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + const uint32_t* cpuinfo_linux_cpu_to_uarch_index_map = NULL; + #endif +#endif + + +const struct cpuinfo_processor* cpuinfo_get_processors(void) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "processors"); + } + return cpuinfo_processors; +} + +const struct cpuinfo_core* cpuinfo_get_cores(void) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "core"); + } + return cpuinfo_cores; +} + +const struct cpuinfo_cluster* cpuinfo_get_clusters(void) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "clusters"); + } + return cpuinfo_clusters; +} + +const struct cpuinfo_package* cpuinfo_get_packages(void) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "packages"); + } + return cpuinfo_packages; +} + +const struct cpuinfo_uarch_info* cpuinfo_get_uarchs() { + if (!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "uarchs"); + } + #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + return cpuinfo_uarchs; + #else + return &cpuinfo_global_uarch; + #endif +} + +const struct cpuinfo_processor* cpuinfo_get_processor(uint32_t index) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "processor"); + } + if CPUINFO_UNLIKELY(index >= cpuinfo_processors_count) { + return NULL; + } + return &cpuinfo_processors[index]; +} + +const struct cpuinfo_core* cpuinfo_get_core(uint32_t index) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "core"); + } + if CPUINFO_UNLIKELY(index >= cpuinfo_cores_count) { + return NULL; + } + return &cpuinfo_cores[index]; +} + +const struct cpuinfo_cluster* cpuinfo_get_cluster(uint32_t index) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "cluster"); + } + if CPUINFO_UNLIKELY(index >= cpuinfo_clusters_count) { + return NULL; + } + return &cpuinfo_clusters[index]; +} + +const struct cpuinfo_package* cpuinfo_get_package(uint32_t index) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "package"); + } + if CPUINFO_UNLIKELY(index >= cpuinfo_packages_count) { + return NULL; + } + return &cpuinfo_packages[index]; +} + +const struct cpuinfo_uarch_info* cpuinfo_get_uarch(uint32_t index) { + if (!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "uarch"); + } + #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + if CPUINFO_UNLIKELY(index >= cpuinfo_uarchs_count) { + return NULL; + } + return &cpuinfo_uarchs[index]; + #else + if CPUINFO_UNLIKELY(index != 0) { + return NULL; + } + return &cpuinfo_global_uarch; + #endif +} + +uint32_t cpuinfo_get_processors_count(void) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "processors_count"); + } + return cpuinfo_processors_count; +} + +uint32_t cpuinfo_get_cores_count(void) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "cores_count"); + } + return cpuinfo_cores_count; +} + +uint32_t cpuinfo_get_clusters_count(void) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "clusters_count"); + } + return cpuinfo_clusters_count; +} + +uint32_t cpuinfo_get_packages_count(void) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "packages_count"); + } + return cpuinfo_packages_count; +} + +uint32_t cpuinfo_get_uarchs_count(void) { + if (!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "uarchs_count"); + } + #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + return cpuinfo_uarchs_count; + #else + return 1; + #endif +} + +const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l1i_caches(void) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l1i_caches"); + } + return cpuinfo_cache[cpuinfo_cache_level_1i]; +} + +const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l1d_caches(void) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l1d_caches"); + } + return cpuinfo_cache[cpuinfo_cache_level_1d]; +} + +const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l2_caches(void) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l2_caches"); + } + return cpuinfo_cache[cpuinfo_cache_level_2]; +} + +const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l3_caches(void) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l3_caches"); + } + return cpuinfo_cache[cpuinfo_cache_level_3]; +} + +const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l4_caches(void) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l4_caches"); + } + return cpuinfo_cache[cpuinfo_cache_level_4]; +} + +const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l1i_cache(uint32_t index) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l1i_cache"); + } + if CPUINFO_UNLIKELY(index >= cpuinfo_cache_count[cpuinfo_cache_level_1i]) { + return NULL; + } + return &cpuinfo_cache[cpuinfo_cache_level_1i][index]; +} + +const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l1d_cache(uint32_t index) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l1d_cache"); + } + if CPUINFO_UNLIKELY(index >= cpuinfo_cache_count[cpuinfo_cache_level_1d]) { + return NULL; + } + return &cpuinfo_cache[cpuinfo_cache_level_1d][index]; +} + +const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l2_cache(uint32_t index) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l2_cache"); + } + if CPUINFO_UNLIKELY(index >= cpuinfo_cache_count[cpuinfo_cache_level_2]) { + return NULL; + } + return &cpuinfo_cache[cpuinfo_cache_level_2][index]; +} + +const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l3_cache(uint32_t index) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l3_cache"); + } + if CPUINFO_UNLIKELY(index >= cpuinfo_cache_count[cpuinfo_cache_level_3]) { + return NULL; + } + return &cpuinfo_cache[cpuinfo_cache_level_3][index]; +} + +const struct cpuinfo_cache* CPUINFO_ABI cpuinfo_get_l4_cache(uint32_t index) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l4_cache"); + } + if CPUINFO_UNLIKELY(index >= cpuinfo_cache_count[cpuinfo_cache_level_4]) { + return NULL; + } + return &cpuinfo_cache[cpuinfo_cache_level_4][index]; +} + +uint32_t CPUINFO_ABI cpuinfo_get_l1i_caches_count(void) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l1i_caches_count"); + } + return cpuinfo_cache_count[cpuinfo_cache_level_1i]; +} + +uint32_t CPUINFO_ABI cpuinfo_get_l1d_caches_count(void) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l1d_caches_count"); + } + return cpuinfo_cache_count[cpuinfo_cache_level_1d]; +} + +uint32_t CPUINFO_ABI cpuinfo_get_l2_caches_count(void) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l2_caches_count"); + } + return cpuinfo_cache_count[cpuinfo_cache_level_2]; +} + +uint32_t CPUINFO_ABI cpuinfo_get_l3_caches_count(void) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l3_caches_count"); + } + return cpuinfo_cache_count[cpuinfo_cache_level_3]; +} + +uint32_t CPUINFO_ABI cpuinfo_get_l4_caches_count(void) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "l4_caches_count"); + } + return cpuinfo_cache_count[cpuinfo_cache_level_4]; +} + +uint32_t CPUINFO_ABI cpuinfo_get_max_cache_size(void) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "max_cache_size"); + } + return cpuinfo_max_cache_size; +} + +const struct cpuinfo_processor* CPUINFO_ABI cpuinfo_get_current_processor(void) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "current_processor"); + } + #ifdef __linux__ + /* Initializing this variable silences a MemorySanitizer error. */ + unsigned cpu = 0; + if CPUINFO_UNLIKELY(syscall(__NR_getcpu, &cpu, NULL, NULL) != 0) { + return 0; + } + if CPUINFO_UNLIKELY((uint32_t) cpu >= cpuinfo_linux_cpu_max) { + return 0; + } + return cpuinfo_linux_cpu_to_processor_map[cpu]; + #else + return NULL; + #endif +} + +const struct cpuinfo_core* CPUINFO_ABI cpuinfo_get_current_core(void) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "current_core"); + } + #ifdef __linux__ + /* Initializing this variable silences a MemorySanitizer error. */ + unsigned cpu = 0; + if CPUINFO_UNLIKELY(syscall(__NR_getcpu, &cpu, NULL, NULL) != 0) { + return 0; + } + if CPUINFO_UNLIKELY((uint32_t) cpu >= cpuinfo_linux_cpu_max) { + return 0; + } + return cpuinfo_linux_cpu_to_core_map[cpu]; + #else + return NULL; + #endif +} + +uint32_t CPUINFO_ABI cpuinfo_get_current_uarch_index(void) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "current_uarch_index"); + } + #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + #ifdef __linux__ + if (cpuinfo_linux_cpu_to_uarch_index_map == NULL) { + /* Special case: avoid syscall on systems with only a single type of cores */ + return 0; + } + + /* General case */ + /* Initializing this variable silences a MemorySanitizer error. */ + unsigned cpu = 0; + if CPUINFO_UNLIKELY(syscall(__NR_getcpu, &cpu, NULL, NULL) != 0) { + return 0; + } + if CPUINFO_UNLIKELY((uint32_t) cpu >= cpuinfo_linux_cpu_max) { + return 0; + } + return cpuinfo_linux_cpu_to_uarch_index_map[cpu]; + #else + /* Fallback: pretend to be on the big core. */ + return 0; + #endif + #else + /* Only ARM/ARM64 processors may include cores of different types in the same package. */ + return 0; + #endif +} + +uint32_t CPUINFO_ABI cpuinfo_get_current_uarch_index_with_default(uint32_t default_uarch_index) { + if CPUINFO_UNLIKELY(!cpuinfo_is_initialized) { + cpuinfo_log_fatal("cpuinfo_get_%s called before cpuinfo is initialized", "current_uarch_index_with_default"); + } + #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + #ifdef __linux__ + if (cpuinfo_linux_cpu_to_uarch_index_map == NULL) { + /* Special case: avoid syscall on systems with only a single type of cores */ + return 0; + } + + /* General case */ + /* Initializing this variable silences a MemorySanitizer error. */ + unsigned cpu = 0; + if CPUINFO_UNLIKELY(syscall(__NR_getcpu, &cpu, NULL, NULL) != 0) { + return default_uarch_index; + } + if CPUINFO_UNLIKELY((uint32_t) cpu >= cpuinfo_linux_cpu_max) { + return default_uarch_index; + } + return cpuinfo_linux_cpu_to_uarch_index_map[cpu]; + #else + /* Fallback: no API to query current core, use default uarch index. */ + return default_uarch_index; + #endif + #else + /* Only ARM/ARM64 processors may include cores of different types in the same package. */ + return 0; + #endif +} diff --git a/3rdparty/cpuinfo/src/arm/android/api.h b/3rdparty/cpuinfo/src/arm/android/api.h new file mode 100644 index 000000000..228632ace --- /dev/null +++ b/3rdparty/cpuinfo/src/arm/android/api.h @@ -0,0 +1,20 @@ +#pragma once + +#include +#include +#include +#include + +enum cpuinfo_android_chipset_property { + cpuinfo_android_chipset_property_proc_cpuinfo_hardware = 0, + cpuinfo_android_chipset_property_ro_product_board, + cpuinfo_android_chipset_property_ro_board_platform, + cpuinfo_android_chipset_property_ro_mediatek_platform, + cpuinfo_android_chipset_property_ro_arch, + cpuinfo_android_chipset_property_ro_chipname, + cpuinfo_android_chipset_property_ro_hardware_chipname, + cpuinfo_android_chipset_property_max, +}; + +CPUINFO_INTERNAL void cpuinfo_arm_android_parse_properties( + struct cpuinfo_android_properties properties[restrict static 1]); diff --git a/3rdparty/cpuinfo/src/arm/android/properties.c b/3rdparty/cpuinfo/src/arm/android/properties.c new file mode 100644 index 000000000..5f93889d7 --- /dev/null +++ b/3rdparty/cpuinfo/src/arm/android/properties.c @@ -0,0 +1,67 @@ +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include + +#if CPUINFO_MOCK + #include + + static struct cpuinfo_mock_property* cpuinfo_mock_properties = NULL; + + void CPUINFO_ABI cpuinfo_mock_android_properties(struct cpuinfo_mock_property* properties) { + cpuinfo_log_info("Android properties mocking enabled"); + cpuinfo_mock_properties = properties; + } + + static int cpuinfo_android_property_get(const char* key, char* value) { + if (cpuinfo_mock_properties != NULL) { + for (const struct cpuinfo_mock_property* prop = cpuinfo_mock_properties; prop->key != NULL; prop++) { + if (strncmp(key, prop->key, CPUINFO_BUILD_PROP_NAME_MAX) == 0) { + strncpy(value, prop->value, CPUINFO_BUILD_PROP_VALUE_MAX); + return (int) strnlen(prop->value, CPUINFO_BUILD_PROP_VALUE_MAX); + } + } + } + *value = '\0'; + return 0; + } +#else + static inline int cpuinfo_android_property_get(const char* key, char* value) { + return __system_property_get(key, value); + } +#endif + +void cpuinfo_arm_android_parse_properties(struct cpuinfo_android_properties properties[restrict static 1]) { + const int ro_product_board_length = + cpuinfo_android_property_get("ro.product.board", properties->ro_product_board); + cpuinfo_log_debug("read ro.product.board = \"%.*s\"", ro_product_board_length, properties->ro_product_board); + + const int ro_board_platform_length = + cpuinfo_android_property_get("ro.board.platform", properties->ro_board_platform); + cpuinfo_log_debug("read ro.board.platform = \"%.*s\"", ro_board_platform_length, properties->ro_board_platform); + + const int ro_mediatek_platform_length = + cpuinfo_android_property_get("ro.mediatek.platform", properties->ro_mediatek_platform); + cpuinfo_log_debug("read ro.mediatek.platform = \"%.*s\"", + ro_mediatek_platform_length, properties->ro_mediatek_platform); + + const int ro_arch_length = + cpuinfo_android_property_get("ro.arch", properties->ro_arch); + cpuinfo_log_debug("read ro.arch = \"%.*s\"", ro_arch_length, properties->ro_arch); + + const int ro_chipname_length = + cpuinfo_android_property_get("ro.chipname", properties->ro_chipname); + cpuinfo_log_debug("read ro.chipname = \"%.*s\"", ro_chipname_length, properties->ro_chipname); + + const int ro_hardware_chipname_length = + cpuinfo_android_property_get("ro.hardware.chipname", properties->ro_hardware_chipname); + cpuinfo_log_debug("read ro.hardware.chipname = \"%.*s\"", ro_hardware_chipname_length, properties->ro_hardware_chipname); +} diff --git a/3rdparty/cpuinfo/src/arm/api.h b/3rdparty/cpuinfo/src/arm/api.h new file mode 100644 index 000000000..48b99ddc9 --- /dev/null +++ b/3rdparty/cpuinfo/src/arm/api.h @@ -0,0 +1,122 @@ +#pragma once + +#include +#include + +#include +#include + +enum cpuinfo_arm_chipset_vendor { + cpuinfo_arm_chipset_vendor_unknown = 0, + cpuinfo_arm_chipset_vendor_qualcomm, + cpuinfo_arm_chipset_vendor_mediatek, + cpuinfo_arm_chipset_vendor_samsung, + cpuinfo_arm_chipset_vendor_hisilicon, + cpuinfo_arm_chipset_vendor_actions, + cpuinfo_arm_chipset_vendor_allwinner, + cpuinfo_arm_chipset_vendor_amlogic, + cpuinfo_arm_chipset_vendor_broadcom, + cpuinfo_arm_chipset_vendor_lg, + cpuinfo_arm_chipset_vendor_leadcore, + cpuinfo_arm_chipset_vendor_marvell, + cpuinfo_arm_chipset_vendor_mstar, + cpuinfo_arm_chipset_vendor_novathor, + cpuinfo_arm_chipset_vendor_nvidia, + cpuinfo_arm_chipset_vendor_pinecone, + cpuinfo_arm_chipset_vendor_renesas, + cpuinfo_arm_chipset_vendor_rockchip, + cpuinfo_arm_chipset_vendor_spreadtrum, + cpuinfo_arm_chipset_vendor_telechips, + cpuinfo_arm_chipset_vendor_texas_instruments, + cpuinfo_arm_chipset_vendor_wondermedia, + cpuinfo_arm_chipset_vendor_max, +}; + +enum cpuinfo_arm_chipset_series { + cpuinfo_arm_chipset_series_unknown = 0, + cpuinfo_arm_chipset_series_qualcomm_qsd, + cpuinfo_arm_chipset_series_qualcomm_msm, + cpuinfo_arm_chipset_series_qualcomm_apq, + cpuinfo_arm_chipset_series_qualcomm_snapdragon, + cpuinfo_arm_chipset_series_mediatek_mt, + cpuinfo_arm_chipset_series_samsung_exynos, + cpuinfo_arm_chipset_series_hisilicon_k3v, + cpuinfo_arm_chipset_series_hisilicon_hi, + cpuinfo_arm_chipset_series_hisilicon_kirin, + cpuinfo_arm_chipset_series_actions_atm, + cpuinfo_arm_chipset_series_allwinner_a, + cpuinfo_arm_chipset_series_amlogic_aml, + cpuinfo_arm_chipset_series_amlogic_s, + cpuinfo_arm_chipset_series_broadcom_bcm, + cpuinfo_arm_chipset_series_lg_nuclun, + cpuinfo_arm_chipset_series_leadcore_lc, + cpuinfo_arm_chipset_series_marvell_pxa, + cpuinfo_arm_chipset_series_mstar_6a, + cpuinfo_arm_chipset_series_novathor_u, + cpuinfo_arm_chipset_series_nvidia_tegra_t, + cpuinfo_arm_chipset_series_nvidia_tegra_ap, + cpuinfo_arm_chipset_series_nvidia_tegra_sl, + cpuinfo_arm_chipset_series_pinecone_surge_s, + cpuinfo_arm_chipset_series_renesas_mp, + cpuinfo_arm_chipset_series_rockchip_rk, + cpuinfo_arm_chipset_series_spreadtrum_sc, + cpuinfo_arm_chipset_series_telechips_tcc, + cpuinfo_arm_chipset_series_texas_instruments_omap, + cpuinfo_arm_chipset_series_wondermedia_wm, + cpuinfo_arm_chipset_series_max, +}; + +#define CPUINFO_ARM_CHIPSET_SUFFIX_MAX 8 + +struct cpuinfo_arm_chipset { + enum cpuinfo_arm_chipset_vendor vendor; + enum cpuinfo_arm_chipset_series series; + uint32_t model; + char suffix[CPUINFO_ARM_CHIPSET_SUFFIX_MAX]; +}; + +#define CPUINFO_ARM_CHIPSET_NAME_MAX CPUINFO_PACKAGE_NAME_MAX + +#ifndef __cplusplus + CPUINFO_INTERNAL void cpuinfo_arm_chipset_to_string( + const struct cpuinfo_arm_chipset chipset[restrict static 1], + char name[restrict static CPUINFO_ARM_CHIPSET_NAME_MAX]); + + CPUINFO_INTERNAL void cpuinfo_arm_fixup_chipset( + struct cpuinfo_arm_chipset chipset[restrict static 1], uint32_t cores, uint32_t max_cpu_freq_max); + + CPUINFO_INTERNAL void cpuinfo_arm_decode_vendor_uarch( + uint32_t midr, + #if CPUINFO_ARCH_ARM + bool has_vfpv4, + #endif + enum cpuinfo_vendor vendor[restrict static 1], + enum cpuinfo_uarch uarch[restrict static 1]); + + CPUINFO_INTERNAL void cpuinfo_arm_decode_cache( + enum cpuinfo_uarch uarch, + uint32_t cluster_cores, + uint32_t midr, + const struct cpuinfo_arm_chipset chipset[restrict static 1], + uint32_t cluster_id, + uint32_t arch_version, + struct cpuinfo_cache l1i[restrict static 1], + struct cpuinfo_cache l1d[restrict static 1], + struct cpuinfo_cache l2[restrict static 1], + struct cpuinfo_cache l3[restrict static 1]); + + CPUINFO_INTERNAL uint32_t cpuinfo_arm_compute_max_cache_size( + const struct cpuinfo_processor processor[restrict static 1]); +#else /* defined(__cplusplus) */ + CPUINFO_INTERNAL void cpuinfo_arm_decode_cache( + enum cpuinfo_uarch uarch, + uint32_t cluster_cores, + uint32_t midr, + const struct cpuinfo_arm_chipset chipset[1], + uint32_t cluster_id, + uint32_t arch_version, + struct cpuinfo_cache l1i[1], + struct cpuinfo_cache l1d[1], + struct cpuinfo_cache l2[1], + struct cpuinfo_cache l3[1]); +#endif diff --git a/3rdparty/cpuinfo/src/arm/cache.c b/3rdparty/cpuinfo/src/arm/cache.c new file mode 100644 index 000000000..1a6dd3817 --- /dev/null +++ b/3rdparty/cpuinfo/src/arm/cache.c @@ -0,0 +1,1737 @@ +#include + +#include +#include +#include +#include +#include + + +void cpuinfo_arm_decode_cache( + enum cpuinfo_uarch uarch, + uint32_t cluster_cores, + uint32_t midr, + const struct cpuinfo_arm_chipset chipset[restrict static 1], + uint32_t cluster_id, + uint32_t arch_version, + struct cpuinfo_cache l1i[restrict static 1], + struct cpuinfo_cache l1d[restrict static 1], + struct cpuinfo_cache l2[restrict static 1], + struct cpuinfo_cache l3[restrict static 1]) +{ + switch (uarch) { +#if CPUINFO_ARCH_ARM && !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_8A__) + case cpuinfo_uarch_xscale: + switch (midr_get_part(midr) >> 8) { + case 2: + /* + * PXA 210/25X/26X + * + * See "Computer Organization and Design, Revised Printing: The Hardware/Software Interface" + * by David A. Patterson, John L. Hennessy + */ + *l1i = (struct cpuinfo_cache) { + .size = 16 * 1024, + .associativity = 32, + .line_size = 32 + }; + *l1d = (struct cpuinfo_cache) { + .size = 16 * 1024, + .associativity = 4, + .line_size = 64 + }; + break; + case 4: + /* PXA 27X */ + *l1i = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 32, + .line_size = 32 + }; + *l1d = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 32, + .line_size = 32 + }; + break; + case 6: + /* + * PXA 3XX + * + * See http://download.intel.com/design/intelxscale/31628302.pdf + */ + *l1i = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4, + .line_size = 32 + }; + *l1d = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4, + .line_size = 32 + }; + *l2 = (struct cpuinfo_cache) { + .size = 256 * 1024, + .associativity = 8, + .line_size = 32 + }; + break; + } + break; + case cpuinfo_uarch_arm11: + *l1i = (struct cpuinfo_cache) { + .size = 16 * 1024, + .associativity = 4, + .line_size = 32 + }; + *l1d = (struct cpuinfo_cache) { + .size = 16 * 1024, + .associativity = 4, + .line_size = 32 + }; + break; +#endif /* CPUINFO_ARCH_ARM && !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_8A__) */ +#if CPUINFO_ARCH_ARM && !defined(__ARM_ARCH_8A__) + case cpuinfo_uarch_cortex_a5: + /* + * Cortex-A5 Technical Reference Manual: + * 7.1.1. Memory system + * The Cortex-A5 processor has separate instruction and data caches. + * The caches have the following features: + * - Data cache is 4-way set-associative. + * - Instruction cache is 2-way set-associative. + * - The cache line length is eight words. + * - You can configure the instruction and data caches independently during implementation + * to sizes of 4KB, 8KB, 16KB, 32KB, or 64KB. + * 1.1.3. System design components + * PrimeCell Level 2 Cache Controller (PL310) + * The addition of an on-chip secondary cache, also referred to as a Level 2 or L2 cache, is a + * recognized method of improving the performance of ARM-based systems when significant memory traffic + * is generated by the processor. The PrimeCell Level 2 Cache Controller reduces the number of external + * memory accesses and has been optimized for use with the Cortex-A5 processor. + * 8.1.7. Exclusive L2 cache + * The Cortex-A5 processor can be connected to an L2 cache that supports an exclusive cache mode. + * This mode must be activated both in the Cortex-A5 processor and in the L2 cache controller. + * + * +--------------------+-----------+-----------+----------+-----------+ + * | Processor model | L1D cache | L1I cache | L2 cache | Reference | + * +--------------------+-----------+-----------+----------+-----------+ + * | Qualcomm MSM7225A | | | | | + * | Qualcomm MSM7625A | | | | | + * | Qualcomm MSM7227A | | | | | + * | Qualcomm MSM7627A | 32K | 32K | 256K | Wiki [1] | + * | Qualcomm MSM7225AB | | | | | + * | Qualcomm MSM7225AB | | | | | + * | Qualcomm QSD8250 | | | | | + * | Qualcomm QSD8650 | | | | | + * +--------------------+-----------+-----------+----------+-----------+ + * | Spreadtrum SC6821 | 32K | 32K | ? | | + * | Spreadtrum SC6825 | 32K | 32K | 256K | Wiki [2] | + * | Spreadtrum SC8810 | ? | ? | ? | | + * | Spreadtrum SC8825 | 32K | 32K | ? | | + * +--------------------+-----------+-----------+----------+-----------+ + * + * [1] https://en.wikipedia.org/wiki/List_of_Qualcomm_Snapdragon_systems-on-chip#Snapdragon_S1 + * [2] https://en.wikipedia.org/wiki/Spreadtrum + */ + *l1i = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 2, + .line_size = 32 + }; + *l1d = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4, + .line_size = 32 + }; + *l2 = (struct cpuinfo_cache) { + .size = 256 * 1024, + /* + * Follow NXP specification: "Eight-way set-associative 512 kB L2 cache with 32B line size" + * Reference: http://www.nxp.com/assets/documents/data/en/application-notes/AN4947.pdf + */ + .associativity = 8, + .line_size = 32 + }; + break; + case cpuinfo_uarch_cortex_a7: + /* + * Cortex-A7 MPCore Technical Reference Manual: + * 6.1. About the L1 memory system + * The L1 memory system consists of separate instruction and data caches. You can configure the + * instruction and data caches independently during implementation to sizes of 8KB, 16KB, 32KB, or 64KB. + * + * The L1 instruction memory system has the following features: + * - Instruction side cache line length of 32-bytes. + * - 2-way set-associative instruction cache. + * + * The L1 data memory system has the following features: + * - Data side cache line length of 64-bytes. + * - 4-way set-associative data cache. + * + * 7.1. About the L2 Memory system + * The L2 memory system consists of an: + * - Optional tightly-coupled L2 cache that includes: + * - Configurable L2 cache size of 128KB, 256KB, 512KB, and 1MB. + * - Fixed line length of 64 bytes + * - 8-way set-associative cache structure + * + * +--------------------+-------+-----------+-----------+-----------+-----------+ + * | Processor model | Cores | L1D cache | L1I cache | L2 cache | Reference | + * +--------------------+-------+-----------+-----------+-----------+-----------+ + * | Allwinner A20 | 2 | 32K | 32K | 256K | [1] | + * | Allwinner A23 | 2 | 32K | 32K | 256K | [2] | + * | Allwinner A31 | 4 | 32K | 32K | 1M | [3] | + * | Allwinner A31s | 4 | 32K | 32K | 1M | [4] | + * | Allwinner A33 | 4 | 32K | 32K | 512K | [5] | + * | Allwinner A80 Octa | 4(+4) | 32K | 32K | 512K(+2M) | [6] | + * | Allwinner A81T | 8 | 32K | 32K | 1M | [7] | + * +--------------------+-------+-----------+-----------+-----------+-----------+ + * | Broadcom BCM2836 | 4 | 32K | 32K | 512K | [8] | + * +--------------------+-------+-----------+-----------+-----------+-----------+ + * | Kirin 920 | 4(+4) | ? | ? | 512K | [9] | + * +--------------------+-------+-----------+-----------+-----------+-----------+ + * + * [1] https://linux-sunxi.org/A20 + * [2] https://linux-sunxi.org/A23 + * [3] http://dl.linux-sunxi.org/A31/A3x_release_document/A31/IC/A31%20datasheet%20V1.3%2020131106.pdf + * [4] https://github.com/allwinner-zh/documents/blob/master/A31s/A31s_Datasheet_v1.5_20150510.pdf + * [5] http://dl.linux-sunxi.org/A33/A33_Datasheet_release1.0.pdf + * [6] https://linux-sunxi.org/images/1/10/A80_Datasheet_Revision_1.0_0404.pdf + * [7] http://dl.linux-sunxi.org/A83T/A83T_datasheet_Revision_1.1.pdf + * [8] https://www.raspberrypi.org/forums/viewtopic.php?t=98428 + * [9] http://www.gizmochina.com/2014/10/07/hisilicon-kirin-920-tear-down/ + */ + *l1i = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 2, + .line_size = 32 + }; + *l1d = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4, + .line_size = 64 + }; + *l2 = (struct cpuinfo_cache) { + .size = 128 * 1024 * cluster_cores, + .associativity = 8, + .line_size = 64 + }; + break; + case cpuinfo_uarch_cortex_a8: + /* + * Cortex-A8 Technical Reference Manual: + * 7.1. About the L1 memory system + * The L1 memory system consists of separate instruction and data caches in a Harvard arrangement. + * The L1 memory system provides the core with: + * - fixed line length of 64 bytes + * - support for 16KB or 32KB caches + * - 4-way set associative cache structure + * 8.1. About the L2 memory system + * The L2 memory system is tightly coupled to the L1 data cache and L1 instruction cache. + * The key features of the L2 memory system include: + * - configurable cache size of 0KB, 128KB, 256KB, 512KB, and 1MB + * - fixed line length of 64 bytes + * - 8-way set associative cache structure + * + * +----------------------+-----------+-----------+-----------+-----------+ + * | Processor model | L1D cache | L1I cache | L2 cache | Reference | + * +----------------------+-----------+-----------+-----------+-----------+ + * | Exynos 3 Single 3110 | 32K | 32K | 512K | [1] | + * +----------------------+-----------+-----------+-----------+-----------+ + * | TI DM 3730 | 32K | 32K | 256K | [2] | + * +----------------------+-----------+-----------+-----------+-----------+ + * + * [1] https://en.wikichip.org/w/images/0/04/Exynos_3110.pdf + * [2] https://www.ti.com/lit/ds/symlink/dm3725.pdf + */ + *l1i = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4, + .line_size = 64 + }; + *l1d = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4, + .line_size = 64 + }; + *l2 = (struct cpuinfo_cache) { + .associativity = 8, + .line_size = 64 + }; + switch (chipset->vendor) { + case cpuinfo_arm_chipset_vendor_samsung: + l2->size = 512 * 1024; + break; + default: + l2->size = 256 * 1024; + break; + } + + break; + case cpuinfo_uarch_cortex_a9: + /* + * ARM Cortex‑A9 Technical Reference Manual: + * 7.1.1 Memory system + * The Cortex‑A9 processor has separate instruction and data caches. + * The caches have the following features: + * - Both caches are 4-way set-associative. + * - The cache line length is eight words. + * - You can configure the instruction and data caches independently during implementation + * to sizes of 16KB, 32KB, or 64KB. + * 8.1.5 Exclusive L2 cache + * The Cortex‑A9 processor can be connected to an L2 cache that supports an exclusive cache mode. + * This mode must be activated both in the Cortex‑A9 processor and in the L2 cache controller. + * + * +--------------------+-------+-----------+-----------+-----------+-----------+ + * | Processor model | Cores | L1D cache | L1I cache | L2 cache | Reference | + * +--------------------+-------+-----------+-----------+-----------+-----------+ + * | Exynos 4 Dual 4210 | 2 | 32K | 32K | 1M | [1] | + * | Exynos 4 Dual 4212 | 2 | 32K | 32K | 1M | [2] | + * | Exynos 4 Quad 4412 | 4 | 32K | 32K | 1M | [3] | + * | Exynos 4 Quad 4415 | 4 | 32K | 32K | 1M | | + * | TI OMAP 4430 | 2 | 32K | 32K | 1M | [4] | + * | TI OMAP 4460 | 2 | 32K | 32K | 1M | [5] | + * +--------------------+-------+-----------+-----------+-----------+-----------+ + * + * [1] http://www.samsung.com/global/business/semiconductor/file/product/Exynos_4_Dual_45nm_User_Manaul_Public_REV1.00-0.pdf + * [2] http://www.samsung.com/global/business/semiconductor/file/product/Exynos_4_Dual_32nm_User_Manaul_Public_REV100-0.pdf + * [3] http://www.samsung.com/global/business/semiconductor/file/product/Exynos_4_Quad_User_Manaul_Public_REV1.00-0.pdf + * [4] https://www.hotchips.org/wp-content/uploads/hc_archives/hc21/2_mon/HC21.24.400.ClientProcessors-Epub/HC21.24.421.Witt-OMAP4430.pdf + * [5] http://www.anandtech.com/show/5310/samsung-galaxy-nexus-ice-cream-sandwich-review/9 + */ + + /* Use Exynos 4 specs */ + *l1i = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4, + .line_size = 32 + }; + *l1d = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4, + .line_size = 32 + }; + *l2 = (struct cpuinfo_cache) { + .size = 1024 * 1024, + /* OMAP4460 in Pandaboard ES has 16-way set-associative L2 cache */ + .associativity = 16, + .line_size = 32 + }; + break; + case cpuinfo_uarch_cortex_a15: + /* + * 6.1. About the L1 memory system + * The L1 memory system consists of separate instruction and data caches. + * The L1 instruction memory system has the following features: + * - 32KB 2-way set-associative instruction cache. + * - Fixed line length of 64 bytes. + * The L1 data memory system has the following features: + * - 32KB 2-way set-associative data cache. + * - Fixed line length of 64 bytes. + * 7.1. About the L2 memory system + * The features of the L2 memory system include: + * - Configurable L2 cache size of 512KB, 1MB, 2MB and 4MB. + * - Fixed line length of 64 bytes. + * - 16-way set-associative cache structure. + * + * +--------------------+-------+-----------+-----------+-----------+-----------+ + * | Processor model | Cores | L1D cache | L1I cache | L2 cache | Reference | + * +--------------------+-------+-----------+-----------+-----------+-----------+ + * | Exynos 5 Dual 5250 | 2 | 32K | 32K | 1M | [1] | + * | Exynos 5 Hexa 5260 | 2(+4) | 32K | 32K | 1M(+512K) | [2] | + * | Exynos 5 Octa 5410 | 4(+4) | 32K | 32K | 2M(+512K) | [3] | + * | Exynos 5 Octa 5420 | 4(+4) | 32K | 32K | 2M(+512K) | [3] | + * | Exynos 5 Octa 5422 | 4(+4) | 32K | 32K | 2M(+512K) | [3] | + * | Exynos 5 Octa 5430 | 4(+4) | 32K | 32K | 2M(+512K) | [3] | + * | Exynos 5 Octa 5800 | 4(+4) | 32K | 32K | 2M(+512K) | [3] | + * | Kirin 920 | 4(+4) | ? | ? | 2M(+512K) | [4] | + * +--------------------+-------+-----------+-----------+-----------+-----------+ + * + * [1] http://www.arndaleboard.org/wiki/downloads/supports/Exynos_5_Dual_User_Manaul_Public_REV1.00.pdf + * [2] http://www.yicsystem.com/wp-content/uploads/2014/08/Espresso5260P-Guide-Book.pdf + * [3] http://www.anandtech.com/show/6768/samsung-details-exynos-5-octa-architecture-power-at-isscc-13 + * [4] http://www.gizmochina.com/2014/10/07/hisilicon-kirin-920-tear-down/ + */ + *l1i = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 2, + .line_size = 64 + }; + *l1d = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 2, + .line_size = 64 + }; + *l2 = (struct cpuinfo_cache) { + .size = cluster_cores * 512 * 1024, + .associativity = 16, + .line_size = 64 + }; + break; + case cpuinfo_uarch_cortex_a17: + /* + * ARM Cortex-A17 MPCore Processor Technical Reference Manual: + * 6.1. About the L1 memory system + * The L1 memory system consists of separate instruction and data caches. + * The size of the instruction cache is implemented as either 32KB or 64KB. + * The size of the data cache is 32KB. + * + * The L1 instruction cache has the following features: + * - Instruction side cache line length of 64-bytes. + * - 4-way set-associative instruction cache. + * + * The L1 data cache has the following features: + * - Data side cache line length of 64-bytes. + * - 4-way set-associative data cache. + * + * 7.1. About the L2 Memory system + * An integrated L2 cache: + * - The cache size is implemented as either 256KB, 512KB, 1MB, 2MB, 4MB or 8MB. + * - A fixed line length of 64 bytes. + * - 16-way set-associative cache structure. + * + * +------------------+-------+-----------+-----------+-----------+-----------+ + * | Processor model | Cores | L1D cache | L1I cache | L2 cache | Reference | + * +------------------+-------+-----------+-----------+-----------+-----------+ + * | MediaTek MT6595 | 4(+4) | 32K | 32K | 2M(+512K) | [1] | + * +------------------+-------+-----------+-----------+-----------+-----------+ + * + * [1] https://blog.osakana.net/archives/5268 + */ + *l1i = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4, + .line_size = 64 + }; + *l1d = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4, + .line_size = 64 + }; + *l2 = (struct cpuinfo_cache) { + .size = cluster_cores * 512 * 1024, + .associativity = 16, + .line_size = 64 + }; + break; +#endif /* CPUINFO_ARCH_ARM && !defined(__ARM_ARCH_8A__) */ + case cpuinfo_uarch_cortex_a35: + /* + * ARM Cortex‑A35 Processor Technical Reference Manual: + * 6.1. About the L1 memory system + * The L1 memory system includes several power-saving and performance-enhancing features. + * These include separate instruction and data caches, which can be configured + * independently during implementation to sizes of 8KB, 16KB, 32KB, or 64KB. + * + * L1 instruction-side memory system + * A dedicated instruction cache that: + * - is virtually indexed and physically tagged. + * - is 2-way set associative. + * - is configurable to be 8KB, 16KB, 32KB, or 64KB. + * - uses a cache line length of 64 bytes. + * + * L1 data-side memory system + * A dedicated data cache that: + * - is physically indexed and physically tagged. + * - is 4-way set associative. + * - is configurable to be 8KB, 16KB, 32KB, or 64KB. + * - uses a cache line length of 64 bytes. + * + * 7.1. About the L2 memory system + * The L2 cache is 8-way set associative. + * Further features of the L2 cache are: + * - Configurable size of 128KB, 256KB, 512KB, and 1MB. + * - Fixed line length of 64 bytes. + * - Physically indexed and tagged. + * + * +-----------------+---------+-----------+-----------+-----------+-----------+ + * | Processor model | Cores | L1D cache | L1I cache | L2 cache | Reference | + * +-----------------+---------+-----------+-----------+-----------+-----------+ + * | MediaTek MT6599 | 4(+4+2) | ? | ? | ? | | + * +-----------------+---------+-----------+-----------+-----------+-----------+ + */ + *l1i = (struct cpuinfo_cache) { + .size = 16 * 1024, /* assumption based on low-end Cortex-A53 */ + .associativity = 2, + .line_size = 64 + }; + *l1d = (struct cpuinfo_cache) { + .size = 16 * 1024, /* assumption based on low-end Cortex-A53 */ + .associativity = 4, + .line_size = 64 + }; + *l2 = (struct cpuinfo_cache) { + .size = 256 * 1024, /* assumption based on low-end Cortex-A53 */ + .associativity = 8, + .line_size = 64 + }; + break; + case cpuinfo_uarch_cortex_a53: + /* + * ARM Cortex-A53 MPCore Processor Technical Reference Manual: + * 6.1. About the L1 memory system + * The L1 memory system consists of separate instruction and data caches. The implementer configures the + * instruction and data caches independently during implementation, to sizes of 8KB, 16KB, 32KB, or 64KB. + * + * The L1 Instruction memory system has the following key features: + * - Instruction side cache line length of 64 bytes. + * - 2-way set associative L1 Instruction cache. + * + * The L1 Data memory system has the following features: + * - Data side cache line length of 64 bytes. + * - 4-way set associative L1 Data cache. + * + * 7.1. About the L2 memory system + * The L2 memory system consists of an: + * - Optional tightly-coupled L2 cache that includes: + * - Configurable L2 cache size of 128KB, 256KB, 512KB, 1MB and 2MB. + * - Fixed line length of 64 bytes. + * - 16-way set-associative cache structure. + * + * +--------------------+-------+-----------+-----------+-----------+-----------+ + * | Processor model | Cores | L1D cache | L1I cache | L2 cache | Reference | + * +--------------------+-------+-----------+-----------+-----------+-----------+ + * | Broadcom BCM2837 | 4 | 16K | 16K | 512K | [1] | + * | Exynos 7420 | 4(+4) | 32K | 32K | 256K | [2, 3] | + * | Exynos 8890 | 4(+4) | 32K | 32K | 256K | [4] | + * | Rochchip RK3368 | 4+4 | 32K | 32K | 512K+256K | sysfs | + * | MediaTek MT8173C | 2(+2) | 32K | 32K | 512K(+1M) | sysfs | + * | Snapdragon 410 | 4 | 32K | 32K | 512K | [3] | + * | Snapdragon 630 | 4+4 | 32K | 32K | 1M+512K | sysfs | + * | Snapdragon 636 | 4(+4) | 32K+64K | 32K+64K | 1M+1M | sysfs | + * | Snapdragon 660 | 4(+4) | 32K+64K | 32K+64K | 1M+1M | sysfs | + * | Snapdragon 835 | 4(+4) | 32K+64K | 32K+64K | 1M(+2M) | sysfs | + * | Kirin 620 | 4+4 | 32K | 32K | 512K | [5] | + * +--------------------+-------+-----------+-----------+-----------+-----------+ + * + * [1] https://www.raspberrypi.org/forums/viewtopic.php?f=91&t=145766 + * [2] http://www.anandtech.com/show/9330/exynos-7420-deep-dive/2 + * [3] https://www.usenix.org/system/files/conference/usenixsecurity16/sec16_paper_lipp.pdf + * [4] http://www.boardset.com/products/products_v8890.php + * [5] http://mirror.lemaker.org/Hi6220V100_Multi-Mode_Application_Processor_Function_Description.pdf + */ + if (midr_is_qualcomm_cortex_a53_silver(midr)) { + /* Qualcomm-modified Cortex-A53 in Snapdragon 630/660/835 */ + + uint32_t l2_size = 512 * 1024; + switch (chipset->series) { + case cpuinfo_arm_chipset_series_qualcomm_msm: + if (chipset->model == 8998) { + /* Snapdragon 835 (MSM8998): 1 MB L2 (little cores only) */ + l2_size = 1024 * 1024; + } + break; + case cpuinfo_arm_chipset_series_qualcomm_snapdragon: + switch (chipset->model) { + case 630: + if (cluster_id == 0) { + /* Snapdragon 630: 1 MB L2 for the big cores */ + l2_size = 1024 * 1024; + } + break; + case 636: + /* Snapdragon 636: 1 MB L2 (little cores only) */ + l2_size = 1024 * 1024; + break; + case 660: + case 662: + /* Snapdragon 660: 1 MB L2 (little cores only) */ + l2_size = 1024 * 1024; + break; + } + break; + default: + break; + } + + *l1i = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 2, + .line_size = 64 + }; + *l1d = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4, + .line_size = 64 + }; + *l2 = (struct cpuinfo_cache) { + .size = l2_size, + .associativity = 16, + .line_size = 64 + }; + } else { + /* Standard Cortex-A53 */ + + /* Use conservative values by default */ + uint32_t l1_size = 16 * 1024; + uint32_t l2_size = 256 * 1024; + switch (chipset->series) { + case cpuinfo_arm_chipset_series_qualcomm_msm: + l1_size = 32 * 1024; + l2_size = 512 * 1024; + switch (chipset->model) { + case 8937: /* Snapdragon 430 */ + case 8940: /* Snapdragon 435 */ + case 8953: /* Snapdragon 625 or 626 (8953PRO) */ + if (cluster_id == 0) { + /* 1M L2 for big cluster */ + l2_size = 1024 * 1024; + } + break; + case 8952: /* Snapdragon 617 */ + if (cluster_id != 0) { + /* 256K L2 for LITTLE cluster */ + l2_size = 256 * 1024; + } + break; + default: + /* Silence compiler warning about unhandled enum values */ + break; + } + break; + case cpuinfo_arm_chipset_series_qualcomm_apq: + l1_size = 32 * 1024; + l2_size = 512 * 1024; + break; + case cpuinfo_arm_chipset_series_qualcomm_snapdragon: + l1_size = 32 * 1024; + l2_size = 512 * 1024; + if (chipset->model == 450 && cluster_id == 0) { + /* Snapdragon 450: 1M L2 for big cluster */ + l2_size = 1024 * 1024; + } + break; + case cpuinfo_arm_chipset_series_hisilicon_hi: + l1_size = 32 * 1024; + l2_size = 512 * 1024; + break; + case cpuinfo_arm_chipset_series_hisilicon_kirin: + l1_size = 32 * 1024; + switch (chipset->model) { + case 970: /* Kirin 970 */ + l2_size = 1024 * 1024; + break; + default: + l2_size = 512 * 1024; + break; + } + break; + case cpuinfo_arm_chipset_series_mediatek_mt: + switch (chipset->model) { + case 8173: + l1_size = 32 * 1024; + l2_size = 512 * 1024; + break; + } + break; + case cpuinfo_arm_chipset_series_rockchip_rk: + l1_size = 32 * 1024; + switch (chipset->model) { + case 3368: + if (cluster_id == 0) { + /* RK3368: 512 KB L2 for the big cores */ + l2_size = 512 * 1024; + } + break; + } + break; + case cpuinfo_arm_chipset_series_broadcom_bcm: + switch (chipset->model) { + case 2837: /* BCM2837 */ + l2_size = 512 * 1024; + break; + } + break; + case cpuinfo_arm_chipset_series_samsung_exynos: + l1_size = 32 * 1024; + break; + default: + /* Silence compiler warning about unhandled enum values */ + break; + } + *l1i = (struct cpuinfo_cache) { + .size = l1_size, + .associativity = 2, + .line_size = 64 + }; + *l1d = (struct cpuinfo_cache) { + .size = l1_size, + .associativity = 4, + .line_size = 64 + }; + *l2 = (struct cpuinfo_cache) { + .size = l2_size, + .associativity = 16, + .line_size = 64 + }; + } + break; + case cpuinfo_uarch_cortex_a55r0: + case cpuinfo_uarch_cortex_a55: + /* + * ARM Cortex-A55 Core Technical Reference Manual + * A6.1. About the L1 memory system + * The Cortex®-A55 core's L1 memory system enhances core performance and power efficiency. + * It consists of separate instruction and data caches. You can configure instruction and data caches + * independently during implementation to sizes of 16KB, 32KB, or 64KB. + * + * L1 instruction-side memory system + * The L1 instruction-side memory system provides an instruction stream to the DPU. Its key features are: + * - 64-byte instruction side cache line length. + * - 4-way set associative L1 instruction cache. + * + * L1 data-side memory system + * - 64-byte data side cache line length. + * - 4-way set associative L1 data cache. + * + * A7.1 About the L2 memory system + * The Cortex-A55 L2 memory system is required to interface the Cortex-A55 cores to the L3 memory system. + * The L2 memory subsystem consists of: + * - An optional 4-way, set-associative L2 cache with a configurable size of 64KB, 128KB or 256KB. Cache + * lines have a fixed length of 64 bytes. + * + * The main features of the L2 memory system are: + * - Strictly exclusive with L1 data cache. + * - Pseudo-inclusive with L1 instruction cache. + * - Private per-core unified L2 cache. + * + * +--------------------+-------+-----------+-----------+-----------+----------+------------+ + * | Processor model | Cores | L1D cache | L1I cache | L2 cache | L3 cache | Reference | + * +--------------------+-------+-----------+-----------+-----------+----------+------------+ + * | Snapdragon 845 | 4(+4) | 32K | 32K | 128K | 2M | [1], sysfs | + * | Exynos 9810 | 4(+4) | ? | ? | None | 512K | [2] | + * | Kirin 980 | 4(+4) | 32K | 32K | 128K | 4M | [3] | + * +--------------------+-------+-----------+-----------+-----------+----------+------------+ + * + * [1] https://www.anandtech.com/show/12114/qualcomm-announces-snapdragon-845-soc + * [2] https://www.anandtech.com/show/12478/exynos-9810-handson-awkward-first-results + * [3] https://en.wikichip.org/wiki/hisilicon/kirin/980 + */ + if (midr_is_qualcomm_cortex_a55_silver(midr)) { + /* Qualcomm-modified Cortex-A55 in Snapdragon 670 / 710 / 845 */ + uint32_t l3_size = 1024 * 1024; + switch (chipset->series) { + case cpuinfo_arm_chipset_series_qualcomm_snapdragon: + /* Snapdragon 845: 2M L3 cache */ + if (chipset->model == 845) { + l3_size = 2 * 1024 * 1024; + } + break; + default: + break; + } + + *l1i = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4, + .line_size = 64, + }; + *l1d = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4, + .line_size = 64, + }; + *l2 = (struct cpuinfo_cache) { + .size = 128 * 1024, + .associativity = 4, + .line_size = 64, + }; + *l3 = (struct cpuinfo_cache) { + .size = l3_size, + .associativity = 16, + .line_size = 64, + }; + } else { + /* Standard Cortex-A55 */ + + *l1i = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4, + .line_size = 64, + }; + *l1d = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4, + .line_size = 64, + }; + if (chipset->series == cpuinfo_arm_chipset_series_samsung_exynos) { + *l2 = (struct cpuinfo_cache) { + .size = 512 * 1024, + /* DynamIQ */ + .associativity = 16, + .line_size = 64, + }; + } else { + uint32_t l3_size = 1024 * 1024; + switch (chipset->series) { + case cpuinfo_arm_chipset_series_hisilicon_kirin: + /* Kirin 980: 4M L3 cache */ + if (chipset->model == 980) { + l3_size = 4 * 1024 * 1024; + } + break; + default: + break; + } + *l2 = (struct cpuinfo_cache) { + .size = 128 * 1024, + .associativity = 4, + .line_size = 64, + }; + *l3 = (struct cpuinfo_cache) { + .size = l3_size, + /* DynamIQ */ + .associativity = 16, + .line_size = 64, + }; + } + } + break; + case cpuinfo_uarch_cortex_a57: + /* + * ARM Cortex-A57 MPCore Processor Technical Reference Manual: + * 6.1. About the L1 memory system + * The L1 memory system consists of separate instruction and data caches. + * + * The L1 instruction memory system has the following features: + * - 48KB 3-way set-associative instruction cache. + * - Fixed line length of 64 bytes. + * + * The L1 data memory system has the following features: + * - 32KB 2-way set-associative data cache. + * - Fixed line length of 64 bytes. + * + * 7.1 About the L2 memory system + * The features of the L2 memory system include: + * - Configurable L2 cache size of 512KB, 1MB, and 2MB. + * - Fixed line length of 64 bytes. + * - 16-way set-associative cache structure. + * - Inclusion property with L1 data caches. + * + * +--------------------+-------+-----------+-----------+-----------+-----------+ + * | Processor model | Cores | L1D cache | L1I cache | L2 cache | Reference | + * +--------------------+-------+-----------+-----------+-----------+-----------+ + * | Snapdragon 810 | 4(+4) | 32K | 48K | 2M | [1] | + * | Exynos 7420 | 4(+4) | 32K | 48K | 2M | [2] | + * | Jetson TX1 | 4 | 32K | 48K | 2M | [3] | + * +--------------------+-------+-----------+-----------+-----------+-----------+ + * + * [1] http://www.anandtech.com/show/9837/snapdragon-820-preview + * [2] http://www.anandtech.com/show/9330/exynos-7420-deep-dive/2 + * [3] https://devblogs.nvidia.com/parallelforall/jetson-tx2-delivers-twice-intelligence-edge/ + */ + *l1i = (struct cpuinfo_cache) { + .size = 48 * 1024, + .associativity = 3, + .line_size = 64 + }; + *l1d = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 2, + .line_size = 64 + }; + *l2 = (struct cpuinfo_cache) { + .size = cluster_cores * 512 * 1024, + .associativity = 16, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE + }; + break; + case cpuinfo_uarch_cortex_a65: + { + /* + * ARM Cortex‑A65 Core Technical Reference Manual + * A6.1. About the L1 memory system + * The L1 memory system enhances the performance and power efficiency in the Cortex‑A65 core. + * It consists of separate instruction and data caches. You can configure instruction and data caches + * independently during implementation to sizes of 32KB or 64KB. + * + * L1 instruction-side memory system + * The L1 instruction-side memory system provides an instruction stream to the DPU. Its key features are: + * - 64-byte instruction side cache line length. + * - 4-way set associative L1 instruction cache. + * + * L1 data-side memory system + * - 64-byte data side cache line length. + * - 4-way set associative L1 data cache. + * + * A7.1 About the L2 memory system + * The Cortex‑A65 L2 memory system is required to interface the Cortex‑A65 cores to the L3 memory system. + * The L2 memory subsystem consists of: + * - An optional 4-way, set-associative L2 cache with a configurable size of 64KB, 128KB, or 256KB. + * Cache lines have a fixed length of 64 bytes. + * + * The main features of the L2 memory system are: + * - Strictly exclusive with L1 data cache. + * - Pseudo-inclusive with L1 instruction cache. + * - Private per-core unified L2 cache. + */ + const uint32_t l1_size = 32 * 1024; + const uint32_t l2_size = 128 * 1024; + const uint32_t l3_size = 512 * 1024; + *l1i = (struct cpuinfo_cache) { + .size = l1_size, + .associativity = 4, + .line_size = 64, + }; + *l1d = (struct cpuinfo_cache) { + .size = l1_size, + .associativity = 4, + .line_size = 64, + }; + *l2 = (struct cpuinfo_cache) { + .size = l2_size, + .associativity = 4, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE + }; + *l3 = (struct cpuinfo_cache) { + .size = l3_size, + /* DynamIQ */ + .associativity = 16, + .line_size = 64, + }; + break; + } + case cpuinfo_uarch_cortex_a72: + { + /* + * ARM Cortex-A72 MPCore Processor Technical Reference Manual + * 6.1. About the L1 memory system + * The L1 memory system consists of separate instruction and data caches. + * + * The L1 instruction memory system has the following features: + * - 48KB 3-way set-associative instruction cache. + * - Fixed line length of 64 bytes. + * + * The L1 data memory system has the following features: + * - 32KB 2-way set-associative data cache. + * - Fixed cache line length of 64 bytes. + * + * 7.1 About the L2 memory system + * The features of the L2 memory system include: + * - Configurable L2 cache size of 512KB, 1MB, 2MB and 4MB. + * - Fixed line length of 64 bytes. + * - Banked pipeline structures. + * - Inclusion property with L1 data caches. + * - 16-way set-associative cache structure. + * + * +---------------------+---------+-----------+-----------+------------+-----------+ + * | Processor model | Cores | L1D cache | L1I cache | L2 cache | Reference | + * +---------------------+---------+-----------+-----------+------------+-----------+ + * | Snapdragon 650 | 2(+4) | 32K(+32K) | 48K(+32K) | 1M(+512K) | [1] | + * | Snapdragon 652 | 4(+4) | 32K(+32K) | 48K(+32K) | 1M(+512K) | [2] | + * | Snapdragon 653 | 4(+4) | 32K(+32K) | 48K(+32K) | 1M(+512K) | [3] | + * | HiSilicon Kirin 950 | 4(+4) | 32K+32K | 48K+32K | ? | | + * | HiSilicon Kirin 955 | 4(+4) | 32K+32K | 48K+32K | ? | | + * | MediaTek MT8173C | 2(+2) | 32K(+32K) | 48K(+32K) | 1M(+512K) | sysfs | + * | MediaTek Helio X20 | 2(+4+4) | ? | ? | ? | | + * | MediaTek Helio X23 | 2(+4+4) | ? | ? | ? | | + * | MediaTek Helio X25 | 2(+4+4) | ? | ? | ? | | + * | MediaTek Helio X27 | 2(+4+4) | ? | ? | ? | | + * | Broadcom BCM2711 | 4 | 32K | 48K | 1M | [4] | + * +---------------------+---------+-----------+-----------+------------+-----------+ + * + * [1] http://pdadb.net/index.php?m=processor&id=578&c=qualcomm_snapdragon_618_msm8956__snapdragon_650 + * [2] http://pdadb.net/index.php?m=processor&id=667&c=qualcomm_snapdragon_620_apq8076__snapdragon_652 + * [3] http://pdadb.net/index.php?m=processor&id=692&c=qualcomm_snapdragon_653_msm8976sg__msm8976_pro + * [4] https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711/README.md + */ + uint32_t l2_size; + switch (chipset->series) { + case cpuinfo_arm_chipset_series_hisilicon_kirin: + l2_size = 2 * 1024 * 1024; + break; + default: + l2_size = 1024 * 1024; + break; + } + + *l1i = (struct cpuinfo_cache) { + .size = 48 * 1024, + .associativity = 3, + .line_size = 64 + }; + *l1d = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 2, + .line_size = 64 + }; + *l2 = (struct cpuinfo_cache) { + .size = l2_size, + .associativity = 16, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE + }; + break; + } + case cpuinfo_uarch_cortex_a73: + { + /* + * ARM Cortex‑A73 MPCore Processor Technical Reference Manual + * 6.1. About the L1 memory system + * The L1 memory system consists of separate instruction and data caches. + * The size of the instruction cache is 64KB. + * The size of the data cache is configurable to either 32KB or 64KB. + * + * The L1 instruction memory system has the following key features: + * - Virtually Indexed, Physically Tagged (VIPT), four-way set-associative instruction cache. + * - Fixed cache line length of 64 bytes. + * + * The L1 data memory system has the following features: + * - ...the data cache behaves like an eight-way set associative PIPT cache (for 32KB configurations) + * and a 16-way set associative PIPT cache (for 64KB configurations). + * - Fixed cache line length of 64 bytes. + * + * 7.1 About the L2 memory system + * The L2 memory system consists of: + * - A tightly-integrated L2 cache with: + * - A configurable size of 256KB, 512KB, 1MB, 2MB, 4MB, or 8MB. + * - A 16-way, set-associative structure. + * - A fixed line length of 64 bytes. + * + * The ARM Cortex A73 - Artemis Unveiled [1] + * "ARM still envisions that most vendors will choose to use configurations of 1 to + * 2MB in consumer products. The L2 cache is inclusive of the L1 cache. " + * + * +---------------------+---------+-----------+-----------+-----------+-----------+ + * | Processor model | Cores | L1D cache | L1I cache | L2 cache | Reference | + * +---------------------+---------+-----------+-----------+-----------+-----------+ + * | HiSilicon Kirin 960 | 4(+4) | 64K+32K | 64K+32K | ? | [2] | + * | MediaTek Helio X30 | 2(+4+4) | ? | 64K+ ? | ? | | + * | Snapdragon 636 | 4(+4) | 64K(+32K) | 64K(+32K) | 1M(+1M) | sysfs | + * | Snapdragon 660 | 4(+4) | 64K+32K | 64K+32K | 1M(+1M) | [3] | + * | Snapdragon 835 | 4(+4) | 64K+32K | 64K+32K | 2M(+1M) | sysfs | + * +---------------------+---------+-----------+-----------+-----------+-----------+ + * + * [1] http://www.anandtech.com/show/10347/arm-cortex-a73-artemis-unveiled/2 + * [2] http://www.anandtech.com/show/11088/hisilicon-kirin-960-performance-and-power/3 + * [3] https://arstechnica.com/gadgets/2017/05/qualcomms-snapdragon-660-and-630-bring-more-high-end-features-to-midrange-chips/ + */ + uint32_t l1d_size = 32 * 1024; + uint32_t l2_size = 512 * 1024; + switch (chipset->series) { + case cpuinfo_arm_chipset_series_hisilicon_kirin: + l1d_size = 64 * 1024; + l2_size = 2 * 1024 * 1024; + break; + case cpuinfo_arm_chipset_series_mediatek_mt: + l1d_size = 64 * 1024; + l2_size = 1 * 1024 * 1024; /* TODO: verify assumption */ + break; + default: + switch (midr) { + case UINT32_C(0x51AF8001): /* Kryo 280 Gold */ + l1d_size = 64 * 1024; + l2_size = 2 * 1024 * 1024; + break; + case UINT32_C(0x51AF8002): /* Kryo 260 Gold */ + l1d_size = 64 * 1024; + l2_size = 1 * 1024 * 1024; + break; + } + } + + *l1i = (struct cpuinfo_cache) { + .size = 64 * 1024, + .associativity = 4, + .line_size = 64 + }; + *l1d = (struct cpuinfo_cache) { + .size = l1d_size, + .associativity = (l1d_size >> 12), + .line_size = 64 + }; + *l2 = (struct cpuinfo_cache) { + .size = l2_size, + .associativity = 16, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE + }; + break; + } + case cpuinfo_uarch_cortex_a75: + { + /* + * ARM Cortex-A75 Core Technical Reference Manual + * A6.1. About the L1 memory system + * The L1 memory system consists of separate instruction and data caches. Both have a fixed size of 64KB. + * + * A6.1.1 L1 instruction-side memory system + * The L1 instruction memory system has the following key features: + * - Virtually Indexed, Physically Tagged (VIPT), four-way set-associative instruction cache. + * - Fixed cache line length of 64 bytes. + * + * A6.1.2 L1 data-side memory system + * The L1 data memory system has the following features: + * - Physically Indexed, Physically Tagged (PIPT), 16-way set-associative L1 data cache. + * - Fixed cache line length of 64 bytes. + * - Pseudo-random cache replacement policy. + * + * A7.1 About the L2 memory system + * The L2 memory subsystem consist of: + * - An 8-way set associative L2 cache with a configurable size of 256KB or 512KB. + * Cache lines have a fixed length of 64 bytes. + * + * +--------------------+-------+-----------+-----------+-----------+----------+------------+ + * | Processor model | Cores | L1D cache | L1I cache | L2 cache | L3 cache | Reference | + * +--------------------+-------+-----------+-----------+-----------+----------+------------+ + * | Snapdragon 845 | 4(+4) | 64K | 64K | 256K | 2M | [1], sysfs | + * +--------------------+-------+-----------+-----------+-----------+----------+------------+ + * + * [1] https://www.anandtech.com/show/12114/qualcomm-announces-snapdragon-845-soc + */ + uint32_t l3_size = 1024 * 1024; + switch (chipset->series) { + case cpuinfo_arm_chipset_series_qualcomm_snapdragon: + /* Snapdragon 845: 2M L3 cache */ + if (chipset->model == 845) { + l3_size = 2 * 1024 * 1024; + } + break; + default: + break; + } + *l1i = (struct cpuinfo_cache) { + .size = 64 * 1024, + .associativity = 4, + .line_size = 64 + }; + *l1d = (struct cpuinfo_cache) { + .size = 64 * 1024, + .associativity = 16, + .line_size = 64 + }; + *l2 = (struct cpuinfo_cache) { + .size = 256 * 1024, + .associativity = 8, + .line_size = 64 + }; + *l3 = (struct cpuinfo_cache) { + .size = l3_size, + .associativity = 16, + .line_size = 64 + }; + break; + } + case cpuinfo_uarch_cortex_a76: + { + /* + * ARM Cortex-A76 Core Technical Reference Manual + * A6.1. About the L1 memory system + * The L1 memory system consists of separate instruction and data caches. Both have a fixed size of 64KB. + * + * A6.1.1 L1 instruction-side memory system + * The L1 instruction memory system has the following key features: + * - Virtually Indexed, Physically Tagged (VIPT), which behaves as a Physically Indexed, + * Physically Tagged (PIPT) 4-way set-associative L1 data cache. + * - Fixed cache line length of 64 bytes. + * + * A6.1.2 L1 data-side memory system + * The L1 data memory system has the following features: + * - Virtually Indexed, Physically Tagged (VIPT), which behaves as a Physically Indexed, + * Physically Tagged (PIPT) 4-way set-associative L1 data cache. + * - Fixed cache line length of 64 bytes. + * - Pseudo-LRU cache replacement policy. + * + * A7.1 About the L2 memory system + * The L2 memory subsystem consist of: + * - An 8-way set associative L2 cache with a configurable size of 128KB, 256KB or 512KB. + * Cache lines have a fixed length of 64 bytes. + * - Strictly inclusive with L1 data cache. Weakly inclusive with L1 instruction cache. + * - Dynamic biased replacement policy. + * - Modified Exclusive Shared Invalid (MESI) coherency. + * + * +--------------------+-------+-----------+-----------+-----------+----------+------------+ + * | Processor model | Cores | L1D cache | L1I cache | L2 cache | L3 cache | Reference | + * +--------------------+-------+-----------+-----------+-----------+----------+------------+ + * | Kirin 980 | 4(+4) | 64K | 64K | 512K | 4M | [1], [2] | + * +--------------------+-------+-----------+-----------+-----------+----------+------------+ + * + * [1] https://www.anandtech.com/show/13298/hisilicon-announces-the-kirin-980-first-a76-g76-on-7nm + * [2] https://en.wikichip.org/wiki/hisilicon/kirin/980 + */ + uint32_t l2_size = 256 * 1024; + uint32_t l3_size = 1024 * 1024; + switch (chipset->series) { + case cpuinfo_arm_chipset_series_hisilicon_kirin: + /* Kirin 980: 512K L2 cache + 4M L3 cache */ + if (chipset->model == 980) { + l2_size = 512 * 1024; + l3_size = 4 * 1024 * 1024; + } + break; + default: + break; + } + *l1i = (struct cpuinfo_cache) { + .size = 64 * 1024, + .associativity = 4, + .line_size = 64, + }; + *l1d = (struct cpuinfo_cache) { + .size = 64 * 1024, + .associativity = 4, + .line_size = 64, + }; + *l2 = (struct cpuinfo_cache) { + .size = l2_size, + .associativity = 8, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + *l3 = (struct cpuinfo_cache) { + .size = l3_size, + .associativity = 16, + .line_size = 64, + }; + break; + } + case cpuinfo_uarch_cortex_a77: + { + /* + * ARM Cortex-A77 Core Technical Reference Manual + * A6.1. About the L1 memory system + * The L1 memory system consists of separate instruction and data caches. Both have a fixed size of 64KB. + * + * A6.1.1 L1 instruction-side memory system + * The L1 instruction memory system has the following key features: + * - Virtually Indexed, Physically Tagged (VIPT), which behaves as a Physically Indexed, + * Physically Tagged (PIPT) 4-way set-associative L1 data cache. + * - Fixed cache line length of 64 bytes. + * + * A6.1.2 L1 data-side memory system + * The L1 data memory system has the following features: + * - Virtually Indexed, Physically Tagged (VIPT), which behaves as a Physically Indexed, + * Physically Tagged (PIPT) 4-way set-associative L1 data cache. + * - Fixed cache line length of 64 bytes. + * - Pseudo-LRU cache replacement policy. + * + * A7.1 About the L2 memory system + * The L2 memory subsystem consist of: + * - An 8-way set associative L2 cache with a configurable size of 128KB, 256KB or 512KB. Cache lines + * have a fixed length of 64 bytes. + * - Strictly inclusive with L1 data cache. Weakly inclusive with L1 instruction cache. + */ + const uint32_t l2_size = 256 * 1024; + const uint32_t l3_size = 1024 * 1024; + *l1i = (struct cpuinfo_cache) { + .size = 64 * 1024, + .associativity = 4, + .line_size = 64, + }; + *l1d = (struct cpuinfo_cache) { + .size = 64 * 1024, + .associativity = 4, + .line_size = 64, + }; + *l2 = (struct cpuinfo_cache) { + .size = l2_size, + .associativity = 8, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + *l3 = (struct cpuinfo_cache) { + .size = l3_size, + .associativity = 16, + .line_size = 64, + }; + break; + } + case cpuinfo_uarch_neoverse_n1: + case cpuinfo_uarch_neoverse_v1: + case cpuinfo_uarch_neoverse_n2: + { + /* + * ARM Neoverse-n1 Core Technical Reference Manual + * A6.1. About the L1 memory system + * The L1 memory system consists of separate instruction and data caches. Both have a fixed size of 64KB. + * + * A6.1.1 L1 instruction-side memory system + * The L1 instruction memory system has the following key features: + * - Virtually Indexed, Physically Tagged (VIPT), which behaves as a Physically Indexed, + * Physically Tagged (PIPT) 4-way set-associative L1 data cache. + * - Fixed cache line length of 64 bytes. + * + * A6.1.2 L1 data-side memory system + * The L1 data memory system has the following features: + * - Virtually Indexed, Physically Tagged (VIPT), which behaves as a Physically Indexed, + * Physically Tagged (PIPT) 4-way set-associative L1 data cache. + * - Fixed cache line length of 64 bytes. + * - Pseudo-LRU cache replacement policy. + * + * A7.1 About the L2 memory system + * The L2 memory subsystem consist of: + * - An 8-way set associative L2 cache with a configurable size of 256KB, 512KB, or 1024KB. Cache lines + * have a fixed length of 64 bytes. + * - Strictly inclusive with L1 data cache. + * - When configured with instruction cache hardware coherency, strictly inclusive with L1 instruction cache. + * - When configured without instruction cache hardware coherency, weakly inclusive with L1 instruction cache. + */ + + const uint32_t min_l2_size_KB= 256; + const uint32_t min_l3_size_KB = 0; + + *l1i = (struct cpuinfo_cache) { + .size = 64 * 1024, + .associativity = 4, + .line_size = 64, + }; + *l1d = (struct cpuinfo_cache) { + .size = 64 * 1024, + .associativity = 4, + .line_size = 64, + }; + *l2 = (struct cpuinfo_cache) { + .size = min_l2_size_KB * 1024, + .associativity = 8, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + *l3 = (struct cpuinfo_cache) { + .size = min_l3_size_KB * 1024, + .associativity = 16, + .line_size = 64, + }; + break; + } +#if CPUINFO_ARCH_ARM && !defined(__ARM_ARCH_8A__) + case cpuinfo_uarch_scorpion: + /* + * - "The CPU includes 32KB instruction and data caches as + * well as a complete memory-management unit (MMU) suitable + * for high-level operating systems. The CPU also has + * 256KB of SRAM that can be allocated in 64KB increments + * to level-two (L2) cache or tightly coupled memory (TCM)." [1] + * We interpret it as L2 cache being 4-way set-associative on single-core Scorpion. + * - L1 Data Cache = 32 KB. 32 B/line. [2] + * - L2 Cache = 256 KB. 128 B/line. [2] + * - 256 KB (single-core) or 512 KB (dual-core) L2 cache [3] + * - Single or dual-core configuration [3] + * - For L1 cache assume the same associativity as Krait + * + * [1] https://www.qualcomm.com/media/documents/files/linley-report-on-dual-core-snapdragon.pdf + * [2] http://www.7-cpu.com/cpu/Snapdragon.html + * [3] https://en.wikipedia.org/wiki/Scorpion_(CPU) + */ + *l1i = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4, + .line_size = 32 + }; + *l1d = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4, + .line_size = 32 + }; + *l2 = (struct cpuinfo_cache) { + .size = cluster_cores * 256 * 1024, + .associativity = 4, + .line_size = 128 + }; + break; + case cpuinfo_uarch_krait: + /* + * - L0 Data cache = 4 KB. 64 B/line, direct mapped [1] + * - L0 Instruction cache = 4 KB. [1] + * - L1 Data cache = 16 KB. 64 B/line, 4-way [1] + * - L1 Instruction cache = 16 KB, 4-way [1] + * - L2 Cache = 1 MB, 128 B/line, 8-way. Each core has fast access only to 512 KB of L2 cache. [1] + * - L2 = 1MB (dual core) or 2MB (quad core), 8-way set associative [2] + * + * [1] http://www.7-cpu.com/cpu/Krait.html + * [2] http://www.anandtech.com/show/4940/qualcomm-new-snapdragon-s4-msm8960-krait-architecture/2 + */ + *l1i = (struct cpuinfo_cache) { + .size = 16 * 1024, + .associativity = 4, + .line_size = 64 /* assume same as L1D */ + }; + *l1d = (struct cpuinfo_cache) { + .size = 16 * 1024, + .associativity = 4, + .line_size = 64 + }; + *l2 = (struct cpuinfo_cache) { + .size = cluster_cores * 512 * 1024, + .associativity = 8, + .line_size = 128 + }; + break; +#endif /* CPUINFO_ARCH_ARM && !defined(__ARM_ARCH_8A__) */ + case cpuinfo_uarch_kryo: + /* + * +-----------------+-------+-----------+-----------+-----------+-----------+ + * | Processor model | Cores | L1D cache | L1I cache | L2 cache | Reference | + * +-----------------+-------+-----------+-----------+-----------+-----------+ + * | Snapdragon 820 | 2+2 | 24K | 32K | 1M+512K | [1, 2] | + * | Snapdragon 821 | 2+2 | ? | ? | 1M+512K | [1] | + * +-----------------+-------+-----------+-----------+-----------+-----------+ + * + * [1] http://www.anandtech.com/show/9837/snapdragon-820-preview/2 + * [2] https://www.inforcecomputing.com/public_docs/Inforce6601/Inforce_6601_Micro-SOM_FAQs_04-2016-1.pdf + */ + *l1i = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4, + .line_size = 64 + }; + *l1d = (struct cpuinfo_cache) { + .size = 24 * 1024, + .associativity = 3, + .line_size = 64 + }; + if (midr_is_kryo_silver(midr)) { + /* Kryo "Silver" */ + *l2 = (struct cpuinfo_cache) { + .size = 512 * 1024, + .associativity = 8, + .line_size = 128 + }; + } else { + /* Kryo "Gold" */ + *l2 = (struct cpuinfo_cache) { + .size = 1024 * 1024, + .associativity = 8, + .line_size = 128 + }; + } + break; + case cpuinfo_uarch_denver: + case cpuinfo_uarch_denver2: + /* + * The Denver chip includes a 128KB, 4-way level 1 instruction cache, a 64KB, 4-way level 2 data cache, + * and a 2MB, 16-way level 2 cache, all of which can service both cores. [1] + * + * All the caches have 64-byte lines. [2] + * + * [1] http://www.pcworld.com/article/2463900/nvidia-reveals-pc-like-performance-for-denver-tegra-k1.html + * [2] http://linleygroup.com/newsletters/newsletter_detail.php?num=5205&year=2014 + */ + *l1i = (struct cpuinfo_cache) { + .size = 128 * 1024, + .associativity = 4, + .line_size = 64 + }; + *l1d = (struct cpuinfo_cache) { + .size = 64 * 1024, + .associativity = 4, + .line_size = 64 + }; + *l2 = (struct cpuinfo_cache) { + .size = 2 * 1024 * 1024, + .associativity = 16, + .line_size = 64 + }; + break; + case cpuinfo_uarch_exynos_m1: + case cpuinfo_uarch_exynos_m2: + /* + * - "Moving past branch prediction we can see some elements of how the cache is set up for the L1 I$, + * namely 64 KB split into four sets with 128-byte line sizes for 128 cache lines per set" [1] + * - "For loads and stores, a 32 KB, 8-way set associative cache with 64 byte line size is used" [1] + * - "The L2 cache here is 2MB shared across all cores split into 16 sets. This memory is also split + * into 4 banks and has a 22 cycle latency" [1] + * + * +--------------------+-------+-----------+-----------+-----------+-----------+ + * | Processor model | Cores | L1D cache | L1I cache | L2 cache | Reference | + * +--------------------+-------+-----------+-----------+-----------+-----------+ + * | Exynos 8 Octa 8890 | 4(+4) | 64K | 32K | 2M | [1] | + * | Exynos 8 Octa 8895 | 4(+4) | 64K | 32K | 2M | [2] | + * +--------------------+-------+-----------+-----------+-----------+-----------+ + * + * [1] http://www.anandtech.com/show/10590/hot-chips-2016-exynos-m1-architecture-disclosed + * [2] https://www.extremetech.com/mobile/244949-samsungs-exynos-8895-features-custom-cpu-cores-first-10nm-chip-market + */ + *l1i = (struct cpuinfo_cache) { + .size = 64 * 1024, + .associativity = 4, + .line_size = 128 + }; + *l1d = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 8, + .line_size = 64 + }; + *l2 = (struct cpuinfo_cache) { + .size = 2 * 1024 * 1024, + .associativity = 16, + .line_size = 64 + }; + break; + case cpuinfo_uarch_exynos_m3: + /* + * +--------------------+-------+-----------+-----------+-----------+----------+------------+ + * | Processor model | Cores | L1D cache | L1I cache | L2 cache | L3 cache | Reference | + * +--------------------+-------+-----------+-----------+-----------+----------+------------+ + * | Exynos 9810 | 4(+4) | 64K | ? | 512K | 4M | [1] | + * +--------------------+-------+-----------+-----------+-----------+----------+------------+ + * + * [1] https://www.anandtech.com/show/12478/exynos-9810-handson-awkward-first-results + */ + *l1i = (struct cpuinfo_cache) { + .size = 64 * 1024 /* assume same as in Exynos M1/M2 cores */, + .associativity = 4 /* assume same as in Exynos M1/M2 cores */, + .line_size = 128 /* assume same as in Exynos M1/M2 cores */ + }; + *l1d = (struct cpuinfo_cache) { + .size = 64 * 1024, + .associativity = 8 /* assume same as in Exynos M1/M2 cores */, + .line_size = 64 /* assume same as in Exynos M1/M2 cores */, + }; + *l2 = (struct cpuinfo_cache) { + .size = 512 * 1024, + .associativity = 16 /* assume same as in Exynos M1/M2 cores */, + .line_size = 64 /* assume same as in Exynos M1/M2 cores */, + }; + *l3 = (struct cpuinfo_cache) { + .size = 4 * 1024 * 1024, + .associativity = 16 /* assume DynamIQ cache */, + .line_size = 64 /* assume DynamIQ cache */, + }; + break; +#if CPUINFO_ARCH_ARM64 && !defined(__ANDROID__) + case cpuinfo_uarch_thunderx: + /* + * "78K-Icache and 32K-D cache per core, 16 MB shared L2 cache" [1] + * + * [1] https://www.cavium.com/pdfFiles/ThunderX_CP_PB_Rev1.pdf + */ + *l1i = (struct cpuinfo_cache) { + .size = 78 * 1024, + .associativity = 4 /* assumption */, + .line_size = 64 /* assumption */ + }; + *l1d = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4 /* assumption */, + .line_size = 64 /* assumption */ + }; + *l2 = (struct cpuinfo_cache) { + .size = 16 * 1024 * 1024, + .associativity = 8 /* assumption */, + .line_size = 64 /* assumption */ + }; + break; + case cpuinfo_uarch_taishan_v110: + /* + * It features private 64 KiB L1 instruction and data caches as well as 512 KiB of private L2. [1] + * + * +------------------+-------+-----------+-----------+-----------+----------+-----------+ + * | Processor model | Cores | L1D cache | L1I cache | L2 cache | L3 cache | Reference | + * +------------------+-------+-----------+-----------+-----------+----------+-----------+ + * | Kunpeng 920-3226 | 32 | 64K | 64K | 512K | 32M | [2] | + * +------------------+-------+-----------+-----------+-----------+----------+-----------+ + * | Kunpeng 920-4826 | 48 | 64K | 64K | 512K | 48M | [3] | + * +------------------+-------+-----------+-----------+-----------+----------+-----------+ + * | Kunpeng 920-6426 | 64 | 64K | 64K | 512K | 64M | [4] | + * +------------------+-------+-----------+-----------+-----------+----------+-----------+ + * + * [1] https://en.wikichip.org/wiki/hisilicon/microarchitectures/taishan_v110 + * [2] https://en.wikichip.org/wiki/hisilicon/kunpeng/920-3226 + * [3] https://en.wikichip.org/wiki/hisilicon/kunpeng/920-4826 + * [4] https://en.wikichip.org/wiki/hisilicon/kunpeng/920-6426 + */ + *l1i = (struct cpuinfo_cache) { + .size = 64 * 1024, + .associativity = 4 /* assumption */, + .line_size = 128 /* assumption */, + }; + *l1d = (struct cpuinfo_cache) { + .size = 64 * 1024, + .associativity = 4 /* assumption */, + .line_size = 128 /* assumption */, + }; + *l2 = (struct cpuinfo_cache) { + .size = 512 * 1024, + .associativity = 8 /* assumption */, + .line_size = 128 /* assumption */, + .flags = CPUINFO_CACHE_INCLUSIVE /* assumption */, + }; + *l3 = (struct cpuinfo_cache) { + .size = cluster_cores * 1024 * 1024, + .associativity = 16 /* assumption */, + .line_size = 128 /* assumption */, + }; + break; +#endif + case cpuinfo_uarch_cortex_a12: + case cpuinfo_uarch_cortex_a32: + default: + cpuinfo_log_warning("target uarch not recognized; using generic cache parameters"); + /* Follow OpenBLAS */ + if (arch_version >= 8) { + *l1i = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4, + .line_size = 64 + }; + *l1d = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4, + .line_size = 64 + }; + *l2 = (struct cpuinfo_cache) { + .size = cluster_cores * 256 * 1024, + .associativity = 8, + .line_size = 64 + }; + } else { + *l1i = (struct cpuinfo_cache) { + .size = 16 * 1024, + .associativity = 4, + .line_size = 32 + }; + *l1d = (struct cpuinfo_cache) { + .size = 16 * 1024, + .associativity = 4, + .line_size = 32 + }; + if (arch_version >= 7) { + *l2 = (struct cpuinfo_cache) { + .size = cluster_cores * 128 * 1024, + .associativity = 8, + .line_size = 32 + }; + } + } + break; + } + l1i->sets = l1i->size / (l1i->associativity * l1i->line_size); + l1i->partitions = 1; + l1d->sets = l1d->size / (l1d->associativity * l1d->line_size); + l1d->partitions = 1; + if (l2->size != 0) { + l2->sets = l2->size / (l2->associativity * l2->line_size); + l2->partitions = 1; + if (l3->size != 0) { + l3->sets = l3->size / (l3->associativity * l3->line_size); + l3->partitions = 1; + } + } +} + +uint32_t cpuinfo_arm_compute_max_cache_size(const struct cpuinfo_processor* processor) { + /* + * There is no precise way to detect cache size on ARM/ARM64, and cache size reported by cpuinfo + * may underestimate the actual cache size. Thus, we use microarchitecture-specific maximum. + */ + switch (processor->core->uarch) { + case cpuinfo_uarch_xscale: + case cpuinfo_uarch_arm11: + case cpuinfo_uarch_scorpion: + case cpuinfo_uarch_krait: + case cpuinfo_uarch_kryo: + case cpuinfo_uarch_exynos_m1: + case cpuinfo_uarch_exynos_m2: + case cpuinfo_uarch_exynos_m3: + /* cpuinfo-detected cache size always correct */ + return cpuinfo_compute_max_cache_size(processor); + case cpuinfo_uarch_cortex_a5: + /* Max observed (NXP Vybrid SoC) */ + return 512 * 1024; + case cpuinfo_uarch_cortex_a7: + /* + * Cortex-A7 MPCore Technical Reference Manual: + * 7.1. About the L2 Memory system + * The L2 memory system consists of an: + * - Optional tightly-coupled L2 cache that includes: + * - Configurable L2 cache size of 128KB, 256KB, 512KB, and 1MB. + */ + return 1024 * 1024; + case cpuinfo_uarch_cortex_a8: + /* + * Cortex-A8 Technical Reference Manual: + * 8.1. About the L2 memory system + * The key features of the L2 memory system include: + * - configurable cache size of 0KB, 128KB, 256KB, 512KB, and 1MB + */ + return 1024 * 1024; + case cpuinfo_uarch_cortex_a9: + /* Max observed (e.g. Exynos 4212) */ + return 1024 * 1024; + case cpuinfo_uarch_cortex_a12: + case cpuinfo_uarch_cortex_a17: + /* + * ARM Cortex-A17 MPCore Processor Technical Reference Manual: + * 7.1. About the L2 Memory system + * The key features of the L2 memory system include: + * - An integrated L2 cache: + * - The cache size is implemented as either 256KB, 512KB, 1MB, 2MB, 4MB or 8MB. + */ + return 8 * 1024 * 1024; + case cpuinfo_uarch_cortex_a15: + /* + * ARM Cortex-A15 MPCore Processor Technical Reference Manual: + * 7.1. About the L2 memory system + * The features of the L2 memory system include: + * - Configurable L2 cache size of 512KB, 1MB, 2MB and 4MB. + */ + return 4 * 1024 * 1024; + case cpuinfo_uarch_cortex_a35: + /* + * ARM Cortex‑A35 Processor Technical Reference Manual: + * 7.1 About the L2 memory system + * L2 cache + * - Further features of the L2 cache are: + * - Configurable size of 128KB, 256KB, 512KB, and 1MB. + */ + return 1024 * 1024; + case cpuinfo_uarch_cortex_a53: + /* + * ARM Cortex-A53 MPCore Processor Technical Reference Manual: + * 7.1. About the L2 memory system + * The L2 memory system consists of an: + * - Optional tightly-coupled L2 cache that includes: + * - Configurable L2 cache size of 128KB, 256KB, 512KB, 1MB and 2MB. + */ + return 2 * 1024 * 1024; + case cpuinfo_uarch_cortex_a57: + /* + * ARM Cortex-A57 MPCore Processor Technical Reference Manual: + * 7.1 About the L2 memory system + * The features of the L2 memory system include: + * - Configurable L2 cache size of 512KB, 1MB, and 2MB. + */ + return 2 * 1024 * 1024; + case cpuinfo_uarch_cortex_a72: + /* + * ARM Cortex-A72 MPCore Processor Technical Reference Manual: + * 7.1 About the L2 memory system + * The features of the L2 memory system include: + * - Configurable L2 cache size of 512KB, 1MB, 2MB and 4MB. + */ + return 4 * 1024 * 1024; + case cpuinfo_uarch_cortex_a73: + /* + * ARM Cortex‑A73 MPCore Processor Technical Reference Manual + * 7.1 About the L2 memory system + * The L2 memory system consists of: + * - A tightly-integrated L2 cache with: + * - A configurable size of 256KB, 512KB, 1MB, 2MB, 4MB, or 8MB. + */ + return 8 * 1024 * 1024; + case cpuinfo_uarch_cortex_a55: + case cpuinfo_uarch_neoverse_n1: + case cpuinfo_uarch_neoverse_v1: + case cpuinfo_uarch_neoverse_n2: + case cpuinfo_uarch_cortex_a75: + case cpuinfo_uarch_cortex_a76: + case cpuinfo_uarch_exynos_m4: + default: + /* + * ARM DynamIQ Shared Unit Technical Reference Manual + * 1.3 Implementation options + * L3_CACHE_SIZE + * - 256KB + * - 512KB + * - 1024KB + * - 1536KB + * - 2048KB + * - 3072KB + * - 4096KB + */ + return 4 * 1024 * 1024; + } +} diff --git a/3rdparty/cpuinfo/src/arm/linux/aarch32-isa.c b/3rdparty/cpuinfo/src/arm/linux/aarch32-isa.c new file mode 100644 index 000000000..d6f6a21d2 --- /dev/null +++ b/3rdparty/cpuinfo/src/arm/linux/aarch32-isa.c @@ -0,0 +1,271 @@ +#include + +#if CPUINFO_MOCK + #include +#endif +#include +#include +#include +#include + + +#if CPUINFO_MOCK + uint32_t cpuinfo_arm_fpsid = 0; + uint32_t cpuinfo_arm_mvfr0 = 0; + uint32_t cpuinfo_arm_wcid = 0; + + void cpuinfo_set_fpsid(uint32_t fpsid) { + cpuinfo_arm_fpsid = fpsid; + } + + void cpuinfo_set_wcid(uint32_t wcid) { + cpuinfo_arm_wcid = wcid; + } +#endif + + +void cpuinfo_arm_linux_decode_isa_from_proc_cpuinfo( + uint32_t features, + uint32_t features2, + uint32_t midr, + uint32_t architecture_version, + uint32_t architecture_flags, + const struct cpuinfo_arm_chipset chipset[restrict static 1], + struct cpuinfo_arm_isa isa[restrict static 1]) +{ + if (architecture_version >= 8) { + /* + * ARMv7 code running on ARMv8: IDIV, VFP, NEON are always supported, + * but may be not reported in /proc/cpuinfo features. + */ + isa->armv5e = true; + isa->armv6 = true; + isa->armv6k = true; + isa->armv7 = true; + isa->armv7mp = true; + isa->armv8 = true; + isa->thumb = true; + isa->thumb2 = true; + isa->idiv = true; + isa->vfpv3 = true; + isa->d32 = true; + isa->fp16 = true; + isa->fma = true; + isa->neon = true; + + /* + * NEON FP16 compute extension and VQRDMLAH/VQRDMLSH instructions are not indicated in /proc/cpuinfo. + * Use a MIDR-based heuristic to whitelist processors known to support it: + * - Processors with Cortex-A55 cores + * - Processors with Cortex-A65 cores + * - Processors with Cortex-A75 cores + * - Processors with Cortex-A76 cores + * - Processors with Cortex-A77 cores + * - Processors with Exynos M4 cores + * - Processors with Exynos M5 cores + * - Neoverse N1 cores + * - Neoverse V1 cores + * - Neoverse N2 cores + */ + if (chipset->series == cpuinfo_arm_chipset_series_samsung_exynos && chipset->model == 9810) { + /* Only little cores of Exynos 9810 support FP16 & RDM */ + cpuinfo_log_warning("FP16 arithmetics and RDM disabled: only little cores in Exynos 9810 support these extensions"); + } else { + switch (midr & (CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK)) { + case UINT32_C(0x4100D050): /* Cortex-A55 */ + case UINT32_C(0x4100D060): /* Cortex-A65 */ + case UINT32_C(0x4100D0B0): /* Cortex-A76 */ + case UINT32_C(0x4100D0C0): /* Neoverse N1 */ + case UINT32_C(0x4100D0D0): /* Cortex-A77 */ + case UINT32_C(0x4100D0E0): /* Cortex-A76AE */ + case UINT32_C(0x4100D400): /* Neoverse V1 */ + case UINT32_C(0x4100D490): /* Neoverse N2 */ + case UINT32_C(0x4800D400): /* Cortex-A76 (HiSilicon) */ + case UINT32_C(0x51008020): /* Kryo 385 Gold (Cortex-A75) */ + case UINT32_C(0x51008030): /* Kryo 385 Silver (Cortex-A55) */ + case UINT32_C(0x51008040): /* Kryo 485 Gold (Cortex-A76) */ + case UINT32_C(0x51008050): /* Kryo 485 Silver (Cortex-A55) */ + case UINT32_C(0x53000030): /* Exynos M4 */ + case UINT32_C(0x53000040): /* Exynos M5 */ + isa->fp16arith = true; + isa->rdm = true; + break; + } + } + + /* + * NEON VDOT instructions are not indicated in /proc/cpuinfo. + * Use a MIDR-based heuristic to whitelist processors known to support it. + */ + switch (midr & (CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK)) { + case UINT32_C(0x4100D0B0): /* Cortex-A76 */ + case UINT32_C(0x4100D0D0): /* Cortex-A77 */ + case UINT32_C(0x4100D0E0): /* Cortex-A76AE */ + case UINT32_C(0x4800D400): /* Cortex-A76 (HiSilicon) */ + case UINT32_C(0x51008040): /* Kryo 485 Gold (Cortex-A76) */ + case UINT32_C(0x51008050): /* Kryo 485 Silver (Cortex-A55) */ + case UINT32_C(0x53000030): /* Exynos-M4 */ + case UINT32_C(0x53000040): /* Exynos-M5 */ + isa->dot = true; + break; + case UINT32_C(0x4100D050): /* Cortex A55: revision 1 or later only */ + isa->dot = !!(midr_get_variant(midr) >= 1); + break; + case UINT32_C(0x4100D0A0): /* Cortex A75: revision 2 or later only */ + isa->dot = !!(midr_get_variant(midr) >= 2); + break; + } + } else { + /* ARMv7 or lower: use feature flags to detect optional features */ + + /* + * ARM11 (ARM 1136/1156/1176/11 MPCore) processors can report v7 architecture + * even though they support only ARMv6 instruction set. + */ + if (architecture_version == 7 && midr_is_arm11(midr)) { + cpuinfo_log_warning("kernel-reported architecture ARMv7 ignored due to mismatch with processor microarchitecture (ARM11)"); + architecture_version = 6; + } + + if (architecture_version < 7) { + const uint32_t armv7_features_mask = CPUINFO_ARM_LINUX_FEATURE_VFPV3 | CPUINFO_ARM_LINUX_FEATURE_VFPV3D16 | CPUINFO_ARM_LINUX_FEATURE_VFPD32 | + CPUINFO_ARM_LINUX_FEATURE_VFPV4 | CPUINFO_ARM_LINUX_FEATURE_NEON | CPUINFO_ARM_LINUX_FEATURE_IDIVT | CPUINFO_ARM_LINUX_FEATURE_IDIVA; + if (features & armv7_features_mask) { + architecture_version = 7; + } + } + if ((architecture_version >= 6) || (features & CPUINFO_ARM_LINUX_FEATURE_EDSP) || (architecture_flags & CPUINFO_ARM_LINUX_ARCH_E)) { + isa->armv5e = true; + } + if (architecture_version >= 6) { + isa->armv6 = true; + } + if (architecture_version >= 7) { + isa->armv6k = true; + isa->armv7 = true; + + /* + * ARMv7 MP extension (PLDW instruction) is not indicated in /proc/cpuinfo. + * Use heuristic list of supporting processors: + * - Processors supporting UDIV/SDIV instructions ("idiva" + "idivt" features in /proc/cpuinfo) + * - Cortex-A5 + * - Cortex-A9 + * - Dual-Core Scorpion + * - Krait (supports UDIV/SDIV, but kernels may not report it in /proc/cpuinfo) + * + * TODO: check single-core Qualcomm Scorpion. + */ + switch (midr & (CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK)) { + case UINT32_C(0x4100C050): /* Cortex-A5 */ + case UINT32_C(0x4100C090): /* Cortex-A9 */ + case UINT32_C(0x510002D0): /* Scorpion (dual-core) */ + case UINT32_C(0x510004D0): /* Krait (dual-core) */ + case UINT32_C(0x510006F0): /* Krait (quad-core) */ + isa->armv7mp = true; + break; + default: + /* In practice IDIV instruction implies ARMv7+MP ISA */ + isa->armv7mp = (features & CPUINFO_ARM_LINUX_FEATURE_IDIV) == CPUINFO_ARM_LINUX_FEATURE_IDIV; + break; + } + } + + if (features & CPUINFO_ARM_LINUX_FEATURE_IWMMXT) { + const uint32_t wcid = read_wcid(); + cpuinfo_log_debug("WCID = 0x%08"PRIx32, wcid); + const uint32_t coprocessor_type = (wcid >> 8) & UINT32_C(0xFF); + if (coprocessor_type >= 0x10) { + isa->wmmx = true; + if (coprocessor_type >= 0x20) { + isa->wmmx2 = true; + } + } else { + cpuinfo_log_warning("WMMX ISA disabled: OS reported iwmmxt feature, " + "but WCID coprocessor type 0x%"PRIx32" indicates no WMMX support", + coprocessor_type); + } + } + + if ((features & CPUINFO_ARM_LINUX_FEATURE_THUMB) || (architecture_flags & CPUINFO_ARM_LINUX_ARCH_T)) { + isa->thumb = true; + + /* + * There is no separate feature flag for Thumb 2. + * All ARMv7 processors and ARM 1156 support Thumb 2. + */ + if (architecture_version >= 7 || midr_is_arm1156(midr)) { + isa->thumb2 = true; + } + } + if (features & CPUINFO_ARM_LINUX_FEATURE_THUMBEE) { + isa->thumbee = true; + } + if ((features & CPUINFO_ARM_LINUX_FEATURE_JAVA) || (architecture_flags & CPUINFO_ARM_LINUX_ARCH_J)) { + isa->jazelle = true; + } + + /* Qualcomm Krait may have buggy kernel configuration that doesn't report IDIV */ + if ((features & CPUINFO_ARM_LINUX_FEATURE_IDIV) == CPUINFO_ARM_LINUX_FEATURE_IDIV || midr_is_krait(midr)) { + isa->idiv = true; + } + + const uint32_t vfp_mask = \ + CPUINFO_ARM_LINUX_FEATURE_VFP | CPUINFO_ARM_LINUX_FEATURE_VFPV3 | CPUINFO_ARM_LINUX_FEATURE_VFPV3D16 | \ + CPUINFO_ARM_LINUX_FEATURE_VFPD32 | CPUINFO_ARM_LINUX_FEATURE_VFPV4 | CPUINFO_ARM_LINUX_FEATURE_NEON; + if (features & vfp_mask) { + const uint32_t vfpv3_mask = CPUINFO_ARM_LINUX_FEATURE_VFPV3 | CPUINFO_ARM_LINUX_FEATURE_VFPV3D16 | \ + CPUINFO_ARM_LINUX_FEATURE_VFPD32 | CPUINFO_ARM_LINUX_FEATURE_VFPV4 | CPUINFO_ARM_LINUX_FEATURE_NEON; + if ((architecture_version >= 7) || (features & vfpv3_mask)) { + isa->vfpv3 = true; + + const uint32_t d32_mask = CPUINFO_ARM_LINUX_FEATURE_VFPD32 | CPUINFO_ARM_LINUX_FEATURE_NEON; + if (features & d32_mask) { + isa->d32 = true; + } + } else { + #if defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_8A__) || defined(__ARM_ARCH) && (__ARM_ARCH >= 7) + isa->vfpv3 = true; + #else + const uint32_t fpsid = read_fpsid(); + cpuinfo_log_debug("FPSID = 0x%08"PRIx32, fpsid); + const uint32_t subarchitecture = (fpsid >> 16) & UINT32_C(0x7F); + if (subarchitecture >= 0x01) { + isa->vfpv2 = true; + } + #endif + } + } + if (features & CPUINFO_ARM_LINUX_FEATURE_NEON) { + isa->neon = true; + } + + /* + * There is no separate feature flag for FP16 support. + * VFPv4 implies VFPv3-FP16 support (and in practice, NEON-HP as well). + * Additionally, ARM Cortex-A9 and Qualcomm Scorpion support FP16. + */ + if ((features & CPUINFO_ARM_LINUX_FEATURE_VFPV4) || midr_is_cortex_a9(midr) || midr_is_scorpion(midr)) { + isa->fp16 = true; + } + + if (features & CPUINFO_ARM_LINUX_FEATURE_VFPV4) { + isa->fma = true; + } + } + + if (features2 & CPUINFO_ARM_LINUX_FEATURE2_AES) { + isa->aes = true; + } + if (features2 & CPUINFO_ARM_LINUX_FEATURE2_PMULL) { + isa->pmull = true; + } + if (features2 & CPUINFO_ARM_LINUX_FEATURE2_SHA1) { + isa->sha1 = true; + } + if (features2 & CPUINFO_ARM_LINUX_FEATURE2_SHA2) { + isa->sha2 = true; + } + if (features2 & CPUINFO_ARM_LINUX_FEATURE2_CRC32) { + isa->crc32 = true; + } +} diff --git a/3rdparty/cpuinfo/src/arm/linux/aarch64-isa.c b/3rdparty/cpuinfo/src/arm/linux/aarch64-isa.c new file mode 100644 index 000000000..7b18095c3 --- /dev/null +++ b/3rdparty/cpuinfo/src/arm/linux/aarch64-isa.c @@ -0,0 +1,139 @@ +#include + +#include +#include + + +void cpuinfo_arm64_linux_decode_isa_from_proc_cpuinfo( + uint32_t features, + uint32_t features2, + uint32_t midr, + const struct cpuinfo_arm_chipset chipset[restrict static 1], + struct cpuinfo_arm_isa isa[restrict static 1]) +{ + if (features & CPUINFO_ARM_LINUX_FEATURE_AES) { + isa->aes = true; + } + if (features & CPUINFO_ARM_LINUX_FEATURE_PMULL) { + isa->pmull = true; + } + if (features & CPUINFO_ARM_LINUX_FEATURE_SHA1) { + isa->sha1 = true; + } + if (features & CPUINFO_ARM_LINUX_FEATURE_SHA2) { + isa->sha2 = true; + } + if (features & CPUINFO_ARM_LINUX_FEATURE_CRC32) { + isa->crc32 = true; + } + if (features & CPUINFO_ARM_LINUX_FEATURE_ATOMICS) { + isa->atomics = true; + } + + /* + * Some phones ship with an old kernel configuration that doesn't report NEON FP16 compute extension and SQRDMLAH/SQRDMLSH/UQRDMLAH/UQRDMLSH instructions. + * Use a MIDR-based heuristic to whitelist processors known to support it: + * - Processors with Cortex-A55 cores + * - Processors with Cortex-A65 cores + * - Processors with Cortex-A75 cores + * - Processors with Cortex-A76 cores + * - Processors with Cortex-A77 cores + * - Processors with Exynos M4 cores + * - Processors with Exynos M5 cores + * - Neoverse N1 cores + * - Neoverse V1 cores + * - Neoverse N2 cores + */ + if (chipset->series == cpuinfo_arm_chipset_series_samsung_exynos && chipset->model == 9810) { + /* Exynos 9810 reports that it supports FP16 compute, but in fact only little cores do */ + cpuinfo_log_warning("FP16 arithmetics and RDM disabled: only little cores in Exynos 9810 support these extensions"); + } else { + const uint32_t fp16arith_mask = CPUINFO_ARM_LINUX_FEATURE_FPHP | CPUINFO_ARM_LINUX_FEATURE_ASIMDHP; + switch (midr & (CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK)) { + case UINT32_C(0x4100D050): /* Cortex-A55 */ + case UINT32_C(0x4100D060): /* Cortex-A65 */ + case UINT32_C(0x4100D0B0): /* Cortex-A76 */ + case UINT32_C(0x4100D0C0): /* Neoverse N1 */ + case UINT32_C(0x4100D0D0): /* Cortex-A77 */ + case UINT32_C(0x4100D0E0): /* Cortex-A76AE */ + case UINT32_C(0x4100D400): /* Neoverse V1 */ + case UINT32_C(0x4100D490): /* Neoverse N2 */ + case UINT32_C(0x4800D400): /* Cortex-A76 (HiSilicon) */ + case UINT32_C(0x51008020): /* Kryo 385 Gold (Cortex-A75) */ + case UINT32_C(0x51008030): /* Kryo 385 Silver (Cortex-A55) */ + case UINT32_C(0x51008040): /* Kryo 485 Gold (Cortex-A76) */ + case UINT32_C(0x51008050): /* Kryo 485 Silver (Cortex-A55) */ + case UINT32_C(0x53000030): /* Exynos M4 */ + case UINT32_C(0x53000040): /* Exynos M5 */ + isa->fp16arith = true; + isa->rdm = true; + break; + default: + if ((features & fp16arith_mask) == fp16arith_mask) { + isa->fp16arith = true; + } else if (features & CPUINFO_ARM_LINUX_FEATURE_FPHP) { + cpuinfo_log_warning("FP16 arithmetics disabled: detected support only for scalar operations"); + } else if (features & CPUINFO_ARM_LINUX_FEATURE_ASIMDHP) { + cpuinfo_log_warning("FP16 arithmetics disabled: detected support only for SIMD operations"); + } + if (features & CPUINFO_ARM_LINUX_FEATURE_ASIMDRDM) { + isa->rdm = true; + } + break; + } + } + + /* + * Many phones ship with an old kernel configuration that doesn't report UDOT/SDOT instructions. + * Use a MIDR-based heuristic to whitelist processors known to support it. + */ + switch (midr & (CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK)) { + case UINT32_C(0x4100D060): /* Cortex-A65 */ + case UINT32_C(0x4100D0B0): /* Cortex-A76 */ + case UINT32_C(0x4100D0C0): /* Neoverse N1 */ + case UINT32_C(0x4100D0D0): /* Cortex-A77 */ + case UINT32_C(0x4100D0E0): /* Cortex-A76AE */ + case UINT32_C(0x4100D400): /* Neoverse V1 */ + case UINT32_C(0x4100D490): /* Neoverse N2 */ + case UINT32_C(0x4100D4A0): /* Neoverse E1 */ + case UINT32_C(0x4800D400): /* Cortex-A76 (HiSilicon) */ + case UINT32_C(0x51008040): /* Kryo 485 Gold (Cortex-A76) */ + case UINT32_C(0x51008050): /* Kryo 485 Silver (Cortex-A55) */ + case UINT32_C(0x53000030): /* Exynos-M4 */ + case UINT32_C(0x53000040): /* Exynos-M5 */ + isa->dot = true; + break; + case UINT32_C(0x4100D050): /* Cortex A55: revision 1 or later only */ + isa->dot = !!(midr_get_variant(midr) >= 1); + break; + case UINT32_C(0x4100D0A0): /* Cortex A75: revision 2 or later only */ + isa->dot = !!(midr_get_variant(midr) >= 2); + break; + default: + if (features & CPUINFO_ARM_LINUX_FEATURE_ASIMDDP) { + isa->dot = true; + } + break; + } + if (features & CPUINFO_ARM_LINUX_FEATURE_JSCVT) { + isa->jscvt = true; + } + if (features & CPUINFO_ARM_LINUX_FEATURE_JSCVT) { + isa->jscvt = true; + } + if (features & CPUINFO_ARM_LINUX_FEATURE_FCMA) { + isa->fcma = true; + } + if (features & CPUINFO_ARM_LINUX_FEATURE_SVE) { + isa->sve = true; + } + if (features2 & CPUINFO_ARM_LINUX_FEATURE2_SVE2) { + isa->sve2 = true; + } + if (features2 & CPUINFO_ARM_LINUX_FEATURE2_BF16) { + isa->bf16 = true; + } + if (features2 & CPUINFO_ARM_LINUX_FEATURE2_SVEBF16) { + isa->svebf16 = true; + } +} diff --git a/3rdparty/cpuinfo/src/arm/linux/api.h b/3rdparty/cpuinfo/src/arm/linux/api.h new file mode 100644 index 000000000..1c09f827e --- /dev/null +++ b/3rdparty/cpuinfo/src/arm/linux/api.h @@ -0,0 +1,384 @@ +#pragma once + +#include +#include + +#include +#include +#include +#include +#include + +/* No hard limit in the kernel, maximum length observed on non-rogue kernels is 64 */ +#define CPUINFO_HARDWARE_VALUE_MAX 64 +/* No hard limit in the kernel, maximum length on Raspberry Pi is 8. Add 1 symbol to detect overly large revision strings */ +#define CPUINFO_REVISION_VALUE_MAX 9 + +#ifdef __ANDROID__ + /* As per include/sys/system_properties.h in Android NDK */ + #define CPUINFO_BUILD_PROP_NAME_MAX 32 + #define CPUINFO_BUILD_PROP_VALUE_MAX 92 + + struct cpuinfo_android_properties { + char proc_cpuinfo_hardware[CPUINFO_HARDWARE_VALUE_MAX]; + char ro_product_board[CPUINFO_BUILD_PROP_VALUE_MAX]; + char ro_board_platform[CPUINFO_BUILD_PROP_VALUE_MAX]; + char ro_mediatek_platform[CPUINFO_BUILD_PROP_VALUE_MAX]; + char ro_arch[CPUINFO_BUILD_PROP_VALUE_MAX]; + char ro_chipname[CPUINFO_BUILD_PROP_VALUE_MAX]; + char ro_hardware_chipname[CPUINFO_BUILD_PROP_VALUE_MAX]; + }; +#endif + +#define CPUINFO_ARM_LINUX_ARCH_T UINT32_C(0x00000001) +#define CPUINFO_ARM_LINUX_ARCH_E UINT32_C(0x00000002) +#define CPUINFO_ARM_LINUX_ARCH_J UINT32_C(0x00000004) + +#define CPUINFO_ARM_LINUX_ARCH_TE UINT32_C(0x00000003) +#define CPUINFO_ARM_LINUX_ARCH_TEJ UINT32_C(0x00000007) + +struct cpuinfo_arm_linux_proc_cpuinfo_cache { + uint32_t i_size; + uint32_t i_assoc; + uint32_t i_line_length; + uint32_t i_sets; + uint32_t d_size; + uint32_t d_assoc; + uint32_t d_line_length; + uint32_t d_sets; +}; + +#if CPUINFO_ARCH_ARM + /* arch/arm/include/uapi/asm/hwcap.h */ + + #define CPUINFO_ARM_LINUX_FEATURE_SWP UINT32_C(0x00000001) + #define CPUINFO_ARM_LINUX_FEATURE_HALF UINT32_C(0x00000002) + #define CPUINFO_ARM_LINUX_FEATURE_THUMB UINT32_C(0x00000004) + #define CPUINFO_ARM_LINUX_FEATURE_26BIT UINT32_C(0x00000008) + #define CPUINFO_ARM_LINUX_FEATURE_FASTMULT UINT32_C(0x00000010) + #define CPUINFO_ARM_LINUX_FEATURE_FPA UINT32_C(0x00000020) + #define CPUINFO_ARM_LINUX_FEATURE_VFP UINT32_C(0x00000040) + #define CPUINFO_ARM_LINUX_FEATURE_EDSP UINT32_C(0x00000080) + #define CPUINFO_ARM_LINUX_FEATURE_JAVA UINT32_C(0x00000100) + #define CPUINFO_ARM_LINUX_FEATURE_IWMMXT UINT32_C(0x00000200) + #define CPUINFO_ARM_LINUX_FEATURE_CRUNCH UINT32_C(0x00000400) + #define CPUINFO_ARM_LINUX_FEATURE_THUMBEE UINT32_C(0x00000800) + #define CPUINFO_ARM_LINUX_FEATURE_NEON UINT32_C(0x00001000) + #define CPUINFO_ARM_LINUX_FEATURE_VFPV3 UINT32_C(0x00002000) + #define CPUINFO_ARM_LINUX_FEATURE_VFPV3D16 UINT32_C(0x00004000) /* Also set for VFPv4 with 16 double-precision registers */ + #define CPUINFO_ARM_LINUX_FEATURE_TLS UINT32_C(0x00008000) + #define CPUINFO_ARM_LINUX_FEATURE_VFPV4 UINT32_C(0x00010000) + #define CPUINFO_ARM_LINUX_FEATURE_IDIVA UINT32_C(0x00020000) + #define CPUINFO_ARM_LINUX_FEATURE_IDIVT UINT32_C(0x00040000) + #define CPUINFO_ARM_LINUX_FEATURE_IDIV UINT32_C(0x00060000) + #define CPUINFO_ARM_LINUX_FEATURE_VFPD32 UINT32_C(0x00080000) + #define CPUINFO_ARM_LINUX_FEATURE_LPAE UINT32_C(0x00100000) + #define CPUINFO_ARM_LINUX_FEATURE_EVTSTRM UINT32_C(0x00200000) + + #define CPUINFO_ARM_LINUX_FEATURE2_AES UINT32_C(0x00000001) + #define CPUINFO_ARM_LINUX_FEATURE2_PMULL UINT32_C(0x00000002) + #define CPUINFO_ARM_LINUX_FEATURE2_SHA1 UINT32_C(0x00000004) + #define CPUINFO_ARM_LINUX_FEATURE2_SHA2 UINT32_C(0x00000008) + #define CPUINFO_ARM_LINUX_FEATURE2_CRC32 UINT32_C(0x00000010) +#elif CPUINFO_ARCH_ARM64 + /* arch/arm64/include/uapi/asm/hwcap.h */ + #define CPUINFO_ARM_LINUX_FEATURE_FP UINT32_C(0x00000001) + #define CPUINFO_ARM_LINUX_FEATURE_ASIMD UINT32_C(0x00000002) + #define CPUINFO_ARM_LINUX_FEATURE_EVTSTRM UINT32_C(0x00000004) + #define CPUINFO_ARM_LINUX_FEATURE_AES UINT32_C(0x00000008) + #define CPUINFO_ARM_LINUX_FEATURE_PMULL UINT32_C(0x00000010) + #define CPUINFO_ARM_LINUX_FEATURE_SHA1 UINT32_C(0x00000020) + #define CPUINFO_ARM_LINUX_FEATURE_SHA2 UINT32_C(0x00000040) + #define CPUINFO_ARM_LINUX_FEATURE_CRC32 UINT32_C(0x00000080) + #define CPUINFO_ARM_LINUX_FEATURE_ATOMICS UINT32_C(0x00000100) + #define CPUINFO_ARM_LINUX_FEATURE_FPHP UINT32_C(0x00000200) + #define CPUINFO_ARM_LINUX_FEATURE_ASIMDHP UINT32_C(0x00000400) + #define CPUINFO_ARM_LINUX_FEATURE_CPUID UINT32_C(0x00000800) + #define CPUINFO_ARM_LINUX_FEATURE_ASIMDRDM UINT32_C(0x00001000) + #define CPUINFO_ARM_LINUX_FEATURE_JSCVT UINT32_C(0x00002000) + #define CPUINFO_ARM_LINUX_FEATURE_FCMA UINT32_C(0x00004000) + #define CPUINFO_ARM_LINUX_FEATURE_LRCPC UINT32_C(0x00008000) + #define CPUINFO_ARM_LINUX_FEATURE_DCPOP UINT32_C(0x00010000) + #define CPUINFO_ARM_LINUX_FEATURE_SHA3 UINT32_C(0x00020000) + #define CPUINFO_ARM_LINUX_FEATURE_SM3 UINT32_C(0x00040000) + #define CPUINFO_ARM_LINUX_FEATURE_SM4 UINT32_C(0x00080000) + #define CPUINFO_ARM_LINUX_FEATURE_ASIMDDP UINT32_C(0x00100000) + #define CPUINFO_ARM_LINUX_FEATURE_SHA512 UINT32_C(0x00200000) + #define CPUINFO_ARM_LINUX_FEATURE_SVE UINT32_C(0x00400000) + #define CPUINFO_ARM_LINUX_FEATURE_ASIMDFHM UINT32_C(0x00800000) + #define CPUINFO_ARM_LINUX_FEATURE_DIT UINT32_C(0x01000000) + #define CPUINFO_ARM_LINUX_FEATURE_USCAT UINT32_C(0x02000000) + #define CPUINFO_ARM_LINUX_FEATURE_ILRCPC UINT32_C(0x04000000) + #define CPUINFO_ARM_LINUX_FEATURE_FLAGM UINT32_C(0x08000000) + #define CPUINFO_ARM_LINUX_FEATURE_SSBS UINT32_C(0x10000000) + #define CPUINFO_ARM_LINUX_FEATURE_SB UINT32_C(0x20000000) + #define CPUINFO_ARM_LINUX_FEATURE_PACA UINT32_C(0x40000000) + #define CPUINFO_ARM_LINUX_FEATURE_PACG UINT32_C(0x80000000) + + #define CPUINFO_ARM_LINUX_FEATURE2_DCPODP UINT32_C(0x00000001) + #define CPUINFO_ARM_LINUX_FEATURE2_SVE2 UINT32_C(0x00000002) + #define CPUINFO_ARM_LINUX_FEATURE2_SVEAES UINT32_C(0x00000004) + #define CPUINFO_ARM_LINUX_FEATURE2_SVEPMULL UINT32_C(0x00000008) + #define CPUINFO_ARM_LINUX_FEATURE2_SVEBITPERM UINT32_C(0x00000010) + #define CPUINFO_ARM_LINUX_FEATURE2_SVESHA3 UINT32_C(0x00000020) + #define CPUINFO_ARM_LINUX_FEATURE2_SVESM4 UINT32_C(0x00000040) + #define CPUINFO_ARM_LINUX_FEATURE2_FLAGM2 UINT32_C(0x00000080) + #define CPUINFO_ARM_LINUX_FEATURE2_FRINT UINT32_C(0x00000100) + #define CPUINFO_ARM_LINUX_FEATURE2_SVEI8MM UINT32_C(0x00000200) + #define CPUINFO_ARM_LINUX_FEATURE2_SVEF32MM UINT32_C(0x00000400) + #define CPUINFO_ARM_LINUX_FEATURE2_SVEF64MM UINT32_C(0x00000800) + #define CPUINFO_ARM_LINUX_FEATURE2_SVEBF16 UINT32_C(0x00001000) + #define CPUINFO_ARM_LINUX_FEATURE2_I8MM UINT32_C(0x00002000) + #define CPUINFO_ARM_LINUX_FEATURE2_BF16 UINT32_C(0x00004000) + #define CPUINFO_ARM_LINUX_FEATURE2_DGH UINT32_C(0x00008000) + #define CPUINFO_ARM_LINUX_FEATURE2_RNG UINT32_C(0x00010000) + #define CPUINFO_ARM_LINUX_FEATURE2_BTI UINT32_C(0x00020000) +#endif + +#define CPUINFO_ARM_LINUX_VALID_ARCHITECTURE UINT32_C(0x00010000) +#define CPUINFO_ARM_LINUX_VALID_IMPLEMENTER UINT32_C(0x00020000) +#define CPUINFO_ARM_LINUX_VALID_VARIANT UINT32_C(0x00040000) +#define CPUINFO_ARM_LINUX_VALID_PART UINT32_C(0x00080000) +#define CPUINFO_ARM_LINUX_VALID_REVISION UINT32_C(0x00100000) +#define CPUINFO_ARM_LINUX_VALID_PROCESSOR UINT32_C(0x00200000) +#define CPUINFO_ARM_LINUX_VALID_FEATURES UINT32_C(0x00400000) +#if CPUINFO_ARCH_ARM + #define CPUINFO_ARM_LINUX_VALID_ICACHE_SIZE UINT32_C(0x01000000) + #define CPUINFO_ARM_LINUX_VALID_ICACHE_SETS UINT32_C(0x02000000) + #define CPUINFO_ARM_LINUX_VALID_ICACHE_WAYS UINT32_C(0x04000000) + #define CPUINFO_ARM_LINUX_VALID_ICACHE_LINE UINT32_C(0x08000000) + #define CPUINFO_ARM_LINUX_VALID_DCACHE_SIZE UINT32_C(0x10000000) + #define CPUINFO_ARM_LINUX_VALID_DCACHE_SETS UINT32_C(0x20000000) + #define CPUINFO_ARM_LINUX_VALID_DCACHE_WAYS UINT32_C(0x40000000) + #define CPUINFO_ARM_LINUX_VALID_DCACHE_LINE UINT32_C(0x80000000) +#endif + +#define CPUINFO_ARM_LINUX_VALID_INFO UINT32_C(0x007F0000) +#define CPUINFO_ARM_LINUX_VALID_MIDR UINT32_C(0x003F0000) +#if CPUINFO_ARCH_ARM + #define CPUINFO_ARM_LINUX_VALID_ICACHE UINT32_C(0x0F000000) + #define CPUINFO_ARM_LINUX_VALID_DCACHE UINT32_C(0xF0000000) + #define CPUINFO_ARM_LINUX_VALID_CACHE_LINE UINT32_C(0x88000000) +#endif + +struct cpuinfo_arm_linux_processor { + uint32_t architecture_version; +#if CPUINFO_ARCH_ARM + uint32_t architecture_flags; + struct cpuinfo_arm_linux_proc_cpuinfo_cache proc_cpuinfo_cache; +#endif + uint32_t features; + uint32_t features2; + /** + * Main ID Register value. + */ + uint32_t midr; + enum cpuinfo_vendor vendor; + enum cpuinfo_uarch uarch; + uint32_t uarch_index; + /** + * ID of the physical package which includes this logical processor. + * The value is parsed from /sys/devices/system/cpu/cpu/topology/physical_package_id + */ + uint32_t package_id; + /** + * Minimum processor ID on the package which includes this logical processor. + * This value can serve as an ID for the cluster of logical processors: it is the + * same for all logical processors on the same package. + */ + uint32_t package_leader_id; + /** + * Number of logical processors in the package. + */ + uint32_t package_processor_count; + /** + * Maximum frequency, in kHZ. + * The value is parsed from /sys/devices/system/cpu/cpu/cpufreq/cpuinfo_max_freq + * If failed to read or parse the file, the value is 0. + */ + uint32_t max_frequency; + /** + * Minimum frequency, in kHZ. + * The value is parsed from /sys/devices/system/cpu/cpu/cpufreq/cpuinfo_min_freq + * If failed to read or parse the file, the value is 0. + */ + uint32_t min_frequency; + /** Linux processor ID */ + uint32_t system_processor_id; + uint32_t flags; +}; + +struct cpuinfo_arm_linux_cluster { + uint32_t processor_id_min; + uint32_t processor_id_max; +}; + +/* Returns true if the two processors do belong to the same cluster */ +static inline bool cpuinfo_arm_linux_processor_equals( + struct cpuinfo_arm_linux_processor processor_i[restrict static 1], + struct cpuinfo_arm_linux_processor processor_j[restrict static 1]) +{ + const uint32_t joint_flags = processor_i->flags & processor_j->flags; + + bool same_max_frequency = false; + if (joint_flags & CPUINFO_LINUX_FLAG_MAX_FREQUENCY) { + if (processor_i->max_frequency != processor_j->max_frequency) { + return false; + } else { + same_max_frequency = true; + } + } + + bool same_min_frequency = false; + if (joint_flags & CPUINFO_LINUX_FLAG_MIN_FREQUENCY) { + if (processor_i->min_frequency != processor_j->min_frequency) { + return false; + } else { + same_min_frequency = true; + } + } + + if ((joint_flags & CPUINFO_ARM_LINUX_VALID_MIDR) == CPUINFO_ARM_LINUX_VALID_MIDR) { + if (processor_i->midr == processor_j->midr) { + if (midr_is_cortex_a53(processor_i->midr)) { + return same_min_frequency & same_max_frequency; + } else { + return true; + } + } + } + + return same_max_frequency && same_min_frequency; +} + +/* Returns true if the two processors certainly don't belong to the same cluster */ +static inline bool cpuinfo_arm_linux_processor_not_equals( + struct cpuinfo_arm_linux_processor processor_i[restrict static 1], + struct cpuinfo_arm_linux_processor processor_j[restrict static 1]) +{ + const uint32_t joint_flags = processor_i->flags & processor_j->flags; + + if (joint_flags & CPUINFO_LINUX_FLAG_MAX_FREQUENCY) { + if (processor_i->max_frequency != processor_j->max_frequency) { + return true; + } + } + + if (joint_flags & CPUINFO_LINUX_FLAG_MIN_FREQUENCY) { + if (processor_i->min_frequency != processor_j->min_frequency) { + return true; + } + } + + if ((joint_flags & CPUINFO_ARM_LINUX_VALID_MIDR) == CPUINFO_ARM_LINUX_VALID_MIDR) { + if (processor_i->midr != processor_j->midr) { + return true; + } + } + + return false; +} + +CPUINFO_INTERNAL bool cpuinfo_arm_linux_parse_proc_cpuinfo( + char hardware[restrict static CPUINFO_HARDWARE_VALUE_MAX], + char revision[restrict static CPUINFO_REVISION_VALUE_MAX], + uint32_t max_processors_count, + struct cpuinfo_arm_linux_processor processors[restrict static max_processors_count]); + +#if CPUINFO_ARCH_ARM + CPUINFO_INTERNAL bool cpuinfo_arm_linux_hwcap_from_getauxval( + uint32_t hwcap[restrict static 1], + uint32_t hwcap2[restrict static 1]); + CPUINFO_INTERNAL bool cpuinfo_arm_linux_hwcap_from_procfs( + uint32_t hwcap[restrict static 1], + uint32_t hwcap2[restrict static 1]); + + CPUINFO_INTERNAL void cpuinfo_arm_linux_decode_isa_from_proc_cpuinfo( + uint32_t features, + uint32_t features2, + uint32_t midr, + uint32_t architecture_version, + uint32_t architecture_flags, + const struct cpuinfo_arm_chipset chipset[restrict static 1], + struct cpuinfo_arm_isa isa[restrict static 1]); +#elif CPUINFO_ARCH_ARM64 + CPUINFO_INTERNAL void cpuinfo_arm_linux_hwcap_from_getauxval( + uint32_t hwcap[restrict static 1], + uint32_t hwcap2[restrict static 1]); + + CPUINFO_INTERNAL void cpuinfo_arm64_linux_decode_isa_from_proc_cpuinfo( + uint32_t features, + uint32_t features2, + uint32_t midr, + const struct cpuinfo_arm_chipset chipset[restrict static 1], + struct cpuinfo_arm_isa isa[restrict static 1]); +#endif + +#ifdef __ANDROID__ + CPUINFO_INTERNAL struct cpuinfo_arm_chipset + cpuinfo_arm_android_decode_chipset( + const struct cpuinfo_android_properties properties[restrict static 1], + uint32_t cores, + uint32_t max_cpu_freq_max); +#else + CPUINFO_INTERNAL struct cpuinfo_arm_chipset + cpuinfo_arm_linux_decode_chipset( + const char hardware[restrict static CPUINFO_HARDWARE_VALUE_MAX], + const char revision[restrict static CPUINFO_REVISION_VALUE_MAX], + uint32_t cores, + uint32_t max_cpu_freq_max); +#endif + +CPUINFO_INTERNAL struct cpuinfo_arm_chipset + cpuinfo_arm_linux_decode_chipset_from_proc_cpuinfo_hardware( + const char proc_cpuinfo_hardware[restrict static CPUINFO_HARDWARE_VALUE_MAX], + uint32_t cores, uint32_t max_cpu_freq_max, bool is_tegra); + +#ifdef __ANDROID__ + CPUINFO_INTERNAL struct cpuinfo_arm_chipset + cpuinfo_arm_android_decode_chipset_from_ro_product_board( + const char ro_product_board[restrict static CPUINFO_BUILD_PROP_VALUE_MAX], + uint32_t cores, uint32_t max_cpu_freq_max); + CPUINFO_INTERNAL struct cpuinfo_arm_chipset + cpuinfo_arm_android_decode_chipset_from_ro_board_platform( + const char ro_board_platform[restrict static CPUINFO_BUILD_PROP_VALUE_MAX], + uint32_t cores, uint32_t max_cpu_freq_max); + CPUINFO_INTERNAL struct cpuinfo_arm_chipset + cpuinfo_arm_android_decode_chipset_from_ro_mediatek_platform( + const char ro_mediatek_platform[restrict static CPUINFO_BUILD_PROP_VALUE_MAX]); + CPUINFO_INTERNAL struct cpuinfo_arm_chipset + cpuinfo_arm_android_decode_chipset_from_ro_arch( + const char ro_arch[restrict static CPUINFO_BUILD_PROP_VALUE_MAX]); + CPUINFO_INTERNAL struct cpuinfo_arm_chipset + cpuinfo_arm_android_decode_chipset_from_ro_chipname( + const char ro_chipname[restrict static CPUINFO_BUILD_PROP_VALUE_MAX]); + CPUINFO_INTERNAL struct cpuinfo_arm_chipset + cpuinfo_arm_android_decode_chipset_from_ro_hardware_chipname( + const char ro_hardware_chipname[restrict static CPUINFO_BUILD_PROP_VALUE_MAX]); +#else + CPUINFO_INTERNAL struct cpuinfo_arm_chipset + cpuinfo_arm_linux_decode_chipset_from_proc_cpuinfo_revision( + const char proc_cpuinfo_revision[restrict static CPUINFO_REVISION_VALUE_MAX]); +#endif + +CPUINFO_INTERNAL bool cpuinfo_arm_linux_detect_core_clusters_by_heuristic( + uint32_t usable_processors, + uint32_t max_processors, + struct cpuinfo_arm_linux_processor processors[restrict static max_processors]); + +CPUINFO_INTERNAL void cpuinfo_arm_linux_detect_core_clusters_by_sequential_scan( + uint32_t max_processors, + struct cpuinfo_arm_linux_processor processors[restrict static max_processors]); + +CPUINFO_INTERNAL void cpuinfo_arm_linux_count_cluster_processors( + uint32_t max_processors, + struct cpuinfo_arm_linux_processor processors[restrict static max_processors]); + +CPUINFO_INTERNAL uint32_t cpuinfo_arm_linux_detect_cluster_midr( + const struct cpuinfo_arm_chipset chipset[restrict static 1], + uint32_t max_processors, + uint32_t usable_processors, + struct cpuinfo_arm_linux_processor processors[restrict static max_processors]); + +extern CPUINFO_INTERNAL const uint32_t* cpuinfo_linux_cpu_to_uarch_index_map; +extern CPUINFO_INTERNAL uint32_t cpuinfo_linux_cpu_to_uarch_index_map_entries; diff --git a/3rdparty/cpuinfo/src/arm/linux/chipset.c b/3rdparty/cpuinfo/src/arm/linux/chipset.c new file mode 100644 index 000000000..f369fba68 --- /dev/null +++ b/3rdparty/cpuinfo/src/arm/linux/chipset.c @@ -0,0 +1,3937 @@ +#include +#include +#include +#include + +#include +#ifdef __ANDROID__ + #include +#endif +#include +#include + + +static inline bool is_ascii_whitespace(char c) { + switch (c) { + case ' ': + case '\t': + case '\r': + case '\n': + return true; + default: + return false; + } +} + +static inline bool is_ascii_alphabetic(char c) { + const char lower_c = c | '\x20'; + return (uint8_t) (lower_c - 'a') <= (uint8_t) ('z' - 'a'); +} + +static inline bool is_ascii_alphabetic_uppercase(char c) { + return (uint8_t) (c - 'A') <= (uint8_t) ('Z' - 'A'); +} + +static inline bool is_ascii_numeric(char c) { + return (uint8_t) (c - '0') < 10; +} + +static inline uint16_t load_u16le(const void* ptr) { +#if defined(__ARM_ARCH_7A__) || defined(__aarch64__) + return *((const uint16_t*) ptr); +#else + const uint8_t* byte_ptr = (const uint8_t*) ptr; + return ((uint16_t) byte_ptr[1] << 8) | (uint16_t) byte_ptr[0]; +#endif +} + +static inline uint32_t load_u24le(const void* ptr) { +#if defined(__ARM_ARCH_7A__) || defined(__aarch64__) + return ((uint32_t) ((const uint8_t*) ptr)[2] << 16) | ((uint32_t) *((const uint16_t*) ptr)); +#else + const uint8_t* byte_ptr = (const uint8_t*) ptr; + return ((uint32_t) byte_ptr[2] << 16) | ((uint32_t) byte_ptr[1] << 8) | (uint32_t) byte_ptr[0]; +#endif +} + +static inline uint32_t load_u32le(const void* ptr) { +#if defined(__ARM_ARCH_7A__) || defined(__aarch64__) + return *((const uint32_t*) ptr); +#else + return ((uint32_t) ((const uint8_t*) ptr)[3] << 24) | load_u24le(ptr); +#endif +} + +/* + * Map from ARM chipset series ID to ARM chipset vendor ID. + * This map is used to avoid storing vendor IDs in tables. + */ +static enum cpuinfo_arm_chipset_vendor chipset_series_vendor[cpuinfo_arm_chipset_series_max] = { + [cpuinfo_arm_chipset_series_unknown] = cpuinfo_arm_chipset_vendor_unknown, + [cpuinfo_arm_chipset_series_qualcomm_qsd] = cpuinfo_arm_chipset_vendor_qualcomm, + [cpuinfo_arm_chipset_series_qualcomm_msm] = cpuinfo_arm_chipset_vendor_qualcomm, + [cpuinfo_arm_chipset_series_qualcomm_apq] = cpuinfo_arm_chipset_vendor_qualcomm, + [cpuinfo_arm_chipset_series_qualcomm_snapdragon] = cpuinfo_arm_chipset_vendor_qualcomm, + [cpuinfo_arm_chipset_series_mediatek_mt] = cpuinfo_arm_chipset_vendor_mediatek, + [cpuinfo_arm_chipset_series_samsung_exynos] = cpuinfo_arm_chipset_vendor_samsung, + [cpuinfo_arm_chipset_series_hisilicon_k3v] = cpuinfo_arm_chipset_vendor_hisilicon, + [cpuinfo_arm_chipset_series_hisilicon_hi] = cpuinfo_arm_chipset_vendor_hisilicon, + [cpuinfo_arm_chipset_series_hisilicon_kirin] = cpuinfo_arm_chipset_vendor_hisilicon, + [cpuinfo_arm_chipset_series_actions_atm] = cpuinfo_arm_chipset_vendor_actions, + [cpuinfo_arm_chipset_series_allwinner_a] = cpuinfo_arm_chipset_vendor_allwinner, + [cpuinfo_arm_chipset_series_amlogic_aml] = cpuinfo_arm_chipset_vendor_amlogic, + [cpuinfo_arm_chipset_series_amlogic_s] = cpuinfo_arm_chipset_vendor_amlogic, + [cpuinfo_arm_chipset_series_broadcom_bcm] = cpuinfo_arm_chipset_vendor_broadcom, + [cpuinfo_arm_chipset_series_lg_nuclun] = cpuinfo_arm_chipset_vendor_lg, + [cpuinfo_arm_chipset_series_leadcore_lc] = cpuinfo_arm_chipset_vendor_leadcore, + [cpuinfo_arm_chipset_series_marvell_pxa] = cpuinfo_arm_chipset_vendor_marvell, + [cpuinfo_arm_chipset_series_mstar_6a] = cpuinfo_arm_chipset_vendor_mstar, + [cpuinfo_arm_chipset_series_novathor_u] = cpuinfo_arm_chipset_vendor_novathor, + [cpuinfo_arm_chipset_series_nvidia_tegra_t] = cpuinfo_arm_chipset_vendor_nvidia, + [cpuinfo_arm_chipset_series_nvidia_tegra_ap] = cpuinfo_arm_chipset_vendor_nvidia, + [cpuinfo_arm_chipset_series_nvidia_tegra_sl] = cpuinfo_arm_chipset_vendor_nvidia, + [cpuinfo_arm_chipset_series_pinecone_surge_s] = cpuinfo_arm_chipset_vendor_pinecone, + [cpuinfo_arm_chipset_series_renesas_mp] = cpuinfo_arm_chipset_vendor_renesas, + [cpuinfo_arm_chipset_series_rockchip_rk] = cpuinfo_arm_chipset_vendor_rockchip, + [cpuinfo_arm_chipset_series_spreadtrum_sc] = cpuinfo_arm_chipset_vendor_spreadtrum, + [cpuinfo_arm_chipset_series_telechips_tcc] = cpuinfo_arm_chipset_vendor_telechips, + [cpuinfo_arm_chipset_series_texas_instruments_omap] = cpuinfo_arm_chipset_vendor_texas_instruments, + [cpuinfo_arm_chipset_series_wondermedia_wm] = cpuinfo_arm_chipset_vendor_wondermedia, +}; + +/** + * Tries to match /(MSM|APQ)\d{4}([A-Z\-]*)/ signature (case-insensitive) for Qualcomm MSM and APQ chipsets. + * If match successful, extracts model information into \p chipset argument. + * + * @param start - start of the platform identifier (/proc/cpuinfo Hardware string, ro.product.board, ro.board.platform + * or ro.chipname) to match. + * @param end - end of the platform identifier (/proc/cpuinfo Hardware string, ro.product.board, ro.board.platform or + * ro.chipname) to match. + * @param[out] chipset - location where chipset information will be stored upon a successful match. + * + * @returns true if signature matched, false otherwise. + */ +static bool match_msm_apq( + const char* start, const char* end, + struct cpuinfo_arm_chipset chipset[restrict static 1]) +{ + /* Expect at least 7 symbols: 3 symbols "MSM" or "APQ" + 4 digits */ + if (start + 7 > end) { + return false; + } + + /* Check that string starts with "MSM" or "APQ", case-insensitive. + * The first three characters are loaded as 24-bit little endian word, binary ORed with 0x20 to convert to lower + * case, and compared to "MSM" and "APQ" strings as integers. + */ + const uint32_t series_signature = UINT32_C(0x00202020) | load_u24le(start); + enum cpuinfo_arm_chipset_series series; + switch (series_signature) { + case UINT32_C(0x6D736D): /* "msm" = reverse("msm") */ + series = cpuinfo_arm_chipset_series_qualcomm_msm; + break; + case UINT32_C(0x717061): /* "qpa" = reverse("apq") */ + series = cpuinfo_arm_chipset_series_qualcomm_apq; + break; + default: + return false; + } + + /* Sometimes there is a space ' ' following the MSM/APQ series */ + const char* pos = start + 3; + if (*pos == ' ') { + pos++; + + /* Expect at least 4 more symbols (4-digit model number) */ + if (pos + 4 > end) { + return false; + } + } + + /* Validate and parse 4-digit model number */ + uint32_t model = 0; + for (uint32_t i = 0; i < 4; i++) { + const uint32_t digit = (uint32_t) (uint8_t) (*pos++) - '0'; + if (digit >= 10) { + /* Not really a digit */ + return false; + } + model = model * 10 + digit; + } + + /* Suffix is optional, so if we got to this point, parsing is successful. Commit parsed chipset. */ + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_qualcomm, + .series = series, + .model = model, + }; + + /* Parse as many suffix characters as match the pattern [A-Za-z\-] */ + for (uint32_t i = 0; i < CPUINFO_ARM_CHIPSET_SUFFIX_MAX; i++) { + if (pos + i == end) { + break; + } + + const char c = pos[i]; + if (is_ascii_alphabetic(c)) { + /* Matched a letter [A-Za-z] */ + chipset->suffix[i] = c & '\xDF'; + } else if (c == '-') { + /* Matched a dash '-' */ + chipset->suffix[i] = c; + } else { + /* Neither of [A-Za-z\-] */ + break; + } + } + return true; +} + +/** + * Tries to match /SDM\d{3}$/ signature for Qualcomm Snapdragon chipsets. + * If match successful, extracts model information into \p chipset argument. + * + * @param start - start of the /proc/cpuinfo Hardware string to match. + * @param end - end of the /proc/cpuinfo Hardware string to match. + * @param[out] chipset - location where chipset information will be stored upon a successful match. + * + * @returns true if signature matched, false otherwise. + */ +static bool match_sdm( + const char* start, const char* end, + struct cpuinfo_arm_chipset chipset[restrict static 1]) +{ + /* Expect exactly 6 symbols: 3 symbols "SDM" + 3 digits */ + if (start + 6 != end) { + return false; + } + + /* Check that string starts with "SDM". + * The first three characters are loaded and compared as 24-bit little endian word. + */ + const uint32_t expected_sdm = load_u24le(start); + if (expected_sdm != UINT32_C(0x004D4453) /* "MDS" = reverse("SDM") */) { + return false; + } + + /* Validate and parse 3-digit model number */ + uint32_t model = 0; + for (uint32_t i = 3; i < 6; i++) { + const uint32_t digit = (uint32_t) (uint8_t) start[i] - '0'; + if (digit >= 10) { + /* Not really a digit */ + return false; + } + model = model * 10 + digit; + } + + /* Return parsed chipset. */ + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_qualcomm, + .series = cpuinfo_arm_chipset_series_qualcomm_snapdragon, + .model = model, + }; + return true; +} + +/** + * Tries to match /SM\d{4}$/ signature for Qualcomm Snapdragon chipsets. + * If match successful, extracts model information into \p chipset argument. + * + * @param start - start of the /proc/cpuinfo Hardware string to match. + * @param end - end of the /proc/cpuinfo Hardware string to match. + * @param[out] chipset - location where chipset information will be stored upon a successful match. + * + * @returns true if signature matched, false otherwise. + */ +static bool match_sm( + const char* start, const char* end, + struct cpuinfo_arm_chipset chipset[restrict static 1]) +{ + /* Expect exactly 6 symbols: 2 symbols "SM" + 4 digits */ + if (start + 6 != end) { + return false; + } + + /* Check that string starts with "SM". + * The first three characters are loaded and compared as 16-bit little endian word. + */ + const uint32_t expected_sm = load_u16le(start); + if (expected_sm != UINT16_C(0x4D53) /* "MS" = reverse("SM") */) { + return false; + } + + /* Validate and parse 4-digit model number */ + uint32_t model = 0; + for (uint32_t i = 2; i < 6; i++) { + const uint32_t digit = (uint32_t) (uint8_t) start[i] - '0'; + if (digit >= 10) { + /* Not really a digit */ + return false; + } + model = model * 10 + digit; + } + + /* Return parsed chipset. */ + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_qualcomm, + .series = cpuinfo_arm_chipset_series_qualcomm_snapdragon, + .model = model, + }; + return true; +} + + +struct special_map_entry { + const char* platform; + uint16_t model; + uint8_t series; + char suffix; +}; + +static const struct special_map_entry qualcomm_hardware_map_entries[] = { + { + /* "Kona" -> Qualcomm Kona */ + .platform = "Kona", + .series = cpuinfo_arm_chipset_series_qualcomm_snapdragon, + .model = 865, + }, + { + /* "Bengal" -> Qualcomm Bengal */ + .platform = "Bengal", + .series = cpuinfo_arm_chipset_series_qualcomm_snapdragon, + .model = 662, + }, + { + /* "Bengalp" -> Qualcomm Bengalp */ + .platform = "Bengalp", + .series = cpuinfo_arm_chipset_series_qualcomm_snapdragon, + .model = 662, + }, + { + /* "Lito" -> Qualcomm Lito */ + .platform = "Lito", + .series = cpuinfo_arm_chipset_series_qualcomm_snapdragon, + .model = 765, + .suffix = 'G' + }, + { + /* "Lagoon" -> Qualcomm Lagoon */ + .platform = "Lagoon", + .series = cpuinfo_arm_chipset_series_qualcomm_snapdragon, + .model = 0, + }, +}; + + +int strcicmp(char const *a, char const *b) +{ + for (;; a++, b++) { + int d = tolower((unsigned char)*a) - tolower((unsigned char)*b); + if (d != 0 || !*a) + return d; + } +} + +static bool match_qualcomm_special( + const char* start, const char* end, + struct cpuinfo_arm_chipset chipset[restrict static 1]) +{ + for (size_t i = 0; i < CPUINFO_COUNT_OF(qualcomm_hardware_map_entries); i++) { + int length = end - start; + if (strcicmp(qualcomm_hardware_map_entries[i].platform, start) == 0 && + qualcomm_hardware_map_entries[i].platform[length] == 0) + { + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = chipset_series_vendor[qualcomm_hardware_map_entries[i].series], + .series = (enum cpuinfo_arm_chipset_series) qualcomm_hardware_map_entries[i].series, + .model = qualcomm_hardware_map_entries[i].model, + .suffix = { + [0] = qualcomm_hardware_map_entries[i].suffix, + }, + }; + return true; + } + } + return false; + +} + +/** + * Tries to match /Samsung Exynos\d{4}$/ signature (case-insensitive) for Samsung Exynos chipsets. + * If match successful, extracts model information into \p chipset argument. + * + * @param start - start of the /proc/cpuinfo Hardware string to match. + * @param end - end of the /proc/cpuinfo Hardware string to match. + * @param[out] chipset - location where chipset information will be stored upon a successful match. + * + * @returns true if signature matched, false otherwise. + */ +static bool match_samsung_exynos( + const char* start, const char* end, + struct cpuinfo_arm_chipset chipset[restrict static 1]) +{ + /* + * Expect at 18-19 symbols: + * - "Samsung" (7 symbols) + space + "Exynos" (6 symbols) + optional space 4-digit model number + */ + const size_t length = end - start; + switch (length) { + case 18: + case 19: + break; + default: + return false; + } + + /* + * Check that the string starts with "samsung exynos", case-insensitive. + * Blocks of 4 characters are loaded and compared as little-endian 32-bit word. + * Case-insensitive characters are binary ORed with 0x20 to convert them to lowercase. + */ + const uint32_t expected_sams = UINT32_C(0x20202000) | load_u32le(start); + if (expected_sams != UINT32_C(0x736D6153) /* "smaS" = reverse("Sams") */) { + return false; + } + const uint32_t expected_ung = UINT32_C(0x00202020) | load_u32le(start + 4); + if (expected_ung != UINT32_C(0x20676E75) /* " ung" = reverse("ung ") */) { + return false; + } + const uint32_t expected_exyn = UINT32_C(0x20202000) | load_u32le(start + 8); + if (expected_exyn != UINT32_C(0x6E797845) /* "nyxE" = reverse("Exyn") */) { + return false; + } + const uint16_t expected_os = UINT16_C(0x2020) | load_u16le(start + 12); + if (expected_os != UINT16_C(0x736F) /* "so" = reverse("os") */) { + return false; + } + + const char* pos = start + 14; + + /* There can be a space ' ' following the "Exynos" string */ + if (*pos == ' ') { + pos++; + + /* If optional space if present, we expect exactly 19 characters */ + if (length != 19) { + return false; + } + } + + /* Validate and parse 4-digit model number */ + uint32_t model = 0; + for (uint32_t i = 0; i < 4; i++) { + const uint32_t digit = (uint32_t) (uint8_t) (*pos++) - '0'; + if (digit >= 10) { + /* Not really a digit */ + return false; + } + model = model * 10 + digit; + } + + /* Return parsed chipset */ + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_samsung, + .series = cpuinfo_arm_chipset_series_samsung_exynos, + .model = model, + }; + return true; +} + +/** + * Tries to match /exynos\d{4}$/ signature for Samsung Exynos chipsets. + * If match successful, extracts model information into \p chipset argument. + * + * @param start - start of the platform identifier (ro.board.platform or ro.chipname) to match. + * @param end - end of the platform identifier (ro.board.platform or ro.chipname) to match. + * @param[out] chipset - location where chipset information will be stored upon a successful match. + * + * @returns true if signature matched, false otherwise. + */ +static bool match_exynos( + const char* start, const char* end, + struct cpuinfo_arm_chipset chipset[restrict static 1]) +{ + /* Expect exactly 10 symbols: "exynos" (6 symbols) + 4-digit model number */ + if (start + 10 != end) { + return false; + } + + /* Load first 4 bytes as little endian 32-bit word */ + const uint32_t expected_exyn = load_u32le(start); + if (expected_exyn != UINT32_C(0x6E797865) /* "nyxe" = reverse("exyn") */ ) { + return false; + } + + /* Load next 2 bytes as little endian 16-bit word */ + const uint16_t expected_os = load_u16le(start + 4); + if (expected_os != UINT16_C(0x736F) /* "so" = reverse("os") */ ) { + return false; + } + + /* Check and parse 4-digit model number */ + uint32_t model = 0; + for (uint32_t i = 6; i < 10; i++) { + const uint32_t digit = (uint32_t) (uint8_t) start[i] - '0'; + if (digit >= 10) { + /* Not really a digit */ + return false; + } + model = model * 10 + digit; + } + + /* Return parsed chipset. */ + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_samsung, + .series = cpuinfo_arm_chipset_series_samsung_exynos, + .model = model, + }; + return true; +} + +/** + * Tries to match /universal\d{4}$/ signature for Samsung Exynos chipsets. + * If match successful, extracts model information into \p chipset argument. + * + * @param start - start of the platform identifier (/proc/cpuinfo Hardware string, ro.product.board or ro.chipname) + * to match. + * @param end - end of the platform identifier (/proc/cpuinfo Hardware string, ro.product.board or ro.chipname) + * to match. + * @param[out] chipset - location where chipset information will be stored upon a successful match. + * + * @returns true if signature matched, false otherwise. + */ +static bool match_universal( + const char* start, const char* end, + struct cpuinfo_arm_chipset chipset[restrict static 1]) +{ + /* Expect exactly 13 symbols: "universal" (9 symbols) + 4-digit model number */ + if (start + 13 != end) { + return false; + } + + /* + * Check that the string starts with "universal". + * Blocks of 4 characters are loaded and compared as little-endian 32-bit word. + * Case-insensitive characters are binary ORed with 0x20 to convert them to lowercase. + */ + const uint8_t expected_u = UINT8_C(0x20) | (uint8_t) start[0]; + if (expected_u != UINT8_C(0x75) /* "u" */) { + return false; + } + const uint32_t expected_nive = UINT32_C(0x20202020) | load_u32le(start + 1); + if (expected_nive != UINT32_C(0x6576696E) /* "evin" = reverse("nive") */ ) { + return false; + } + const uint32_t expected_ersa = UINT32_C(0x20202020) | load_u32le(start + 5); + if (expected_ersa != UINT32_C(0x6C617372) /* "lasr" = reverse("rsal") */) { + return false; + } + + /* Validate and parse 4-digit model number */ + uint32_t model = 0; + for (uint32_t i = 9; i < 13; i++) { + const uint32_t digit = (uint32_t) (uint8_t) start[i] - '0'; + if (digit >= 10) { + /* Not really a digit */ + return false; + } + model = model * 10 + digit; + } + + /* Return parsed chipset. */ + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_samsung, + .series = cpuinfo_arm_chipset_series_samsung_exynos, + .model = model, + }; + return true; +} + +/** + * Compares, case insensitively, a string to known values "SMDK4210" and "SMDK4x12" for Samsung Exynos chipsets. + * If platform identifier matches one of the SMDK* values, extracts model information into \p chipset argument. + * For "SMDK4x12" match, decodes the chipset name using number of cores. + * + * @param start - start of the platform identifier (/proc/cpuinfo Hardware string or ro.product.board) to match. + * @param end - end of the platform identifier (/proc/cpuinfo Hardware string or ro.product.board) to match. + * @param cores - number of cores in the chipset. + * @param[out] chipset - location where chipset information will be stored upon a successful match. + * + * @returns true if signature matched, false otherwise. + */ +static bool match_and_parse_smdk( + const char* start, const char* end, uint32_t cores, + struct cpuinfo_arm_chipset chipset[restrict static 1]) +{ + /* Expect exactly 8 symbols: "SMDK" (4 symbols) + 4-digit model number */ + if (start + 8 != end) { + return false; + } + + /* + * Check that string starts with "MT" (case-insensitive). + * The first four characters are loaded as a 32-bit little endian word and converted to lowercase. + */ + const uint32_t expected_smdk = UINT32_C(0x20202020) | load_u32le(start); + if (expected_smdk != UINT32_C(0x6B646D73) /* "kdms" = reverse("smdk") */) { + return false; + } + + /* + * Check that string ends with "4210" or "4x12". + * The last four characters are loaded and compared as a 32-bit little endian word. + */ + uint32_t model = 0; + const uint32_t expected_model = load_u32le(start + 4); + switch (expected_model) { + case UINT32_C(0x30313234): /* "0124" = reverse("4210") */ + model = 4210; + break; + case UINT32_C(0x32317834): /* "21x4" = reverse("4x12") */ + switch (cores) { + case 2: + model = 4212; + break; + case 4: + model = 4412; + break; + default: + cpuinfo_log_warning("system reported invalid %"PRIu32"-core Exynos 4x12 chipset", cores); + } + } + + if (model == 0) { + return false; + } + + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_samsung, + .series = cpuinfo_arm_chipset_series_samsung_exynos, + .model = model, + }; + return true; +} + +/** + * Tries to match /MTK?\d{4}[A-Z/]*$/ signature for MediaTek MT chipsets. + * If match successful, extracts model information into \p chipset argument. + * + * @param start - start of the platform identifier (/proc/cpuinfo Hardware string, ro.product.board, ro.board.platform, + * ro.mediatek.platform, or ro.chipname) to match. + * @param end - end of the platform identifier (/proc/cpuinfo Hardware string, ro.product.board, ro.board.platform, + * ro.mediatek.platform, or ro.chipname) to match. + * @param match_end - indicates if the function should attempt to match through the end of the string and fail if there + * are unparsed characters in the end, or match only MTK signature, model number, and some of the + * suffix characters (the ones that pass validation). + * @param[out] chipset - location where chipset information will be stored upon a successful match. + * + * @returns true if signature matched, false otherwise. + */ +static bool match_mt( + const char* start, const char* end, bool match_end, + struct cpuinfo_arm_chipset chipset[restrict static 1]) +{ + /* Expect at least 6 symbols: "MT" (2 symbols) + 4-digit model number */ + if (start + 6 > end) { + return false; + } + + /* + * Check that string starts with "MT" (case-insensitive). + * The first two characters are loaded as 16-bit little endian word and converted to lowercase. + */ + const uint16_t mt = UINT16_C(0x2020) | load_u16le(start); + if (mt != UINT16_C(0x746D) /* "tm" */) { + return false; + } + + + /* Some images report "MTK" rather than "MT" */ + const char* pos = start + 2; + if (((uint8_t) *pos | UINT8_C(0x20)) == (uint8_t) 'k') { + pos++; + + /* Expect 4 more symbols after "MTK" (4-digit model number) */ + if (pos + 4 > end) { + return false; + } + } + + /* Validate and parse 4-digit model number */ + uint32_t model = 0; + for (uint32_t i = 0; i < 4; i++) { + const uint32_t digit = (uint32_t) (uint8_t) (*pos++) - '0'; + if (digit >= 10) { + /* Not really a digit */ + return false; + } + model = model * 10 + digit; + } + + /* Record parsed chipset. This implicitly zeroes-out suffix, which will be parsed later. */ + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_mediatek, + .series = cpuinfo_arm_chipset_series_mediatek_mt, + .model = model, + }; + + if (match_end) { + /* Check that the potential suffix does not exceed maximum length */ + const size_t suffix_length = end - pos; + if (suffix_length > CPUINFO_ARM_CHIPSET_SUFFIX_MAX) { + return false; + } + + /* Validate suffix characters and copy them to chipset structure */ + for (size_t i = 0; i < suffix_length; i++) { + const char c = (*pos++); + if (is_ascii_alphabetic(c)) { + /* Matched a letter [A-Za-z], convert to uppercase */ + chipset->suffix[i] = c & '\xDF'; + } else if (c == '/') { + /* Matched a slash '/' */ + chipset->suffix[i] = c; + } else { + /* Invalid suffix character (neither of [A-Za-z/]) */ + return false; + } + } + } else { + /* Validate and parse as many suffix characters as we can */ + for (size_t i = 0; i < CPUINFO_ARM_CHIPSET_SUFFIX_MAX; i++) { + if (pos + i == end) { + break; + } + + const char c = pos[i]; + if (is_ascii_alphabetic(c)) { + /* Matched a letter [A-Za-z], convert to uppercase */ + chipset->suffix[i] = c & '\xDF'; + } else if (c == '/') { + /* Matched a slash '/' */ + chipset->suffix[i] = c; + } else { + /* Invalid suffix character (neither of [A-Za-z/]). This marks the end of the suffix. */ + break; + } + } + } + /* All suffix characters successfully validated and copied to chipset data */ + return true; +} + +/** + * Tries to match /[Kk]irin\s?\d{3}$/ signature for HiSilicon Kirin chipsets. + * If match successful, extracts model information into \p chipset argument. + * + * @param start - start of the /proc/cpuinfo Hardware string to match. + * @param end - end of the /proc/cpuinfo Hardware string to match. + * @param[out] chipset - location where chipset information will be stored upon a successful match. + * + * @returns true if signature matched, false otherwise. + */ +static bool match_kirin( + const char* start, const char* end, + struct cpuinfo_arm_chipset chipset[restrict static 1]) +{ + /* Expect 8-9 symbols: "Kirin" (5 symbols) + optional whitespace (1 symbol) + 3-digit model number */ + const size_t length = end - start; + switch (length) { + case 8: + case 9: + break; + default: + return false; + } + + /* Check that the string starts with "Kirin" or "kirin". */ + if (((uint8_t) start[0] | UINT8_C(0x20)) != (uint8_t) 'k') { + return false; + } + /* Symbols 1-5 are loaded and compared as little-endian 32-bit word. */ + const uint32_t irin = load_u32le(start + 1); + if (irin != UINT32_C(0x6E697269) /* "niri" = reverse("irin") */) { + return false; + } + + /* Check for optional whitespace after "Kirin" */ + if (is_ascii_whitespace(start[5])) { + /* When whitespace is present after "Kirin", expect 9 symbols total */ + if (length != 9) { + return false; + } + } + + /* Validate and parse 3-digit model number */ + uint32_t model = 0; + for (int32_t i = 0; i < 3; i++) { + const uint32_t digit = (uint32_t) (uint8_t) end[i - 3] - '0'; + if (digit >= 10) { + /* Not really a digit */ + return false; + } + model = model * 10 + digit; + } + + /* + * Thats it, return parsed chipset. + * Technically, Kirin 910T has a suffix, but it never appears in the form of "910T" string. + * Instead, Kirin 910T devices report "hi6620oem" string (handled outside of this function). + */ + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_hisilicon, + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = model, + }; + return true; +} + +/** + * Tries to match /rk\d{4}[a-z]?$/ signature for Rockchip RK chipsets. + * If match successful, extracts model information into \p chipset argument. + * + * @param start - start of the platform identifier (/proc/cpuinfo Hardware string or ro.board.platform) to match. + * @param end - end of the platform identifier (/proc/cpuinfo Hardware string or ro.board.platform) to match. + * @param[out] chipset - location where chipset information will be stored upon a successful match. + * + * @returns true if signature matched, false otherwise. + */ +static bool match_rk( + const char* start, const char* end, + struct cpuinfo_arm_chipset chipset[restrict static 1]) +{ + /* Expect 6-7 symbols: "RK" (2 symbols) + 4-digit model number + optional 1-letter suffix */ + const size_t length = end - start; + switch (length) { + case 6: + case 7: + break; + default: + return false; + } + + /* + * Check that string starts with "RK" (case-insensitive). + * The first two characters are loaded as 16-bit little endian word and converted to lowercase. + */ + const uint16_t expected_rk = UINT16_C(0x2020) | load_u16le(start); + if (expected_rk != UINT16_C(0x6B72) /* "kr" = reverse("rk") */) { + return false; + } + + /* Validate and parse 4-digit model number */ + uint32_t model = 0; + for (uint32_t i = 2; i < 6; i++) { + const uint32_t digit = (uint32_t) (uint8_t) start[i] - '0'; + if (digit >= 10) { + /* Not really a digit */ + return false; + } + model = model * 10 + digit; + } + + /* Parse optional suffix */ + char suffix = 0; + if (length == 7) { + /* Parse the suffix letter */ + const char c = start[6]; + if (is_ascii_alphabetic(c)) { + /* Convert to upper case */ + suffix = c & '\xDF'; + } else { + /* Invalid suffix character */ + return false; + } + } + + /* Return parsed chipset */ + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_rockchip, + .series = cpuinfo_arm_chipset_series_rockchip_rk, + .model = model, + .suffix = { + [0] = suffix, + }, + }; + return true; +} + +/** + * Tries to match, case-insentitively, /s[cp]\d{4}[a-z]*|scx15$/ signature for Spreadtrum SC chipsets. + * If match successful, extracts model information into \p chipset argument. + * + * @param start - start of the platform identifier (/proc/cpuinfo Hardware string, ro.product.board, + * ro.board.platform, or ro.chipname) to match. + * @param end - end of the platform identifier (/proc/cpuinfo Hardware string, ro.product.board, + * ro.board.platform, or ro.chipname) to match. + * @param[out] chipset - location where chipset information will be stored upon a successful match. + * + * @returns true if signature matched, false otherwise. + */ +static bool match_sc( + const char* start, const char* end, + struct cpuinfo_arm_chipset chipset[restrict static 1]) +{ + /* Expect at least 5 symbols: "scx15" */ + if (start + 5 > end) { + return false; + } + + /* + * Check that string starts with "S[CP]" (case-insensitive). + * The first two characters are loaded as 16-bit little endian word and converted to lowercase. + */ + const uint16_t expected_sc_or_sp = UINT16_C(0x2020) | load_u16le(start); + switch (expected_sc_or_sp) { + case UINT16_C(0x6373): /* "cs" = reverse("sc") */ + case UINT16_C(0x7073): /* "ps" = reverse("sp") */ + break; + default: + return false; + } + + /* Special case: "scx" prefix (SC7715 reported as "scx15") */ + if ((start[2] | '\x20') == 'x') { + /* Expect exactly 5 characters: "scx15" */ + if (start + 5 != end) { + return false; + } + + /* Check that string ends with "15" */ + const uint16_t expected_15 = load_u16le(start + 3); + if (expected_15 != UINT16_C(0x3531) /* "51" = reverse("15") */ ) { + return false; + } + + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_spreadtrum, + .series = cpuinfo_arm_chipset_series_spreadtrum_sc, + .model = 7715, + }; + return true; + } + + /* Expect at least 6 symbols: "S[CP]" (2 symbols) + 4-digit model number */ + if (start + 6 > end) { + return false; + } + + /* Validate and parse 4-digit model number */ + uint32_t model = 0; + for (uint32_t i = 2; i < 6; i++) { + const uint32_t digit = (uint32_t) (uint8_t) start[i] - '0'; + if (digit >= 10) { + /* Not really a digit */ + return false; + } + model = model * 10 + digit; + } + + /* Write parsed chipset */ + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_spreadtrum, + .series = cpuinfo_arm_chipset_series_spreadtrum_sc, + .model = model, + }; + + /* Validate and copy suffix letters. If suffix is too long, truncate at CPUINFO_ARM_CHIPSET_SUFFIX_MAX letters. */ + const char* suffix = start + 6; + for (size_t i = 0; i < CPUINFO_ARM_CHIPSET_SUFFIX_MAX; i++) { + if (suffix + i == end) { + break; + } + + const char c = suffix[i]; + if (!is_ascii_alphabetic(c)) { + /* Invalid suffix character */ + return false; + } + /* Convert suffix letter to uppercase */ + chipset->suffix[i] = c & '\xDF'; + } + return true; +} + +/** + * Tries to match /lc\d{4}[a-z]?$/ signature for Leadcore LC chipsets. + * If match successful, extracts model information into \p chipset argument. + * + * @param start - start of the platform identifier (ro.product.board or ro.board.platform) to match. + * @param end - end of the platform identifier (ro.product.board or ro.board.platform) to match. + * @param[out] chipset - location where chipset information will be stored upon a successful match. + * + * @returns true if signature matched, false otherwise. + */ +static bool match_lc( + const char* start, const char* end, + struct cpuinfo_arm_chipset chipset[restrict static 1]) +{ + /* Expect at 6-7 symbols: "lc" (2 symbols) + 4-digit model number + optional 1-letter suffix */ + const size_t length = end - start; + switch (length) { + case 6: + case 7: + break; + default: + return false; + } + + /* Check that string starts with "lc". The first two characters are loaded as 16-bit little endian word */ + const uint16_t expected_lc = load_u16le(start); + if (expected_lc != UINT16_C(0x636C) /* "cl" = reverse("lc") */) { + return false; + } + + /* Validate and parse 4-digit model number */ + uint32_t model = 0; + for (uint32_t i = 2; i < 6; i++) { + const uint32_t digit = (uint32_t) (uint8_t) start[i] - '0'; + if (digit >= 10) { + /* Not really a digit */ + return false; + } + model = model * 10 + digit; + } + + /* Parse optional suffix letter */ + char suffix = 0; + if (length == 7) { + const char c = start[6]; + if (is_ascii_alphabetic(c)) { + /* Convert to uppercase */ + chipset->suffix[0] = c & '\xDF'; + } else { + /* Invalid suffix character */ + return false; + } + } + + /* Return parsed chipset */ + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_leadcore, + .series = cpuinfo_arm_chipset_series_leadcore_lc, + .model = model, + .suffix = { + [0] = suffix, + }, + }; + return true; +} + +/** + * Tries to match /PXA(\d{3,4}|1L88)$/ signature for Marvell PXA chipsets. + * If match successful, extracts model information into \p chipset argument. + * + * @param start - start of the platform identifier (/proc/cpuinfo Hardware string, ro.product.board or ro.chipname) + * to match. + * @param end - end of the platform identifier (/proc/cpuinfo Hardaware string, ro.product.board or ro.chipname) to + * match. + * @param[out] chipset - location where chipset information will be stored upon a successful match. + * + * @returns true if signature matched, false otherwise. + */ +static bool match_pxa( + const char* start, const char* end, + struct cpuinfo_arm_chipset chipset[restrict static 1]) +{ + /* Expect 6-7 symbols: "PXA" (3 symbols) + 3-4 digit model number */ + const size_t length = end - start; + switch (length) { + case 6: + case 7: + break; + default: + return false; + } + + /* Check that the string starts with "PXA". Symbols 1-3 are loaded and compared as little-endian 16-bit word. */ + if (start[0] != 'P') { + return false; + } + const uint16_t expected_xa = load_u16le(start + 1); + if (expected_xa != UINT16_C(0x4158) /* "AX" = reverse("XA") */) { + return false; + } + + uint32_t model = 0; + + + /* Check for a very common typo: "PXA1L88" for "PXA1088" */ + if (length == 7) { + /* Load 4 model "number" symbols as a little endian 32-bit word and compare to "1L88" */ + const uint32_t expected_1L88 = load_u32le(start + 3); + if (expected_1L88 == UINT32_C(0x38384C31) /* "88L1" = reverse("1L88") */) { + model = 1088; + goto write_chipset; + } + } + + /* Check and parse 3-4 digit model number */ + for (uint32_t i = 3; i < length; i++) { + const uint32_t digit = (uint32_t) (uint8_t) start[i] - '0'; + if (digit >= 10) { + /* Not really a digit */ + return false; + } + model = model * 10 + digit; + } + + /* Return parsed chipset. */ +write_chipset: + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_marvell, + .series = cpuinfo_arm_chipset_series_marvell_pxa, + .model = model, + }; + return true; +} + +/** + * Tries to match /BCM\d{4}$/ signature for Broadcom BCM chipsets. + * If match successful, extracts model information into \p chipset argument. + * + * @param start - start of the /proc/cpuinfo Hardware string to match. + * @param end - end of the /proc/cpuinfo Hardware string to match. + * @param[out] chipset - location where chipset information will be stored upon a successful match. + * + * @returns true if signature matched, false otherwise. + */ +static bool match_bcm( + const char* start, const char* end, + struct cpuinfo_arm_chipset chipset[restrict static 1]) +{ + /* Expect exactly 7 symbols: "BCM" (3 symbols) + 4-digit model number */ + if (start + 7 != end) { + return false; + } + + /* Check that the string starts with "BCM". + * The first three characters are loaded and compared as a 24-bit little endian word. + */ + const uint32_t expected_bcm = load_u24le(start); + if (expected_bcm != UINT32_C(0x004D4342) /* "MCB" = reverse("BCM") */) { + return false; + } + + /* Validate and parse 4-digit model number */ + uint32_t model = 0; + for (uint32_t i = 3; i < 7; i++) { + const uint32_t digit = (uint32_t) (uint8_t) start[i] - '0'; + if (digit >= 10) { + /* Not really a digit */ + return false; + } + model = model * 10 + digit; + } + + /* Return parsed chipset. */ + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_broadcom, + .series = cpuinfo_arm_chipset_series_broadcom_bcm, + .model = model, + }; + return true; +} + +/** + * Tries to match /OMAP\d{4}$/ signature for Texas Instruments OMAP chipsets. + * If match successful, extracts model information into \p chipset argument. + * + * @param start - start of the /proc/cpuinfo Hardware string to match. + * @param end - end of the /proc/cpuinfo Hardware string to match. + * @param[out] chipset - location where chipset information will be stored upon a successful match. + * + * @returns true if signature matched, false otherwise. + */ +static bool match_omap( + const char* start, const char* end, + struct cpuinfo_arm_chipset chipset[restrict static 1]) +{ + /* Expect exactly 8 symbols: "OMAP" (4 symbols) + 4-digit model number */ + if (start + 8 != end) { + return false; + } + + /* Check that the string starts with "OMAP". Symbols 0-4 are loaded and compared as little-endian 32-bit word. */ + const uint32_t expected_omap = load_u32le(start); + if (expected_omap != UINT32_C(0x50414D4F) /* "PAMO" = reverse("OMAP") */) { + return false; + } + + /* Validate and parse 4-digit model number */ + uint32_t model = 0; + for (uint32_t i = 4; i < 8; i++) { + const uint32_t digit = (uint32_t) (uint8_t) start[i] - '0'; + if (digit >= 10) { + /* Not really a digit */ + return false; + } + model = model * 10 + digit; + } + + /* Return parsed chipset. */ + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_texas_instruments, + .series = cpuinfo_arm_chipset_series_texas_instruments_omap, + .model = model, + }; + return true; +} + +/** + * Compares platform identifier string to known values for Broadcom chipsets. + * If the string matches one of the known values, the function decodes Broadcom chipset from frequency and number of + * cores into \p chipset argument. + * + * @param start - start of the platform identifier (ro.product.board or ro.board.platform) to match. + * @param end - end of the platform identifier (ro.product.board or ro.board.platform) to match. + * @param cores - number of cores in the chipset. + * @param max_cpu_freq_max - maximum of /sys/devices/system/cpu/cpu/cpofreq/cpu_freq_max values. + * @param[out] chipset - location where chipset information will be stored upon a successful match and decoding. + * + * @returns true if signature matched (even if exact model can't be decoded), false otherwise. + */ +static bool match_and_parse_broadcom( + const char* start, const char* end, uint32_t cores, uint32_t max_cpu_freq_max, + struct cpuinfo_arm_chipset chipset[restrict static 1]) +{ + /* Expect 4-6 symbols: "java" (4 symbols), "rhea" (4 symbols), "capri" (5 symbols), or "hawaii" (6 symbols) */ + const size_t length = end - start; + switch (length) { + case 4: + case 5: + case 6: + break; + default: + return false; + } + + /* + * Compare the platform identifier to known values for Broadcom chipsets: + * - "rhea" + * - "java" + * - "capri" + * - "hawaii" + * Upon a successful match, decode chipset name from frequency and number of cores. + */ + uint32_t model = 0; + char suffix = 0; + const uint32_t expected_platform = load_u32le(start); + switch (expected_platform) { + case UINT32_C(0x61656872): /* "aehr" = reverse("rhea") */ + if (length == 4) { + /* + * Detected "rhea" platform: + * - 1 core @ 849999 KHz -> BCM21654 + * - 1 core @ 999999 KHz -> BCM21654G + */ + if (cores == 1) { + model = 21654; + if (max_cpu_freq_max >= 999999) { + suffix = 'G'; + } + } + } + break; + case UINT32_C(0x6176616A): /* "avaj" = reverse("java") */ + if (length == 4) { + /* + * Detected "java" platform: + * - 4 cores -> BCM23550 + */ + if (cores == 4) { + model = 23550; + } + } + break; + case UINT32_C(0x61776168): /* "awah" = reverse("hawa") */ + if (length == 6) { + /* Check that string equals "hawaii" */ + const uint16_t expected_ii = load_u16le(start + 4); + if (expected_ii == UINT16_C(0x6969) /* "ii" */ ) { + /* + * Detected "hawaii" platform: + * - 1 core -> BCM21663 + * - 2 cores @ 999999 KHz -> BCM21664 + * - 2 cores @ 1200000 KHz -> BCM21664T + */ + switch (cores) { + case 1: + model = 21663; + break; + case 2: + model = 21664; + if (max_cpu_freq_max >= 1200000) { + suffix = 'T'; + } + break; + } + } + } + break; + case UINT32_C(0x72706163): /* "rpac" = reverse("capr") */ + if (length == 5) { + /* Check that string equals "capri" */ + if (start[4] == 'i') { + /* + * Detected "capri" platform: + * - 2 cores -> BCM28155 + */ + if (cores == 2) { + model = 28155; + } + } + } + break; + } + + if (model != 0) { + /* Chipset was successfully decoded */ + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_broadcom, + .series = cpuinfo_arm_chipset_series_broadcom_bcm, + .model = model, + .suffix = { + [0] = suffix, + }, + }; + } + return model != 0; +} + +struct sunxi_map_entry { + uint8_t sunxi; + uint8_t cores; + uint8_t model; + char suffix; +}; + +static const struct sunxi_map_entry sunxi_map_entries[] = { +#if CPUINFO_ARCH_ARM + { + /* ("sun4i", 1) -> "A10" */ + .sunxi = 4, + .cores = 1, + .model = 10, + }, + { + /* ("sun5i", 1) -> "A13" */ + .sunxi = 5, + .cores = 1, + .model = 13, + }, + { + /* ("sun6i", 4) -> "A31" */ + .sunxi = 6, + .cores = 4, + .model = 31, + }, + { + /* ("sun7i", 2) -> "A20" */ + .sunxi = 7, + .cores = 2, + .model = 20, + + }, + { + /* ("sun8i", 2) -> "A23" */ + .sunxi = 8, + .cores = 2, + .model = 23, + }, + { + /* ("sun8i", 4) -> "A33" */ + .sunxi = 8, + .cores = 4, + .model = 33, + }, + { + /* ("sun8i", 8) -> "A83T" */ + .sunxi = 8, + .cores = 8, + .model = 83, + .suffix = 'T', + }, + { + /* ("sun9i", 8) -> "A80" */ + .sunxi = 9, + .cores = 8, + .model = 80, + }, +#endif /* CPUINFO_ARCH_ARM */ + { + /* ("sun50i", 4) -> "A64" */ + .sunxi = 50, + .cores = 4, + .model = 64, + }, +}; + +/** + * Tries to match /proc/cpuinfo Hardware string to Allwinner /sun\d+i/ signature. + * If the string matches signature, the function decodes Allwinner chipset from the number in the signature and the + * number of cores, and stores it in \p chipset argument. + * + * @param start - start of the /proc/cpuinfo Hardware string to match. + * @param end - end of the /proc/cpuinfo Hardware string to match. + * @param cores - number of cores in the chipset. + * @param[out] chipset - location where chipset information will be stored upon a successful match and decoding. + * + * @returns true if signature matched (even if exact model can't be decoded), false otherwise. + */ +static bool match_and_parse_sunxi( + const char* start, const char* end, uint32_t cores, + struct cpuinfo_arm_chipset chipset[restrict static 1]) +{ + /* Expect at least 5 symbols: "sun" (3 symbols) + platform id (1-2 digits) + "i" (1 symbol) */ + if (start + 5 > end) { + return false; + } + + /* Compare the first 3 characters to "sun" */ + if (start[0] != 's') { + return false; + } + const uint16_t expected_un = load_u16le(start + 1); + if (expected_un != UINT16_C(0x6E75) /* "nu" = reverse("un") */) { + return false; + } + + /* Check and parse the first (required) digit of the sunXi platform id */ + uint32_t sunxi_platform = 0; + { + const uint32_t digit = (uint32_t) (uint8_t) start[3] - '0'; + if (digit >= 10) { + /* Not really a digit */ + return false; + } + sunxi_platform = digit; + } + + /* Parse optional second digit of the sunXi platform id */ + const char* pos = start + 4; + { + const uint32_t digit = (uint32_t) (uint8_t) (*pos) - '0'; + if (digit < 10) { + sunxi_platform = sunxi_platform * 10 + digit; + if (++pos == end) { + /* Expected one more character, final 'i' letter */ + return false; + } + } + } + + /* Validate the final 'i' letter */ + if (*pos != 'i') { + return false; + } + + /* Compare sunXi platform id and number of cores to tabulated values to decode chipset name */ + uint32_t model = 0; + char suffix = 0; + for (size_t i = 0; i < CPUINFO_COUNT_OF(sunxi_map_entries); i++) { + if (sunxi_platform == sunxi_map_entries[i].sunxi && cores == sunxi_map_entries[i].cores) { + model = sunxi_map_entries[i].model; + suffix = sunxi_map_entries[i].suffix; + break; + } + } + + if (model == 0) { + cpuinfo_log_info("unrecognized %"PRIu32"-core Allwinner sun%"PRIu32" platform", cores, sunxi_platform); + } + /* Create chipset name from decoded data */ + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_allwinner, + .series = cpuinfo_arm_chipset_series_allwinner_a, + .model = model, + .suffix = { + [0] = suffix, + }, + }; + return true; +} + +/** + * Compares /proc/cpuinfo Hardware string to "WMT" signature. + * If the string matches signature, the function decodes WonderMedia chipset from frequency and number of cores into + * \p chipset argument. + * + * @param start - start of the /proc/cpuinfo Hardware string to match. + * @param end - end of the /proc/cpuinfo Hardware string to match. + * @param cores - number of cores in the chipset. + * @param max_cpu_freq_max - maximum of /sys/devices/system/cpu/cpu/cpofreq/cpu_freq_max values. + * @param[out] chipset - location where chipset information will be stored upon a successful match and decoding. + * + * @returns true if signature matched (even if exact model can't be decoded), false otherwise. + */ +static bool match_and_parse_wmt( + const char* start, const char* end, uint32_t cores, uint32_t max_cpu_freq_max, + struct cpuinfo_arm_chipset chipset[restrict static 1]) +{ + /* Expected 3 symbols: "WMT" */ + if (start + 3 != end) { + return false; + } + + /* Compare string to "WMT" */ + if (start[0] != 'W') { + return false; + } + const uint16_t expected_mt = load_u16le(start + 1); + if (expected_mt != UINT16_C(0x544D) /* "TM" = reverse("MT") */) { + return false; + } + + /* Decode chipset name from frequency and number of cores */ + uint32_t model = 0; + switch (cores) { + case 1: + switch (max_cpu_freq_max) { + case 1008000: + /* 1 core @ 1008000 KHz -> WM8950 */ + model = 8950; + break; + case 1200000: + /* 1 core @ 1200000 KHz -> WM8850 */ + model = 8850; + break; + } + break; + case 2: + if (max_cpu_freq_max == 1500000) { + /* 2 cores @ 1500000 KHz -> WM8880 */ + model = 8880; + } + break; + } + + if (model == 0) { + cpuinfo_log_info("unrecognized WonderMedia platform with %"PRIu32" cores at %"PRIu32" KHz", + cores, max_cpu_freq_max); + } + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_wondermedia, + .series = cpuinfo_arm_chipset_series_wondermedia_wm, + .model = model, + }; + return true; +} + +struct huawei_map_entry { + uint32_t platform; + uint32_t model; +}; + +static const struct huawei_map_entry huawei_platform_map[] = { + { + /* "ALP" -> Kirin 970 */ + .platform = UINT32_C(0x00504C41), /* "\0PLA" = reverse("ALP\0") */ + .model = 970, + }, + { + /* "BAC" -> Kirin 659 */ + .platform = UINT32_C(0x00434142), /* "\0CAB" = reverse("BAC\0") */ + .model = 659, + }, + { + /* "BLA" -> Kirin 970 */ + .platform = UINT32_C(0x00414C42), /* "\0ALB" = reverse("BLA\0") */ + .model = 970, + }, + { + /* "BKL" -> Kirin 970 */ + .platform = UINT32_C(0x004C4B42), /* "\0LKB" = reverse("BKL\0") */ + .model = 970, + }, + { + /* "CLT" -> Kirin 970 */ + .platform = UINT32_C(0x00544C43), /* "\0TLC" = reverse("CLT\0") */ + .model = 970, + }, + { + /* "COL" -> Kirin 970 */ + .platform = UINT32_C(0x004C4F43), /* "\0LOC" = reverse("COL\0") */ + .model = 970, + }, + { + /* "COR" -> Kirin 970 */ + .platform = UINT32_C(0x00524F43), /* "\0ROC" = reverse("COR\0") */ + .model = 970, + }, + { + /* "DUK" -> Kirin 960 */ + .platform = UINT32_C(0x004B5544), /* "\0KUD" = reverse("DUK\0") */ + .model = 960, + }, + { + /* "EML" -> Kirin 970 */ + .platform = UINT32_C(0x004C4D45), /* "\0LME" = reverse("EML\0") */ + .model = 970, + }, + { + /* "EVA" -> Kirin 955 */ + .platform = UINT32_C(0x00415645), /* "\0AVE" = reverse("EVA\0") */ + .model = 955, + }, + { + /* "FRD" -> Kirin 950 */ + .platform = UINT32_C(0x00445246), /* "\0DRF" = reverse("FRD\0") */ + .model = 950, + }, + { + /* "INE" -> Kirin 710 */ + .platform = UINT32_C(0x00454E49), /* "\0ENI" = reverse("INE\0") */ + .model = 710, + }, + { + /* "KNT" -> Kirin 950 */ + .platform = UINT32_C(0x00544E4B), /* "\0TNK" = reverse("KNT\0") */ + .model = 950, + }, + { + /* "LON" -> Kirin 960 */ + .platform = UINT32_C(0x004E4F4C), /* "\0NOL" = reverse("LON\0") */ + .model = 960, + }, + { + /* "LYA" -> Kirin 980 */ + .platform = UINT32_C(0x0041594C), /* "\0AYL" = reverse("LYA\0") */ + .model = 980, + }, + { + /* "MCN" -> Kirin 980 */ + .platform = UINT32_C(0x004E434D), /* "\0NCM" = reverse("MCN\0") */ + .model = 980, + }, + { + /* "MHA" -> Kirin 960 */ + .platform = UINT32_C(0x0041484D), /* "\0AHM" = reverse("MHA\0") */ + .model = 960, + }, + { + /* "NEO" -> Kirin 970 */ + .platform = UINT32_C(0x004F454E), /* "\0OEN" = reverse("NEO\0") */ + .model = 970, + }, + { + /* "NXT" -> Kirin 950 */ + .platform = UINT32_C(0x0054584E), /* "\0TXN" = reverse("NXT\0") */ + .model = 950, + }, + { + /* "PAN" -> Kirin 980 */ + .platform = UINT32_C(0x004E4150), /* "\0NAP" = reverse("PAN\0") */ + .model = 980, + }, + { + /* "PAR" -> Kirin 970 */ + .platform = UINT32_C(0x00524150), /* "\0RAP" = reverse("PAR\0") */ + .model = 970, + }, + { + /* "RVL" -> Kirin 970 */ + .platform = UINT32_C(0x004C5652), /* "\0LVR" = reverse("RVL\0") */ + .model = 970, + }, + { + /* "STF" -> Kirin 960 */ + .platform = UINT32_C(0x00465453), /* "\0FTS" = reverse("STF\0") */ + .model = 960, + }, + { + /* "SUE" -> Kirin 980 */ + .platform = UINT32_C(0x00455553), /* "\0EUS" = reverse("SUE\0") */ + .model = 980, + }, + { + /* "VIE" -> Kirin 955 */ + .platform = UINT32_C(0x00454956), /* "\0EIV" = reverse("VIE\0") */ + .model = 955, + }, + { + /* "VKY" -> Kirin 960 */ + .platform = UINT32_C(0x00594B56), /* "\0YKV" = reverse("VKY\0") */ + .model = 960, + }, + { + /* "VTR" -> Kirin 960 */ + .platform = UINT32_C(0x00525456), /* "\0RTV" = reverse("VTR\0") */ + .model = 960, + }, +}; + +/** + * Tries to match ro.product.board string to Huawei /([A-Z]{3})(\-[A-Z]?L\d{2})$/ signature where \1 is one of the + * known values for Huawei devices, which do not report chipset name elsewhere. + * If the string matches signature, the function decodes chipset (always HiSilicon Kirin for matched devices) from + * the Huawei platform ID in the signature and stores it in \p chipset argument. + * + * @param start - start of the ro.product.board string to match. + * @param end - end of the ro.product.board string to match. + * @param[out] chipset - location where chipset information will be stored upon a successful match and decoding. + * + * @returns true if signature matched, false otherwise. + */ +static bool match_and_parse_huawei( + const char* start, const char* end, + struct cpuinfo_arm_chipset chipset[restrict static 1]) +{ + /* + * Expect length of either 3, 7 or 8, exactly: + * - 3-letter platform identifier (see huawei_platform_map) + * - 3-letter platform identifier + '-' + 'L' + two digits + * - 3-letter platform identifier + '-' + capital letter + 'L' + two digits + */ + const size_t length = end - start; + switch (length) { + case 3: + case 7: + case 8: + break; + default: + return false; + } + + /* + * Try to find the first three-letter substring in among the tabulated entries for Huawei devices. + * The first three letters are loaded and compared as a little-endian 24-bit word. + */ + uint32_t model = 0; + const uint32_t target_platform_id = load_u24le(start); + for (uint32_t i = 0; i < CPUINFO_COUNT_OF(huawei_platform_map); i++) { + if (huawei_platform_map[i].platform == target_platform_id) { + model = huawei_platform_map[i].model; + break; + } + } + + if (model == 0) { + /* Platform does not match the tabulated Huawei entries */ + return false; + } + + if (length > 3) { + /* + * Check that: + * - The symbol after platform id is a dash + * - The symbol after it is an uppercase letter. For 7-symbol strings, the symbol is just 'L'. + */ + if (start[3] != '-' || !is_ascii_alphabetic_uppercase(start[4])) { + return false; + } + + /* Check that the last 3 entries are /L\d\d/ */ + if (end[-3] != 'L' || !is_ascii_numeric(end[-2]) || !is_ascii_numeric(end[-1])) { + return false; + } + } + + /* All checks succeeded, commit chipset name */ + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_hisilicon, + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = model, + }; + return true; +} + +/** + * Tries to match /tcc\d{3}x$/ signature for Telechips TCCXXXx chipsets. + * If match successful, extracts model information into \p chipset argument. + * + * @param start - start of the /proc/cpuinfo Hardware string to match. + * @param end - end of the /proc/cpuinfo Hardware string to match. + * @param[out] chipset - location where chipset information will be stored upon a successful match. + * + * @returns true if signature matched, false otherwise. + */ +static bool match_tcc( + const char* start, const char* end, + struct cpuinfo_arm_chipset chipset[restrict static 1]) +{ + /* Expect exactly 7 symbols: "tcc" (3 symbols) + 3-digit model number + fixed "x" suffix */ + if (start + 7 != end) { + return false; + } + + /* Quick check for the first character */ + if (start[0] != 't') { + return false; + } + + /* Load the next 2 bytes as little endian 16-bit word */ + const uint16_t expected_cc = load_u16le(start + 1); + if (expected_cc != UINT16_C(0x6363) /* "cc" */ ) { + return false; + } + + /* Check and parse 3-digit model number */ + uint32_t model = 0; + for (uint32_t i = 3; i < 6; i++) { + const uint32_t digit = (uint32_t) (uint8_t) start[i] - '0'; + if (digit >= 10) { + /* Not really a digit */ + return false; + } + model = model * 10 + digit; + } + + /* Check the fixed 'x' suffix in the end */ + if (start[6] != 'x') { + return false; + } + + /* Commit parsed chipset. */ + *chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_telechips, + .series = cpuinfo_arm_chipset_series_telechips_tcc, + .model = model, + .suffix = { + [0] = 'X' + }, + }; + return true; +} + +/* + * Compares ro.board.platform string to Nvidia Tegra signatures ("tegra" and "tegra3") + * This check has effect on how /proc/cpuinfo Hardware string is interpreted. + * + * @param start - start of the ro.board.platform string to check. + * @param end - end of the ro.board.platform string to check. + * + * @returns true if the string matches an Nvidia Tegra signature, and false otherwise + */ +static bool is_tegra(const char* start, const char* end) { + /* Expect 5 ("tegra") or 6 ("tegra3") symbols */ + const size_t length = end - start; + switch (length) { + case 5: + case 6: + break; + default: + return false; + } + + /* Check that the first 5 characters match "tegra" */ + if (start[0] != 't') { + return false; + } + const uint32_t expected_egra = load_u32le(start + 1); + if (expected_egra != UINT32_C(0x61726765) /* "arge" = reverse("egra") */) { + return false; + } + + /* Check if the string is either "tegra" (length = 5) or "tegra3" (length != 5) and last character is '3' */ + return (length == 5 || start[5] == '3'); +} + +static const struct special_map_entry special_hardware_map_entries[] = { +#if CPUINFO_ARCH_ARM + { + /* "k3v2oem1" -> HiSilicon K3V2 */ + .platform = "k3v2oem1", + .series = cpuinfo_arm_chipset_series_hisilicon_k3v, + .model = 2, + }, + { + /* "hi6620oem" -> HiSilicon Kirin 910T */ + .platform = "hi6620oem", + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = 910, + .suffix = 'T' + }, +#endif /* CPUINFO_ARCH_ARM */ + { + /* "hi6250" -> HiSilicon Kirin 650 */ + .platform = "hi6250", + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = 650, + }, + { + /* "hi6210sft" -> HiSilicon Kirin 620 */ + .platform = "hi6210sft", + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = 620, + }, + { + /* "hi3751" -> HiSilicon Hi3751 */ + .platform = "hi3751", + .series = cpuinfo_arm_chipset_series_hisilicon_hi, + .model = 3751, + }, +#if CPUINFO_ARCH_ARM + { + /* "hi3630" -> HiSilicon Kirin 920 */ + .platform = "hi3630", + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = 920, + }, +#endif /* CPUINFO_ARCH_ARM */ + { + /* "hi3635" -> HiSilicon Kirin 930 */ + .platform = "hi3635", + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = 930, + }, +#if CPUINFO_ARCH_ARM + { + /* "gs702a" -> Actions ATM7029 (Cortex-A5 + GC1000) */ + .platform = "gs702a", + .series = cpuinfo_arm_chipset_series_actions_atm, + .model = 7029, + }, + { + /* "gs702c" -> Actions ATM7029B (Cortex-A5 + SGX540) */ + .platform = "gs702c", + .series = cpuinfo_arm_chipset_series_actions_atm, + .model = 7029, + .suffix = 'B', + }, + { + /* "gs703d" -> Actions ATM7039S */ + .platform = "gs703d", + .series = cpuinfo_arm_chipset_series_actions_atm, + .model = 7039, + .suffix = 'S', + }, + { + /* "gs705a" -> Actions ATM7059A */ + .platform = "gs705a", + .series = cpuinfo_arm_chipset_series_actions_atm, + .model = 7059, + .suffix = 'A', + }, + { + /* "Amlogic Meson8" -> Amlogic S812 */ + .platform = "Amlogic Meson8", + .series = cpuinfo_arm_chipset_series_amlogic_s, + .model = 812, + }, + { + /* "Amlogic Meson8B" -> Amlogic S805 */ + .platform = "Amlogic Meson8B", + .series = cpuinfo_arm_chipset_series_amlogic_s, + .model = 805, + }, + { + /* "mapphone_CDMA" -> Texas Instruments OMAP4430 */ + .platform = "mapphone_CDMA", + .series = cpuinfo_arm_chipset_series_texas_instruments_omap, + .model = 4430, + }, + { + /* "Superior" -> Texas Instruments OMAP4470 */ + .platform = "Superior", + .series = cpuinfo_arm_chipset_series_texas_instruments_omap, + .model = 4470, + }, + { + /* "Tuna" (Samsung Galaxy Nexus) -> Texas Instruments OMAP4460 */ + .platform = "Tuna", + .series = cpuinfo_arm_chipset_series_texas_instruments_omap, + .model = 4460, + }, + { + /* "Manta" (Samsung Nexus 10) -> Samsung Exynos 5250 */ + .platform = "Manta", + .series = cpuinfo_arm_chipset_series_samsung_exynos, + .model = 5250, + }, + { + /* "Odin" -> LG Nuclun 7111 */ + .platform = "Odin", + .series = cpuinfo_arm_chipset_series_lg_nuclun, + .model = 7111, + }, + { + /* "Madison" -> MStar 6A338 */ + .platform = "Madison", + .series = cpuinfo_arm_chipset_series_mstar_6a, + .model = 338, + }, +#endif /* CPUINFO_ARCH_ARM */ +}; + +static const struct special_map_entry tegra_hardware_map_entries[] = { +#if CPUINFO_ARCH_ARM + { + /* "cardhu" (Nvidia Cardhu developer tablet) -> Tegra T30 */ + .platform = "cardhu", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 30, + }, + { + /* "kai" -> Tegra T30L */ + .platform = "kai", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 30, + .suffix = 'L', + }, + { + /* "p3" (Samsung Galaxy Tab 8.9) -> Tegra T20 */ + .platform = "p3", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 20, + }, + { + /* "n1" (Samsung Galaxy R / Samsung Captivate Glide) -> Tegra AP20H */ + .platform = "n1", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_ap, + .model = 20, + .suffix = 'H', + }, + { + /* "SHW-M380S" (Samsung Galaxy Tab 10.1) -> Tegra T20 */ + .platform = "SHW-M380S", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 20, + }, + { + /* "m470" (Hisense Sero 7 Pro) -> Tegra T30L */ + .platform = "m470", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 30, + .suffix = 'L', + }, + { + /* "endeavoru" (HTC One X) -> Tegra AP33 */ + .platform = "endeavoru", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_ap, + .model = 33, + }, + { + /* "evitareul" (HTC One X+) -> Tegra T33 */ + .platform = "evitareul", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 33, + }, + { + /* "enrc2b" (HTC One X+) -> Tegra T33 */ + .platform = "enrc2b", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 33, + }, + { + /* "mozart" (Asus Transformer Pad TF701T) -> Tegra T114 */ + .platform = "mozart", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 114, + }, + { + /* "tegratab" (Tegra Note 7) -> Tegra T114 */ + .platform = "tegratab", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 114, + }, + { + /* "tn8" (Nvidia Shield Tablet K1) -> Tegra T124 */ + .platform = "tn8", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 124, + }, + { + /* "roth" (Nvidia Shield Portable) -> Tegra T114 */ + .platform = "roth", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 114, + }, + { + /* "pisces" (Xiaomi Mi 3) -> Tegra T114 */ + .platform = "pisces", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 114, + }, + { + /* "mocha" (Xiaomi Mi Pad) -> Tegra T124 */ + .platform = "mocha", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 124, + }, + { + /* "stingray" (Motorola XOOM) -> Tegra AP20H */ + .platform = "stingray", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_ap, + .model = 20, + .suffix = 'H', + }, + { + /* "Ceres" (Wiko Highway 4G) -> Tegra SL460N */ + .platform = "Ceres", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_sl, + .model = 460, + .suffix = 'N', + }, + { + /* "MT799" (nabi 2 Tablet) -> Tegra T30 */ + .platform = "MT799", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 30, + }, + { + /* "t8400n" (nabi DreamTab HD8) -> Tegra T114 */ + .platform = "t8400n", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 114, + }, + { + /* "chagall" (Fujitsu Stylistic M532) -> Tegra T30 */ + .platform = "chagall", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 30, + }, + { + /* "ventana" (Asus Transformer TF101) -> Tegra T20 */ + .platform = "ventana", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 20, + }, + { + /* "bobsleigh" (Fujitsu Arrows Tab F-05E) -> Tegra T33 */ + .platform = "bobsleigh", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 33, + }, + { + /* "tegra_fjdev101" (Fujitsu Arrows X F-10D) -> Tegra AP33 */ + .platform = "tegra_fjdev101", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_ap, + .model = 33, + }, + { + /* "tegra_fjdev103" (Fujitsu Arrows V F-04E) -> Tegra T33 */ + .platform = "tegra_fjdev103", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 33, + }, + { + /* "nbx03" (Sony Tablet S) -> Tegra T20 */ + .platform = "nbx03", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 20, + }, + { + /* "txs03" (Sony Xperia Tablet S) -> Tegra T30L */ + .platform = "txs03", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 30, + .suffix = 'L', + }, + { + /* "x3" (LG Optimus 4X HD P880) -> Tegra AP33 */ + .platform = "x3", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_ap, + .model = 33, + }, + { + /* "vu10" (LG Optimus Vu P895) -> Tegra AP33 */ + .platform = "vu10", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_ap, + .model = 33, + }, + { + /* "BIRCH" (HP Slate 7 Plus) -> Tegra T30L */ + .platform = "BIRCH", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 30, + .suffix = 'L', + }, + { + /* "macallan" (HP Slate 8 Pro) -> Tegra T114 */ + .platform = "macallan", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 114, + }, + { + /* "maya" (HP SlateBook 10 x2) -> Tegra T114 */ + .platform = "maya", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 114, + }, + { + /* "antares" (Toshiba AT100) -> Tegra T20 */ + .platform = "antares", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 20, + }, + { + /* "tostab12AL" (Toshiba AT300SE "Excite 10 SE") -> Tegra T30L */ + .platform = "tostab12AL", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 30, + .suffix = 'L', + }, + { + /* "tostab12BL" (Toshiba AT10-A "Excite Pure") -> Tegra T30L */ + .platform = "tostab12BL", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 30, + .suffix = 'L', + }, + { + /* "sphinx" (Toshiba AT270 "Excite 7.7") -> Tegra T30 */ + .platform = "sphinx", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 30, + }, + { + /* "tostab11BS" (Toshiba AT570 "Regza 7.7") -> Tegra T30 */ + .platform = "tostab11BS", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 30, + }, + { + /* "tostab12BA" (Toshiba AT10-LE-A "Excite Pro") -> Tegra T114 */ + .platform = "tostab12BA", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 114, + }, + { + /* "vangogh" (Acer Iconia Tab A100) -> Tegra T20 */ + .platform = "vangogh", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 20, + }, + { + /* "a110" (Acer Iconia Tab A110) -> Tegra T30L */ + .platform = "a110", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 30, + .suffix = 'L', + }, + { + /* "picasso_e" (Acer Iconia Tab A200) -> Tegra AP20H */ + .platform = "picasso_e", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_ap, + .model = 20, + .suffix = 'H', + }, + { + /* "picasso_e2" (Acer Iconia Tab A210) -> Tegra T30L */ + .platform = "picasso_e2", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 30, + .suffix = 'L', + }, + { + /* "picasso" (Acer Iconia Tab A500) -> Tegra AP20H */ + .platform = "picasso", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_ap, + .model = 20, + .suffix = 'H', + }, + { + /* "picasso_m" (Acer Iconia Tab A510) -> Tegra T30 */ + .platform = "picasso_m", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 30, + }, + { + /* "picasso_mf" (Acer Iconia Tab A700) -> Tegra T30 */ + .platform = "picasso_mf", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 30, + }, + { + /* "avalon" (Toshiba AT300 "Excite 10") -> Tegra T30L */ + .platform = "avalon", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 30, + .suffix = 'L', + }, + { + /* "NS_14T004" (iRiver NS-14T004) -> Tegra T30L */ + .platform = "NS_14T004", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 30, + .suffix = 'L', + }, + { + /* "WIKIPAD" (Wikipad) -> Tegra T30 */ + .platform = "WIKIPAD", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 30, + }, + { + /* "kb" (Pegatron Q00Q) -> Tegra T114 */ + .platform = "kb", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 114, + }, +#endif /* CPUINFO_ARCH_ARM */ + { + /* "foster_e" (Nvidia Shield TV, Flash) -> Tegra T210 */ + .platform = "foster_e", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 210, + }, + { + /* "foster_e_hdd" (Nvidia Shield TV, HDD) -> Tegra T210 */ + .platform = "foster_e_hdd", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 210, + }, + { + /* "darcy" (Nvidia Shield TV 2017) -> Tegra T210 */ + .platform = "darcy", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 210, + }, +}; + +/* + * Decodes chipset name from /proc/cpuinfo Hardware string. + * For some chipsets, the function relies frequency and on number of cores for chipset detection. + * + * @param[in] platform - /proc/cpuinfo Hardware string. + * @param cores - number of cores in the chipset. + * @param max_cpu_freq_max - maximum of /sys/devices/system/cpu/cpu/cpofreq/cpu_freq_max values. + * + * @returns Decoded chipset name. If chipset could not be decoded, the resulting structure would use `unknown` vendor + * and series identifiers. + */ +struct cpuinfo_arm_chipset cpuinfo_arm_linux_decode_chipset_from_proc_cpuinfo_hardware( + const char hardware[restrict static CPUINFO_HARDWARE_VALUE_MAX], + uint32_t cores, uint32_t max_cpu_freq_max, bool is_tegra) +{ + struct cpuinfo_arm_chipset chipset; + const size_t hardware_length = strnlen(hardware, CPUINFO_HARDWARE_VALUE_MAX); + const char* hardware_end = hardware + hardware_length; + + if (is_tegra) { + /* + * Nvidia Tegra-specific path: compare /proc/cpuinfo Hardware string to + * tabulated Hardware values for popular chipsets/devices with Tegra chipsets. + * This path is only used when ro.board.platform indicates a Tegra chipset + * (albeit does not indicate which exactly Tegra chipset). + */ + for (size_t i = 0; i < CPUINFO_COUNT_OF(tegra_hardware_map_entries); i++) { + if (strncmp(tegra_hardware_map_entries[i].platform, hardware, hardware_length) == 0 && + tegra_hardware_map_entries[i].platform[hardware_length] == 0) + { + cpuinfo_log_debug( + "found /proc/cpuinfo Hardware string \"%.*s\" in Nvidia Tegra chipset table", + (int) hardware_length, hardware); + /* Create chipset name from entry */ + return (struct cpuinfo_arm_chipset) { + .vendor = chipset_series_vendor[tegra_hardware_map_entries[i].series], + .series = (enum cpuinfo_arm_chipset_series) tegra_hardware_map_entries[i].series, + .model = tegra_hardware_map_entries[i].model, + .suffix = { + [0] = tegra_hardware_map_entries[i].suffix, + }, + }; + } + } + } else { + /* Generic path: consider all other vendors */ + + bool word_start = true; + for (const char* pos = hardware; pos != hardware_end; pos++) { + const char c = *pos; + switch (c) { + case ' ': + case '\t': + case ',': + word_start = true; + break; + default: + if (word_start && is_ascii_alphabetic(c)) { + /* Check Qualcomm MSM/APQ signature */ + if (match_msm_apq(pos, hardware_end, &chipset)) { + cpuinfo_log_debug( + "matched Qualcomm MSM/APQ signature in /proc/cpuinfo Hardware string \"%.*s\"", + (int) hardware_length, hardware); + return chipset; + } + + /* Check SDMxxx (Qualcomm Snapdragon) signature */ + if (match_sdm(pos, hardware_end, &chipset)) { + cpuinfo_log_debug( + "matched Qualcomm SDM signature in /proc/cpuinfo Hardware string \"%.*s\"", + (int) hardware_length, hardware); + return chipset; + } + + /* Check SMxxxx (Qualcomm Snapdragon) signature */ + if (match_sm(pos, hardware_end, &chipset)) { + cpuinfo_log_debug( + "matched Qualcomm SM signature in /proc/cpuinfo Hardware string \"%.*s\"", + (int) hardware_length, hardware); + return chipset; + } + + /* Check MediaTek MT signature */ + if (match_mt(pos, hardware_end, true, &chipset)) { + cpuinfo_log_debug( + "matched MediaTek MT signature in /proc/cpuinfo Hardware string \"%.*s\"", + (int) hardware_length, hardware); + return chipset; + } + + /* Check HiSilicon Kirin signature */ + if (match_kirin(pos, hardware_end, &chipset)) { + cpuinfo_log_debug( + "matched HiSilicon Kirin signature in /proc/cpuinfo Hardware string \"%.*s\"", + (int) hardware_length, hardware); + return chipset; + } + + /* Check Rockchip RK signature */ + if (match_rk(pos, hardware_end, &chipset)) { + cpuinfo_log_debug( + "matched Rockchip RK signature in /proc/cpuinfo Hardware string \"%.*s\"", + (int) hardware_length, hardware); + return chipset; + } + + if (match_qualcomm_special(pos, hardware_end, &chipset)) { + cpuinfo_log_debug( + "matched Qualcomm signature in /proc/cpuinfo Hardware string \"%.*s\"", + (int) hardware_length, hardware); + return chipset; + } + + } + word_start = false; + break; + } + } + + /* Check Samsung Exynos signature */ + if (match_samsung_exynos(hardware, hardware_end, &chipset)) { + cpuinfo_log_debug( + "matched Samsung Exynos signature in /proc/cpuinfo Hardware string \"%.*s\"", + (int) hardware_length, hardware); + return chipset; + } + + /* Check universalXXXX (Samsung Exynos) signature */ + if (match_universal(hardware, hardware_end, &chipset)) { + cpuinfo_log_debug( + "matched UNIVERSAL (Samsung Exynos) signature in /proc/cpuinfo Hardware string \"%.*s\"", + (int) hardware_length, hardware); + return chipset; + } + + #if CPUINFO_ARCH_ARM + /* Match /SMDK(4410|4x12)$/ */ + if (match_and_parse_smdk(hardware, hardware_end, cores, &chipset)) { + cpuinfo_log_debug( + "matched SMDK (Samsung Exynos) signature in /proc/cpuinfo Hardware string \"%.*s\"", + (int) hardware_length, hardware); + return chipset; + } + #endif + + /* Check Spreadtrum SC signature */ + if (match_sc(hardware, hardware_end, &chipset)) { + cpuinfo_log_debug( + "matched Spreadtrum SC signature in /proc/cpuinfo Hardware string \"%.*s\"", + (int) hardware_length, hardware); + return chipset; + } + + #if CPUINFO_ARCH_ARM + /* Check Marvell PXA signature */ + if (match_pxa(hardware, hardware_end, &chipset)) { + cpuinfo_log_debug( + "matched Marvell PXA signature in /proc/cpuinfo Hardware string \"%.*s\"", + (int) hardware_length, hardware); + return chipset; + } + #endif + + /* Match /sun\d+i/ signature and map to Allwinner chipset name */ + if (match_and_parse_sunxi(hardware, hardware_end, cores, &chipset)) { + cpuinfo_log_debug( + "matched sunxi (Allwinner Ax) signature in /proc/cpuinfo Hardware string \"%.*s\"", + (int) hardware_length, hardware); + return chipset; + } + + /* Check Broadcom BCM signature */ + if (match_bcm(hardware, hardware_end, &chipset)) { + cpuinfo_log_debug( + "matched Broadcom BCM signature in /proc/cpuinfo Hardware string \"%.*s\"", + (int) hardware_length, hardware); + return chipset; + } + + #if CPUINFO_ARCH_ARM + /* Check Texas Instruments OMAP signature */ + if (match_omap(hardware, hardware_end, &chipset)) { + cpuinfo_log_debug( + "matched Texas Instruments OMAP signature in /proc/cpuinfo Hardware string \"%.*s\"", + (int) hardware_length, hardware); + return chipset; + } + + /* Check WonderMedia WMT signature and decode chipset from frequency and number of cores */ + if (match_and_parse_wmt(hardware, hardware_end, cores, max_cpu_freq_max, &chipset)) { + cpuinfo_log_debug( + "matched WonderMedia WMT signature in /proc/cpuinfo Hardware string \"%.*s\"", + (int) hardware_length, hardware); + return chipset; + } + + #endif + + /* Check Telechips TCC signature */ + if (match_tcc(hardware, hardware_end, &chipset)) { + cpuinfo_log_debug( + "matched Telechips TCC signature in /proc/cpuinfo Hardware string \"%.*s\"", + (int) hardware_length, hardware); + return chipset; + } + + /* Compare to tabulated Hardware values for popular chipsets/devices which can't be otherwise detected */ + for (size_t i = 0; i < CPUINFO_COUNT_OF(special_hardware_map_entries); i++) { + if (strncmp(special_hardware_map_entries[i].platform, hardware, hardware_length) == 0 && + special_hardware_map_entries[i].platform[hardware_length] == 0) + { + cpuinfo_log_debug( + "found /proc/cpuinfo Hardware string \"%.*s\" in special chipset table", + (int) hardware_length, hardware); + /* Create chipset name from entry */ + return (struct cpuinfo_arm_chipset) { + .vendor = chipset_series_vendor[special_hardware_map_entries[i].series], + .series = (enum cpuinfo_arm_chipset_series) special_hardware_map_entries[i].series, + .model = special_hardware_map_entries[i].model, + .suffix = { + [0] = special_hardware_map_entries[i].suffix, + }, + }; + } + } + } + + return (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_unknown, + .series = cpuinfo_arm_chipset_series_unknown, + }; +} + +#ifdef __ANDROID__ + static const struct special_map_entry special_board_map_entries[] = { + { + /* "hi6250" -> HiSilicon Kirin 650 */ + .platform = "hi6250", + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = 650, + }, + { + /* "hi6210sft" -> HiSilicon Kirin 620 */ + .platform = "hi6210sft", + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = 620, + }, +#if CPUINFO_ARCH_ARM + { + /* "hi3630" -> HiSilicon Kirin 920 */ + .platform = "hi3630", + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = 920, + }, +#endif /* CPUINFO_ARCH_ARM */ + { + /* "hi3635" -> HiSilicon Kirin 930 */ + .platform = "hi3635", + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = 930, + }, + { + /* "hi3650" -> HiSilicon Kirin 950 */ + .platform = "hi3650", + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = 950, + }, + { + /* "hi3660" -> HiSilicon Kirin 960 */ + .platform = "hi3660", + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = 960, + }, +#if CPUINFO_ARCH_ARM + { + /* "mp523x" -> Renesas MP5232 */ + .platform = "mp523x", + .series = cpuinfo_arm_chipset_series_renesas_mp, + .model = 5232, + }, +#endif /* CPUINFO_ARCH_ARM */ + { + /* "BEETHOVEN" (Huawei MadiaPad M3) -> HiSilicon Kirin 950 */ + .platform = "BEETHOVEN", + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = 950, + }, +#if CPUINFO_ARCH_ARM + { + /* "hws7701u" (Huawei MediaPad 7 Youth) -> Rockchip RK3168 */ + .platform = "hws7701u", + .series = cpuinfo_arm_chipset_series_rockchip_rk, + .model = 3168, + }, + { + /* "g2mv" (LG G2 mini LTE) -> Nvidia Tegra SL460N */ + .platform = "g2mv", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_sl, + .model = 460, + .suffix = 'N', + }, + { + /* "K00F" (Asus MeMO Pad 10) -> Rockchip RK3188 */ + .platform = "K00F", + .series = cpuinfo_arm_chipset_series_rockchip_rk, + .model = 3188, + }, + { + /* "T7H" (HP Slate 7) -> Rockchip RK3066 */ + .platform = "T7H", + .series = cpuinfo_arm_chipset_series_rockchip_rk, + .model = 3066, + }, + { + /* "tuna" (Samsung Galaxy Nexus) -> Texas Instruments OMAP4460 */ + .platform = "tuna", + .series = cpuinfo_arm_chipset_series_texas_instruments_omap, + .model = 4460, + }, + { + /* "grouper" (Asus Nexus 7 2012) -> Nvidia Tegra T30L */ + .platform = "grouper", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 30, + .suffix = 'L', + }, +#endif /* CPUINFO_ARCH_ARM */ + { + /* "flounder" (HTC Nexus 9) -> Nvidia Tegra T132 */ + .platform = "flounder", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 132, + }, + { + /* "dragon" (Google Pixel C) -> Nvidia Tegra T210 */ + .platform = "dragon", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 210, + }, + { + /* "sailfish" (Google Pixel) -> Qualcomm MSM8996PRO */ + .platform = "sailfish", + .series = cpuinfo_arm_chipset_series_qualcomm_msm, + .model = 8996, + .suffix = 'P', + }, + { + /* "marlin" (Google Pixel XL) -> Qualcomm MSM8996PRO */ + .platform = "marlin", + .series = cpuinfo_arm_chipset_series_qualcomm_msm, + .model = 8996, + .suffix = 'P', + }, + }; + + /* + * Decodes chipset name from ro.product.board Android system property. + * For some chipsets, the function relies frequency and on number of cores for chipset detection. + * + * @param[in] platform - ro.product.board value. + * @param cores - number of cores in the chipset. + * @param max_cpu_freq_max - maximum of /sys/devices/system/cpu/cpu/cpofreq/cpu_freq_max values. + * + * @returns Decoded chipset name. If chipset could not be decoded, the resulting structure would use `unknown` vendor + * and series identifiers. + */ + struct cpuinfo_arm_chipset cpuinfo_arm_android_decode_chipset_from_ro_product_board( + const char ro_product_board[restrict static CPUINFO_BUILD_PROP_VALUE_MAX], + uint32_t cores, uint32_t max_cpu_freq_max) + { + struct cpuinfo_arm_chipset chipset; + const char* board = ro_product_board; + const size_t board_length = strnlen(ro_product_board, CPUINFO_BUILD_PROP_VALUE_MAX); + const char* board_end = ro_product_board + board_length; + + /* Check Qualcomm MSM/APQ signature */ + if (match_msm_apq(board, board_end, &chipset)) { + cpuinfo_log_debug( + "matched Qualcomm MSM/APQ signature in ro.product.board string \"%.*s\"", (int) board_length, board); + return chipset; + } + + /* Check universaXXXX (Samsung Exynos) signature */ + if (match_universal(board, board_end, &chipset)) { + cpuinfo_log_debug( + "matched UNIVERSAL (Samsung Exynos) signature in ro.product.board string \"%.*s\"", + (int) board_length, board); + return chipset; + } + + #if CPUINFO_ARCH_ARM + /* Check SMDK (Samsung Exynos) signature */ + if (match_and_parse_smdk(board, board_end, cores, &chipset)) { + cpuinfo_log_debug( + "matched SMDK (Samsung Exynos) signature in ro.product.board string \"%.*s\"", + (int) board_length, board); + return chipset; + } + #endif + + /* Check MediaTek MT signature */ + if (match_mt(board, board_end, true, &chipset)) { + cpuinfo_log_debug( + "matched MediaTek MT signature in ro.product.board string \"%.*s\"", + (int) board_length, board); + return chipset; + } + + /* Check Spreadtrum SC signature */ + if (match_sc(board, board_end, &chipset)) { + cpuinfo_log_debug( + "matched Spreadtrum SC signature in ro.product.board string \"%.*s\"", + (int) board_length, board); + return chipset; + } + + #if CPUINFO_ARCH_ARM + /* Check Marvell PXA signature */ + if (match_pxa(board, board_end, &chipset)) { + cpuinfo_log_debug( + "matched Marvell PXA signature in ro.product.board string \"%.*s\"", + (int) board_length, board); + return chipset; + } + + /* Check Leadcore LCxxxx signature */ + if (match_lc(board, board_end, &chipset)) { + cpuinfo_log_debug( + "matched Leadcore LC signature in ro.product.board string \"%.*s\"", + (int) board_length, board); + return chipset; + } + + /* + * Compare to tabulated ro.product.board values for Broadcom chipsets and decode chipset from frequency and + * number of cores. + */ + if (match_and_parse_broadcom(board, board_end, cores, max_cpu_freq_max, &chipset)) { + cpuinfo_log_debug( + "found ro.product.board string \"%.*s\" in Broadcom chipset table", + (int) board_length, board); + return chipset; + } + #endif + + /* Compare to tabulated ro.product.board values for Huawei devices which don't report chipset elsewhere */ + if (match_and_parse_huawei(board, board_end, &chipset)) { + cpuinfo_log_debug( + "found ro.product.board string \"%.*s\" in Huawei chipset table", + (int) board_length, board); + return chipset; + } + + /* Compare to tabulated ro.product.board values for popular chipsets/devices which can't be otherwise detected */ + for (size_t i = 0; i < CPUINFO_COUNT_OF(special_board_map_entries); i++) { + if (strncmp(special_board_map_entries[i].platform, board, board_length) == 0 && + special_board_map_entries[i].platform[board_length] == 0) + { + cpuinfo_log_debug( + "found ro.product.board string \"%.*s\" in special chipset table", + (int) board_length, board); + /* Create chipset name from entry */ + return (struct cpuinfo_arm_chipset) { + .vendor = chipset_series_vendor[special_board_map_entries[i].series], + .series = (enum cpuinfo_arm_chipset_series) special_board_map_entries[i].series, + .model = special_board_map_entries[i].model, + .suffix = { + [0] = special_board_map_entries[i].suffix, + /* The suffix of MSM8996PRO is truncated at the first letter, reconstruct it here. */ + [1] = special_board_map_entries[i].suffix == 'P' ? 'R' : 0, + [2] = special_board_map_entries[i].suffix == 'P' ? 'O' : 0, + }, + }; + } + } + + return (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_unknown, + .series = cpuinfo_arm_chipset_series_unknown, + }; + } + + struct amlogic_map_entry { + char ro_board_platform[6]; + uint16_t model; + uint8_t series; + char suffix[3]; + }; + + static const struct amlogic_map_entry amlogic_map_entries[] = { +#if CPUINFO_ARCH_ARM + { + /* "meson3" -> Amlogic AML8726-M */ + .ro_board_platform = "meson3", + .series = cpuinfo_arm_chipset_series_amlogic_aml, + .model = 8726, + .suffix = "-M", + }, + { + /* "meson6" -> Amlogic AML8726-MX */ + .ro_board_platform = "meson6", + .series = cpuinfo_arm_chipset_series_amlogic_aml, + .model = 8726, + .suffix = "-MX", + }, + { + /* "meson8" -> Amlogic S805 */ + .ro_board_platform = "meson8", + .series = cpuinfo_arm_chipset_series_amlogic_s, + .model = 805, + }, +#endif /* CPUINFO_ARCH_ARM */ + { + /* "gxbaby" -> Amlogic S905 */ + .ro_board_platform = "gxbaby", + .series = cpuinfo_arm_chipset_series_amlogic_s, + .model = 905, + }, + { + /* "gxl" -> Amlogic S905X */ + .ro_board_platform = "gxl", + .series = cpuinfo_arm_chipset_series_amlogic_s, + .model = 905, + .suffix = "X", + }, + { + /* "gxm" -> Amlogic S912 */ + .ro_board_platform = "gxm", + .series = cpuinfo_arm_chipset_series_amlogic_s, + .model = 912, + }, + }; + + static const struct special_map_entry special_platform_map_entries[] = { +#if CPUINFO_ARCH_ARM + { + /* "hi6620oem" -> HiSilicon Kirin 910T */ + .platform = "hi6620oem", + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = 910, + .suffix = 'T', + }, +#endif /* CPUINFO_ARCH_ARM */ + { + /* "hi6250" -> HiSilicon Kirin 650 */ + .platform = "hi6250", + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = 650, + }, + { + /* "hi6210sft" -> HiSilicon Kirin 620 */ + .platform = "hi6210sft", + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = 620, + }, +#if CPUINFO_ARCH_ARM + { + /* "hi3630" -> HiSilicon Kirin 920 */ + .platform = "hi3630", + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = 920, + }, +#endif /* CPUINFO_ARCH_ARM */ + { + /* "hi3635" -> HiSilicon Kirin 930 */ + .platform = "hi3635", + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = 930, + }, + { + /* "hi3650" -> HiSilicon Kirin 950 */ + .platform = "hi3650", + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = 950, + }, + { + /* "hi3660" -> HiSilicon Kirin 960 */ + .platform = "hi3660", + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = 960, + }, +#if CPUINFO_ARCH_ARM + { + /* "k3v2oem1" -> HiSilicon K3V2 */ + .platform = "k3v2oem1", + .series = cpuinfo_arm_chipset_series_hisilicon_k3v, + .model = 2, + }, + { + /* "k3v200" -> HiSilicon K3V2 */ + .platform = "k3v200", + .series = cpuinfo_arm_chipset_series_hisilicon_k3v, + .model = 2, + }, + { + /* "montblanc" -> NovaThor U8500 */ + .platform = "montblanc", + .series = cpuinfo_arm_chipset_series_novathor_u, + .model = 8500, + }, +#endif /* CPUINFO_ARCH_ARM */ + { + /* "song" -> Pinecone Surge S1 */ + .platform = "song", + .series = cpuinfo_arm_chipset_series_pinecone_surge_s, + .model = 1, + }, +#if CPUINFO_ARCH_ARM + { + /* "rk322x" -> RockChip RK3229 */ + .platform = "rk322x", + .series = cpuinfo_arm_chipset_series_rockchip_rk, + .model = 3229, + }, +#endif /* CPUINFO_ARCH_ARM */ + { + /* "tegra132" -> Nvidia Tegra T132 */ + .platform = "tegra132", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 132, + }, + { + /* "tegra210_dragon" -> Nvidia Tegra T210 */ + .platform = "tegra210_dragon", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 210, + }, +#if CPUINFO_ARCH_ARM + { + /* "tegra4" -> Nvidia Tegra T114 */ + .platform = "tegra4", + .series = cpuinfo_arm_chipset_series_nvidia_tegra_t, + .model = 114, + }, + { + /* "s5pc110" -> Samsung Exynos 3110 */ + .platform = "s5pc110", + .series = cpuinfo_arm_chipset_series_samsung_exynos, + .model = 3110, + }, +#endif /* CPUINFO_ARCH_ARM */ + }; + + /* + * Decodes chipset name from ro.board.platform Android system property. + * For some chipsets, the function relies frequency and on number of cores for chipset detection. + * + * @param[in] platform - ro.board.platform value. + * @param cores - number of cores in the chipset. + * @param max_cpu_freq_max - maximum of /sys/devices/system/cpu/cpu/cpofreq/cpu_freq_max values. + * + * @returns Decoded chipset name. If chipset could not be decoded, the resulting structure would use `unknown` vendor + * and series identifiers. + */ + struct cpuinfo_arm_chipset cpuinfo_arm_android_decode_chipset_from_ro_board_platform( + const char platform[restrict static CPUINFO_BUILD_PROP_VALUE_MAX], + uint32_t cores, uint32_t max_cpu_freq_max) + { + struct cpuinfo_arm_chipset chipset; + const size_t platform_length = strnlen(platform, CPUINFO_BUILD_PROP_VALUE_MAX); + const char* platform_end = platform + platform_length; + + /* Check Qualcomm MSM/APQ signature */ + if (match_msm_apq(platform, platform_end, &chipset)) { + cpuinfo_log_debug( + "matched Qualcomm MSM/APQ signature in ro.board.platform string \"%.*s\"", + (int) platform_length, platform); + return chipset; + } + + /* Check exynosXXXX (Samsung Exynos) signature */ + if (match_exynos(platform, platform_end, &chipset)) { + cpuinfo_log_debug( + "matched exynosXXXX (Samsung Exynos) signature in ro.board.platform string \"%.*s\"", + (int) platform_length, platform); + return chipset; + } + + /* Check MediaTek MT signature */ + if (match_mt(platform, platform_end, true, &chipset)) { + cpuinfo_log_debug( + "matched MediaTek MT signature in ro.board.platform string \"%.*s\"", (int) platform_length, platform); + return chipset; + } + + /* Check HiSilicon Kirin signature */ + if (match_kirin(platform, platform_end, &chipset)) { + cpuinfo_log_debug( + "matched HiSilicon Kirin signature in ro.board.platform string \"%.*s\"", (int) platform_length, platform); + return chipset; + } + + /* Check Spreadtrum SC signature */ + if (match_sc(platform, platform_end, &chipset)) { + cpuinfo_log_debug( + "matched Spreadtrum SC signature in ro.board.platform string \"%.*s\"", (int) platform_length, platform); + return chipset; + } + + /* Check Rockchip RK signature */ + if (match_rk(platform, platform_end, &chipset)) { + cpuinfo_log_debug( + "matched Rockchip RK signature in ro.board.platform string \"%.*s\"", (int) platform_length, platform); + return chipset; + } + + #if CPUINFO_ARCH_ARM + /* Check Leadcore LCxxxx signature */ + if (match_lc(platform, platform_end, &chipset)) { + cpuinfo_log_debug( + "matched Leadcore LC signature in ro.board.platform string \"%.*s\"", (int) platform_length, platform); + return chipset; + } + #endif + + /* Compare to tabulated ro.board.platform values for Huawei devices which don't report chipset elsewhere */ + if (match_and_parse_huawei(platform, platform_end, &chipset)) { + cpuinfo_log_debug( + "found ro.board.platform string \"%.*s\" in Huawei chipset table", + (int) platform_length, platform); + return chipset; + } + + #if CPUINFO_ARCH_ARM + /* + * Compare to known ro.board.platform values for Broadcom devices and + * detect chipset from frequency and number of cores + */ + if (match_and_parse_broadcom(platform, platform_end, cores, max_cpu_freq_max, &chipset)) { + cpuinfo_log_debug( + "found ro.board.platform string \"%.*s\" in Broadcom chipset table", + (int) platform_length, platform); + return chipset; + } + + /* + * Compare to ro.board.platform value ("omap4") for OMAP4xxx chipsets. + * Upon successful match, detect OMAP4430 from frequency and number of cores. + */ + if (platform_length == 5 && cores == 2 && max_cpu_freq_max == 1008000 && memcmp(platform, "omap4", 5) == 0) { + cpuinfo_log_debug( + "matched Texas Instruments OMAP4 signature in ro.board.platform string \"%.*s\"", + (int) platform_length, platform); + + return (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_texas_instruments, + .series = cpuinfo_arm_chipset_series_texas_instruments_omap, + .model = 4430, + }; + } + #endif + + /* + * Compare to tabulated ro.board.platform values for Amlogic chipsets/devices which can't be otherwise detected. + * The tabulated Amlogic ro.board.platform values have not more than 6 characters. + */ + if (platform_length <= 6) { + for (size_t i = 0; i < CPUINFO_COUNT_OF(amlogic_map_entries); i++) { + if (strncmp(amlogic_map_entries[i].ro_board_platform, platform, 6) == 0) { + cpuinfo_log_debug( + "found ro.board.platform string \"%.*s\" in Amlogic chipset table", + (int) platform_length, platform); + /* Create chipset name from entry */ + return (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_amlogic, + .series = (enum cpuinfo_arm_chipset_series) amlogic_map_entries[i].series, + .model = amlogic_map_entries[i].model, + .suffix = { + [0] = amlogic_map_entries[i].suffix[0], + [1] = amlogic_map_entries[i].suffix[1], + [2] = amlogic_map_entries[i].suffix[2], + }, + }; + } + } + } + + /* Compare to tabulated ro.board.platform values for popular chipsets/devices which can't be otherwise detected */ + for (size_t i = 0; i < CPUINFO_COUNT_OF(special_platform_map_entries); i++) { + if (strncmp(special_platform_map_entries[i].platform, platform, platform_length) == 0 && + special_platform_map_entries[i].platform[platform_length] == 0) + { + /* Create chipset name from entry */ + cpuinfo_log_debug( + "found ro.board.platform string \"%.*s\" in special chipset table", (int) platform_length, platform); + return (struct cpuinfo_arm_chipset) { + .vendor = chipset_series_vendor[special_platform_map_entries[i].series], + .series = (enum cpuinfo_arm_chipset_series) special_platform_map_entries[i].series, + .model = special_platform_map_entries[i].model, + .suffix = { + [0] = special_platform_map_entries[i].suffix, + }, + }; + } + } + + /* None of the ro.board.platform signatures matched, indicate unknown chipset */ + return (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_unknown, + .series = cpuinfo_arm_chipset_series_unknown, + }; + } + + /* + * Decodes chipset name from ro.mediatek.platform Android system property. + * + * @param[in] platform - ro.mediatek.platform value. + * + * @returns Decoded chipset name. If chipset could not be decoded, the resulting structure would use `unknown` + * vendor and series identifiers. + */ + struct cpuinfo_arm_chipset cpuinfo_arm_android_decode_chipset_from_ro_mediatek_platform( + const char platform[restrict static CPUINFO_BUILD_PROP_VALUE_MAX]) + { + struct cpuinfo_arm_chipset chipset; + const char* platform_end = platform + strnlen(platform, CPUINFO_BUILD_PROP_VALUE_MAX); + + /* Check MediaTek MT signature */ + if (match_mt(platform, platform_end, false, &chipset)) { + return chipset; + } + + return (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_unknown, + .series = cpuinfo_arm_chipset_series_unknown, + }; + } + + + /* + * Decodes chipset name from ro.arch Android system property. + * + * The ro.arch property is matched only against Samsung Exynos signature. Systems with other chipset rarely + * configure ro.arch Android system property, and can be decoded through other properties, but some Exynos + * chipsets are identified only in ro.arch. + * + * @param[in] arch - ro.arch value. + * + * @returns Decoded chipset name. If chipset could not be decoded, the resulting structure would use `unknown` + * vendor and series identifiers. + */ + struct cpuinfo_arm_chipset cpuinfo_arm_android_decode_chipset_from_ro_arch( + const char arch[restrict static CPUINFO_BUILD_PROP_VALUE_MAX]) + { + struct cpuinfo_arm_chipset chipset; + const char* arch_end = arch + strnlen(arch, CPUINFO_BUILD_PROP_VALUE_MAX); + + /* Check Samsung exynosXXXX signature */ + if (match_exynos(arch, arch_end, &chipset)) { + return chipset; + } + + return (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_unknown, + .series = cpuinfo_arm_chipset_series_unknown, + }; + } + + /* + * Decodes chipset name from ro.chipname or ro.hardware.chipname Android system property. + * + * @param[in] chipname - ro.chipname or ro.hardware.chipname value. + * + * @returns Decoded chipset name. If chipset could not be decoded, the resulting structure would use `unknown` vendor + * and series identifiers. + */ + + struct cpuinfo_arm_chipset cpuinfo_arm_android_decode_chipset_from_ro_chipname( + const char chipname[restrict static CPUINFO_BUILD_PROP_VALUE_MAX]) + { + struct cpuinfo_arm_chipset chipset; + const size_t chipname_length = strnlen(chipname, CPUINFO_BUILD_PROP_VALUE_MAX); + const char* chipname_end = chipname + chipname_length; + + /* Check Qualcomm MSM/APQ signatures */ + if (match_msm_apq(chipname, chipname_end, &chipset)) { + cpuinfo_log_debug( + "matched Qualcomm MSM/APQ signature in ro.chipname string \"%.*s\"", + (int) chipname_length, chipname); + return chipset; + } + + /* Check SMxxxx (Qualcomm Snapdragon) signature */ + if (match_sm(chipname, chipname_end, &chipset)) { + cpuinfo_log_debug( + "matched Qualcomm SM signature in /proc/cpuinfo Hardware string \"%.*s\"", + (int) chipname_length, chipname); + return chipset; + } + + /* Check exynosXXXX (Samsung Exynos) signature */ + if (match_exynos(chipname, chipname_end, &chipset)) { + cpuinfo_log_debug( + "matched exynosXXXX (Samsung Exynos) signature in ro.chipname string \"%.*s\"", + (int) chipname_length, chipname); + return chipset; + } + + /* Check universalXXXX (Samsung Exynos) signature */ + if (match_universal(chipname, chipname_end, &chipset)) { + cpuinfo_log_debug( + "matched UNIVERSAL (Samsung Exynos) signature in ro.chipname Hardware string \"%.*s\"", + (int) chipname_length, chipname); + return chipset; + } + + /* Check MediaTek MT signature */ + if (match_mt(chipname, chipname_end, true, &chipset)) { + cpuinfo_log_debug( + "matched MediaTek MT signature in ro.chipname string \"%.*s\"", + (int) chipname_length, chipname); + return chipset; + } + + /* Check Spreadtrum SC signature */ + if (match_sc(chipname, chipname_end, &chipset)) { + cpuinfo_log_debug( + "matched Spreadtrum SC signature in ro.chipname string \"%.*s\"", + (int) chipname_length, chipname); + return chipset; + } + + #if CPUINFO_ARCH_ARM + /* Check Marvell PXA signature */ + if (match_pxa(chipname, chipname_end, &chipset)) { + cpuinfo_log_debug( + "matched Marvell PXA signature in ro.chipname string \"%.*s\"", + (int) chipname_length, chipname); + return chipset; + } + + /* Compare to ro.chipname value ("mp523x") for Renesas MP5232 which can't be otherwise detected */ + if (chipname_length == 6 && memcmp(chipname, "mp523x", 6) == 0) { + cpuinfo_log_debug( + "matched Renesas MP5232 signature in ro.chipname string \"%.*s\"", + (int) chipname_length, chipname); + + return (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_renesas, + .series = cpuinfo_arm_chipset_series_renesas_mp, + .model = 5232, + }; + } + #endif + + return (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_unknown, + .series = cpuinfo_arm_chipset_series_unknown, + }; + } +#endif /* __ANDROID__ */ + +/* + * Fix common bugs, typos, and renames in chipset name. + * + * @param[in,out] chipset - chipset name to fix. + * @param cores - number of cores in the chipset. + * @param max_cpu_freq_max - maximum of /sys/devices/system/cpu/cpu/cpofreq/cpu_freq_max values. + */ +void cpuinfo_arm_fixup_chipset( + struct cpuinfo_arm_chipset chipset[restrict static 1], uint32_t cores, uint32_t max_cpu_freq_max) +{ + switch (chipset->series) { + case cpuinfo_arm_chipset_series_qualcomm_msm: + /* Check if there is suffix */ + if (chipset->suffix[0] == 0) { + /* No suffix, but the model may be misreported */ + switch (chipset->model) { + case 8216: + /* MSM8216 was renamed to MSM8916 */ + cpuinfo_log_info("reinterpreted MSM8216 chipset as MSM8916"); + chipset->model = 8916; + break; + case 8916: + /* Common bug: MSM8939 (Octa-core) reported as MSM8916 (Quad-core) */ + switch (cores) { + case 4: + break; + case 8: + cpuinfo_log_info("reinterpreted MSM8916 chipset with 8 cores as MSM8939"); + chipset->model = 8939; + break; + default: + cpuinfo_log_warning("system reported invalid %"PRIu32"-core MSM%"PRIu32" chipset", + cores, chipset->model); + chipset->model = 0; + } + break; + case 8937: + /* Common bug: MSM8917 (Quad-core) reported as MSM8937 (Octa-core) */ + switch (cores) { + case 4: + cpuinfo_log_info("reinterpreted MSM8937 chipset with 4 cores as MSM8917"); + chipset->model = 8917; + break; + case 8: + break; + default: + cpuinfo_log_warning("system reported invalid %"PRIu32"-core MSM%"PRIu32" chipset", + cores, chipset->model); + chipset->model = 0; + } + break; + case 8960: + /* Common bug: APQ8064 (Quad-core) reported as MSM8960 (Dual-core) */ + switch (cores) { + case 2: + break; + case 4: + cpuinfo_log_info("reinterpreted MSM8960 chipset with 4 cores as APQ8064"); + chipset->series = cpuinfo_arm_chipset_series_qualcomm_apq; + chipset->model = 8064; + break; + default: + cpuinfo_log_warning("system reported invalid %"PRIu32"-core MSM%"PRIu32" chipset", + cores, chipset->model); + chipset->model = 0; + } + break; + case 8996: + /* Common bug: MSM8994 (Octa-core) reported as MSM8996 (Quad-core) */ + switch (cores) { + case 4: + break; + case 8: + cpuinfo_log_info("reinterpreted MSM8996 chipset with 8 cores as MSM8994"); + chipset->model = 8994; + break; + default: + cpuinfo_log_warning("system reported invalid %"PRIu32"-core MSM%"PRIu32" chipset", + cores, chipset->model); + chipset->model = 0; + } + break; +#if CPUINFO_ARCH_ARM + case 8610: + /* Common bug: MSM8612 (Quad-core) reported as MSM8610 (Dual-core) */ + switch (cores) { + case 2: + break; + case 4: + cpuinfo_log_info("reinterpreted MSM8610 chipset with 4 cores as MSM8612"); + chipset->model = 8612; + break; + default: + cpuinfo_log_warning("system reported invalid %"PRIu32"-core MSM%"PRIu32" chipset", + cores, chipset->model); + chipset->model = 0; + } + break; +#endif /* CPUINFO_ARCH_ARM */ + } + } else { + /* Suffix may need correction */ + const uint32_t suffix_word = load_u32le(chipset->suffix); + if (suffix_word == UINT32_C(0x004D534D) /* "\0MSM" = reverse("MSM\0") */) { + /* + * Common bug: model name repeated twice, e.g. "MSM8916MSM8916" + * In this case, model matching code parses the second "MSM" as a suffix + */ + chipset->suffix[0] = 0; + chipset->suffix[1] = 0; + chipset->suffix[2] = 0; + } else { + switch (chipset->model) { + case 8976: + /* MSM8976SG -> MSM8976PRO */ + if (suffix_word == UINT32_C(0x00004753) /* "\0\0GS" = reverse("SG\0\0") */ ) { + chipset->suffix[0] = 'P'; + chipset->suffix[1] = 'R'; + chipset->suffix[2] = 'O'; + } + break; + case 8996: + /* MSM8996PRO -> MSM8996PRO-AB or MSM8996PRO-AC */ + if (suffix_word == UINT32_C(0x004F5250) /* "\0ORP" = reverse("PRO\0") */ ) { + chipset->suffix[3] = '-'; + chipset->suffix[4] = 'A'; + chipset->suffix[5] = 'B' + (char) (max_cpu_freq_max >= 2188800); + } + break; + } + } + } + break; + case cpuinfo_arm_chipset_series_qualcomm_apq: + { + /* Suffix may need correction */ + const uint32_t expected_apq = load_u32le(chipset->suffix); + if (expected_apq == UINT32_C(0x00515041) /* "\0QPA" = reverse("APQ\0") */) { + /* + * Common bug: model name repeated twice, e.g. "APQ8016APQ8016" + * In this case, model matching code parses the second "APQ" as a suffix + */ + chipset->suffix[0] = 0; + chipset->suffix[1] = 0; + chipset->suffix[2] = 0; + } + break; + } + case cpuinfo_arm_chipset_series_samsung_exynos: + switch (chipset->model) { +#if CPUINFO_ARCH_ARM + case 4410: + /* Exynos 4410 was renamed to Exynos 4412 */ + chipset->model = 4412; + break; + case 5420: + /* Common bug: Exynos 5260 (Hexa-core) reported as Exynos 5420 (Quad-core) */ + switch (cores) { + case 4: + break; + case 6: + cpuinfo_log_info("reinterpreted Exynos 5420 chipset with 6 cores as Exynos 5260"); + chipset->model = 5260; + break; + default: + cpuinfo_log_warning("system reported invalid %"PRIu32"-core Exynos 5420 chipset", cores); + chipset->model = 0; + } + break; +#endif /* CPUINFO_ARCH_ARM */ + case 7580: + /* Common bug: Exynos 7578 (Quad-core) reported as Exynos 7580 (Octa-core) */ + switch (cores) { + case 4: + cpuinfo_log_info("reinterpreted Exynos 7580 chipset with 4 cores as Exynos 7578"); + chipset->model = 7578; + break; + case 8: + break; + default: + cpuinfo_log_warning("system reported invalid %"PRIu32"-core Exynos 7580 chipset", cores); + chipset->model = 0; + } + break; + } + break; + case cpuinfo_arm_chipset_series_mediatek_mt: + if (chipset->model == 6752) { + /* Common bug: MT6732 (Quad-core) reported as MT6752 (Octa-core) */ + switch (cores) { + case 4: + cpuinfo_log_info("reinterpreted MT6752 chipset with 4 cores as MT6732"); + chipset->model = 6732; + break; + case 8: + break; + default: + cpuinfo_log_warning("system reported invalid %"PRIu32"-core MT6752 chipset", cores); + chipset->model = 0; + } + } + if (chipset->suffix[0] == 'T') { + /* Normalization: "TURBO" and "TRUBO" (apparently a typo) -> "T" */ + const uint32_t suffix_word = load_u32le(chipset->suffix + 1); + switch (suffix_word) { + case UINT32_C(0x4F425255): /* "OBRU" = reverse("URBO") */ + case UINT32_C(0x4F425552): /* "OBUR" = reverse("RUBO") */ + if (chipset->suffix[5] == 0) { + chipset->suffix[1] = 0; + chipset->suffix[2] = 0; + chipset->suffix[3] = 0; + chipset->suffix[4] = 0; + } + break; + } + } + break; + case cpuinfo_arm_chipset_series_rockchip_rk: + if (chipset->model == 3288) { + /* Common bug: Rockchip RK3399 (Hexa-core) always reported as RK3288 (Quad-core) */ + switch (cores) { + case 4: + break; + case 6: + cpuinfo_log_info("reinterpreted RK3288 chipset with 6 cores as RK3399"); + chipset->model = 3399; + break; + default: + cpuinfo_log_warning("system reported invalid %"PRIu32"-core RK3288 chipset", cores); + chipset->model = 0; + } + } + break; + default: + break; + } +} + +/* Map from ARM chipset vendor ID to its string representation */ +static const char* chipset_vendor_string[cpuinfo_arm_chipset_vendor_max] = { + [cpuinfo_arm_chipset_vendor_unknown] = "Unknown", + [cpuinfo_arm_chipset_vendor_qualcomm] = "Qualcomm", + [cpuinfo_arm_chipset_vendor_mediatek] = "MediaTek", + [cpuinfo_arm_chipset_vendor_samsung] = "Samsung", + [cpuinfo_arm_chipset_vendor_hisilicon] = "HiSilicon", + [cpuinfo_arm_chipset_vendor_actions] = "Actions", + [cpuinfo_arm_chipset_vendor_allwinner] = "Allwinner", + [cpuinfo_arm_chipset_vendor_amlogic] = "Amlogic", + [cpuinfo_arm_chipset_vendor_broadcom] = "Broadcom", + [cpuinfo_arm_chipset_vendor_lg] = "LG", + [cpuinfo_arm_chipset_vendor_leadcore] = "Leadcore", + [cpuinfo_arm_chipset_vendor_marvell] = "Marvell", + [cpuinfo_arm_chipset_vendor_mstar] = "MStar", + [cpuinfo_arm_chipset_vendor_novathor] = "NovaThor", + [cpuinfo_arm_chipset_vendor_nvidia] = "Nvidia", + [cpuinfo_arm_chipset_vendor_pinecone] = "Pinecone", + [cpuinfo_arm_chipset_vendor_renesas] = "Renesas", + [cpuinfo_arm_chipset_vendor_rockchip] = "Rockchip", + [cpuinfo_arm_chipset_vendor_spreadtrum] = "Spreadtrum", + [cpuinfo_arm_chipset_vendor_telechips] = "Telechips", + [cpuinfo_arm_chipset_vendor_texas_instruments] = "Texas Instruments", + [cpuinfo_arm_chipset_vendor_wondermedia] = "WonderMedia", +}; + +/* Map from ARM chipset series ID to its string representation */ +static const char* chipset_series_string[cpuinfo_arm_chipset_series_max] = { + [cpuinfo_arm_chipset_series_unknown] = NULL, + [cpuinfo_arm_chipset_series_qualcomm_qsd] = "QSD", + [cpuinfo_arm_chipset_series_qualcomm_msm] = "MSM", + [cpuinfo_arm_chipset_series_qualcomm_apq] = "APQ", + [cpuinfo_arm_chipset_series_qualcomm_snapdragon] = "Snapdragon ", + [cpuinfo_arm_chipset_series_mediatek_mt] = "MT", + [cpuinfo_arm_chipset_series_samsung_exynos] = "Exynos ", + [cpuinfo_arm_chipset_series_hisilicon_k3v] = "K3V", + [cpuinfo_arm_chipset_series_hisilicon_hi] = "Hi", + [cpuinfo_arm_chipset_series_hisilicon_kirin] = "Kirin ", + [cpuinfo_arm_chipset_series_actions_atm] = "ATM", + [cpuinfo_arm_chipset_series_allwinner_a] = "A", + [cpuinfo_arm_chipset_series_amlogic_aml] = "AML", + [cpuinfo_arm_chipset_series_amlogic_s] = "S", + [cpuinfo_arm_chipset_series_broadcom_bcm] = "BCM", + [cpuinfo_arm_chipset_series_lg_nuclun] = "Nuclun ", + [cpuinfo_arm_chipset_series_leadcore_lc] = "LC", + [cpuinfo_arm_chipset_series_marvell_pxa] = "PXA", + [cpuinfo_arm_chipset_series_mstar_6a] = "6A", + [cpuinfo_arm_chipset_series_novathor_u] = "U", + [cpuinfo_arm_chipset_series_nvidia_tegra_t] = "Tegra T", + [cpuinfo_arm_chipset_series_nvidia_tegra_ap] = "Tegra AP", + [cpuinfo_arm_chipset_series_nvidia_tegra_sl] = "Tegra SL", + [cpuinfo_arm_chipset_series_pinecone_surge_s] = "Surge S", + [cpuinfo_arm_chipset_series_renesas_mp] = "MP", + [cpuinfo_arm_chipset_series_rockchip_rk] = "RK", + [cpuinfo_arm_chipset_series_spreadtrum_sc] = "SC", + [cpuinfo_arm_chipset_series_telechips_tcc] = "TCC", + [cpuinfo_arm_chipset_series_texas_instruments_omap] = "OMAP", + [cpuinfo_arm_chipset_series_wondermedia_wm] = "WM", +}; + +/* Convert chipset name represented by cpuinfo_arm_chipset structure to a string representation */ +void cpuinfo_arm_chipset_to_string( + const struct cpuinfo_arm_chipset chipset[restrict static 1], + char name[restrict static CPUINFO_ARM_CHIPSET_NAME_MAX]) +{ + enum cpuinfo_arm_chipset_vendor vendor = chipset->vendor; + if (vendor >= cpuinfo_arm_chipset_vendor_max) { + vendor = cpuinfo_arm_chipset_vendor_unknown; + } + enum cpuinfo_arm_chipset_series series = chipset->series; + if (series >= cpuinfo_arm_chipset_series_max) { + series = cpuinfo_arm_chipset_series_unknown; + } + const char* vendor_string = chipset_vendor_string[vendor]; + const char* series_string = chipset_series_string[series]; + const uint32_t model = chipset->model; + if (model == 0) { + if (series == cpuinfo_arm_chipset_series_unknown) { + strncpy(name, vendor_string, CPUINFO_ARM_CHIPSET_NAME_MAX); + } else { + snprintf(name, CPUINFO_ARM_CHIPSET_NAME_MAX, + "%s %s", vendor_string, series_string); + } + } else { + const size_t suffix_length = strnlen(chipset->suffix, CPUINFO_ARM_CHIPSET_SUFFIX_MAX); + snprintf(name, CPUINFO_ARM_CHIPSET_NAME_MAX, + "%s %s%"PRIu32"%.*s", vendor_string, series_string, model, (int) suffix_length, chipset->suffix); + } +} + +#ifdef __ANDROID__ + static inline struct cpuinfo_arm_chipset disambiguate_qualcomm_chipset( + const struct cpuinfo_arm_chipset proc_cpuinfo_hardware_chipset[restrict static 1], + const struct cpuinfo_arm_chipset ro_product_board_chipset[restrict static 1], + const struct cpuinfo_arm_chipset ro_board_platform_chipset[restrict static 1], + const struct cpuinfo_arm_chipset ro_chipname_chipset[restrict static 1], + const struct cpuinfo_arm_chipset ro_hardware_chipname_chipset[restrict static 1]) + { + if (ro_hardware_chipname_chipset->series != cpuinfo_arm_chipset_series_unknown) { + return *ro_hardware_chipname_chipset; + } + if (ro_chipname_chipset->series != cpuinfo_arm_chipset_series_unknown) { + return *ro_chipname_chipset; + } + if (proc_cpuinfo_hardware_chipset->series != cpuinfo_arm_chipset_series_unknown) { + return *proc_cpuinfo_hardware_chipset; + } + if (ro_product_board_chipset->series != cpuinfo_arm_chipset_series_unknown) { + return *ro_product_board_chipset; + } + return *ro_board_platform_chipset; + } + + static inline struct cpuinfo_arm_chipset disambiguate_mediatek_chipset( + const struct cpuinfo_arm_chipset proc_cpuinfo_hardware_chipset[restrict static 1], + const struct cpuinfo_arm_chipset ro_product_board_chipset[restrict static 1], + const struct cpuinfo_arm_chipset ro_board_platform_chipset[restrict static 1], + const struct cpuinfo_arm_chipset ro_mediatek_platform_chipset[restrict static 1], + const struct cpuinfo_arm_chipset ro_chipname_chipset[restrict static 1]) + { + if (ro_chipname_chipset->series != cpuinfo_arm_chipset_series_unknown) { + return *ro_chipname_chipset; + } + if (proc_cpuinfo_hardware_chipset->series != cpuinfo_arm_chipset_series_unknown) { + return *proc_cpuinfo_hardware_chipset; + } + if (ro_product_board_chipset->series != cpuinfo_arm_chipset_series_unknown) { + return *ro_product_board_chipset; + } + if (ro_board_platform_chipset->series != cpuinfo_arm_chipset_series_unknown) { + return *ro_board_platform_chipset; + } + return *ro_mediatek_platform_chipset; + } + + static inline struct cpuinfo_arm_chipset disambiguate_hisilicon_chipset( + const struct cpuinfo_arm_chipset proc_cpuinfo_hardware_chipset[restrict static 1], + const struct cpuinfo_arm_chipset ro_product_board_chipset[restrict static 1], + const struct cpuinfo_arm_chipset ro_board_platform_chipset[restrict static 1]) + { + if (proc_cpuinfo_hardware_chipset->series != cpuinfo_arm_chipset_series_unknown) { + return *proc_cpuinfo_hardware_chipset; + } + if (ro_product_board_chipset->series != cpuinfo_arm_chipset_series_unknown) { + return *ro_product_board_chipset; + } + return *ro_board_platform_chipset; + } + + static inline struct cpuinfo_arm_chipset disambiguate_amlogic_chipset( + const struct cpuinfo_arm_chipset proc_cpuinfo_hardware_chipset[restrict static 1], + const struct cpuinfo_arm_chipset ro_board_platform_chipset[restrict static 1]) + { + if (proc_cpuinfo_hardware_chipset->series != cpuinfo_arm_chipset_series_unknown) { + return *proc_cpuinfo_hardware_chipset; + } + return *ro_board_platform_chipset; + } + + static inline struct cpuinfo_arm_chipset disambiguate_marvell_chipset( + const struct cpuinfo_arm_chipset proc_cpuinfo_hardware_chipset[restrict static 1], + const struct cpuinfo_arm_chipset ro_product_board_chipset[restrict static 1], + const struct cpuinfo_arm_chipset ro_chipname_chipset[restrict static 1]) + { + if (ro_chipname_chipset->series != cpuinfo_arm_chipset_series_unknown) { + return *ro_chipname_chipset; + } + if (ro_product_board_chipset->series != cpuinfo_arm_chipset_series_unknown) { + return *ro_product_board_chipset; + } + return *proc_cpuinfo_hardware_chipset; + } + + static inline struct cpuinfo_arm_chipset disambiguate_rockchip_chipset( + const struct cpuinfo_arm_chipset proc_cpuinfo_hardware_chipset[restrict static 1], + const struct cpuinfo_arm_chipset ro_product_board_chipset[restrict static 1], + const struct cpuinfo_arm_chipset ro_board_platform_chipset[restrict static 1]) + { + if (ro_product_board_chipset->series != cpuinfo_arm_chipset_series_unknown) { + return *ro_product_board_chipset; + } + if (proc_cpuinfo_hardware_chipset->series != cpuinfo_arm_chipset_series_unknown) { + return *proc_cpuinfo_hardware_chipset; + } + return *ro_board_platform_chipset; + } + + static inline struct cpuinfo_arm_chipset disambiguate_spreadtrum_chipset( + const struct cpuinfo_arm_chipset proc_cpuinfo_hardware_chipset[restrict static 1], + const struct cpuinfo_arm_chipset ro_product_board_chipset[restrict static 1], + const struct cpuinfo_arm_chipset ro_board_platform_chipset[restrict static 1], + const struct cpuinfo_arm_chipset ro_chipname_chipset[restrict static 1]) + { + if (ro_chipname_chipset->series != cpuinfo_arm_chipset_series_unknown) { + return *ro_chipname_chipset; + } + if (ro_product_board_chipset->series != cpuinfo_arm_chipset_series_unknown) { + return *ro_product_board_chipset; + } + if (proc_cpuinfo_hardware_chipset->series != cpuinfo_arm_chipset_series_unknown) { + return *proc_cpuinfo_hardware_chipset; + } + return *ro_board_platform_chipset; + } + + /* + * Decodes chipset name from Android system properties: + * - /proc/cpuinfo Hardware string + * - ro.product.board + * - ro.board.platform + * - ro.mediatek.platform + * - ro.chipname + * For some chipsets, the function relies frequency and on number of cores for chipset detection. + * + * @param[in] properties - structure with the Android system properties described above. + * @param cores - number of cores in the chipset. + * @param max_cpu_freq_max - maximum of /sys/devices/system/cpu/cpu/cpofreq/cpu_freq_max values. + * + * @returns Decoded chipset name. If chipset could not be decoded, the resulting structure would use `unknown` vendor + * and series identifiers. + */ + struct cpuinfo_arm_chipset cpuinfo_arm_android_decode_chipset( + const struct cpuinfo_android_properties properties[restrict static 1], + uint32_t cores, + uint32_t max_cpu_freq_max) + { + struct cpuinfo_arm_chipset chipset = { + .vendor = cpuinfo_arm_chipset_vendor_unknown, + .series = cpuinfo_arm_chipset_series_unknown, + }; + + const bool tegra_platform = is_tegra( + properties->ro_board_platform, + properties->ro_board_platform + strnlen(properties->ro_board_platform, CPUINFO_BUILD_PROP_VALUE_MAX)); + + struct cpuinfo_arm_chipset chipsets[cpuinfo_android_chipset_property_max] = { + [cpuinfo_android_chipset_property_proc_cpuinfo_hardware] = + cpuinfo_arm_linux_decode_chipset_from_proc_cpuinfo_hardware( + properties->proc_cpuinfo_hardware, cores, max_cpu_freq_max, tegra_platform), + [cpuinfo_android_chipset_property_ro_product_board] = + cpuinfo_arm_android_decode_chipset_from_ro_product_board( + properties->ro_product_board, cores, max_cpu_freq_max), + [cpuinfo_android_chipset_property_ro_board_platform] = + cpuinfo_arm_android_decode_chipset_from_ro_board_platform( + properties->ro_board_platform, cores, max_cpu_freq_max), + [cpuinfo_android_chipset_property_ro_mediatek_platform] = + cpuinfo_arm_android_decode_chipset_from_ro_mediatek_platform(properties->ro_mediatek_platform), + [cpuinfo_android_chipset_property_ro_arch] = + cpuinfo_arm_android_decode_chipset_from_ro_arch(properties->ro_arch), + [cpuinfo_android_chipset_property_ro_chipname] = + cpuinfo_arm_android_decode_chipset_from_ro_chipname(properties->ro_chipname), + [cpuinfo_android_chipset_property_ro_hardware_chipname] = + cpuinfo_arm_android_decode_chipset_from_ro_chipname(properties->ro_hardware_chipname), + }; + enum cpuinfo_arm_chipset_vendor vendor = cpuinfo_arm_chipset_vendor_unknown; + for (size_t i = 0; i < cpuinfo_android_chipset_property_max; i++) { + const enum cpuinfo_arm_chipset_vendor decoded_vendor = chipsets[i].vendor; + if (decoded_vendor != cpuinfo_arm_chipset_vendor_unknown) { + if (vendor == cpuinfo_arm_chipset_vendor_unknown) { + vendor = decoded_vendor; + } else if (vendor != decoded_vendor) { + /* Parsing different system properties produces different chipset vendors. This situation is rare. */ + cpuinfo_log_error( + "chipset detection failed: different chipset vendors reported in different system properties"); + goto finish; + } + } + } + if (vendor == cpuinfo_arm_chipset_vendor_unknown) { + cpuinfo_log_warning( + "chipset detection failed: none of the system properties matched known signatures"); + goto finish; + } + + /* Fix common bugs in reported chipsets */ + for (size_t i = 0; i < cpuinfo_android_chipset_property_max; i++) { + cpuinfo_arm_fixup_chipset(&chipsets[i], cores, max_cpu_freq_max); + } + + /* + * Propagate suffixes: consider all pairs of chipsets, if both chipsets in the pair are from the same series, + * and one's suffix is a prefix of another's chipset suffix, use the longest suffix. + */ + for (size_t i = 0; i < cpuinfo_android_chipset_property_max; i++) { + const size_t chipset_i_suffix_length = strnlen(chipsets[i].suffix, CPUINFO_ARM_CHIPSET_SUFFIX_MAX); + for (size_t j = 0; j < i; j++) { + if (chipsets[i].series == chipsets[j].series) { + const size_t chipset_j_suffix_length = strnlen(chipsets[j].suffix, CPUINFO_ARM_CHIPSET_SUFFIX_MAX); + if (chipset_i_suffix_length != chipset_j_suffix_length) { + const size_t common_prefix_length = (chipset_i_suffix_length < chipset_j_suffix_length) ? + chipset_i_suffix_length : chipset_j_suffix_length; + if (common_prefix_length == 0 || + memcmp(chipsets[i].suffix, chipsets[j].suffix, common_prefix_length) == 0) + { + if (chipset_i_suffix_length > chipset_j_suffix_length) { + memcpy(chipsets[j].suffix, chipsets[i].suffix, chipset_i_suffix_length); + } else { + memcpy(chipsets[i].suffix, chipsets[j].suffix, chipset_j_suffix_length); + } + } + } + } + } + } + + for (size_t i = 0; i < cpuinfo_android_chipset_property_max; i++) { + if (chipsets[i].series != cpuinfo_arm_chipset_series_unknown) { + if (chipset.series == cpuinfo_arm_chipset_series_unknown) { + chipset = chipsets[i]; + } else if (chipsets[i].series != chipset.series || chipsets[i].model != chipset.model || + strncmp(chipsets[i].suffix, chipset.suffix, CPUINFO_ARM_CHIPSET_SUFFIX_MAX) != 0) + { + cpuinfo_log_info( + "different chipsets reported in different system properties; " + "vendor-specific disambiguation heuristic would be used"); + switch (vendor) { + case cpuinfo_arm_chipset_vendor_qualcomm: + return disambiguate_qualcomm_chipset( + &chipsets[cpuinfo_android_chipset_property_proc_cpuinfo_hardware], + &chipsets[cpuinfo_android_chipset_property_ro_product_board], + &chipsets[cpuinfo_android_chipset_property_ro_board_platform], + &chipsets[cpuinfo_android_chipset_property_ro_chipname], + &chipsets[cpuinfo_android_chipset_property_ro_hardware_chipname]); + case cpuinfo_arm_chipset_vendor_mediatek: + return disambiguate_mediatek_chipset( + &chipsets[cpuinfo_android_chipset_property_proc_cpuinfo_hardware], + &chipsets[cpuinfo_android_chipset_property_ro_product_board], + &chipsets[cpuinfo_android_chipset_property_ro_board_platform], + &chipsets[cpuinfo_android_chipset_property_ro_mediatek_platform], + &chipsets[cpuinfo_android_chipset_property_ro_chipname]); + case cpuinfo_arm_chipset_vendor_hisilicon: + return disambiguate_hisilicon_chipset( + &chipsets[cpuinfo_android_chipset_property_proc_cpuinfo_hardware], + &chipsets[cpuinfo_android_chipset_property_ro_product_board], + &chipsets[cpuinfo_android_chipset_property_ro_board_platform]); + case cpuinfo_arm_chipset_vendor_amlogic: + return disambiguate_amlogic_chipset( + &chipsets[cpuinfo_android_chipset_property_proc_cpuinfo_hardware], + &chipsets[cpuinfo_android_chipset_property_ro_board_platform]); + case cpuinfo_arm_chipset_vendor_marvell: + return disambiguate_marvell_chipset( + &chipsets[cpuinfo_android_chipset_property_proc_cpuinfo_hardware], + &chipsets[cpuinfo_android_chipset_property_ro_product_board], + &chipsets[cpuinfo_android_chipset_property_ro_chipname]); + case cpuinfo_arm_chipset_vendor_rockchip: + return disambiguate_rockchip_chipset( + &chipsets[cpuinfo_android_chipset_property_proc_cpuinfo_hardware], + &chipsets[cpuinfo_android_chipset_property_ro_product_board], + &chipsets[cpuinfo_android_chipset_property_ro_board_platform]); + case cpuinfo_arm_chipset_vendor_spreadtrum: + return disambiguate_spreadtrum_chipset( + &chipsets[cpuinfo_android_chipset_property_proc_cpuinfo_hardware], + &chipsets[cpuinfo_android_chipset_property_ro_product_board], + &chipsets[cpuinfo_android_chipset_property_ro_board_platform], + &chipsets[cpuinfo_android_chipset_property_ro_chipname]); + default: + cpuinfo_log_error( + "chipset detection failed: " + "could not disambiguate different chipsets reported in different system properties"); + /* chipset variable contains valid, but inconsistent chipset information, overwrite it */ + chipset = (struct cpuinfo_arm_chipset) { + .vendor = cpuinfo_arm_chipset_vendor_unknown, + .series = cpuinfo_arm_chipset_series_unknown, + }; + goto finish; + } + } + } + } + + finish: + return chipset; + } +#else /* !defined(__ANDROID__) */ + /* + * Fix commonly misreported Broadcom BCM models on Raspberry Pi boards. + * + * @param[in,out] chipset - chipset name to fix. + * @param[in] revision - /proc/cpuinfo Revision string. + */ + void cpuinfo_arm_fixup_raspberry_pi_chipset( + struct cpuinfo_arm_chipset chipset[restrict static 1], + const char revision[restrict static CPUINFO_HARDWARE_VALUE_MAX]) + { + const size_t revision_length = strnlen(revision, CPUINFO_REVISION_VALUE_MAX); + + /* Parse revision codes according to https://www.raspberrypi.org/documentation/hardware/raspberrypi/revision-codes/README.md */ + #if CPUINFO_ARCH_ARM + if (revision_length == 4) { + /* + * Old-style revision codes. + * All Raspberry Pi models with old-style revision code use Broadcom BCM2835. + */ + + /* BCM2835 often misreported as BCM2708 */ + if (chipset->model == 2708) { + chipset->model = 2835; + } + return; + } + #endif + if ((size_t) (revision_length - 5) <= (size_t) (8 - 5) /* 5 <= length(revision) <= 8 */) { + /* New-style revision codes */ + + uint32_t model = 0; + switch (revision[revision_length - 4]) { + case '0': + /* BCM2835 */ + model = 2835; + break; + case '1': + /* BCM2836 */ + model = 2836; + break; + case '2': + /* BCM2837 */ + model = 2837; + break; + case '3': + /* BCM2711 */ + model = 2711; + break; + } + + if (model != 0) { + chipset->model = model; + chipset->suffix[0] = 0; + } + } + } + + /* + * Decodes chipset name from /proc/cpuinfo Hardware string. + * For some chipsets, the function relies frequency and on number of cores for chipset detection. + * + * @param[in] hardware - /proc/cpuinfo Hardware string. + * @param cores - number of cores in the chipset. + * @param max_cpu_freq_max - maximum of /sys/devices/system/cpu/cpu/cpofreq/cpu_freq_max values. + * + * @returns Decoded chipset name. If chipset could not be decoded, the resulting structure would use `unknown` vendor + * and series identifiers. + */ + struct cpuinfo_arm_chipset cpuinfo_arm_linux_decode_chipset( + const char hardware[restrict static CPUINFO_HARDWARE_VALUE_MAX], + const char revision[restrict static CPUINFO_REVISION_VALUE_MAX], + uint32_t cores, + uint32_t max_cpu_freq_max) + { + struct cpuinfo_arm_chipset chipset = + cpuinfo_arm_linux_decode_chipset_from_proc_cpuinfo_hardware( + hardware, cores, max_cpu_freq_max, false); + if (chipset.vendor == cpuinfo_arm_chipset_vendor_unknown) { + cpuinfo_log_warning( + "chipset detection failed: /proc/cpuinfo Hardware string did not match known signatures"); + } else if (chipset.vendor == cpuinfo_arm_chipset_vendor_broadcom) { + /* Raspberry Pi kernel reports bogus chipset models; detect chipset from RPi revision */ + cpuinfo_arm_fixup_raspberry_pi_chipset(&chipset, revision); + } else { + cpuinfo_arm_fixup_chipset(&chipset, cores, max_cpu_freq_max); + } + return chipset; + } + +#endif diff --git a/3rdparty/cpuinfo/src/arm/linux/clusters.c b/3rdparty/cpuinfo/src/arm/linux/clusters.c new file mode 100644 index 000000000..430773d1d --- /dev/null +++ b/3rdparty/cpuinfo/src/arm/linux/clusters.c @@ -0,0 +1,493 @@ +#include +#include +#include +#include + +#include +#include +#if defined(__ANDROID__) + #include +#endif +#include +#include +#include +#include +#include + +static inline bool bitmask_all(uint32_t bitfield, uint32_t mask) { + return (bitfield & mask) == mask; +} + +/* + * Assigns logical processors to clusters of cores using heuristic based on the typical configuration of clusters for + * 5, 6, 8, and 10 cores: + * - 5 cores (ARM32 Android only): 2 clusters of 4+1 cores + * - 6 cores: 2 clusters of 4+2 cores + * - 8 cores: 2 clusters of 4+4 cores + * - 10 cores: 3 clusters of 4+4+2 cores + * + * The function must be called after parsing OS-provided information on core clusters. + * Its purpose is to detect clusters of cores when OS-provided information is lacking or incomplete, i.e. + * - Linux kernel is not configured to report information in sysfs topology leaf. + * - Linux kernel reports topology information only for online cores, and only cores on one cluster are online, e.g.: + * - Exynos 8890 has 8 cores in 4+4 clusters, but only the first cluster of 4 cores is reported, and cluster + * configuration of logical processors 4-7 is not reported (all remaining processors 4-7 form cluster 1) + * - MT6797 has 10 cores in 4+4+2, but only the first cluster of 4 cores is reported, and cluster configuration + * of logical processors 4-9 is not reported (processors 4-7 form cluster 1, and processors 8-9 form cluster 2). + * + * Heuristic assignment of processors to the above pre-defined clusters fails if such assignment would contradict + * information provided by the operating system: + * - Any of the OS-reported processor clusters is different than the corresponding heuristic cluster. + * - Processors in a heuristic cluster have no OS-provided cluster siblings information, but have known and different + * minimum/maximum frequency. + * - Processors in a heuristic cluster have no OS-provided cluster siblings information, but have known and different + * MIDR components. + * + * If the heuristic assignment of processors to clusters of cores fails, all processors' clusters are unchanged. + * + * @param usable_processors - number of processors in the @p processors array with CPUINFO_LINUX_FLAG_VALID flags. + * @param max_processors - number of elements in the @p processors array. + * @param[in,out] processors - processor descriptors with pre-parsed POSSIBLE and PRESENT flags, minimum/maximum + * frequency, MIDR information, and core cluster (package siblings list) information. + * + * @retval true if the heuristic successfully assigned all processors into clusters of cores. + * @retval false if known details about processors contradict the heuristic configuration of core clusters. + */ +bool cpuinfo_arm_linux_detect_core_clusters_by_heuristic( + uint32_t usable_processors, + uint32_t max_processors, + struct cpuinfo_arm_linux_processor processors[restrict static max_processors]) +{ + uint32_t cluster_processors[3]; + switch (usable_processors) { + case 10: + cluster_processors[0] = 4; + cluster_processors[1] = 4; + cluster_processors[2] = 2; + break; + case 8: + cluster_processors[0] = 4; + cluster_processors[1] = 4; + break; + case 6: + cluster_processors[0] = 4; + cluster_processors[1] = 2; + break; +#if defined(__ANDROID__) && CPUINFO_ARCH_ARM + case 5: + /* + * The only processor with 5 cores is Leadcore L1860C (ARMv7, mobile), + * but this configuration is not too unreasonable for a virtualized ARM server. + */ + cluster_processors[0] = 4; + cluster_processors[1] = 1; + break; +#endif + default: + return false; + } + + /* + * Assignment of processors to core clusters is done in two passes: + * 1. Verify that the clusters proposed by heuristic are compatible with known details about processors. + * 2. If verification passed, update core clusters for the processors. + */ + + uint32_t cluster = 0; + uint32_t expected_cluster_processors = 0; + uint32_t cluster_start, cluster_flags, cluster_midr, cluster_max_frequency, cluster_min_frequency; + bool expected_cluster_exists; + for (uint32_t i = 0; i < max_processors; i++) { + if (bitmask_all(processors[i].flags, CPUINFO_LINUX_FLAG_VALID)) { + if (expected_cluster_processors == 0) { + /* Expect this processor to start a new cluster */ + + expected_cluster_exists = !!(processors[i].flags & CPUINFO_LINUX_FLAG_PACKAGE_CLUSTER); + if (expected_cluster_exists) { + if (processors[i].package_leader_id != i) { + cpuinfo_log_debug( + "heuristic detection of core clusters failed: " + "processor %"PRIu32" is expected to start a new cluster #%"PRIu32" with %"PRIu32" cores, " + "but system siblings lists reported it as a sibling of processor %"PRIu32, + i, cluster, cluster_processors[cluster], processors[i].package_leader_id); + return false; + } + } else { + cluster_flags = 0; + } + + cluster_start = i; + expected_cluster_processors = cluster_processors[cluster++]; + } else { + /* Expect this processor to belong to the same cluster as processor */ + + if (expected_cluster_exists) { + /* + * The cluster suggested by the heuristic was already parsed from system siblings lists. + * For all processors we expect in the cluster, check that: + * - They have pre-assigned cluster from siblings lists (CPUINFO_LINUX_FLAG_PACKAGE_CLUSTER flag). + * - They were assigned to the same cluster based on siblings lists + * (package_leader_id points to the first processor in the cluster). + */ + + if ((processors[i].flags & CPUINFO_LINUX_FLAG_PACKAGE_CLUSTER) == 0) { + cpuinfo_log_debug( + "heuristic detection of core clusters failed: " + "processor %"PRIu32" is expected to belong to the cluster of processor %"PRIu32", " + "but system siblings lists did not report it as a sibling of processor %"PRIu32, + i, cluster_start, cluster_start); + return false; + } + if (processors[i].package_leader_id != cluster_start) { + cpuinfo_log_debug( + "heuristic detection of core clusters failed: " + "processor %"PRIu32" is expected to belong to the cluster of processor %"PRIu32", " + "but system siblings lists reported it to belong to the cluster of processor %"PRIu32, + i, cluster_start, cluster_start); + return false; + } + } else { + /* + * The cluster suggest by the heuristic was not parsed from system siblings lists. + * For all processors we expect in the cluster, check that: + * - They have no pre-assigned cluster from siblings lists. + * - If their min/max CPU frequency is known, it is the same. + * - If any part of their MIDR (Implementer, Variant, Part, Revision) is known, it is the same. + */ + + if (processors[i].flags & CPUINFO_LINUX_FLAG_PACKAGE_CLUSTER) { + cpuinfo_log_debug( + "heuristic detection of core clusters failed: " + "processor %"PRIu32" is expected to be unassigned to any cluster, " + "but system siblings lists reported it to belong to the cluster of processor %"PRIu32, + i, processors[i].package_leader_id); + return false; + } + + if (processors[i].flags & CPUINFO_LINUX_FLAG_MIN_FREQUENCY) { + if (cluster_flags & CPUINFO_LINUX_FLAG_MIN_FREQUENCY) { + if (cluster_min_frequency != processors[i].min_frequency) { + cpuinfo_log_debug( + "heuristic detection of core clusters failed: " + "minimum frequency of processor %"PRIu32" (%"PRIu32" KHz) is different than of its expected cluster (%"PRIu32" KHz)", + i, processors[i].min_frequency, cluster_min_frequency); + return false; + } + } else { + cluster_min_frequency = processors[i].min_frequency; + cluster_flags |= CPUINFO_LINUX_FLAG_MIN_FREQUENCY; + } + } + + if (processors[i].flags & CPUINFO_LINUX_FLAG_MAX_FREQUENCY) { + if (cluster_flags & CPUINFO_LINUX_FLAG_MAX_FREQUENCY) { + if (cluster_max_frequency != processors[i].max_frequency) { + cpuinfo_log_debug( + "heuristic detection of core clusters failed: " + "maximum frequency of processor %"PRIu32" (%"PRIu32" KHz) is different than of its expected cluster (%"PRIu32" KHz)", + i, processors[i].max_frequency, cluster_max_frequency); + return false; + } + } else { + cluster_max_frequency = processors[i].max_frequency; + cluster_flags |= CPUINFO_LINUX_FLAG_MAX_FREQUENCY; + } + } + + if (processors[i].flags & CPUINFO_ARM_LINUX_VALID_IMPLEMENTER) { + if (cluster_flags & CPUINFO_ARM_LINUX_VALID_IMPLEMENTER) { + if ((cluster_midr & CPUINFO_ARM_MIDR_IMPLEMENTER_MASK) != (processors[i].midr & CPUINFO_ARM_MIDR_IMPLEMENTER_MASK)) { + cpuinfo_log_debug( + "heuristic detection of core clusters failed: " + "CPU Implementer of processor %"PRIu32" (0x%02"PRIx32") is different than of its expected cluster (0x%02"PRIx32")", + i, midr_get_implementer(processors[i].midr), midr_get_implementer(cluster_midr)); + return false; + } + } else { + cluster_midr = midr_copy_implementer(cluster_midr, processors[i].midr); + cluster_flags |= CPUINFO_ARM_LINUX_VALID_IMPLEMENTER; + } + } + + if (processors[i].flags & CPUINFO_ARM_LINUX_VALID_VARIANT) { + if (cluster_flags & CPUINFO_ARM_LINUX_VALID_VARIANT) { + if ((cluster_midr & CPUINFO_ARM_MIDR_VARIANT_MASK) != (processors[i].midr & CPUINFO_ARM_MIDR_VARIANT_MASK)) { + cpuinfo_log_debug( + "heuristic detection of core clusters failed: " + "CPU Variant of processor %"PRIu32" (0x%"PRIx32") is different than of its expected cluster (0x%"PRIx32")", + i, midr_get_variant(processors[i].midr), midr_get_variant(cluster_midr)); + return false; + } + } else { + cluster_midr = midr_copy_variant(cluster_midr, processors[i].midr); + cluster_flags |= CPUINFO_ARM_LINUX_VALID_VARIANT; + } + } + + if (processors[i].flags & CPUINFO_ARM_LINUX_VALID_PART) { + if (cluster_flags & CPUINFO_ARM_LINUX_VALID_PART) { + if ((cluster_midr & CPUINFO_ARM_MIDR_PART_MASK) != (processors[i].midr & CPUINFO_ARM_MIDR_PART_MASK)) { + cpuinfo_log_debug( + "heuristic detection of core clusters failed: " + "CPU Part of processor %"PRIu32" (0x%03"PRIx32") is different than of its expected cluster (0x%03"PRIx32")", + i, midr_get_part(processors[i].midr), midr_get_part(cluster_midr)); + return false; + } + } else { + cluster_midr = midr_copy_part(cluster_midr, processors[i].midr); + cluster_flags |= CPUINFO_ARM_LINUX_VALID_PART; + } + } + + if (processors[i].flags & CPUINFO_ARM_LINUX_VALID_REVISION) { + if (cluster_flags & CPUINFO_ARM_LINUX_VALID_REVISION) { + if ((cluster_midr & CPUINFO_ARM_MIDR_REVISION_MASK) != (processors[i].midr & CPUINFO_ARM_MIDR_REVISION_MASK)) { + cpuinfo_log_debug( + "heuristic detection of core clusters failed: " + "CPU Revision of processor %"PRIu32" (0x%"PRIx32") is different than of its expected cluster (0x%"PRIx32")", + i, midr_get_revision(cluster_midr), midr_get_revision(processors[i].midr)); + return false; + } + } else { + cluster_midr = midr_copy_revision(cluster_midr, processors[i].midr); + cluster_flags |= CPUINFO_ARM_LINUX_VALID_REVISION; + } + } + } + } + expected_cluster_processors--; + } + } + + /* Verification passed, assign all processors to new clusters */ + cluster = 0; + expected_cluster_processors = 0; + for (uint32_t i = 0; i < max_processors; i++) { + if (bitmask_all(processors[i].flags, CPUINFO_LINUX_FLAG_VALID)) { + if (expected_cluster_processors == 0) { + /* Expect this processor to start a new cluster */ + + cluster_start = i; + expected_cluster_processors = cluster_processors[cluster++]; + } else { + /* Expect this processor to belong to the same cluster as processor */ + + if (!(processors[i].flags & CPUINFO_LINUX_FLAG_PACKAGE_CLUSTER)) { + cpuinfo_log_debug("assigned processor %"PRIu32" to cluster of processor %"PRIu32" based on heuristic", + i, cluster_start); + } + + processors[i].package_leader_id = cluster_start; + processors[i].flags |= CPUINFO_LINUX_FLAG_PACKAGE_CLUSTER; + } + expected_cluster_processors--; + } + } + return true; +} + +/* + * Assigns logical processors to clusters of cores in sequential manner: + * - Clusters detected from OS-provided information are unchanged: + * - Processors assigned to these clusters stay assigned to the same clusters + * - No new processors are added to these clusters + * - Processors without pre-assigned cluster are clustered in one sequential scan: + * - If known details (min/max frequency, MIDR components) of a processor are compatible with a preceding + * processor, without pre-assigned cluster, the processor is assigned to the cluster of the preceding processor. + * - If known details (min/max frequency, MIDR components) of a processor are not compatible with a preceding + * processor, the processor is assigned to a newly created cluster. + * + * The function must be called after parsing OS-provided information on core clusters, and usually is called only + * if heuristic assignment of processors to clusters (cpuinfo_arm_linux_cluster_processors_by_heuristic) failed. + * + * Its purpose is to detect clusters of cores when OS-provided information is lacking or incomplete, i.e. + * - Linux kernel is not configured to report information in sysfs topology leaf. + * - Linux kernel reports topology information only for online cores, and all cores on some of the clusters are offline. + * + * Sequential assignment of processors to clusters always succeeds, and upon exit, all usable processors in the + * @p processors array have cluster information. + * + * @param max_processors - number of elements in the @p processors array. + * @param[in,out] processors - processor descriptors with pre-parsed POSSIBLE and PRESENT flags, minimum/maximum + * frequency, MIDR information, and core cluster (package siblings list) information. + * + * @retval true if the heuristic successfully assigned all processors into clusters of cores. + * @retval false if known details about processors contradict the heuristic configuration of core clusters. + */ +void cpuinfo_arm_linux_detect_core_clusters_by_sequential_scan( + uint32_t max_processors, + struct cpuinfo_arm_linux_processor processors[restrict static max_processors]) +{ + uint32_t cluster_flags = 0; + uint32_t cluster_processors = 0; + uint32_t cluster_start, cluster_midr, cluster_max_frequency, cluster_min_frequency; + for (uint32_t i = 0; i < max_processors; i++) { + if ((processors[i].flags & (CPUINFO_LINUX_FLAG_VALID | CPUINFO_LINUX_FLAG_PACKAGE_CLUSTER)) == CPUINFO_LINUX_FLAG_VALID) { + if (cluster_processors == 0) { + goto new_cluster; + } + + if (processors[i].flags & CPUINFO_LINUX_FLAG_MIN_FREQUENCY) { + if (cluster_flags & CPUINFO_LINUX_FLAG_MIN_FREQUENCY) { + if (cluster_min_frequency != processors[i].min_frequency) { + cpuinfo_log_info( + "minimum frequency of processor %"PRIu32" (%"PRIu32" KHz) is different than of preceding cluster (%"PRIu32" KHz); " + "processor %"PRIu32" starts to a new cluster", + i, processors[i].min_frequency, cluster_min_frequency, i); + goto new_cluster; + } + } else { + cluster_min_frequency = processors[i].min_frequency; + cluster_flags |= CPUINFO_LINUX_FLAG_MIN_FREQUENCY; + } + } + + if (processors[i].flags & CPUINFO_LINUX_FLAG_MAX_FREQUENCY) { + if (cluster_flags & CPUINFO_LINUX_FLAG_MAX_FREQUENCY) { + if (cluster_max_frequency != processors[i].max_frequency) { + cpuinfo_log_debug( + "maximum frequency of processor %"PRIu32" (%"PRIu32" KHz) is different than of preceding cluster (%"PRIu32" KHz); " + "processor %"PRIu32" starts a new cluster", + i, processors[i].max_frequency, cluster_max_frequency, i); + goto new_cluster; + } + } else { + cluster_max_frequency = processors[i].max_frequency; + cluster_flags |= CPUINFO_LINUX_FLAG_MAX_FREQUENCY; + } + } + + if (processors[i].flags & CPUINFO_ARM_LINUX_VALID_IMPLEMENTER) { + if (cluster_flags & CPUINFO_ARM_LINUX_VALID_IMPLEMENTER) { + if ((cluster_midr & CPUINFO_ARM_MIDR_IMPLEMENTER_MASK) != (processors[i].midr & CPUINFO_ARM_MIDR_IMPLEMENTER_MASK)) { + cpuinfo_log_debug( + "CPU Implementer of processor %"PRIu32" (0x%02"PRIx32") is different than of preceding cluster (0x%02"PRIx32"); " + "processor %"PRIu32" starts to a new cluster", + i, midr_get_implementer(processors[i].midr), midr_get_implementer(cluster_midr), i); + goto new_cluster; + } + } else { + cluster_midr = midr_copy_implementer(cluster_midr, processors[i].midr); + cluster_flags |= CPUINFO_ARM_LINUX_VALID_IMPLEMENTER; + } + } + + if (processors[i].flags & CPUINFO_ARM_LINUX_VALID_VARIANT) { + if (cluster_flags & CPUINFO_ARM_LINUX_VALID_VARIANT) { + if ((cluster_midr & CPUINFO_ARM_MIDR_VARIANT_MASK) != (processors[i].midr & CPUINFO_ARM_MIDR_VARIANT_MASK)) { + cpuinfo_log_debug( + "CPU Variant of processor %"PRIu32" (0x%"PRIx32") is different than of its expected cluster (0x%"PRIx32")" + "processor %"PRIu32" starts to a new cluster", + i, midr_get_variant(processors[i].midr), midr_get_variant(cluster_midr), i); + goto new_cluster; + } + } else { + cluster_midr = midr_copy_variant(cluster_midr, processors[i].midr); + cluster_flags |= CPUINFO_ARM_LINUX_VALID_VARIANT; + } + } + + if (processors[i].flags & CPUINFO_ARM_LINUX_VALID_PART) { + if (cluster_flags & CPUINFO_ARM_LINUX_VALID_PART) { + if ((cluster_midr & CPUINFO_ARM_MIDR_PART_MASK) != (processors[i].midr & CPUINFO_ARM_MIDR_PART_MASK)) { + cpuinfo_log_debug( + "CPU Part of processor %"PRIu32" (0x%03"PRIx32") is different than of its expected cluster (0x%03"PRIx32")" + "processor %"PRIu32" starts to a new cluster", + i, midr_get_part(processors[i].midr), midr_get_part(cluster_midr), i); + goto new_cluster; + } + } else { + cluster_midr = midr_copy_part(cluster_midr, processors[i].midr); + cluster_flags |= CPUINFO_ARM_LINUX_VALID_PART; + } + } + + if (processors[i].flags & CPUINFO_ARM_LINUX_VALID_REVISION) { + if (cluster_flags & CPUINFO_ARM_LINUX_VALID_REVISION) { + if ((cluster_midr & CPUINFO_ARM_MIDR_REVISION_MASK) != (processors[i].midr & CPUINFO_ARM_MIDR_REVISION_MASK)) { + cpuinfo_log_debug( + "CPU Revision of processor %"PRIu32" (0x%"PRIx32") is different than of its expected cluster (0x%"PRIx32")" + "processor %"PRIu32" starts to a new cluster", + i, midr_get_revision(cluster_midr), midr_get_revision(processors[i].midr), i); + goto new_cluster; + } + } else { + cluster_midr = midr_copy_revision(cluster_midr, processors[i].midr); + cluster_flags |= CPUINFO_ARM_LINUX_VALID_REVISION; + } + } + + /* All checks passed, attach processor to the preceding cluster */ + cluster_processors++; + processors[i].package_leader_id = cluster_start; + processors[i].flags |= CPUINFO_LINUX_FLAG_PACKAGE_CLUSTER; + cpuinfo_log_debug("assigned processor %"PRIu32" to preceding cluster of processor %"PRIu32, i, cluster_start); + continue; + +new_cluster: + /* Create a new cluster starting with processor i */ + cluster_start = i; + processors[i].package_leader_id = i; + processors[i].flags |= CPUINFO_LINUX_FLAG_PACKAGE_CLUSTER; + cluster_processors = 1; + + /* Copy known information from processor to cluster, and set the flags accordingly */ + cluster_flags = 0; + if (processors[i].flags & CPUINFO_LINUX_FLAG_MIN_FREQUENCY) { + cluster_min_frequency = processors[i].min_frequency; + cluster_flags |= CPUINFO_LINUX_FLAG_MIN_FREQUENCY; + } + if (processors[i].flags & CPUINFO_LINUX_FLAG_MAX_FREQUENCY) { + cluster_max_frequency = processors[i].max_frequency; + cluster_flags |= CPUINFO_LINUX_FLAG_MAX_FREQUENCY; + } + if (processors[i].flags & CPUINFO_ARM_LINUX_VALID_IMPLEMENTER) { + cluster_midr = midr_copy_implementer(cluster_midr, processors[i].midr); + cluster_flags |= CPUINFO_ARM_LINUX_VALID_IMPLEMENTER; + } + if (processors[i].flags & CPUINFO_ARM_LINUX_VALID_VARIANT) { + cluster_midr = midr_copy_variant(cluster_midr, processors[i].midr); + cluster_flags |= CPUINFO_ARM_LINUX_VALID_VARIANT; + } + if (processors[i].flags & CPUINFO_ARM_LINUX_VALID_PART) { + cluster_midr = midr_copy_part(cluster_midr, processors[i].midr); + cluster_flags |= CPUINFO_ARM_LINUX_VALID_PART; + } + if (processors[i].flags & CPUINFO_ARM_LINUX_VALID_REVISION) { + cluster_midr = midr_copy_revision(cluster_midr, processors[i].midr); + cluster_flags |= CPUINFO_ARM_LINUX_VALID_REVISION; + } + } + } +} + +/* + * Counts the number of logical processors in each core cluster. + * This function should be called after all processors are assigned to core clusters. + * + * @param max_processors - number of elements in the @p processors array. + * @param[in,out] processors - processor descriptors with pre-parsed POSSIBLE and PRESENT flags, + * and decoded core cluster (package_leader_id) information. + * The function expects the value of processors[i].package_processor_count to be zero. + * Upon return, processors[i].package_processor_count will contain the number of logical + * processors in the respective core cluster. + */ +void cpuinfo_arm_linux_count_cluster_processors( + uint32_t max_processors, + struct cpuinfo_arm_linux_processor processors[restrict static max_processors]) +{ + /* First pass: accumulate the number of processors at the group leader's package_processor_count */ + for (uint32_t i = 0; i < max_processors; i++) { + if (bitmask_all(processors[i].flags, CPUINFO_LINUX_FLAG_VALID)) { + const uint32_t package_leader_id = processors[i].package_leader_id; + processors[package_leader_id].package_processor_count += 1; + } + } + /* Second pass: copy the package_processor_count from the group leader processor */ + for (uint32_t i = 0; i < max_processors; i++) { + if (bitmask_all(processors[i].flags, CPUINFO_LINUX_FLAG_VALID)) { + const uint32_t package_leader_id = processors[i].package_leader_id; + processors[i].package_processor_count = processors[package_leader_id].package_processor_count; + } + } +} diff --git a/3rdparty/cpuinfo/src/arm/linux/cp.h b/3rdparty/cpuinfo/src/arm/linux/cp.h new file mode 100644 index 000000000..63940ec5d --- /dev/null +++ b/3rdparty/cpuinfo/src/arm/linux/cp.h @@ -0,0 +1,44 @@ +#include + + +#if CPUINFO_MOCK + extern uint32_t cpuinfo_arm_fpsid; + extern uint32_t cpuinfo_arm_mvfr0; + extern uint32_t cpuinfo_arm_wcid; + + static inline uint32_t read_fpsid(void) { + return cpuinfo_arm_fpsid; + } + + static inline uint32_t read_mvfr0(void) { + return cpuinfo_arm_mvfr0; + } + + static inline uint32_t read_wcid(void) { + return cpuinfo_arm_wcid; + } +#else + #if !defined(__ARM_ARCH_7A__) && !defined(__ARM_ARCH_8A__) && !(defined(__ARM_ARCH) && (__ARM_ARCH >= 7)) + /* + * CoProcessor 10 is inaccessible from user mode since ARMv7, + * and clang refuses to compile inline assembly when targeting ARMv7+ + */ + static inline uint32_t read_fpsid(void) { + uint32_t fpsid; + __asm__ __volatile__("MRC p10, 0x7, %[fpsid], cr0, cr0, 0" : [fpsid] "=r" (fpsid)); + return fpsid; + } + + static inline uint32_t read_mvfr0(void) { + uint32_t mvfr0; + __asm__ __volatile__("MRC p10, 0x7, %[mvfr0], cr7, cr0, 0" : [mvfr0] "=r" (mvfr0)); + return mvfr0; + } + #endif + + static inline uint32_t read_wcid(void) { + uint32_t wcid; + __asm__ __volatile__("MRC p1, 0, %[wcid], c0, c0" : [wcid] "=r" (wcid)); + return wcid; + } +#endif diff --git a/3rdparty/cpuinfo/src/arm/linux/cpuinfo.c b/3rdparty/cpuinfo/src/arm/linux/cpuinfo.c new file mode 100644 index 000000000..90e1631ee --- /dev/null +++ b/3rdparty/cpuinfo/src/arm/linux/cpuinfo.c @@ -0,0 +1,908 @@ +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +/* + * Size, in chars, of the on-stack buffer used for parsing lines of /proc/cpuinfo. + * This is also the limit on the length of a single line. + */ +#define BUFFER_SIZE 1024 + + +static uint32_t parse_processor_number( + const char* processor_start, + const char* processor_end) +{ + const size_t processor_length = (size_t) (processor_end - processor_start); + + if (processor_length == 0) { + cpuinfo_log_warning("Processor number in /proc/cpuinfo is ignored: string is empty"); + return 0; + } + + uint32_t processor_number = 0; + for (const char* digit_ptr = processor_start; digit_ptr != processor_end; digit_ptr++) { + const uint32_t digit = (uint32_t) (*digit_ptr - '0'); + if (digit > 10) { + cpuinfo_log_warning("non-decimal suffix %.*s in /proc/cpuinfo processor number is ignored", + (int) (processor_end - digit_ptr), digit_ptr); + break; + } + + processor_number = processor_number * 10 + digit; + } + + return processor_number; +} + +/* + * Full list of ARM features reported in /proc/cpuinfo: + * + * * swp - support for SWP instruction (deprecated in ARMv7, can be removed in future) + * * half - support for half-word loads and stores. These instruction are part of ARMv4, + * so no need to check it on supported CPUs. + * * thumb - support for 16-bit Thumb instruction set. Note that BX instruction is detected + * by ARMv4T architecture, not by this flag. + * * 26bit - old CPUs merged 26-bit PC and program status register (flags) into 32-bit PC + * and had special instructions for working with packed PC. Now it is all deprecated. + * * fastmult - most old ARM CPUs could only compute 2 bits of multiplication result per clock + * cycle, but CPUs with M suffix (e.g. ARM7TDMI) could compute 4 bits per cycle. + * Of course, now it makes no sense. + * * fpa - floating point accelerator available. On original ARM ABI all floating-point operations + * generated FPA instructions. If FPA was not available, these instructions generated + * "illegal operation" interrupts, and the OS processed them by emulating the FPA instructions. + * Debian used this ABI before it switched to EABI. Now FPA is deprecated. + * * vfp - vector floating point instructions. Available on most modern CPUs (as part of VFPv3). + * Required by Android ARMv7A ABI and by Ubuntu on ARM. + * Note: there is no flag for VFPv2. + * * edsp - V5E instructions: saturating add/sub and 16-bit x 16-bit -> 32/64-bit multiplications. + * Required on Android, supported by all CPUs in production. + * * java - Jazelle extension. Supported on most CPUs. + * * iwmmxt - Intel/Marvell Wireless MMX instructions. 64-bit integer SIMD. + * Supported on XScale (Since PXA270) and Sheeva (PJ1, PJ4) architectures. + * Note that there is no flag for WMMX2 instructions. + * * crunch - Maverick Crunch instructions. Junk. + * * thumbee - ThumbEE instructions. Almost no documentation is available. + * * neon - NEON instructions (aka Advanced SIMD). MVFR1 register gives more + * fine-grained information on particular supported features, but + * the Linux kernel exports only a single flag for all of them. + * According to ARMv7A docs it also implies the availability of VFPv3 + * (with 32 double-precision registers d0-d31). + * * vfpv3 - VFPv3 instructions. Available on most modern CPUs. Augment VFPv2 by + * conversion to/from integers and load constant instructions. + * Required by Android ARMv7A ABI and by Ubuntu on ARM. + * * vfpv3d16 - VFPv3 instructions with only 16 double-precision registers (d0-d15). + * * tls - software thread ID registers. + * Used by kernel (and likely libc) for efficient implementation of TLS. + * * vfpv4 - fused multiply-add instructions. + * * idiva - DIV instructions available in ARM mode. + * * idivt - DIV instructions available in Thumb mode. + * * vfpd32 - VFP (of any version) with 32 double-precision registers d0-d31. + * * lpae - Large Physical Address Extension (physical address up to 40 bits). + * * evtstrm - generation of Event Stream by timer. + * * aes - AES instructions. + * * pmull - Polinomial Multiplication instructions. + * * sha1 - SHA1 instructions. + * * sha2 - SHA2 instructions. + * * crc32 - CRC32 instructions. + * + * /proc/cpuinfo on ARM is populated in file arch/arm/kernel/setup.c in Linux kernel + * Note that some devices may use patched Linux kernels with different feature names. + * However, the names above were checked on a large number of /proc/cpuinfo listings. + */ +static void parse_features( + const char* features_start, + const char* features_end, + struct cpuinfo_arm_linux_processor processor[restrict static 1]) +{ + const char* feature_start = features_start; + const char* feature_end; + + /* Mark the features as valid */ + processor->flags |= CPUINFO_ARM_LINUX_VALID_FEATURES | CPUINFO_ARM_LINUX_VALID_PROCESSOR; + + do { + feature_end = feature_start + 1; + for (; feature_end != features_end; feature_end++) { + if (*feature_end == ' ') { + break; + } + } + const size_t feature_length = (size_t) (feature_end - feature_start); + + switch (feature_length) { + case 2: + if (memcmp(feature_start, "fp", feature_length) == 0) { +#if CPUINFO_ARCH_ARM64 + processor->features |= CPUINFO_ARM_LINUX_FEATURE_FP; +#endif +#if CPUINFO_ARCH_ARM + } else if (memcmp(feature_start, "wp", feature_length) == 0) { + /* + * Some AArch64 kernels, including the one on Nexus 5X, + * erroneously report "swp" as "wp" to AArch32 programs + */ + processor->features |= CPUINFO_ARM_LINUX_FEATURE_SWP; +#endif + } else { + goto unexpected; + } + break; + case 3: + if (memcmp(feature_start, "aes", feature_length) == 0) { + #if CPUINFO_ARCH_ARM + processor->features2 |= CPUINFO_ARM_LINUX_FEATURE2_AES; + #elif CPUINFO_ARCH_ARM64 + processor->features |= CPUINFO_ARM_LINUX_FEATURE_AES; + #endif +#if CPUINFO_ARCH_ARM + } else if (memcmp(feature_start, "swp", feature_length) == 0) { + processor->features |= CPUINFO_ARM_LINUX_FEATURE_SWP; + } else if (memcmp(feature_start, "fpa", feature_length) == 0) { + processor->features |= CPUINFO_ARM_LINUX_FEATURE_FPA; + } else if (memcmp(feature_start, "vfp", feature_length) == 0) { + processor->features |= CPUINFO_ARM_LINUX_FEATURE_VFP; + } else if (memcmp(feature_start, "tls", feature_length) == 0) { + processor->features |= CPUINFO_ARM_LINUX_FEATURE_TLS; +#endif /* CPUINFO_ARCH_ARM */ + } else { + goto unexpected; + } + break; + case 4: + if (memcmp(feature_start, "sha1", feature_length) == 0) { + #if CPUINFO_ARCH_ARM + processor->features2 |= CPUINFO_ARM_LINUX_FEATURE2_SHA1; + #elif CPUINFO_ARCH_ARM64 + processor->features |= CPUINFO_ARM_LINUX_FEATURE_SHA1; + #endif + } else if (memcmp(feature_start, "sha2", feature_length) == 0) { + #if CPUINFO_ARCH_ARM + processor->features2 |= CPUINFO_ARM_LINUX_FEATURE2_SHA2; + #elif CPUINFO_ARCH_ARM64 + processor->features |= CPUINFO_ARM_LINUX_FEATURE_SHA2; + #endif + } else if (memcmp(feature_start, "fphp", feature_length) == 0) { + #if CPUINFO_ARCH_ARM64 + processor->features |= CPUINFO_ARM_LINUX_FEATURE_FPHP; + #endif + } else if (memcmp(feature_start, "fcma", feature_length) == 0) { + #if CPUINFO_ARCH_ARM64 + processor->features |= CPUINFO_ARM_LINUX_FEATURE_FCMA; + #endif +#if CPUINFO_ARCH_ARM + } else if (memcmp(feature_start, "half", feature_length) == 0) { + processor->features |= CPUINFO_ARM_LINUX_FEATURE_HALF; + } else if (memcmp(feature_start, "edsp", feature_length) == 0) { + processor->features |= CPUINFO_ARM_LINUX_FEATURE_EDSP; + } else if (memcmp(feature_start, "java", feature_length) == 0) { + processor->features |= CPUINFO_ARM_LINUX_FEATURE_JAVA; + } else if (memcmp(feature_start, "neon", feature_length) == 0) { + processor->features |= CPUINFO_ARM_LINUX_FEATURE_NEON; + } else if (memcmp(feature_start, "lpae", feature_length) == 0) { + processor->features |= CPUINFO_ARM_LINUX_FEATURE_LPAE; + } else if (memcmp(feature_start, "tlsi", feature_length) == 0) { + /* + * Some AArch64 kernels, including the one on Nexus 5X, + * erroneously report "tls" as "tlsi" to AArch32 programs + */ + processor->features |= CPUINFO_ARM_LINUX_FEATURE_TLS; +#endif /* CPUINFO_ARCH_ARM */ + } else { + goto unexpected; + } + break; + case 5: + if (memcmp(feature_start, "pmull", feature_length) == 0) { + #if CPUINFO_ARCH_ARM + processor->features2 |= CPUINFO_ARM_LINUX_FEATURE2_PMULL; + #elif CPUINFO_ARCH_ARM64 + processor->features |= CPUINFO_ARM_LINUX_FEATURE_PMULL; + #endif + } else if (memcmp(feature_start, "crc32", feature_length) == 0) { + #if CPUINFO_ARCH_ARM + processor->features2 |= CPUINFO_ARM_LINUX_FEATURE2_CRC32; + #elif CPUINFO_ARCH_ARM64 + processor->features |= CPUINFO_ARM_LINUX_FEATURE_CRC32; + #endif + } else if (memcmp(feature_start, "asimd", feature_length) == 0) { + #if CPUINFO_ARCH_ARM64 + processor->features |= CPUINFO_ARM_LINUX_FEATURE_ASIMD; + #endif + } else if (memcmp(feature_start, "cpuid", feature_length) == 0) { + #if CPUINFO_ARCH_ARM64 + processor->features |= CPUINFO_ARM_LINUX_FEATURE_CPUID; + #endif + } else if (memcmp(feature_start, "jscvt", feature_length) == 0) { + #if CPUINFO_ARCH_ARM64 + processor->features |= CPUINFO_ARM_LINUX_FEATURE_JSCVT; + #endif + } else if (memcmp(feature_start, "lrcpc", feature_length) == 0) { + #if CPUINFO_ARCH_ARM64 + processor->features |= CPUINFO_ARM_LINUX_FEATURE_LRCPC; + #endif +#if CPUINFO_ARCH_ARM + } else if (memcmp(feature_start, "thumb", feature_length) == 0) { + processor->features |= CPUINFO_ARM_LINUX_FEATURE_THUMB; + } else if (memcmp(feature_start, "26bit", feature_length) == 0) { + processor->features |= CPUINFO_ARM_LINUX_FEATURE_26BIT; + } else if (memcmp(feature_start, "vfpv3", feature_length) == 0) { + processor->features |= CPUINFO_ARM_LINUX_FEATURE_VFPV3; + } else if (memcmp(feature_start, "vfpv4", feature_length) == 0) { + processor->features |= CPUINFO_ARM_LINUX_FEATURE_VFPV4; + } else if (memcmp(feature_start, "idiva", feature_length) == 0) { + processor->features |= CPUINFO_ARM_LINUX_FEATURE_IDIVA; + } else if (memcmp(feature_start, "idivt", feature_length) == 0) { + processor->features |= CPUINFO_ARM_LINUX_FEATURE_IDIVT; +#endif /* CPUINFO_ARCH_ARM */ + } else { + goto unexpected; + } + break; +#if CPUINFO_ARCH_ARM + case 6: + if (memcmp(feature_start, "iwmmxt", feature_length) == 0) { + processor->features |= CPUINFO_ARM_LINUX_FEATURE_IWMMXT; + } else if (memcmp(feature_start, "crunch", feature_length) == 0) { + processor->features |= CPUINFO_ARM_LINUX_FEATURE_CRUNCH; + } else if (memcmp(feature_start, "vfpd32", feature_length) == 0) { + processor->features |= CPUINFO_ARM_LINUX_FEATURE_VFPD32; + } else { + goto unexpected; + } + break; +#endif /* CPUINFO_ARCH_ARM */ + case 7: + if (memcmp(feature_start, "evtstrm", feature_length) == 0) { + processor->features |= CPUINFO_ARM_LINUX_FEATURE_EVTSTRM; + } else if (memcmp(feature_start, "atomics", feature_length) == 0) { + #if CPUINFO_ARCH_ARM64 + processor->features |= CPUINFO_ARM_LINUX_FEATURE_ATOMICS; + #endif + } else if (memcmp(feature_start, "asimdhp", feature_length) == 0) { + #if CPUINFO_ARCH_ARM64 + processor->features |= CPUINFO_ARM_LINUX_FEATURE_ASIMDHP; + #endif +#if CPUINFO_ARCH_ARM + } else if (memcmp(feature_start, "thumbee", feature_length) == 0) { + processor->features |= CPUINFO_ARM_LINUX_FEATURE_THUMBEE; +#endif /* CPUINFO_ARCH_ARM */ + } else { + goto unexpected; + } + break; + case 8: + if (memcmp(feature_start, "asimdrdm", feature_length) == 0) { + #if CPUINFO_ARCH_ARM64 + processor->features |= CPUINFO_ARM_LINUX_FEATURE_ASIMDRDM; + #endif +#if CPUINFO_ARCH_ARM + } else if (memcmp(feature_start, "fastmult", feature_length) == 0) { + processor->features |= CPUINFO_ARM_LINUX_FEATURE_FASTMULT; + } else if (memcmp(feature_start, "vfpv3d16", feature_length) == 0) { + processor->features |= CPUINFO_ARM_LINUX_FEATURE_VFPV3D16; +#endif /* CPUINFO_ARCH_ARM */ + } else { + goto unexpected; + } + break; + default: + unexpected: + cpuinfo_log_warning("unexpected /proc/cpuinfo feature \"%.*s\" is ignored", + (int) feature_length, feature_start); + break; + } + feature_start = feature_end; + for (; feature_start != features_end; feature_start++) { + if (*feature_start != ' ') { + break; + } + } + } while (feature_start != feature_end); +} + +static void parse_cpu_architecture( + const char* cpu_architecture_start, + const char* cpu_architecture_end, + struct cpuinfo_arm_linux_processor processor[restrict static 1]) +{ + const size_t cpu_architecture_length = (size_t) (cpu_architecture_end - cpu_architecture_start); + /* Early AArch64 kernels report "CPU architecture: AArch64" instead of a numeric value 8 */ + if (cpu_architecture_length == 7) { + if (memcmp(cpu_architecture_start, "AArch64", cpu_architecture_length) == 0) { + processor->midr = midr_set_architecture(processor->midr, UINT32_C(0xF)); + processor->architecture_version = 8; + processor->flags |= CPUINFO_ARM_LINUX_VALID_ARCHITECTURE | CPUINFO_ARM_LINUX_VALID_PROCESSOR; + return; + } + } + + + uint32_t architecture = 0; + const char* cpu_architecture_ptr = cpu_architecture_start; + for (; cpu_architecture_ptr != cpu_architecture_end; cpu_architecture_ptr++) { + const uint32_t digit = (*cpu_architecture_ptr) - '0'; + + /* Verify that CPU architecture is a decimal number */ + if (digit >= 10) { + break; + } + + architecture = architecture * 10 + digit; + } + + if (cpu_architecture_ptr == cpu_architecture_start) { + cpuinfo_log_warning("CPU architecture %.*s in /proc/cpuinfo is ignored due to non-digit at the beginning of the string", + (int) cpu_architecture_length, cpu_architecture_start); + } else { + if (architecture != 0) { + processor->architecture_version = architecture; + processor->flags |= CPUINFO_ARM_LINUX_VALID_ARCHITECTURE | CPUINFO_ARM_LINUX_VALID_PROCESSOR; + + for (; cpu_architecture_ptr != cpu_architecture_end; cpu_architecture_ptr++) { + const char feature = *cpu_architecture_ptr; + switch (feature) { +#if CPUINFO_ARCH_ARM + case 'T': + processor->architecture_flags |= CPUINFO_ARM_LINUX_ARCH_T; + break; + case 'E': + processor->architecture_flags |= CPUINFO_ARM_LINUX_ARCH_E; + break; + case 'J': + processor->architecture_flags |= CPUINFO_ARM_LINUX_ARCH_J; + break; +#endif /* CPUINFO_ARCH_ARM */ + case ' ': + case '\t': + /* Ignore whitespace at the end */ + break; + default: + cpuinfo_log_warning("skipped unknown architectural feature '%c' for ARMv%"PRIu32, + feature, architecture); + break; + } + } + } else { + cpuinfo_log_warning("CPU architecture %.*s in /proc/cpuinfo is ignored due to invalid value (0)", + (int) cpu_architecture_length, cpu_architecture_start); + } + } + + uint32_t midr_architecture = UINT32_C(0xF); +#if CPUINFO_ARCH_ARM + switch (processor->architecture_version) { + case 6: + midr_architecture = UINT32_C(0x7); /* ARMv6 */ + break; + case 5: + if ((processor->architecture_flags & CPUINFO_ARM_LINUX_ARCH_TEJ) == CPUINFO_ARM_LINUX_ARCH_TEJ) { + midr_architecture = UINT32_C(0x6); /* ARMv5TEJ */ + } else if ((processor->architecture_flags & CPUINFO_ARM_LINUX_ARCH_TE) == CPUINFO_ARM_LINUX_ARCH_TE) { + midr_architecture = UINT32_C(0x5); /* ARMv5TE */ + } else { + midr_architecture = UINT32_C(0x4); /* ARMv5T */ + } + break; + } +#endif + processor->midr = midr_set_architecture(processor->midr, midr_architecture); +} + +static void parse_cpu_part( + const char* cpu_part_start, + const char* cpu_part_end, + struct cpuinfo_arm_linux_processor processor[restrict static 1]) +{ + const size_t cpu_part_length = (size_t) (cpu_part_end - cpu_part_start); + + /* + * CPU part should contain hex prefix (0x) and one to three hex digits. + * I have never seen less than three digits as a value of this field, + * but I don't think it is impossible to see such values in future. + * Value can not contain more than three hex digits since + * Main ID Register (MIDR) assigns only a 12-bit value for CPU part. + */ + if (cpu_part_length < 3 || cpu_part_length > 5) { + cpuinfo_log_warning("CPU part %.*s in /proc/cpuinfo is ignored due to unexpected length (%zu)", + (int) cpu_part_length, cpu_part_start, cpu_part_length); + return; + } + + /* Verify the presence of hex prefix */ + if (cpu_part_start[0] != '0' || cpu_part_start[1] != 'x') { + cpuinfo_log_warning("CPU part %.*s in /proc/cpuinfo is ignored due to lack of 0x prefix", + (int) cpu_part_length, cpu_part_start); + return; + } + + /* Verify that characters after hex prefix are hexadecimal digits and decode them */ + uint32_t cpu_part = 0; + for (const char* digit_ptr = cpu_part_start + 2; digit_ptr != cpu_part_end; digit_ptr++) { + const char digit_char = *digit_ptr; + uint32_t digit; + if (digit_char >= '0' && digit_char <= '9') { + digit = digit_char - '0'; + } else if ((uint32_t) (digit_char - 'A') < 6) { + digit = 10 + (digit_char - 'A'); + } else if ((uint32_t) (digit_char - 'a') < 6) { + digit = 10 + (digit_char - 'a'); + } else { + cpuinfo_log_warning("CPU part %.*s in /proc/cpuinfo is ignored due to unexpected non-hex character %c at offset %zu", + (int) cpu_part_length, cpu_part_start, digit_char, (size_t) (digit_ptr - cpu_part_start)); + return; + } + cpu_part = cpu_part * 16 + digit; + } + + processor->midr = midr_set_part(processor->midr, cpu_part); + processor->flags |= CPUINFO_ARM_LINUX_VALID_PART | CPUINFO_ARM_LINUX_VALID_PROCESSOR; +} + +static void parse_cpu_implementer( + const char* cpu_implementer_start, + const char* cpu_implementer_end, + struct cpuinfo_arm_linux_processor processor[restrict static 1]) +{ + const size_t cpu_implementer_length = cpu_implementer_end - cpu_implementer_start; + + /* + * Value should contain hex prefix (0x) and one or two hex digits. + * I have never seen single hex digit as a value of this field, + * but I don't think it is impossible in future. + * Value can not contain more than two hex digits since + * Main ID Register (MIDR) assigns only an 8-bit value for CPU implementer. + */ + switch (cpu_implementer_length) { + case 3: + case 4: + break; + default: + cpuinfo_log_warning("CPU implementer %.*s in /proc/cpuinfo is ignored due to unexpected length (%zu)", + (int) cpu_implementer_length, cpu_implementer_start, cpu_implementer_length); + return; + } + + /* Verify the presence of hex prefix */ + if (cpu_implementer_start[0] != '0' || cpu_implementer_start[1] != 'x') { + cpuinfo_log_warning("CPU implementer %.*s in /proc/cpuinfo is ignored due to lack of 0x prefix", + (int) cpu_implementer_length, cpu_implementer_start); + return; + } + + /* Verify that characters after hex prefix are hexadecimal digits and decode them */ + uint32_t cpu_implementer = 0; + for (const char* digit_ptr = cpu_implementer_start + 2; digit_ptr != cpu_implementer_end; digit_ptr++) { + const char digit_char = *digit_ptr; + uint32_t digit; + if (digit_char >= '0' && digit_char <= '9') { + digit = digit_char - '0'; + } else if ((uint32_t) (digit_char - 'A') < 6) { + digit = 10 + (digit_char - 'A'); + } else if ((uint32_t) (digit_char - 'a') < 6) { + digit = 10 + (digit_char - 'a'); + } else { + cpuinfo_log_warning("CPU implementer %.*s in /proc/cpuinfo is ignored due to unexpected non-hex character '%c' at offset %zu", + (int) cpu_implementer_length, cpu_implementer_start, digit_char, (size_t) (digit_ptr - cpu_implementer_start)); + return; + } + cpu_implementer = cpu_implementer * 16 + digit; + } + + processor->midr = midr_set_implementer(processor->midr, cpu_implementer); + processor->flags |= CPUINFO_ARM_LINUX_VALID_IMPLEMENTER | CPUINFO_ARM_LINUX_VALID_PROCESSOR; +} + +static void parse_cpu_variant( + const char* cpu_variant_start, + const char* cpu_variant_end, + struct cpuinfo_arm_linux_processor processor[restrict static 1]) +{ + const size_t cpu_variant_length = cpu_variant_end - cpu_variant_start; + + /* + * Value should contain hex prefix (0x) and one hex digit. + * Value can not contain more than one hex digits since + * Main ID Register (MIDR) assigns only a 4-bit value for CPU variant. + */ + if (cpu_variant_length != 3) { + cpuinfo_log_warning("CPU variant %.*s in /proc/cpuinfo is ignored due to unexpected length (%zu)", + (int) cpu_variant_length, cpu_variant_start, cpu_variant_length); + return; + } + + /* Skip if there is no hex prefix (0x) */ + if (cpu_variant_start[0] != '0' || cpu_variant_start[1] != 'x') { + cpuinfo_log_warning("CPU variant %.*s in /proc/cpuinfo is ignored due to lack of 0x prefix", + (int) cpu_variant_length, cpu_variant_start); + return; + } + + /* Check if the value after hex prefix is indeed a hex digit and decode it. */ + const char digit_char = cpu_variant_start[2]; + uint32_t cpu_variant; + if ((uint32_t) (digit_char - '0') < 10) { + cpu_variant = (uint32_t) (digit_char - '0'); + } else if ((uint32_t) (digit_char - 'A') < 6) { + cpu_variant = 10 + (uint32_t) (digit_char - 'A'); + } else if ((uint32_t) (digit_char - 'a') < 6) { + cpu_variant = 10 + (uint32_t) (digit_char - 'a'); + } else { + cpuinfo_log_warning("CPU variant %.*s in /proc/cpuinfo is ignored due to unexpected non-hex character '%c'", + (int) cpu_variant_length, cpu_variant_start, digit_char); + return; + } + + processor->midr = midr_set_variant(processor->midr, cpu_variant); + processor->flags |= CPUINFO_ARM_LINUX_VALID_VARIANT | CPUINFO_ARM_LINUX_VALID_PROCESSOR; +} + +static void parse_cpu_revision( + const char* cpu_revision_start, + const char* cpu_revision_end, + struct cpuinfo_arm_linux_processor processor[restrict static 1]) +{ + uint32_t cpu_revision = 0; + for (const char* digit_ptr = cpu_revision_start; digit_ptr != cpu_revision_end; digit_ptr++) { + const uint32_t digit = (uint32_t) (*digit_ptr - '0'); + + /* Verify that the character in CPU revision is a decimal digit */ + if (digit >= 10) { + cpuinfo_log_warning("CPU revision %.*s in /proc/cpuinfo is ignored due to unexpected non-digit character '%c' at offset %zu", + (int) (cpu_revision_end - cpu_revision_start), cpu_revision_start, + *digit_ptr, (size_t) (digit_ptr - cpu_revision_start)); + return; + } + + cpu_revision = cpu_revision * 10 + digit; + } + + processor->midr = midr_set_revision(processor->midr, cpu_revision); + processor->flags |= CPUINFO_ARM_LINUX_VALID_REVISION | CPUINFO_ARM_LINUX_VALID_PROCESSOR; +} + +#if CPUINFO_ARCH_ARM +/* + * Decode one of the cache-related numbers reported by Linux kernel + * for pre-ARMv7 architecture. + * An example cache-related information in /proc/cpuinfo: + * + * I size : 32768 + * I assoc : 4 + * I line length : 32 + * I sets : 256 + * D size : 16384 + * D assoc : 4 + * D line length : 32 + * D sets : 128 + * + */ +static void parse_cache_number( + const char* number_start, + const char* number_end, + const char* number_name, + uint32_t number_ptr[restrict static 1], + uint32_t flags[restrict static 1], + uint32_t number_mask) +{ + uint32_t number = 0; + for (const char* digit_ptr = number_start; digit_ptr != number_end; digit_ptr++) { + const uint32_t digit = *digit_ptr - '0'; + if (digit >= 10) { + cpuinfo_log_warning("%s %.*s in /proc/cpuinfo is ignored due to unexpected non-digit character '%c' at offset %zu", + number_name, (int) (number_end - number_start), number_start, + *digit_ptr, (size_t) (digit_ptr - number_start)); + return; + } + + number = number * 10 + digit; + } + + if (number == 0) { + cpuinfo_log_warning("%s %.*s in /proc/cpuinfo is ignored due to invalid value of zero reported by the kernel", + number_name, (int) (number_end - number_start), number_start); + } + + /* If the number specifies a cache line size, verify that is a reasonable power of 2 */ + if (number_mask & CPUINFO_ARM_LINUX_VALID_CACHE_LINE) { + switch (number) { + case 16: + case 32: + case 64: + case 128: + break; + default: + cpuinfo_log_warning("invalid %s %.*s is ignored: a value of 16, 32, 64, or 128 expected", + number_name, (int) (number_end - number_start), number_start); + } + } + + *number_ptr = number; + *flags |= number_mask | CPUINFO_ARM_LINUX_VALID_PROCESSOR; +} +#endif /* CPUINFO_ARCH_ARM */ + +struct proc_cpuinfo_parser_state { + char* hardware; + char* revision; + uint32_t processor_index; + uint32_t max_processors_count; + struct cpuinfo_arm_linux_processor* processors; + struct cpuinfo_arm_linux_processor dummy_processor; +}; + +/* + * Decode a single line of /proc/cpuinfo information. + * Lines have format [ ]*:[ ] + * An example of /proc/cpuinfo (from Pandaboard-ES): + * + * Processor : ARMv7 Processor rev 10 (v7l) + * processor : 0 + * BogoMIPS : 1392.74 + * + * processor : 1 + * BogoMIPS : 1363.33 + * + * Features : swp half thumb fastmult vfp edsp thumbee neon vfpv3 + * CPU implementer : 0x41 + * CPU architecture: 7 + * CPU variant : 0x2 + * CPU part : 0xc09 + * CPU revision : 10 + * + * Hardware : OMAP4 Panda board + * Revision : 0020 + * Serial : 0000000000000000 + */ +static bool parse_line( + const char* line_start, + const char* line_end, + struct proc_cpuinfo_parser_state state[restrict static 1], + uint64_t line_number) +{ + /* Empty line. Skip. */ + if (line_start == line_end) { + return true; + } + + /* Search for ':' on the line. */ + const char* separator = line_start; + for (; separator != line_end; separator++) { + if (*separator == ':') { + break; + } + } + /* Skip line if no ':' separator was found. */ + if (separator == line_end) { + cpuinfo_log_info("Line %.*s in /proc/cpuinfo is ignored: key/value separator ':' not found", + (int) (line_end - line_start), line_start); + return true; + } + + /* Skip trailing spaces in key part. */ + const char* key_end = separator; + for (; key_end != line_start; key_end--) { + if (key_end[-1] != ' ' && key_end[-1] != '\t') { + break; + } + } + /* Skip line if key contains nothing but spaces. */ + if (key_end == line_start) { + cpuinfo_log_info("Line %.*s in /proc/cpuinfo is ignored: key contains only spaces", + (int) (line_end - line_start), line_start); + return true; + } + + /* Skip leading spaces in value part. */ + const char* value_start = separator + 1; + for (; value_start != line_end; value_start++) { + if (*value_start != ' ') { + break; + } + } + /* Value part contains nothing but spaces. Skip line. */ + if (value_start == line_end) { + cpuinfo_log_info("Line %.*s in /proc/cpuinfo is ignored: value contains only spaces", + (int) (line_end - line_start), line_start); + return true; + } + + /* Skip trailing spaces in value part (if any) */ + const char* value_end = line_end; + for (; value_end != value_start; value_end--) { + if (value_end[-1] != ' ') { + break; + } + } + + const uint32_t processor_index = state->processor_index; + const uint32_t max_processors_count = state->max_processors_count; + struct cpuinfo_arm_linux_processor* processors = state->processors; + struct cpuinfo_arm_linux_processor* processor = &state->dummy_processor; + if (processor_index < max_processors_count) { + processor = &processors[processor_index]; + } + + const size_t key_length = key_end - line_start; + switch (key_length) { + case 6: + if (memcmp(line_start, "Serial", key_length) == 0) { + /* Usually contains just zeros, useless */ +#if CPUINFO_ARCH_ARM + } else if (memcmp(line_start, "I size", key_length) == 0) { + parse_cache_number(value_start, value_end, + "instruction cache size", &processor->proc_cpuinfo_cache.i_size, + &processor->flags, CPUINFO_ARM_LINUX_VALID_ICACHE_SIZE); + } else if (memcmp(line_start, "I sets", key_length) == 0) { + parse_cache_number(value_start, value_end, + "instruction cache sets", &processor->proc_cpuinfo_cache.i_sets, + &processor->flags, CPUINFO_ARM_LINUX_VALID_ICACHE_SETS); + } else if (memcmp(line_start, "D size", key_length) == 0) { + parse_cache_number(value_start, value_end, + "data cache size", &processor->proc_cpuinfo_cache.d_size, + &processor->flags, CPUINFO_ARM_LINUX_VALID_DCACHE_SIZE); + } else if (memcmp(line_start, "D sets", key_length) == 0) { + parse_cache_number(value_start, value_end, + "data cache sets", &processor->proc_cpuinfo_cache.d_sets, + &processor->flags, CPUINFO_ARM_LINUX_VALID_DCACHE_SETS); +#endif /* CPUINFO_ARCH_ARM */ + } else { + goto unknown; + } + break; +#if CPUINFO_ARCH_ARM + case 7: + if (memcmp(line_start, "I assoc", key_length) == 0) { + parse_cache_number(value_start, value_end, + "instruction cache associativity", &processor->proc_cpuinfo_cache.i_assoc, + &processor->flags, CPUINFO_ARM_LINUX_VALID_ICACHE_WAYS); + } else if (memcmp(line_start, "D assoc", key_length) == 0) { + parse_cache_number(value_start, value_end, + "data cache associativity", &processor->proc_cpuinfo_cache.d_assoc, + &processor->flags, CPUINFO_ARM_LINUX_VALID_DCACHE_WAYS); + } else { + goto unknown; + } + break; +#endif /* CPUINFO_ARCH_ARM */ + case 8: + if (memcmp(line_start, "CPU part", key_length) == 0) { + parse_cpu_part(value_start, value_end, processor); + } else if (memcmp(line_start, "Features", key_length) == 0) { + parse_features(value_start, value_end, processor); + } else if (memcmp(line_start, "BogoMIPS", key_length) == 0) { + /* BogoMIPS is useless, don't parse */ + } else if (memcmp(line_start, "Hardware", key_length) == 0) { + size_t value_length = value_end - value_start; + if (value_length > CPUINFO_HARDWARE_VALUE_MAX) { + cpuinfo_log_info( + "length of Hardware value \"%.*s\" in /proc/cpuinfo exceeds limit (%d): truncating to the limit", + (int) value_length, value_start, CPUINFO_HARDWARE_VALUE_MAX); + value_length = CPUINFO_HARDWARE_VALUE_MAX; + } else { + state->hardware[value_length] = '\0'; + } + memcpy(state->hardware, value_start, value_length); + cpuinfo_log_debug("parsed /proc/cpuinfo Hardware = \"%.*s\"", (int) value_length, value_start); + } else if (memcmp(line_start, "Revision", key_length) == 0) { + size_t value_length = value_end - value_start; + if (value_length > CPUINFO_REVISION_VALUE_MAX) { + cpuinfo_log_info( + "length of Revision value \"%.*s\" in /proc/cpuinfo exceeds limit (%d): truncating to the limit", + (int) value_length, value_start, CPUINFO_REVISION_VALUE_MAX); + value_length = CPUINFO_REVISION_VALUE_MAX; + } else { + state->revision[value_length] = '\0'; + } + memcpy(state->revision, value_start, value_length); + cpuinfo_log_debug("parsed /proc/cpuinfo Revision = \"%.*s\"", (int) value_length, value_start); + } else { + goto unknown; + } + break; + case 9: + if (memcmp(line_start, "processor", key_length) == 0) { + const uint32_t new_processor_index = parse_processor_number(value_start, value_end); + if (new_processor_index < processor_index) { + /* Strange: decreasing processor number */ + cpuinfo_log_warning( + "unexpectedly low processor number %"PRIu32" following processor %"PRIu32" in /proc/cpuinfo", + new_processor_index, processor_index); + } else if (new_processor_index > processor_index + 1) { + /* Strange, but common: skipped processor $(processor_index + 1) */ + cpuinfo_log_info( + "unexpectedly high processor number %"PRIu32" following processor %"PRIu32" in /proc/cpuinfo", + new_processor_index, processor_index); + } + if (new_processor_index < max_processors_count) { + /* Record that the processor was mentioned in /proc/cpuinfo */ + processors[new_processor_index].flags |= CPUINFO_ARM_LINUX_VALID_PROCESSOR; + } else { + /* Log and ignore processor */ + cpuinfo_log_warning("processor %"PRIu32" in /proc/cpuinfo is ignored: index exceeds system limit %"PRIu32, + new_processor_index, max_processors_count - 1); + } + state->processor_index = new_processor_index; + return true; + } else if (memcmp(line_start, "Processor", key_length) == 0) { + /* TODO: parse to fix misreported architecture, similar to Android's cpufeatures */ + } else { + goto unknown; + } + break; + case 11: + if (memcmp(line_start, "CPU variant", key_length) == 0) { + parse_cpu_variant(value_start, value_end, processor); + } else { + goto unknown; + } + break; + case 12: + if (memcmp(line_start, "CPU revision", key_length) == 0) { + parse_cpu_revision(value_start, value_end, processor); + } else { + goto unknown; + } + break; +#if CPUINFO_ARCH_ARM + case 13: + if (memcmp(line_start, "I line length", key_length) == 0) { + parse_cache_number(value_start, value_end, + "instruction cache line size", &processor->proc_cpuinfo_cache.i_line_length, + &processor->flags, CPUINFO_ARM_LINUX_VALID_ICACHE_LINE); + } else if (memcmp(line_start, "D line length", key_length) == 0) { + parse_cache_number(value_start, value_end, + "data cache line size", &processor->proc_cpuinfo_cache.d_line_length, + &processor->flags, CPUINFO_ARM_LINUX_VALID_DCACHE_LINE); + } else { + goto unknown; + } + break; +#endif /* CPUINFO_ARCH_ARM */ + case 15: + if (memcmp(line_start, "CPU implementer", key_length) == 0) { + parse_cpu_implementer(value_start, value_end, processor); + } else if (memcmp(line_start, "CPU implementor", key_length) == 0) { + parse_cpu_implementer(value_start, value_end, processor); + } else { + goto unknown; + } + break; + case 16: + if (memcmp(line_start, "CPU architecture", key_length) == 0) { + parse_cpu_architecture(value_start, value_end, processor); + } else { + goto unknown; + } + break; + default: + unknown: + cpuinfo_log_debug("unknown /proc/cpuinfo key: %.*s", (int) key_length, line_start); + + } + return true; +} + +bool cpuinfo_arm_linux_parse_proc_cpuinfo( + char hardware[restrict static CPUINFO_HARDWARE_VALUE_MAX], + char revision[restrict static CPUINFO_REVISION_VALUE_MAX], + uint32_t max_processors_count, + struct cpuinfo_arm_linux_processor processors[restrict static max_processors_count]) +{ + struct proc_cpuinfo_parser_state state = { + .hardware = hardware, + .revision = revision, + .processor_index = 0, + .max_processors_count = max_processors_count, + .processors = processors, + }; + return cpuinfo_linux_parse_multiline_file("/proc/cpuinfo", BUFFER_SIZE, + (cpuinfo_line_callback) parse_line, &state); +} diff --git a/3rdparty/cpuinfo/src/arm/linux/hwcap.c b/3rdparty/cpuinfo/src/arm/linux/hwcap.c new file mode 100644 index 000000000..35e9994f6 --- /dev/null +++ b/3rdparty/cpuinfo/src/arm/linux/hwcap.c @@ -0,0 +1,159 @@ +#include + +#include +#include +#include +#include +#include +#include +#include + +#if CPUINFO_MOCK + #include +#endif +#include +#include +#include + +#if CPUINFO_ARCH_ARM64 || CPUINFO_ARCH_ARM && !defined(__ANDROID__) + #include +#else + #define AT_HWCAP 16 + #define AT_HWCAP2 26 +#endif + + +#if CPUINFO_MOCK + static uint32_t mock_hwcap = 0; + void cpuinfo_set_hwcap(uint32_t hwcap) { + mock_hwcap = hwcap; + } + + static uint32_t mock_hwcap2 = 0; + void cpuinfo_set_hwcap2(uint32_t hwcap2) { + mock_hwcap2 = hwcap2; + } +#endif + + +#if CPUINFO_ARCH_ARM + typedef unsigned long (*getauxval_function_t)(unsigned long); + + bool cpuinfo_arm_linux_hwcap_from_getauxval( + uint32_t hwcap[restrict static 1], + uint32_t hwcap2[restrict static 1]) + { + #if CPUINFO_MOCK + *hwcap = mock_hwcap; + *hwcap2 = mock_hwcap2; + return true; + #elif defined(__ANDROID__) + /* Android: dynamically check if getauxval is supported */ + void* libc = NULL; + getauxval_function_t getauxval = NULL; + + dlerror(); + libc = dlopen("libc.so", RTLD_LAZY); + if (libc == NULL) { + cpuinfo_log_warning("failed to load libc.so: %s", dlerror()); + goto cleanup; + } + + getauxval = (getauxval_function_t) dlsym(libc, "getauxval"); + if (getauxval == NULL) { + cpuinfo_log_info("failed to locate getauxval in libc.so: %s", dlerror()); + goto cleanup; + } + + *hwcap = getauxval(AT_HWCAP); + *hwcap2 = getauxval(AT_HWCAP2); + + cleanup: + if (libc != NULL) { + dlclose(libc); + libc = NULL; + } + return getauxval != NULL; + #else + /* GNU/Linux: getauxval is always supported */ + *hwcap = getauxval(AT_HWCAP); + *hwcap2 = getauxval(AT_HWCAP2); + return true; + #endif + } + + #ifdef __ANDROID__ + bool cpuinfo_arm_linux_hwcap_from_procfs( + uint32_t hwcap[restrict static 1], + uint32_t hwcap2[restrict static 1]) + { + #if CPUINFO_MOCK + *hwcap = mock_hwcap; + *hwcap2 = mock_hwcap2; + return true; + #else + uint32_t hwcaps[2] = { 0, 0 }; + bool result = false; + int file = -1; + + file = open("/proc/self/auxv", O_RDONLY); + if (file == -1) { + cpuinfo_log_warning("failed to open /proc/self/auxv: %s", strerror(errno)); + goto cleanup; + } + + ssize_t bytes_read; + do { + Elf32_auxv_t elf_auxv; + bytes_read = read(file, &elf_auxv, sizeof(Elf32_auxv_t)); + if (bytes_read < 0) { + cpuinfo_log_warning("failed to read /proc/self/auxv: %s", strerror(errno)); + goto cleanup; + } else if (bytes_read > 0) { + if (bytes_read == sizeof(elf_auxv)) { + switch (elf_auxv.a_type) { + case AT_HWCAP: + hwcaps[0] = (uint32_t) elf_auxv.a_un.a_val; + break; + case AT_HWCAP2: + hwcaps[1] = (uint32_t) elf_auxv.a_un.a_val; + break; + } + } else { + cpuinfo_log_warning( + "failed to read %zu bytes from /proc/self/auxv: %zu bytes available", + sizeof(elf_auxv), (size_t) bytes_read); + goto cleanup; + } + } + } while (bytes_read == sizeof(Elf32_auxv_t)); + + /* Success, commit results */ + *hwcap = hwcaps[0]; + *hwcap2 = hwcaps[1]; + result = true; + + cleanup: + if (file != -1) { + close(file); + file = -1; + } + return result; + #endif + } + #endif /* __ANDROID__ */ +#elif CPUINFO_ARCH_ARM64 + void cpuinfo_arm_linux_hwcap_from_getauxval( + uint32_t hwcap[restrict static 1], + uint32_t hwcap2[restrict static 1]) + { + #if CPUINFO_MOCK + *hwcap = mock_hwcap; + *hwcap2 = mock_hwcap2; + #else + *hwcap = (uint32_t) getauxval(AT_HWCAP); + *hwcap2 = (uint32_t) getauxval(AT_HWCAP2); + return ; + #endif + } +#endif diff --git a/3rdparty/cpuinfo/src/arm/linux/init.c b/3rdparty/cpuinfo/src/arm/linux/init.c new file mode 100644 index 000000000..d3da5a9d2 --- /dev/null +++ b/3rdparty/cpuinfo/src/arm/linux/init.c @@ -0,0 +1,765 @@ +#include +#include +#include +#include + +#include +#include +#if defined(__ANDROID__) + #include +#endif +#include +#include +#include +#include +#include + + +struct cpuinfo_arm_isa cpuinfo_isa = { 0 }; + +static struct cpuinfo_package package = { { 0 } }; + +static inline bool bitmask_all(uint32_t bitfield, uint32_t mask) { + return (bitfield & mask) == mask; +} + +static inline uint32_t min(uint32_t a, uint32_t b) { + return a < b ? a : b; +} + +static inline int cmp(uint32_t a, uint32_t b) { + return (a > b) - (a < b); +} + +static bool cluster_siblings_parser( + uint32_t processor, uint32_t siblings_start, uint32_t siblings_end, + struct cpuinfo_arm_linux_processor* processors) +{ + processors[processor].flags |= CPUINFO_LINUX_FLAG_PACKAGE_CLUSTER; + uint32_t package_leader_id = processors[processor].package_leader_id; + + for (uint32_t sibling = siblings_start; sibling < siblings_end; sibling++) { + if (!bitmask_all(processors[sibling].flags, CPUINFO_LINUX_FLAG_VALID)) { + cpuinfo_log_info("invalid processor %"PRIu32" reported as a sibling for processor %"PRIu32, + sibling, processor); + continue; + } + + const uint32_t sibling_package_leader_id = processors[sibling].package_leader_id; + if (sibling_package_leader_id < package_leader_id) { + package_leader_id = sibling_package_leader_id; + } + + processors[sibling].package_leader_id = package_leader_id; + processors[sibling].flags |= CPUINFO_LINUX_FLAG_PACKAGE_CLUSTER; + } + + processors[processor].package_leader_id = package_leader_id; + + return true; +} + +static int cmp_arm_linux_processor(const void* ptr_a, const void* ptr_b) { + const struct cpuinfo_arm_linux_processor* processor_a = (const struct cpuinfo_arm_linux_processor*) ptr_a; + const struct cpuinfo_arm_linux_processor* processor_b = (const struct cpuinfo_arm_linux_processor*) ptr_b; + + /* Move usable processors towards the start of the array */ + const bool usable_a = bitmask_all(processor_a->flags, CPUINFO_LINUX_FLAG_VALID); + const bool usable_b = bitmask_all(processor_b->flags, CPUINFO_LINUX_FLAG_VALID); + if (usable_a != usable_b) { + return (int) usable_b - (int) usable_a; + } + + /* Compare based on core type (e.g. Cortex-A57 < Cortex-A53) */ + const uint32_t midr_a = processor_a->midr; + const uint32_t midr_b = processor_b->midr; + if (midr_a != midr_b) { + const uint32_t score_a = midr_score_core(midr_a); + const uint32_t score_b = midr_score_core(midr_b); + if (score_a != score_b) { + return score_a > score_b ? -1 : 1; + } + } + + /* Compare based on core frequency (e.g. 2.0 GHz < 1.2 GHz) */ + const uint32_t frequency_a = processor_a->max_frequency; + const uint32_t frequency_b = processor_b->max_frequency; + if (frequency_a != frequency_b) { + return frequency_a > frequency_b ? -1 : 1; + } + + /* Compare based on cluster leader id (i.e. cluster 1 < cluster 0) */ + const uint32_t cluster_a = processor_a->package_leader_id; + const uint32_t cluster_b = processor_b->package_leader_id; + if (cluster_a != cluster_b) { + return cluster_a > cluster_b ? -1 : 1; + } + + /* Compare based on system processor id (i.e. processor 0 < processor 1) */ + const uint32_t id_a = processor_a->system_processor_id; + const uint32_t id_b = processor_b->system_processor_id; + return cmp(id_a, id_b); +} + +void cpuinfo_arm_linux_init(void) { + struct cpuinfo_arm_linux_processor* arm_linux_processors = NULL; + struct cpuinfo_processor* processors = NULL; + struct cpuinfo_core* cores = NULL; + struct cpuinfo_cluster* clusters = NULL; + struct cpuinfo_uarch_info* uarchs = NULL; + struct cpuinfo_cache* l1i = NULL; + struct cpuinfo_cache* l1d = NULL; + struct cpuinfo_cache* l2 = NULL; + struct cpuinfo_cache* l3 = NULL; + const struct cpuinfo_processor** linux_cpu_to_processor_map = NULL; + const struct cpuinfo_core** linux_cpu_to_core_map = NULL; + uint32_t* linux_cpu_to_uarch_index_map = NULL; + + const uint32_t max_processors_count = cpuinfo_linux_get_max_processors_count(); + cpuinfo_log_debug("system maximum processors count: %"PRIu32, max_processors_count); + + const uint32_t max_possible_processors_count = 1 + + cpuinfo_linux_get_max_possible_processor(max_processors_count); + cpuinfo_log_debug("maximum possible processors count: %"PRIu32, max_possible_processors_count); + const uint32_t max_present_processors_count = 1 + + cpuinfo_linux_get_max_present_processor(max_processors_count); + cpuinfo_log_debug("maximum present processors count: %"PRIu32, max_present_processors_count); + + uint32_t valid_processor_mask = 0; + uint32_t arm_linux_processors_count = max_processors_count; + if (max_present_processors_count != 0) { + arm_linux_processors_count = min(arm_linux_processors_count, max_present_processors_count); + valid_processor_mask = CPUINFO_LINUX_FLAG_PRESENT; + } + if (max_possible_processors_count != 0) { + arm_linux_processors_count = min(arm_linux_processors_count, max_possible_processors_count); + valid_processor_mask |= CPUINFO_LINUX_FLAG_POSSIBLE; + } + if ((max_present_processors_count | max_possible_processors_count) == 0) { + cpuinfo_log_error("failed to parse both lists of possible and present processors"); + return; + } + + arm_linux_processors = calloc(arm_linux_processors_count, sizeof(struct cpuinfo_arm_linux_processor)); + if (arm_linux_processors == NULL) { + cpuinfo_log_error( + "failed to allocate %zu bytes for descriptions of %"PRIu32" ARM logical processors", + arm_linux_processors_count * sizeof(struct cpuinfo_arm_linux_processor), + arm_linux_processors_count); + return; + } + + if (max_possible_processors_count) { + cpuinfo_linux_detect_possible_processors( + arm_linux_processors_count, &arm_linux_processors->flags, + sizeof(struct cpuinfo_arm_linux_processor), + CPUINFO_LINUX_FLAG_POSSIBLE); + } + + if (max_present_processors_count) { + cpuinfo_linux_detect_present_processors( + arm_linux_processors_count, &arm_linux_processors->flags, + sizeof(struct cpuinfo_arm_linux_processor), + CPUINFO_LINUX_FLAG_PRESENT); + } + +#if defined(__ANDROID__) + struct cpuinfo_android_properties android_properties; + cpuinfo_arm_android_parse_properties(&android_properties); +#else + char proc_cpuinfo_hardware[CPUINFO_HARDWARE_VALUE_MAX]; +#endif + char proc_cpuinfo_revision[CPUINFO_REVISION_VALUE_MAX]; + + if (!cpuinfo_arm_linux_parse_proc_cpuinfo( +#if defined(__ANDROID__) + android_properties.proc_cpuinfo_hardware, +#else + proc_cpuinfo_hardware, +#endif + proc_cpuinfo_revision, + arm_linux_processors_count, + arm_linux_processors)) { + cpuinfo_log_error("failed to parse processor information from /proc/cpuinfo"); + return; + } + + for (uint32_t i = 0; i < arm_linux_processors_count; i++) { + if (bitmask_all(arm_linux_processors[i].flags, valid_processor_mask)) { + arm_linux_processors[i].flags |= CPUINFO_LINUX_FLAG_VALID; + cpuinfo_log_debug("parsed processor %"PRIu32" MIDR 0x%08"PRIx32, + i, arm_linux_processors[i].midr); + } + } + + uint32_t valid_processors = 0, last_midr = 0; + #if CPUINFO_ARCH_ARM + uint32_t last_architecture_version = 0, last_architecture_flags = 0; + #endif + for (uint32_t i = 0; i < arm_linux_processors_count; i++) { + arm_linux_processors[i].system_processor_id = i; + if (bitmask_all(arm_linux_processors[i].flags, CPUINFO_LINUX_FLAG_VALID)) { + valid_processors += 1; + + if (!(arm_linux_processors[i].flags & CPUINFO_ARM_LINUX_VALID_PROCESSOR)) { + /* + * Processor is in possible and present lists, but not reported in /proc/cpuinfo. + * This is fairly common: high-index processors can be not reported if they are offline. + */ + cpuinfo_log_info("processor %"PRIu32" is not listed in /proc/cpuinfo", i); + } + + if (bitmask_all(arm_linux_processors[i].flags, CPUINFO_ARM_LINUX_VALID_MIDR)) { + last_midr = arm_linux_processors[i].midr; + } + #if CPUINFO_ARCH_ARM + if (bitmask_all(arm_linux_processors[i].flags, CPUINFO_ARM_LINUX_VALID_ARCHITECTURE)) { + last_architecture_version = arm_linux_processors[i].architecture_version; + last_architecture_flags = arm_linux_processors[i].architecture_flags; + } + #endif + } else { + /* Processor reported in /proc/cpuinfo, but not in possible and/or present lists: log and ignore */ + if (!(arm_linux_processors[i].flags & CPUINFO_ARM_LINUX_VALID_PROCESSOR)) { + cpuinfo_log_warning("invalid processor %"PRIu32" reported in /proc/cpuinfo", i); + } + } + } + +#if defined(__ANDROID__) + const struct cpuinfo_arm_chipset chipset = + cpuinfo_arm_android_decode_chipset(&android_properties, valid_processors, 0); +#else + const struct cpuinfo_arm_chipset chipset = + cpuinfo_arm_linux_decode_chipset(proc_cpuinfo_hardware, proc_cpuinfo_revision, valid_processors, 0); +#endif + + #if CPUINFO_ARCH_ARM + uint32_t isa_features = 0, isa_features2 = 0; + #ifdef __ANDROID__ + /* + * On Android before API 20, libc.so does not provide getauxval function. + * Thus, we try to dynamically find it, or use two fallback mechanisms: + * 1. dlopen libc.so, and try to find getauxval + * 2. Parse /proc/self/auxv procfs file + * 3. Use features reported in /proc/cpuinfo + */ + if (!cpuinfo_arm_linux_hwcap_from_getauxval(&isa_features, &isa_features2)) { + /* getauxval can't be used, fall back to parsing /proc/self/auxv */ + if (!cpuinfo_arm_linux_hwcap_from_procfs(&isa_features, &isa_features2)) { + /* + * Reading /proc/self/auxv failed, probably due to file permissions. + * Use information from /proc/cpuinfo to detect ISA. + * + * If different processors report different ISA features, take the intersection. + */ + uint32_t processors_with_features = 0; + for (uint32_t i = 0; i < arm_linux_processors_count; i++) { + if (bitmask_all(arm_linux_processors[i].flags, CPUINFO_LINUX_FLAG_VALID | CPUINFO_ARM_LINUX_VALID_FEATURES)) { + if (processors_with_features == 0) { + isa_features = arm_linux_processors[i].features; + isa_features2 = arm_linux_processors[i].features2; + } else { + isa_features &= arm_linux_processors[i].features; + isa_features2 &= arm_linux_processors[i].features2; + } + processors_with_features += 1; + } + } + } + } + #else + /* On GNU/Linux getauxval is always available */ + cpuinfo_arm_linux_hwcap_from_getauxval(&isa_features, &isa_features2); + #endif + cpuinfo_arm_linux_decode_isa_from_proc_cpuinfo( + isa_features, isa_features2, + last_midr, last_architecture_version, last_architecture_flags, + &chipset, &cpuinfo_isa); + #elif CPUINFO_ARCH_ARM64 + uint32_t isa_features = 0, isa_features2 = 0; + /* getauxval is always available on ARM64 Android */ + cpuinfo_arm_linux_hwcap_from_getauxval(&isa_features, &isa_features2); + cpuinfo_arm64_linux_decode_isa_from_proc_cpuinfo( + isa_features, isa_features2, last_midr, &chipset, &cpuinfo_isa); + #endif + + /* Detect min/max frequency and package ID */ + for (uint32_t i = 0; i < arm_linux_processors_count; i++) { + if (bitmask_all(arm_linux_processors[i].flags, CPUINFO_LINUX_FLAG_VALID)) { + const uint32_t max_frequency = cpuinfo_linux_get_processor_max_frequency(i); + if (max_frequency != 0) { + arm_linux_processors[i].max_frequency = max_frequency; + arm_linux_processors[i].flags |= CPUINFO_LINUX_FLAG_MAX_FREQUENCY; + } + + const uint32_t min_frequency = cpuinfo_linux_get_processor_min_frequency(i); + if (min_frequency != 0) { + arm_linux_processors[i].min_frequency = min_frequency; + arm_linux_processors[i].flags |= CPUINFO_LINUX_FLAG_MIN_FREQUENCY; + } + + if (cpuinfo_linux_get_processor_package_id(i, &arm_linux_processors[i].package_id)) { + arm_linux_processors[i].flags |= CPUINFO_LINUX_FLAG_PACKAGE_ID; + } + } + } + + /* Initialize topology group IDs */ + for (uint32_t i = 0; i < arm_linux_processors_count; i++) { + arm_linux_processors[i].package_leader_id = i; + } + + /* Propagate topology group IDs among siblings */ + for (uint32_t i = 0; i < arm_linux_processors_count; i++) { + if (!bitmask_all(arm_linux_processors[i].flags, CPUINFO_LINUX_FLAG_VALID)) { + continue; + } + + if (arm_linux_processors[i].flags & CPUINFO_LINUX_FLAG_PACKAGE_ID) { + cpuinfo_linux_detect_core_siblings( + arm_linux_processors_count, i, + (cpuinfo_siblings_callback) cluster_siblings_parser, + arm_linux_processors); + } + } + + /* Propagate all cluster IDs */ + uint32_t clustered_processors = 0; + for (uint32_t i = 0; i < arm_linux_processors_count; i++) { + if (bitmask_all(arm_linux_processors[i].flags, CPUINFO_LINUX_FLAG_VALID | CPUINFO_LINUX_FLAG_PACKAGE_CLUSTER)) { + clustered_processors += 1; + + const uint32_t package_leader_id = arm_linux_processors[i].package_leader_id; + if (package_leader_id < i) { + arm_linux_processors[i].package_leader_id = arm_linux_processors[package_leader_id].package_leader_id; + } + + cpuinfo_log_debug("processor %"PRIu32" clustered with processor %"PRIu32" as inferred from system siblings lists", + i, arm_linux_processors[i].package_leader_id); + } + } + + if (clustered_processors != valid_processors) { + /* + * Topology information about some or all logical processors may be unavailable, for the following reasons: + * - Linux kernel is too old, or configured without support for topology information in sysfs. + * - Core is offline, and Linux kernel is configured to not report topology for offline cores. + * + * In this case, we assign processors to clusters using two methods: + * - Try heuristic cluster configurations (e.g. 6-core SoC usually has 4+2 big.LITTLE configuration). + * - If heuristic failed, assign processors to core clusters in a sequential scan. + */ + if (!cpuinfo_arm_linux_detect_core_clusters_by_heuristic(valid_processors, arm_linux_processors_count, arm_linux_processors)) { + cpuinfo_arm_linux_detect_core_clusters_by_sequential_scan(arm_linux_processors_count, arm_linux_processors); + } + } + + cpuinfo_arm_linux_count_cluster_processors(arm_linux_processors_count, arm_linux_processors); + + const uint32_t cluster_count = cpuinfo_arm_linux_detect_cluster_midr( + &chipset, + arm_linux_processors_count, valid_processors, arm_linux_processors); + + /* Initialize core vendor, uarch, MIDR, and frequency for every logical processor */ + for (uint32_t i = 0; i < arm_linux_processors_count; i++) { + if (bitmask_all(arm_linux_processors[i].flags, CPUINFO_LINUX_FLAG_VALID)) { + const uint32_t cluster_leader = arm_linux_processors[i].package_leader_id; + if (cluster_leader == i) { + /* Cluster leader: decode core vendor and uarch */ + cpuinfo_arm_decode_vendor_uarch( + arm_linux_processors[cluster_leader].midr, +#if CPUINFO_ARCH_ARM + !!(arm_linux_processors[cluster_leader].features & CPUINFO_ARM_LINUX_FEATURE_VFPV4), +#endif + &arm_linux_processors[cluster_leader].vendor, + &arm_linux_processors[cluster_leader].uarch); + } else { + /* Cluster non-leader: copy vendor, uarch, MIDR, and frequency from cluster leader */ + arm_linux_processors[i].flags |= arm_linux_processors[cluster_leader].flags & + (CPUINFO_ARM_LINUX_VALID_MIDR | CPUINFO_LINUX_FLAG_MAX_FREQUENCY); + arm_linux_processors[i].midr = arm_linux_processors[cluster_leader].midr; + arm_linux_processors[i].vendor = arm_linux_processors[cluster_leader].vendor; + arm_linux_processors[i].uarch = arm_linux_processors[cluster_leader].uarch; + arm_linux_processors[i].max_frequency = arm_linux_processors[cluster_leader].max_frequency; + } + } + } + + for (uint32_t i = 0; i < arm_linux_processors_count; i++) { + if (bitmask_all(arm_linux_processors[i].flags, CPUINFO_LINUX_FLAG_VALID)) { + cpuinfo_log_debug("post-analysis processor %"PRIu32": MIDR %08"PRIx32" frequency %"PRIu32, + i, arm_linux_processors[i].midr, arm_linux_processors[i].max_frequency); + } + } + + qsort(arm_linux_processors, arm_linux_processors_count, + sizeof(struct cpuinfo_arm_linux_processor), cmp_arm_linux_processor); + + for (uint32_t i = 0; i < arm_linux_processors_count; i++) { + if (bitmask_all(arm_linux_processors[i].flags, CPUINFO_LINUX_FLAG_VALID)) { + cpuinfo_log_debug("post-sort processor %"PRIu32": system id %"PRIu32" MIDR %08"PRIx32" frequency %"PRIu32, + i, arm_linux_processors[i].system_processor_id, arm_linux_processors[i].midr, arm_linux_processors[i].max_frequency); + } + } + + uint32_t uarchs_count = 0; + enum cpuinfo_uarch last_uarch; + for (uint32_t i = 0; i < arm_linux_processors_count; i++) { + if (bitmask_all(arm_linux_processors[i].flags, CPUINFO_LINUX_FLAG_VALID)) { + if (uarchs_count == 0 || arm_linux_processors[i].uarch != last_uarch) { + last_uarch = arm_linux_processors[i].uarch; + uarchs_count += 1; + } + arm_linux_processors[i].uarch_index = uarchs_count - 1; + } + } + + /* + * Assumptions: + * - No SMP (i.e. each core supports only one hardware thread). + * - Level 1 instruction and data caches are private to the core clusters. + * - Level 2 and level 3 cache is shared between cores in the same cluster. + */ + cpuinfo_arm_chipset_to_string(&chipset, package.name); + package.processor_count = valid_processors; + package.core_count = valid_processors; + package.cluster_count = cluster_count; + + processors = calloc(valid_processors, sizeof(struct cpuinfo_processor)); + if (processors == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" logical processors", + valid_processors * sizeof(struct cpuinfo_processor), valid_processors); + goto cleanup; + } + + cores = calloc(valid_processors, sizeof(struct cpuinfo_core)); + if (cores == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" cores", + valid_processors * sizeof(struct cpuinfo_core), valid_processors); + goto cleanup; + } + + clusters = calloc(cluster_count, sizeof(struct cpuinfo_cluster)); + if (clusters == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" core clusters", + cluster_count * sizeof(struct cpuinfo_cluster), cluster_count); + goto cleanup; + } + + uarchs = calloc(uarchs_count, sizeof(struct cpuinfo_uarch_info)); + if (uarchs == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" microarchitectures", + uarchs_count * sizeof(struct cpuinfo_uarch_info), uarchs_count); + goto cleanup; + } + + linux_cpu_to_processor_map = calloc(arm_linux_processors_count, sizeof(struct cpuinfo_processor*)); + if (linux_cpu_to_processor_map == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for %"PRIu32" logical processor mapping entries", + arm_linux_processors_count * sizeof(struct cpuinfo_processor*), arm_linux_processors_count); + goto cleanup; + } + + linux_cpu_to_core_map = calloc(arm_linux_processors_count, sizeof(struct cpuinfo_core*)); + if (linux_cpu_to_core_map == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for %"PRIu32" core mapping entries", + arm_linux_processors_count * sizeof(struct cpuinfo_core*), arm_linux_processors_count); + goto cleanup; + } + + if (uarchs_count > 1) { + linux_cpu_to_uarch_index_map = calloc(arm_linux_processors_count, sizeof(uint32_t)); + if (linux_cpu_to_uarch_index_map == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for %"PRIu32" uarch index mapping entries", + arm_linux_processors_count * sizeof(uint32_t), arm_linux_processors_count); + goto cleanup; + } + } + + l1i = calloc(valid_processors, sizeof(struct cpuinfo_cache)); + if (l1i == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L1I caches", + valid_processors * sizeof(struct cpuinfo_cache), valid_processors); + goto cleanup; + } + + l1d = calloc(valid_processors, sizeof(struct cpuinfo_cache)); + if (l1d == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L1D caches", + valid_processors * sizeof(struct cpuinfo_cache), valid_processors); + goto cleanup; + } + + uint32_t uarchs_index = 0; + for (uint32_t i = 0; i < arm_linux_processors_count; i++) { + if (bitmask_all(arm_linux_processors[i].flags, CPUINFO_LINUX_FLAG_VALID)) { + if (uarchs_index == 0 || arm_linux_processors[i].uarch != last_uarch) { + last_uarch = arm_linux_processors[i].uarch; + uarchs[uarchs_index] = (struct cpuinfo_uarch_info) { + .uarch = arm_linux_processors[i].uarch, + .midr = arm_linux_processors[i].midr, + }; + uarchs_index += 1; + } + uarchs[uarchs_index - 1].processor_count += 1; + uarchs[uarchs_index - 1].core_count += 1; + } + } + + uint32_t l2_count = 0, l3_count = 0, big_l3_size = 0, cluster_id = UINT32_MAX; + /* Indication whether L3 (if it exists) is shared between all cores */ + bool shared_l3 = true; + /* Populate cache information structures in l1i, l1d */ + for (uint32_t i = 0; i < valid_processors; i++) { + if (arm_linux_processors[i].package_leader_id == arm_linux_processors[i].system_processor_id) { + cluster_id += 1; + clusters[cluster_id] = (struct cpuinfo_cluster) { + .processor_start = i, + .processor_count = arm_linux_processors[i].package_processor_count, + .core_start = i, + .core_count = arm_linux_processors[i].package_processor_count, + .cluster_id = cluster_id, + .package = &package, + .vendor = arm_linux_processors[i].vendor, + .uarch = arm_linux_processors[i].uarch, + .midr = arm_linux_processors[i].midr, + }; + } + + processors[i].smt_id = 0; + processors[i].core = cores + i; + processors[i].cluster = clusters + cluster_id; + processors[i].package = &package; + processors[i].linux_id = (int) arm_linux_processors[i].system_processor_id; + processors[i].cache.l1i = l1i + i; + processors[i].cache.l1d = l1d + i; + linux_cpu_to_processor_map[arm_linux_processors[i].system_processor_id] = &processors[i]; + + cores[i].processor_start = i; + cores[i].processor_count = 1; + cores[i].core_id = i; + cores[i].cluster = clusters + cluster_id; + cores[i].package = &package; + cores[i].vendor = arm_linux_processors[i].vendor; + cores[i].uarch = arm_linux_processors[i].uarch; + cores[i].midr = arm_linux_processors[i].midr; + linux_cpu_to_core_map[arm_linux_processors[i].system_processor_id] = &cores[i]; + + if (linux_cpu_to_uarch_index_map != NULL) { + linux_cpu_to_uarch_index_map[arm_linux_processors[i].system_processor_id] = + arm_linux_processors[i].uarch_index; + } + + struct cpuinfo_cache temp_l2 = { 0 }, temp_l3 = { 0 }; + cpuinfo_arm_decode_cache( + arm_linux_processors[i].uarch, + arm_linux_processors[i].package_processor_count, + arm_linux_processors[i].midr, + &chipset, + cluster_id, + arm_linux_processors[i].architecture_version, + &l1i[i], &l1d[i], &temp_l2, &temp_l3); + l1i[i].processor_start = l1d[i].processor_start = i; + l1i[i].processor_count = l1d[i].processor_count = 1; + #if CPUINFO_ARCH_ARM + /* L1I reported in /proc/cpuinfo overrides defaults */ + if (bitmask_all(arm_linux_processors[i].flags, CPUINFO_ARM_LINUX_VALID_ICACHE)) { + l1i[i] = (struct cpuinfo_cache) { + .size = arm_linux_processors[i].proc_cpuinfo_cache.i_size, + .associativity = arm_linux_processors[i].proc_cpuinfo_cache.i_assoc, + .sets = arm_linux_processors[i].proc_cpuinfo_cache.i_sets, + .partitions = 1, + .line_size = arm_linux_processors[i].proc_cpuinfo_cache.i_line_length + }; + } + /* L1D reported in /proc/cpuinfo overrides defaults */ + if (bitmask_all(arm_linux_processors[i].flags, CPUINFO_ARM_LINUX_VALID_DCACHE)) { + l1d[i] = (struct cpuinfo_cache) { + .size = arm_linux_processors[i].proc_cpuinfo_cache.d_size, + .associativity = arm_linux_processors[i].proc_cpuinfo_cache.d_assoc, + .sets = arm_linux_processors[i].proc_cpuinfo_cache.d_sets, + .partitions = 1, + .line_size = arm_linux_processors[i].proc_cpuinfo_cache.d_line_length + }; + } + #endif + + if (temp_l3.size != 0) { + /* + * Assumptions: + * - L2 is private to each core + * - L3 is shared by cores in the same cluster + * - If cores in different clusters report the same L3, it is shared between all cores. + */ + l2_count += 1; + if (arm_linux_processors[i].package_leader_id == arm_linux_processors[i].system_processor_id) { + if (cluster_id == 0) { + big_l3_size = temp_l3.size; + l3_count = 1; + } else if (temp_l3.size != big_l3_size) { + /* If some cores have different L3 size, L3 is not shared between all cores */ + shared_l3 = false; + l3_count += 1; + } + } + } else { + /* If some cores don't have L3 cache, L3 is not shared between all cores */ + shared_l3 = false; + if (temp_l2.size != 0) { + /* Assume L2 is shared by cores in the same cluster */ + if (arm_linux_processors[i].package_leader_id == arm_linux_processors[i].system_processor_id) { + l2_count += 1; + } + } + } + } + + if (l2_count != 0) { + l2 = calloc(l2_count, sizeof(struct cpuinfo_cache)); + if (l2 == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L2 caches", + l2_count * sizeof(struct cpuinfo_cache), l2_count); + goto cleanup; + } + + if (l3_count != 0) { + l3 = calloc(l3_count, sizeof(struct cpuinfo_cache)); + if (l3 == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L3 caches", + l3_count * sizeof(struct cpuinfo_cache), l3_count); + goto cleanup; + } + } + } + + cluster_id = UINT32_MAX; + uint32_t l2_index = UINT32_MAX, l3_index = UINT32_MAX; + for (uint32_t i = 0; i < valid_processors; i++) { + if (arm_linux_processors[i].package_leader_id == arm_linux_processors[i].system_processor_id) { + cluster_id++; + } + + struct cpuinfo_cache dummy_l1i, dummy_l1d, temp_l2 = { 0 }, temp_l3 = { 0 }; + cpuinfo_arm_decode_cache( + arm_linux_processors[i].uarch, + arm_linux_processors[i].package_processor_count, + arm_linux_processors[i].midr, + &chipset, + cluster_id, + arm_linux_processors[i].architecture_version, + &dummy_l1i, &dummy_l1d, &temp_l2, &temp_l3); + + if (temp_l3.size != 0) { + /* + * Assumptions: + * - L2 is private to each core + * - L3 is shared by cores in the same cluster + * - If cores in different clusters report the same L3, it is shared between all cores. + */ + l2_index += 1; + l2[l2_index] = (struct cpuinfo_cache) { + .size = temp_l2.size, + .associativity = temp_l2.associativity, + .sets = temp_l2.sets, + .partitions = 1, + .line_size = temp_l2.line_size, + .flags = temp_l2.flags, + .processor_start = i, + .processor_count = 1, + }; + processors[i].cache.l2 = l2 + l2_index; + if (arm_linux_processors[i].package_leader_id == arm_linux_processors[i].system_processor_id) { + l3_index += 1; + if (l3_index < l3_count) { + l3[l3_index] = (struct cpuinfo_cache) { + .size = temp_l3.size, + .associativity = temp_l3.associativity, + .sets = temp_l3.sets, + .partitions = 1, + .line_size = temp_l3.line_size, + .flags = temp_l3.flags, + .processor_start = i, + .processor_count = + shared_l3 ? valid_processors : arm_linux_processors[i].package_processor_count, + }; + } + } + if (shared_l3) { + processors[i].cache.l3 = l3; + } else if (l3_index < l3_count) { + processors[i].cache.l3 = l3 + l3_index; + } + } else if (temp_l2.size != 0) { + /* Assume L2 is shared by cores in the same cluster */ + if (arm_linux_processors[i].package_leader_id == arm_linux_processors[i].system_processor_id) { + l2_index += 1; + l2[l2_index] = (struct cpuinfo_cache) { + .size = temp_l2.size, + .associativity = temp_l2.associativity, + .sets = temp_l2.sets, + .partitions = 1, + .line_size = temp_l2.line_size, + .flags = temp_l2.flags, + .processor_start = i, + .processor_count = arm_linux_processors[i].package_processor_count, + }; + } + processors[i].cache.l2 = l2 + l2_index; + } + } + + /* Commit */ + cpuinfo_processors = processors; + cpuinfo_cores = cores; + cpuinfo_clusters = clusters; + cpuinfo_packages = &package; + cpuinfo_uarchs = uarchs; + cpuinfo_cache[cpuinfo_cache_level_1i] = l1i; + cpuinfo_cache[cpuinfo_cache_level_1d] = l1d; + cpuinfo_cache[cpuinfo_cache_level_2] = l2; + cpuinfo_cache[cpuinfo_cache_level_3] = l3; + + cpuinfo_processors_count = valid_processors; + cpuinfo_cores_count = valid_processors; + cpuinfo_clusters_count = cluster_count; + cpuinfo_packages_count = 1; + cpuinfo_uarchs_count = uarchs_count; + cpuinfo_cache_count[cpuinfo_cache_level_1i] = valid_processors; + cpuinfo_cache_count[cpuinfo_cache_level_1d] = valid_processors; + cpuinfo_cache_count[cpuinfo_cache_level_2] = l2_count; + cpuinfo_cache_count[cpuinfo_cache_level_3] = l3_count; + cpuinfo_max_cache_size = cpuinfo_arm_compute_max_cache_size(&processors[0]); + + cpuinfo_linux_cpu_max = arm_linux_processors_count; + cpuinfo_linux_cpu_to_processor_map = linux_cpu_to_processor_map; + cpuinfo_linux_cpu_to_core_map = linux_cpu_to_core_map; + cpuinfo_linux_cpu_to_uarch_index_map = linux_cpu_to_uarch_index_map; + + __sync_synchronize(); + + cpuinfo_is_initialized = true; + + processors = NULL; + cores = NULL; + clusters = NULL; + uarchs = NULL; + l1i = l1d = l2 = l3 = NULL; + linux_cpu_to_processor_map = NULL; + linux_cpu_to_core_map = NULL; + linux_cpu_to_uarch_index_map = NULL; + +cleanup: + free(arm_linux_processors); + free(processors); + free(cores); + free(clusters); + free(uarchs); + free(l1i); + free(l1d); + free(l2); + free(l3); + free(linux_cpu_to_processor_map); + free(linux_cpu_to_core_map); + free(linux_cpu_to_uarch_index_map); +} diff --git a/3rdparty/cpuinfo/src/arm/linux/midr.c b/3rdparty/cpuinfo/src/arm/linux/midr.c new file mode 100644 index 000000000..0d8f03fa8 --- /dev/null +++ b/3rdparty/cpuinfo/src/arm/linux/midr.c @@ -0,0 +1,863 @@ +#include +#include +#include +#include + +#include +#include +#if defined(__ANDROID__) + #include +#endif +#include +#include +#include +#include +#include +#include + + +#define CLUSTERS_MAX 3 + +static inline bool bitmask_all(uint32_t bitfield, uint32_t mask) { + return (bitfield & mask) == mask; +} + +/* Description of core clusters configuration in a chipset (identified by series and model number) */ +struct cluster_config { + /* Number of cores (logical processors) */ + uint8_t cores; + /* ARM chipset series (see cpuinfo_arm_chipset_series enum) */ + uint8_t series; + /* Chipset model number (see cpuinfo_arm_chipset struct) */ + uint16_t model; + /* Number of heterogenous clusters in the CPU package */ + uint8_t clusters; + /* + * Number of cores in each cluster: + # - Symmetric configurations: [0] = # cores + * - big.LITTLE configurations: [0] = # LITTLE cores, [1] = # big cores + * - Max.Med.Min configurations: [0] = # Min cores, [1] = # Med cores, [2] = # Max cores + */ + uint8_t cluster_cores[CLUSTERS_MAX]; + /* + * MIDR of cores in each cluster: + * - Symmetric configurations: [0] = core MIDR + * - big.LITTLE configurations: [0] = LITTLE core MIDR, [1] = big core MIDR + * - Max.Med.Min configurations: [0] = Min core MIDR, [1] = Med core MIDR, [2] = Max core MIDR + */ + uint32_t cluster_midr[CLUSTERS_MAX]; +}; + +/* + * The list of chipsets where MIDR may not be unambigiously decoded at least on some devices. + * The typical reasons for impossibility to decoded MIDRs are buggy kernels, which either do not report all MIDR + * information (e.g. on ATM7029 kernel doesn't report CPU Part), or chipsets have more than one type of cores + * (i.e. 4x Cortex-A53 + 4x Cortex-A53 is out) and buggy kernels report MIDR information only about some cores + * in /proc/cpuinfo (either only online cores, or only the core that reads /proc/cpuinfo). On these kernels/chipsets, + * it is not possible to detect all core types by just parsing /proc/cpuinfo, so we use chipset name and this table to + * find their MIDR (and thus microarchitecture, cache, etc). + * + * Note: not all chipsets with heterogeneous multiprocessing need an entry in this table. The following HMP + * chipsets always list information about all cores in /proc/cpuinfo: + * + * - Snapdragon 660 + * - Snapdragon 820 (MSM8996) + * - Snapdragon 821 (MSM8996PRO) + * - Snapdragon 835 (MSM8998) + * - Exynos 8895 + * - Kirin 960 + * + * As these are all new processors, there is hope that this table won't uncontrollably grow over time. + */ +static const struct cluster_config cluster_configs[] = { +#if CPUINFO_ARCH_ARM + { + /* + * MSM8916 (Snapdragon 410): 4x Cortex-A53 + * Some AArch32 phones use non-standard /proc/cpuinfo format. + */ + .cores = 4, + .series = cpuinfo_arm_chipset_series_qualcomm_msm, + .model = UINT16_C(8916), + .clusters = 1, + .cluster_cores = { + [0] = 4, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FD030), + }, + }, + { + /* + * MSM8939 (Snapdragon 615): 4x Cortex-A53 + 4x Cortex-A53 + * Some AArch32 phones use non-standard /proc/cpuinfo format. + */ + .cores = 8, + .series = cpuinfo_arm_chipset_series_qualcomm_msm, + .model = UINT16_C(8939), + .clusters = 2, + .cluster_cores = { + [0] = 4, + [1] = 4, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FD034), + [1] = UINT32_C(0x410FD034), + }, + }, +#endif + { + /* MSM8956 (Snapdragon 650): 2x Cortex-A72 + 4x Cortex-A53 */ + .cores = 6, + .series = cpuinfo_arm_chipset_series_qualcomm_msm, + .model = UINT16_C(8956), + .clusters = 2, + .cluster_cores = { + [0] = 4, + [1] = 2, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FD034), + [1] = UINT32_C(0x410FD080), + }, + }, + { + /* MSM8976/MSM8976PRO (Snapdragon 652/653): 4x Cortex-A72 + 4x Cortex-A53 */ + .cores = 8, + .series = cpuinfo_arm_chipset_series_qualcomm_msm, + .model = UINT16_C(8976), + .clusters = 2, + .cluster_cores = { + [0] = 4, + [1] = 4, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FD034), + [1] = UINT32_C(0x410FD080), + }, + }, + { + /* MSM8992 (Snapdragon 808): 2x Cortex-A57 + 4x Cortex-A53 */ + .cores = 6, + .series = cpuinfo_arm_chipset_series_qualcomm_msm, + .model = UINT16_C(8992), + .clusters = 2, + .cluster_cores = { + [0] = 4, + [1] = 2, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FD033), + [1] = UINT32_C(0x411FD072), + }, + }, + { + /* MSM8994/MSM8994V (Snapdragon 810): 4x Cortex-A57 + 4x Cortex-A53 */ + .cores = 8, + .series = cpuinfo_arm_chipset_series_qualcomm_msm, + .model = UINT16_C(8994), + .clusters = 2, + .cluster_cores = { + [0] = 4, + [1] = 4, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FD032), + [1] = UINT32_C(0x411FD071), + }, + }, +#if CPUINFO_ARCH_ARM + { + /* Exynos 5422: 4x Cortex-A15 + 4x Cortex-A7 */ + .cores = 8, + .series = cpuinfo_arm_chipset_series_samsung_exynos, + .model = UINT16_C(5422), + .clusters = 2, + .cluster_cores = { + [0] = 4, + [1] = 4, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FC073), + [1] = UINT32_C(0x412FC0F3), + }, + }, + { + /* Exynos 5430: 4x Cortex-A15 + 4x Cortex-A7 */ + .cores = 8, + .series = cpuinfo_arm_chipset_series_samsung_exynos, + .model = UINT16_C(5430), + .clusters = 2, + .cluster_cores = { + [0] = 4, + [1] = 4, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FC074), + [1] = UINT32_C(0x413FC0F3), + }, + }, +#endif /* CPUINFO_ARCH_ARM */ + { + /* Exynos 5433: 4x Cortex-A57 + 4x Cortex-A53 */ + .cores = 8, + .series = cpuinfo_arm_chipset_series_samsung_exynos, + .model = UINT16_C(5433), + .clusters = 2, + .cluster_cores = { + [0] = 4, + [1] = 4, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FD031), + [1] = UINT32_C(0x411FD070), + }, + }, + { + /* Exynos 7420: 4x Cortex-A57 + 4x Cortex-A53 */ + .cores = 8, + .series = cpuinfo_arm_chipset_series_samsung_exynos, + .model = UINT16_C(7420), + .clusters = 2, + .cluster_cores = { + [0] = 4, + [1] = 4, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FD032), + [1] = UINT32_C(0x411FD070), + }, + }, + { + /* Exynos 8890: 4x Exynos M1 + 4x Cortex-A53 */ + .cores = 8, + .series = cpuinfo_arm_chipset_series_samsung_exynos, + .model = UINT16_C(8890), + .clusters = 2, + .cluster_cores = { + [0] = 4, + [1] = 4, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FD034), + [1] = UINT32_C(0x531F0011), + }, + }, +#if CPUINFO_ARCH_ARM + { + /* Kirin 920: 4x Cortex-A15 + 4x Cortex-A7 */ + .cores = 8, + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = UINT16_C(920), + .clusters = 2, + .cluster_cores = { + [0] = 4, + [1] = 4, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FC075), + [1] = UINT32_C(0x413FC0F3), + }, + }, + { + /* Kirin 925: 4x Cortex-A15 + 4x Cortex-A7 */ + .cores = 8, + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = UINT16_C(925), + .clusters = 2, + .cluster_cores = { + [0] = 4, + [1] = 4, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FC075), + [1] = UINT32_C(0x413FC0F3), + }, + }, + { + /* Kirin 928: 4x Cortex-A15 + 4x Cortex-A7 */ + .cores = 8, + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = UINT16_C(928), + .clusters = 2, + .cluster_cores = { + [0] = 4, + [1] = 4, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FC075), + [1] = UINT32_C(0x413FC0F3), + }, + }, +#endif /* CPUINFO_ARCH_ARM */ + { + /* Kirin 950: 4x Cortex-A72 + 4x Cortex-A53 */ + .cores = 8, + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = UINT16_C(950), + .clusters = 2, + .cluster_cores = { + [0] = 4, + [1] = 4, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FD034), + [1] = UINT32_C(0x410FD080), + }, + }, + { + /* Kirin 955: 4x Cortex-A72 + 4x Cortex-A53 */ + .cores = 8, + .series = cpuinfo_arm_chipset_series_hisilicon_kirin, + .model = UINT16_C(955), + .clusters = 2, + .cluster_cores = { + [0] = 4, + [1] = 4, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FD034), + [1] = UINT32_C(0x410FD080), + }, + }, +#if CPUINFO_ARCH_ARM + { + /* MediaTek MT8135: 2x Cortex-A7 + 2x Cortex-A15 */ + .cores = 4, + .series = cpuinfo_arm_chipset_series_mediatek_mt, + .model = UINT16_C(8135), + .clusters = 2, + .cluster_cores = { + [0] = 2, + [1] = 2, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FC073), + [1] = UINT32_C(0x413FC0F2), + }, + }, +#endif + { + /* MediaTek MT8173: 2x Cortex-A72 + 2x Cortex-A53 */ + .cores = 4, + .series = cpuinfo_arm_chipset_series_mediatek_mt, + .model = UINT16_C(8173), + .clusters = 2, + .cluster_cores = { + [0] = 2, + [1] = 2, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FD032), + [1] = UINT32_C(0x410FD080), + }, + }, + { + /* MediaTek MT8176: 2x Cortex-A72 + 4x Cortex-A53 */ + .cores = 6, + .series = cpuinfo_arm_chipset_series_mediatek_mt, + .model = UINT16_C(8176), + .clusters = 2, + .cluster_cores = { + [0] = 4, + [1] = 2, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FD032), + [1] = UINT32_C(0x410FD080), + }, + }, +#if CPUINFO_ARCH_ARM64 + { + /* + * MediaTek MT8735: 4x Cortex-A53 + * Some AArch64 phones use non-standard /proc/cpuinfo format. + */ + .cores = 4, + .series = cpuinfo_arm_chipset_series_mediatek_mt, + .model = UINT16_C(8735), + .clusters = 1, + .cluster_cores = { + [0] = 4, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FD034), + }, + }, +#endif +#if CPUINFO_ARCH_ARM + { + /* + * MediaTek MT6592: 4x Cortex-A7 + 4x Cortex-A7 + * Some phones use non-standard /proc/cpuinfo format. + */ + .cores = 4, + .series = cpuinfo_arm_chipset_series_mediatek_mt, + .model = UINT16_C(6592), + .clusters = 2, + .cluster_cores = { + [0] = 4, + [1] = 4, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FC074), + [1] = UINT32_C(0x410FC074), + }, + }, + { + /* MediaTek MT6595: 4x Cortex-A17 + 4x Cortex-A7 */ + .cores = 8, + .series = cpuinfo_arm_chipset_series_mediatek_mt, + .model = UINT16_C(6595), + .clusters = 2, + .cluster_cores = { + [0] = 4, + [1] = 4, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FC075), + [1] = UINT32_C(0x410FC0E0), + }, + }, +#endif + { + /* MediaTek MT6797: 2x Cortex-A72 + 4x Cortex-A53 + 4x Cortex-A53 */ + .cores = 10, + .series = cpuinfo_arm_chipset_series_mediatek_mt, + .model = UINT16_C(6797), + .clusters = 3, + .cluster_cores = { + [0] = 4, + [1] = 4, + [2] = 2, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FD034), + [1] = UINT32_C(0x410FD034), + [2] = UINT32_C(0x410FD081), + }, + }, + { + /* MediaTek MT6799: 2x Cortex-A73 + 4x Cortex-A53 + 4x Cortex-A35 */ + .cores = 10, + .series = cpuinfo_arm_chipset_series_mediatek_mt, + .model = UINT16_C(6799), + .clusters = 3, + .cluster_cores = { + [0] = 4, + [1] = 4, + [2] = 2, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FD041), + [1] = UINT32_C(0x410FD034), + [2] = UINT32_C(0x410FD092), + }, + }, + { + /* Rockchip RK3399: 2x Cortex-A72 + 4x Cortex-A53 */ + .cores = 6, + .series = cpuinfo_arm_chipset_series_rockchip_rk, + .model = UINT16_C(3399), + .clusters = 2, + .cluster_cores = { + [0] = 4, + [1] = 2, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FD034), + [1] = UINT32_C(0x410FD082), + }, + }, +#if CPUINFO_ARCH_ARM + { + /* Actions ATM8029: 4x Cortex-A5 + * Most devices use non-standard /proc/cpuinfo format. + */ + .cores = 4, + .series = cpuinfo_arm_chipset_series_actions_atm, + .model = UINT16_C(7029), + .clusters = 1, + .cluster_cores = { + [0] = 4, + }, + .cluster_midr = { + [0] = UINT32_C(0x410FC051), + }, + }, +#endif +}; + +/* + * Searches chipset name in mapping of chipset name to cores' MIDR values. If match is successful, initializes MIDR + * for all clusters' leaders with tabulated values. + * + * @param[in] chipset - chipset (SoC) name information. + * @param clusters_count - number of CPU core clusters detected in the SoC. + * @param cluster_leaders - indices of core clusters' leaders in the @p processors array. + * @param processors_count - number of usable logical processors in the system. + * @param[in,out] processors - array of logical processor descriptions with pre-parsed MIDR, maximum frequency, + * and decoded core cluster (package_leader_id) information. + * Upon successful return, processors[i].midr for all clusters' leaders contains the + * tabulated MIDR values. + * @param verify_midr - indicated whether the function should check that the MIDR values to be assigned to leaders of + * core clusters are consistent with known parts of their parsed values. + * Set if to false if the only MIDR value parsed from /proc/cpuinfo is for the last processor + * reported in /proc/cpuinfo and thus can't be unambiguously attributed to that processor. + * + * @retval true if the chipset was found in the mapping and core clusters' leaders initialized with MIDR values. + * @retval false if the chipset was not found in the mapping, or any consistency check failed. + */ +static bool cpuinfo_arm_linux_detect_cluster_midr_by_chipset( + const struct cpuinfo_arm_chipset chipset[restrict static 1], + uint32_t clusters_count, + const uint32_t cluster_leaders[restrict static CLUSTERS_MAX], + uint32_t processors_count, + struct cpuinfo_arm_linux_processor processors[restrict static processors_count], + bool verify_midr) +{ + if (clusters_count <= CLUSTERS_MAX) { + for (uint32_t c = 0; c < CPUINFO_COUNT_OF(cluster_configs); c++) { + if (cluster_configs[c].model == chipset->model && cluster_configs[c].series == chipset->series) { + /* Verify that the total number of cores and clusters of cores matches expectation */ + if (cluster_configs[c].cores != processors_count || cluster_configs[c].clusters != clusters_count) { + return false; + } + + /* Verify that core cluster configuration matches expectation */ + for (uint32_t cluster = 0; cluster < clusters_count; cluster++) { + const uint32_t cluster_leader = cluster_leaders[cluster]; + if (cluster_configs[c].cluster_cores[cluster] != processors[cluster_leader].package_processor_count) { + return false; + } + } + + if (verify_midr) { + /* Verify known parts of MIDR */ + for (uint32_t cluster = 0; cluster < clusters_count; cluster++) { + const uint32_t cluster_leader = cluster_leaders[cluster]; + + /* Create a mask of known midr bits */ + uint32_t midr_mask = 0; + if (processors[cluster_leader].flags & CPUINFO_ARM_LINUX_VALID_IMPLEMENTER) { + midr_mask |= CPUINFO_ARM_MIDR_IMPLEMENTER_MASK; + } + if (processors[cluster_leader].flags & CPUINFO_ARM_LINUX_VALID_VARIANT) { + midr_mask |= CPUINFO_ARM_MIDR_VARIANT_MASK; + } + if (processors[cluster_leader].flags & CPUINFO_ARM_LINUX_VALID_PART) { + midr_mask |= CPUINFO_ARM_MIDR_PART_MASK; + } + if (processors[cluster_leader].flags & CPUINFO_ARM_LINUX_VALID_REVISION) { + midr_mask |= CPUINFO_ARM_MIDR_REVISION_MASK; + } + + /* Verify the bits under the mask */ + if ((processors[cluster_leader].midr ^ cluster_configs[c].cluster_midr[cluster]) & midr_mask) { + cpuinfo_log_debug("parsed MIDR of cluster %08"PRIu32" does not match tabulated value %08"PRIu32, + processors[cluster_leader].midr, cluster_configs[c].cluster_midr[cluster]); + return false; + } + } + } + + /* Assign MIDRs according to tabulated configurations */ + for (uint32_t cluster = 0; cluster < clusters_count; cluster++) { + const uint32_t cluster_leader = cluster_leaders[cluster]; + processors[cluster_leader].midr = cluster_configs[c].cluster_midr[cluster]; + processors[cluster_leader].flags |= CPUINFO_ARM_LINUX_VALID_MIDR; + cpuinfo_log_debug("cluster %"PRIu32" MIDR = 0x%08"PRIx32, cluster, cluster_configs[c].cluster_midr[cluster]); + } + return true; + } + } + } + return false; +} + +/* + * Initializes MIDR for leaders of core clusters using a heuristic for big.LITTLE systems: + * - If the only known MIDR is for the big core cluster, guess the matching MIDR for the LITTLE cluster. + * - Estimate which of the clusters is big using maximum frequency, if known, otherwise using system processor ID. + * - Initialize the MIDR for big and LITTLE core clusters using the guesstimates values. + * + * @param clusters_count - number of CPU core clusters detected in the SoC. + * @param cluster_with_midr_count - number of CPU core clusters in the SoC with known MIDR values. + * @param last_processor_with_midr - index of the last logical processor with known MIDR in the @p processors array. + * @param cluster_leaders - indices of core clusters' leaders in the @p processors array. + * @param[in,out] processors - array of logical processor descriptions with pre-parsed MIDR, maximum frequency, + * and decoded core cluster (package_leader_id) information. + * Upon successful return, processors[i].midr for all core clusters' leaders contains + * the heuristically detected MIDR value. + * @param verify_midr - indicated whether the function should check that the MIDR values to be assigned to leaders of + * core clusters are consistent with known parts of their parsed values. + * Set if to false if the only MIDR value parsed from /proc/cpuinfo is for the last processor + * reported in /proc/cpuinfo and thus can't be unambiguously attributed to that processor. + * + * @retval true if this is a big.LITTLE system with only one known MIDR and the CPU core clusters' leaders were + * initialized with MIDR values. + * @retval false if this is not a big.LITTLE system. + */ +static bool cpuinfo_arm_linux_detect_cluster_midr_by_big_little_heuristic( + uint32_t clusters_count, + uint32_t cluster_with_midr_count, + uint32_t last_processor_with_midr, + const uint32_t cluster_leaders[restrict static CLUSTERS_MAX], + struct cpuinfo_arm_linux_processor processors[restrict static last_processor_with_midr], + bool verify_midr) +{ + if (clusters_count != 2 || cluster_with_midr_count != 1) { + /* Not a big.LITTLE system, or MIDR is known for both/neither clusters */ + return false; + } + + const uint32_t midr_flags = + (processors[processors[last_processor_with_midr].package_leader_id].flags & CPUINFO_ARM_LINUX_VALID_MIDR); + const uint32_t big_midr = processors[processors[last_processor_with_midr].package_leader_id].midr; + const uint32_t little_midr = midr_little_core_for_big(big_midr); + + /* Default assumption: the first reported cluster is LITTLE cluster (this holds on most Linux kernels) */ + uint32_t little_cluster_leader = cluster_leaders[0]; + const uint32_t other_cluster_leader = cluster_leaders[1]; + /* If maximum frequency is known for both clusters, assume LITTLE cluster is the one with lower frequency */ + if (processors[little_cluster_leader].flags & processors[other_cluster_leader].flags & CPUINFO_LINUX_FLAG_MAX_FREQUENCY) { + if (processors[little_cluster_leader].max_frequency > processors[other_cluster_leader].max_frequency) { + little_cluster_leader = other_cluster_leader; + } + } + + if (verify_midr) { + /* Verify known parts of MIDR */ + for (uint32_t cluster = 0; cluster < clusters_count; cluster++) { + const uint32_t cluster_leader = cluster_leaders[cluster]; + + /* Create a mask of known midr bits */ + uint32_t midr_mask = 0; + if (processors[cluster_leader].flags & CPUINFO_ARM_LINUX_VALID_IMPLEMENTER) { + midr_mask |= CPUINFO_ARM_MIDR_IMPLEMENTER_MASK; + } + if (processors[cluster_leader].flags & CPUINFO_ARM_LINUX_VALID_VARIANT) { + midr_mask |= CPUINFO_ARM_MIDR_VARIANT_MASK; + } + if (processors[cluster_leader].flags & CPUINFO_ARM_LINUX_VALID_PART) { + midr_mask |= CPUINFO_ARM_MIDR_PART_MASK; + } + if (processors[cluster_leader].flags & CPUINFO_ARM_LINUX_VALID_REVISION) { + midr_mask |= CPUINFO_ARM_MIDR_REVISION_MASK; + } + + /* Verify the bits under the mask */ + const uint32_t midr = (cluster_leader == little_cluster_leader) ? little_midr : big_midr; + if ((processors[cluster_leader].midr ^ midr) & midr_mask) { + cpuinfo_log_debug( + "parsed MIDR %08"PRIu32" of cluster leader %"PRIu32" is inconsistent with expected value %08"PRIu32, + processors[cluster_leader].midr, cluster_leader, midr); + return false; + } + } + } + + for (uint32_t c = 0; c < clusters_count; c++) { + /* Skip cluster with already assigned MIDR */ + const uint32_t cluster_leader = cluster_leaders[c]; + if (bitmask_all(processors[cluster_leader].flags, CPUINFO_ARM_LINUX_VALID_MIDR)) { + continue; + } + + const uint32_t midr = (cluster_leader == little_cluster_leader) ? little_midr : big_midr; + cpuinfo_log_info("assume processor %"PRIu32" to have MIDR %08"PRIx32, cluster_leader, midr); + /* To be consistent, we copy the MIDR entirely, rather than by parts */ + processors[cluster_leader].midr = midr; + processors[cluster_leader].flags |= midr_flags; + } + return true; +} + +/* + * Initializes MIDR for leaders of core clusters in a single sequential scan: + * - Clusters preceding the first reported MIDR value are assumed to have default MIDR value. + * - Clusters following any reported MIDR value to have that MIDR value. + * + * @param default_midr - MIDR value that will be assigned to cluster leaders preceding any reported MIDR value. + * @param processors_count - number of logical processor descriptions in the @p processors array. + * @param[in,out] processors - array of logical processor descriptions with pre-parsed MIDR, maximum frequency, + * and decoded core cluster (package_leader_id) information. + * Upon successful return, processors[i].midr for all core clusters' leaders contains + * the assigned MIDR value. + */ +static void cpuinfo_arm_linux_detect_cluster_midr_by_sequential_scan( + uint32_t default_midr, + uint32_t processors_count, + struct cpuinfo_arm_linux_processor processors[restrict static processors_count]) +{ + uint32_t midr = default_midr; + for (uint32_t i = 0; i < processors_count; i++) { + if (bitmask_all(processors[i].flags, CPUINFO_LINUX_FLAG_VALID)) { + if (processors[i].package_leader_id == i) { + if (bitmask_all(processors[i].flags, CPUINFO_ARM_LINUX_VALID_MIDR)) { + midr = processors[i].midr; + } else { + cpuinfo_log_info("assume processor %"PRIu32" to have MIDR %08"PRIx32, i, midr); + /* To be consistent, we copy the MIDR entirely, rather than by parts */ + processors[i].midr = midr; + processors[i].flags |= CPUINFO_ARM_LINUX_VALID_MIDR; + } + } + } + } +} + +/* + * Detects MIDR of each CPU core clusters' leader. + * + * @param[in] chipset - chipset (SoC) name information. + * @param max_processors - number of processor descriptions in the @p processors array. + * @param usable_processors - number of processor descriptions in the @p processors array with both POSSIBLE and + * PRESENT flags. + * @param[in,out] processors - array of logical processor descriptions with pre-parsed MIDR, maximum frequency, + * and decoded core cluster (package_leader_id) information. + * Upon return, processors[i].midr for all clusters' leaders contains the MIDR value. + * + * @returns The number of core clusters + */ +uint32_t cpuinfo_arm_linux_detect_cluster_midr( + const struct cpuinfo_arm_chipset chipset[restrict static 1], + uint32_t max_processors, + uint32_t usable_processors, + struct cpuinfo_arm_linux_processor processors[restrict static max_processors]) +{ + uint32_t clusters_count = 0; + uint32_t cluster_leaders[CLUSTERS_MAX]; + uint32_t last_processor_in_cpuinfo = max_processors; + uint32_t last_processor_with_midr = max_processors; + uint32_t processors_with_midr_count = 0; + for (uint32_t i = 0; i < max_processors; i++) { + if (bitmask_all(processors[i].flags, CPUINFO_LINUX_FLAG_VALID)) { + if (processors[i].flags & CPUINFO_ARM_LINUX_VALID_PROCESSOR) { + last_processor_in_cpuinfo = i; + } + if (bitmask_all(processors[i].flags, CPUINFO_ARM_LINUX_VALID_IMPLEMENTER | CPUINFO_ARM_LINUX_VALID_PART)) { + last_processor_with_midr = i; + processors_with_midr_count += 1; + } + const uint32_t group_leader = processors[i].package_leader_id; + if (group_leader == i) { + if (clusters_count < CLUSTERS_MAX) { + cluster_leaders[clusters_count] = i; + } + clusters_count += 1; + } else { + /* Copy known bits of information to cluster leader */ + + if ((processors[i].flags & ~processors[group_leader].flags) & CPUINFO_LINUX_FLAG_MAX_FREQUENCY) { + processors[group_leader].max_frequency = processors[i].max_frequency; + processors[group_leader].flags |= CPUINFO_LINUX_FLAG_MAX_FREQUENCY; + } + if (!bitmask_all(processors[group_leader].flags, CPUINFO_ARM_LINUX_VALID_MIDR) && + bitmask_all(processors[i].flags, CPUINFO_ARM_LINUX_VALID_MIDR)) + { + processors[group_leader].midr = processors[i].midr; + processors[group_leader].flags |= CPUINFO_ARM_LINUX_VALID_MIDR; + } + } + } + } + cpuinfo_log_debug("detected %"PRIu32" core clusters", clusters_count); + + /* + * Two relations between reported /proc/cpuinfo information, and cores is possible: + * - /proc/cpuinfo reports information for all or some of the cores below the corresponding + * "processor : " lines. Information on offline cores may be missing. + * - /proc/cpuinfo reports information only once, after all "processor : " lines. + * The reported information may relate to processor #0 or to the processor which + * executed the system calls to read /proc/cpuinfo. It is also indistinguishable + * from /proc/cpuinfo reporting information only for the last core (e.g. if all other + * cores are offline). + * + * We detect the second case by checking if /proc/cpuinfo contains valid MIDR only for one, + * last reported, processor. Note, that the last reported core may be not the last + * present & possible processor, as /proc/cpuinfo may non-report high-index offline cores. + */ + if (processors_with_midr_count == 1 && last_processor_in_cpuinfo == last_processor_with_midr && clusters_count > 1) { + /* + * There are multiple core clusters, but /proc/cpuinfo reported MIDR only for one + * processor, and we don't even know which logical processor this information refers to. + * + * We make three attempts to detect MIDR for all clusters: + * 1. Search tabulated MIDR values for chipsets which have heterogeneous clusters and ship with Linux + * kernels which do not always report all cores in /proc/cpuinfo. If found, use the tabulated values. + * 2. For systems with 2 clusters and MIDR known for one cluster, assume big.LITTLE configuration, + * and estimate MIDR for the other cluster under assumption that MIDR for the big cluster is known. + * 3. Initialize MIDRs for all core clusters to the only parsed MIDR value. + */ + cpuinfo_log_debug("the only reported MIDR can not be attributed to a particular processor"); + + if (cpuinfo_arm_linux_detect_cluster_midr_by_chipset( + chipset, clusters_count, cluster_leaders, usable_processors, processors, false)) + { + return clusters_count; + } + + /* Try big.LITTLE heuristic */ + if (cpuinfo_arm_linux_detect_cluster_midr_by_big_little_heuristic( + clusters_count, 1, last_processor_with_midr, + cluster_leaders, processors, false)) + { + return clusters_count; + } + + /* Fall back to sequential initialization of MIDR values for core clusters */ + cpuinfo_arm_linux_detect_cluster_midr_by_sequential_scan( + processors[processors[last_processor_with_midr].package_leader_id].midr, + max_processors, processors); + } else if (processors_with_midr_count < usable_processors) { + /* + * /proc/cpuinfo reported MIDR only for some processors, and probably some core clusters do not have MIDR + * for any of the cores. Check if this is the case. + */ + uint32_t clusters_with_midr_count = 0; + for (uint32_t i = 0; i < max_processors; i++) { + if (bitmask_all(processors[i].flags, CPUINFO_LINUX_FLAG_VALID | CPUINFO_ARM_LINUX_VALID_MIDR)) { + if (processors[i].package_leader_id == i) { + clusters_with_midr_count += 1; + } + } + } + + if (clusters_with_midr_count < clusters_count) { + /* + * /proc/cpuinfo reported MIDR only for some clusters, need to reconstruct others. + * We make three attempts to detect MIDR for clusters without it: + * 1. Search tabulated MIDR values for chipsets which have heterogeneous clusters and ship with Linux + * kernels which do not always report all cores in /proc/cpuinfo. If found, use the tabulated values. + * 2. For systems with 2 clusters and MIDR known for one cluster, assume big.LITTLE configuration, + * and estimate MIDR for the other cluster under assumption that MIDR for the big cluster is known. + * 3. Initialize MIDRs for core clusters in a single sequential scan: + * - Clusters preceding the first reported MIDR value are assumed to have the last reported MIDR value. + * - Clusters following any reported MIDR value to have that MIDR value. + */ + + if (cpuinfo_arm_linux_detect_cluster_midr_by_chipset( + chipset, clusters_count, cluster_leaders, usable_processors, processors, true)) + { + return clusters_count; + } + + if (last_processor_with_midr != max_processors) { + /* Try big.LITTLE heuristic */ + if (cpuinfo_arm_linux_detect_cluster_midr_by_big_little_heuristic( + clusters_count, processors_with_midr_count, last_processor_with_midr, + cluster_leaders, processors, true)) + { + return clusters_count; + } + + /* Fall back to sequential initialization of MIDR values for core clusters */ + cpuinfo_arm_linux_detect_cluster_midr_by_sequential_scan( + processors[processors[last_processor_with_midr].package_leader_id].midr, + max_processors, processors); + } + } + } + return clusters_count; +} diff --git a/3rdparty/cpuinfo/src/arm/mach/init.c b/3rdparty/cpuinfo/src/arm/mach/init.c new file mode 100644 index 000000000..dbea578c4 --- /dev/null +++ b/3rdparty/cpuinfo/src/arm/mach/init.c @@ -0,0 +1,619 @@ +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include + +/* Polyfill recent CPUFAMILY_ARM_* values for older SDKs */ +#ifndef CPUFAMILY_ARM_MONSOON_MISTRAL + #define CPUFAMILY_ARM_MONSOON_MISTRAL 0xE81E7EF6 +#endif +#ifndef CPUFAMILY_ARM_VORTEX_TEMPEST + #define CPUFAMILY_ARM_VORTEX_TEMPEST 0x07D34B9F +#endif +#ifndef CPUFAMILY_ARM_LIGHTNING_THUNDER + #define CPUFAMILY_ARM_LIGHTNING_THUNDER 0x462504D2 +#endif +#ifndef CPUFAMILY_ARM_FIRESTORM_ICESTORM + #define CPUFAMILY_ARM_FIRESTORM_ICESTORM 0x1B588BB3 +#endif + +struct cpuinfo_arm_isa cpuinfo_isa = { +#if CPUINFO_ARCH_ARM + .thumb = true, + .thumb2 = true, + .thumbee = false, + .jazelle = false, + .armv5e = true, + .armv6 = true, + .armv6k = true, + .armv7 = true, + .vfpv2 = false, + .vfpv3 = true, + .d32 = true, + .wmmx = false, + .wmmx2 = false, + .neon = true, +#endif +#if CPUINFO_ARCH_ARM64 + .aes = true, + .sha1 = true, + .sha2 = true, + .pmull = true, + .crc32 = true, +#endif +}; + +static uint32_t get_sys_info(int type_specifier, const char* name) { + size_t size = 0; + uint32_t result = 0; + int mib[2] = { CTL_HW, type_specifier }; + if (sysctl(mib, 2, NULL, &size, NULL, 0) != 0) { + cpuinfo_log_info("sysctl(\"%s\") failed: %s", name, strerror(errno)); + } else if (size == sizeof(uint32_t)) { + sysctl(mib, 2, &result, &size, NULL, 0); + cpuinfo_log_debug("%s: %"PRIu32 ", size = %lu", name, result, size); + } else { + cpuinfo_log_info("sysctl does not support non-integer lookup for (\"%s\")", name); + } + return result; +} + +static uint32_t get_sys_info_by_name(const char* type_specifier) { + size_t size = 0; + uint32_t result = 0; + if (sysctlbyname(type_specifier, NULL, &size, NULL, 0) != 0) { + cpuinfo_log_info("sysctlbyname(\"%s\") failed: %s", type_specifier, strerror(errno)); + } else if (size == sizeof(uint32_t)) { + sysctlbyname(type_specifier, &result, &size, NULL, 0); + cpuinfo_log_debug("%s: %"PRIu32 ", size = %lu", type_specifier, result, size); + } else { + cpuinfo_log_info("sysctl does not support non-integer lookup for (\"%s\")", type_specifier); + } + return result; +} + +static enum cpuinfo_uarch decode_uarch(uint32_t cpu_family, uint32_t cpu_subtype, uint32_t core_index, uint32_t core_count) { + switch (cpu_family) { + case CPUFAMILY_ARM_SWIFT: + return cpuinfo_uarch_swift; + case CPUFAMILY_ARM_CYCLONE: + return cpuinfo_uarch_cyclone; + case CPUFAMILY_ARM_TYPHOON: + return cpuinfo_uarch_typhoon; + case CPUFAMILY_ARM_TWISTER: + return cpuinfo_uarch_twister; + case CPUFAMILY_ARM_HURRICANE: + return cpuinfo_uarch_hurricane; + case CPUFAMILY_ARM_MONSOON_MISTRAL: + /* 2x Monsoon + 4x Mistral cores */ + return core_index < 2 ? cpuinfo_uarch_monsoon : cpuinfo_uarch_mistral; + case CPUFAMILY_ARM_VORTEX_TEMPEST: + /* Hexa-core: 2x Vortex + 4x Tempest; Octa-core: 4x Cortex + 4x Tempest */ + return core_index + 4 < core_count ? cpuinfo_uarch_vortex : cpuinfo_uarch_tempest; + case CPUFAMILY_ARM_LIGHTNING_THUNDER: + /* Hexa-core: 2x Lightning + 4x Thunder; Octa-core (presumed): 4x Lightning + 4x Thunder */ + return core_index + 4 < core_count ? cpuinfo_uarch_lightning : cpuinfo_uarch_thunder; + case CPUFAMILY_ARM_FIRESTORM_ICESTORM: + /* Hexa-core: 2x Firestorm + 4x Icestorm; Octa-core: 4x Firestorm + 4x Icestorm */ + return core_index + 4 < core_count ? cpuinfo_uarch_firestorm : cpuinfo_uarch_icestorm; + default: + /* Use hw.cpusubtype for detection */ + break; + } + + #if CPUINFO_ARCH_ARM + switch (cpu_subtype) { + case CPU_SUBTYPE_ARM_V7: + return cpuinfo_uarch_cortex_a8; + case CPU_SUBTYPE_ARM_V7F: + return cpuinfo_uarch_cortex_a9; + case CPU_SUBTYPE_ARM_V7K: + return cpuinfo_uarch_cortex_a7; + default: + return cpuinfo_uarch_unknown; + } + #else + return cpuinfo_uarch_unknown; + #endif +} + +static void decode_package_name(char* package_name) { + size_t size; + if (sysctlbyname("hw.machine", NULL, &size, NULL, 0) != 0) { + cpuinfo_log_warning("sysctlbyname(\"hw.machine\") failed: %s", strerror(errno)); + return; + } + + char *machine_name = alloca(size); + if (sysctlbyname("hw.machine", machine_name, &size, NULL, 0) != 0) { + cpuinfo_log_warning("sysctlbyname(\"hw.machine\") failed: %s", strerror(errno)); + return; + } + cpuinfo_log_debug("hw.machine: %s", machine_name); + + char name[10]; + uint32_t major = 0, minor = 0; + if (sscanf(machine_name, "%9[^,0123456789]%"SCNu32",%"SCNu32, name, &major, &minor) != 3) { + cpuinfo_log_warning("parsing \"hw.machine\" failed: %s", strerror(errno)); + return; + } + + uint32_t chip_model = 0; + char suffix = '\0'; + if (strcmp(name, "iPhone") == 0) { + /* + * iPhone 4 and up are supported: + * - iPhone 4 [A4]: iPhone3,1, iPhone3,2, iPhone3,3 + * - iPhone 4S [A5]: iPhone4,1 + * - iPhone 5 [A6]: iPhone5,1, iPhone5,2 + * - iPhone 5c [A6]: iPhone5,3, iPhone5,4 + * - iPhone 5s [A7]: iPhone6,1, iPhone6,2 + * - iPhone 6 [A8]: iPhone7,2 + * - iPhone 6 Plus [A8]: iPhone7,1 + * - iPhone 6s [A9]: iPhone8,1 + * - iPhone 6s Plus [A9]: iPhone8,2 + * - iPhone SE [A9]: iPhone8,4 + * - iPhone 7 [A10]: iPhone9,1, iPhone9,3 + * - iPhone 7 Plus [A10]: iPhone9,2, iPhone9,4 + * - iPhone 8 [A11]: iPhone10,1, iPhone10,4 + * - iPhone 8 Plus [A11]: iPhone10,2, iPhone10,5 + * - iPhone X [A11]: iPhone10,3, iPhone10,6 + * - iPhone XS [A12]: iPhone11,2, + * - iPhone XS Max [A12]: iPhone11,4, iPhone11,6 + * - iPhone XR [A12]: iPhone11,8 + */ + chip_model = major + 1; + } else if (strcmp(name, "iPad") == 0) { + switch (major) { + /* iPad 2 and up are supported */ + case 2: + /* + * iPad 2 [A5]: iPad2,1, iPad2,2, iPad2,3, iPad2,4 + * iPad mini [A5]: iPad2,5, iPad2,6, iPad2,7 + */ + chip_model = major + 3; + break; + case 3: + /* + * iPad 3rd Gen [A5X]: iPad3,1, iPad3,2, iPad3,3 + * iPad 4th Gen [A6X]: iPad3,4, iPad3,5, iPad3,6 + */ + chip_model = (minor <= 3) ? 5 : 6; + suffix = 'X'; + break; + case 4: + /* + * iPad Air [A7]: iPad4,1, iPad4,2, iPad4,3 + * iPad mini Retina [A7]: iPad4,4, iPad4,5, iPad4,6 + * iPad mini 3 [A7]: iPad4,7, iPad4,8, iPad4,9 + */ + chip_model = major + 3; + break; + case 5: + /* + * iPad mini 4 [A8]: iPad5,1, iPad5,2 + * iPad Air 2 [A8X]: iPad5,3, iPad5,4 + */ + chip_model = major + 3; + suffix = (minor <= 2) ? '\0' : 'X'; + break; + case 6: + /* + * iPad Pro 9.7" [A9X]: iPad6,3, iPad6,4 + * iPad Pro [A9X]: iPad6,7, iPad6,8 + * iPad 5th Gen [A9]: iPad6,11, iPad6,12 + */ + chip_model = major + 3; + suffix = minor <= 8 ? 'X' : '\0'; + break; + case 7: + /* + * iPad Pro 12.9" [A10X]: iPad7,1, iPad7,2 + * iPad Pro 10.5" [A10X]: iPad7,3, iPad7,4 + * iPad 6th Gen [A10]: iPad7,5, iPad7,6 + */ + chip_model = major + 3; + suffix = minor <= 4 ? 'X' : '\0'; + break; + default: + cpuinfo_log_info("unknown iPad: %s", machine_name); + break; + } + } else if (strcmp(name, "iPod") == 0) { + switch (major) { + case 5: + chip_model = 5; + break; + /* iPod touch (5th Gen) [A5]: iPod5,1 */ + case 7: + /* iPod touch (6th Gen, 2015) [A8]: iPod7,1 */ + chip_model = 8; + break; + default: + cpuinfo_log_info("unknown iPod: %s", machine_name); + break; + } + } else { + cpuinfo_log_info("unknown device: %s", machine_name); + } + if (chip_model != 0) { + snprintf(package_name, CPUINFO_PACKAGE_NAME_MAX, "Apple A%"PRIu32"%c", chip_model, suffix); + } +} + +void cpuinfo_arm_mach_init(void) { + struct cpuinfo_processor* processors = NULL; + struct cpuinfo_core* cores = NULL; + struct cpuinfo_cluster* clusters = NULL; + struct cpuinfo_package* packages = NULL; + struct cpuinfo_uarch_info* uarchs = NULL; + struct cpuinfo_cache* l1i = NULL; + struct cpuinfo_cache* l1d = NULL; + struct cpuinfo_cache* l2 = NULL; + struct cpuinfo_cache* l3 = NULL; + + struct cpuinfo_mach_topology mach_topology = cpuinfo_mach_detect_topology(); + processors = calloc(mach_topology.threads, sizeof(struct cpuinfo_processor)); + if (processors == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" logical processors", + mach_topology.threads * sizeof(struct cpuinfo_processor), mach_topology.threads); + goto cleanup; + } + cores = calloc(mach_topology.cores, sizeof(struct cpuinfo_core)); + if (cores == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" cores", + mach_topology.cores * sizeof(struct cpuinfo_core), mach_topology.cores); + goto cleanup; + } + packages = calloc(mach_topology.packages, sizeof(struct cpuinfo_package)); + if (packages == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" packages", + mach_topology.packages * sizeof(struct cpuinfo_package), mach_topology.packages); + goto cleanup; + } + + const uint32_t threads_per_core = mach_topology.threads / mach_topology.cores; + const uint32_t threads_per_package = mach_topology.threads / mach_topology.packages; + const uint32_t cores_per_package = mach_topology.cores / mach_topology.packages; + + for (uint32_t i = 0; i < mach_topology.packages; i++) { + packages[i] = (struct cpuinfo_package) { + .processor_start = i * threads_per_package, + .processor_count = threads_per_package, + .core_start = i * cores_per_package, + .core_count = cores_per_package, + }; + decode_package_name(packages[i].name); + } + + + const uint32_t cpu_family = get_sys_info_by_name("hw.cpufamily"); + const uint32_t cpu_type = get_sys_info_by_name("hw.cputype"); + const uint32_t cpu_subtype = get_sys_info_by_name("hw.cpusubtype"); + switch (cpu_type) { + case CPU_TYPE_ARM64: + cpuinfo_isa.aes = true; + cpuinfo_isa.sha1 = true; + cpuinfo_isa.sha2 = true; + cpuinfo_isa.pmull = true; + cpuinfo_isa.crc32 = true; + break; +#if CPUINFO_ARCH_ARM + case CPU_TYPE_ARM: + switch (cpu_subtype) { + case CPU_SUBTYPE_ARM_V8: + cpuinfo_isa.armv8 = true; + cpuinfo_isa.aes = true; + cpuinfo_isa.sha1 = true; + cpuinfo_isa.sha2 = true; + cpuinfo_isa.pmull = true; + cpuinfo_isa.crc32 = true; + /* Fall-through to add ARMv7S features */ + case CPU_SUBTYPE_ARM_V7S: + case CPU_SUBTYPE_ARM_V7K: + cpuinfo_isa.fma = true; + /* Fall-through to add ARMv7F features */ + case CPU_SUBTYPE_ARM_V7F: + cpuinfo_isa.armv7mp = true; + cpuinfo_isa.fp16 = true; + /* Fall-through to add ARMv7 features */ + case CPU_SUBTYPE_ARM_V7: + break; + default: + break; + } + break; +#endif + } + /* + * Support for ARMv8.1 Atomics & FP16 arithmetic instructions is supposed to be detected via + * sysctlbyname calls with "hw.optional.armv8_1_atomics" and "hw.optional.neon_fp16" arguments + * (see https://devstreaming-cdn.apple.com/videos/wwdc/2018/409t8zw7rumablsh/409/409_whats_new_in_llvm.pdf), + * but on new iOS versions these calls just fail with EPERM. + * + * Thus, we whitelist CPUs known to support these instructions. + */ + switch (cpu_family) { + case CPUFAMILY_ARM_MONSOON_MISTRAL: + case CPUFAMILY_ARM_VORTEX_TEMPEST: + case CPUFAMILY_ARM_LIGHTNING_THUNDER: + case CPUFAMILY_ARM_FIRESTORM_ICESTORM: + #if CPUINFO_ARCH_ARM64 + cpuinfo_isa.atomics = true; + #endif + cpuinfo_isa.fp16arith = true; + } + + /* + * There does not yet seem to exist an OS mechanism to detect support for + * ARMv8.2 optional dot-product instructions, so we currently whitelist CPUs + * known to support these instruction. + */ + switch (cpu_family) { + case CPUFAMILY_ARM_LIGHTNING_THUNDER: + case CPUFAMILY_ARM_FIRESTORM_ICESTORM: + cpuinfo_isa.dot = true; + } + + uint32_t num_clusters = 1; + for (uint32_t i = 0; i < mach_topology.cores; i++) { + cores[i] = (struct cpuinfo_core) { + .processor_start = i * threads_per_core, + .processor_count = threads_per_core, + .core_id = i % cores_per_package, + .package = packages + i / cores_per_package, + .vendor = cpuinfo_vendor_apple, + .uarch = decode_uarch(cpu_family, cpu_subtype, i, mach_topology.cores), + }; + if (i != 0 && cores[i].uarch != cores[i - 1].uarch) { + num_clusters++; + } + } + for (uint32_t i = 0; i < mach_topology.threads; i++) { + const uint32_t smt_id = i % threads_per_core; + const uint32_t core_id = i / threads_per_core; + const uint32_t package_id = i / threads_per_package; + + processors[i].smt_id = smt_id; + processors[i].core = &cores[core_id]; + processors[i].package = &packages[package_id]; + } + + clusters = calloc(num_clusters, sizeof(struct cpuinfo_cluster)); + if (clusters == NULL) { + cpuinfo_log_error( + "failed to allocate %zu bytes for descriptions of %"PRIu32" clusters", + num_clusters * sizeof(struct cpuinfo_cluster), num_clusters); + goto cleanup; + } + uarchs = calloc(num_clusters, sizeof(struct cpuinfo_uarch_info)); + if (uarchs == NULL) { + cpuinfo_log_error( + "failed to allocate %zu bytes for descriptions of %"PRIu32" uarchs", + num_clusters * sizeof(enum cpuinfo_uarch), num_clusters); + goto cleanup; + } + uint32_t cluster_idx = UINT32_MAX; + for (uint32_t i = 0; i < mach_topology.cores; i++) { + if (i == 0 || cores[i].uarch != cores[i - 1].uarch) { + cluster_idx++; + uarchs[cluster_idx] = (struct cpuinfo_uarch_info) { + .uarch = cores[i].uarch, + .processor_count = 1, + .core_count = 1, + }; + clusters[cluster_idx] = (struct cpuinfo_cluster) { + .processor_start = i * threads_per_core, + .processor_count = 1, + .core_start = i, + .core_count = 1, + .cluster_id = cluster_idx, + .package = cores[i].package, + .vendor = cores[i].vendor, + .uarch = cores[i].uarch, + }; + } else { + uarchs[cluster_idx].processor_count++; + uarchs[cluster_idx].core_count++; + clusters[cluster_idx].processor_count++; + clusters[cluster_idx].core_count++; + } + cores[i].cluster = &clusters[cluster_idx]; + } + + for (uint32_t i = 0; i < mach_topology.threads; i++) { + const uint32_t core_id = i / threads_per_core; + processors[i].cluster = cores[core_id].cluster; + } + + for (uint32_t i = 0; i < mach_topology.packages; i++) { + packages[i].cluster_start = 0; + packages[i].cluster_count = num_clusters; + } + + const uint32_t cacheline_size = get_sys_info(HW_CACHELINE, "HW_CACHELINE"); + const uint32_t l1d_cache_size = get_sys_info(HW_L1DCACHESIZE, "HW_L1DCACHESIZE"); + const uint32_t l1i_cache_size = get_sys_info(HW_L1ICACHESIZE, "HW_L1ICACHESIZE"); + const uint32_t l2_cache_size = get_sys_info(HW_L2CACHESIZE, "HW_L2CACHESIZE"); + const uint32_t l3_cache_size = get_sys_info(HW_L3CACHESIZE, "HW_L3CACHESIZE"); + const uint32_t l1_cache_associativity = 4; + const uint32_t l2_cache_associativity = 8; + const uint32_t l3_cache_associativity = 16; + const uint32_t cache_partitions = 1; + const uint32_t cache_flags = 0; + + uint32_t threads_per_l1 = 0, l1_count = 0; + if (l1i_cache_size != 0 || l1d_cache_size != 0) { + /* Assume L1 caches are private to each core */ + threads_per_l1 = 1; + l1_count = mach_topology.threads / threads_per_l1; + cpuinfo_log_debug("detected %"PRIu32" L1 caches", l1_count); + } + + uint32_t threads_per_l2 = 0, l2_count = 0; + if (l2_cache_size != 0) { + /* Assume L2 cache is shared between all cores */ + threads_per_l2 = mach_topology.cores; + l2_count = 1; + cpuinfo_log_debug("detected %"PRIu32" L2 caches", l2_count); + } + + uint32_t threads_per_l3 = 0, l3_count = 0; + if (l3_cache_size != 0) { + /* Assume L3 cache is shared between all cores */ + threads_per_l3 = mach_topology.cores; + l3_count = 1; + cpuinfo_log_debug("detected %"PRIu32" L3 caches", l3_count); + } + + if (l1i_cache_size != 0) { + l1i = calloc(l1_count, sizeof(struct cpuinfo_cache)); + if (l1i == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L1I caches", + l1_count * sizeof(struct cpuinfo_cache), l1_count); + goto cleanup; + } + for (uint32_t c = 0; c < l1_count; c++) { + l1i[c] = (struct cpuinfo_cache) { + .size = l1i_cache_size, + .associativity = l1_cache_associativity, + .sets = l1i_cache_size / (l1_cache_associativity * cacheline_size), + .partitions = cache_partitions, + .line_size = cacheline_size, + .flags = cache_flags, + .processor_start = c * threads_per_l1, + .processor_count = threads_per_l1, + }; + } + for (uint32_t t = 0; t < mach_topology.threads; t++) { + processors[t].cache.l1i = &l1i[t / threads_per_l1]; + } + } + + if (l1d_cache_size != 0) { + l1d = calloc(l1_count, sizeof(struct cpuinfo_cache)); + if (l1d == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L1D caches", + l1_count * sizeof(struct cpuinfo_cache), l1_count); + goto cleanup; + } + for (uint32_t c = 0; c < l1_count; c++) { + l1d[c] = (struct cpuinfo_cache) { + .size = l1d_cache_size, + .associativity = l1_cache_associativity, + .sets = l1d_cache_size / (l1_cache_associativity * cacheline_size), + .partitions = cache_partitions, + .line_size = cacheline_size, + .flags = cache_flags, + .processor_start = c * threads_per_l1, + .processor_count = threads_per_l1, + }; + } + for (uint32_t t = 0; t < mach_topology.threads; t++) { + processors[t].cache.l1d = &l1d[t / threads_per_l1]; + } + } + + if (l2_count != 0) { + l2 = calloc(l2_count, sizeof(struct cpuinfo_cache)); + if (l2 == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L2 caches", + l2_count * sizeof(struct cpuinfo_cache), l2_count); + goto cleanup; + } + for (uint32_t c = 0; c < l2_count; c++) { + l2[c] = (struct cpuinfo_cache) { + .size = l2_cache_size, + .associativity = l2_cache_associativity, + .sets = l2_cache_size / (l2_cache_associativity * cacheline_size), + .partitions = cache_partitions, + .line_size = cacheline_size, + .flags = cache_flags, + .processor_start = c * threads_per_l2, + .processor_count = threads_per_l2, + }; + } + for (uint32_t t = 0; t < mach_topology.threads; t++) { + processors[t].cache.l2 = &l2[0]; + } + } + + if (l3_count != 0) { + l3 = calloc(l3_count, sizeof(struct cpuinfo_cache)); + if (l3 == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L3 caches", + l3_count * sizeof(struct cpuinfo_cache), l3_count); + goto cleanup; + } + for (uint32_t c = 0; c < l3_count; c++) { + l3[c] = (struct cpuinfo_cache) { + .size = l3_cache_size, + .associativity = l3_cache_associativity, + .sets = l3_cache_size / (l3_cache_associativity * cacheline_size), + .partitions = cache_partitions, + .line_size = cacheline_size, + .flags = cache_flags, + .processor_start = c * threads_per_l3, + .processor_count = threads_per_l3, + }; + } + for (uint32_t t = 0; t < mach_topology.threads; t++) { + processors[t].cache.l3 = &l3[0]; + } + } + + /* Commit changes */ + cpuinfo_processors = processors; + cpuinfo_cores = cores; + cpuinfo_clusters = clusters; + cpuinfo_packages = packages; + cpuinfo_uarchs = uarchs; + cpuinfo_cache[cpuinfo_cache_level_1i] = l1i; + cpuinfo_cache[cpuinfo_cache_level_1d] = l1d; + cpuinfo_cache[cpuinfo_cache_level_2] = l2; + cpuinfo_cache[cpuinfo_cache_level_3] = l3; + + cpuinfo_processors_count = mach_topology.threads; + cpuinfo_cores_count = mach_topology.cores; + cpuinfo_clusters_count = num_clusters; + cpuinfo_packages_count = mach_topology.packages; + cpuinfo_uarchs_count = num_clusters; + cpuinfo_cache_count[cpuinfo_cache_level_1i] = l1_count; + cpuinfo_cache_count[cpuinfo_cache_level_1d] = l1_count; + cpuinfo_cache_count[cpuinfo_cache_level_2] = l2_count; + cpuinfo_cache_count[cpuinfo_cache_level_3] = l3_count; + cpuinfo_max_cache_size = cpuinfo_compute_max_cache_size(&processors[0]); + + __sync_synchronize(); + + cpuinfo_is_initialized = true; + + processors = NULL; + cores = NULL; + clusters = NULL; + packages = NULL; + uarchs = NULL; + l1i = l1d = l2 = l3 = NULL; + +cleanup: + free(processors); + free(cores); + free(clusters); + free(packages); + free(uarchs); + free(l1i); + free(l1d); + free(l2); + free(l3); +} diff --git a/3rdparty/cpuinfo/src/arm/midr.h b/3rdparty/cpuinfo/src/arm/midr.h new file mode 100644 index 000000000..6329783ad --- /dev/null +++ b/3rdparty/cpuinfo/src/arm/midr.h @@ -0,0 +1,260 @@ +#pragma once +#include + + +#define CPUINFO_ARM_MIDR_IMPLEMENTER_MASK UINT32_C(0xFF000000) +#define CPUINFO_ARM_MIDR_VARIANT_MASK UINT32_C(0x00F00000) +#define CPUINFO_ARM_MIDR_ARCHITECTURE_MASK UINT32_C(0x000F0000) +#define CPUINFO_ARM_MIDR_PART_MASK UINT32_C(0x0000FFF0) +#define CPUINFO_ARM_MIDR_REVISION_MASK UINT32_C(0x0000000F) + +#define CPUINFO_ARM_MIDR_IMPLEMENTER_OFFSET 24 +#define CPUINFO_ARM_MIDR_VARIANT_OFFSET 20 +#define CPUINFO_ARM_MIDR_ARCHITECTURE_OFFSET 16 +#define CPUINFO_ARM_MIDR_PART_OFFSET 4 +#define CPUINFO_ARM_MIDR_REVISION_OFFSET 0 + +#define CPUINFO_ARM_MIDR_ARM1156 UINT32_C(0x410FB560) +#define CPUINFO_ARM_MIDR_CORTEX_A7 UINT32_C(0x410FC070) +#define CPUINFO_ARM_MIDR_CORTEX_A9 UINT32_C(0x410FC090) +#define CPUINFO_ARM_MIDR_CORTEX_A15 UINT32_C(0x410FC0F0) +#define CPUINFO_ARM_MIDR_CORTEX_A17 UINT32_C(0x410FC0E0) +#define CPUINFO_ARM_MIDR_CORTEX_A35 UINT32_C(0x410FD040) +#define CPUINFO_ARM_MIDR_CORTEX_A53 UINT32_C(0x410FD030) +#define CPUINFO_ARM_MIDR_CORTEX_A55 UINT32_C(0x410FD050) +#define CPUINFO_ARM_MIDR_CORTEX_A57 UINT32_C(0x410FD070) +#define CPUINFO_ARM_MIDR_CORTEX_A72 UINT32_C(0x410FD080) +#define CPUINFO_ARM_MIDR_CORTEX_A73 UINT32_C(0x410FD090) +#define CPUINFO_ARM_MIDR_CORTEX_A75 UINT32_C(0x410FD0A0) +#define CPUINFO_ARM_MIDR_KRYO280_GOLD UINT32_C(0x51AF8001) +#define CPUINFO_ARM_MIDR_KRYO280_SILVER UINT32_C(0x51AF8014) +#define CPUINFO_ARM_MIDR_KRYO385_GOLD UINT32_C(0x518F802D) +#define CPUINFO_ARM_MIDR_KRYO385_SILVER UINT32_C(0x518F803C) +#define CPUINFO_ARM_MIDR_KRYO_SILVER_821 UINT32_C(0x510F2010) +#define CPUINFO_ARM_MIDR_KRYO_GOLD UINT32_C(0x510F2050) +#define CPUINFO_ARM_MIDR_KRYO_SILVER_820 UINT32_C(0x510F2110) +#define CPUINFO_ARM_MIDR_EXYNOS_M1_M2 UINT32_C(0x530F0010) +#define CPUINFO_ARM_MIDR_DENVER2 UINT32_C(0x4E0F0030) + +inline static uint32_t midr_set_implementer(uint32_t midr, uint32_t implementer) { + return (midr & ~CPUINFO_ARM_MIDR_IMPLEMENTER_MASK) | + ((implementer << CPUINFO_ARM_MIDR_IMPLEMENTER_OFFSET) & CPUINFO_ARM_MIDR_IMPLEMENTER_MASK); +} + +inline static uint32_t midr_set_variant(uint32_t midr, uint32_t variant) { + return (midr & ~CPUINFO_ARM_MIDR_VARIANT_MASK) | + ((variant << CPUINFO_ARM_MIDR_VARIANT_OFFSET) & CPUINFO_ARM_MIDR_VARIANT_MASK); +} + +inline static uint32_t midr_set_architecture(uint32_t midr, uint32_t architecture) { + return (midr & ~CPUINFO_ARM_MIDR_ARCHITECTURE_MASK) | + ((architecture << CPUINFO_ARM_MIDR_ARCHITECTURE_OFFSET) & CPUINFO_ARM_MIDR_ARCHITECTURE_MASK); +} + +inline static uint32_t midr_set_part(uint32_t midr, uint32_t part) { + return (midr & ~CPUINFO_ARM_MIDR_PART_MASK) | + ((part << CPUINFO_ARM_MIDR_PART_OFFSET) & CPUINFO_ARM_MIDR_PART_MASK); +} + +inline static uint32_t midr_set_revision(uint32_t midr, uint32_t revision) { + return (midr & ~CPUINFO_ARM_MIDR_REVISION_MASK) | + ((revision << CPUINFO_ARM_MIDR_REVISION_OFFSET) & CPUINFO_ARM_MIDR_REVISION_MASK); +} + +inline static uint32_t midr_get_variant(uint32_t midr) { + return (midr & CPUINFO_ARM_MIDR_VARIANT_MASK) >> CPUINFO_ARM_MIDR_VARIANT_OFFSET; +} + +inline static uint32_t midr_get_implementer(uint32_t midr) { + return (midr & CPUINFO_ARM_MIDR_IMPLEMENTER_MASK) >> CPUINFO_ARM_MIDR_IMPLEMENTER_OFFSET; +} + +inline static uint32_t midr_get_part(uint32_t midr) { + return (midr & CPUINFO_ARM_MIDR_PART_MASK) >> CPUINFO_ARM_MIDR_PART_OFFSET; +} + +inline static uint32_t midr_get_revision(uint32_t midr) { + return (midr & CPUINFO_ARM_MIDR_REVISION_MASK) >> CPUINFO_ARM_MIDR_REVISION_OFFSET; +} + +inline static uint32_t midr_copy_implementer(uint32_t midr, uint32_t other_midr) { + return (midr & ~CPUINFO_ARM_MIDR_IMPLEMENTER_MASK) | (other_midr & CPUINFO_ARM_MIDR_IMPLEMENTER_MASK); +} + +inline static uint32_t midr_copy_variant(uint32_t midr, uint32_t other_midr) { + return (midr & ~CPUINFO_ARM_MIDR_VARIANT_MASK) | (other_midr & CPUINFO_ARM_MIDR_VARIANT_MASK); +} + +inline static uint32_t midr_copy_architecture(uint32_t midr, uint32_t other_midr) { + return (midr & ~CPUINFO_ARM_MIDR_ARCHITECTURE_MASK) | (other_midr & CPUINFO_ARM_MIDR_ARCHITECTURE_MASK); +} + +inline static uint32_t midr_copy_part(uint32_t midr, uint32_t other_midr) { + return (midr & ~CPUINFO_ARM_MIDR_PART_MASK) | (other_midr & CPUINFO_ARM_MIDR_PART_MASK); +} + +inline static uint32_t midr_copy_revision(uint32_t midr, uint32_t other_midr) { + return (midr & ~CPUINFO_ARM_MIDR_REVISION_MASK) | (other_midr & CPUINFO_ARM_MIDR_REVISION_MASK); +} + +inline static bool midr_is_arm1156(uint32_t midr) { + const uint32_t uarch_mask = CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK; + return (midr & uarch_mask) == (CPUINFO_ARM_MIDR_ARM1156 & uarch_mask); +} + +inline static bool midr_is_arm11(uint32_t midr) { + return (midr & (CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | 0x0000F000)) == UINT32_C(0x4100B000); +} + +inline static bool midr_is_cortex_a9(uint32_t midr) { + const uint32_t uarch_mask = CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK; + return (midr & uarch_mask) == (CPUINFO_ARM_MIDR_CORTEX_A9 & uarch_mask); +} + +inline static bool midr_is_scorpion(uint32_t midr) { + switch (midr & (CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK)) { + case UINT32_C(0x510000F0): + case UINT32_C(0x510002D0): + return true; + default: + return false; + } +} + +inline static bool midr_is_krait(uint32_t midr) { + switch (midr & (CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK)) { + case UINT32_C(0x510004D0): + case UINT32_C(0x510006F0): + return true; + default: + return false; + } +} + +inline static bool midr_is_cortex_a53(uint32_t midr) { + const uint32_t uarch_mask = CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK; + return (midr & uarch_mask) == (CPUINFO_ARM_MIDR_CORTEX_A53 & uarch_mask); +} + +inline static bool midr_is_qualcomm_cortex_a53_silver(uint32_t midr) { + const uint32_t uarch_mask = CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK; + return (midr & uarch_mask) == (CPUINFO_ARM_MIDR_KRYO280_SILVER & uarch_mask); +} + +inline static bool midr_is_qualcomm_cortex_a55_silver(uint32_t midr) { + const uint32_t uarch_mask = CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK; + return (midr & uarch_mask) == (CPUINFO_ARM_MIDR_KRYO385_SILVER & uarch_mask); +} + +inline static bool midr_is_kryo280_gold(uint32_t midr) { + const uint32_t uarch_mask = CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK; + return (midr & uarch_mask) == (CPUINFO_ARM_MIDR_KRYO280_GOLD & uarch_mask); +} + +inline static bool midr_is_kryo_silver(uint32_t midr) { + const uint32_t uarch_mask = + CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_ARCHITECTURE_MASK | CPUINFO_ARM_MIDR_PART_MASK; + switch (midr & uarch_mask) { + case CPUINFO_ARM_MIDR_KRYO_SILVER_820: + case CPUINFO_ARM_MIDR_KRYO_SILVER_821: + return true; + default: + return false; + } +} + +inline static bool midr_is_kryo_gold(uint32_t midr) { + const uint32_t uarch_mask = CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK; + return (midr & uarch_mask) == (CPUINFO_ARM_MIDR_KRYO_GOLD & uarch_mask); +} + +inline static uint32_t midr_score_core(uint32_t midr) { + const uint32_t core_mask = CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_PART_MASK; + switch (midr & core_mask) { + case UINT32_C(0x53000030): /* Exynos M4 */ + case UINT32_C(0x53000040): /* Exynos M5 */ + case UINT32_C(0x4100D440): /* Cortex-X1 */ + /* These cores are in big role w.r.t Cortex-A75/-A76/-A77/-A78 */ + return 6; + case UINT32_C(0x4E000030): /* Denver 2 */ + case UINT32_C(0x53000010): /* Exynos M1 and Exynos M2 */ + case UINT32_C(0x53000020): /* Exynos M3 */ + case UINT32_C(0x51008040): /* Kryo 485 Gold / Gold Prime */ + case UINT32_C(0x51008020): /* Kryo 385 Gold */ + case UINT32_C(0x51008000): /* Kryo 260 / 280 Gold */ + case UINT32_C(0x51002050): /* Kryo Gold */ + case UINT32_C(0x4800D400): /* Cortex-A76 (HiSilicon) */ + case UINT32_C(0x4100D490): /* Neoverse N2 */ + case UINT32_C(0x4100D410): /* Cortex-A78 */ + case UINT32_C(0x4100D400): /* Neoverse V1 */ + case UINT32_C(0x4100D0D0): /* Cortex-A77 */ + case UINT32_C(0x4100D0E0): /* Cortex-A76AE */ + case UINT32_C(0x4100D0C0): /* Neoverse-N1 */ + case UINT32_C(0x4100D0B0): /* Cortex-A76 */ + case UINT32_C(0x4100D0A0): /* Cortex-A75 */ + case UINT32_C(0x4100D090): /* Cortex-A73 */ + case UINT32_C(0x4100D080): /* Cortex-A72 */ +#if CPUINFO_ARCH_ARM + case UINT32_C(0x4100C0F0): /* Cortex-A15 */ + case UINT32_C(0x4100C0E0): /* Cortex-A17 */ + case UINT32_C(0x4100C0D0): /* Rockchip RK3288 cores */ + case UINT32_C(0x4100C0C0): /* Cortex-A12 */ +#endif /* CPUINFO_ARCH_ARM */ + /* These cores are always in big role */ + return 5; + case UINT32_C(0x4100D070): /* Cortex-A57 */ + /* Cortex-A57 can be in LITTLE role w.r.t. Denver 2, or in big role w.r.t. Cortex-A53 */ + return 4; +#if CPUINFO_ARCH_ARM64 + case UINT32_C(0x4100D060): /* Cortex-A65 */ +#endif /* CPUINFO_ARCH_ARM64 */ + case UINT32_C(0x4100D050): /* Cortex-A55 */ + case UINT32_C(0x4100D030): /* Cortex-A53 */ + /* Cortex-A53 is usually in LITTLE role, but can be in big role w.r.t. Cortex-A35 */ + return 2; + case UINT32_C(0x4100D040): /* Cortex-A35 */ +#if CPUINFO_ARCH_ARM + case UINT32_C(0x4100C070): /* Cortex-A7 */ +#endif /* CPUINFO_ARCH_ARM */ + case UINT32_C(0x51008050): /* Kryo 485 Silver */ + case UINT32_C(0x51008030): /* Kryo 385 Silver */ + case UINT32_C(0x51008010): /* Kryo 260 / 280 Silver */ + case UINT32_C(0x51002110): /* Kryo Silver (Snapdragon 820) */ + case UINT32_C(0x51002010): /* Kryo Silver (Snapdragon 821) */ + /* These cores are always in LITTLE core */ + return 1; + default: + /* + * Unknown cores, or cores which do not have big/LITTLE roles. + * To be future-proof w.r.t. cores not yet recognized in cpuinfo, assume position between + * Cortex-A57/A72/A73/A75 and Cortex-A53/A55. Then at least future cores paired with + * one of these known cores will be properly scored. + */ + return 3; + } +} + +inline static uint32_t midr_little_core_for_big(uint32_t midr) { + const uint32_t core_mask = + CPUINFO_ARM_MIDR_IMPLEMENTER_MASK | CPUINFO_ARM_MIDR_ARCHITECTURE_MASK | CPUINFO_ARM_MIDR_PART_MASK; + switch (midr & core_mask) { + case CPUINFO_ARM_MIDR_CORTEX_A75: + return CPUINFO_ARM_MIDR_CORTEX_A55; + case CPUINFO_ARM_MIDR_CORTEX_A73: + case CPUINFO_ARM_MIDR_CORTEX_A72: + case CPUINFO_ARM_MIDR_CORTEX_A57: + case CPUINFO_ARM_MIDR_EXYNOS_M1_M2: + return CPUINFO_ARM_MIDR_CORTEX_A53; + case CPUINFO_ARM_MIDR_CORTEX_A17: + case CPUINFO_ARM_MIDR_CORTEX_A15: + return CPUINFO_ARM_MIDR_CORTEX_A7; + case CPUINFO_ARM_MIDR_KRYO280_GOLD: + return CPUINFO_ARM_MIDR_KRYO280_SILVER; + case CPUINFO_ARM_MIDR_KRYO_GOLD: + return CPUINFO_ARM_MIDR_KRYO_SILVER_820; + case CPUINFO_ARM_MIDR_DENVER2: + return CPUINFO_ARM_MIDR_CORTEX_A57; + default: + return midr; + } +} diff --git a/3rdparty/cpuinfo/src/arm/tlb.c b/3rdparty/cpuinfo/src/arm/tlb.c new file mode 100644 index 000000000..9beb8327e --- /dev/null +++ b/3rdparty/cpuinfo/src/arm/tlb.c @@ -0,0 +1,133 @@ + + +switch (uarch) { + case cpuinfo_uarch_cortex_a5: + /* + * Cortex-A5 Technical Reference Manual: + * 6.3.1. Micro TLB + * The first level of caching for the page table information is a micro TLB of + * 10 entries that is implemented on each of the instruction and data sides. + * 6.3.2. Main TLB + * Misses from the instruction and data micro TLBs are handled by a unified main TLB. + * The main TLB is 128-entry two-way set-associative. + */ + break; + case cpuinfo_uarch_cortex_a7: + /* + * Cortex-A7 MPCore Technical Reference Manual: + * 5.3.1. Micro TLB + * The first level of caching for the page table information is a micro TLB of + * 10 entries that is implemented on each of the instruction and data sides. + * 5.3.2. Main TLB + * Misses from the micro TLBs are handled by a unified main TLB. This is a 256-entry 2-way + * set-associative structure. The main TLB supports all the VMSAv7 page sizes of + * 4KB, 64KB, 1MB and 16MB in addition to the LPAE page sizes of 2MB and 1G. + */ + break; + case cpuinfo_uarch_cortex_a8: + /* + * Cortex-A8 Technical Reference Manual: + * 6.1. About the MMU + * The MMU features include the following: + * - separate, fully-associative, 32-entry data and instruction TLBs + * - TLB entries that support 4KB, 64KB, 1MB, and 16MB pages + */ + break; + case cpuinfo_uarch_cortex_a9: + /* + * ARM Cortex‑A9 Technical Reference Manual: + * 6.2.1 Micro TLB + * The first level of caching for the page table information is a micro TLB of 32 entries on the data side, + * and configurable 32 or 64 entries on the instruction side. + * 6.2.2 Main TLB + * The main TLB is implemented as a combination of: + * - A fully-associative, lockable array of four elements. + * - A 2-way associative structure of 2x32, 2x64, 2x128 or 2x256 entries. + */ + break; + case cpuinfo_uarch_cortex_a15: + /* + * ARM Cortex-A15 MPCore Processor Technical Reference Manual: + * 5.2.1. L1 instruction TLB + * The L1 instruction TLB is a 32-entry fully-associative structure. This TLB caches entries at the 4KB + * granularity of Virtual Address (VA) to Physical Address (PA) mapping only. If the page tables map the + * memory region to a larger granularity than 4K, it only allocates one mapping for the particular 4K region + * to which the current access corresponds. + * 5.2.2. L1 data TLB + * There are two separate 32-entry fully-associative TLBs that are used for data loads and stores, + * respectively. Similar to the L1 instruction TLB, both of these cache entries at the 4KB granularity of + * VA to PA mappings only. At implementation time, the Cortex-A15 MPCore processor can be configured with + * the -l1tlb_1m option, to have the L1 data TLB cache entries at both the 4KB and 1MB granularity. + * With this configuration, any translation that results in a 1MB or larger page is cached in the L1 data + * TLB as a 1MB entry. Any translation that results in a page smaller than 1MB is cached in the L1 data TLB + * as a 4KB entry. By default, all translations are cached in the L1 data TLB as a 4KB entry. + * 5.2.3. L2 TLB + * Misses from the L1 instruction and data TLBs are handled by a unified L2 TLB. This is a 512-entry 4-way + * set-associative structure. The L2 TLB supports all the VMSAv7 page sizes of 4K, 64K, 1MB and 16MB in + * addition to the LPAE page sizes of 2MB and 1GB. + */ + break; + case cpuinfo_uarch_cortex_a17: + /* + * ARM Cortex-A17 MPCore Processor Technical Reference Manual: + * 5.2.1. Instruction micro TLB + * The instruction micro TLB is implemented as a 32, 48 or 64 entry, fully-associative structure. This TLB + * caches entries at the 4KB and 1MB granularity of Virtual Address (VA) to Physical Address (PA) mapping + * only. If the translation tables map the memory region to a larger granularity than 4KB or 1MB, it only + * allocates one mapping for the particular 4KB region to which the current access corresponds. + * 5.2.2. Data micro TLB + * The data micro TLB is a 32 entry fully-associative TLB that is used for data loads and stores. The cache + * entries have a 4KB and 1MB granularity of VA to PA mappings only. + * 5.2.3. Unified main TLB + * Misses from the instruction and data micro TLBs are handled by a unified main TLB. This is a 1024 entry + * 4-way set-associative structure. The main TLB supports all the VMSAv7 page sizes of 4K, 64K, 1MB and 16MB + * in addition to the LPAE page sizes of 2MB and 1GB. + */ + break; + case cpuinfo_uarch_cortex_a35: + /* + * ARM Cortex‑A35 Processor Technical Reference Manual: + * A6.2 TLB Organization + * Micro TLB + * The first level of caching for the translation table information is a micro TLB of ten entries that + * is implemented on each of the instruction and data sides. + * Main TLB + * A unified main TLB handles misses from the micro TLBs. It has a 512-entry, 2-way, set-associative + * structure and supports all VMSAv8 block sizes, except 1GB. If it fetches a 1GB block, the TLB splits + * it into 512MB blocks and stores the appropriate block for the lookup. + */ + break; + case cpuinfo_uarch_cortex_a53: + /* + * ARM Cortex-A53 MPCore Processor Technical Reference Manual: + * 5.2.1. Micro TLB + * The first level of caching for the translation table information is a micro TLB of ten entries that is + * implemented on each of the instruction and data sides. + * 5.2.2. Main TLB + * A unified main TLB handles misses from the micro TLBs. This is a 512-entry, 4-way, set-associative + * structure. The main TLB supports all VMSAv8 block sizes, except 1GB. If a 1GB block is fetched, it is + * split into 512MB blocks and the appropriate block for the lookup stored. + */ + break; + case cpuinfo_uarch_cortex_a57: + /* + * ARM® Cortex-A57 MPCore Processor Technical Reference Manual: + * 5.2.1 L1 instruction TLB + * The L1 instruction TLB is a 48-entry fully-associative structure. This TLB caches entries of three + * different page sizes, natively 4KB, 64KB, and 1MB, of VA to PA mappings. If the page tables map the memory + * region to a larger granularity than 1MB, it only allocates one mapping for the particular 1MB region to + * which the current access corresponds. + * 5.2.2 L1 data TLB + * The L1 data TLB is a 32-entry fully-associative TLB that is used for data loads and stores. This TLB + * caches entries of three different page sizes, natively 4KB, 64KB, and 1MB, of VA to PA mappings. + * 5.2.3 L2 TLB + * Misses from the L1 instruction and data TLBs are handled by a unified L2 TLB. This is a 1024-entry 4-way + * set-associative structure. The L2 TLB supports the page sizes of 4K, 64K, 1MB and 16MB. It also supports + * page sizes of 2MB and 1GB for the long descriptor format translation in AArch32 state and in AArch64 state + * when using the 4KB translation granule. In addition, the L2 TLB supports the 512MB page map size defined + * for the AArch64 translations that use a 64KB translation granule. + */ + break; +} + + diff --git a/3rdparty/cpuinfo/src/arm/uarch.c b/3rdparty/cpuinfo/src/arm/uarch.c new file mode 100644 index 000000000..346e1c188 --- /dev/null +++ b/3rdparty/cpuinfo/src/arm/uarch.c @@ -0,0 +1,370 @@ +#include + +#include +#include +#include + + +void cpuinfo_arm_decode_vendor_uarch( + uint32_t midr, +#if CPUINFO_ARCH_ARM + bool has_vfpv4, +#endif /* CPUINFO_ARCH_ARM */ + enum cpuinfo_vendor vendor[restrict static 1], + enum cpuinfo_uarch uarch[restrict static 1]) +{ + switch (midr_get_implementer(midr)) { + case 'A': + *vendor = cpuinfo_vendor_arm; + switch (midr_get_part(midr)) { +#if CPUINFO_ARCH_ARM + case 0xC05: + *uarch = cpuinfo_uarch_cortex_a5; + break; + case 0xC07: + *uarch = cpuinfo_uarch_cortex_a7; + break; + case 0xC08: + *uarch = cpuinfo_uarch_cortex_a8; + break; + case 0xC09: + *uarch = cpuinfo_uarch_cortex_a9; + break; + case 0xC0C: + *uarch = cpuinfo_uarch_cortex_a12; + break; + case 0xC0E: + *uarch = cpuinfo_uarch_cortex_a17; + break; + case 0xC0D: + /* + * Rockchip RK3288 only. + * Core information is ambiguous: some sources specify Cortex-A12, others - Cortex-A17. + * Assume it is Cortex-A12. + */ + *uarch = cpuinfo_uarch_cortex_a12; + break; + case 0xC0F: + *uarch = cpuinfo_uarch_cortex_a15; + break; +#endif /* CPUINFO_ARCH_ARM */ + case 0xD01: + *uarch = cpuinfo_uarch_cortex_a32; + break; + case 0xD03: + *uarch = cpuinfo_uarch_cortex_a53; + break; + case 0xD04: + *uarch = cpuinfo_uarch_cortex_a35; + break; + case 0xD05: + // Note: use Variant, not Revision, field + *uarch = (midr & CPUINFO_ARM_MIDR_VARIANT_MASK) == 0 ? + cpuinfo_uarch_cortex_a55r0 : cpuinfo_uarch_cortex_a55; + break; + case 0xD06: + *uarch = cpuinfo_uarch_cortex_a65; + break; + case 0xD07: + *uarch = cpuinfo_uarch_cortex_a57; + break; + case 0xD08: + *uarch = cpuinfo_uarch_cortex_a72; + break; + case 0xD09: + *uarch = cpuinfo_uarch_cortex_a73; + break; + case 0xD0A: + *uarch = cpuinfo_uarch_cortex_a75; + break; + case 0xD0B: + *uarch = cpuinfo_uarch_cortex_a76; + break; +#if CPUINFO_ARCH_ARM64 && !defined(__ANDROID__) + case 0xD0C: + *uarch = cpuinfo_uarch_neoverse_n1; + break; +#endif /* CPUINFO_ARCH_ARM64 && !defined(__ANDROID__) */ + case 0xD0D: + *uarch = cpuinfo_uarch_cortex_a77; + break; + case 0xD0E: /* Cortex-A76AE */ + *uarch = cpuinfo_uarch_cortex_a76; + break; +#if CPUINFO_ARCH_ARM64 && !defined(__ANDROID__) + case 0xD40: + *uarch = cpuinfo_uarch_neoverse_v1; + break; +#endif /* CPUINFO_ARCH_ARM64 && !defined(__ANDROID__) */ + case 0xD41: /* Cortex-A78 */ + *uarch = cpuinfo_uarch_cortex_a78; + break; + case 0xD44: /* Cortex-X1 */ + *uarch = cpuinfo_uarch_cortex_x1; + break; +#if CPUINFO_ARCH_ARM64 && !defined(__ANDROID__) + case 0xD49: + *uarch = cpuinfo_uarch_neoverse_n2; + break; + case 0xD4A: + *uarch = cpuinfo_uarch_neoverse_e1; + break; +#endif /* CPUINFO_ARCH_ARM64 && !defined(__ANDROID__) */ + default: + switch (midr_get_part(midr) >> 8) { +#if CPUINFO_ARCH_ARM + case 7: + *uarch = cpuinfo_uarch_arm7; + break; + case 9: + *uarch = cpuinfo_uarch_arm9; + break; + case 11: + *uarch = cpuinfo_uarch_arm11; + break; +#endif /* CPUINFO_ARCH_ARM */ + default: + cpuinfo_log_warning("unknown ARM CPU part 0x%03"PRIx32" ignored", midr_get_part(midr)); + } + } + break; + case 'B': + *vendor = cpuinfo_vendor_broadcom; + switch (midr_get_part(midr)) { + case 0x00F: + *uarch = cpuinfo_uarch_brahma_b15; + break; + case 0x100: + *uarch = cpuinfo_uarch_brahma_b53; + break; +#if CPUINFO_ARCH_ARM64 && !defined(__ANDROID__) + case 0x516: + /* Broadcom Vulkan was sold to Cavium before it reached the market, so we identify it as Cavium ThunderX2 */ + *vendor = cpuinfo_vendor_cavium; + *uarch = cpuinfo_uarch_thunderx2; + break; +#endif + default: + cpuinfo_log_warning("unknown Broadcom CPU part 0x%03"PRIx32" ignored", midr_get_part(midr)); + } + break; +#if CPUINFO_ARCH_ARM64 && !defined(__ANDROID__) + case 'C': + *vendor = cpuinfo_vendor_cavium; + switch (midr_get_part(midr)) { + case 0x0A0: /* ThunderX */ + case 0x0A1: /* ThunderX 88XX */ + case 0x0A2: /* ThunderX 81XX */ + case 0x0A3: /* ThunderX 83XX */ + *uarch = cpuinfo_uarch_thunderx; + break; + case 0x0AF: /* ThunderX2 99XX */ + *uarch = cpuinfo_uarch_thunderx2; + break; + default: + cpuinfo_log_warning("unknown Cavium CPU part 0x%03"PRIx32" ignored", midr_get_part(midr)); + } + break; +#endif + case 'H': + *vendor = cpuinfo_vendor_huawei; + switch (midr_get_part(midr)) { +#if CPUINFO_ARCH_ARM64 && !defined(__ANDROID__) + case 0xD01: /* Kunpeng 920 series */ + *uarch = cpuinfo_uarch_taishan_v110; + break; +#endif + case 0xD40: /* Kirin 980 Big/Medium cores -> Cortex-A76 */ + *vendor = cpuinfo_vendor_arm; + *uarch = cpuinfo_uarch_cortex_a76; + break; + default: + cpuinfo_log_warning("unknown Huawei CPU part 0x%03"PRIx32" ignored", midr_get_part(midr)); + } + break; +#if CPUINFO_ARCH_ARM + case 'i': + *vendor = cpuinfo_vendor_intel; + switch (midr_get_part(midr) >> 8) { + case 2: /* PXA 210/25X/26X */ + case 4: /* PXA 27X */ + case 6: /* PXA 3XX */ + *uarch = cpuinfo_uarch_xscale; + break; + default: + cpuinfo_log_warning("unknown Intel CPU part 0x%03"PRIx32" ignored", midr_get_part(midr)); + } + break; +#endif /* CPUINFO_ARCH_ARM */ + case 'N': + *vendor = cpuinfo_vendor_nvidia; + switch (midr_get_part(midr)) { + case 0x000: + *uarch = cpuinfo_uarch_denver; + break; + case 0x003: + *uarch = cpuinfo_uarch_denver2; + break; + case 0x004: + *uarch = cpuinfo_uarch_carmel; + break; + default: + cpuinfo_log_warning("unknown Nvidia CPU part 0x%03"PRIx32" ignored", midr_get_part(midr)); + } + break; +#if !defined(__ANDROID__) + case 'P': + *vendor = cpuinfo_vendor_apm; + switch (midr_get_part(midr)) { + case 0x000: + *uarch = cpuinfo_uarch_xgene; + break; + default: + cpuinfo_log_warning("unknown Applied Micro CPU part 0x%03"PRIx32" ignored", midr_get_part(midr)); + } + break; +#endif + case 'Q': + *vendor = cpuinfo_vendor_qualcomm; + switch (midr_get_part(midr)) { +#if CPUINFO_ARCH_ARM + case 0x00F: + /* Mostly Scorpions, but some Cortex A5 may report this value as well */ + if (has_vfpv4) { + /* Unlike Scorpion, Cortex-A5 comes with VFPv4 */ + *vendor = cpuinfo_vendor_arm; + *uarch = cpuinfo_uarch_cortex_a5; + } else { + *uarch = cpuinfo_uarch_scorpion; + } + break; + case 0x02D: /* Dual-core Scorpions */ + *uarch = cpuinfo_uarch_scorpion; + break; + case 0x04D: + /* + * Dual-core Krait: + * - r1p0 -> Krait 200 + * - r1p4 -> Krait 200 + * - r2p0 -> Krait 300 + */ + case 0x06F: + /* + * Quad-core Krait: + * - r0p1 -> Krait 200 + * - r0p2 -> Krait 200 + * - r1p0 -> Krait 300 + * - r2p0 -> Krait 400 (Snapdragon 800 MSMxxxx) + * - r2p1 -> Krait 400 (Snapdragon 801 MSMxxxxPRO) + * - r3p1 -> Krait 450 + */ + *uarch = cpuinfo_uarch_krait; + break; +#endif /* CPUINFO_ARCH_ARM */ + case 0x201: /* Qualcomm Snapdragon 821: Low-power Kryo "Silver" */ + case 0x205: /* Qualcomm Snapdragon 820 & 821: High-performance Kryo "Gold" */ + case 0x211: /* Qualcomm Snapdragon 820: Low-power Kryo "Silver" */ + *uarch = cpuinfo_uarch_kryo; + break; + case 0x800: /* High-performance Kryo 260 (r10p2) / Kryo 280 (r10p1) "Gold" -> Cortex-A73 */ + *vendor = cpuinfo_vendor_arm; + *uarch = cpuinfo_uarch_cortex_a73; + break; + case 0x801: /* Low-power Kryo 260 / 280 "Silver" -> Cortex-A53 */ + *vendor = cpuinfo_vendor_arm; + *uarch = cpuinfo_uarch_cortex_a53; + break; + case 0x802: /* High-performance Kryo 385 "Gold" -> Cortex-A75 */ + *vendor = cpuinfo_vendor_arm; + *uarch = cpuinfo_uarch_cortex_a75; + break; + case 0x803: /* Low-power Kryo 385 "Silver" -> Cortex-A55r0 */ + *vendor = cpuinfo_vendor_arm; + *uarch = cpuinfo_uarch_cortex_a55r0; + break; + case 0x804: /* High-performance Kryo 485 "Gold" / "Gold Prime" -> Cortex-A76 */ + *vendor = cpuinfo_vendor_arm; + *uarch = cpuinfo_uarch_cortex_a76; + break; + case 0x805: /* Low-performance Kryo 485 "Silver" -> Cortex-A55 */ + *vendor = cpuinfo_vendor_arm; + *uarch = cpuinfo_uarch_cortex_a55; + break; +#if CPUINFO_ARCH_ARM64 && !defined(__ANDROID__) + case 0xC00: + *uarch = cpuinfo_uarch_falkor; + break; + case 0xC01: + *uarch = cpuinfo_uarch_saphira; + break; +#endif /* CPUINFO_ARCH_ARM64 && !defined(__ANDROID__) */ + default: + cpuinfo_log_warning("unknown Qualcomm CPU part 0x%03"PRIx32" ignored", midr_get_part(midr)); + } + break; + case 'S': + *vendor = cpuinfo_vendor_samsung; + switch (midr & (CPUINFO_ARM_MIDR_VARIANT_MASK | CPUINFO_ARM_MIDR_PART_MASK)) { + case 0x00100010: + /* + * Exynos 8890 MIDR = 0x531F0011, assume Exynos M1 has: + * - CPU variant 0x1 + * - CPU part 0x001 + */ + *uarch = cpuinfo_uarch_exynos_m1; + break; + case 0x00400010: + /* + * Exynos 8895 MIDR = 0x534F0010, assume Exynos M2 has: + * - CPU variant 0x4 + * - CPU part 0x001 + */ + *uarch = cpuinfo_uarch_exynos_m2; + break; + case 0x00100020: + /* + * Exynos 9810 MIDR = 0x531F0020, assume Exynos M3 has: + * - CPU variant 0x1 + * - CPU part 0x002 + */ + *uarch = cpuinfo_uarch_exynos_m3; + break; + case 0x00100030: + /* + * Exynos 9820 MIDR = 0x531F0030, assume Exynos M4 has: + * - CPU variant 0x1 + * - CPU part 0x003 + */ + *uarch = cpuinfo_uarch_exynos_m4; + break; + case 0x00100040: + /* + * Exynos 9820 MIDR = 0x531F0040, assume Exynos M5 has: + * - CPU variant 0x1 + * - CPU part 0x004 + */ + *uarch = cpuinfo_uarch_exynos_m5; + break; + default: + cpuinfo_log_warning("unknown Samsung CPU variant 0x%01"PRIx32" part 0x%03"PRIx32" ignored", + midr_get_variant(midr), midr_get_part(midr)); + } + break; +#if CPUINFO_ARCH_ARM + case 'V': + *vendor = cpuinfo_vendor_marvell; + switch (midr_get_part(midr)) { + case 0x581: /* PJ4 / PJ4B */ + case 0x584: /* PJ4B-MP / PJ4C */ + *uarch = cpuinfo_uarch_pj4; + break; + default: + cpuinfo_log_warning("unknown Marvell CPU part 0x%03"PRIx32" ignored", midr_get_part(midr)); + } + break; +#endif /* CPUINFO_ARCH_ARM */ + default: + cpuinfo_log_warning("unknown CPU implementer '%c' (0x%02"PRIx32") with CPU part 0x%03"PRIx32" ignored", + (char) midr_get_implementer(midr), midr_get_implementer(midr), midr_get_part(midr)); + } +} diff --git a/3rdparty/cpuinfo/src/cache.c b/3rdparty/cpuinfo/src/cache.c new file mode 100644 index 000000000..b976b8796 --- /dev/null +++ b/3rdparty/cpuinfo/src/cache.c @@ -0,0 +1,18 @@ +#include + +#include +#include + + +uint32_t cpuinfo_compute_max_cache_size(const struct cpuinfo_processor* processor) { + if (processor->cache.l4 != NULL) { + return processor->cache.l4->size; + } else if (processor->cache.l3 != NULL) { + return processor->cache.l3->size; + } else if (processor->cache.l2 != NULL) { + return processor->cache.l2->size; + } else if (processor->cache.l1d != NULL) { + return processor->cache.l1d->size; + } + return 0; +} diff --git a/3rdparty/cpuinfo/src/cpuinfo/common.h b/3rdparty/cpuinfo/src/cpuinfo/common.h new file mode 100644 index 000000000..b2b404d74 --- /dev/null +++ b/3rdparty/cpuinfo/src/cpuinfo/common.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + + +#define CPUINFO_COUNT_OF(array) (sizeof(array) / sizeof(0[array])) + +#if defined(__GNUC__) + #define CPUINFO_LIKELY(condition) (__builtin_expect(!!(condition), 1)) + #define CPUINFO_UNLIKELY(condition) (__builtin_expect(!!(condition), 0)) +#else + #define CPUINFO_LIKELY(condition) (!!(condition)) + #define CPUINFO_UNLIKELY(condition) (!!(condition)) +#endif + +#ifndef CPUINFO_INTERNAL + #if defined(__ELF__) + #define CPUINFO_INTERNAL __attribute__((__visibility__("internal"))) + #elif defined(__MACH__) + #define CPUINFO_INTERNAL __attribute__((__visibility__("hidden"))) + #else + #define CPUINFO_INTERNAL + #endif +#endif + +#ifndef CPUINFO_PRIVATE + #if defined(__ELF__) + #define CPUINFO_PRIVATE __attribute__((__visibility__("hidden"))) + #elif defined(__MACH__) + #define CPUINFO_PRIVATE __attribute__((__visibility__("hidden"))) + #else + #define CPUINFO_PRIVATE + #endif +#endif diff --git a/3rdparty/cpuinfo/src/cpuinfo/internal-api.h b/3rdparty/cpuinfo/src/cpuinfo/internal-api.h new file mode 100644 index 000000000..9c23d7c8b --- /dev/null +++ b/3rdparty/cpuinfo/src/cpuinfo/internal-api.h @@ -0,0 +1,62 @@ +#pragma once + +#include +#include + +#if defined(_WIN32) || defined(__CYGWIN__) + #include +#endif + +#include +#include + + +enum cpuinfo_cache_level { + cpuinfo_cache_level_1i = 0, + cpuinfo_cache_level_1d = 1, + cpuinfo_cache_level_2 = 2, + cpuinfo_cache_level_3 = 3, + cpuinfo_cache_level_4 = 4, + cpuinfo_cache_level_max = 5, +}; + +extern CPUINFO_INTERNAL bool cpuinfo_is_initialized; + +extern CPUINFO_INTERNAL struct cpuinfo_processor* cpuinfo_processors; +extern CPUINFO_INTERNAL struct cpuinfo_core* cpuinfo_cores; +extern CPUINFO_INTERNAL struct cpuinfo_cluster* cpuinfo_clusters; +extern CPUINFO_INTERNAL struct cpuinfo_package* cpuinfo_packages; +extern CPUINFO_INTERNAL struct cpuinfo_cache* cpuinfo_cache[cpuinfo_cache_level_max]; + +extern CPUINFO_INTERNAL uint32_t cpuinfo_processors_count; +extern CPUINFO_INTERNAL uint32_t cpuinfo_cores_count; +extern CPUINFO_INTERNAL uint32_t cpuinfo_clusters_count; +extern CPUINFO_INTERNAL uint32_t cpuinfo_packages_count; +extern CPUINFO_INTERNAL uint32_t cpuinfo_cache_count[cpuinfo_cache_level_max]; +extern CPUINFO_INTERNAL uint32_t cpuinfo_max_cache_size; + +#if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + extern CPUINFO_INTERNAL struct cpuinfo_uarch_info* cpuinfo_uarchs; + extern CPUINFO_INTERNAL uint32_t cpuinfo_uarchs_count; +#else + extern CPUINFO_INTERNAL struct cpuinfo_uarch_info cpuinfo_global_uarch; +#endif + +#ifdef __linux__ + extern CPUINFO_INTERNAL uint32_t cpuinfo_linux_cpu_max; + extern CPUINFO_INTERNAL const struct cpuinfo_processor** cpuinfo_linux_cpu_to_processor_map; + extern CPUINFO_INTERNAL const struct cpuinfo_core** cpuinfo_linux_cpu_to_core_map; +#endif + +CPUINFO_PRIVATE void cpuinfo_x86_mach_init(void); +CPUINFO_PRIVATE void cpuinfo_x86_linux_init(void); +#if defined(_WIN32) || defined(__CYGWIN__) + CPUINFO_PRIVATE BOOL CALLBACK cpuinfo_x86_windows_init(PINIT_ONCE init_once, PVOID parameter, PVOID* context); +#endif +CPUINFO_PRIVATE void cpuinfo_arm_mach_init(void); +CPUINFO_PRIVATE void cpuinfo_arm_linux_init(void); +CPUINFO_PRIVATE void cpuinfo_emscripten_init(void); + +CPUINFO_PRIVATE uint32_t cpuinfo_compute_max_cache_size(const struct cpuinfo_processor* processor); + +typedef void (*cpuinfo_processor_callback)(uint32_t); diff --git a/3rdparty/cpuinfo/src/cpuinfo/log.h b/3rdparty/cpuinfo/src/cpuinfo/log.h new file mode 100644 index 000000000..dac8cdb66 --- /dev/null +++ b/3rdparty/cpuinfo/src/cpuinfo/log.h @@ -0,0 +1,17 @@ +#pragma once + +#include + +#include + +#define CPUINFO_LOG_DEBUG_PARSERS 0 + +#ifndef CPUINFO_LOG_LEVEL + #define CPUINFO_LOG_LEVEL CLOG_ERROR +#endif + +CLOG_DEFINE_LOG_DEBUG(cpuinfo_log_debug, "cpuinfo", CPUINFO_LOG_LEVEL); +CLOG_DEFINE_LOG_INFO(cpuinfo_log_info, "cpuinfo", CPUINFO_LOG_LEVEL); +CLOG_DEFINE_LOG_WARNING(cpuinfo_log_warning, "cpuinfo", CPUINFO_LOG_LEVEL); +CLOG_DEFINE_LOG_ERROR(cpuinfo_log_error, "cpuinfo", CPUINFO_LOG_LEVEL); +CLOG_DEFINE_LOG_FATAL(cpuinfo_log_fatal, "cpuinfo", CPUINFO_LOG_LEVEL); diff --git a/3rdparty/cpuinfo/src/cpuinfo/utils.h b/3rdparty/cpuinfo/src/cpuinfo/utils.h new file mode 100644 index 000000000..157baad9a --- /dev/null +++ b/3rdparty/cpuinfo/src/cpuinfo/utils.h @@ -0,0 +1,19 @@ +#pragma once + +#include + + +inline static uint32_t bit_length(uint32_t n) { + const uint32_t n_minus_1 = n - 1; + if (n_minus_1 == 0) { + return 0; + } else { + #ifdef _MSC_VER + unsigned long bsr; + _BitScanReverse(&bsr, n_minus_1); + return bsr + 1; + #else + return 32 - __builtin_clz(n_minus_1); + #endif + } +} diff --git a/3rdparty/cpuinfo/src/emscripten/init.c b/3rdparty/cpuinfo/src/emscripten/init.c new file mode 100644 index 000000000..ce4bdea2e --- /dev/null +++ b/3rdparty/cpuinfo/src/emscripten/init.c @@ -0,0 +1,277 @@ +#include +#include +#include +#include +#include + +#include + +#include +#include +#include + + +static const volatile float infinity = INFINITY; + +static struct cpuinfo_package static_package = { }; + +static struct cpuinfo_cache static_x86_l3 = { + .size = 2 * 1024 * 1024, + .associativity = 16, + .sets = 2048, + .partitions = 1, + .line_size = 64, +}; + +void cpuinfo_emscripten_init(void) { + struct cpuinfo_processor* processors = NULL; + struct cpuinfo_core* cores = NULL; + struct cpuinfo_cluster* clusters = NULL; + struct cpuinfo_cache* l1i = NULL; + struct cpuinfo_cache* l1d = NULL; + struct cpuinfo_cache* l2 = NULL; + + const bool is_x86 = signbit(infinity - infinity); + + int logical_cores_count = emscripten_num_logical_cores(); + if (logical_cores_count <= 0) { + logical_cores_count = 1; + } + uint32_t processor_count = (uint32_t) logical_cores_count; + uint32_t core_count = processor_count; + uint32_t cluster_count = 1; + uint32_t big_cluster_core_count = core_count; + uint32_t processors_per_core = 1; + if (is_x86) { + if (processor_count % 2 == 0) { + processors_per_core = 2; + core_count = processor_count / 2; + big_cluster_core_count = core_count; + } + } else { + /* Assume ARM/ARM64 */ + if (processor_count > 4) { + /* Assume big.LITTLE architecture */ + cluster_count = 2; + big_cluster_core_count = processor_count >= 8 ? 4 : 2; + } + } + uint32_t l2_count = is_x86 ? core_count : cluster_count; + + processors = calloc(processor_count, sizeof(struct cpuinfo_processor)); + if (processors == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" logical processors", + processor_count * sizeof(struct cpuinfo_processor), processor_count); + goto cleanup; + } + cores = calloc(processor_count, sizeof(struct cpuinfo_core)); + if (cores == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" cores", + processor_count * sizeof(struct cpuinfo_core), processor_count); + goto cleanup; + } + clusters = calloc(cluster_count, sizeof(struct cpuinfo_cluster)); + if (clusters == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" clusters", + cluster_count * sizeof(struct cpuinfo_cluster), cluster_count); + goto cleanup; + } + + l1i = calloc(core_count, sizeof(struct cpuinfo_cache)); + if (l1i == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L1I caches", + core_count * sizeof(struct cpuinfo_cache), core_count); + goto cleanup; + } + + l1d = calloc(core_count, sizeof(struct cpuinfo_cache)); + if (l1d == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L1D caches", + core_count * sizeof(struct cpuinfo_cache), core_count); + goto cleanup; + } + + l2 = calloc(l2_count, sizeof(struct cpuinfo_cache)); + if (l2 == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L2 caches", + l2_count * sizeof(struct cpuinfo_cache), l2_count); + goto cleanup; + } + + static_package.processor_count = processor_count; + static_package.core_count = core_count; + static_package.cluster_count = cluster_count; + if (is_x86) { + strncpy(static_package.name, "x86 vCPU", CPUINFO_PACKAGE_NAME_MAX); + } else { + strncpy(static_package.name, "ARM vCPU", CPUINFO_PACKAGE_NAME_MAX); + } + + for (uint32_t i = 0; i < core_count; i++) { + for (uint32_t j = 0; j < processors_per_core; j++) { + processors[i * processors_per_core + j] = (struct cpuinfo_processor) { + .smt_id = j, + .core = cores + i, + .cluster = clusters + (uint32_t) (i >= big_cluster_core_count), + .package = &static_package, + .cache.l1i = l1i + i, + .cache.l1d = l1d + i, + .cache.l2 = is_x86 ? l2 + i : l2 + (uint32_t) (i >= big_cluster_core_count), + .cache.l3 = is_x86 ? &static_x86_l3 : NULL, + }; + } + + cores[i] = (struct cpuinfo_core) { + .processor_start = i * processors_per_core, + .processor_count = processors_per_core, + .core_id = i, + .cluster = clusters + (uint32_t) (i >= big_cluster_core_count), + .package = &static_package, + .vendor = cpuinfo_vendor_unknown, + .uarch = cpuinfo_uarch_unknown, + .frequency = 0, + }; + + l1i[i] = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4, + .sets = 128, + .partitions = 1, + .line_size = 64, + .processor_start = i * processors_per_core, + .processor_count = processors_per_core, + }; + + l1d[i] = (struct cpuinfo_cache) { + .size = 32 * 1024, + .associativity = 4, + .sets = 128, + .partitions = 1, + .line_size = 64, + .processor_start = i * processors_per_core, + .processor_count = processors_per_core, + }; + + if (is_x86) { + l2[i] = (struct cpuinfo_cache) { + .size = 256 * 1024, + .associativity = 8, + .sets = 512, + .partitions = 1, + .line_size = 64, + .processor_start = i * processors_per_core, + .processor_count = processors_per_core, + }; + } + } + + if (is_x86) { + clusters[0] = (struct cpuinfo_cluster) { + .processor_start = 0, + .processor_count = processor_count, + .core_start = 0, + .core_count = core_count, + .cluster_id = 0, + .package = &static_package, + .vendor = cpuinfo_vendor_unknown, + .uarch = cpuinfo_uarch_unknown, + .frequency = 0, + }; + + static_x86_l3.processor_count = processor_count; + } else { + clusters[0] = (struct cpuinfo_cluster) { + .processor_start = 0, + .processor_count = big_cluster_core_count, + .core_start = 0, + .core_count = big_cluster_core_count, + .cluster_id = 0, + .package = &static_package, + .vendor = cpuinfo_vendor_unknown, + .uarch = cpuinfo_uarch_unknown, + .frequency = 0, + }; + + l2[0] = (struct cpuinfo_cache) { + .size = 1024 * 1024, + .associativity = 8, + .sets = 2048, + .partitions = 1, + .line_size = 64, + .processor_start = 0, + .processor_count = big_cluster_core_count, + }; + + if (cluster_count > 1) { + l2[1] = (struct cpuinfo_cache) { + .size = 256 * 1024, + .associativity = 8, + .sets = 512, + .partitions = 1, + .line_size = 64, + .processor_start = big_cluster_core_count, + .processor_count = processor_count - big_cluster_core_count, + }; + + clusters[1] = (struct cpuinfo_cluster) { + .processor_start = big_cluster_core_count, + .processor_count = processor_count - big_cluster_core_count, + .core_start = big_cluster_core_count, + .core_count = processor_count - big_cluster_core_count, + .cluster_id = 1, + .package = &static_package, + .vendor = cpuinfo_vendor_unknown, + .uarch = cpuinfo_uarch_unknown, + .frequency = 0, + }; + } + } + + /* Commit changes */ + cpuinfo_cache[cpuinfo_cache_level_1i] = l1i; + cpuinfo_cache[cpuinfo_cache_level_1d] = l1d; + cpuinfo_cache[cpuinfo_cache_level_2] = l2; + if (is_x86) { + cpuinfo_cache[cpuinfo_cache_level_3] = &static_x86_l3; + } + + cpuinfo_processors = processors; + cpuinfo_cores = cores; + cpuinfo_clusters = clusters; + cpuinfo_packages = &static_package; + + cpuinfo_cache_count[cpuinfo_cache_level_1i] = processor_count; + cpuinfo_cache_count[cpuinfo_cache_level_1d] = processor_count; + cpuinfo_cache_count[cpuinfo_cache_level_2] = l2_count; + if (is_x86) { + cpuinfo_cache_count[cpuinfo_cache_level_3] = 1; + } + + cpuinfo_global_uarch = (struct cpuinfo_uarch_info) { + .uarch = cpuinfo_uarch_unknown, + .processor_count = processor_count, + .core_count = core_count, + }; + + cpuinfo_processors_count = processor_count; + cpuinfo_cores_count = processor_count; + cpuinfo_clusters_count = cluster_count; + cpuinfo_packages_count = 1; + + cpuinfo_max_cache_size = is_x86 ? 128 * 1024 * 1024 : 8 * 1024 * 1024; + + cpuinfo_is_initialized = true; + + processors = NULL; + cores = NULL; + clusters = NULL; + l1i = l1d = l2 = NULL; + +cleanup: + free(processors); + free(cores); + free(clusters); + free(l1i); + free(l1d); + free(l2); +} diff --git a/3rdparty/cpuinfo/src/init.c b/3rdparty/cpuinfo/src/init.c new file mode 100644 index 000000000..d61e7be6e --- /dev/null +++ b/3rdparty/cpuinfo/src/init.c @@ -0,0 +1,59 @@ +#if defined(_WIN32) || defined(__CYGWIN__) + #include +#elif !defined(__EMSCRIPTEN__) || defined(__EMSCRIPTEN_PTHREADS__) + #include +#endif + +#include +#include +#include + +#ifdef __APPLE__ + #include "TargetConditionals.h" +#endif + + +#if defined(_WIN32) || defined(__CYGWIN__) + static INIT_ONCE init_guard = INIT_ONCE_STATIC_INIT; +#elif !defined(__EMSCRIPTEN__) || defined(__EMSCRIPTEN_PTHREADS__) + static pthread_once_t init_guard = PTHREAD_ONCE_INIT; +#else + static bool init_guard = false; +#endif + +bool CPUINFO_ABI cpuinfo_initialize(void) { +#if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 + #if defined(__MACH__) && defined(__APPLE__) + pthread_once(&init_guard, &cpuinfo_x86_mach_init); + #elif defined(__linux__) + pthread_once(&init_guard, &cpuinfo_x86_linux_init); + #elif defined(_WIN32) || defined(__CYGWIN__) + InitOnceExecuteOnce(&init_guard, &cpuinfo_x86_windows_init, NULL, NULL); + #else + cpuinfo_log_error("operating system is not supported in cpuinfo"); + #endif +#elif CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + #if defined(__linux__) + pthread_once(&init_guard, &cpuinfo_arm_linux_init); + #elif defined(__MACH__) && defined(__APPLE__) + pthread_once(&init_guard, &cpuinfo_arm_mach_init); + #else + cpuinfo_log_error("operating system is not supported in cpuinfo"); + #endif +#elif CPUINFO_ARCH_ASMJS || CPUINFO_ARCH_WASM || CPUINFO_ARCH_WASMSIMD + #if defined(__EMSCRIPTEN_PTHREADS__) + pthread_once(&init_guard, &cpuinfo_emscripten_init); + #else + if (!init_guard) { + cpuinfo_emscripten_init(); + } + init_guard = true; + #endif +#else + cpuinfo_log_error("processor architecture is not supported in cpuinfo"); +#endif + return cpuinfo_is_initialized; +} + +void CPUINFO_ABI cpuinfo_deinitialize(void) { +} diff --git a/3rdparty/cpuinfo/src/linux/api.h b/3rdparty/cpuinfo/src/linux/api.h new file mode 100644 index 000000000..f55b8ac73 --- /dev/null +++ b/3rdparty/cpuinfo/src/linux/api.h @@ -0,0 +1,59 @@ +#pragma once + +#include +#include +#include + +#include +#include + + +#define CPUINFO_LINUX_FLAG_PRESENT UINT32_C(0x00000001) +#define CPUINFO_LINUX_FLAG_POSSIBLE UINT32_C(0x00000002) +#define CPUINFO_LINUX_FLAG_MAX_FREQUENCY UINT32_C(0x00000004) +#define CPUINFO_LINUX_FLAG_MIN_FREQUENCY UINT32_C(0x00000008) +#define CPUINFO_LINUX_FLAG_SMT_ID UINT32_C(0x00000010) +#define CPUINFO_LINUX_FLAG_CORE_ID UINT32_C(0x00000020) +#define CPUINFO_LINUX_FLAG_PACKAGE_ID UINT32_C(0x00000040) +#define CPUINFO_LINUX_FLAG_APIC_ID UINT32_C(0x00000080) +#define CPUINFO_LINUX_FLAG_SMT_CLUSTER UINT32_C(0x00000100) +#define CPUINFO_LINUX_FLAG_CORE_CLUSTER UINT32_C(0x00000200) +#define CPUINFO_LINUX_FLAG_PACKAGE_CLUSTER UINT32_C(0x00000400) +#define CPUINFO_LINUX_FLAG_PROC_CPUINFO UINT32_C(0x00000800) +#define CPUINFO_LINUX_FLAG_VALID UINT32_C(0x00001000) + + +typedef bool (*cpuinfo_cpulist_callback)(uint32_t, uint32_t, void*); +CPUINFO_INTERNAL bool cpuinfo_linux_parse_cpulist(const char* filename, cpuinfo_cpulist_callback callback, void* context); +typedef bool (*cpuinfo_smallfile_callback)(const char*, const char*, void*); +CPUINFO_INTERNAL bool cpuinfo_linux_parse_small_file(const char* filename, size_t buffer_size, cpuinfo_smallfile_callback, void* context); +typedef bool (*cpuinfo_line_callback)(const char*, const char*, void*, uint64_t); +CPUINFO_INTERNAL bool cpuinfo_linux_parse_multiline_file(const char* filename, size_t buffer_size, cpuinfo_line_callback, void* context); + +CPUINFO_INTERNAL uint32_t cpuinfo_linux_get_max_processors_count(void); +CPUINFO_INTERNAL uint32_t cpuinfo_linux_get_max_possible_processor(uint32_t max_processors_count); +CPUINFO_INTERNAL uint32_t cpuinfo_linux_get_max_present_processor(uint32_t max_processors_count); +CPUINFO_INTERNAL uint32_t cpuinfo_linux_get_processor_min_frequency(uint32_t processor); +CPUINFO_INTERNAL uint32_t cpuinfo_linux_get_processor_max_frequency(uint32_t processor); +CPUINFO_INTERNAL bool cpuinfo_linux_get_processor_package_id(uint32_t processor, uint32_t package_id[restrict static 1]); +CPUINFO_INTERNAL bool cpuinfo_linux_get_processor_core_id(uint32_t processor, uint32_t core_id[restrict static 1]); + +CPUINFO_INTERNAL bool cpuinfo_linux_detect_possible_processors(uint32_t max_processors_count, + uint32_t* processor0_flags, uint32_t processor_struct_size, uint32_t possible_flag); +CPUINFO_INTERNAL bool cpuinfo_linux_detect_present_processors(uint32_t max_processors_count, + uint32_t* processor0_flags, uint32_t processor_struct_size, uint32_t present_flag); + +typedef bool (*cpuinfo_siblings_callback)(uint32_t, uint32_t, uint32_t, void*); +CPUINFO_INTERNAL bool cpuinfo_linux_detect_core_siblings( + uint32_t max_processors_count, + uint32_t processor, + cpuinfo_siblings_callback callback, + void* context); +CPUINFO_INTERNAL bool cpuinfo_linux_detect_thread_siblings( + uint32_t max_processors_count, + uint32_t processor, + cpuinfo_siblings_callback callback, + void* context); + +extern CPUINFO_INTERNAL const struct cpuinfo_processor** cpuinfo_linux_cpu_to_processor_map; +extern CPUINFO_INTERNAL const struct cpuinfo_core** cpuinfo_linux_cpu_to_core_map; diff --git a/3rdparty/cpuinfo/src/linux/cpulist.c b/3rdparty/cpuinfo/src/linux/cpulist.c new file mode 100644 index 000000000..287198638 --- /dev/null +++ b/3rdparty/cpuinfo/src/linux/cpulist.c @@ -0,0 +1,214 @@ +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#if CPUINFO_MOCK + #include +#endif +#include +#include + + +/* + * Size, in chars, of the on-stack buffer used for parsing cpu lists. + * This is also the limit on the length of a single entry + * ( or -) + * in the cpu list. + */ +#define BUFFER_SIZE 256 + + +/* Locale-independent */ +inline static bool is_whitespace(char c) { + switch (c) { + case ' ': + case '\t': + case '\n': + case '\r': + return true; + default: + return false; + } +} + +inline static const char* parse_number(const char* string, const char* end, uint32_t number_ptr[restrict static 1]) { + uint32_t number = 0; + while (string != end) { + const uint32_t digit = (uint32_t) (*string) - (uint32_t) '0'; + if (digit >= 10) { + break; + } + number = number * UINT32_C(10) + digit; + string += 1; + } + *number_ptr = number; + return string; +} + +inline static bool parse_entry(const char* entry_start, const char* entry_end, cpuinfo_cpulist_callback callback, void* context) { + /* Skip whitespace at the beginning of an entry */ + for (; entry_start != entry_end; entry_start++) { + if (!is_whitespace(*entry_start)) { + break; + } + } + /* Skip whitespace at the end of an entry */ + for (; entry_end != entry_start; entry_end--) { + if (!is_whitespace(entry_end[-1])) { + break; + } + } + + const size_t entry_length = (size_t) (entry_end - entry_start); + if (entry_length == 0) { + cpuinfo_log_warning("unexpected zero-length cpu list entry ignored"); + return false; + } + + #if CPUINFO_LOG_DEBUG_PARSERS + cpuinfo_log_debug("parse cpu list entry \"%.*s\" (%zu chars)", (int) entry_length, entry_start, entry_length); + #endif + uint32_t first_cpu, last_cpu; + + const char* number_end = parse_number(entry_start, entry_end, &first_cpu); + if (number_end == entry_start) { + /* Failed to parse the number; ignore the entry */ + cpuinfo_log_warning("invalid character '%c' in the cpu list entry \"%.*s\": entry is ignored", + entry_start[0], (int) entry_length, entry_start); + return false; + } else if (number_end == entry_end) { + /* Completely parsed the entry */ + #if CPUINFO_LOG_DEBUG_PARSERS + cpuinfo_log_debug("cpulist: call callback with list_start = %"PRIu32", list_end = %"PRIu32, + first_cpu, first_cpu + 1); + #endif + return callback(first_cpu, first_cpu + 1, context); + } + + /* Parse the second part of the entry */ + if (*number_end != '-') { + cpuinfo_log_warning("invalid character '%c' in the cpu list entry \"%.*s\": entry is ignored", + *number_end, (int) entry_length, entry_start); + return false; + } + + const char* number_start = number_end + 1; + number_end = parse_number(number_start, entry_end, &last_cpu); + if (number_end == number_start) { + /* Failed to parse the second number; ignore the entry */ + cpuinfo_log_warning("invalid character '%c' in the cpu list entry \"%.*s\": entry is ignored", + *number_start, (int) entry_length, entry_start); + return false; + } + + if (number_end != entry_end) { + /* Partially parsed the entry; ignore unparsed characters and continue with the parsed part */ + cpuinfo_log_warning("ignored invalid characters \"%.*s\" at the end of cpu list entry \"%.*s\"", + (int) (entry_end - number_end), number_start, (int) entry_length, entry_start); + } + + if (last_cpu < first_cpu) { + cpuinfo_log_warning("ignored cpu list entry \"%.*s\": invalid range %"PRIu32"-%"PRIu32, + (int) entry_length, entry_start, first_cpu, last_cpu); + return false; + } + + /* Parsed both parts of the entry; update CPU set */ + #if CPUINFO_LOG_DEBUG_PARSERS + cpuinfo_log_debug("cpulist: call callback with list_start = %"PRIu32", list_end = %"PRIu32, + first_cpu, last_cpu + 1); + #endif + return callback(first_cpu, last_cpu + 1, context); +} + +bool cpuinfo_linux_parse_cpulist(const char* filename, cpuinfo_cpulist_callback callback, void* context) { + bool status = true; + int file = -1; + char buffer[BUFFER_SIZE]; + #if CPUINFO_LOG_DEBUG_PARSERS + cpuinfo_log_debug("parsing cpu list from file %s", filename); + #endif + +#if CPUINFO_MOCK + file = cpuinfo_mock_open(filename, O_RDONLY); +#else + file = open(filename, O_RDONLY); +#endif + if (file == -1) { + cpuinfo_log_info("failed to open %s: %s", filename, strerror(errno)); + status = false; + goto cleanup; + } + + size_t position = 0; + const char* buffer_end = &buffer[BUFFER_SIZE]; + char* data_start = buffer; + ssize_t bytes_read; + do { +#if CPUINFO_MOCK + bytes_read = cpuinfo_mock_read(file, data_start, (size_t) (buffer_end - data_start)); +#else + bytes_read = read(file, data_start, (size_t) (buffer_end - data_start)); +#endif + if (bytes_read < 0) { + cpuinfo_log_info("failed to read file %s at position %zu: %s", filename, position, strerror(errno)); + status = false; + goto cleanup; + } + + position += (size_t) bytes_read; + const char* data_end = data_start + (size_t) bytes_read; + const char* entry_start = buffer; + + if (bytes_read == 0) { + /* No more data in the file: process the remaining text in the buffer as a single entry */ + const char* entry_end = data_end; + const bool entry_status = parse_entry(entry_start, entry_end, callback, context); + status &= entry_status; + } else { + const char* entry_end; + do { + /* Find the end of the entry, as indicated by a comma (',') */ + for (entry_end = entry_start; entry_end != data_end; entry_end++) { + if (*entry_end == ',') { + break; + } + } + + /* + * If we located separator at the end of the entry, parse it. + * Otherwise, there may be more data at the end; read the file once again. + */ + if (entry_end != data_end) { + const bool entry_status = parse_entry(entry_start, entry_end, callback, context); + status &= entry_status; + entry_start = entry_end + 1; + } + } while (entry_end != data_end); + + /* Move remaining partial entry data at the end to the beginning of the buffer */ + const size_t entry_length = (size_t) (entry_end - entry_start); + memmove(buffer, entry_start, entry_length); + data_start = &buffer[entry_length]; + } + } while (bytes_read != 0); + +cleanup: + if (file != -1) { +#if CPUINFO_MOCK + cpuinfo_mock_close(file); +#else + close(file); +#endif + file = -1; + } + return status; +} diff --git a/3rdparty/cpuinfo/src/linux/mockfile.c b/3rdparty/cpuinfo/src/linux/mockfile.c new file mode 100644 index 000000000..138acfeb9 --- /dev/null +++ b/3rdparty/cpuinfo/src/linux/mockfile.c @@ -0,0 +1,105 @@ +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#if !CPUINFO_MOCK + #error This file should be built only in mock mode +#endif + +#include +#include +#include +#include + + +static struct cpuinfo_mock_file* cpuinfo_mock_files = NULL; +static uint32_t cpuinfo_mock_file_count = 0; + + +void CPUINFO_ABI cpuinfo_mock_filesystem(struct cpuinfo_mock_file* files) { + cpuinfo_log_info("filesystem mocking enabled"); + uint32_t file_count = 0; + while (files[file_count].path != NULL) { + /* Indicate that file is not opened */ + files[file_count].offset = SIZE_MAX; + file_count += 1; + } + cpuinfo_mock_files = files; + cpuinfo_mock_file_count = file_count; +} + +int CPUINFO_ABI cpuinfo_mock_open(const char* path, int oflag) { + if (cpuinfo_mock_files == NULL) { + cpuinfo_log_warning("cpuinfo_mock_open called without mock filesystem; redictering to open"); + return open(path, oflag); + } + + for (uint32_t i = 0; i < cpuinfo_mock_file_count; i++) { + if (strcmp(cpuinfo_mock_files[i].path, path) == 0) { + if (oflag != O_RDONLY) { + errno = EACCES; + return -1; + } + if (cpuinfo_mock_files[i].offset != SIZE_MAX) { + errno = ENFILE; + return -1; + } + cpuinfo_mock_files[i].offset = 0; + return (int) i; + } + } + errno = ENOENT; + return -1; +} + +int CPUINFO_ABI cpuinfo_mock_close(int fd) { + if (cpuinfo_mock_files == NULL) { + cpuinfo_log_warning("cpuinfo_mock_close called without mock filesystem; redictering to close"); + return close(fd); + } + + if ((unsigned int) fd >= cpuinfo_mock_file_count) { + errno = EBADF; + return -1; + } + if (cpuinfo_mock_files[fd].offset == SIZE_MAX) { + errno = EBADF; + return -1; + } + cpuinfo_mock_files[fd].offset = SIZE_MAX; + return 0; +} + +ssize_t CPUINFO_ABI cpuinfo_mock_read(int fd, void* buffer, size_t capacity) { + if (cpuinfo_mock_files == NULL) { + cpuinfo_log_warning("cpuinfo_mock_read called without mock filesystem; redictering to read"); + return read(fd, buffer, capacity); + } + + if ((unsigned int) fd >= cpuinfo_mock_file_count) { + errno = EBADF; + return -1; + } + if (cpuinfo_mock_files[fd].offset == SIZE_MAX) { + errno = EBADF; + return -1; + } + + const size_t offset = cpuinfo_mock_files[fd].offset; + size_t count = cpuinfo_mock_files[fd].size - offset; + if (count > capacity) { + count = capacity; + } + memcpy(buffer, (void*) cpuinfo_mock_files[fd].content + offset, count); + cpuinfo_mock_files[fd].offset += count; + return (ssize_t) count; +} diff --git a/3rdparty/cpuinfo/src/linux/multiline.c b/3rdparty/cpuinfo/src/linux/multiline.c new file mode 100644 index 000000000..1feeb9b1c --- /dev/null +++ b/3rdparty/cpuinfo/src/linux/multiline.c @@ -0,0 +1,106 @@ +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#if CPUINFO_MOCK + #include +#endif +#include +#include + + +bool cpuinfo_linux_parse_multiline_file(const char* filename, size_t buffer_size, cpuinfo_line_callback callback, void* context) +{ + int file = -1; + bool status = false; + char* buffer = (char*) alloca(buffer_size); + +#if CPUINFO_MOCK + file = cpuinfo_mock_open(filename, O_RDONLY); +#else + file = open(filename, O_RDONLY); +#endif + if (file == -1) { + cpuinfo_log_info("failed to open %s: %s", filename, strerror(errno)); + goto cleanup; + } + + /* Only used for error reporting */ + size_t position = 0; + uint64_t line_number = 1; + const char* buffer_end = &buffer[buffer_size]; + char* data_start = buffer; + ssize_t bytes_read; + do { +#if CPUINFO_MOCK + bytes_read = cpuinfo_mock_read(file, data_start, (size_t) (buffer_end - data_start)); +#else + bytes_read = read(file, data_start, (size_t) (buffer_end - data_start)); +#endif + if (bytes_read < 0) { + cpuinfo_log_info("failed to read file %s at position %zu: %s", + filename, position, strerror(errno)); + goto cleanup; + } + + position += (size_t) bytes_read; + const char* data_end = data_start + (size_t) bytes_read; + const char* line_start = buffer; + + if (bytes_read == 0) { + /* No more data in the file: process the remaining text in the buffer as a single entry */ + const char* line_end = data_end; + if (!callback(line_start, line_end, context, line_number)) { + goto cleanup; + } + } else { + const char* line_end; + do { + /* Find the end of the entry, as indicated by newline character ('\n') */ + for (line_end = line_start; line_end != data_end; line_end++) { + if (*line_end == '\n') { + break; + } + } + + /* + * If we located separator at the end of the entry, parse it. + * Otherwise, there may be more data at the end; read the file once again. + */ + if (line_end != data_end) { + if (!callback(line_start, line_end, context, line_number++)) { + goto cleanup; + } + line_start = line_end + 1; + } + } while (line_end != data_end); + + /* Move remaining partial line data at the end to the beginning of the buffer */ + const size_t line_length = (size_t) (line_end - line_start); + memmove(buffer, line_start, line_length); + data_start = &buffer[line_length]; + } + } while (bytes_read != 0); + + /* Commit */ + status = true; + +cleanup: + if (file != -1) { +#if CPUINFO_MOCK + cpuinfo_mock_close(file); +#else + close(file); +#endif + file = -1; + } + return status; +} diff --git a/3rdparty/cpuinfo/src/linux/processors.c b/3rdparty/cpuinfo/src/linux/processors.c new file mode 100644 index 000000000..aedba7438 --- /dev/null +++ b/3rdparty/cpuinfo/src/linux/processors.c @@ -0,0 +1,406 @@ +#include +#include +#include +#include +#include + +#if !defined(__ANDROID__) + /* + * sched.h is only used for CPU_SETSIZE constant. + * Android NDK headers before platform 21 do have this constant in sched.h + */ + #include +#endif + +#include +#include + + +#define STRINGIFY(token) #token + +#define KERNEL_MAX_FILENAME "/sys/devices/system/cpu/kernel_max" +#define KERNEL_MAX_FILESIZE 32 +#define FREQUENCY_FILENAME_SIZE (sizeof("/sys/devices/system/cpu/cpu" STRINGIFY(UINT32_MAX) "/cpufreq/cpuinfo_max_freq")) +#define MAX_FREQUENCY_FILENAME_FORMAT "/sys/devices/system/cpu/cpu%" PRIu32 "/cpufreq/cpuinfo_max_freq" +#define MIN_FREQUENCY_FILENAME_FORMAT "/sys/devices/system/cpu/cpu%" PRIu32 "/cpufreq/cpuinfo_min_freq" +#define FREQUENCY_FILESIZE 32 +#define PACKAGE_ID_FILENAME_SIZE (sizeof("/sys/devices/system/cpu/cpu" STRINGIFY(UINT32_MAX) "/topology/physical_package_id")) +#define PACKAGE_ID_FILENAME_FORMAT "/sys/devices/system/cpu/cpu%" PRIu32 "/topology/physical_package_id" +#define PACKAGE_ID_FILESIZE 32 +#define CORE_ID_FILENAME_SIZE (sizeof("/sys/devices/system/cpu/cpu" STRINGIFY(UINT32_MAX) "/topology/core_id")) +#define CORE_ID_FILENAME_FORMAT "/sys/devices/system/cpu/cpu%" PRIu32 "/topology/core_id" +#define CORE_ID_FILESIZE 32 + +#define CORE_SIBLINGS_FILENAME_SIZE (sizeof("/sys/devices/system/cpu/cpu" STRINGIFY(UINT32_MAX) "/topology/core_siblings_list")) +#define CORE_SIBLINGS_FILENAME_FORMAT "/sys/devices/system/cpu/cpu%" PRIu32 "/topology/core_siblings_list" +#define THREAD_SIBLINGS_FILENAME_SIZE (sizeof("/sys/devices/system/cpu/cpu" STRINGIFY(UINT32_MAX) "/topology/thread_siblings_list")) +#define THREAD_SIBLINGS_FILENAME_FORMAT "/sys/devices/system/cpu/cpu%" PRIu32 "/topology/thread_siblings_list" + +#define POSSIBLE_CPULIST_FILENAME "/sys/devices/system/cpu/possible" +#define PRESENT_CPULIST_FILENAME "/sys/devices/system/cpu/present" + + +inline static const char* parse_number(const char* start, const char* end, uint32_t number_ptr[restrict static 1]) { + uint32_t number = 0; + const char* parsed = start; + for (; parsed != end; parsed++) { + const uint32_t digit = (uint32_t) (uint8_t) (*parsed) - (uint32_t) '0'; + if (digit >= 10) { + break; + } + number = number * UINT32_C(10) + digit; + } + *number_ptr = number; + return parsed; +} + +/* Locale-independent */ +inline static bool is_whitespace(char c) { + switch (c) { + case ' ': + case '\t': + case '\n': + case '\r': + return true; + default: + return false; + } +} + +#if defined(__ANDROID__) && !defined(CPU_SETSIZE) + /* + * Android NDK headers before platform 21 do not define CPU_SETSIZE, + * so we hard-code its value, as defined in platform 21 headers + */ + #if defined(__LP64__) + static const uint32_t default_max_processors_count = 1024; + #else + static const uint32_t default_max_processors_count = 32; + #endif +#else + static const uint32_t default_max_processors_count = CPU_SETSIZE; +#endif + +static bool uint32_parser(const char* text_start, const char* text_end, void* context) { + if (text_start == text_end) { + cpuinfo_log_error("failed to parse file %s: file is empty", KERNEL_MAX_FILENAME); + return false; + } + + uint32_t kernel_max = 0; + const char* parsed_end = parse_number(text_start, text_end, &kernel_max); + if (parsed_end == text_start) { + cpuinfo_log_error("failed to parse file %s: \"%.*s\" is not an unsigned number", + KERNEL_MAX_FILENAME, (int) (text_end - text_start), text_start); + return false; + } else { + for (const char* char_ptr = parsed_end; char_ptr != text_end; char_ptr++) { + if (!is_whitespace(*char_ptr)) { + cpuinfo_log_warning("non-whitespace characters \"%.*s\" following number in file %s are ignored", + (int) (text_end - char_ptr), char_ptr, KERNEL_MAX_FILENAME); + break; + } + } + } + + uint32_t* kernel_max_ptr = (uint32_t*) context; + *kernel_max_ptr = kernel_max; + return true; +} + +uint32_t cpuinfo_linux_get_max_processors_count(void) { + uint32_t kernel_max; + if (cpuinfo_linux_parse_small_file(KERNEL_MAX_FILENAME, KERNEL_MAX_FILESIZE, uint32_parser, &kernel_max)) { + cpuinfo_log_debug("parsed kernel_max value of %"PRIu32" from %s", kernel_max, KERNEL_MAX_FILENAME); + + if (kernel_max >= default_max_processors_count) { + cpuinfo_log_warning("kernel_max value of %"PRIu32" parsed from %s exceeds platform-default limit %"PRIu32, + kernel_max, KERNEL_MAX_FILENAME, default_max_processors_count - 1); + } + + return kernel_max + 1; + } else { + cpuinfo_log_warning("using platform-default max processors count = %"PRIu32, default_max_processors_count); + return default_max_processors_count; + } +} + +uint32_t cpuinfo_linux_get_processor_max_frequency(uint32_t processor) { + char max_frequency_filename[FREQUENCY_FILENAME_SIZE]; + const int chars_formatted = snprintf( + max_frequency_filename, FREQUENCY_FILENAME_SIZE, MAX_FREQUENCY_FILENAME_FORMAT, processor); + if ((unsigned int) chars_formatted >= FREQUENCY_FILENAME_SIZE) { + cpuinfo_log_warning("failed to format filename for max frequency of processor %"PRIu32, processor); + return 0; + } + + uint32_t max_frequency; + if (cpuinfo_linux_parse_small_file(max_frequency_filename, FREQUENCY_FILESIZE, uint32_parser, &max_frequency)) { + cpuinfo_log_debug("parsed max frequency value of %"PRIu32" KHz for logical processor %"PRIu32" from %s", + max_frequency, processor, max_frequency_filename); + return max_frequency; + } else { + cpuinfo_log_warning("failed to parse max frequency for processor %"PRIu32" from %s", + processor, max_frequency_filename); + return 0; + } +} + +uint32_t cpuinfo_linux_get_processor_min_frequency(uint32_t processor) { + char min_frequency_filename[FREQUENCY_FILENAME_SIZE]; + const int chars_formatted = snprintf( + min_frequency_filename, FREQUENCY_FILENAME_SIZE, MIN_FREQUENCY_FILENAME_FORMAT, processor); + if ((unsigned int) chars_formatted >= FREQUENCY_FILENAME_SIZE) { + cpuinfo_log_warning("failed to format filename for min frequency of processor %"PRIu32, processor); + return 0; + } + + uint32_t min_frequency; + if (cpuinfo_linux_parse_small_file(min_frequency_filename, FREQUENCY_FILESIZE, uint32_parser, &min_frequency)) { + cpuinfo_log_debug("parsed min frequency value of %"PRIu32" KHz for logical processor %"PRIu32" from %s", + min_frequency, processor, min_frequency_filename); + return min_frequency; + } else { + /* + * This error is less severe than parsing max frequency, because min frequency is only useful for clustering, + * while max frequency is also needed for peak FLOPS calculation. + */ + cpuinfo_log_info("failed to parse min frequency for processor %"PRIu32" from %s", + processor, min_frequency_filename); + return 0; + } +} + +bool cpuinfo_linux_get_processor_core_id(uint32_t processor, uint32_t core_id_ptr[restrict static 1]) { + char core_id_filename[PACKAGE_ID_FILENAME_SIZE]; + const int chars_formatted = snprintf( + core_id_filename, CORE_ID_FILENAME_SIZE, CORE_ID_FILENAME_FORMAT, processor); + if ((unsigned int) chars_formatted >= CORE_ID_FILENAME_SIZE) { + cpuinfo_log_warning("failed to format filename for core id of processor %"PRIu32, processor); + return 0; + } + + uint32_t core_id; + if (cpuinfo_linux_parse_small_file(core_id_filename, CORE_ID_FILESIZE, uint32_parser, &core_id)) { + cpuinfo_log_debug("parsed core id value of %"PRIu32" for logical processor %"PRIu32" from %s", + core_id, processor, core_id_filename); + *core_id_ptr = core_id; + return true; + } else { + cpuinfo_log_info("failed to parse core id for processor %"PRIu32" from %s", + processor, core_id_filename); + return false; + } +} + +bool cpuinfo_linux_get_processor_package_id(uint32_t processor, uint32_t package_id_ptr[restrict static 1]) { + char package_id_filename[PACKAGE_ID_FILENAME_SIZE]; + const int chars_formatted = snprintf( + package_id_filename, PACKAGE_ID_FILENAME_SIZE, PACKAGE_ID_FILENAME_FORMAT, processor); + if ((unsigned int) chars_formatted >= PACKAGE_ID_FILENAME_SIZE) { + cpuinfo_log_warning("failed to format filename for package id of processor %"PRIu32, processor); + return 0; + } + + uint32_t package_id; + if (cpuinfo_linux_parse_small_file(package_id_filename, PACKAGE_ID_FILESIZE, uint32_parser, &package_id)) { + cpuinfo_log_debug("parsed package id value of %"PRIu32" for logical processor %"PRIu32" from %s", + package_id, processor, package_id_filename); + *package_id_ptr = package_id; + return true; + } else { + cpuinfo_log_info("failed to parse package id for processor %"PRIu32" from %s", + processor, package_id_filename); + return false; + } +} + +static bool max_processor_number_parser(uint32_t processor_list_start, uint32_t processor_list_end, void* context) { + uint32_t* processor_number_ptr = (uint32_t*) context; + const uint32_t processor_list_last = processor_list_end - 1; + if (*processor_number_ptr < processor_list_last) { + *processor_number_ptr = processor_list_last; + } + return true; +} + +uint32_t cpuinfo_linux_get_max_possible_processor(uint32_t max_processors_count) { + uint32_t max_possible_processor = 0; + if (!cpuinfo_linux_parse_cpulist(POSSIBLE_CPULIST_FILENAME, max_processor_number_parser, &max_possible_processor)) { + #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + cpuinfo_log_error("failed to parse the list of possible processors in %s", POSSIBLE_CPULIST_FILENAME); + #else + cpuinfo_log_warning("failed to parse the list of possible processors in %s", POSSIBLE_CPULIST_FILENAME); + #endif + return UINT32_MAX; + } + if (max_possible_processor >= max_processors_count) { + cpuinfo_log_warning( + "maximum possible processor number %"PRIu32" exceeds system limit %"PRIu32": truncating to the latter", + max_possible_processor, max_processors_count - 1); + max_possible_processor = max_processors_count - 1; + } + return max_possible_processor; +} + +uint32_t cpuinfo_linux_get_max_present_processor(uint32_t max_processors_count) { + uint32_t max_present_processor = 0; + if (!cpuinfo_linux_parse_cpulist(PRESENT_CPULIST_FILENAME, max_processor_number_parser, &max_present_processor)) { + #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + cpuinfo_log_error("failed to parse the list of present processors in %s", PRESENT_CPULIST_FILENAME); + #else + cpuinfo_log_warning("failed to parse the list of present processors in %s", PRESENT_CPULIST_FILENAME); + #endif + return UINT32_MAX; + } + if (max_present_processor >= max_processors_count) { + cpuinfo_log_warning( + "maximum present processor number %"PRIu32" exceeds system limit %"PRIu32": truncating to the latter", + max_present_processor, max_processors_count - 1); + max_present_processor = max_processors_count - 1; + } + return max_present_processor; +} + +struct detect_processors_context { + uint32_t max_processors_count; + uint32_t* processor0_flags; + uint32_t processor_struct_size; + uint32_t detected_flag; +}; + +static bool detect_processor_parser(uint32_t processor_list_start, uint32_t processor_list_end, void* context) { + const uint32_t max_processors_count = ((struct detect_processors_context*) context)->max_processors_count; + const uint32_t* processor0_flags = ((struct detect_processors_context*) context)->processor0_flags; + const uint32_t processor_struct_size = ((struct detect_processors_context*) context)->processor_struct_size; + const uint32_t detected_flag = ((struct detect_processors_context*) context)->detected_flag; + + for (uint32_t processor = processor_list_start; processor < processor_list_end; processor++) { + if (processor >= max_processors_count) { + break; + } + *((uint32_t*) ((uintptr_t) processor0_flags + processor_struct_size * processor)) |= detected_flag; + } + return true; +} + +bool cpuinfo_linux_detect_possible_processors(uint32_t max_processors_count, + uint32_t* processor0_flags, uint32_t processor_struct_size, uint32_t possible_flag) +{ + struct detect_processors_context context = { + .max_processors_count = max_processors_count, + .processor0_flags = processor0_flags, + .processor_struct_size = processor_struct_size, + .detected_flag = possible_flag, + }; + if (cpuinfo_linux_parse_cpulist(POSSIBLE_CPULIST_FILENAME, detect_processor_parser, &context)) { + return true; + } else { + cpuinfo_log_warning("failed to parse the list of possible processors in %s", POSSIBLE_CPULIST_FILENAME); + return false; + } +} + +bool cpuinfo_linux_detect_present_processors(uint32_t max_processors_count, + uint32_t* processor0_flags, uint32_t processor_struct_size, uint32_t present_flag) +{ + struct detect_processors_context context = { + .max_processors_count = max_processors_count, + .processor0_flags = processor0_flags, + .processor_struct_size = processor_struct_size, + .detected_flag = present_flag, + }; + if (cpuinfo_linux_parse_cpulist(PRESENT_CPULIST_FILENAME, detect_processor_parser, &context)) { + return true; + } else { + cpuinfo_log_warning("failed to parse the list of present processors in %s", PRESENT_CPULIST_FILENAME); + return false; + } +} + +struct siblings_context { + const char* group_name; + uint32_t max_processors_count; + uint32_t processor; + cpuinfo_siblings_callback callback; + void* callback_context; +}; + +static bool siblings_parser(uint32_t sibling_list_start, uint32_t sibling_list_end, struct siblings_context* context) { + const char* group_name = context->group_name; + const uint32_t max_processors_count = context->max_processors_count; + const uint32_t processor = context->processor; + + if (sibling_list_end > max_processors_count) { + cpuinfo_log_warning("ignore %s siblings %"PRIu32"-%"PRIu32" of processor %"PRIu32, + group_name, max_processors_count, sibling_list_end - 1, processor); + sibling_list_end = max_processors_count; + } + + return context->callback(processor, sibling_list_start, sibling_list_end, context->callback_context); +} + +bool cpuinfo_linux_detect_core_siblings( + uint32_t max_processors_count, + uint32_t processor, + cpuinfo_siblings_callback callback, + void* context) +{ + char core_siblings_filename[CORE_SIBLINGS_FILENAME_SIZE]; + const int chars_formatted = snprintf( + core_siblings_filename, CORE_SIBLINGS_FILENAME_SIZE, CORE_SIBLINGS_FILENAME_FORMAT, processor); + if ((unsigned int) chars_formatted >= CORE_SIBLINGS_FILENAME_SIZE) { + cpuinfo_log_warning("failed to format filename for core siblings of processor %"PRIu32, processor); + return false; + } + + struct siblings_context siblings_context = { + .group_name = "package", + .max_processors_count = max_processors_count, + .processor = processor, + .callback = callback, + .callback_context = context, + }; + if (cpuinfo_linux_parse_cpulist(core_siblings_filename, + (cpuinfo_cpulist_callback) siblings_parser, &siblings_context)) + { + return true; + } else { + cpuinfo_log_info("failed to parse the list of core siblings for processor %"PRIu32" from %s", + processor, core_siblings_filename); + return false; + } +} + +bool cpuinfo_linux_detect_thread_siblings( + uint32_t max_processors_count, + uint32_t processor, + cpuinfo_siblings_callback callback, + void* context) +{ + char thread_siblings_filename[THREAD_SIBLINGS_FILENAME_SIZE]; + const int chars_formatted = snprintf( + thread_siblings_filename, THREAD_SIBLINGS_FILENAME_SIZE, THREAD_SIBLINGS_FILENAME_FORMAT, processor); + if ((unsigned int) chars_formatted >= THREAD_SIBLINGS_FILENAME_SIZE) { + cpuinfo_log_warning("failed to format filename for thread siblings of processor %"PRIu32, processor); + return false; + } + + struct siblings_context siblings_context = { + .group_name = "core", + .max_processors_count = max_processors_count, + .processor = processor, + .callback = callback, + .callback_context = context, + }; + if (cpuinfo_linux_parse_cpulist(thread_siblings_filename, + (cpuinfo_cpulist_callback) siblings_parser, &siblings_context)) + { + return true; + } else { + cpuinfo_log_info("failed to parse the list of thread siblings for processor %"PRIu32" from %s", + processor, thread_siblings_filename); + return false; + } +} + diff --git a/3rdparty/cpuinfo/src/linux/smallfile.c b/3rdparty/cpuinfo/src/linux/smallfile.c new file mode 100644 index 000000000..98cde00e5 --- /dev/null +++ b/3rdparty/cpuinfo/src/linux/smallfile.c @@ -0,0 +1,70 @@ +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#if CPUINFO_MOCK + #include +#endif +#include +#include + + +bool cpuinfo_linux_parse_small_file(const char* filename, size_t buffer_size, cpuinfo_smallfile_callback callback, void* context) { + int file = -1; + bool status = false; + char* buffer = (char*) alloca(buffer_size); + + #if CPUINFO_LOG_DEBUG_PARSERS + cpuinfo_log_debug("parsing small file %s", filename); + #endif + +#if CPUINFO_MOCK + file = cpuinfo_mock_open(filename, O_RDONLY); +#else + file = open(filename, O_RDONLY); +#endif + if (file == -1) { + cpuinfo_log_info("failed to open %s: %s", filename, strerror(errno)); + goto cleanup; + } + + size_t buffer_position = 0; + ssize_t bytes_read; + do { +#if CPUINFO_MOCK + bytes_read = cpuinfo_mock_read(file, &buffer[buffer_position], buffer_size - buffer_position); +#else + bytes_read = read(file, &buffer[buffer_position], buffer_size - buffer_position); +#endif + if (bytes_read < 0) { + cpuinfo_log_info("failed to read file %s at position %zu: %s", filename, buffer_position, strerror(errno)); + goto cleanup; + } + buffer_position += (size_t) bytes_read; + if (buffer_position >= buffer_size) { + cpuinfo_log_error("failed to read file %s: insufficient buffer of size %zu", filename, buffer_size); + goto cleanup; + } + } while (bytes_read != 0); + + status = callback(buffer, &buffer[buffer_position], context); + +cleanup: + if (file != -1) { +#if CPUINFO_MOCK + cpuinfo_mock_close(file); +#else + close(file); +#endif + file = -1; + } + return status; +} diff --git a/3rdparty/cpuinfo/src/mach/api.h b/3rdparty/cpuinfo/src/mach/api.h new file mode 100644 index 000000000..fdef5bdff --- /dev/null +++ b/3rdparty/cpuinfo/src/mach/api.h @@ -0,0 +1,16 @@ +#pragma once + +#include + +#define CPUINFO_MACH_MAX_CACHE_LEVELS 8 + + +struct cpuinfo_mach_topology { + uint32_t packages; + uint32_t cores; + uint32_t threads; + uint32_t threads_per_cache[CPUINFO_MACH_MAX_CACHE_LEVELS]; +}; + + +struct cpuinfo_mach_topology cpuinfo_mach_detect_topology(void); diff --git a/3rdparty/cpuinfo/src/mach/topology.c b/3rdparty/cpuinfo/src/mach/topology.c new file mode 100644 index 000000000..b56343bb2 --- /dev/null +++ b/3rdparty/cpuinfo/src/mach/topology.c @@ -0,0 +1,73 @@ +#include +#include +#include + +#include +#include + +#include +#include + +#include + + +struct cpuinfo_mach_topology cpuinfo_mach_detect_topology(void) { + int cores = 1; + size_t sizeof_cores = sizeof(cores); + if (sysctlbyname("hw.physicalcpu_max", &cores, &sizeof_cores, NULL, 0) != 0) { + cpuinfo_log_error("sysctlbyname(\"hw.physicalcpu_max\") failed: %s", strerror(errno)); + } else if (cores <= 0) { + cpuinfo_log_error("sysctlbyname(\"hw.physicalcpu_max\") returned invalid value %d", cores); + cores = 1; + } + + int threads = 1; + size_t sizeof_threads = sizeof(threads); + if (sysctlbyname("hw.logicalcpu_max", &threads, &sizeof_threads, NULL, 0) != 0) { + cpuinfo_log_error("sysctlbyname(\"hw.logicalcpu_max\") failed: %s", strerror(errno)); + } else if (threads <= 0) { + cpuinfo_log_error("sysctlbyname(\"hw.logicalcpu_max\") returned invalid value %d", threads); + threads = cores; + } + + int packages = 1; +#if !TARGET_OS_IPHONE + size_t sizeof_packages = sizeof(packages); + if (sysctlbyname("hw.packages", &packages, &sizeof_packages, NULL, 0) != 0) { + cpuinfo_log_error("sysctlbyname(\"hw.packages\") failed: %s", strerror(errno)); + } else if (packages <= 0) { + cpuinfo_log_error("sysctlbyname(\"hw.packages\") returned invalid value %d", packages); + packages = 1; + } +#endif + + cpuinfo_log_debug("mach topology: packages = %d, cores = %d, threads = %d", packages, (int) cores, (int) threads); + struct cpuinfo_mach_topology topology = { + .packages = (uint32_t) packages, + .cores = (uint32_t) cores, + .threads = (uint32_t) threads + }; + +#if !TARGET_OS_IPHONE + size_t cacheconfig_size = 0; + if (sysctlbyname("hw.cacheconfig", NULL, &cacheconfig_size, NULL, 0) != 0) { + cpuinfo_log_error("sysctlbyname(\"hw.cacheconfig\") failed: %s", strerror(errno)); + } else { + uint64_t* cacheconfig = alloca(cacheconfig_size); + if (sysctlbyname("hw.cacheconfig", cacheconfig, &cacheconfig_size, NULL, 0) != 0) { + cpuinfo_log_error("sysctlbyname(\"hw.cacheconfig\") failed: %s", strerror(errno)); + } else { + size_t cache_configs = cacheconfig_size / sizeof(uint64_t); + cpuinfo_log_debug("mach hw.cacheconfig count: %zu", cache_configs); + if (cache_configs > CPUINFO_MACH_MAX_CACHE_LEVELS) { + cache_configs = CPUINFO_MACH_MAX_CACHE_LEVELS; + } + for (size_t i = 0; i < cache_configs; i++) { + cpuinfo_log_debug("mach hw.cacheconfig[%zu]: %"PRIu64, i, cacheconfig[i]); + topology.threads_per_cache[i] = cacheconfig[i]; + } + } + } +#endif + return topology; +} diff --git a/3rdparty/cpuinfo/src/x86/api.h b/3rdparty/cpuinfo/src/x86/api.h new file mode 100644 index 000000000..213c2d881 --- /dev/null +++ b/3rdparty/cpuinfo/src/x86/api.h @@ -0,0 +1,159 @@ +#pragma once + +#include +#include + +#include +#include + + +struct cpuid_regs { + uint32_t eax; + uint32_t ebx; + uint32_t ecx; + uint32_t edx; +}; + +struct cpuinfo_x86_cache { + uint32_t size; + uint32_t associativity; + uint32_t sets; + uint32_t partitions; + uint32_t line_size; + uint32_t flags; + uint32_t apic_bits; +}; + +struct cpuinfo_x86_caches { + struct cpuinfo_trace_cache trace; + struct cpuinfo_x86_cache l1i; + struct cpuinfo_x86_cache l1d; + struct cpuinfo_x86_cache l2; + struct cpuinfo_x86_cache l3; + struct cpuinfo_x86_cache l4; + uint32_t prefetch_size; +}; + +struct cpuinfo_x86_model_info { + uint32_t model; + uint32_t family; + + uint32_t base_model; + uint32_t base_family; + uint32_t stepping; + uint32_t extended_model; + uint32_t extended_family; + uint32_t processor_type; +}; + +struct cpuinfo_x86_topology { + uint32_t apic_id; + uint32_t thread_bits_offset; + uint32_t thread_bits_length; + uint32_t core_bits_offset; + uint32_t core_bits_length; +}; + +struct cpuinfo_x86_processor { + uint32_t cpuid; + enum cpuinfo_vendor vendor; + enum cpuinfo_uarch uarch; +#ifdef __linux__ + int linux_id; +#endif + struct cpuinfo_x86_caches cache; + struct { + struct cpuinfo_tlb itlb_4KB; + struct cpuinfo_tlb itlb_2MB; + struct cpuinfo_tlb itlb_4MB; + struct cpuinfo_tlb dtlb0_4KB; + struct cpuinfo_tlb dtlb0_2MB; + struct cpuinfo_tlb dtlb0_4MB; + struct cpuinfo_tlb dtlb_4KB; + struct cpuinfo_tlb dtlb_2MB; + struct cpuinfo_tlb dtlb_4MB; + struct cpuinfo_tlb dtlb_1GB; + struct cpuinfo_tlb stlb2_4KB; + struct cpuinfo_tlb stlb2_2MB; + struct cpuinfo_tlb stlb2_1GB; + } tlb; + struct cpuinfo_x86_topology topology; + char brand_string[CPUINFO_PACKAGE_NAME_MAX]; +}; + +CPUINFO_INTERNAL void cpuinfo_x86_init_processor(struct cpuinfo_x86_processor* processor); + +CPUINFO_INTERNAL enum cpuinfo_vendor cpuinfo_x86_decode_vendor(uint32_t ebx, uint32_t ecx, uint32_t edx); +CPUINFO_INTERNAL struct cpuinfo_x86_model_info cpuinfo_x86_decode_model_info(uint32_t eax); +CPUINFO_INTERNAL enum cpuinfo_uarch cpuinfo_x86_decode_uarch( + enum cpuinfo_vendor vendor, + const struct cpuinfo_x86_model_info* model_info); + +CPUINFO_INTERNAL struct cpuinfo_x86_isa cpuinfo_x86_detect_isa( + const struct cpuid_regs basic_info, const struct cpuid_regs extended_info, + uint32_t max_base_index, uint32_t max_extended_index, + enum cpuinfo_vendor vendor, enum cpuinfo_uarch uarch); + +CPUINFO_INTERNAL void cpuinfo_x86_detect_topology( + uint32_t max_base_index, + uint32_t max_extended_index, + struct cpuid_regs leaf1, + struct cpuinfo_x86_topology* topology); + +CPUINFO_INTERNAL void cpuinfo_x86_detect_cache( + uint32_t max_base_index, uint32_t max_extended_index, + bool amd_topology_extensions, + enum cpuinfo_vendor vendor, + const struct cpuinfo_x86_model_info* model_info, + struct cpuinfo_x86_caches* cache, + struct cpuinfo_tlb* itlb_4KB, + struct cpuinfo_tlb* itlb_2MB, + struct cpuinfo_tlb* itlb_4MB, + struct cpuinfo_tlb* dtlb0_4KB, + struct cpuinfo_tlb* dtlb0_2MB, + struct cpuinfo_tlb* dtlb0_4MB, + struct cpuinfo_tlb* dtlb_4KB, + struct cpuinfo_tlb* dtlb_2MB, + struct cpuinfo_tlb* dtlb_4MB, + struct cpuinfo_tlb* dtlb_1GB, + struct cpuinfo_tlb* stlb2_4KB, + struct cpuinfo_tlb* stlb2_2MB, + struct cpuinfo_tlb* stlb2_1GB, + uint32_t* log2_package_cores_max); + +CPUINFO_INTERNAL void cpuinfo_x86_decode_cache_descriptor( + uint8_t descriptor, enum cpuinfo_vendor vendor, + const struct cpuinfo_x86_model_info* model_info, + struct cpuinfo_x86_caches* cache, + struct cpuinfo_tlb* itlb_4KB, + struct cpuinfo_tlb* itlb_2MB, + struct cpuinfo_tlb* itlb_4MB, + struct cpuinfo_tlb* dtlb0_4KB, + struct cpuinfo_tlb* dtlb0_2MB, + struct cpuinfo_tlb* dtlb0_4MB, + struct cpuinfo_tlb* dtlb_4KB, + struct cpuinfo_tlb* dtlb_2MB, + struct cpuinfo_tlb* dtlb_4MB, + struct cpuinfo_tlb* dtlb_1GB, + struct cpuinfo_tlb* stlb2_4KB, + struct cpuinfo_tlb* stlb2_2MB, + struct cpuinfo_tlb* stlb2_1GB, + uint32_t* prefetch_size); + +CPUINFO_INTERNAL bool cpuinfo_x86_decode_deterministic_cache_parameters( + struct cpuid_regs regs, + struct cpuinfo_x86_caches* cache, + uint32_t* package_cores_max); + +CPUINFO_INTERNAL bool cpuinfo_x86_decode_cache_properties( + struct cpuid_regs regs, + struct cpuinfo_x86_caches* cache); + +CPUINFO_INTERNAL uint32_t cpuinfo_x86_normalize_brand_string( + const char raw_name[48], + char normalized_name[48]); + +CPUINFO_INTERNAL uint32_t cpuinfo_x86_format_package_name( + enum cpuinfo_vendor vendor, + const char normalized_brand_string[48], + char package_name[CPUINFO_PACKAGE_NAME_MAX]); diff --git a/3rdparty/cpuinfo/src/x86/cache/descriptor.c b/3rdparty/cpuinfo/src/x86/cache/descriptor.c new file mode 100644 index 000000000..69d38cc39 --- /dev/null +++ b/3rdparty/cpuinfo/src/x86/cache/descriptor.c @@ -0,0 +1,1726 @@ +#include + +#include +#include + + +void cpuinfo_x86_decode_cache_descriptor( + uint8_t descriptor, enum cpuinfo_vendor vendor, + const struct cpuinfo_x86_model_info* model_info, + struct cpuinfo_x86_caches* cache, + struct cpuinfo_tlb* itlb_4KB, + struct cpuinfo_tlb* itlb_2MB, + struct cpuinfo_tlb* itlb_4MB, + struct cpuinfo_tlb* dtlb0_4KB, + struct cpuinfo_tlb* dtlb0_2MB, + struct cpuinfo_tlb* dtlb0_4MB, + struct cpuinfo_tlb* dtlb_4KB, + struct cpuinfo_tlb* dtlb_2MB, + struct cpuinfo_tlb* dtlb_4MB, + struct cpuinfo_tlb* dtlb_1GB, + struct cpuinfo_tlb* stlb2_4KB, + struct cpuinfo_tlb* stlb2_2MB, + struct cpuinfo_tlb* stlb2_1GB, + uint32_t* prefetch_size) +{ + /* + * Descriptors are parsed according to: + * - Application Note 485: Intel Processor Indentification and CPUID Instruction, May 2012, Order Number 241618-039 + * - Intel 64 and IA-32 Architectures Software Developer’s Manual, Volume 2 (2A, 2B, 2C & 2D): Instruction Set + * Reference, A-Z, December 2016. Order Number: 325383-061US + * - Cyrix CPU Detection Guide, Preliminary Revision 1.01 + * - Geode(TM) GX1 Processor Series: Low Power Integrated x86 Solution + */ + switch (descriptor) { + case 0x01: + /* + * Intel ISA Reference: + * "Instruction TLB: 4 KByte pages, 4-way set associative, 32 entries" + * Application Note 485: + * "Instruction TLB: 4-KB Pages, 4-way set associative, 32 entries" + */ + *itlb_4KB = (struct cpuinfo_tlb) { + .entries = 32, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_4KB, + }; + break; + case 0x02: + /* + * Intel ISA Reference: + * "Instruction TLB: 4 MByte pages, fully associative, 2 entries" + * Application Note 485: + * "Instruction TLB: 4-MB Pages, fully associative, 2 entries" + */ + *itlb_4MB = (struct cpuinfo_tlb) { + .entries = 2, + .associativity = 2, + .pages = CPUINFO_PAGE_SIZE_4MB, + }; + break; + case 0x03: + /* + * Intel ISA Reference: + * "Data TLB: 4 KByte pages, 4-way set associative, 64 entries" + * Application Note 485: + * "Data TLB: 4-KB Pages, 4-way set associative, 64 entries" + */ + *dtlb_4KB = (struct cpuinfo_tlb) { + .entries = 64, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_4KB, + }; + break; + case 0x04: + /* + * Intel ISA Reference: + * "Data TLB: 4 MByte pages, 4-way set associative, 8 entries" + * Application Note 485: + * "Data TLB: 4-MB Pages, 4-way set associative, 8 entries" + */ + *dtlb_4MB = (struct cpuinfo_tlb) { + .entries = 8, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_4MB, + }; + break; + case 0x05: + /* + * Intel ISA Reference: + * "Data TLB1: 4 MByte pages, 4-way set associative, 32 entries" + * Application Note 485: + * "Data TLB: 4-MB Pages, 4-way set associative, 32 entries" + */ + *dtlb_4MB = (struct cpuinfo_tlb) { + .entries = 32, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_4MB, + }; + break; + case 0x06: + /* + * Intel ISA Reference: + * "1st-level instruction cache: 8 KBytes, 4-way set associative, 32 byte line size" + * Application Note 485: + * "1st-level instruction cache: 8-KB, 4-way set associative, 32-byte line size" + */ + cache->l1i = (struct cpuinfo_x86_cache) { + .size = 8 * 1024, + .associativity = 4, + .sets = 64, + .partitions = 1, + .line_size = 32, + }; + break; + case 0x08: + /* + * Intel ISA Reference: + * "1st-level instruction cache: 16 KBytes, 4-way set associative, 32 byte line size" + * Application Note 485: + * "1st-level instruction cache: 16-KB, 4-way set associative, 32-byte line size" + */ + cache->l1i = (struct cpuinfo_x86_cache) { + .size = 16 * 1024, + .associativity = 4, + .sets = 128, + .partitions = 1, + .line_size = 32, + }; + break; + case 0x09: + /* + * Intel ISA Reference: + * "1st-level instruction cache: 32KBytes, 4-way set associative, 64 byte line size" + * Application Note 485: + * "1st-level Instruction Cache: 32-KB, 4-way set associative, 64-byte line size" + */ + cache->l1i = (struct cpuinfo_x86_cache) { + .size = 32 * 1024, + .associativity = 4, + .sets = 128, + .partitions = 1, + .line_size = 64, + }; + break; + case 0x0A: + /* + * Intel ISA Reference: + * "1st-level data cache: 8 KBytes, 2-way set associative, 32 byte line size" + * Application Note 485: + * "1st-level data cache: 8-KB, 2-way set associative, 32-byte line size" + */ + cache->l1d = (struct cpuinfo_x86_cache) { + .size = 8 * 1024, + .associativity = 2, + .sets = 128, + .partitions = 1, + .line_size = 32, + }; + break; + case 0x0B: + /* + * Intel ISA Reference: + * "Instruction TLB: 4 MByte pages, 4-way set associative, 4 entries" + * Application Note 485: + * "Instruction TLB: 4-MB pages, 4-way set associative, 4 entries" + */ + *itlb_4MB = (struct cpuinfo_tlb) { + .entries = 4, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_4MB, + }; + break; + case 0x0C: + /* + * Intel ISA Reference: + * "1st-level data cache: 16 KBytes, 4-way set associative, 32 byte line size" + * Application Note 485: + * "1st-level data cache: 16-KB, 4-way set associative, 32-byte line size" + */ + cache->l1d = (struct cpuinfo_x86_cache) { + .size = 16 * 1024, + .associativity = 4, + .sets = 128, + .partitions = 1, + .line_size = 32, + }; + break; + case 0x0D: + /* + * Intel ISA Reference: + * "1st-level data cache: 16 KBytes, 4-way set associative, 64 byte line size" + * Application Note 485: + * "1st-level Data Cache: 16-KB, 4-way set associative, 64-byte line size" + */ + cache->l1d = (struct cpuinfo_x86_cache) { + .size = 16 * 1024, + .associativity = 4, + .sets = 64, + .partitions = 1, + .line_size = 64, + }; + break; + case 0x0E: + /* + * Intel ISA Reference: + * "1st-level data cache: 24 KBytes, 6-way set associative, 64 byte line size" + * Application Note 485: + * "1st-level Data Cache: 24-KB, 6-way set associative, 64-byte line size" + */ + cache->l1d = (struct cpuinfo_x86_cache) { + .size = 24 * 1024, + .associativity = 6, + .sets = 64, + .partitions = 1, + .line_size = 64, + }; + break; + case 0x1D: + /* + * Intel ISA Reference: + * "2nd-level cache: 128 KBytes, 2-way set associative, 64 byte line size" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 128 * 1024, + .associativity = 2, + .sets = 1024, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + case 0x21: + /* + * Intel ISA Reference: + * "2nd-level cache: 256 KBytes, 8-way set associative, 64 byte line size" + * Application Note 485: + * "2nd-level cache: 256-KB, 8-way set associative, 64-byte line size" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 256 * 1024, + .associativity = 8, + .sets = 512, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x22: + /* + * Intel ISA Reference: + * "3rd-level cache: 512 KBytes, 4-way set associative, 64 byte line size, 2 lines per sector" + * Application Note 485: + * "3rd-level cache: 512-KB, 4-way set associative, sectored cache, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 512 * 1024, + .associativity = 4, + .sets = 2048, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x23: + /* + * Intel ISA Reference: + * "3rd-level cache: 1 MBytes, 8-way set associative, 64 byte line size, 2 lines per sector" + * Application Note 485: + * "3rd-level cache: 1-MB, 8-way set associative, sectored cache, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 1024 * 1024, + .associativity = 8, + .sets = 2048, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x24: + /* + * Intel ISA Reference: + * "2nd-level cache: 1 MBytes, 16-way set associative, 64 byte line size" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 1024 * 1024, + .associativity = 16, + .sets = 1024, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x25: + /* + * Intel ISA Reference: + * "3rd-level cache: 2 MBytes, 8-way set associative, 64 byte line size, 2 lines per sector" + * Application Note 485: + * "3rd-level cache: 2-MB, 8-way set associative, sectored cache, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 2 * 1024 * 1024, + .associativity = 8, + .sets = 4096, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x29: + /* + * Intel ISA Reference: + * "3rd-level cache: 4 MBytes, 8-way set associative, 64 byte line size, 2 lines per sector" + * Application Note 485: + * "3rd-level cache: 4-MB, 8-way set associative, sectored cache, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 4 * 1024 * 1024, + .associativity = 8, + .sets = 8192, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x2C: + /* + * Intel ISA Reference: + * "1st-level data cache: 32 KBytes, 8-way set associative, 64 byte line size" + * Application Note 485: + * "1st-level data cache: 32-KB, 8-way set associative, 64-byte line size" + */ + cache->l1d = (struct cpuinfo_x86_cache) { + .size = 32 * 1024, + .associativity = 8, + .sets = 64, + .partitions = 1, + .line_size = 64, + }; + break; + case 0x30: + /* + * Intel ISA Reference: + * "1st-level instruction cache: 32 KBytes, 8-way set associative, 64 byte line size" + * Application Note 485: + * "1st-level instruction cache: 32-KB, 8-way set associative, 64-byte line size" + */ + cache->l1i = (struct cpuinfo_x86_cache) { + .size = 32 * 1024, + .associativity = 8, + .sets = 64, + .partitions = 1, + .line_size = 64, + }; + break; + case 0x39: + /* Where does this come from? */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 128 * 1024, + .associativity = 4, + .sets = 512, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x3A: + /* Where does this come from? */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 192 * 1024, + .associativity = 6, + .sets = 512, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x3B: + /* Where does this come from? */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 128 * 1024, + .associativity = 2, + .sets = 1024, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x3C: + /* Where does this come from? */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 256 * 1024, + .associativity = 4, + .sets = 1024, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x3D: + /* Where does this come from? */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 384 * 1024, + .associativity = 6, + .sets = 1024, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x3E: + /* Where does this come from? */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 512 * 1024, + .associativity = 4, + .sets = 2048, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x40: + /* + * Intel ISA Reference: + * "No 2nd-level cache or, if processor contains a valid 2nd-level cache, no 3rd-level cache" + * Application Note 485: + * "No 2nd-level cache or, if processor contains a valid 2nd-level cache, no 3rd-level cache" + */ + break; + case 0x41: + /* + * Intel ISA Reference: + * "2nd-level cache: 128 KBytes, 4-way set associative, 32 byte line size" + * Application Note 485: + * "2nd-level cache: 128-KB, 4-way set associative, 32-byte line size" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 128 * 1024, + .associativity = 4, + .sets = 1024, + .partitions = 1, + .line_size = 32, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x42: + /* + * Intel ISA Reference: + * "2nd-level cache: 256 KBytes, 4-way set associative, 32 byte line size" + * Application Note 485: + * "2nd-level cache: 256-KB, 4-way set associative, 32-byte line size" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 256 * 1024, + .associativity = 4, + .sets = 2048, + .partitions = 1, + .line_size = 32, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x43: + /* + * Intel ISA Reference: + * "2nd-level cache: 512 KBytes, 4-way set associative, 32 byte line size" + * Application Note 485: + * "2nd-level cache: 512-KB, 4-way set associative, 32-byte line size" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 512 * 1024, + .associativity = 4, + .sets = 4096, + .partitions = 1, + .line_size = 32, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x44: + /* + * Intel ISA Reference: + * "2nd-level cache: 1 MByte, 4-way set associative, 32 byte line size" + * Application Note 485: + * "2nd-level cache: 1-MB, 4-way set associative, 32-byte line size" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 1024 * 1024, + .associativity = 4, + .sets = 8192, + .partitions = 1, + .line_size = 32, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x45: + /* + * Intel ISA Reference: + * "2nd-level cache: 2 MByte, 4-way set associative, 32 byte line size" + * Application Note 485: + * "2nd-level cache: 2-MB, 4-way set associative, 32-byte line size" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 2 * 1024 * 1024, + .associativity = 4, + .sets = 16384, + .partitions = 1, + .line_size = 32, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x46: + /* + * Intel ISA Reference: + * "3rd-level cache: 4 MByte, 4-way set associative, 64 byte line size" + * Application Note 485: + * "3rd-level cache: 4-MB, 4-way set associative, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 4 * 1024 * 1024, + .associativity = 4, + .sets = 16384, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x47: + /* + * Intel ISA Reference: + * "3rd-level cache: 8 MByte, 8-way set associative, 64 byte line size" + * Application Note 485: + * "3rd-level cache: 8-MB, 8-way set associative, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 8 * 1024 * 1024, + .associativity = 8, + .sets = 16384, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x48: + /* + * Intel ISA Reference: + * "2nd-level cache: 3MByte, 12-way set associative, 64 byte line size" + * Application Note 485: + * "2nd-level cache: 3-MB, 12-way set associative, 64-byte line size, unified on-die" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 3 * 1024 * 1024, + .associativity = 12, + .sets = 4096, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x49: + /* + * Intel ISA Reference: + * "3rd-level cache: 4MB, 16-way set associative, 64-byte line size (Intel Xeon processor MP, + * Family 0FH, Model 06H); 2nd-level cache: 4 MByte, 16-way set associative, 64 byte line size" + * Application Note 485: + * "3rd-level cache: 4-MB, 16-way set associative, 64-byte line size (Intel Xeon processor MP, + * Family 0Fh, Model 06h) + * 2nd-level cache: 4-MB, 16-way set associative, 64-byte line size" + */ + if ((vendor == cpuinfo_vendor_intel) && (model_info->model == 0x06) && (model_info->family == 0x0F)) { + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 4 * 1024 * 1024, + .associativity = 16, + .sets = 4096, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + } else { + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 4 * 1024 * 1024, + .associativity = 16, + .sets = 4096, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + } + break; + case 0x4A: + /* + * Intel ISA Reference: + * "3rd-level cache: 6MByte, 12-way set associative, 64 byte line size" + * Application Note 485: + * "3rd-level cache: 6-MB, 12-way set associative, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 6 * 1024 * 1024, + .associativity = 12, + .sets = 8192, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x4B: + /* + * Intel ISA Reference: + * "3rd-level cache: 8MByte, 16-way set associative, 64 byte line size" + * Application Note 485: + * "3rd-level cache: 8-MB, 16-way set associative, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 8 * 1024 * 1024, + .associativity = 16, + .sets = 8192, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x4C: + /* + * Intel ISA Reference: + * "3rd-level cache: 12MByte, 12-way set associative, 64 byte line size" + * Application Note 485: + * "3rd-level cache: 12-MB, 12-way set associative, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 12 * 1024 * 1024, + .associativity = 12, + .sets = 16384, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x4D: + /* + * Intel ISA Reference: + * "3rd-level cache: 16MByte, 16-way set associative, 64 byte line size" + * Application Note 485: + * "3rd-level cache: 16-MB, 16-way set associative, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 16 * 1024 * 1024, + .associativity = 16, + .sets = 16384, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x4E: + /* + * Intel ISA Reference: + * "2nd-level cache: 6MByte, 24-way set associative, 64 byte line size" + * Application Note 485: + * "2nd-level cache: 6-MB, 24-way set associative, 64-byte line size" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 6 * 1024 * 1024, + .associativity = 24, + .sets = 4096, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x4F: + /* + * Intel ISA Reference: + * "Instruction TLB: 4 KByte pages, 32 entries" + * Application Note 485: + * "Instruction TLB: 4-KB pages, 32 entries" + */ + *itlb_4KB = (struct cpuinfo_tlb) { + .entries = 32, + /* Assume full associativity from nearby entries: manual lacks detail */ + .associativity = 32, + .pages = CPUINFO_PAGE_SIZE_4KB, + }; + break; + case 0x50: + /* + * Intel ISA Reference: + * "Instruction TLB: 4 KByte and 2-MByte or 4-MByte pages, 64 entries" + * Application Note 485: + * "Instruction TLB: 4-KB, 2-MB or 4-MB pages, fully associative, 64 entries" + */ + *itlb_4KB = *itlb_2MB = *itlb_4MB = (struct cpuinfo_tlb) { + .entries = 64, + .associativity = 64, + .pages = CPUINFO_PAGE_SIZE_4KB | CPUINFO_PAGE_SIZE_2MB | CPUINFO_PAGE_SIZE_4MB, + }; + break; + case 0x51: + /* + * Intel ISA Reference: + * "Instruction TLB: 4 KByte and 2-MByte or 4-MByte pages, 128 entries" + * Application Note 485: + * "Instruction TLB: 4-KB, 2-MB or 4-MB pages, fully associative, 128 entries" + */ + *itlb_4KB = *itlb_2MB = *itlb_4MB = (struct cpuinfo_tlb) { + .entries = 128, + .associativity = 128, + .pages = CPUINFO_PAGE_SIZE_4KB | CPUINFO_PAGE_SIZE_2MB | CPUINFO_PAGE_SIZE_4MB, + }; + break; + case 0x52: + /* + * Intel ISA Reference: + * "Instruction TLB: 4 KByte and 2-MByte or 4-MByte pages, 256 entries" + * Application Note 485: + * "Instruction TLB: 4-KB, 2-MB or 4-MB pages, fully associative, 256 entries" + */ + *itlb_4KB = *itlb_2MB = *itlb_4MB = (struct cpuinfo_tlb) { + .entries = 256, + .associativity = 256, + .pages = CPUINFO_PAGE_SIZE_4KB | CPUINFO_PAGE_SIZE_2MB | CPUINFO_PAGE_SIZE_4MB, + }; + break; + case 0x55: + /* + * Intel ISA Reference: + * "Instruction TLB: 2-MByte or 4-MByte pages, fully associative, 7 entries" + * Application Note 485: + * "Instruction TLB: 2-MB or 4-MB pages, fully associative, 7 entries" + */ + *itlb_2MB = *itlb_4MB = (struct cpuinfo_tlb) { + .entries = 7, + .associativity = 7, + .pages = CPUINFO_PAGE_SIZE_2MB | CPUINFO_PAGE_SIZE_4MB, + }; + break; + case 0x56: + /* + * Intel ISA Reference: + * "Data TLB0: 4 MByte pages, 4-way set associative, 16 entries" + * Application Note 485: + * "L1 Data TLB: 4-MB pages, 4-way set associative, 16 entries" + */ + *dtlb0_4MB = (struct cpuinfo_tlb) { + .entries = 16, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_4MB, + }; + break; + case 0x57: + /* + * Intel ISA Reference: + * "Data TLB0: 4 KByte pages, 4-way associative, 16 entries" + * Application Note 485: + * "L1 Data TLB: 4-KB pages, 4-way set associative, 16 entries" + */ + *dtlb0_4KB = (struct cpuinfo_tlb) { + .entries = 16, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_4KB, + }; + break; + case 0x59: + /* + * Intel ISA Reference: + * "Data TLB0: 4 KByte pages, fully associative, 16 entries" + * Application Note 485: + * "Data TLB0: 4-KB pages, fully associative, 16 entries" + */ + *dtlb0_4KB = (struct cpuinfo_tlb) { + .entries = 16, + .associativity = 16, + .pages = CPUINFO_PAGE_SIZE_4KB, + }; + break; + case 0x5A: + /* + * Intel ISA Reference: + * "Data TLB0: 2 MByte or 4 MByte pages, 4-way set associative, 32 entries" + * Application Note 485: + * "Data TLB0: 2-MB or 4-MB pages, 4-way associative, 32 entries" + */ + *dtlb0_2MB = *dtlb0_4MB = (struct cpuinfo_tlb) { + .entries = 32, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_2MB | CPUINFO_PAGE_SIZE_4MB, + }; + break; + case 0x5B: + /* + * Intel ISA Reference: + * "Data TLB: 4 KByte and 4 MByte pages, 64 entries" + * Application Note 485: + * "Data TLB: 4-KB or 4-MB pages, fully associative, 64 entries" + */ + *dtlb_4KB = *dtlb_4MB = (struct cpuinfo_tlb) { + .entries = 64, + .associativity = 64, + .pages = CPUINFO_PAGE_SIZE_4KB | CPUINFO_PAGE_SIZE_4MB, + }; + break; + case 0x5C: + /* + * Intel ISA Reference: + * "Data TLB: 4 KByte and 4 MByte pages, 128 entries" + * Application Note 485: + * "Data TLB: 4-KB or 4-MB pages, fully associative, 128 entries" + */ + *dtlb_4KB = *dtlb_4MB = (struct cpuinfo_tlb) { + .entries = 128, + .associativity = 128, + .pages = CPUINFO_PAGE_SIZE_4KB | CPUINFO_PAGE_SIZE_4MB, + }; + break; + case 0x5D: + /* + * Intel ISA Reference: + * "Data TLB: 4 KByte and 4 MByte pages, 256 entries" + * Application Note 485: + * "Data TLB: 4-KB or 4-MB pages, fully associative, 256 entries" + */ + *dtlb_4KB = *dtlb_4MB = (struct cpuinfo_tlb) { + .entries = 256, + .associativity = 256, + .pages = CPUINFO_PAGE_SIZE_4KB | CPUINFO_PAGE_SIZE_4MB, + }; + break; + case 0x60: + /* + * Application Note 485: + * "1st-level data cache: 16-KB, 8-way set associative, sectored cache, 64-byte line size" + */ + cache->l1d = (struct cpuinfo_x86_cache) { + .size = 16 * 1024, + .associativity = 8, + .sets = 32, + .partitions = 1, + .line_size = 64, + }; + break; + case 0x61: + /* + * Intel ISA Reference: + * "Instruction TLB: 4 KByte pages, fully associative, 48 entries" + */ + *itlb_4KB = (struct cpuinfo_tlb) { + .entries = 48, + .associativity = 48, + .pages = CPUINFO_PAGE_SIZE_4KB, + }; + break; + case 0x63: + /* + * Intel ISA Reference: + * "Data TLB: 2 MByte or 4 MByte pages, 4-way set associative, 32 entries and + * a separate array with 1 GByte pages, 4-way set associative, 4 entries" + */ + *dtlb_2MB = *dtlb_4MB = (struct cpuinfo_tlb) { + .entries = 32, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_2MB | CPUINFO_PAGE_SIZE_4MB, + }; + *dtlb_1GB = (struct cpuinfo_tlb) { + .entries = 4, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_1GB, + }; + break; + case 0x64: + /* + * Intel ISA Reference: + * "Data TLB: 4 KByte pages, 4-way set associative, 512 entries" + * + */ + *dtlb_4KB = (struct cpuinfo_tlb) { + .entries = 512, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_4KB, + }; + break; + case 0x66: + /* + * Application Note 485: + * "1st-level data cache: 8-KB, 4-way set associative, sectored cache, 64-byte line size" + */ + cache->l1d = (struct cpuinfo_x86_cache) { + .size = 8 * 1024, + .associativity = 4, + .sets = 32, + .partitions = 1, + .line_size = 64, + }; + break; + case 0x67: + /* + * Application Note 485: + * "1st-level data cache: 16-KB, 4-way set associative, sectored cache, 64-byte line size" + */ + cache->l1d = (struct cpuinfo_x86_cache) { + .size = 16 * 1024, + .associativity = 4, + .sets = 64, + .partitions = 1, + .line_size = 64, + }; + break; + case 0x68: + /* + * Application Note 485: + * "1st-level data cache: 32-KB, 4 way set associative, sectored cache, 64-byte line size" + */ + cache->l1d = (struct cpuinfo_x86_cache) { + .size = 32 * 1024, + .associativity = 4, + .sets = 128, + .partitions = 1, + .line_size = 64, + }; + break; + case 0x6A: + /* + * Intel ISA Reference: + * "uTLB: 4 KByte pages, 8-way set associative, 64 entries" + */ + + /* uTLB is, an fact, a normal 1-level DTLB on Silvermont & Knoghts Landing */ + *dtlb_4KB = (struct cpuinfo_tlb) { + .entries = 64, + .associativity = 8, + .pages = CPUINFO_PAGE_SIZE_4KB, + }; + break; + case 0x6B: + /* + * Intel ISA Reference: + * "DTLB: 4 KByte pages, 8-way set associative, 256 entries" + */ + *dtlb_4KB = (struct cpuinfo_tlb) { + .entries = 256, + .associativity = 8, + .pages = CPUINFO_PAGE_SIZE_4KB, + }; + break; + case 0x6C: + /* + * Intel ISA Reference: + * "DTLB: 2M/4M pages, 8-way set associative, 128 entries" + */ + *dtlb_2MB = *dtlb_4MB = (struct cpuinfo_tlb) { + .entries = 128, + .associativity = 8, + .pages = CPUINFO_PAGE_SIZE_2MB | CPUINFO_PAGE_SIZE_4MB, + }; + break; + case 0x6D: + /* + * Intel ISA Reference: + * "DTLB: 1 GByte pages, fully associative, 16 entries" + */ + *dtlb_1GB = (struct cpuinfo_tlb) { + .entries = 16, + .associativity = 16, + .pages = CPUINFO_PAGE_SIZE_1GB, + }; + break; + case 0x70: + /* + * Intel ISA Reference: + * "Trace cache: 12 K-uop, 8-way set associative" + * Application Note 485: + * "Trace cache: 12K-uops, 8-way set associative" + * Cyrix CPU Detection Guide and Geode GX1 Processor Series: + * "TLB, 32 entries, 4-way set associative, 4K-Byte Pages" + */ + switch (vendor) { +#if CPUINFO_ARCH_X86 + case cpuinfo_vendor_cyrix: + case cpuinfo_vendor_nsc: + *dtlb_4KB = *itlb_4KB = (struct cpuinfo_tlb) { + .entries = 32, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_4KB, + }; + break; +#endif /* CPUINFO_ARCH_X86 */ + default: + cache->trace = (struct cpuinfo_trace_cache) { + .uops = 12 * 1024, + .associativity = 8, + }; + } + break; + case 0x71: + /* + * Intel ISA Reference: + * "Trace cache: 16 K-uop, 8-way set associative" + * Application Note 485: + * "Trace cache: 16K-uops, 8-way set associative" + */ + cache->trace = (struct cpuinfo_trace_cache) { + .uops = 16 * 1024, + .associativity = 8, + }; + break; + case 0x72: + /* + * Intel ISA Reference: + * "Trace cache: 32 K-μop, 8-way set associative" + * Application Note 485: + * "Trace cache: 32K-uops, 8-way set associative" + */ + cache->trace = (struct cpuinfo_trace_cache) { + .uops = 32 * 1024, + .associativity = 8, + }; + break; + case 0x73: + /* Where does this come from? */ + cache->trace = (struct cpuinfo_trace_cache) { + .uops = 64 * 1024, + .associativity = 8, + }; + break; + case 0x76: + /* + * Intel ISA Reference: + * "Instruction TLB: 2M/4M pages, fully associative, 8 entries" + * Application Note 485: + * "Instruction TLB: 2M/4M pages, fully associative, 8 entries" + */ + *itlb_2MB = *itlb_4MB = (struct cpuinfo_tlb) { + .entries = 8, + .associativity = 8, + .pages = CPUINFO_PAGE_SIZE_2MB | CPUINFO_PAGE_SIZE_4MB, + }; + break; + case 0x78: + /* + * Intel ISA Reference: + * "2nd-level cache: 1 MByte, 4-way set associative, 64byte line size" + * Application Note 485: + * "2nd-level cache: 1-MB, 4-way set associative, 64-byte line size" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 1024 * 1024, + .associativity = 4, + .sets = 4096, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x79: + /* + * Intel ISA Reference: + * "2nd-level cache: 128 KByte, 8-way set associative, 64 byte line size, 2 lines per sector" + * Application Note 485: + * "2nd-level cache: 128-KB, 8-way set associative, sectored cache, 64-byte line size" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 128 * 1024, + .associativity = 8, + .sets = 256, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x7A: + /* + * Intel ISA Reference: + * "2nd-level cache: 256 KByte, 8-way set associative, 64 byte line size, 2 lines per sector" + * Application Note 485: + * "2nd-level cache: 256-KB, 8-way set associative, sectored cache, 64-byte line size" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 256 * 1024, + .associativity = 8, + .sets = 512, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x7B: + /* + * Intel ISA Reference: + * "2nd-level cache: 512 KByte, 8-way set associative, 64 byte line size, 2 lines per sector" + * Application Note 485: + * "2nd-level cache: 512-KB, 8-way set associative, sectored cache, 64-byte line size" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 512 * 1024, + .associativity = 8, + .sets = 1024, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x7C: + /* + * Intel ISA Reference: + * "2nd-level cache: 1 MByte, 8-way set associative, 64 byte line size, 2 lines per sector" + * Application Note 485: + * "2nd-level cache: 1-MB, 8-way set associative, sectored cache, 64-byte line size" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 1024 * 1024, + .associativity = 8, + .sets = 2048, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x7D: + /* + * Intel ISA Reference: + * "2nd-level cache: 2 MByte, 8-way set associative, 64byte line size" + * Application Note 485: + * "2nd-level cache: 2-MB, 8-way set associative, 64-byte line size" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 2 * 1024 * 1024, + .associativity = 8, + .sets = 4096, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x7F: + /* + * Intel ISA Reference: + * "2nd-level cache: 512 KByte, 2-way set associative, 64-byte line size" + * Application Note 485: + * "2nd-level cache: 512-KB, 2-way set associative, 64-byte line size" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 512 * 1024, + .associativity = 2, + .sets = 4096, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x80: + /* + * Intel ISA Reference: + * "2nd-level cache: 512 KByte, 8-way set associative, 64-byte line size" + * Application Note 485: + * "2nd-level cache: 512-KB, 8-way set associative, 64-byte line size" + * Cyrix CPU Detection Guide and Geode GX1 Processor Series: + * "Level 1 Cache, 16K, 4-way set associative, 16 Bytes/Line" + */ + switch (vendor) { +#if CPUINFO_ARCH_X86 && !defined(__ANDROID__) + case cpuinfo_vendor_cyrix: + case cpuinfo_vendor_nsc: + cache->l1i = cache->l1d = (struct cpuinfo_x86_cache) { + .size = 16 * 1024, + .associativity = 4, + .sets = 256, + .partitions = 1, + .line_size = 16, + .flags = CPUINFO_CACHE_UNIFIED, + }; + break; +#endif /* CPUINFO_ARCH_X86 */ + default: + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 512 * 1024, + .associativity = 8, + .sets = 1024, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + } + break; + case 0x82: + /* + * Intel ISA Reference: + * "2nd-level cache: 256 KByte, 8-way set associative, 32 byte line size" + * Application Note 485: + * "2nd-level cache: 256-KB, 8-way set associative, 32-byte line size" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 256 * 1024, + .associativity = 4, + .sets = 2048, + .partitions = 1, + .line_size = 32, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x83: + /* + * Intel ISA Reference: + * "2nd-level cache: 512 KByte, 8-way set associative, 32 byte line size" + * Application Note 485: + * "2nd-level cache: 512-KB, 8-way set associative, 32-byte line size" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 512 * 1024, + .associativity = 8, + .sets = 2048, + .partitions = 1, + .line_size = 32, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x84: + /* + * Intel ISA Reference: + * "2nd-level cache: 1 MByte, 8-way set associative, 32 byte line size" + * Application Note 485: + * "2nd-level cache: 1-MB, 8-way set associative, 32-byte line size" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 1024 * 1024, + .associativity = 8, + .sets = 4096, + .partitions = 1, + .line_size = 32, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x85: + /* + * Intel ISA Reference: + * "2nd-level cache: 2 MByte, 8-way set associative, 32 byte line size" + * Application Note 485: + * "2nd-level cache: 2-MB, 8-way set associative, 32-byte line size" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 2 * 1024 * 1024, + .associativity = 8, + .sets = 8192, + .partitions = 1, + .line_size = 32, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x86: + /* + * Intel ISA Reference: + * "2nd-level cache: 512 KByte, 4-way set associative, 64 byte line size" + * Application Note 485: + * "2nd-level cache: 512-KB, 4-way set associative, 64-byte line size" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 512 * 1024, + .associativity = 4, + .sets = 2048, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0x87: + /* + * Intel ISA Reference: + * "2nd-level cache: 1 MByte, 8-way set associative, 64 byte line size" + * Application Note 485: + * "2nd-level cache: 1-MB, 8-way set associative, 64-byte line size" + */ + cache->l2 = (struct cpuinfo_x86_cache) { + .size = 1024 * 1024, + .associativity = 8, + .sets = 2048, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0xA0: + /* + * Intel ISA Reference: + * "DTLB: 4k pages, fully associative, 32 entries" + */ + *dtlb_4KB = (struct cpuinfo_tlb) { + .entries = 32, + .associativity = 32, + .pages = CPUINFO_PAGE_SIZE_4KB, + }; + break; + case 0xB0: + /* + * Intel ISA Reference: + * "Instruction TLB: 4 KByte pages, 4-way set associative, 128 entries" + * Application Note 485: + * "Instruction TLB: 4-KB Pages, 4-way set associative, 128 entries" + */ + *itlb_4KB = (struct cpuinfo_tlb) { + .entries = 128, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_4KB, + }; + break; + case 0xB1: + /* + * Intel ISA Reference: + * "Instruction TLB: 2M pages, 4-way, 8 entries or 4M pages, 4-way, 4 entries" + * Application Note 485: + * "Instruction TLB: 2-MB pages, 4-way, 8 entries or 4M pages, 4-way, 4 entries" + */ + *itlb_2MB = (struct cpuinfo_tlb) { + .entries = 8, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_2MB | CPUINFO_PAGE_SIZE_4MB, + }; + *itlb_4MB = (struct cpuinfo_tlb) { + .entries = 4, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_2MB | CPUINFO_PAGE_SIZE_4MB, + }; + break; + case 0xB2: + /* + * Intel ISA Reference: + * "Instruction TLB: 4KByte pages, 4-way set associative, 64 entries" + * Application Note 485: + * "Instruction TLB: 4-KB pages, 4-way set associative, 64 entries" + */ + *itlb_4KB = (struct cpuinfo_tlb) { + .entries = 64, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_4KB, + }; + break; + case 0xB3: + /* + * Intel ISA Reference: + * "Data TLB: 4 KByte pages, 4-way set associative, 128 entries" + * Application Note 485: + * "Data TLB: 4-KB Pages, 4-way set associative, 128 entries" + */ + *dtlb_4KB = (struct cpuinfo_tlb) { + .entries = 128, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_4KB, + }; + break; + case 0xB4: + /* + * Intel ISA Reference: + * "Data TLB1: 4 KByte pages, 4-way associative, 256 entries" + * Application Note 485: + * "Data TLB: 4-KB Pages, 4-way set associative, 256 entries" + */ + *dtlb_4KB = (struct cpuinfo_tlb) { + .entries = 256, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_4KB, + }; + break; + case 0xB5: + /* + * Intel ISA Reference: + * "Instruction TLB: 4KByte pages, 8-way set associative, 64 entries" + */ + *itlb_4KB = (struct cpuinfo_tlb) { + .entries = 64, + .associativity = 8, + .pages = CPUINFO_PAGE_SIZE_4KB, + }; + break; + case 0xB6: + /* + * Intel ISA Reference: + * "Instruction TLB: 4KByte pages, 8-way set associative, 128 entries" + */ + *itlb_4KB = (struct cpuinfo_tlb) { + .entries = 128, + .associativity = 8, + .pages = CPUINFO_PAGE_SIZE_4KB, + }; + break; + case 0xBA: + /* + * Intel ISA Reference: + * "Data TLB1: 4 KByte pages, 4-way associative, 64 entries" + * Application Note 485: + * "Data TLB: 4-KB Pages, 4-way set associative, 64 entries" + */ + *itlb_4KB = (struct cpuinfo_tlb) { + .entries = 64, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_4KB, + }; + break; + case 0xC0: + /* + * Intel ISA Reference: + * "Data TLB: 4 KByte and 4 MByte pages, 4-way associative, 8 entries" + * Application Note 485: + * "Data TLB: 4-KB or 4-MB Pages, 4-way set associative, 8 entries" + */ + *itlb_4KB = *itlb_4MB = (struct cpuinfo_tlb) { + .entries = 8, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_4KB | CPUINFO_PAGE_SIZE_4MB, + }; + break; + case 0xC1: + /* + * Intel ISA Reference: + * "Shared 2nd-Level TLB: 4 KByte/2MByte pages, 8-way associative, 1024 entries" + */ + *stlb2_4KB = *stlb2_2MB = (struct cpuinfo_tlb) { + .entries = 1024, + .associativity = 8, + .pages = CPUINFO_PAGE_SIZE_4KB | CPUINFO_PAGE_SIZE_2MB, + }; + break; + case 0xC2: + /* + * Intel ISA Reference: + * "DTLB: 4 KByte/2 MByte pages, 4-way associative, 16 entries" + */ + *dtlb_4KB = *dtlb_2MB = (struct cpuinfo_tlb) { + .entries = 16, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_4KB | CPUINFO_PAGE_SIZE_2MB, + }; + break; + case 0xC3: + /* + * Intel ISA Reference: + * "Shared 2nd-Level TLB: 4 KByte/2 MByte pages, 6-way associative, 1536 entries. + * Also 1GBbyte pages, 4-way, 16 entries." + */ + *stlb2_4KB = *stlb2_2MB = (struct cpuinfo_tlb) { + .entries = 1536, + .associativity = 6, + .pages = CPUINFO_PAGE_SIZE_4KB | CPUINFO_PAGE_SIZE_2MB, + }; + *stlb2_1GB = (struct cpuinfo_tlb) { + .entries = 16, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_1GB, + }; + break; + case 0xC4: + /* + * Intel ISA Reference: + * "DTLB: 2M/4M Byte pages, 4-way associative, 32 entries" + */ + *dtlb_2MB = *dtlb_4MB = (struct cpuinfo_tlb) { + .entries = 32, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_2MB | CPUINFO_PAGE_SIZE_4MB, + }; + break; + case 0xCA: + /* + * Intel ISA Reference: + * "Shared 2nd-Level TLB: 4 KByte pages, 4-way associative, 512 entries" + * Application Note 485: + * "Shared 2nd-level TLB: 4 KB pages, 4-way set associative, 512 entries" + */ + *stlb2_4KB = (struct cpuinfo_tlb) { + .entries = 512, + .associativity = 4, + .pages = CPUINFO_PAGE_SIZE_4KB, + }; + break; + case 0xD0: + /* + * Intel ISA Reference: + * "3rd-level cache: 512 KByte, 4-way set associative, 64 byte line size" + * Application Note 485: + * "3rd-level cache: 512-kB, 4-way set associative, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 512 * 1024, + .associativity = 4, + .sets = 2048, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0xD1: + /* + * Intel ISA Reference: + * "3rd-level cache: 1 MByte, 4-way set associative, 64 byte line size" + * Application Note 485: + * "3rd-level cache: 1-MB, 4-way set associative, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 1024 * 1024, + .associativity = 4, + .sets = 4096, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0xD2: + /* + * Intel ISA Reference: + * "3rd-level cache: 2 MByte, 4-way set associative, 64 byte line size" + * Application Note 485: + * "3rd-level cache: 2-MB, 4-way set associative, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 2 * 1024 * 2014, + .associativity = 4, + .sets = 8192, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0xD6: + /* + * Intel ISA Reference: + * "3rd-level cache: 1 MByte, 8-way set associative, 64 byte line size" + * Application Note 485: + * "3rd-level cache: 1-MB, 8-way set associative, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 1024 * 1024, + .associativity = 8, + .sets = 2048, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0xD7: + /* + * Intel ISA Reference: + * "3rd-level cache: 2 MByte, 8-way set associative, 64 byte line size" + * Application Note 485: + * "3rd-level cache: 2-MB, 8-way set associative, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 2 * 1024 * 1024, + .associativity = 8, + .sets = 4096, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0xD8: + /* + * Intel ISA Reference: + * "3rd-level cache: 4 MByte, 8-way set associative, 64 byte line size" + * Application Note 485: + * "3rd-level cache: 4-MB, 8-way set associative, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 4 * 1024 * 1024, + .associativity = 8, + .sets = 8192, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0xDC: + /* + * Intel ISA Reference: + * "3rd-level cache: 1.5 MByte, 12-way set associative, 64 byte line size" + * Application Note 485: + * "3rd-level cache: 1.5-MB, 12-way set associative, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 3 * 512 * 1024, + .associativity = 12, + .sets = 2048, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0xDD: + /* + * Intel ISA Reference: + * "3rd-level cache: 3 MByte, 12-way set associative, 64 byte line size" + * Application Note 485: + * "3rd-level cache: 3-MB, 12-way set associative, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 3 * 1024 * 1024, + .associativity = 12, + .sets = 4096, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0xDE: + /* + * Intel ISA Reference: + * "3rd-level cache: 6 MByte, 12-way set associative, 64 byte line size" + * Application Note 485: + * "3rd-level cache: 6-MB, 12-way set associative, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 6 * 1024 * 1024, + .associativity = 12, + .sets = 8192, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0xE2: + /* + * Intel ISA Reference: + * "3rd-level cache: 2 MByte, 16-way set associative, 64 byte line size" + * Application Note 485: + * "3rd-level cache: 2-MB, 16-way set associative, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 2 * 1024 * 1024, + .associativity = 16, + .sets = 2048, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0xE3: + /* + * Intel ISA Reference: + * "3rd-level cache: 4 MByte, 16-way set associative, 64 byte line size" + * Application Note 485: + * "3rd-level cache: 4-MB, 16-way set associative, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 4 * 1024 * 1024, + .associativity = 16, + .sets = 4096, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0xE4: + /* + * Intel ISA Reference: + * "3rd-level cache: 8 MByte, 16-way set associative, 64 byte line size" + * Application Note 485: + * "3rd-level cache: 8-MB, 16-way set associative, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 8 * 1024 * 1024, + .associativity = 16, + .sets = 8192, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0xEA: + /* + * Intel ISA Reference: + * "3rd-level cache: 12MByte, 24-way set associative, 64 byte line size" + * Application Note 485: + * "3rd-level cache: 12-MB, 24-way set associative, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 12 * 1024 * 1024, + .associativity = 24, + .sets = 8192, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0xEB: + /* + * Intel ISA Reference: + * "3rd-level cache: 18MByte, 24-way set associative, 64 byte line size" + * Application Note 485: + * "3rd-level cache: 18-MB, 24-way set associative, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 18 * 1024 * 1024, + .associativity = 24, + .sets = 12288, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0xEC: + /* + * Intel ISA Reference: + * "3rd-level cache: 24MByte, 24-way set associative, 64 byte line size" + * Application Note 485: + * "3rd-level cache: 24-MB, 24-way set associative, 64-byte line size" + */ + cache->l3 = (struct cpuinfo_x86_cache) { + .size = 24 * 1024 * 1024, + .associativity = 24, + .sets = 16384, + .partitions = 1, + .line_size = 64, + .flags = CPUINFO_CACHE_INCLUSIVE, + }; + break; + case 0xF0: + /* + * Intel ISA Reference: + * "64-Byte prefetching" + * Application Note 485: + * "64-byte Prefetching" + */ + cache->prefetch_size = 64; + break; + case 0xF1: + /* + * Intel ISA Reference: + * "128-Byte prefetching" + * Application Note 485: + * "128-byte Prefetching" + */ + cache->prefetch_size = 128; + break; + } +} diff --git a/3rdparty/cpuinfo/src/x86/cache/deterministic.c b/3rdparty/cpuinfo/src/x86/cache/deterministic.c new file mode 100644 index 000000000..befd5029a --- /dev/null +++ b/3rdparty/cpuinfo/src/x86/cache/deterministic.c @@ -0,0 +1,257 @@ +#include + +#include +#include +#include +#include + + +enum cache_type { + cache_type_none = 0, + cache_type_data = 1, + cache_type_instruction = 2, + cache_type_unified = 3, +}; + +bool cpuinfo_x86_decode_deterministic_cache_parameters( + struct cpuid_regs regs, + struct cpuinfo_x86_caches* cache, + uint32_t* package_cores_max) +{ + const uint32_t type = regs.eax & UINT32_C(0x1F); + if (type == cache_type_none) { + return false; + } + + /* Level starts at 1 */ + const uint32_t level = (regs.eax >> 5) & UINT32_C(0x7); + + const uint32_t sets = 1 + regs.ecx; + const uint32_t line_size = 1 + (regs.ebx & UINT32_C(0x00000FFF)); + const uint32_t partitions = 1 + ((regs.ebx >> 12) & UINT32_C(0x000003FF)); + const uint32_t associativity = 1 + (regs.ebx >> 22); + + *package_cores_max = 1 + (regs.eax >> 26); + const uint32_t processors = 1 + ((regs.eax >> 14) & UINT32_C(0x00000FFF)); + const uint32_t apic_bits = bit_length(processors); + + uint32_t flags = 0; + if (regs.edx & UINT32_C(0x00000002)) { + flags |= CPUINFO_CACHE_INCLUSIVE; + } + if (regs.edx & UINT32_C(0x00000004)) { + flags |= CPUINFO_CACHE_COMPLEX_INDEXING; + } + switch (level) { + case 1: + switch (type) { + case cache_type_unified: + cache->l1d = cache->l1i = (struct cpuinfo_x86_cache) { + .size = associativity * partitions * line_size * sets, + .associativity = associativity, + .sets = sets, + .partitions = partitions, + .line_size = line_size, + .flags = flags | CPUINFO_CACHE_UNIFIED, + .apic_bits = apic_bits + }; + break; + case cache_type_data: + cache->l1d = (struct cpuinfo_x86_cache) { + .size = associativity * partitions * line_size * sets, + .associativity = associativity, + .sets = sets, + .partitions = partitions, + .line_size = line_size, + .flags = flags, + .apic_bits = apic_bits + }; + break; + case cache_type_instruction: + cache->l1i = (struct cpuinfo_x86_cache) { + .size = associativity * partitions * line_size * sets, + .associativity = associativity, + .sets = sets, + .partitions = partitions, + .line_size = line_size, + .flags = flags, + .apic_bits = apic_bits + }; + break; + } + break; + case 2: + switch (type) { + case cache_type_instruction: + cpuinfo_log_warning("unexpected L2 instruction cache reported in leaf 0x00000004 is ignored"); + break; + case cache_type_unified: + flags |= CPUINFO_CACHE_UNIFIED; + case cache_type_data: + cache->l2 = (struct cpuinfo_x86_cache) { + .size = associativity * partitions * line_size * sets, + .associativity = associativity, + .sets = sets, + .partitions = partitions, + .line_size = line_size, + .flags = flags, + .apic_bits = apic_bits + }; + break; + } + break; + case 3: + switch (type) { + case cache_type_instruction: + cpuinfo_log_warning("unexpected L3 instruction cache reported in leaf 0x00000004 is ignored"); + break; + case cache_type_unified: + flags |= CPUINFO_CACHE_UNIFIED; + case cache_type_data: + cache->l3 = (struct cpuinfo_x86_cache) { + .size = associativity * partitions * line_size * sets, + .associativity = associativity, + .sets = sets, + .partitions = partitions, + .line_size = line_size, + .flags = flags, + .apic_bits = apic_bits + }; + break; + } + break; + case 4: + switch (type) { + case cache_type_instruction: + cpuinfo_log_warning("unexpected L4 instruction cache reported in leaf 0x00000004 is ignored"); + break; + case cache_type_unified: + flags |= CPUINFO_CACHE_UNIFIED; + case cache_type_data: + cache->l4 = (struct cpuinfo_x86_cache) { + .size = associativity * partitions * line_size * sets, + .associativity = associativity, + .sets = sets, + .partitions = partitions, + .line_size = line_size, + .flags = flags, + .apic_bits = apic_bits + }; + break; + } + break; + default: + cpuinfo_log_warning("unexpected L%"PRIu32" cache reported in leaf 0x00000004 is ignored", level); + break; + } + return true; +} + + +bool cpuinfo_x86_decode_cache_properties( + struct cpuid_regs regs, + struct cpuinfo_x86_caches* cache) +{ + const uint32_t type = regs.eax & UINT32_C(0x1F); + if (type == cache_type_none) { + return false; + } + + const uint32_t level = (regs.eax >> 5) & UINT32_C(0x7); + const uint32_t cores = 1 + ((regs.eax >> 14) & UINT32_C(0x00000FFF)); + const uint32_t apic_bits = bit_length(cores); + + const uint32_t sets = 1 + regs.ecx; + const uint32_t line_size = 1 + (regs.ebx & UINT32_C(0x00000FFF)); + const uint32_t partitions = 1 + ((regs.ebx >> 12) & UINT32_C(0x000003FF)); + const uint32_t associativity = 1 + (regs.ebx >> 22); + + uint32_t flags = 0; + if (regs.edx & UINT32_C(0x00000002)) { + flags |= CPUINFO_CACHE_INCLUSIVE; + } + + switch (level) { + case 1: + switch (type) { + case cache_type_unified: + cache->l1d = cache->l1i = (struct cpuinfo_x86_cache) { + .size = associativity * partitions * line_size * sets, + .associativity = associativity, + .sets = sets, + .partitions = partitions, + .line_size = line_size, + .flags = flags | CPUINFO_CACHE_UNIFIED, + .apic_bits = apic_bits + }; + break; + case cache_type_data: + cache->l1d = (struct cpuinfo_x86_cache) { + .size = associativity * partitions * line_size * sets, + .associativity = associativity, + .sets = sets, + .partitions = partitions, + .line_size = line_size, + .flags = flags, + .apic_bits = apic_bits + }; + break; + case cache_type_instruction: + cache->l1i = (struct cpuinfo_x86_cache) { + .size = associativity * partitions * line_size * sets, + .associativity = associativity, + .sets = sets, + .partitions = partitions, + .line_size = line_size, + .flags = flags, + .apic_bits = apic_bits + }; + break; + } + break; + case 2: + switch (type) { + case cache_type_instruction: + cpuinfo_log_warning("unexpected L2 instruction cache reported in leaf 0x8000001D is ignored"); + break; + case cache_type_unified: + flags |= CPUINFO_CACHE_UNIFIED; + case cache_type_data: + cache->l2 = (struct cpuinfo_x86_cache) { + .size = associativity * partitions * line_size * sets, + .associativity = associativity, + .sets = sets, + .partitions = partitions, + .line_size = line_size, + .flags = flags, + .apic_bits = apic_bits + }; + break; + } + break; + case 3: + switch (type) { + case cache_type_instruction: + cpuinfo_log_warning("unexpected L3 instruction cache reported in leaf 0x8000001D is ignored"); + break; + case cache_type_unified: + flags |= CPUINFO_CACHE_UNIFIED; + case cache_type_data: + cache->l3 = (struct cpuinfo_x86_cache) { + .size = associativity * partitions * line_size * sets, + .associativity = associativity, + .sets = sets, + .partitions = partitions, + .line_size = line_size, + .flags = flags, + .apic_bits = apic_bits + }; + break; + } + break; + default: + cpuinfo_log_warning("unexpected L%"PRIu32" cache reported in leaf 0x8000001D is ignored", level); + break; + } + return true; +} diff --git a/3rdparty/cpuinfo/src/x86/cache/init.c b/3rdparty/cpuinfo/src/x86/cache/init.c new file mode 100644 index 000000000..dd1f1ea37 --- /dev/null +++ b/3rdparty/cpuinfo/src/x86/cache/init.c @@ -0,0 +1,88 @@ +#include + +#include +#include +#include +#include +#include + + +union cpuinfo_x86_cache_descriptors { + struct cpuid_regs regs; + uint8_t as_bytes[16]; +}; + +enum cache_type { + cache_type_none = 0, + cache_type_data = 1, + cache_type_instruction = 2, + cache_type_unified = 3, +}; + +void cpuinfo_x86_detect_cache( + uint32_t max_base_index, uint32_t max_extended_index, + bool amd_topology_extensions, + enum cpuinfo_vendor vendor, + const struct cpuinfo_x86_model_info* model_info, + struct cpuinfo_x86_caches* cache, + struct cpuinfo_tlb* itlb_4KB, + struct cpuinfo_tlb* itlb_2MB, + struct cpuinfo_tlb* itlb_4MB, + struct cpuinfo_tlb* dtlb0_4KB, + struct cpuinfo_tlb* dtlb0_2MB, + struct cpuinfo_tlb* dtlb0_4MB, + struct cpuinfo_tlb* dtlb_4KB, + struct cpuinfo_tlb* dtlb_2MB, + struct cpuinfo_tlb* dtlb_4MB, + struct cpuinfo_tlb* dtlb_1GB, + struct cpuinfo_tlb* stlb2_4KB, + struct cpuinfo_tlb* stlb2_2MB, + struct cpuinfo_tlb* stlb2_1GB, + uint32_t* log2_package_cores_max) +{ + if (max_base_index >= 2) { + union cpuinfo_x86_cache_descriptors descriptors; + descriptors.regs = cpuid(2); + uint32_t iterations = (uint8_t) descriptors.as_bytes[0]; + if (iterations != 0) { +iterate_descriptors: + for (uint32_t i = 1 /* note: not 0 */; i < 16; i++) { + const uint8_t descriptor = descriptors.as_bytes[i]; + if (descriptor != 0) { + cpuinfo_x86_decode_cache_descriptor( + descriptor, vendor, model_info, + cache, + itlb_4KB, itlb_2MB, itlb_4MB, + dtlb0_4KB, dtlb0_2MB, dtlb0_4MB, + dtlb_4KB, dtlb_2MB, dtlb_4MB, dtlb_1GB, + stlb2_4KB, stlb2_2MB, stlb2_1GB, + &cache->prefetch_size); + } + } + if (--iterations != 0) { + descriptors.regs = cpuid(2); + goto iterate_descriptors; + } + } + + if (vendor != cpuinfo_vendor_amd && vendor != cpuinfo_vendor_hygon && max_base_index >= 4) { + struct cpuid_regs leaf4; + uint32_t input_ecx = 0; + uint32_t package_cores_max = 0; + do { + leaf4 = cpuidex(4, input_ecx++); + } while (cpuinfo_x86_decode_deterministic_cache_parameters( + leaf4, cache, &package_cores_max)); + if (package_cores_max != 0) { + *log2_package_cores_max = bit_length(package_cores_max); + } + } + } + if (amd_topology_extensions && max_extended_index >= UINT32_C(0x8000001D)) { + struct cpuid_regs leaf0x8000001D; + uint32_t input_ecx = 0; + do { + leaf0x8000001D = cpuidex(UINT32_C(0x8000001D), input_ecx++); + } while (cpuinfo_x86_decode_cache_properties(leaf0x8000001D, cache)); + } +} diff --git a/3rdparty/cpuinfo/src/x86/cpuid.h b/3rdparty/cpuinfo/src/x86/cpuid.h new file mode 100644 index 000000000..9e9e01318 --- /dev/null +++ b/3rdparty/cpuinfo/src/x86/cpuid.h @@ -0,0 +1,79 @@ +#pragma once +#include + +#if defined(__GNUC__) + #include +#elif defined(_MSC_VER) + #include +#endif + +#if CPUINFO_MOCK + #include +#endif +#include + + +#if defined(__GNUC__) || defined(_MSC_VER) + static inline struct cpuid_regs cpuid(uint32_t eax) { + #if CPUINFO_MOCK + uint32_t regs_array[4]; + cpuinfo_mock_get_cpuid(eax, regs_array); + return (struct cpuid_regs) { + .eax = regs_array[0], + .ebx = regs_array[1], + .ecx = regs_array[2], + .edx = regs_array[3], + }; + #else + struct cpuid_regs regs; + #if defined(__GNUC__) + __cpuid(eax, regs.eax, regs.ebx, regs.ecx, regs.edx); + #else + int regs_array[4]; + __cpuid(regs_array, (int) eax); + regs.eax = regs_array[0]; + regs.ebx = regs_array[1]; + regs.ecx = regs_array[2]; + regs.edx = regs_array[3]; + #endif + return regs; + #endif + } + + static inline struct cpuid_regs cpuidex(uint32_t eax, uint32_t ecx) { + #if CPUINFO_MOCK + uint32_t regs_array[4]; + cpuinfo_mock_get_cpuidex(eax, ecx, regs_array); + return (struct cpuid_regs) { + .eax = regs_array[0], + .ebx = regs_array[1], + .ecx = regs_array[2], + .edx = regs_array[3], + }; + #else + struct cpuid_regs regs; + #if defined(__GNUC__) + __cpuid_count(eax, ecx, regs.eax, regs.ebx, regs.ecx, regs.edx); + #else + int regs_array[4]; + __cpuidex(regs_array, (int) eax, (int) ecx); + regs.eax = regs_array[0]; + regs.ebx = regs_array[1]; + regs.ecx = regs_array[2]; + regs.edx = regs_array[3]; + #endif + return regs; + #endif + } +#endif + +static inline uint64_t xgetbv(uint32_t ext_ctrl_reg) { + #ifdef _MSC_VER + return (uint64_t)_xgetbv((unsigned int)ext_ctrl_reg); + #else + uint32_t lo, hi; + __asm__(".byte 0x0F, 0x01, 0xD0" : "=a" (lo), "=d" (hi) : "c" (ext_ctrl_reg)); + return ((uint64_t) hi << 32) | (uint64_t) lo; + #endif +} + diff --git a/3rdparty/cpuinfo/src/x86/info.c b/3rdparty/cpuinfo/src/x86/info.c new file mode 100644 index 000000000..ceb6b8457 --- /dev/null +++ b/3rdparty/cpuinfo/src/x86/info.c @@ -0,0 +1,19 @@ +#include + +#include +#include + + +struct cpuinfo_x86_model_info cpuinfo_x86_decode_model_info(uint32_t eax) { + struct cpuinfo_x86_model_info model_info; + model_info.stepping = eax & 0xF; + model_info.base_model = (eax >> 4) & 0xF; + model_info.base_family = (eax >> 8) & 0xF; + model_info.processor_type = (eax >> 12) & 0x3; + model_info.extended_model = (eax >> 16) & 0xF; + model_info.extended_family = (eax >> 20) & 0xFF; + + model_info.family = model_info.base_family + model_info.extended_family; + model_info.model = model_info.base_model + (model_info.extended_model << 4); + return model_info; +} diff --git a/3rdparty/cpuinfo/src/x86/init.c b/3rdparty/cpuinfo/src/x86/init.c new file mode 100644 index 000000000..244359cdd --- /dev/null +++ b/3rdparty/cpuinfo/src/x86/init.c @@ -0,0 +1,75 @@ +#include +#include + +#include +#include +#include +#include +#include +#include + + +struct cpuinfo_x86_isa cpuinfo_isa = { 0 }; +CPUINFO_INTERNAL uint32_t cpuinfo_x86_clflush_size = 0; + +void cpuinfo_x86_init_processor(struct cpuinfo_x86_processor* processor) { + const struct cpuid_regs leaf0 = cpuid(0); + const uint32_t max_base_index = leaf0.eax; + const enum cpuinfo_vendor vendor = processor->vendor = + cpuinfo_x86_decode_vendor(leaf0.ebx, leaf0.ecx, leaf0.edx); + + const struct cpuid_regs leaf0x80000000 = cpuid(UINT32_C(0x80000000)); + const uint32_t max_extended_index = + leaf0x80000000.eax >= UINT32_C(0x80000000) ? leaf0x80000000.eax : 0; + + const struct cpuid_regs leaf0x80000001 = max_extended_index >= UINT32_C(0x80000001) ? + cpuid(UINT32_C(0x80000001)) : (struct cpuid_regs) { 0, 0, 0, 0 }; + + if (max_base_index >= 1) { + const struct cpuid_regs leaf1 = cpuid(1); + processor->cpuid = leaf1.eax; + + const struct cpuinfo_x86_model_info model_info = cpuinfo_x86_decode_model_info(leaf1.eax); + const enum cpuinfo_uarch uarch = processor->uarch = + cpuinfo_x86_decode_uarch(vendor, &model_info); + + cpuinfo_x86_clflush_size = ((leaf1.ebx >> 8) & UINT32_C(0x000000FF)) * 8; + + /* + * Topology extensions support: + * - AMD: ecx[bit 22] in extended info (reserved bit on Intel CPUs). + */ + const bool amd_topology_extensions = !!(leaf0x80000001.ecx & UINT32_C(0x00400000)); + + cpuinfo_x86_detect_cache( + max_base_index, max_extended_index, amd_topology_extensions, vendor, &model_info, + &processor->cache, + &processor->tlb.itlb_4KB, + &processor->tlb.itlb_2MB, + &processor->tlb.itlb_4MB, + &processor->tlb.dtlb0_4KB, + &processor->tlb.dtlb0_2MB, + &processor->tlb.dtlb0_4MB, + &processor->tlb.dtlb_4KB, + &processor->tlb.dtlb_2MB, + &processor->tlb.dtlb_4MB, + &processor->tlb.dtlb_1GB, + &processor->tlb.stlb2_4KB, + &processor->tlb.stlb2_2MB, + &processor->tlb.stlb2_1GB, + &processor->topology.core_bits_length); + + cpuinfo_x86_detect_topology(max_base_index, max_extended_index, leaf1, &processor->topology); + + cpuinfo_isa = cpuinfo_x86_detect_isa(leaf1, leaf0x80000001, + max_base_index, max_extended_index, vendor, uarch); + } + if (max_extended_index >= UINT32_C(0x80000004)) { + struct cpuid_regs brand_string[3]; + for (uint32_t i = 0; i < 3; i++) { + brand_string[i] = cpuid(UINT32_C(0x80000002) + i); + } + memcpy(processor->brand_string, brand_string, sizeof(processor->brand_string)); + cpuinfo_log_debug("raw CPUID brand string: \"%48s\"", processor->brand_string); + } +} diff --git a/3rdparty/cpuinfo/src/x86/isa.c b/3rdparty/cpuinfo/src/x86/isa.c new file mode 100644 index 000000000..f2e5a281b --- /dev/null +++ b/3rdparty/cpuinfo/src/x86/isa.c @@ -0,0 +1,724 @@ +#include +#include +#include + +#include +#include + + +#if CPUINFO_ARCH_X86 + #ifdef _MSC_VER + #pragma pack(push, 2) + #endif + struct fxsave_region { + uint16_t fpu_control_word; + uint16_t fpu_status_word; + uint16_t fpu_tag_word; + uint16_t fpu_opcode; + uint32_t fpu_instruction_pointer_offset; + uint32_t fpu_instruction_pointer_selector; + uint32_t fpu_operand_pointer_offset; + uint32_t fpu_operand_pointer_selector; + uint32_t mxcsr_state; + uint32_t mxcsr_mask; + uint64_t fpu_registers[8 * 2]; + uint64_t xmm_registers[8 * 2]; + uint64_t padding[28]; + } + #ifndef _MSC_VER + __attribute__((__aligned__(16), __packed__)) + #endif + ; /* end of fxsave_region structure */ + #ifdef _MSC_VER + #pragma pack(pop, 2) + #endif +#endif + + +struct cpuinfo_x86_isa cpuinfo_x86_detect_isa( + const struct cpuid_regs basic_info, const struct cpuid_regs extended_info, + uint32_t max_base_index, uint32_t max_extended_index, + enum cpuinfo_vendor vendor, enum cpuinfo_uarch uarch) +{ + struct cpuinfo_x86_isa isa = { 0 }; + + const struct cpuid_regs structured_feature_info0 = + (max_base_index >= 7) ? cpuidex(7, 0) : (struct cpuid_regs) { 0, 0, 0, 0}; + const struct cpuid_regs structured_feature_info1 = + (max_base_index >= 7) ? cpuidex(7, 1) : (struct cpuid_regs) { 0, 0, 0, 0}; + + const uint32_t processor_capacity_info_index = UINT32_C(0x80000008); + const struct cpuid_regs processor_capacity_info = + (max_extended_index >= processor_capacity_info_index) ? + cpuid(processor_capacity_info_index) : (struct cpuid_regs) { 0, 0, 0, 0 }; + + bool avx_regs = false, avx512_regs = false, mpx_regs = false; + /* + * OSXSAVE: Operating system enabled XSAVE instructions for application use: + * - Intel, AMD: ecx[bit 26] in basic info = XSAVE/XRSTOR instructions supported by a chip. + * - Intel, AMD: ecx[bit 27] in basic info = XSAVE/XRSTOR instructions enabled by OS. + */ + const uint32_t osxsave_mask = UINT32_C(0x0C000000); + if ((basic_info.ecx & osxsave_mask) == osxsave_mask) { + uint64_t xcr0_valid_bits = 0; + if (max_base_index >= 0xD) { + const struct cpuid_regs regs = cpuidex(0xD, 0); + xcr0_valid_bits = ((uint64_t) regs.edx << 32) | regs.eax; + } + + const uint64_t xfeature_enabled_mask = xgetbv(0); + + /* + * AVX registers: + * - Intel, AMD: XFEATURE_ENABLED_MASK[bit 1] for low 128 bits of ymm registers + * - Intel, AMD: XFEATURE_ENABLED_MASK[bit 2] for high 128 bits of ymm registers + */ + const uint64_t avx_regs_mask = UINT64_C(0x0000000000000006); + if ((xcr0_valid_bits & avx_regs_mask) == avx_regs_mask) { + avx_regs = (xfeature_enabled_mask & avx_regs_mask) == avx_regs_mask; + } + + /* + * AVX512 registers: + * - Intel, AMD: XFEATURE_ENABLED_MASK[bit 1] for low 128 bits of zmm registers + * - Intel, AMD: XFEATURE_ENABLED_MASK[bit 2] for bits 128-255 of zmm registers + * - Intel: XFEATURE_ENABLED_MASK[bit 5] for 8 64-bit OpMask registers (k0-k7) + * - Intel: XFEATURE_ENABLED_MASK[bit 6] for the high 256 bits of the zmm registers zmm0-zmm15 + * - Intel: XFEATURE_ENABLED_MASK[bit 7] for the 512-bit zmm registers zmm16-zmm31 + */ + const uint64_t avx512_regs_mask = UINT64_C(0x00000000000000E6); + if ((xcr0_valid_bits & avx512_regs_mask) == avx512_regs_mask) { + avx512_regs = (xfeature_enabled_mask & avx512_regs_mask) == avx512_regs_mask; + } + + /* + * MPX registers: + * - Intel: XFEATURE_ENABLED_MASK[bit 3] for BNDREGS + * - Intel: XFEATURE_ENABLED_MASK[bit 4] for BNDCSR + */ + const uint64_t mpx_regs_mask = UINT64_C(0x0000000000000018); + if ((xcr0_valid_bits & mpx_regs_mask) == mpx_regs_mask) { + mpx_regs = (xfeature_enabled_mask & mpx_regs_mask) == mpx_regs_mask; + } + } + +#if CPUINFO_ARCH_X86 + /* + * RDTSC instruction: + * - Intel, AMD: edx[bit 4] in basic info. + * - AMD: edx[bit 4] in extended info (reserved bit on Intel CPUs). + */ + isa.rdtsc = !!((basic_info.edx | extended_info.edx) & UINT32_C(0x00000010)); +#endif + + /* + * SYSENTER/SYSEXIT instructions: + * - Intel, AMD: edx[bit 11] in basic info. + */ + isa.sysenter = !!(basic_info.edx & UINT32_C(0x00000800)); + +#if CPUINFO_ARCH_X86 + /* + * SYSCALL/SYSRET instructions: + * - Intel, AMD: edx[bit 11] in extended info. + */ + isa.syscall = !!(extended_info.edx & UINT32_C(0x00000800)); +#endif + + /* + * RDMSR/WRMSR instructions: + * - Intel, AMD: edx[bit 5] in basic info. + * - AMD: edx[bit 5] in extended info (reserved bit on Intel CPUs). + */ + isa.msr = !!((basic_info.edx | extended_info.edx) & UINT32_C(0x00000020)); + + /* + * CLZERO instruction: + * - AMD: ebx[bit 0] in processor capacity info (reserved bit on Intel CPUs). + */ + isa.clzero = !!(processor_capacity_info.ebx & UINT32_C(0x00000001)); + + /* + * CLFLUSH instruction: + * - Intel, AMD: edx[bit 19] in basic info. + */ + isa.clflush = !!(basic_info.edx & UINT32_C(0x00080000)); + + /* + * CLFLUSHOPT instruction: + * - Intel: ebx[bit 23] in structured feature info (ecx = 0). + */ + isa.clflushopt = !!(structured_feature_info0.ebx & UINT32_C(0x00800000)); + + /* + * MWAIT/MONITOR instructions: + * - Intel, AMD: ecx[bit 3] in basic info. + */ + isa.mwait = !!(basic_info.ecx & UINT32_C(0x00000008)); + + /* + * MWAITX/MONITORX instructions: + * - AMD: ecx[bit 29] in extended info. + */ + isa.mwaitx = !!(extended_info.ecx & UINT32_C(0x20000000)); + + /* + * FXSAVE/FXRSTOR instructions: + * - Intel, AMD: edx[bit 24] in basic info. + * - AMD: edx[bit 24] in extended info (zero bit on Intel CPUs, EMMX bit on Cyrix CPUs). + */ + switch (vendor) { +#if CPUINFO_ARCH_X86 + case cpuinfo_vendor_cyrix: + case cpuinfo_vendor_nsc: + isa.emmx = !!(extended_info.edx & UINT32_C(0x01000000)); + break; +#endif + default: + isa.fxsave = !!((basic_info.edx | extended_info.edx) & UINT32_C(0x01000000)); + break; + } + + /* + * XSAVE/XRSTOR instructions: + * - Intel, AMD: ecx[bit 26] in basic info. + */ + isa.xsave = !!(basic_info.ecx & UINT32_C(0x04000000)); + +#if CPUINFO_ARCH_X86 + /* + * x87 FPU instructions: + * - Intel, AMD: edx[bit 0] in basic info. + * - AMD: edx[bit 0] in extended info (reserved bit on Intel CPUs). + */ + isa.fpu = !!((basic_info.edx | extended_info.edx) & UINT32_C(0x00000001)); + + /* + * MMX instructions: + * - Intel, AMD: edx[bit 23] in basic info. + * - AMD: edx[bit 23] in extended info (zero bit on Intel CPUs). + */ + isa.mmx = !!((basic_info.edx | extended_info.edx) & UINT32_C(0x00800000)); + + /* + * MMX+/Integer SSE instructions: + * - Intel, AMD: edx[bit 25] in basic info (SSE feature flag). + * - Pre-SSE AMD: edx[bit 22] in extended info (zero bit on Intel CPUs). + */ + isa.mmx_plus = !!((basic_info.edx & UINT32_C(0x02000000)) | (extended_info.edx & UINT32_C(0x00400000))); +#endif + + /* + * 3dnow! instructions: + * - AMD: edx[bit 31] of extended info (zero bit on Intel CPUs). + */ + isa.three_d_now = !!(extended_info.edx & UINT32_C(0x80000000)); + + /* + * 3dnow!+ instructions: + * - AMD: edx[bit 30] of extended info (zero bit on Intel CPUs). + */ + isa.three_d_now_plus = !!(extended_info.edx & UINT32_C(0x40000000)); + +#if CPUINFO_ARCH_X86 + /* + * 3dnow! Geode instructions: + * - No CPUID bit, detect as Geode microarchitecture + 3dnow!+ support + */ + isa.three_d_now_geode = isa.three_d_now_plus && (uarch == cpuinfo_uarch_geode); +#endif + + /* + * PREFETCH instruction: + * - AMD: ecx[bit 8] of extended info (one of 3dnow! prefetch instructions). + * On Intel this bit indicates PREFETCHW, but not PREFETCH support. + * - AMD: edx[bit 31] of extended info (implied by 3dnow! support). Reserved bit on Intel CPUs. + * - AMD: edx[bit 30] of extended info (implied by 3dnow!+ support). Reserved bit on Intel CPUs. + * - AMD: edx[bit 29] of extended info (x86-64 support). Does not imply PREFETCH support on non-AMD CPUs!!! + */ + switch (vendor) { + case cpuinfo_vendor_intel: + /* + * Instruction is not documented in the manual, + * and the 3dnow! prefetch CPUID bit indicates PREFETCHW instruction. + */ + break; + case cpuinfo_vendor_amd: + case cpuinfo_vendor_hygon: + isa.prefetch = !!((extended_info.ecx & UINT32_C(0x00000100)) | (extended_info.edx & UINT32_C(0xE0000000))); + break; + default: + /* + * Conservatively assume, that 3dnow!/3dnow!+ support implies PREFETCH support, but + * 3dnow! prefetch CPUID bit follows Intel spec (PREFETCHW, but not PREFETCH). + */ + isa.prefetch = !!(extended_info.edx & UINT32_C(0xC0000000)); + break; + } + + /* + * PREFETCHW instruction: + * - AMD: ecx[bit 8] of extended info (one of 3dnow! prefetch instructions). + * - Intel: ecx[bit 8] of extended info (PREFETCHW instruction only). + * - AMD: edx[bit 31] of extended info (implied by 3dnow! support). Reserved bit on Intel CPUs. + * - AMD: edx[bit 30] of extended info (implied by 3dnow!+ support). Reserved bit on Intel CPUs. + * - AMD: edx[bit 29] of extended info (x86-64 support). Does not imply PREFETCHW support on non-AMD CPUs!!! + */ + switch (vendor) { + case cpuinfo_vendor_amd: + case cpuinfo_vendor_hygon: + isa.prefetchw = !!((extended_info.ecx & UINT32_C(0x00000100)) | (extended_info.edx & UINT32_C(0xE0000000))); + break; + default: + /* Assume, that 3dnow!/3dnow!+ support implies PREFETCHW support, not implications from x86-64 support */ + isa.prefetchw = !!((extended_info.ecx & UINT32_C(0x00000100)) | (extended_info.edx & UINT32_C(0xC0000000))); + break; + } + + /* + * PREFETCHWT1 instruction: + * - Intel: ecx[bit 0] of structured feature info (ecx = 0). Reserved bit on AMD. + */ + isa.prefetchwt1 = !!(structured_feature_info0.ecx & UINT32_C(0x00000001)); + +#if CPUINFO_ARCH_X86 + /* + * SSE instructions: + * - Intel, AMD: edx[bit 25] in basic info. + */ + isa.sse = !!(basic_info.edx & UINT32_C(0x02000000)); + + /* + * SSE2 instructions: + * - Intel, AMD: edx[bit 26] in basic info. + */ + isa.sse2 = !!(basic_info.edx & UINT32_C(0x04000000)); +#endif + + /* + * SSE3 instructions: + * - Intel, AMD: ecx[bit 0] in basic info. + */ + isa.sse3 = !!(basic_info.ecx & UINT32_C(0x00000001)); + +#if CPUINFO_ARCH_X86 + /* + * CPUs with x86-64 or SSE3 always support DAZ (denormals-as-zero) mode. + * Only early Pentium 4 models may not support it. + */ + if (isa.sse3) { + isa.daz = true; + } else { + /* Detect DAZ support from masked MXCSR bits */ + if (isa.sse && isa.fxsave) { + struct fxsave_region region = { 0 }; + #ifdef _MSC_VER + _fxsave(®ion); + #else + __asm__ __volatile__ ("fxsave %[region];" : [region] "+m" (region)); + #endif + + /* + * Denormals-as-zero (DAZ) flag: + * - Intel, AMD: MXCSR[bit 6] + */ + isa.daz = !!(region.mxcsr_mask & UINT32_C(0x00000040)); + } + } +#endif + + /* + * SSSE3 instructions: + * - Intel, AMD: ecx[bit 9] in basic info. + */ + isa.ssse3 = !!(basic_info.ecx & UINT32_C(0x0000200)); + + + /* + * SSE4.1 instructions: + * - Intel, AMD: ecx[bit 19] in basic info. + */ + isa.sse4_1 = !!(basic_info.ecx & UINT32_C(0x00080000)); + + /* + * SSE4.2 instructions: + * - Intel: ecx[bit 20] in basic info (reserved bit on AMD CPUs). + */ + isa.sse4_2 = !!(basic_info.ecx & UINT32_C(0x00100000)); + + /* + * SSE4A instructions: + * - AMD: ecx[bit 6] in extended info (reserved bit on Intel CPUs). + */ + isa.sse4a = !!(extended_info.ecx & UINT32_C(0x00000040)); + + /* + * Misaligned memory operands in SSE instructions: + * - AMD: ecx[bit 7] in extended info (reserved bit on Intel CPUs). + */ + isa.misaligned_sse = !!(extended_info.ecx & UINT32_C(0x00000080)); + + /* + * AVX instructions: + * - Intel, AMD: ecx[bit 28] in basic info. + */ + isa.avx = avx_regs && !!(basic_info.ecx & UINT32_C(0x10000000)); + + /* + * FMA3 instructions: + * - Intel: ecx[bit 12] in basic info (reserved bit on AMD CPUs). + */ + isa.fma3 = avx_regs && !!(basic_info.ecx & UINT32_C(0x00001000)); + + /* + * FMA4 instructions: + * - AMD: ecx[bit 16] in extended info (reserved bit on Intel CPUs). + */ + isa.fma4 = avx_regs && !!(extended_info.ecx & UINT32_C(0x00010000)); + + /* + * XOP instructions: + * - AMD: ecx[bit 11] in extended info (reserved bit on Intel CPUs). + */ + isa.xop = avx_regs && !!(extended_info.ecx & UINT32_C(0x00000800)); + + /* + * F16C instructions: + * - Intel, AMD: ecx[bit 29] in basic info. + */ + isa.f16c = avx_regs && !!(basic_info.ecx & UINT32_C(0x20000000)); + + /* + * AVX2 instructions: + * - Intel: ebx[bit 5] in structured feature info (ecx = 0). + */ + isa.avx2 = avx_regs && !!(structured_feature_info0.ebx & UINT32_C(0x00000020)); + + /* + * AVX512F instructions: + * - Intel: ebx[bit 16] in structured feature info (ecx = 0). + */ + isa.avx512f = avx512_regs && !!(structured_feature_info0.ebx & UINT32_C(0x00010000)); + + /* + * AVX512PF instructions: + * - Intel: ebx[bit 26] in structured feature info (ecx = 0). + */ + isa.avx512pf = avx512_regs && !!(structured_feature_info0.ebx & UINT32_C(0x04000000)); + + /* + * AVX512ER instructions: + * - Intel: ebx[bit 27] in structured feature info (ecx = 0). + */ + isa.avx512er = avx512_regs && !!(structured_feature_info0.ebx & UINT32_C(0x08000000)); + + /* + * AVX512CD instructions: + * - Intel: ebx[bit 28] in structured feature info (ecx = 0). + */ + isa.avx512cd = avx512_regs && !!(structured_feature_info0.ebx & UINT32_C(0x10000000)); + + /* + * AVX512DQ instructions: + * - Intel: ebx[bit 17] in structured feature info (ecx = 0). + */ + isa.avx512dq = avx512_regs && !!(structured_feature_info0.ebx & UINT32_C(0x00020000)); + + /* + * AVX512BW instructions: + * - Intel: ebx[bit 30] in structured feature info (ecx = 0). + */ + isa.avx512bw = avx512_regs && !!(structured_feature_info0.ebx & UINT32_C(0x40000000)); + + /* + * AVX512VL instructions: + * - Intel: ebx[bit 31] in structured feature info (ecx = 0). + */ + isa.avx512vl = avx512_regs && !!(structured_feature_info0.ebx & UINT32_C(0x80000000)); + + /* + * AVX512IFMA instructions: + * - Intel: ebx[bit 21] in structured feature info (ecx = 0). + */ + isa.avx512ifma = avx512_regs && !!(structured_feature_info0.ebx & UINT32_C(0x00200000)); + + /* + * AVX512VBMI instructions: + * - Intel: ecx[bit 1] in structured feature info (ecx = 0). + */ + isa.avx512vbmi = avx512_regs && !!(structured_feature_info0.ecx & UINT32_C(0x00000002)); + + /* + * AVX512VBMI2 instructions: + * - Intel: ecx[bit 6] in structured feature info (ecx = 0). + */ + isa.avx512vbmi2 = avx512_regs && !!(structured_feature_info0.ecx & UINT32_C(0x00000040)); + + /* + * AVX512BITALG instructions: + * - Intel: ecx[bit 12] in structured feature info (ecx = 0). + */ + isa.avx512bitalg = avx512_regs && !!(structured_feature_info0.ecx & UINT32_C(0x00001000)); + + /* + * AVX512VPOPCNTDQ instructions: + * - Intel: ecx[bit 14] in structured feature info (ecx = 0). + */ + isa.avx512vpopcntdq = avx512_regs && !!(structured_feature_info0.ecx & UINT32_C(0x00004000)); + + /* + * AVX512VNNI instructions: + * - Intel: ecx[bit 11] in structured feature info (ecx = 0). + */ + isa.avx512vnni = avx512_regs && !!(structured_feature_info0.ecx & UINT32_C(0x00000800)); + + /* + * AVX512_4VNNIW instructions: + * - Intel: edx[bit 2] in structured feature info (ecx = 0). + */ + isa.avx512_4vnniw = avx512_regs && !!(structured_feature_info0.edx & UINT32_C(0x00000004)); + + /* + * AVX512_4FMAPS instructions: + * - Intel: edx[bit 3] in structured feature info (ecx = 0). + */ + isa.avx512_4fmaps = avx512_regs && !!(structured_feature_info0.edx & UINT32_C(0x00000008)); + + /* + * AVX512_VP2INTERSECT instructions: + * - Intel: edx[bit 8] in structured feature info (ecx = 0). + */ + isa.avx512vp2intersect = avx512_regs && !!(structured_feature_info0.edx & UINT32_C(0x00000100)); + + /* + * AVX512_BF16 instructions: + * - Intel: eax[bit 5] in structured feature info (ecx = 1). + */ + isa.avx512bf16 = avx512_regs && !!(structured_feature_info1.eax & UINT32_C(0x00000020)); + + /* + * HLE instructions: + * - Intel: ebx[bit 4] in structured feature info (ecx = 0). + */ + isa.hle = !!(structured_feature_info0.ebx & UINT32_C(0x00000010)); + + /* + * RTM instructions: + * - Intel: ebx[bit 11] in structured feature info (ecx = 0). + */ + isa.rtm = !!(structured_feature_info0.ebx & UINT32_C(0x00000800)); + + /* + * XTEST instruction: + * - Intel: either HLE or RTM is supported + */ + isa.xtest = isa.hle || isa.rtm; + + /* + * MPX registers and instructions: + * - Intel: ebx[bit 14] in structured feature info (ecx = 0). + */ + isa.mpx = mpx_regs && !!(structured_feature_info0.ebx & UINT32_C(0x00004000)); + +#if CPUINFO_ARCH_X86 + /* + * CMOV instructions: + * - Intel, AMD: edx[bit 15] in basic info. + * - AMD: edx[bit 15] in extended info (zero bit on Intel CPUs). + */ + isa.cmov = !!((basic_info.edx | extended_info.edx) & UINT32_C(0x00008000)); + + /* + * CMPXCHG8B instruction: + * - Intel, AMD: edx[bit 8] in basic info. + * - AMD: edx[bit 8] in extended info (reserved bit on Intel CPUs). + */ + isa.cmpxchg8b = !!((basic_info.edx | extended_info.edx) & UINT32_C(0x00000100)); +#endif + + /* + * CMPXCHG16B instruction: + * - Intel, AMD: ecx[bit 13] in basic info. + */ + isa.cmpxchg16b = !!(basic_info.ecx & UINT32_C(0x00002000)); + + /* + * CLWB instruction: + * - Intel: ebx[bit 24] in structured feature info (ecx = 0). + */ + isa.clwb = !!(structured_feature_info0.ebx & UINT32_C(0x01000000)); + + /* + * MOVBE instruction: + * - Intel: ecx[bit 22] in basic info. + */ + isa.movbe = !!(basic_info.ecx & UINT32_C(0x00400000)); + +#if CPUINFO_ARCH_X86_64 + /* + * Some early x86-64 CPUs lack LAHF & SAHF instructions. + * A special CPU feature bit must be checked to ensure their availability: + * - Intel, AMD: ecx[bit 0] in extended info. + */ + isa.lahf_sahf = !!(extended_info.ecx & UINT32_C(0x00000001)); +#endif + + /* + * RDFSBASE/RDGSBASE/WRFSBASE/WRGSBASE instructions. + * - Intel: ebx[bit 0] in structured feature info (ecx = 0). + */ + isa.fs_gs_base = !!(structured_feature_info0.ebx & UINT32_C(0x00000001)); + + /* + * LZCNT instruction: + * - Intel, AMD: ecx[bit 5] in extended info. + */ + isa.lzcnt = !!(extended_info.ecx & UINT32_C(0x00000020)); + + /* + * POPCNT instruction: + * - Intel, AMD: ecx[bit 23] in basic info. + */ + isa.popcnt = !!(basic_info.ecx & UINT32_C(0x00800000)); + + /* + * TBM instructions: + * - AMD: ecx[bit 21] in extended info (reserved bit on Intel CPUs). + */ + isa.tbm = !!(extended_info.ecx & UINT32_C(0x00200000)); + + /* + * BMI instructions: + * - Intel, AMD: ebx[bit 3] in structured feature info (ecx = 0). + */ + isa.bmi = !!(structured_feature_info0.ebx & UINT32_C(0x00000008)); + + /* + * BMI2 instructions: + * - Intel: ebx[bit 8] in structured feature info (ecx = 0). + */ + isa.bmi2 = !!(structured_feature_info0.ebx & UINT32_C(0x00000100)); + + /* + * ADCX/ADOX instructions: + * - Intel: ebx[bit 19] in structured feature info (ecx = 0). + */ + isa.adx = !!(structured_feature_info0.ebx & UINT32_C(0x00080000)); + + /* + * AES instructions: + * - Intel: ecx[bit 25] in basic info (reserved bit on AMD CPUs). + */ + isa.aes = !!(basic_info.ecx & UINT32_C(0x02000000)); + + /* + * VAES instructions: + * - Intel: ecx[bit 9] in structured feature info (ecx = 0). + */ + isa.vaes = !!(structured_feature_info0.ecx & UINT32_C(0x00000200)); + + /* + * PCLMULQDQ instruction: + * - Intel: ecx[bit 1] in basic info (reserved bit on AMD CPUs). + */ + isa.pclmulqdq = !!(basic_info.ecx & UINT32_C(0x00000002)); + + /* + * VPCLMULQDQ instruction: + * - Intel: ecx[bit 10] in structured feature info (ecx = 0). + */ + isa.vpclmulqdq = !!(structured_feature_info0.ecx & UINT32_C(0x00000400)); + + /* + * GFNI instructions: + * - Intel: ecx[bit 8] in structured feature info (ecx = 0). + */ + isa.gfni = !!(structured_feature_info0.ecx & UINT32_C(0x00000100)); + + /* + * RDRAND instruction: + * - Intel: ecx[bit 30] in basic info (reserved bit on AMD CPUs). + */ + isa.rdrand = !!(basic_info.ecx & UINT32_C(0x40000000)); + + /* + * RDSEED instruction: + * - Intel: ebx[bit 18] in structured feature info (ecx = 0). + */ + isa.rdseed = !!(structured_feature_info0.ebx & UINT32_C(0x00040000)); + + /* + * SHA instructions: + * - Intel: ebx[bit 29] in structured feature info (ecx = 0). + */ + isa.sha = !!(structured_feature_info0.ebx & UINT32_C(0x20000000)); + + if (vendor == cpuinfo_vendor_via) { + const struct cpuid_regs padlock_meta_info = cpuid(UINT32_C(0xC0000000)); + const uint32_t max_padlock_index = padlock_meta_info.eax; + const uint32_t padlock_info_index = UINT32_C(0xC0000001); + if (max_padlock_index >= padlock_info_index) { + const struct cpuid_regs padlock_info = cpuid(padlock_info_index); + + /* + * Padlock RNG extension: + * - VIA: edx[bit 2] in padlock info = RNG exists on chip flag. + * - VIA: edx[bit 3] in padlock info = RNG enabled by OS. + */ + const uint32_t padlock_rng_mask = UINT32_C(0x0000000C); + isa.rng = (padlock_info.edx & padlock_rng_mask) == padlock_rng_mask; + + /* + * Padlock ACE extension: + * - VIA: edx[bit 6] in padlock info = ACE exists on chip flag. + * - VIA: edx[bit 7] in padlock info = ACE enabled by OS. + */ + const uint32_t padlock_ace_mask = UINT32_C(0x000000C0); + isa.ace = (padlock_info.edx & padlock_ace_mask) == padlock_ace_mask; + + /* + * Padlock ACE 2 extension: + * - VIA: edx[bit 8] in padlock info = ACE2 exists on chip flag. + * - VIA: edx[bit 9] in padlock info = ACE 2 enabled by OS. + */ + const uint32_t padlock_ace2_mask = UINT32_C(0x00000300); + isa.ace2 = (padlock_info.edx & padlock_ace2_mask) == padlock_ace2_mask; + + /* + * Padlock PHE extension: + * - VIA: edx[bit 10] in padlock info = PHE exists on chip flag. + * - VIA: edx[bit 11] in padlock info = PHE enabled by OS. + */ + const uint32_t padlock_phe_mask = UINT32_C(0x00000C00); + isa.phe = (padlock_info.edx & padlock_phe_mask) == padlock_phe_mask; + + /* + * Padlock PMM extension: + * - VIA: edx[bit 12] in padlock info = PMM exists on chip flag. + * - VIA: edx[bit 13] in padlock info = PMM enabled by OS. + */ + const uint32_t padlock_pmm_mask = UINT32_C(0x00003000); + isa.pmm = (padlock_info.edx & padlock_pmm_mask) == padlock_pmm_mask; + } + } + + /* + * LWP instructions: + * - AMD: ecx[bit 15] in extended info (reserved bit on Intel CPUs). + */ + isa.lwp = !!(extended_info.ecx & UINT32_C(0x00008000)); + + /* + * RDTSCP instruction: + * - Intel, AMD: edx[bit 27] in extended info. + */ + isa.rdtscp = !!(extended_info.edx & UINT32_C(0x08000000)); + + /* + * RDPID instruction: + * - Intel: ecx[bit 22] in structured feature info (ecx = 0). + */ + isa.rdpid = !!(structured_feature_info0.ecx & UINT32_C(0x00400000)); + + return isa; +} diff --git a/3rdparty/cpuinfo/src/x86/linux/api.h b/3rdparty/cpuinfo/src/x86/linux/api.h new file mode 100644 index 000000000..1c9485b19 --- /dev/null +++ b/3rdparty/cpuinfo/src/x86/linux/api.h @@ -0,0 +1,20 @@ +#pragma once + +#include +#include + +#include +#include +#include +#include + + +struct cpuinfo_x86_linux_processor { + uint32_t apic_id; + uint32_t linux_id; + uint32_t flags; +}; + +CPUINFO_INTERNAL bool cpuinfo_x86_linux_parse_proc_cpuinfo( + uint32_t max_processors_count, + struct cpuinfo_x86_linux_processor processors[restrict static max_processors_count]); diff --git a/3rdparty/cpuinfo/src/x86/linux/cpuinfo.c b/3rdparty/cpuinfo/src/x86/linux/cpuinfo.c new file mode 100644 index 000000000..90ff81435 --- /dev/null +++ b/3rdparty/cpuinfo/src/x86/linux/cpuinfo.c @@ -0,0 +1,207 @@ +#include +#include +#include +#include +#include + +#include +#include +#include + +/* + * Size, in chars, of the on-stack buffer used for parsing lines of /proc/cpuinfo. + * This is also the limit on the length of a single line. + */ +#define BUFFER_SIZE 2048 + + +static uint32_t parse_processor_number( + const char* processor_start, + const char* processor_end) +{ + const size_t processor_length = (size_t) (processor_end - processor_start); + + if (processor_length == 0) { + cpuinfo_log_warning("Processor number in /proc/cpuinfo is ignored: string is empty"); + return 0; + } + + uint32_t processor_number = 0; + for (const char* digit_ptr = processor_start; digit_ptr != processor_end; digit_ptr++) { + const uint32_t digit = (uint32_t) (*digit_ptr - '0'); + if (digit > 10) { + cpuinfo_log_warning("non-decimal suffix %.*s in /proc/cpuinfo processor number is ignored", + (int) (processor_end - digit_ptr), digit_ptr); + break; + } + + processor_number = processor_number * 10 + digit; + } + + return processor_number; +} + +/* + * Decode APIC ID reported by Linux kernel for x86/x86-64 architecture. + * Example of APIC ID reported in /proc/cpuinfo: + * + * apicid : 2 + */ +static void parse_apic_id( + const char* apic_start, + const char* apic_end, + struct cpuinfo_x86_linux_processor processor[restrict static 1]) +{ + uint32_t apic_id = 0; + for (const char* digit_ptr = apic_start; digit_ptr != apic_end; digit_ptr++) { + const uint32_t digit = *digit_ptr - '0'; + if (digit >= 10) { + cpuinfo_log_warning("APIC ID %.*s in /proc/cpuinfo is ignored due to unexpected non-digit character '%c' at offset %zu", + (int) (apic_end - apic_start), apic_start, + *digit_ptr, (size_t) (digit_ptr - apic_start)); + return; + } + + apic_id = apic_id * 10 + digit; + } + + processor->apic_id = apic_id; + processor->flags |= CPUINFO_LINUX_FLAG_APIC_ID; +} + +struct proc_cpuinfo_parser_state { + uint32_t processor_index; + uint32_t max_processors_count; + struct cpuinfo_x86_linux_processor* processors; + struct cpuinfo_x86_linux_processor dummy_processor; +}; + +/* + * Decode a single line of /proc/cpuinfo information. + * Lines have format [ ]*:[ ] + */ +static bool parse_line( + const char* line_start, + const char* line_end, + struct proc_cpuinfo_parser_state state[restrict static 1], + uint64_t line_number) +{ + /* Empty line. Skip. */ + if (line_start == line_end) { + return true; + } + + /* Search for ':' on the line. */ + const char* separator = line_start; + for (; separator != line_end; separator++) { + if (*separator == ':') { + break; + } + } + /* Skip line if no ':' separator was found. */ + if (separator == line_end) { + cpuinfo_log_info("Line %.*s in /proc/cpuinfo is ignored: key/value separator ':' not found", + (int) (line_end - line_start), line_start); + return true; + } + + /* Skip trailing spaces in key part. */ + const char* key_end = separator; + for (; key_end != line_start; key_end--) { + if (key_end[-1] != ' ' && key_end[-1] != '\t') { + break; + } + } + /* Skip line if key contains nothing but spaces. */ + if (key_end == line_start) { + cpuinfo_log_info("Line %.*s in /proc/cpuinfo is ignored: key contains only spaces", + (int) (line_end - line_start), line_start); + return true; + } + + /* Skip leading spaces in value part. */ + const char* value_start = separator + 1; + for (; value_start != line_end; value_start++) { + if (*value_start != ' ') { + break; + } + } + /* Value part contains nothing but spaces. Skip line. */ + if (value_start == line_end) { + cpuinfo_log_info("Line %.*s in /proc/cpuinfo is ignored: value contains only spaces", + (int) (line_end - line_start), line_start); + return true; + } + + /* Skip trailing spaces in value part (if any) */ + const char* value_end = line_end; + for (; value_end != value_start; value_end--) { + if (value_end[-1] != ' ') { + break; + } + } + + const uint32_t processor_index = state->processor_index; + const uint32_t max_processors_count = state->max_processors_count; + struct cpuinfo_x86_linux_processor* processors = state->processors; + struct cpuinfo_x86_linux_processor* processor = &state->dummy_processor; + if (processor_index < max_processors_count) { + processor = &processors[processor_index]; + } + + const size_t key_length = key_end - line_start; + switch (key_length) { + case 6: + if (memcmp(line_start, "apicid", key_length) == 0) { + parse_apic_id(value_start, value_end, processor); + } else { + goto unknown; + } + break; + case 9: + if (memcmp(line_start, "processor", key_length) == 0) { + const uint32_t new_processor_index = parse_processor_number(value_start, value_end); + if (new_processor_index < processor_index) { + /* Strange: decreasing processor number */ + cpuinfo_log_warning( + "unexpectedly low processor number %"PRIu32" following processor %"PRIu32" in /proc/cpuinfo", + new_processor_index, processor_index); + } else if (new_processor_index > processor_index + 1) { + /* Strange, but common: skipped processor $(processor_index + 1) */ + cpuinfo_log_info( + "unexpectedly high processor number %"PRIu32" following processor %"PRIu32" in /proc/cpuinfo", + new_processor_index, processor_index); + } + if (new_processor_index >= max_processors_count) { + /* Log and ignore processor */ + cpuinfo_log_warning("processor %"PRIu32" in /proc/cpuinfo is ignored: index exceeds system limit %"PRIu32, + new_processor_index, max_processors_count - 1); + } else { + processors[new_processor_index].flags |= CPUINFO_LINUX_FLAG_PROC_CPUINFO; + } + state->processor_index = new_processor_index; + return true; + } else { + goto unknown; + } + break; + default: + unknown: + cpuinfo_log_debug("unknown /proc/cpuinfo key: %.*s", (int) key_length, line_start); + + } + return true; +} + +bool cpuinfo_x86_linux_parse_proc_cpuinfo( + uint32_t max_processors_count, + struct cpuinfo_x86_linux_processor processors[restrict static max_processors_count]) +{ + struct proc_cpuinfo_parser_state state = { + .processor_index = 0, + .max_processors_count = max_processors_count, + .processors = processors, + }; + return cpuinfo_linux_parse_multiline_file("/proc/cpuinfo", BUFFER_SIZE, + (cpuinfo_line_callback) parse_line, &state); +} diff --git a/3rdparty/cpuinfo/src/x86/linux/init.c b/3rdparty/cpuinfo/src/x86/linux/init.c new file mode 100644 index 000000000..f5657890e --- /dev/null +++ b/3rdparty/cpuinfo/src/x86/linux/init.c @@ -0,0 +1,629 @@ +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + + +static inline uint32_t bit_mask(uint32_t bits) { + return (UINT32_C(1) << bits) - UINT32_C(1); +} + +static inline bool bitmask_all(uint32_t bitfield, uint32_t mask) { + return (bitfield & mask) == mask; +} + +static inline uint32_t min(uint32_t a, uint32_t b) { + return a < b ? a : b; +} + +static inline int cmp(uint32_t a, uint32_t b) { + return (a > b) - (a < b); +} + +static int cmp_x86_linux_processor(const void* ptr_a, const void* ptr_b) { + const struct cpuinfo_x86_linux_processor* processor_a = (const struct cpuinfo_x86_linux_processor*) ptr_a; + const struct cpuinfo_x86_linux_processor* processor_b = (const struct cpuinfo_x86_linux_processor*) ptr_b; + + /* Move usable processors towards the start of the array */ + const bool usable_a = bitmask_all(processor_a->flags, CPUINFO_LINUX_FLAG_VALID); + const bool usable_b = bitmask_all(processor_b->flags, CPUINFO_LINUX_FLAG_VALID); + if (usable_a != usable_b) { + return (int) usable_b - (int) usable_a; + } + + /* Compare based on APIC ID (i.e. processor 0 < processor 1) */ + const uint32_t id_a = processor_a->apic_id; + const uint32_t id_b = processor_b->apic_id; + return cmp(id_a, id_b); +} + +static void cpuinfo_x86_count_objects( + uint32_t linux_processors_count, + const struct cpuinfo_x86_linux_processor linux_processors[restrict static linux_processors_count], + const struct cpuinfo_x86_processor processor[restrict static 1], + uint32_t valid_processor_mask, + uint32_t llc_apic_bits, + uint32_t cores_count_ptr[restrict static 1], + uint32_t clusters_count_ptr[restrict static 1], + uint32_t packages_count_ptr[restrict static 1], + uint32_t l1i_count_ptr[restrict static 1], + uint32_t l1d_count_ptr[restrict static 1], + uint32_t l2_count_ptr[restrict static 1], + uint32_t l3_count_ptr[restrict static 1], + uint32_t l4_count_ptr[restrict static 1]) +{ + const uint32_t core_apic_mask = + ~(bit_mask(processor->topology.thread_bits_length) << processor->topology.thread_bits_offset); + const uint32_t package_apic_mask = + core_apic_mask & ~(bit_mask(processor->topology.core_bits_length) << processor->topology.core_bits_offset); + const uint32_t llc_apic_mask = ~bit_mask(llc_apic_bits); + const uint32_t cluster_apic_mask = package_apic_mask | llc_apic_mask; + + uint32_t cores_count = 0, clusters_count = 0, packages_count = 0; + uint32_t l1i_count = 0, l1d_count = 0, l2_count = 0, l3_count = 0, l4_count = 0; + uint32_t last_core_id = UINT32_MAX, last_cluster_id = UINT32_MAX, last_package_id = UINT32_MAX; + uint32_t last_l1i_id = UINT32_MAX, last_l1d_id = UINT32_MAX; + uint32_t last_l2_id = UINT32_MAX, last_l3_id = UINT32_MAX, last_l4_id = UINT32_MAX; + for (uint32_t i = 0; i < linux_processors_count; i++) { + if (bitmask_all(linux_processors[i].flags, valid_processor_mask)) { + const uint32_t apic_id = linux_processors[i].apic_id; + cpuinfo_log_debug("APID ID %"PRIu32": system processor %"PRIu32, apic_id, linux_processors[i].linux_id); + + /* All bits of APIC ID except thread ID mask */ + const uint32_t core_id = apic_id & core_apic_mask; + if (core_id != last_core_id) { + last_core_id = core_id; + cores_count++; + } + /* All bits of APIC ID except thread ID and core ID masks */ + const uint32_t package_id = apic_id & package_apic_mask; + if (package_id != last_package_id) { + last_package_id = package_id; + packages_count++; + } + /* Bits of APIC ID which are part of either LLC or package ID mask */ + const uint32_t cluster_id = apic_id & cluster_apic_mask; + if (cluster_id != last_cluster_id) { + last_cluster_id = cluster_id; + clusters_count++; + } + if (processor->cache.l1i.size != 0) { + const uint32_t l1i_id = apic_id & ~bit_mask(processor->cache.l1i.apic_bits); + if (l1i_id != last_l1i_id) { + last_l1i_id = l1i_id; + l1i_count++; + } + } + if (processor->cache.l1d.size != 0) { + const uint32_t l1d_id = apic_id & ~bit_mask(processor->cache.l1d.apic_bits); + if (l1d_id != last_l1d_id) { + last_l1d_id = l1d_id; + l1d_count++; + } + } + if (processor->cache.l2.size != 0) { + const uint32_t l2_id = apic_id & ~bit_mask(processor->cache.l2.apic_bits); + if (l2_id != last_l2_id) { + last_l2_id = l2_id; + l2_count++; + } + } + if (processor->cache.l3.size != 0) { + const uint32_t l3_id = apic_id & ~bit_mask(processor->cache.l3.apic_bits); + if (l3_id != last_l3_id) { + last_l3_id = l3_id; + l3_count++; + } + } + if (processor->cache.l4.size != 0) { + const uint32_t l4_id = apic_id & ~bit_mask(processor->cache.l4.apic_bits); + if (l4_id != last_l4_id) { + last_l4_id = l4_id; + l4_count++; + } + } + } + } + *cores_count_ptr = cores_count; + *clusters_count_ptr = clusters_count; + *packages_count_ptr = packages_count; + *l1i_count_ptr = l1i_count; + *l1d_count_ptr = l1d_count; + *l2_count_ptr = l2_count; + *l3_count_ptr = l3_count; + *l4_count_ptr = l4_count; +} + +void cpuinfo_x86_linux_init(void) { + struct cpuinfo_x86_linux_processor* x86_linux_processors = NULL; + struct cpuinfo_processor* processors = NULL; + struct cpuinfo_core* cores = NULL; + struct cpuinfo_cluster* clusters = NULL; + struct cpuinfo_package* packages = NULL; + const struct cpuinfo_processor** linux_cpu_to_processor_map = NULL; + const struct cpuinfo_core** linux_cpu_to_core_map = NULL; + struct cpuinfo_cache* l1i = NULL; + struct cpuinfo_cache* l1d = NULL; + struct cpuinfo_cache* l2 = NULL; + struct cpuinfo_cache* l3 = NULL; + struct cpuinfo_cache* l4 = NULL; + + const uint32_t max_processors_count = cpuinfo_linux_get_max_processors_count(); + cpuinfo_log_debug("system maximum processors count: %"PRIu32, max_processors_count); + + const uint32_t max_possible_processors_count = 1 + + cpuinfo_linux_get_max_possible_processor(max_processors_count); + cpuinfo_log_debug("maximum possible processors count: %"PRIu32, max_possible_processors_count); + const uint32_t max_present_processors_count = 1 + + cpuinfo_linux_get_max_present_processor(max_processors_count); + cpuinfo_log_debug("maximum present processors count: %"PRIu32, max_present_processors_count); + + uint32_t valid_processor_mask = 0; + uint32_t x86_linux_processors_count = max_processors_count; + if (max_present_processors_count != 0) { + x86_linux_processors_count = min(x86_linux_processors_count, max_present_processors_count); + valid_processor_mask = CPUINFO_LINUX_FLAG_PRESENT; + } else { + valid_processor_mask = CPUINFO_LINUX_FLAG_PROC_CPUINFO; + } + if (max_possible_processors_count != 0) { + x86_linux_processors_count = min(x86_linux_processors_count, max_possible_processors_count); + valid_processor_mask |= CPUINFO_LINUX_FLAG_POSSIBLE; + } + + x86_linux_processors = calloc(x86_linux_processors_count, sizeof(struct cpuinfo_x86_linux_processor)); + if (x86_linux_processors == NULL) { + cpuinfo_log_error( + "failed to allocate %zu bytes for descriptions of %"PRIu32" x86 logical processors", + x86_linux_processors_count * sizeof(struct cpuinfo_x86_linux_processor), + x86_linux_processors_count); + return; + } + + if (max_possible_processors_count != 0) { + cpuinfo_linux_detect_possible_processors( + x86_linux_processors_count, &x86_linux_processors->flags, + sizeof(struct cpuinfo_x86_linux_processor), + CPUINFO_LINUX_FLAG_POSSIBLE); + } + + if (max_present_processors_count != 0) { + cpuinfo_linux_detect_present_processors( + x86_linux_processors_count, &x86_linux_processors->flags, + sizeof(struct cpuinfo_x86_linux_processor), + CPUINFO_LINUX_FLAG_PRESENT); + } + + if (!cpuinfo_x86_linux_parse_proc_cpuinfo(x86_linux_processors_count, x86_linux_processors)) { + cpuinfo_log_error("failed to parse processor information from /proc/cpuinfo"); + return; + } + + for (uint32_t i = 0; i < x86_linux_processors_count; i++) { + if (bitmask_all(x86_linux_processors[i].flags, valid_processor_mask)) { + x86_linux_processors[i].flags |= CPUINFO_LINUX_FLAG_VALID; + } + } + + struct cpuinfo_x86_processor x86_processor; + memset(&x86_processor, 0, sizeof(x86_processor)); + cpuinfo_x86_init_processor(&x86_processor); + char brand_string[48]; + cpuinfo_x86_normalize_brand_string(x86_processor.brand_string, brand_string); + + uint32_t processors_count = 0; + for (uint32_t i = 0; i < x86_linux_processors_count; i++) { + if (bitmask_all(x86_linux_processors[i].flags, CPUINFO_LINUX_FLAG_VALID)) { + x86_linux_processors[i].linux_id = i; + processors_count++; + } + } + + qsort(x86_linux_processors, x86_linux_processors_count, sizeof(struct cpuinfo_x86_linux_processor), + cmp_x86_linux_processor); + + processors = calloc(processors_count, sizeof(struct cpuinfo_processor)); + if (processors == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" logical processors", + processors_count * sizeof(struct cpuinfo_processor), processors_count); + goto cleanup; + } + + uint32_t llc_apic_bits = 0; + if (x86_processor.cache.l4.size != 0) { + llc_apic_bits = x86_processor.cache.l4.apic_bits; + } else if (x86_processor.cache.l3.size != 0) { + llc_apic_bits = x86_processor.cache.l3.apic_bits; + } else if (x86_processor.cache.l2.size != 0) { + llc_apic_bits = x86_processor.cache.l2.apic_bits; + } else if (x86_processor.cache.l1d.size != 0) { + llc_apic_bits = x86_processor.cache.l1d.apic_bits; + } + uint32_t packages_count = 0, clusters_count = 0, cores_count = 0; + uint32_t l1i_count = 0, l1d_count = 0, l2_count = 0, l3_count = 0, l4_count = 0; + cpuinfo_x86_count_objects( + x86_linux_processors_count, x86_linux_processors, &x86_processor, valid_processor_mask, llc_apic_bits, + &cores_count, &clusters_count, &packages_count, &l1i_count, &l1d_count, &l2_count, &l3_count, &l4_count); + + cpuinfo_log_debug("detected %"PRIu32" cores", cores_count); + cpuinfo_log_debug("detected %"PRIu32" clusters", clusters_count); + cpuinfo_log_debug("detected %"PRIu32" packages", packages_count); + cpuinfo_log_debug("detected %"PRIu32" L1I caches", l1i_count); + cpuinfo_log_debug("detected %"PRIu32" L1D caches", l1d_count); + cpuinfo_log_debug("detected %"PRIu32" L2 caches", l2_count); + cpuinfo_log_debug("detected %"PRIu32" L3 caches", l3_count); + cpuinfo_log_debug("detected %"PRIu32" L4 caches", l4_count); + + linux_cpu_to_processor_map = calloc(x86_linux_processors_count, sizeof(struct cpuinfo_processor*)); + if (linux_cpu_to_processor_map == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for mapping entries of %"PRIu32" logical processors", + x86_linux_processors_count * sizeof(struct cpuinfo_processor*), + x86_linux_processors_count); + goto cleanup; + } + + linux_cpu_to_core_map = calloc(x86_linux_processors_count, sizeof(struct cpuinfo_core*)); + if (linux_cpu_to_core_map == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for mapping entries of %"PRIu32" cores", + x86_linux_processors_count * sizeof(struct cpuinfo_core*), + x86_linux_processors_count); + goto cleanup; + } + + cores = calloc(cores_count, sizeof(struct cpuinfo_core)); + if (cores == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" cores", + cores_count * sizeof(struct cpuinfo_core), cores_count); + goto cleanup; + } + + clusters = calloc(clusters_count, sizeof(struct cpuinfo_cluster)); + if (clusters == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" core clusters", + clusters_count * sizeof(struct cpuinfo_cluster), clusters_count); + goto cleanup; + } + + packages = calloc(packages_count, sizeof(struct cpuinfo_package)); + if (packages == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" physical packages", + packages_count * sizeof(struct cpuinfo_package), packages_count); + goto cleanup; + } + + if (l1i_count != 0) { + l1i = calloc(l1i_count, sizeof(struct cpuinfo_cache)); + if (l1i == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L1I caches", + l1i_count * sizeof(struct cpuinfo_cache), l1i_count); + goto cleanup; + } + } + if (l1d_count != 0) { + l1d = calloc(l1d_count, sizeof(struct cpuinfo_cache)); + if (l1d == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L1D caches", + l1d_count * sizeof(struct cpuinfo_cache), l1d_count); + goto cleanup; + } + } + if (l2_count != 0) { + l2 = calloc(l2_count, sizeof(struct cpuinfo_cache)); + if (l2 == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L2 caches", + l2_count * sizeof(struct cpuinfo_cache), l2_count); + goto cleanup; + } + } + if (l3_count != 0) { + l3 = calloc(l3_count, sizeof(struct cpuinfo_cache)); + if (l3 == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L3 caches", + l3_count * sizeof(struct cpuinfo_cache), l3_count); + goto cleanup; + } + } + if (l4_count != 0) { + l4 = calloc(l4_count, sizeof(struct cpuinfo_cache)); + if (l4 == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L4 caches", + l4_count * sizeof(struct cpuinfo_cache), l4_count); + goto cleanup; + } + } + + const uint32_t core_apic_mask = + ~(bit_mask(x86_processor.topology.thread_bits_length) << x86_processor.topology.thread_bits_offset); + const uint32_t package_apic_mask = + core_apic_mask & ~(bit_mask(x86_processor.topology.core_bits_length) << x86_processor.topology.core_bits_offset); + const uint32_t llc_apic_mask = ~bit_mask(llc_apic_bits); + const uint32_t cluster_apic_mask = package_apic_mask | llc_apic_mask; + + uint32_t processor_index = UINT32_MAX, core_index = UINT32_MAX, cluster_index = UINT32_MAX, package_index = UINT32_MAX; + uint32_t l1i_index = UINT32_MAX, l1d_index = UINT32_MAX, l2_index = UINT32_MAX, l3_index = UINT32_MAX, l4_index = UINT32_MAX; + uint32_t cluster_id = 0, core_id = 0, smt_id = 0; + uint32_t last_apic_core_id = UINT32_MAX, last_apic_cluster_id = UINT32_MAX, last_apic_package_id = UINT32_MAX; + uint32_t last_l1i_id = UINT32_MAX, last_l1d_id = UINT32_MAX; + uint32_t last_l2_id = UINT32_MAX, last_l3_id = UINT32_MAX, last_l4_id = UINT32_MAX; + for (uint32_t i = 0; i < x86_linux_processors_count; i++) { + if (bitmask_all(x86_linux_processors[i].flags, CPUINFO_LINUX_FLAG_VALID)) { + const uint32_t apic_id = x86_linux_processors[i].apic_id; + processor_index++; + smt_id++; + + /* All bits of APIC ID except thread ID mask */ + const uint32_t apid_core_id = apic_id & core_apic_mask; + if (apid_core_id != last_apic_core_id) { + core_index++; + core_id++; + smt_id = 0; + } + /* Bits of APIC ID which are part of either LLC or package ID mask */ + const uint32_t apic_cluster_id = apic_id & cluster_apic_mask; + if (apic_cluster_id != last_apic_cluster_id) { + cluster_index++; + cluster_id++; + } + /* All bits of APIC ID except thread ID and core ID masks */ + const uint32_t apic_package_id = apic_id & package_apic_mask; + if (apic_package_id != last_apic_package_id) { + package_index++; + core_id = 0; + cluster_id = 0; + } + + /* Initialize logical processor object */ + processors[processor_index].smt_id = smt_id; + processors[processor_index].core = cores + core_index; + processors[processor_index].cluster = clusters + cluster_index; + processors[processor_index].package = packages + package_index; + processors[processor_index].linux_id = x86_linux_processors[i].linux_id; + processors[processor_index].apic_id = x86_linux_processors[i].apic_id; + + if (apid_core_id != last_apic_core_id) { + /* new core */ + cores[core_index] = (struct cpuinfo_core) { + .processor_start = processor_index, + .processor_count = 1, + .core_id = core_id, + .cluster = clusters + cluster_index, + .package = packages + package_index, + .vendor = x86_processor.vendor, + .uarch = x86_processor.uarch, + .cpuid = x86_processor.cpuid, + }; + clusters[cluster_index].core_count += 1; + packages[package_index].core_count += 1; + last_apic_core_id = apid_core_id; + } else { + /* another logical processor on the same core */ + cores[core_index].processor_count++; + } + + if (apic_cluster_id != last_apic_cluster_id) { + /* new cluster */ + clusters[cluster_index].processor_start = processor_index; + clusters[cluster_index].processor_count = 1; + clusters[cluster_index].core_start = core_index; + clusters[cluster_index].cluster_id = cluster_id; + clusters[cluster_index].package = packages + package_index; + clusters[cluster_index].vendor = x86_processor.vendor; + clusters[cluster_index].uarch = x86_processor.uarch; + clusters[cluster_index].cpuid = x86_processor.cpuid; + packages[package_index].cluster_count += 1; + last_apic_cluster_id = apic_cluster_id; + } else { + /* another logical processor on the same cluster */ + clusters[cluster_index].processor_count++; + } + + if (apic_package_id != last_apic_package_id) { + /* new package */ + packages[package_index].processor_start = processor_index; + packages[package_index].processor_count = 1; + packages[package_index].core_start = core_index; + packages[package_index].cluster_start = cluster_index; + cpuinfo_x86_format_package_name(x86_processor.vendor, brand_string, packages[package_index].name); + last_apic_package_id = apic_package_id; + } else { + /* another logical processor on the same package */ + packages[package_index].processor_count++; + } + + linux_cpu_to_processor_map[x86_linux_processors[i].linux_id] = processors + processor_index; + linux_cpu_to_core_map[x86_linux_processors[i].linux_id] = cores + core_index; + + if (x86_processor.cache.l1i.size != 0) { + const uint32_t l1i_id = apic_id & ~bit_mask(x86_processor.cache.l1i.apic_bits); + processors[i].cache.l1i = &l1i[l1i_index]; + if (l1i_id != last_l1i_id) { + /* new cache */ + last_l1i_id = l1i_id; + l1i[++l1i_index] = (struct cpuinfo_cache) { + .size = x86_processor.cache.l1i.size, + .associativity = x86_processor.cache.l1i.associativity, + .sets = x86_processor.cache.l1i.sets, + .partitions = x86_processor.cache.l1i.partitions, + .line_size = x86_processor.cache.l1i.line_size, + .flags = x86_processor.cache.l1i.flags, + .processor_start = processor_index, + .processor_count = 1, + }; + } else { + /* another processor sharing the same cache */ + l1i[l1i_index].processor_count += 1; + } + processors[i].cache.l1i = &l1i[l1i_index]; + } else { + /* reset cache id */ + last_l1i_id = UINT32_MAX; + } + if (x86_processor.cache.l1d.size != 0) { + const uint32_t l1d_id = apic_id & ~bit_mask(x86_processor.cache.l1d.apic_bits); + processors[i].cache.l1d = &l1d[l1d_index]; + if (l1d_id != last_l1d_id) { + /* new cache */ + last_l1d_id = l1d_id; + l1d[++l1d_index] = (struct cpuinfo_cache) { + .size = x86_processor.cache.l1d.size, + .associativity = x86_processor.cache.l1d.associativity, + .sets = x86_processor.cache.l1d.sets, + .partitions = x86_processor.cache.l1d.partitions, + .line_size = x86_processor.cache.l1d.line_size, + .flags = x86_processor.cache.l1d.flags, + .processor_start = processor_index, + .processor_count = 1, + }; + } else { + /* another processor sharing the same cache */ + l1d[l1d_index].processor_count += 1; + } + processors[i].cache.l1d = &l1d[l1d_index]; + } else { + /* reset cache id */ + last_l1d_id = UINT32_MAX; + } + if (x86_processor.cache.l2.size != 0) { + const uint32_t l2_id = apic_id & ~bit_mask(x86_processor.cache.l2.apic_bits); + processors[i].cache.l2 = &l2[l2_index]; + if (l2_id != last_l2_id) { + /* new cache */ + last_l2_id = l2_id; + l2[++l2_index] = (struct cpuinfo_cache) { + .size = x86_processor.cache.l2.size, + .associativity = x86_processor.cache.l2.associativity, + .sets = x86_processor.cache.l2.sets, + .partitions = x86_processor.cache.l2.partitions, + .line_size = x86_processor.cache.l2.line_size, + .flags = x86_processor.cache.l2.flags, + .processor_start = processor_index, + .processor_count = 1, + }; + } else { + /* another processor sharing the same cache */ + l2[l2_index].processor_count += 1; + } + processors[i].cache.l2 = &l2[l2_index]; + } else { + /* reset cache id */ + last_l2_id = UINT32_MAX; + } + if (x86_processor.cache.l3.size != 0) { + const uint32_t l3_id = apic_id & ~bit_mask(x86_processor.cache.l3.apic_bits); + processors[i].cache.l3 = &l3[l3_index]; + if (l3_id != last_l3_id) { + /* new cache */ + last_l3_id = l3_id; + l3[++l3_index] = (struct cpuinfo_cache) { + .size = x86_processor.cache.l3.size, + .associativity = x86_processor.cache.l3.associativity, + .sets = x86_processor.cache.l3.sets, + .partitions = x86_processor.cache.l3.partitions, + .line_size = x86_processor.cache.l3.line_size, + .flags = x86_processor.cache.l3.flags, + .processor_start = processor_index, + .processor_count = 1, + }; + } else { + /* another processor sharing the same cache */ + l3[l3_index].processor_count += 1; + } + processors[i].cache.l3 = &l3[l3_index]; + } else { + /* reset cache id */ + last_l3_id = UINT32_MAX; + } + if (x86_processor.cache.l4.size != 0) { + const uint32_t l4_id = apic_id & ~bit_mask(x86_processor.cache.l4.apic_bits); + processors[i].cache.l4 = &l4[l4_index]; + if (l4_id != last_l4_id) { + /* new cache */ + last_l4_id = l4_id; + l4[++l4_index] = (struct cpuinfo_cache) { + .size = x86_processor.cache.l4.size, + .associativity = x86_processor.cache.l4.associativity, + .sets = x86_processor.cache.l4.sets, + .partitions = x86_processor.cache.l4.partitions, + .line_size = x86_processor.cache.l4.line_size, + .flags = x86_processor.cache.l4.flags, + .processor_start = processor_index, + .processor_count = 1, + }; + } else { + /* another processor sharing the same cache */ + l4[l4_index].processor_count += 1; + } + processors[i].cache.l4 = &l4[l4_index]; + } else { + /* reset cache id */ + last_l4_id = UINT32_MAX; + } + } + } + + /* Commit changes */ + cpuinfo_processors = processors; + cpuinfo_cores = cores; + cpuinfo_clusters = clusters; + cpuinfo_packages = packages; + cpuinfo_cache[cpuinfo_cache_level_1i] = l1i; + cpuinfo_cache[cpuinfo_cache_level_1d] = l1d; + cpuinfo_cache[cpuinfo_cache_level_2] = l2; + cpuinfo_cache[cpuinfo_cache_level_3] = l3; + cpuinfo_cache[cpuinfo_cache_level_4] = l4; + + cpuinfo_processors_count = processors_count; + cpuinfo_cores_count = cores_count; + cpuinfo_clusters_count = clusters_count; + cpuinfo_packages_count = packages_count; + cpuinfo_cache_count[cpuinfo_cache_level_1i] = l1i_count; + cpuinfo_cache_count[cpuinfo_cache_level_1d] = l1d_count; + cpuinfo_cache_count[cpuinfo_cache_level_2] = l2_count; + cpuinfo_cache_count[cpuinfo_cache_level_3] = l3_count; + cpuinfo_cache_count[cpuinfo_cache_level_4] = l4_count; + cpuinfo_max_cache_size = cpuinfo_compute_max_cache_size(&processors[0]); + + cpuinfo_global_uarch = (struct cpuinfo_uarch_info) { + .uarch = x86_processor.uarch, + .cpuid = x86_processor.cpuid, + .processor_count = processors_count, + .core_count = cores_count, + }; + + cpuinfo_linux_cpu_max = x86_linux_processors_count; + cpuinfo_linux_cpu_to_processor_map = linux_cpu_to_processor_map; + cpuinfo_linux_cpu_to_core_map = linux_cpu_to_core_map; + + __sync_synchronize(); + + cpuinfo_is_initialized = true; + + processors = NULL; + cores = NULL; + clusters = NULL; + packages = NULL; + l1i = l1d = l2 = l3 = l4 = NULL; + linux_cpu_to_processor_map = NULL; + linux_cpu_to_core_map = NULL; + +cleanup: + free(x86_linux_processors); + free(processors); + free(cores); + free(clusters); + free(packages); + free(l1i); + free(l1d); + free(l2); + free(l3); + free(l4); + free(linux_cpu_to_processor_map); + free(linux_cpu_to_core_map); +} diff --git a/3rdparty/cpuinfo/src/x86/mach/init.c b/3rdparty/cpuinfo/src/x86/mach/init.c new file mode 100644 index 000000000..b44d3adf5 --- /dev/null +++ b/3rdparty/cpuinfo/src/x86/mach/init.c @@ -0,0 +1,356 @@ +#include +#include +#include + +#include +#include +#include +#include +#include + + +static inline uint32_t max(uint32_t a, uint32_t b) { + return a > b ? a : b; +} + +static inline uint32_t bit_mask(uint32_t bits) { + return (UINT32_C(1) << bits) - UINT32_C(1); +} + +void cpuinfo_x86_mach_init(void) { + struct cpuinfo_processor* processors = NULL; + struct cpuinfo_core* cores = NULL; + struct cpuinfo_cluster* clusters = NULL; + struct cpuinfo_package* packages = NULL; + struct cpuinfo_cache* l1i = NULL; + struct cpuinfo_cache* l1d = NULL; + struct cpuinfo_cache* l2 = NULL; + struct cpuinfo_cache* l3 = NULL; + struct cpuinfo_cache* l4 = NULL; + + struct cpuinfo_mach_topology mach_topology = cpuinfo_mach_detect_topology(); + processors = calloc(mach_topology.threads, sizeof(struct cpuinfo_processor)); + if (processors == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" logical processors", + mach_topology.threads * sizeof(struct cpuinfo_processor), mach_topology.threads); + goto cleanup; + } + cores = calloc(mach_topology.cores, sizeof(struct cpuinfo_core)); + if (cores == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" cores", + mach_topology.cores * sizeof(struct cpuinfo_core), mach_topology.cores); + goto cleanup; + } + /* On x86 cluster of cores is a physical package */ + clusters = calloc(mach_topology.packages, sizeof(struct cpuinfo_cluster)); + if (clusters == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" core clusters", + mach_topology.packages * sizeof(struct cpuinfo_cluster), mach_topology.packages); + goto cleanup; + } + packages = calloc(mach_topology.packages, sizeof(struct cpuinfo_package)); + if (packages == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" physical packages", + mach_topology.packages * sizeof(struct cpuinfo_package), mach_topology.packages); + goto cleanup; + } + + struct cpuinfo_x86_processor x86_processor; + memset(&x86_processor, 0, sizeof(x86_processor)); + cpuinfo_x86_init_processor(&x86_processor); + char brand_string[48]; + cpuinfo_x86_normalize_brand_string(x86_processor.brand_string, brand_string); + + const uint32_t threads_per_core = mach_topology.threads / mach_topology.cores; + const uint32_t threads_per_package = mach_topology.threads / mach_topology.packages; + const uint32_t cores_per_package = mach_topology.cores / mach_topology.packages; + for (uint32_t i = 0; i < mach_topology.packages; i++) { + clusters[i] = (struct cpuinfo_cluster) { + .processor_start = i * threads_per_package, + .processor_count = threads_per_package, + .core_start = i * cores_per_package, + .core_count = cores_per_package, + .cluster_id = 0, + .package = packages + i, + .vendor = x86_processor.vendor, + .uarch = x86_processor.uarch, + .cpuid = x86_processor.cpuid, + }; + packages[i].processor_start = i * threads_per_package; + packages[i].processor_count = threads_per_package; + packages[i].core_start = i * cores_per_package; + packages[i].core_count = cores_per_package; + packages[i].cluster_start = i; + packages[i].cluster_count = 1; + cpuinfo_x86_format_package_name(x86_processor.vendor, brand_string, packages[i].name); + } + for (uint32_t i = 0; i < mach_topology.cores; i++) { + cores[i] = (struct cpuinfo_core) { + .processor_start = i * threads_per_core, + .processor_count = threads_per_core, + .core_id = i % cores_per_package, + .cluster = clusters + i / cores_per_package, + .package = packages + i / cores_per_package, + .vendor = x86_processor.vendor, + .uarch = x86_processor.uarch, + .cpuid = x86_processor.cpuid, + }; + } + for (uint32_t i = 0; i < mach_topology.threads; i++) { + const uint32_t smt_id = i % threads_per_core; + const uint32_t core_id = i / threads_per_core; + const uint32_t package_id = i / threads_per_package; + + /* Reconstruct APIC IDs from topology components */ + const uint32_t thread_bits_mask = bit_mask(x86_processor.topology.thread_bits_length); + const uint32_t core_bits_mask = bit_mask(x86_processor.topology.core_bits_length); + const uint32_t package_bits_offset = max( + x86_processor.topology.thread_bits_offset + x86_processor.topology.thread_bits_length, + x86_processor.topology.core_bits_offset + x86_processor.topology.core_bits_length); + const uint32_t apic_id = + ((smt_id & thread_bits_mask) << x86_processor.topology.thread_bits_offset) | + ((core_id & core_bits_mask) << x86_processor.topology.core_bits_offset) | + (package_id << package_bits_offset); + cpuinfo_log_debug("reconstructed APIC ID 0x%08"PRIx32" for thread %"PRIu32, apic_id, i); + + processors[i].smt_id = smt_id; + processors[i].core = cores + i / threads_per_core; + processors[i].cluster = clusters + i / threads_per_package; + processors[i].package = packages + i / threads_per_package; + processors[i].apic_id = apic_id; + } + + uint32_t threads_per_l1 = 0, l1_count = 0; + if (x86_processor.cache.l1i.size != 0 || x86_processor.cache.l1d.size != 0) { + threads_per_l1 = mach_topology.threads_per_cache[1]; + if (threads_per_l1 == 0) { + /* Assume that threads on the same core share L1 */ + threads_per_l1 = mach_topology.threads / mach_topology.cores; + cpuinfo_log_warning("Mach kernel did not report number of threads sharing L1 cache; assume %"PRIu32, + threads_per_l1); + } + l1_count = mach_topology.threads / threads_per_l1; + cpuinfo_log_debug("detected %"PRIu32" L1 caches", l1_count); + } + + uint32_t threads_per_l2 = 0, l2_count = 0; + if (x86_processor.cache.l2.size != 0) { + threads_per_l2 = mach_topology.threads_per_cache[2]; + if (threads_per_l2 == 0) { + if (x86_processor.cache.l3.size != 0) { + /* This is not a last-level cache; assume that threads on the same core share L2 */ + threads_per_l2 = mach_topology.threads / mach_topology.cores; + } else { + /* This is a last-level cache; assume that threads on the same package share L2 */ + threads_per_l2 = mach_topology.threads / mach_topology.packages; + } + cpuinfo_log_warning("Mach kernel did not report number of threads sharing L2 cache; assume %"PRIu32, + threads_per_l2); + } + l2_count = mach_topology.threads / threads_per_l2; + cpuinfo_log_debug("detected %"PRIu32" L2 caches", l2_count); + } + + uint32_t threads_per_l3 = 0, l3_count = 0; + if (x86_processor.cache.l3.size != 0) { + threads_per_l3 = mach_topology.threads_per_cache[3]; + if (threads_per_l3 == 0) { + /* + * Assume that threads on the same package share L3. + * However, is it not necessarily the last-level cache (there may be L4 cache as well) + */ + threads_per_l3 = mach_topology.threads / mach_topology.packages; + cpuinfo_log_warning("Mach kernel did not report number of threads sharing L3 cache; assume %"PRIu32, + threads_per_l3); + } + l3_count = mach_topology.threads / threads_per_l3; + cpuinfo_log_debug("detected %"PRIu32" L3 caches", l3_count); + } + + uint32_t threads_per_l4 = 0, l4_count = 0; + if (x86_processor.cache.l4.size != 0) { + threads_per_l4 = mach_topology.threads_per_cache[4]; + if (threads_per_l4 == 0) { + /* + * Assume that all threads share this L4. + * As of now, L4 cache exists only on notebook x86 CPUs, which are single-package, + * but multi-socket systems could have shared L4 (like on IBM POWER8). + */ + threads_per_l4 = mach_topology.threads; + cpuinfo_log_warning("Mach kernel did not report number of threads sharing L4 cache; assume %"PRIu32, + threads_per_l4); + } + l4_count = mach_topology.threads / threads_per_l4; + cpuinfo_log_debug("detected %"PRIu32" L4 caches", l4_count); + } + + if (x86_processor.cache.l1i.size != 0) { + l1i = calloc(l1_count, sizeof(struct cpuinfo_cache)); + if (l1i == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L1I caches", + l1_count * sizeof(struct cpuinfo_cache), l1_count); + return; + } + for (uint32_t c = 0; c < l1_count; c++) { + l1i[c] = (struct cpuinfo_cache) { + .size = x86_processor.cache.l1i.size, + .associativity = x86_processor.cache.l1i.associativity, + .sets = x86_processor.cache.l1i.sets, + .partitions = x86_processor.cache.l1i.partitions, + .line_size = x86_processor.cache.l1i.line_size, + .flags = x86_processor.cache.l1i.flags, + .processor_start = c * threads_per_l1, + .processor_count = threads_per_l1, + }; + } + for (uint32_t t = 0; t < mach_topology.threads; t++) { + processors[t].cache.l1i = &l1i[t / threads_per_l1]; + } + } + + if (x86_processor.cache.l1d.size != 0) { + l1d = calloc(l1_count, sizeof(struct cpuinfo_cache)); + if (l1d == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L1D caches", + l1_count * sizeof(struct cpuinfo_cache), l1_count); + return; + } + for (uint32_t c = 0; c < l1_count; c++) { + l1d[c] = (struct cpuinfo_cache) { + .size = x86_processor.cache.l1d.size, + .associativity = x86_processor.cache.l1d.associativity, + .sets = x86_processor.cache.l1d.sets, + .partitions = x86_processor.cache.l1d.partitions, + .line_size = x86_processor.cache.l1d.line_size, + .flags = x86_processor.cache.l1d.flags, + .processor_start = c * threads_per_l1, + .processor_count = threads_per_l1, + }; + } + for (uint32_t t = 0; t < mach_topology.threads; t++) { + processors[t].cache.l1d = &l1d[t / threads_per_l1]; + } + } + + if (l2_count != 0) { + l2 = calloc(l2_count, sizeof(struct cpuinfo_cache)); + if (l2 == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L2 caches", + l2_count * sizeof(struct cpuinfo_cache), l2_count); + return; + } + for (uint32_t c = 0; c < l2_count; c++) { + l2[c] = (struct cpuinfo_cache) { + .size = x86_processor.cache.l2.size, + .associativity = x86_processor.cache.l2.associativity, + .sets = x86_processor.cache.l2.sets, + .partitions = x86_processor.cache.l2.partitions, + .line_size = x86_processor.cache.l2.line_size, + .flags = x86_processor.cache.l2.flags, + .processor_start = c * threads_per_l2, + .processor_count = threads_per_l2, + }; + } + for (uint32_t t = 0; t < mach_topology.threads; t++) { + processors[t].cache.l2 = &l2[t / threads_per_l2]; + } + } + + if (l3_count != 0) { + l3 = calloc(l3_count, sizeof(struct cpuinfo_cache)); + if (l3 == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L3 caches", + l3_count * sizeof(struct cpuinfo_cache), l3_count); + return; + } + for (uint32_t c = 0; c < l3_count; c++) { + l3[c] = (struct cpuinfo_cache) { + .size = x86_processor.cache.l3.size, + .associativity = x86_processor.cache.l3.associativity, + .sets = x86_processor.cache.l3.sets, + .partitions = x86_processor.cache.l3.partitions, + .line_size = x86_processor.cache.l3.line_size, + .flags = x86_processor.cache.l3.flags, + .processor_start = c * threads_per_l3, + .processor_count = threads_per_l3, + }; + } + for (uint32_t t = 0; t < mach_topology.threads; t++) { + processors[t].cache.l3 = &l3[t / threads_per_l3]; + } + } + + if (l4_count != 0) { + l4 = calloc(l4_count, sizeof(struct cpuinfo_cache)); + if (l4 == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L4 caches", + l4_count * sizeof(struct cpuinfo_cache), l4_count); + return; + } + for (uint32_t c = 0; c < l4_count; c++) { + l4[c] = (struct cpuinfo_cache) { + .size = x86_processor.cache.l4.size, + .associativity = x86_processor.cache.l4.associativity, + .sets = x86_processor.cache.l4.sets, + .partitions = x86_processor.cache.l4.partitions, + .line_size = x86_processor.cache.l4.line_size, + .flags = x86_processor.cache.l4.flags, + .processor_start = c * threads_per_l4, + .processor_count = threads_per_l4, + }; + } + for (uint32_t t = 0; t < mach_topology.threads; t++) { + processors[t].cache.l4 = &l4[t / threads_per_l4]; + } + } + + /* Commit changes */ + cpuinfo_processors = processors; + cpuinfo_cores = cores; + cpuinfo_clusters = clusters; + cpuinfo_packages = packages; + cpuinfo_cache[cpuinfo_cache_level_1i] = l1i; + cpuinfo_cache[cpuinfo_cache_level_1d] = l1d; + cpuinfo_cache[cpuinfo_cache_level_2] = l2; + cpuinfo_cache[cpuinfo_cache_level_3] = l3; + cpuinfo_cache[cpuinfo_cache_level_4] = l4; + + cpuinfo_processors_count = mach_topology.threads; + cpuinfo_cores_count = mach_topology.cores; + cpuinfo_clusters_count = mach_topology.packages; + cpuinfo_packages_count = mach_topology.packages; + cpuinfo_cache_count[cpuinfo_cache_level_1i] = l1_count; + cpuinfo_cache_count[cpuinfo_cache_level_1d] = l1_count; + cpuinfo_cache_count[cpuinfo_cache_level_2] = l2_count; + cpuinfo_cache_count[cpuinfo_cache_level_3] = l3_count; + cpuinfo_cache_count[cpuinfo_cache_level_4] = l4_count; + cpuinfo_max_cache_size = cpuinfo_compute_max_cache_size(&processors[0]); + + cpuinfo_global_uarch = (struct cpuinfo_uarch_info) { + .uarch = x86_processor.uarch, + .cpuid = x86_processor.cpuid, + .processor_count = mach_topology.threads, + .core_count = mach_topology.cores, + }; + + __sync_synchronize(); + + cpuinfo_is_initialized = true; + + processors = NULL; + cores = NULL; + clusters = NULL; + packages = NULL; + l1i = l1d = l2 = l3 = l4 = NULL; + +cleanup: + free(processors); + free(cores); + free(clusters); + free(packages); + free(l1i); + free(l1d); + free(l2); + free(l3); + free(l4); +} diff --git a/3rdparty/cpuinfo/src/x86/mockcpuid.c b/3rdparty/cpuinfo/src/x86/mockcpuid.c new file mode 100644 index 000000000..2631f09ba --- /dev/null +++ b/3rdparty/cpuinfo/src/x86/mockcpuid.c @@ -0,0 +1,70 @@ +#include +#include + +#if !CPUINFO_MOCK + #error This file should be built only in mock mode +#endif + +#include + + +static struct cpuinfo_mock_cpuid* cpuinfo_mock_cpuid_data = NULL; +static uint32_t cpuinfo_mock_cpuid_entries = 0; +static uint32_t cpuinfo_mock_cpuid_leaf4_iteration = 0; + +void CPUINFO_ABI cpuinfo_mock_set_cpuid(struct cpuinfo_mock_cpuid* dump, size_t entries) { + cpuinfo_mock_cpuid_data = dump; + cpuinfo_mock_cpuid_entries = entries; +}; + +void CPUINFO_ABI cpuinfo_mock_get_cpuid(uint32_t eax, uint32_t regs[4]) { + if (eax != 4) { + cpuinfo_mock_cpuid_leaf4_iteration = 0; + } + if (cpuinfo_mock_cpuid_data != NULL && cpuinfo_mock_cpuid_entries != 0) { + if (eax == 4) { + uint32_t skip_entries = cpuinfo_mock_cpuid_leaf4_iteration; + for (uint32_t i = 0; i < cpuinfo_mock_cpuid_entries; i++) { + if (eax == cpuinfo_mock_cpuid_data[i].input_eax) { + if (skip_entries-- == 0) { + regs[0] = cpuinfo_mock_cpuid_data[i].eax; + regs[1] = cpuinfo_mock_cpuid_data[i].ebx; + regs[2] = cpuinfo_mock_cpuid_data[i].ecx; + regs[3] = cpuinfo_mock_cpuid_data[i].edx; + cpuinfo_mock_cpuid_leaf4_iteration++; + return; + } + } + } + } else { + for (uint32_t i = 0; i < cpuinfo_mock_cpuid_entries; i++) { + if (eax == cpuinfo_mock_cpuid_data[i].input_eax) { + regs[0] = cpuinfo_mock_cpuid_data[i].eax; + regs[1] = cpuinfo_mock_cpuid_data[i].ebx; + regs[2] = cpuinfo_mock_cpuid_data[i].ecx; + regs[3] = cpuinfo_mock_cpuid_data[i].edx; + return; + } + } + } + } + regs[0] = regs[1] = regs[2] = regs[3] = 0; +} + +void CPUINFO_ABI cpuinfo_mock_get_cpuidex(uint32_t eax, uint32_t ecx, uint32_t regs[4]) { + cpuinfo_mock_cpuid_leaf4_iteration = 0; + if (cpuinfo_mock_cpuid_data != NULL && cpuinfo_mock_cpuid_entries != 0) { + for (uint32_t i = 0; i < cpuinfo_mock_cpuid_entries; i++) { + if (eax == cpuinfo_mock_cpuid_data[i].input_eax && + ecx == cpuinfo_mock_cpuid_data[i].input_ecx) + { + regs[0] = cpuinfo_mock_cpuid_data[i].eax; + regs[1] = cpuinfo_mock_cpuid_data[i].ebx; + regs[2] = cpuinfo_mock_cpuid_data[i].ecx; + regs[3] = cpuinfo_mock_cpuid_data[i].edx; + return; + } + } + } + regs[0] = regs[1] = regs[2] = regs[3] = 0; +} diff --git a/3rdparty/cpuinfo/src/x86/name.c b/3rdparty/cpuinfo/src/x86/name.c new file mode 100644 index 000000000..957a0d88b --- /dev/null +++ b/3rdparty/cpuinfo/src/x86/name.c @@ -0,0 +1,708 @@ +#include +#include +#include +#include +#include + +#include +#include +#include + + +/* The state of the parser to be preserved between parsing different tokens. */ +struct parser_state { + /* + * Pointer to the start of the previous token if it is "model". + * NULL if previous token is not "model". + */ + char* context_model; + /* + * Pointer to the start of the previous token if it is a single-uppercase-letter token. + * NULL if previous token is anything different. + */ + char* context_upper_letter; + /* + * Pointer to the start of the previous token if it is "Dual". + * NULL if previous token is not "Dual". + */ + char* context_dual; + /* + * Pointer to the start of the previous token if it is "Core", "Dual-Core", "QuadCore", etc. + * NULL if previous token is anything different. + */ + char* context_core; + /* + * Pointer to the start of the previous token if it is "Eng" or "Engineering", etc. + * NULL if previous token is anything different. + */ + char* context_engineering; + /* + * Pointer to the '@' symbol in the brand string (separates frequency specification). + * NULL if there is no '@' symbol. + */ + char* frequency_separator; + /* Indicates whether the brand string (after transformations) contains frequency. */ + bool frequency_token; + /* Indicates whether the processor is of Xeon family (contains "Xeon" substring). */ + bool xeon; + /* Indicates whether the processor model number was already parsed. */ + bool parsed_model_number; + /* Indicates whether the processor is an engineering sample (contains "Engineering Sample" or "Eng Sample" substrings). */ + bool engineering_sample; +}; + +/** @brief Resets information about the previous token. Keeps all other state information. */ +static void reset_context(struct parser_state* state) { + state->context_model = NULL; + state->context_upper_letter = NULL; + state->context_dual = NULL; + state->context_core = NULL; +} + +/** + * @brief Overwrites the supplied string with space characters if it exactly matches the given string. + * @param string The string to be compared against other string, and erased in case of matching. + * @param length The length of the two string to be compared against each other. + * @param target The string to compare against. + * @retval true If the two strings match and the first supplied string was erased (overwritten with space characters). + * @retval false If the two strings are different and the first supplied string remained unchanged. + */ +static inline bool erase_matching(char* string, size_t length, const char* target) { + const bool match = memcmp(string, target, length) == 0; + if (match) { + memset(string, ' ', length); + } + return match; +} + +/** + * @brief Checks if the supplied ASCII character is an uppercase latin letter. + * @param character The character to analyse. + * @retval true If the supplied character is an uppercase latin letter ('A' to 'Z'). + * @retval false If the supplied character is anything different. + */ +static inline bool is_upper_letter(char character) { + return (uint32_t) (character - 'A') <= (uint32_t)('Z' - 'A'); +} + +/** + * @brief Checks if the supplied ASCII character is a digit. + * @param character The character to analyse. + * @retval true If the supplied character is a digit ('0' to '9'). + * @retval false If the supplied character is anything different. + */ +static inline bool is_digit(char character) { + return (uint32_t) (character - '0') < UINT32_C(10); +} + +static inline bool is_zero_number(const char* token_start, const char* token_end) { + for (const char* char_ptr = token_start; char_ptr != token_end; char_ptr++) { + if (*char_ptr != '0') { + return false; + } + } + return true; +} + +static inline bool is_space(const char* token_start, const char* token_end) { + for (const char* char_ptr = token_start; char_ptr != token_end; char_ptr++) { + if (*char_ptr != ' ') { + return false; + } + } + return true; +} + +static inline bool is_number(const char* token_start, const char* token_end) { + for (const char* char_ptr = token_start; char_ptr != token_end; char_ptr++) { + if (!is_digit(*char_ptr)) { + return false; + } + } + return true; +} + +static inline bool is_model_number(const char* token_start, const char* token_end) { + for (const char* char_ptr = token_start + 1; char_ptr < token_end; char_ptr++) { + if (is_digit(char_ptr[-1]) && is_digit(char_ptr[0])) { + return true; + } + } + return false; +} + +static inline bool is_frequency(const char* token_start, const char* token_end) { + const size_t token_length = (size_t) (token_end - token_start); + if (token_length > 3 && token_end[-2] == 'H' && token_end[-1] == 'z') { + switch (token_end[-3]) { + case 'K': + case 'M': + case 'G': + return true; + } + } + return false; +} + +/** + * @warning Input and output tokens can overlap + */ +static inline char* move_token(const char* token_start, const char* token_end, char* output_ptr) { + const size_t token_length = (size_t) (token_end - token_start); + memmove(output_ptr, token_start, token_length); + return output_ptr + token_length; +} + +static bool transform_token(char* token_start, char* token_end, struct parser_state* state) { + const struct parser_state previousState = *state; + reset_context(state); + + size_t token_length = (size_t) (token_end - token_start); + + if (state->frequency_separator != NULL) { + if (token_start > state->frequency_separator) { + if (state->parsed_model_number) { + memset(token_start, ' ', token_length); + } + } + } + + + /* Early AMD and Cyrix processors have "tm" suffix for trademark, e.g. + * "AMD-K6tm w/ multimedia extensions" + * "Cyrix MediaGXtm MMXtm Enhanced" + */ + if (token_length > 2) { + const char context_char = token_end[-3]; + if (is_digit(context_char) || is_upper_letter(context_char)) { + if (erase_matching(token_end - 2, 2, "tm")) { + token_end -= 2; + token_length -= 2; + } + } + } + if (token_length > 4) { + /* Some early AMD CPUs have "AMD-" at the beginning, e.g. + * "AMD-K5(tm) Processor" + * "AMD-K6tm w/ multimedia extensions" + * "AMD-K6(tm) 3D+ Processor" + * "AMD-K6(tm)-III Processor" + */ + if (erase_matching(token_start, 4, "AMD-")) { + token_start += 4; + token_length -= 4; + } + } + switch (token_length) { + case 1: + /* + * On some Intel processors there is a space between the first letter of + * the name and the number after it, e.g. + * "Intel(R) Core(TM) i7 CPU X 990 @ 3.47GHz" + * "Intel(R) Core(TM) CPU Q 820 @ 1.73GHz" + * We want to merge these parts together, in reverse order, i.e. "X 990" -> "990X", "820" -> "820Q" + */ + if (is_upper_letter(token_start[0])) { + state->context_upper_letter = token_start; + return true; + } + break; + case 2: + /* Erase everything after "w/" in "AMD-K6tm w/ multimedia extensions" */ + if (erase_matching(token_start, token_length, "w/")) { + return false; + } + /* + * Intel Xeon processors since Ivy Bridge use versions, e.g. + * "Intel Xeon E3-1230 v2" + * Some processor branch strings report them as "V", others report as "v". + * Normalize the former (upper-case) to the latter (lower-case) version + */ + if (token_start[0] == 'V' && is_digit(token_start[1])) { + token_start[0] = 'v'; + return true; + } + break; + case 3: + /* + * Erase "CPU" in brand string on Intel processors, e.g. + * "Intel(R) Core(TM) i5 CPU 650 @ 3.20GHz" + * "Intel(R) Xeon(R) CPU X3210 @ 2.13GHz" + * "Intel(R) Atom(TM) CPU Z2760 @ 1.80GHz" + */ + if (erase_matching(token_start, token_length, "CPU")) { + return true; + } + /* + * Erase everything after "SOC" on AMD System-on-Chips, e.g. + * "AMD GX-212JC SOC with Radeon(TM) R2E Graphics \0" + */ + if (erase_matching(token_start, token_length, "SOC")) { + return false; + } + /* + * Erase "AMD" in brand string on AMD processors, e.g. + * "AMD Athlon(tm) Processor" + * "AMD Engineering Sample" + * "Quad-Core AMD Opteron(tm) Processor 2344 HE" + */ + if (erase_matching(token_start, token_length, "AMD")) { + return true; + } + /* + * Erase "VIA" in brand string on VIA processors, e.g. + * "VIA C3 Ezra" + * "VIA C7-M Processor 1200MHz" + * "VIA Nano L3050@1800MHz" + */ + if (erase_matching(token_start, token_length, "VIA")) { + return true; + } + /* Erase "IDT" in brand string on early Centaur processors, e.g. "IDT WinChip 2-3D" */ + if (erase_matching(token_start, token_length, "IDT")) { + return true; + } + /* + * Erase everything starting with "MMX" in + * "Cyrix MediaGXtm MMXtm Enhanced" ("tm" suffix is removed by this point) + */ + if (erase_matching(token_start, token_length, "MMX")) { + return false; + } + /* + * Erase everything starting with "APU" on AMD processors, e.g. + * "AMD A10-4600M APU with Radeon(tm) HD Graphics" + * "AMD A10-7850K APU with Radeon(TM) R7 Graphics" + * "AMD A6-6310 APU with AMD Radeon R4 Graphics" + */ + if (erase_matching(token_start, token_length, "APU")) { + return false; + } + /* + * Remember to discard string if it contains "Eng Sample", + * e.g. "Eng Sample, ZD302046W4K43_36/30/20_2/8_A" + */ + if (memcmp(token_start, "Eng", token_length) == 0) { + state->context_engineering = token_start; + } + break; + case 4: + /* Remember to erase "Dual Core" in "AMD Athlon(tm) 64 X2 Dual Core Processor 3800+" */ + if (memcmp(token_start, "Dual", token_length) == 0) { + state->context_dual = token_start; + } + /* Remember if the processor is on Xeon family */ + if (memcmp(token_start, "Xeon", token_length) == 0) { + state->xeon = true; + } + /* Erase "Dual Core" in "AMD Athlon(tm) 64 X2 Dual Core Processor 3800+" */ + if (previousState.context_dual != NULL) { + if (memcmp(token_start, "Core", token_length) == 0) { + memset(previousState.context_dual, ' ', (size_t) (token_end - previousState.context_dual)); + state->context_core = token_end; + return true; + } + } + break; + case 5: + /* + * Erase "Intel" in brand string on Intel processors, e.g. + * "Intel(R) Xeon(R) CPU X3210 @ 2.13GHz" + * "Intel(R) Atom(TM) CPU D2700 @ 2.13GHz" + * "Genuine Intel(R) processor 800MHz" + */ + if (erase_matching(token_start, token_length, "Intel")) { + return true; + } + /* + * Erase "Cyrix" in brand string on Cyrix processors, e.g. + * "Cyrix MediaGXtm MMXtm Enhanced" + */ + if (erase_matching(token_start, token_length, "Cyrix")) { + return true; + } + /* + * Erase everything following "Geode" (but not "Geode" token itself) on Geode processors, e.g. + * "Geode(TM) Integrated Processor by AMD PCS" + * "Geode(TM) Integrated Processor by National Semi" + */ + if (memcmp(token_start, "Geode", token_length) == 0) { + return false; + } + /* Remember to erase "model unknown" in "AMD Processor model unknown" */ + if (memcmp(token_start, "model", token_length) == 0) { + state->context_model = token_start; + return true; + } + break; + case 6: + /* + * Erase everything starting with "Radeon" or "RADEON" on AMD APUs, e.g. + * "A8-7670K Radeon R7, 10 Compute Cores 4C+6G" + * "FX-8800P Radeon R7, 12 Compute Cores 4C+8G" + * "A12-9800 RADEON R7, 12 COMPUTE CORES 4C+8G" + * "A9-9410 RADEON R5, 5 COMPUTE CORES 2C+3G" + */ + if (erase_matching(token_start, token_length, "Radeon") || erase_matching(token_start, token_length, "RADEON")) { + return false; + } + /* + * Erase "Mobile" when it is not part of the processor name, + * e.g. in "AMD Turion(tm) X2 Ultra Dual-Core Mobile ZM-82" + */ + if (previousState.context_core != NULL) { + if (erase_matching(token_start, token_length, "Mobile")) { + return true; + } + } + /* Erase "family" in "Intel(R) Pentium(R) III CPU family 1266MHz" */ + if (erase_matching(token_start, token_length, "family")) { + return true; + } + /* Discard the string if it contains "Engineering Sample" */ + if (previousState.context_engineering != NULL) { + if (memcmp(token_start, "Sample", token_length) == 0) { + state->engineering_sample = true; + return false; + } + } + break; + case 7: + /* + * Erase "Geniune" in brand string on Intel engineering samples, e.g. + * "Genuine Intel(R) processor 800MHz" + * "Genuine Intel(R) CPU @ 2.13GHz" + * "Genuine Intel(R) CPU 0000 @ 1.73GHz" + */ + if (erase_matching(token_start, token_length, "Genuine")) { + return true; + } + /* + * Erase "12-core" in brand string on AMD Threadripper, e.g. + * "AMD Ryzen Threadripper 1920X 12-Core Processor" + */ + if (erase_matching(token_start, token_length, "12-Core")) { + return true; + } + /* + * Erase "16-core" in brand string on AMD Threadripper, e.g. + * "AMD Ryzen Threadripper 1950X 16-Core Processor" + */ + if (erase_matching(token_start, token_length, "16-Core")) { + return true; + } + /* Erase "model unknown" in "AMD Processor model unknown" */ + if (previousState.context_model != NULL) { + if (memcmp(token_start, "unknown", token_length) == 0) { + memset(previousState.context_model, ' ', token_end - previousState.context_model); + return true; + } + } + /* + * Discard the string if it contains "Eng Sample:" or "Eng Sample," e.g. + * "AMD Eng Sample, ZD302046W4K43_36/30/20_2/8_A" + * "AMD Eng Sample: 2D3151A2M88E4_35/31_N" + */ + if (previousState.context_engineering != NULL) { + if (memcmp(token_start, "Sample,", token_length) == 0 || memcmp(token_start, "Sample:", token_length) == 0) { + state->engineering_sample = true; + return false; + } + } + break; + case 8: + /* Erase "QuadCore" in "VIA QuadCore L4700 @ 1.2+ GHz" */ + if (erase_matching(token_start, token_length, "QuadCore")) { + state->context_core = token_end; + return true; + } + /* Erase "Six-Core" in "AMD FX(tm)-6100 Six-Core Processor" */ + if (erase_matching(token_start, token_length, "Six-Core")) { + state->context_core = token_end; + return true; + } + break; + case 9: + if (erase_matching(token_start, token_length, "Processor")) { + return true; + } + if (erase_matching(token_start, token_length, "processor")) { + return true; + } + /* Erase "Dual-Core" in "Pentium(R) Dual-Core CPU T4200 @ 2.00GHz" */ + if (erase_matching(token_start, token_length, "Dual-Core")) { + state->context_core = token_end; + return true; + } + /* Erase "Quad-Core" in AMD processors, e.g. + * "Quad-Core AMD Opteron(tm) Processor 2347 HE" + * "AMD FX(tm)-4170 Quad-Core Processor" + */ + if (erase_matching(token_start, token_length, "Quad-Core")) { + state->context_core = token_end; + return true; + } + /* Erase "Transmeta" in brand string on Transmeta processors, e.g. + * "Transmeta(tm) Crusoe(tm) Processor TM5800" + * "Transmeta Efficeon(tm) Processor TM8000" + */ + if (erase_matching(token_start, token_length, "Transmeta")) { + return true; + } + break; + case 10: + /* + * Erase "Eight-Core" in AMD processors, e.g. + * "AMD FX(tm)-8150 Eight-Core Processor" + */ + if (erase_matching(token_start, token_length, "Eight-Core")) { + state->context_core = token_end; + return true; + } + break; + case 11: + /* + * Erase "Triple-Core" in AMD processors, e.g. + * "AMD Phenom(tm) II N830 Triple-Core Processor" + * "AMD Phenom(tm) 8650 Triple-Core Processor" + */ + if (erase_matching(token_start, token_length, "Triple-Core")) { + state->context_core = token_end; + return true; + } + /* + * Remember to discard string if it contains "Engineering Sample", + * e.g. "AMD Engineering Sample" + */ + if (memcmp(token_start, "Engineering", token_length) == 0) { + state->context_engineering = token_start; + return true; + } + break; + } + if (is_zero_number(token_start, token_end)) { + memset(token_start, ' ', token_length); + return true; + } + /* On some Intel processors the last letter of the name is put before the number, + * and an additional space it added, e.g. + * "Intel(R) Core(TM) i7 CPU X 990 @ 3.47GHz" + * "Intel(R) Core(TM) CPU Q 820 @ 1.73GHz" + * "Intel(R) Core(TM) i5 CPU M 480 @ 2.67GHz" + * We fix this issue, i.e. "X 990" -> "990X", "Q 820" -> "820Q" + */ + if (previousState.context_upper_letter != 0) { + /* A single letter token followed by 2-to-5 digit letter is merged together */ + switch (token_length) { + case 2: + case 3: + case 4: + case 5: + if (is_number(token_start, token_end)) { + /* Load the previous single-letter token */ + const char letter = *previousState.context_upper_letter; + /* Erase the previous single-letter token */ + *previousState.context_upper_letter = ' '; + /* Move the current token one position to the left */ + move_token(token_start, token_end, token_start - 1); + token_start -= 1; + /* + * Add the letter on the end + * Note: accessing token_start[-1] is safe because this is not the first token + */ + token_end[-1] = letter; + } + } + } + if (state->frequency_separator != NULL) { + if (is_model_number(token_start, token_end)) { + state->parsed_model_number = true; + } + } + if (is_frequency(token_start, token_end)) { + state->frequency_token = true; + } + return true; +} + +uint32_t cpuinfo_x86_normalize_brand_string( + const char raw_name[48], + char normalized_name[48]) +{ + normalized_name[0] = '\0'; + char name[48]; + memcpy(name, raw_name, sizeof(name)); + + /* + * First find the end of the string + * Start search from the end because some brand strings contain zeroes in the middle + */ + char* name_end = &name[48]; + while (name_end[-1] == '\0') { + /* + * Adject name_end by 1 position and check that we didn't reach the start of the brand string. + * This is possible if all characters are zero. + */ + if (--name_end == name) { + /* All characters are zeros */ + return 0; + } + } + + struct parser_state parser_state = { 0 }; + + /* Now unify all whitespace characters: replace tabs and '\0' with spaces */ + { + bool inside_parentheses = false; + for (char* char_ptr = name; char_ptr != name_end; char_ptr++) { + switch (*char_ptr) { + case '(': + inside_parentheses = true; + *char_ptr = ' '; + break; + case ')': + inside_parentheses = false; + *char_ptr = ' '; + break; + case '@': + parser_state.frequency_separator = char_ptr; + case '\0': + case '\t': + *char_ptr = ' '; + break; + default: + if (inside_parentheses) { + *char_ptr = ' '; + } + } + } + } + + /* Iterate through all tokens and erase redundant parts */ + { + bool is_token = false; + char* token_start; + for (char* char_ptr = name; char_ptr != name_end; char_ptr++) { + if (*char_ptr == ' ') { + if (is_token) { + is_token = false; + if (!transform_token(token_start, char_ptr, &parser_state)) { + name_end = char_ptr; + break; + } + } + } else { + if (!is_token) { + is_token = true; + token_start = char_ptr; + } + } + } + if (is_token) { + transform_token(token_start, name_end, &parser_state); + } + } + + /* If this is an engineering sample, return empty string */ + if (parser_state.engineering_sample) { + return 0; + } + + /* Check if there is some string before the frequency separator. */ + if (parser_state.frequency_separator != NULL) { + if (is_space(name, parser_state.frequency_separator)) { + /* If only frequency is available, return empty string */ + return 0; + } + } + + /* Compact tokens: collapse multiple spacing into one */ + { + char* output_ptr = normalized_name; + char* token_start; + bool is_token = false; + bool previous_token_ends_with_dash = true; + bool current_token_starts_with_dash = false; + uint32_t token_count = 1; + for (char* char_ptr = name; char_ptr != name_end; char_ptr++) { + const char character = *char_ptr; + if (character == ' ') { + if (is_token) { + is_token = false; + if (!current_token_starts_with_dash && !previous_token_ends_with_dash) { + token_count += 1; + *output_ptr++ = ' '; + } + output_ptr = move_token(token_start, char_ptr, output_ptr); + /* Note: char_ptr[-1] exists because there is a token before this space */ + previous_token_ends_with_dash = (char_ptr[-1] == '-'); + } + } else { + if (!is_token) { + is_token = true; + token_start = char_ptr; + current_token_starts_with_dash = (character == '-'); + } + } + } + if (is_token) { + if (!current_token_starts_with_dash && !previous_token_ends_with_dash) { + token_count += 1; + *output_ptr++ = ' '; + } + output_ptr = move_token(token_start, name_end, output_ptr); + } + if (parser_state.frequency_token && token_count <= 1) { + /* The only remaining part is frequency */ + normalized_name[0] = '\0'; + return 0; + } + if (output_ptr < &normalized_name[48]) { + *output_ptr = '\0'; + } else { + normalized_name[47] = '\0'; + } + return (uint32_t) (output_ptr - normalized_name); + } +} + +static const char* vendor_string_map[] = { + [cpuinfo_vendor_intel] = "Intel", + [cpuinfo_vendor_amd] = "AMD", + [cpuinfo_vendor_via] = "VIA", + [cpuinfo_vendor_hygon] = "Hygon", + [cpuinfo_vendor_rdc] = "RDC", + [cpuinfo_vendor_dmp] = "DM&P", + [cpuinfo_vendor_transmeta] = "Transmeta", + [cpuinfo_vendor_cyrix] = "Cyrix", + [cpuinfo_vendor_rise] = "Rise", + [cpuinfo_vendor_nsc] = "NSC", + [cpuinfo_vendor_sis] = "SiS", + [cpuinfo_vendor_nexgen] = "NexGen", + [cpuinfo_vendor_umc] = "UMC", +}; + +uint32_t cpuinfo_x86_format_package_name( + enum cpuinfo_vendor vendor, + const char normalized_brand_string[48], + char package_name[CPUINFO_PACKAGE_NAME_MAX]) +{ + if (normalized_brand_string[0] == '\0') { + package_name[0] = '\0'; + return 0; + } + + const char* vendor_string = NULL; + if ((uint32_t) vendor < (uint32_t) CPUINFO_COUNT_OF(vendor_string_map)) { + vendor_string = vendor_string_map[(uint32_t) vendor]; + } + if (vendor_string == NULL) { + strncpy(package_name, normalized_brand_string, CPUINFO_PACKAGE_NAME_MAX); + package_name[CPUINFO_PACKAGE_NAME_MAX - 1] = '\0'; + return 0; + } else { + snprintf(package_name, CPUINFO_PACKAGE_NAME_MAX, + "%s %s", vendor_string, normalized_brand_string); + return (uint32_t) strlen(vendor_string) + 1; + } +} diff --git a/3rdparty/cpuinfo/src/x86/topology.c b/3rdparty/cpuinfo/src/x86/topology.c new file mode 100644 index 000000000..0e83d4683 --- /dev/null +++ b/3rdparty/cpuinfo/src/x86/topology.c @@ -0,0 +1,127 @@ +#include +#include + +#include +#include +#include +#include +#include + + +enum topology_type { + topology_type_invalid = 0, + topology_type_smt = 1, + topology_type_core = 2, +}; + +void cpuinfo_x86_detect_topology( + uint32_t max_base_index, + uint32_t max_extended_index, + struct cpuid_regs leaf1, + struct cpuinfo_x86_topology* topology) +{ + /* + * HTT: indicates multi-core/hyper-threading support on this core. + * - Intel, AMD: edx[bit 28] in basic info. + */ + const bool htt = !!(leaf1.edx & UINT32_C(0x10000000)); + + uint32_t apic_id = 0; + if (htt) { + apic_id = leaf1.ebx >> 24; + bool amd_cmp_legacy = false; + if (max_extended_index >= UINT32_C(0x80000001)) { + const struct cpuid_regs leaf0x80000001 = cpuid(UINT32_C(0x80000001)); + /* + * CmpLegacy: core multi-processing legacy mode. + * - AMD: ecx[bit 1] in extended info (reserved bit on Intel CPUs). + */ + amd_cmp_legacy = !!(leaf0x80000001.ecx & UINT32_C(0x00000002)); + } + if (amd_cmp_legacy) { + if (max_extended_index >= UINT32_C(0x80000008)) { + const struct cpuid_regs leaf0x80000008 = cpuid(UINT32_C(0x80000008)); + /* + * NC: number of physical cores - 1. The number of cores in the processor is NC+1. + * - AMD: ecx[bits 0-7] in leaf 0x80000008 (reserved zero bits on Intel CPUs). + */ + const uint32_t cores_per_processor = 1 + (leaf0x80000008.ecx & UINT32_C(0x000000FF)); + topology->core_bits_length = bit_length(cores_per_processor); + cpuinfo_log_debug("HTT: APIC ID = %08"PRIx32", cores per processor = %"PRIu32, apic_id, cores_per_processor); + } else { + /* + * LogicalProcessorCount: the number of cores per processor. + * - AMD: ebx[bits 16-23] in basic info (different interpretation on Intel CPUs). + */ + const uint32_t cores_per_processor = (leaf1.ebx >> 16) & UINT32_C(0x000000FF); + if (cores_per_processor != 0) { + topology->core_bits_length = bit_length(cores_per_processor); + } + cpuinfo_log_debug("HTT: APIC ID = %08"PRIx32", cores per processor = %"PRIu32, apic_id, cores_per_processor); + } + } else { + /* + * Maximum number of addressable IDs for logical processors in this physical package. + * - Intel: ebx[bits 16-23] in basic info (different interpretation on AMD CPUs). + */ + const uint32_t logical_processors = (leaf1.ebx >> 16) & UINT32_C(0x000000FF); + if (logical_processors != 0) { + const uint32_t log2_max_logical_processors = bit_length(logical_processors); + const uint32_t log2_max_threads_per_core = log2_max_logical_processors - topology->core_bits_length; + topology->core_bits_offset = log2_max_threads_per_core; + topology->thread_bits_length = log2_max_threads_per_core; + } + cpuinfo_log_debug("HTT: APIC ID = %08"PRIx32", logical processors = %"PRIu32, apic_id, logical_processors); + } + } + + /* + * x2APIC: indicated support for x2APIC feature. + * - Intel: ecx[bit 21] in basic info (reserved bit on AMD CPUs). + */ + const bool x2apic = !!(leaf1.ecx & UINT32_C(0x00200000)); + if (x2apic && (max_base_index >= UINT32_C(0xB))) { + uint32_t level = 0; + uint32_t type; + uint32_t total_shift = 0; + topology->thread_bits_offset = topology->thread_bits_length = 0; + topology->core_bits_offset = topology->core_bits_length = 0; + do { + const struct cpuid_regs leafB = cpuidex(UINT32_C(0xB), level); + type = (leafB.ecx >> 8) & UINT32_C(0x000000FF); + const uint32_t level_shift = leafB.eax & UINT32_C(0x0000001F); + const uint32_t x2apic_id = leafB.edx; + apic_id = x2apic_id; + switch (type) { + case topology_type_invalid: + break; + case topology_type_smt: + cpuinfo_log_debug("x2 level %"PRIu32": APIC ID = %08"PRIx32", " + "type SMT, shift %"PRIu32", total shift %"PRIu32, + level, apic_id, level_shift, total_shift); + topology->thread_bits_offset = total_shift; + topology->thread_bits_length = level_shift; + break; + case topology_type_core: + cpuinfo_log_debug("x2 level %"PRIu32": APIC ID = %08"PRIx32", " + "type core, shift %"PRIu32", total shift %"PRIu32, + level, apic_id, level_shift, total_shift); + topology->core_bits_offset = total_shift; + topology->core_bits_length = level_shift; + break; + default: + cpuinfo_log_warning("unexpected topology type %"PRIu32" (offset %"PRIu32", length %"PRIu32") " + "reported in leaf 0x0000000B is ignored", type, total_shift, level_shift); + break; + } + total_shift += level_shift; + level += 1; + } while (type != 0); + cpuinfo_log_debug("x2APIC ID 0x%08"PRIx32", " + "SMT offset %"PRIu32" length %"PRIu32", core offset %"PRIu32" length %"PRIu32, apic_id, + topology->thread_bits_offset, topology->thread_bits_length, + topology->core_bits_offset, topology->core_bits_length); + } + + topology->apic_id = apic_id; +} diff --git a/3rdparty/cpuinfo/src/x86/uarch.c b/3rdparty/cpuinfo/src/x86/uarch.c new file mode 100644 index 000000000..370549942 --- /dev/null +++ b/3rdparty/cpuinfo/src/x86/uarch.c @@ -0,0 +1,241 @@ +#include + +#include +#include + + +enum cpuinfo_uarch cpuinfo_x86_decode_uarch( + enum cpuinfo_vendor vendor, + const struct cpuinfo_x86_model_info* model_info) +{ + switch (vendor) { + case cpuinfo_vendor_intel: + switch (model_info->family) { +#if CPUINFO_ARCH_X86 + case 0x05: + switch (model_info->model) { + case 0x01: // Pentium (60, 66) + case 0x02: // Pentium (75, 90, 100, 120, 133, 150, 166, 200) + case 0x03: // Pentium OverDrive for Intel486-based systems + case 0x04: // Pentium MMX + return cpuinfo_uarch_p5; + case 0x09: + return cpuinfo_uarch_quark; + } + break; +#endif /* CPUINFO_ARCH_X86 */ + case 0x06: + switch (model_info->model) { + /* Mainstream cores */ +#if CPUINFO_ARCH_X86 + case 0x01: // Pentium Pro + case 0x03: // Pentium II (Klamath) and Pentium II Overdrive + case 0x05: // Pentium II (Deschutes, Tonga), Pentium II Celeron (Covington), Pentium II Xeon (Drake) + case 0x06: // Pentium II (Dixon), Pentium II Celeron (Mendocino) + case 0x07: // Pentium III (Katmai), Pentium III Xeon (Tanner) + case 0x08: // Pentium III (Coppermine), Pentium II Celeron (Coppermine-128), Pentium III Xeon (Cascades) + case 0x0A: // Pentium III Xeon (Cascades-2MB) + case 0x0B: // Pentium III (Tualatin), Pentium III Celeron (Tualatin-256) + return cpuinfo_uarch_p6; + case 0x09: // Pentium M (Banias), Pentium M Celeron (Banias-0, Banias-512) + case 0x0D: // Pentium M (Dothan), Pentium M Celeron (Dothan-512, Dothan-1024) + case 0x15: // Intel 80579 (Tolapai) + return cpuinfo_uarch_dothan; + case 0x0E: // Core Solo/Duo (Yonah), Pentium Dual-Core T2xxx (Yonah), Celeron M (Yonah-512, Yonah-1024), Dual-Core Xeon (Sossaman) + return cpuinfo_uarch_yonah; +#endif /* CPUINFO_ARCH_X86 */ + case 0x0F: // Core 2 Duo (Conroe, Conroe-2M, Merom), Core 2 Quad (Tigerton), Xeon (Woodcrest, Clovertown, Kentsfield) + case 0x16: // Celeron (Conroe-L, Merom-L), Core 2 Duo (Merom) + return cpuinfo_uarch_conroe; + case 0x17: // Core 2 Duo (Penryn-3M), Core 2 Quad (Yorkfield), Core 2 Extreme (Yorkfield), Xeon (Harpertown), Pentium Dual-Core (Penryn) + case 0x1D: // Xeon (Dunnington) + return cpuinfo_uarch_penryn; + case 0x1A: // Core iX (Bloomfield), Xeon (Gainestown) + case 0x1E: // Core iX (Lynnfield, Clarksfield) + case 0x1F: // Core iX (Havendale) + case 0x2E: // Xeon (Beckton) + case 0x25: // Core iX (Clarkdale) + case 0x2C: // Core iX (Gulftown), Xeon (Gulftown) + case 0x2F: // Xeon (Eagleton) + return cpuinfo_uarch_nehalem; + case 0x2A: // Core iX (Sandy Bridge) + case 0x2D: // Core iX (Sandy Bridge-E), Xeon (Sandy Bridge EP/EX) + return cpuinfo_uarch_sandy_bridge; + case 0x3A: // Core iX (Ivy Bridge) + case 0x3E: // Ivy Bridge-E + return cpuinfo_uarch_ivy_bridge; + case 0x3C: + case 0x3F: // Haswell-E + case 0x45: // Haswell ULT + case 0x46: // Haswell with eDRAM + return cpuinfo_uarch_haswell; + case 0x3D: // Broadwell-U + case 0x47: // Broadwell-H + case 0x4F: // Broadwell-E + case 0x56: // Broadwell-DE + return cpuinfo_uarch_broadwell; + case 0x4E: // Sky Lake Client Y/U + case 0x55: // Sky/Cascade/Cooper Lake Server + case 0x5E: // Sky Lake Client DT/H/S + case 0x8E: // Kaby/Whiskey/Amber/Comet Lake Y/U + case 0x9E: // Kaby/Coffee Lake DT/H/S + case 0xA5: // Comet Lake H/S + case 0xA6: // Comet Lake U/Y + return cpuinfo_uarch_sky_lake; + case 0x66: // Cannon Lake (Core i3-8121U) + return cpuinfo_uarch_palm_cove; + case 0x6A: // Ice Lake-DE + case 0x6C: // Ice Lake-SP + case 0x7D: // Ice Lake-Y + case 0x7E: // Ice Lake-U + return cpuinfo_uarch_sunny_cove; + + /* Low-power cores */ + case 0x1C: // Diamondville, Silverthorne, Pineview + case 0x26: // Tunnel Creek + return cpuinfo_uarch_bonnell; + case 0x27: // Medfield + case 0x35: // Cloverview + case 0x36: // Cedarview, Centerton + return cpuinfo_uarch_saltwell; + case 0x37: // Bay Trail + case 0x4A: // Merrifield + case 0x4D: // Avoton, Rangeley + case 0x5A: // Moorefield + case 0x5D: // SoFIA + return cpuinfo_uarch_silvermont; + case 0x4C: // Braswell, Cherry Trail + case 0x75: // Spreadtrum SC9853I-IA + return cpuinfo_uarch_airmont; + case 0x5C: // Apollo Lake + case 0x5F: // Denverton + return cpuinfo_uarch_goldmont; + case 0x7A: // Gemini Lake + return cpuinfo_uarch_goldmont_plus; + + /* Knights-series cores */ + case 0x57: + return cpuinfo_uarch_knights_landing; + case 0x85: + return cpuinfo_uarch_knights_mill; + } + break; + case 0x0F: + switch (model_info->model) { + case 0x00: // Pentium 4 Xeon (Foster) + case 0x01: // Pentium 4 Celeron (Willamette-128), Pentium 4 Xeon (Foster, Foster MP) + case 0x02: // Pentium 4 (Northwood), Pentium 4 EE (Gallatin), Pentium 4 Celeron (Northwood-128, Northwood-256), Pentium 4 Xeon (Gallatin DP, Prestonia) + return cpuinfo_uarch_willamette; + break; + case 0x03: // Pentium 4 (Prescott), Pentium 4 Xeon (Nocona) + case 0x04: // Pentium 4 (Prescott-2M), Pentium 4 EE (Prescott-2M), Pentium D (Smithfield), Celeron D (Prescott-256), Pentium 4 Xeon (Cranford, Irwindale, Paxville) + case 0x06: // Pentium 4 (Cedar Mill), Pentium D EE (Presler), Celeron D (Cedar Mill), Pentium 4 Xeon (Dempsey, Tulsa) + return cpuinfo_uarch_prescott; + } + break; + } + break; + case cpuinfo_vendor_amd: + switch (model_info->family) { +#if CPUINFO_ARCH_X86 + case 0x5: + switch (model_info->model) { + case 0x00: + case 0x01: + case 0x02: + return cpuinfo_uarch_k5; + case 0x06: + case 0x07: + case 0x08: + case 0x0D: + return cpuinfo_uarch_k6; + case 0x0A: + return cpuinfo_uarch_geode; + } + break; + case 0x6: + return cpuinfo_uarch_k7; +#endif /* CPUINFO_ARCH_X86 */ + case 0xF: // Opteron, Athlon 64, Sempron + case 0x11: // Turion + return cpuinfo_uarch_k8; + case 0x10: // Opteron, Phenom, Athlon, Sempron + case 0x12: // Llano APU + return cpuinfo_uarch_k10; + case 0x14: + return cpuinfo_uarch_bobcat; + case 0x15: + switch (model_info->model) { + case 0x00: // Engineering samples + case 0x01: // Zambezi, Interlagos + return cpuinfo_uarch_bulldozer; + case 0x02: // Vishera + case 0x10: // Trinity + case 0x13: // Richland + return cpuinfo_uarch_piledriver; + case 0x38: // Godavari + case 0x30: // Kaveri + return cpuinfo_uarch_steamroller; + case 0x60: // Carrizo + case 0x65: // Bristol Ridge + case 0x70: // Stoney Ridge + return cpuinfo_uarch_excavator; + default: + switch (model_info->extended_model) { + case 0x0: + return cpuinfo_uarch_bulldozer; + case 0x1: // No L3 cache + case 0x2: // With L3 cache + return cpuinfo_uarch_piledriver; + case 0x3: // With L3 cache + case 0x4: // No L3 cache + return cpuinfo_uarch_steamroller; + } + break; + } + break; + case 0x16: + if (model_info->model >= 0x03) { + return cpuinfo_uarch_puma; + } else { + return cpuinfo_uarch_jaguar; + } + case 0x17: + switch (model_info->model) { + case 0x01: // 14 nm Naples, Whitehaven, Summit Ridge, Snowy Owl + case 0x08: // 12 nm Pinnacle Ridge + case 0x11: // 14 nm Raven Ridge, Great Horned Owl + case 0x18: // 12 nm Picasso + return cpuinfo_uarch_zen; + case 0x31: // Rome, Castle Peak + case 0x60: // Renoir + case 0x68: // Lucienne + case 0x71: // Matisse + case 0x90: // Van Gogh + case 0x98: // Mero + return cpuinfo_uarch_zen2; + } + break; + case 0x19: + switch (model_info->model) { + case 0x01: // Genesis + case 0x21: // Vermeer + case 0x30: // Badami, Trento + case 0x40: // Rembrandt + case 0x50: // Cezanne + return cpuinfo_uarch_zen3; + } + break; + } + break; + case cpuinfo_vendor_hygon: + switch (model_info->family) { + case 0x00: + return cpuinfo_uarch_dhyana; + } + break; + default: + break; + } + return cpuinfo_uarch_unknown; +} diff --git a/3rdparty/cpuinfo/src/x86/vendor.c b/3rdparty/cpuinfo/src/x86/vendor.c new file mode 100644 index 000000000..bad50fa95 --- /dev/null +++ b/3rdparty/cpuinfo/src/x86/vendor.c @@ -0,0 +1,189 @@ +#include + +#include +#include + + +/* Intel vendor string: "GenuineIntel" */ +#define Genu UINT32_C(0x756E6547) +#define ineI UINT32_C(0x49656E69) +#define ntel UINT32_C(0x6C65746E) + +/* AMD vendor strings: "AuthenticAMD", "AMDisbetter!", "AMD ISBETTER" */ +#define Auth UINT32_C(0x68747541) +#define enti UINT32_C(0x69746E65) +#define cAMD UINT32_C(0x444D4163) +#define AMDi UINT32_C(0x69444D41) +#define sbet UINT32_C(0x74656273) +#define ter UINT32_C(0x21726574) +#define AMD UINT32_C(0x20444D41) +#define ISBE UINT32_C(0x45425349) +#define TTER UINT32_C(0x52455454) + +/* VIA (Centaur) vendor strings: "CentaurHauls", "VIA VIA VIA " */ +#define Cent UINT32_C(0x746E6543) +#define aurH UINT32_C(0x48727561) +#define auls UINT32_C(0x736C7561) +#define VIA UINT32_C(0x20414956) + +/* Hygon vendor string: "HygonGenuine" */ +#define Hygo UINT32_C(0x6F677948) +#define nGen UINT32_C(0x6E65476E) +#define uine UINT32_C(0x656E6975) + +/* Transmeta vendor strings: "GenuineTMx86", "TransmetaCPU" */ +#define ineT UINT32_C(0x54656E69) +#define Mx86 UINT32_C(0x3638784D) +#define Tran UINT32_C(0x6E617254) +#define smet UINT32_C(0x74656D73) +#define aCPU UINT32_C(0x55504361) + +/* Cyrix vendor string: "CyrixInstead" */ +#define Cyri UINT32_C(0x69727943) +#define xIns UINT32_C(0x736E4978) +#define tead UINT32_C(0x64616574) + +/* Rise vendor string: "RiseRiseRise" */ +#define Rise UINT32_C(0x65736952) + +/* NSC vendor string: "Geode by NSC" */ +#define Geod UINT32_C(0x646F6547) +#define e_by UINT32_C(0x79622065) +#define NSC UINT32_C(0x43534E20) + +/* SiS vendor string: "SiS SiS SiS " */ +#define SiS UINT32_C(0x20536953) + +/* NexGen vendor string: "NexGenDriven" */ +#define NexG UINT32_C(0x4778654E) +#define enDr UINT32_C(0x72446E65) +#define iven UINT32_C(0x6E657669) + +/* UMC vendor string: "UMC UMC UMC " */ +#define UMC UINT32_C(0x20434D55) + +/* RDC vendor string: "Genuine RDC" */ +#define ine UINT32_C(0x20656E69) +#define RDC UINT32_C(0x43445220) + +/* D&MP vendor string: "Vortex86 SoC" */ +#define Vort UINT32_C(0x74726F56) +#define ex86 UINT32_C(0x36387865) +#define SoC UINT32_C(0x436F5320) + + +enum cpuinfo_vendor cpuinfo_x86_decode_vendor(uint32_t ebx, uint32_t ecx, uint32_t edx) { + switch (ebx) { + case Genu: + switch (edx) { + case ineI: + if (ecx == ntel) { + /* "GenuineIntel" */ + return cpuinfo_vendor_intel; + } + break; +#if CPUINFO_ARCH_X86 + case ineT: + if (ecx == Mx86) { + /* "GenuineTMx86" */ + return cpuinfo_vendor_transmeta; + } + break; + case ine: + if (ecx == RDC) { + /* "Genuine RDC" */ + return cpuinfo_vendor_rdc; + } + break; +#endif + } + break; + case Auth: + if (edx == enti && ecx == cAMD) { + /* "AuthenticAMD" */ + return cpuinfo_vendor_amd; + } + break; + case Cent: + if (edx == aurH && ecx == auls) { + /* "CentaurHauls" */ + return cpuinfo_vendor_via; + } + break; + case Hygo: + if (edx == nGen && ecx == uine) { + /* "HygonGenuine" */ + return cpuinfo_vendor_hygon; + } + break; +#if CPUINFO_ARCH_X86 + case AMDi: + if (edx == sbet && ecx == ter) { + /* "AMDisbetter!" */ + return cpuinfo_vendor_amd; + } + break; + case AMD: + if (edx == ISBE && ecx == TTER) { + /* "AMD ISBETTER" */ + return cpuinfo_vendor_amd; + } + break; + case VIA: + if (edx == VIA && ecx == VIA) { + /* "VIA VIA VIA " */ + return cpuinfo_vendor_via; + } + break; + case Tran: + if (edx == smet && ecx == aCPU) { + /* "TransmetaCPU" */ + return cpuinfo_vendor_transmeta; + } + break; + case Cyri: + if (edx == xIns && ecx == tead) { + /* "CyrixInstead" */ + return cpuinfo_vendor_cyrix; + } + break; + case Rise: + if (edx == Rise && ecx == Rise) { + /* "RiseRiseRise" */ + return cpuinfo_vendor_rise; + } + break; + case Geod: + if (edx == e_by && ecx == NSC) { + /* "Geode by NSC" */ + return cpuinfo_vendor_nsc; + } + break; + case SiS: + if (edx == SiS && ecx == SiS) { + /* "SiS SiS SiS " */ + return cpuinfo_vendor_sis; + } + break; + case NexG: + if (edx == enDr && ecx == iven) { + /* "NexGenDriven" */ + return cpuinfo_vendor_nexgen; + } + break; + case UMC: + if (edx == UMC && ecx == UMC) { + /* "UMC UMC UMC " */ + return cpuinfo_vendor_umc; + } + break; + case Vort: + if (edx == ex86 && ecx == SoC) { + /* "Vortex86 SoC" */ + return cpuinfo_vendor_dmp; + } + break; +#endif + } + return cpuinfo_vendor_unknown; +} diff --git a/3rdparty/cpuinfo/src/x86/windows/api.h b/3rdparty/cpuinfo/src/x86/windows/api.h new file mode 100644 index 000000000..33d917e0d --- /dev/null +++ b/3rdparty/cpuinfo/src/x86/windows/api.h @@ -0,0 +1,41 @@ +#pragma once + +#include +#include +#include + +#include +#include + +struct cpuinfo_arm_linux_processor { + /** + * Minimum processor ID on the package which includes this logical processor. + * This value can serve as an ID for the cluster of logical processors: it is the + * same for all logical processors on the same package. + */ + uint32_t package_leader_id; + /** + * Minimum processor ID on the core which includes this logical processor. + * This value can serve as an ID for the cluster of logical processors: it is the + * same for all logical processors on the same package. + */ + /** + * Number of logical processors in the package. + */ + uint32_t package_processor_count; + /** + * Maximum frequency, in kHZ. + * The value is parsed from /sys/devices/system/cpu/cpu/cpufreq/cpuinfo_max_freq + * If failed to read or parse the file, the value is 0. + */ + uint32_t max_frequency; + /** + * Minimum frequency, in kHZ. + * The value is parsed from /sys/devices/system/cpu/cpu/cpufreq/cpuinfo_min_freq + * If failed to read or parse the file, the value is 0. + */ + uint32_t min_frequency; + /** Linux processor ID */ + uint32_t system_processor_id; + uint32_t flags; +}; diff --git a/3rdparty/cpuinfo/src/x86/windows/init.c b/3rdparty/cpuinfo/src/x86/windows/init.c new file mode 100644 index 000000000..274075c02 --- /dev/null +++ b/3rdparty/cpuinfo/src/x86/windows/init.c @@ -0,0 +1,634 @@ +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#ifdef __GNUC__ + #define CPUINFO_ALLOCA __builtin_alloca +#else + #define CPUINFO_ALLOCA _alloca +#endif + + +static inline uint32_t bit_mask(uint32_t bits) { + return (UINT32_C(1) << bits) - UINT32_C(1); +} + +static inline uint32_t low_index_from_kaffinity(KAFFINITY kaffinity) { + #if defined(_M_X64) || defined(_M_AMD64) + unsigned long index; + _BitScanForward64(&index, (unsigned __int64) kaffinity); + return (uint32_t) index; + #elif defined(_M_IX86) + unsigned long index; + _BitScanForward(&index, (unsigned long) kaffinity); + return (uint32_t) index; + #else + #error Platform-specific implementation required + #endif +} + +static void cpuinfo_x86_count_caches( + uint32_t processors_count, + const struct cpuinfo_processor* processors, + const struct cpuinfo_x86_processor* x86_processor, + uint32_t* l1i_count_ptr, + uint32_t* l1d_count_ptr, + uint32_t* l2_count_ptr, + uint32_t* l3_count_ptr, + uint32_t* l4_count_ptr) +{ + uint32_t l1i_count = 0, l1d_count = 0, l2_count = 0, l3_count = 0, l4_count = 0; + uint32_t last_l1i_id = UINT32_MAX, last_l1d_id = UINT32_MAX; + uint32_t last_l2_id = UINT32_MAX, last_l3_id = UINT32_MAX, last_l4_id = UINT32_MAX; + for (uint32_t i = 0; i < processors_count; i++) { + const uint32_t apic_id = processors[i].apic_id; + cpuinfo_log_debug("APID ID %"PRIu32": logical processor %"PRIu32, apic_id, i); + + if (x86_processor->cache.l1i.size != 0) { + const uint32_t l1i_id = apic_id & ~bit_mask(x86_processor->cache.l1i.apic_bits); + if (l1i_id != last_l1i_id) { + last_l1i_id = l1i_id; + l1i_count++; + } + } + if (x86_processor->cache.l1d.size != 0) { + const uint32_t l1d_id = apic_id & ~bit_mask(x86_processor->cache.l1d.apic_bits); + if (l1d_id != last_l1d_id) { + last_l1d_id = l1d_id; + l1d_count++; + } + } + if (x86_processor->cache.l2.size != 0) { + const uint32_t l2_id = apic_id & ~bit_mask(x86_processor->cache.l2.apic_bits); + if (l2_id != last_l2_id) { + last_l2_id = l2_id; + l2_count++; + } + } + if (x86_processor->cache.l3.size != 0) { + const uint32_t l3_id = apic_id & ~bit_mask(x86_processor->cache.l3.apic_bits); + if (l3_id != last_l3_id) { + last_l3_id = l3_id; + l3_count++; + } + } + if (x86_processor->cache.l4.size != 0) { + const uint32_t l4_id = apic_id & ~bit_mask(x86_processor->cache.l4.apic_bits); + if (l4_id != last_l4_id) { + last_l4_id = l4_id; + l4_count++; + } + } + } + *l1i_count_ptr = l1i_count; + *l1d_count_ptr = l1d_count; + *l2_count_ptr = l2_count; + *l3_count_ptr = l3_count; + *l4_count_ptr = l4_count; +} + +static bool cpuinfo_x86_windows_is_wine(void) { + HMODULE ntdll = GetModuleHandleW(L"ntdll.dll"); + if (ntdll == NULL) { + return false; + } + + return GetProcAddress(ntdll, "wine_get_version") != NULL; +} + +BOOL CALLBACK cpuinfo_x86_windows_init(PINIT_ONCE init_once, PVOID parameter, PVOID* context) { + struct cpuinfo_processor* processors = NULL; + struct cpuinfo_core* cores = NULL; + struct cpuinfo_cluster* clusters = NULL; + struct cpuinfo_package* packages = NULL; + struct cpuinfo_cache* l1i = NULL; + struct cpuinfo_cache* l1d = NULL; + struct cpuinfo_cache* l2 = NULL; + struct cpuinfo_cache* l3 = NULL; + struct cpuinfo_cache* l4 = NULL; + PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX processor_infos = NULL; + + HANDLE heap = GetProcessHeap(); + const bool is_wine = cpuinfo_x86_windows_is_wine(); + + struct cpuinfo_x86_processor x86_processor; + ZeroMemory(&x86_processor, sizeof(x86_processor)); + cpuinfo_x86_init_processor(&x86_processor); + char brand_string[48]; + cpuinfo_x86_normalize_brand_string(x86_processor.brand_string, brand_string); + + const uint32_t thread_bits_mask = bit_mask(x86_processor.topology.thread_bits_length); + const uint32_t core_bits_mask = bit_mask(x86_processor.topology.core_bits_length); + const uint32_t package_bits_offset = max( + x86_processor.topology.thread_bits_offset + x86_processor.topology.thread_bits_length, + x86_processor.topology.core_bits_offset + x86_processor.topology.core_bits_length); + + /* WINE doesn't implement GetMaximumProcessorGroupCount and aborts when calling it */ + const uint32_t max_group_count = is_wine ? 1 : (uint32_t) GetMaximumProcessorGroupCount(); + cpuinfo_log_debug("detected %"PRIu32" processor groups", max_group_count); + + uint32_t processors_count = 0; + uint32_t* processors_per_group = (uint32_t*) CPUINFO_ALLOCA(max_group_count * sizeof(uint32_t)); + for (uint32_t i = 0; i < max_group_count; i++) { + processors_per_group[i] = GetMaximumProcessorCount((WORD) i); + cpuinfo_log_debug("detected %"PRIu32" processors in group %"PRIu32, + processors_per_group[i], i); + processors_count += processors_per_group[i]; + } + + uint32_t* processors_before_group = (uint32_t*) CPUINFO_ALLOCA(max_group_count * sizeof(uint32_t)); + for (uint32_t i = 0, count = 0; i < max_group_count; i++) { + processors_before_group[i] = count; + cpuinfo_log_debug("detected %"PRIu32" processors before group %"PRIu32, + processors_before_group[i], i); + count += processors_per_group[i]; + } + + processors = HeapAlloc(heap, HEAP_ZERO_MEMORY, processors_count * sizeof(struct cpuinfo_processor)); + if (processors == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" logical processors", + processors_count * sizeof(struct cpuinfo_processor), processors_count); + goto cleanup; + } + + DWORD cores_info_size = 0; + if (GetLogicalProcessorInformationEx(RelationProcessorCore, NULL, &cores_info_size) == FALSE) { + const DWORD last_error = GetLastError(); + if (last_error != ERROR_INSUFFICIENT_BUFFER) { + cpuinfo_log_error("failed to query size of processor cores information: error %"PRIu32, + (uint32_t) last_error); + goto cleanup; + } + } + + DWORD packages_info_size = 0; + if (GetLogicalProcessorInformationEx(RelationProcessorPackage, NULL, &packages_info_size) == FALSE) { + const DWORD last_error = GetLastError(); + if (last_error != ERROR_INSUFFICIENT_BUFFER) { + cpuinfo_log_error("failed to query size of processor packages information: error %"PRIu32, + (uint32_t) last_error); + goto cleanup; + } + } + + DWORD max_info_size = max(cores_info_size, packages_info_size); + + processor_infos = HeapAlloc(heap, 0, max_info_size); + if (processor_infos == NULL) { + cpuinfo_log_error("failed to allocate %"PRIu32" bytes for logical processor information", + (uint32_t) max_info_size); + goto cleanup; + } + + if (GetLogicalProcessorInformationEx(RelationProcessorPackage, processor_infos, &max_info_size) == FALSE) { + cpuinfo_log_error("failed to query processor packages information: error %"PRIu32, + (uint32_t) GetLastError()); + goto cleanup; + } + + uint32_t packages_count = 0; + PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX packages_info_end = + (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX) ((uintptr_t) processor_infos + packages_info_size); + for (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX package_info = processor_infos; + package_info < packages_info_end; + package_info = (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX) ((uintptr_t) package_info + package_info->Size)) + { + if (package_info->Relationship != RelationProcessorPackage) { + cpuinfo_log_warning("unexpected processor info type (%"PRIu32") for processor package information", + (uint32_t) package_info->Relationship); + continue; + } + + /* We assume that packages are reported in APIC order */ + const uint32_t package_id = packages_count++; + /* Reconstruct package part of APIC ID */ + const uint32_t package_apic_id = package_id << package_bits_offset; + /* Iterate processor groups and set the package part of APIC ID */ + for (uint32_t i = 0; i < package_info->Processor.GroupCount; i++) { + const uint32_t group_id = package_info->Processor.GroupMask[i].Group; + /* Global index of the first logical processor belonging to this group */ + const uint32_t group_processors_start = processors_before_group[group_id]; + /* Bitmask representing processors in this group belonging to this package */ + KAFFINITY group_processors_mask = package_info->Processor.GroupMask[i].Mask; + while (group_processors_mask != 0) { + const uint32_t group_processor_id = low_index_from_kaffinity(group_processors_mask); + const uint32_t processor_id = group_processors_start + group_processor_id; + processors[processor_id].package = (const struct cpuinfo_package*) NULL + package_id; + processors[processor_id].windows_group_id = (uint16_t) group_id; + processors[processor_id].windows_processor_id = (uint16_t) group_processor_id; + processors[processor_id].apic_id = package_apic_id; + + /* Reset the lowest bit in affinity mask */ + group_processors_mask &= (group_processors_mask - 1); + } + } + } + + max_info_size = max(cores_info_size, packages_info_size); + if (GetLogicalProcessorInformationEx(RelationProcessorCore, processor_infos, &max_info_size) == FALSE) { + cpuinfo_log_error("failed to query processor cores information: error %"PRIu32, + (uint32_t) GetLastError()); + goto cleanup; + } + + uint32_t cores_count = 0; + /* Index (among all cores) of the the first core on the current package */ + uint32_t package_core_start = 0; + uint32_t current_package_apic_id = 0; + PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX cores_info_end = + (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX) ((uintptr_t) processor_infos + cores_info_size); + for (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX core_info = processor_infos; + core_info < cores_info_end; + core_info = (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX) ((uintptr_t) core_info + core_info->Size)) + { + if (core_info->Relationship != RelationProcessorCore) { + cpuinfo_log_warning("unexpected processor info type (%"PRIu32") for processor core information", + (uint32_t) core_info->Relationship); + continue; + } + + /* We assume that cores and logical processors are reported in APIC order */ + const uint32_t core_id = cores_count++; + uint32_t smt_id = 0; + /* Reconstruct core part of APIC ID */ + const uint32_t core_apic_id = (core_id & core_bits_mask) << x86_processor.topology.core_bits_offset; + /* Iterate processor groups and set the core & SMT parts of APIC ID */ + for (uint32_t i = 0; i < core_info->Processor.GroupCount; i++) { + const uint32_t group_id = core_info->Processor.GroupMask[i].Group; + /* Global index of the first logical processor belonging to this group */ + const uint32_t group_processors_start = processors_before_group[group_id]; + /* Bitmask representing processors in this group belonging to this package */ + KAFFINITY group_processors_mask = core_info->Processor.GroupMask[i].Mask; + while (group_processors_mask != 0) { + const uint32_t group_processor_id = low_index_from_kaffinity(group_processors_mask); + const uint32_t processor_id = group_processors_start + group_processor_id; + + /* Check if this is the first core on a new package */ + if (processors[processor_id].apic_id != current_package_apic_id) { + package_core_start = core_id; + current_package_apic_id = processors[processor_id].apic_id; + } + /* Core ID w.r.t package */ + const uint32_t package_core_id = core_id - package_core_start; + + /* Update APIC ID with core and SMT parts */ + processors[processor_id].apic_id |= + ((smt_id & thread_bits_mask) << x86_processor.topology.thread_bits_offset) | + ((package_core_id & core_bits_mask) << x86_processor.topology.core_bits_offset); + cpuinfo_log_debug("reconstructed APIC ID 0x%08"PRIx32" for processor %"PRIu32" in group %"PRIu32, + processors[processor_id].apic_id, group_processor_id, group_id); + + /* Set SMT ID (assume logical processors within the core are reported in APIC order) */ + processors[processor_id].smt_id = smt_id++; + processors[processor_id].core = (const struct cpuinfo_core*) NULL + core_id; + + /* Reset the lowest bit in affinity mask */ + group_processors_mask &= (group_processors_mask - 1); + } + } + } + + cores = HeapAlloc(heap, HEAP_ZERO_MEMORY, cores_count * sizeof(struct cpuinfo_core)); + if (cores == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" cores", + cores_count * sizeof(struct cpuinfo_core), cores_count); + goto cleanup; + } + + clusters = HeapAlloc(heap, HEAP_ZERO_MEMORY, packages_count * sizeof(struct cpuinfo_cluster)); + if (clusters == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" core clusters", + packages_count * sizeof(struct cpuinfo_cluster), packages_count); + goto cleanup; + } + + packages = HeapAlloc(heap, HEAP_ZERO_MEMORY, packages_count * sizeof(struct cpuinfo_package)); + if (packages == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" physical packages", + packages_count * sizeof(struct cpuinfo_package), packages_count); + goto cleanup; + } + + for (uint32_t i = processors_count; i != 0; i--) { + const uint32_t processor_id = i - 1; + struct cpuinfo_processor* processor = processors + processor_id; + + /* Adjust core and package pointers for all logical processors */ + struct cpuinfo_core* core = + (struct cpuinfo_core*) ((uintptr_t) cores + (uintptr_t) processor->core); + processor->core = core; + struct cpuinfo_cluster* cluster = + (struct cpuinfo_cluster*) ((uintptr_t) clusters + (uintptr_t) processor->cluster); + processor->cluster = cluster; + struct cpuinfo_package* package = + (struct cpuinfo_package*) ((uintptr_t) packages + (uintptr_t) processor->package); + processor->package = package; + + /* This can be overwritten by lower-index processors on the same package */ + package->processor_start = processor_id; + package->processor_count += 1; + + /* This can be overwritten by lower-index processors on the same cluster */ + cluster->processor_start = processor_id; + cluster->processor_count += 1; + + /* This can be overwritten by lower-index processors on the same core*/ + core->processor_start = processor_id; + core->processor_count += 1; + } + + /* Set vendor/uarch/CPUID information for cores */ + for (uint32_t i = cores_count; i != 0; i--) { + const uint32_t global_core_id = i - 1; + struct cpuinfo_core* core = cores + global_core_id; + const struct cpuinfo_processor* processor = processors + core->processor_start; + struct cpuinfo_package* package = (struct cpuinfo_package*) processor->package; + struct cpuinfo_cluster* cluster = (struct cpuinfo_cluster*) processor->cluster; + + core->cluster = cluster; + core->package = package; + core->core_id = core_bits_mask & + (processor->apic_id >> x86_processor.topology.core_bits_offset); + core->vendor = x86_processor.vendor; + core->uarch = x86_processor.uarch; + core->cpuid = x86_processor.cpuid; + + /* This can be overwritten by lower-index cores on the same cluster/package */ + cluster->core_start = global_core_id; + cluster->core_count += 1; + package->core_start = global_core_id; + package->core_count += 1; + } + + for (uint32_t i = 0; i < packages_count; i++) { + struct cpuinfo_package* package = packages + i; + struct cpuinfo_cluster* cluster = clusters + i; + + cluster->package = package; + cluster->vendor = cores[cluster->core_start].vendor; + cluster->uarch = cores[cluster->core_start].uarch; + cluster->cpuid = cores[cluster->core_start].cpuid; + package->cluster_start = i; + package->cluster_count = 1; + cpuinfo_x86_format_package_name(x86_processor.vendor, brand_string, package->name); + } + + /* Count caches */ + uint32_t l1i_count, l1d_count, l2_count, l3_count, l4_count; + cpuinfo_x86_count_caches(processors_count, processors, &x86_processor, + &l1i_count, &l1d_count, &l2_count, &l3_count, &l4_count); + + /* Allocate cache descriptions */ + if (l1i_count != 0) { + l1i = HeapAlloc(heap, HEAP_ZERO_MEMORY, l1i_count * sizeof(struct cpuinfo_cache)); + if (l1i == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L1I caches", + l1i_count * sizeof(struct cpuinfo_cache), l1i_count); + goto cleanup; + } + } + if (l1d_count != 0) { + l1d = HeapAlloc(heap, HEAP_ZERO_MEMORY, l1d_count * sizeof(struct cpuinfo_cache)); + if (l1d == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L1D caches", + l1d_count * sizeof(struct cpuinfo_cache), l1d_count); + goto cleanup; + } + } + if (l2_count != 0) { + l2 = HeapAlloc(heap, HEAP_ZERO_MEMORY, l2_count * sizeof(struct cpuinfo_cache)); + if (l2 == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L2 caches", + l2_count * sizeof(struct cpuinfo_cache), l2_count); + goto cleanup; + } + } + if (l3_count != 0) { + l3 = HeapAlloc(heap, HEAP_ZERO_MEMORY, l3_count * sizeof(struct cpuinfo_cache)); + if (l3 == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L3 caches", + l3_count * sizeof(struct cpuinfo_cache), l3_count); + goto cleanup; + } + } + if (l4_count != 0) { + l4 = HeapAlloc(heap, HEAP_ZERO_MEMORY, l4_count * sizeof(struct cpuinfo_cache)); + if (l4 == NULL) { + cpuinfo_log_error("failed to allocate %zu bytes for descriptions of %"PRIu32" L4 caches", + l4_count * sizeof(struct cpuinfo_cache), l4_count); + goto cleanup; + } + } + + /* Set cache information */ + uint32_t l1i_index = UINT32_MAX, l1d_index = UINT32_MAX, l2_index = UINT32_MAX, l3_index = UINT32_MAX, l4_index = UINT32_MAX; + uint32_t last_l1i_id = UINT32_MAX, last_l1d_id = UINT32_MAX; + uint32_t last_l2_id = UINT32_MAX, last_l3_id = UINT32_MAX, last_l4_id = UINT32_MAX; + for (uint32_t i = 0; i < processors_count; i++) { + const uint32_t apic_id = processors[i].apic_id; + + if (x86_processor.cache.l1i.size != 0) { + const uint32_t l1i_id = apic_id & ~bit_mask(x86_processor.cache.l1i.apic_bits); + processors[i].cache.l1i = &l1i[l1i_index]; + if (l1i_id != last_l1i_id) { + /* new cache */ + last_l1i_id = l1i_id; + l1i[++l1i_index] = (struct cpuinfo_cache) { + .size = x86_processor.cache.l1i.size, + .associativity = x86_processor.cache.l1i.associativity, + .sets = x86_processor.cache.l1i.sets, + .partitions = x86_processor.cache.l1i.partitions, + .line_size = x86_processor.cache.l1i.line_size, + .flags = x86_processor.cache.l1i.flags, + .processor_start = i, + .processor_count = 1, + }; + } else { + /* another processor sharing the same cache */ + l1i[l1i_index].processor_count += 1; + } + processors[i].cache.l1i = &l1i[l1i_index]; + } else { + /* reset cache id */ + last_l1i_id = UINT32_MAX; + } + if (x86_processor.cache.l1d.size != 0) { + const uint32_t l1d_id = apic_id & ~bit_mask(x86_processor.cache.l1d.apic_bits); + processors[i].cache.l1d = &l1d[l1d_index]; + if (l1d_id != last_l1d_id) { + /* new cache */ + last_l1d_id = l1d_id; + l1d[++l1d_index] = (struct cpuinfo_cache) { + .size = x86_processor.cache.l1d.size, + .associativity = x86_processor.cache.l1d.associativity, + .sets = x86_processor.cache.l1d.sets, + .partitions = x86_processor.cache.l1d.partitions, + .line_size = x86_processor.cache.l1d.line_size, + .flags = x86_processor.cache.l1d.flags, + .processor_start = i, + .processor_count = 1, + }; + } else { + /* another processor sharing the same cache */ + l1d[l1d_index].processor_count += 1; + } + processors[i].cache.l1d = &l1d[l1d_index]; + } else { + /* reset cache id */ + last_l1d_id = UINT32_MAX; + } + if (x86_processor.cache.l2.size != 0) { + const uint32_t l2_id = apic_id & ~bit_mask(x86_processor.cache.l2.apic_bits); + processors[i].cache.l2 = &l2[l2_index]; + if (l2_id != last_l2_id) { + /* new cache */ + last_l2_id = l2_id; + l2[++l2_index] = (struct cpuinfo_cache) { + .size = x86_processor.cache.l2.size, + .associativity = x86_processor.cache.l2.associativity, + .sets = x86_processor.cache.l2.sets, + .partitions = x86_processor.cache.l2.partitions, + .line_size = x86_processor.cache.l2.line_size, + .flags = x86_processor.cache.l2.flags, + .processor_start = i, + .processor_count = 1, + }; + } else { + /* another processor sharing the same cache */ + l2[l2_index].processor_count += 1; + } + processors[i].cache.l2 = &l2[l2_index]; + } else { + /* reset cache id */ + last_l2_id = UINT32_MAX; + } + if (x86_processor.cache.l3.size != 0) { + const uint32_t l3_id = apic_id & ~bit_mask(x86_processor.cache.l3.apic_bits); + processors[i].cache.l3 = &l3[l3_index]; + if (l3_id != last_l3_id) { + /* new cache */ + last_l3_id = l3_id; + l3[++l3_index] = (struct cpuinfo_cache) { + .size = x86_processor.cache.l3.size, + .associativity = x86_processor.cache.l3.associativity, + .sets = x86_processor.cache.l3.sets, + .partitions = x86_processor.cache.l3.partitions, + .line_size = x86_processor.cache.l3.line_size, + .flags = x86_processor.cache.l3.flags, + .processor_start = i, + .processor_count = 1, + }; + } else { + /* another processor sharing the same cache */ + l3[l3_index].processor_count += 1; + } + processors[i].cache.l3 = &l3[l3_index]; + } else { + /* reset cache id */ + last_l3_id = UINT32_MAX; + } + if (x86_processor.cache.l4.size != 0) { + const uint32_t l4_id = apic_id & ~bit_mask(x86_processor.cache.l4.apic_bits); + processors[i].cache.l4 = &l4[l4_index]; + if (l4_id != last_l4_id) { + /* new cache */ + last_l4_id = l4_id; + l4[++l4_index] = (struct cpuinfo_cache) { + .size = x86_processor.cache.l4.size, + .associativity = x86_processor.cache.l4.associativity, + .sets = x86_processor.cache.l4.sets, + .partitions = x86_processor.cache.l4.partitions, + .line_size = x86_processor.cache.l4.line_size, + .flags = x86_processor.cache.l4.flags, + .processor_start = i, + .processor_count = 1, + }; + } else { + /* another processor sharing the same cache */ + l4[l4_index].processor_count += 1; + } + processors[i].cache.l4 = &l4[l4_index]; + } else { + /* reset cache id */ + last_l4_id = UINT32_MAX; + } + } + + + /* Commit changes */ + cpuinfo_processors = processors; + cpuinfo_cores = cores; + cpuinfo_clusters = clusters; + cpuinfo_packages = packages; + cpuinfo_cache[cpuinfo_cache_level_1i] = l1i; + cpuinfo_cache[cpuinfo_cache_level_1d] = l1d; + cpuinfo_cache[cpuinfo_cache_level_2] = l2; + cpuinfo_cache[cpuinfo_cache_level_3] = l3; + cpuinfo_cache[cpuinfo_cache_level_4] = l4; + + cpuinfo_processors_count = processors_count; + cpuinfo_cores_count = cores_count; + cpuinfo_clusters_count = packages_count; + cpuinfo_packages_count = packages_count; + cpuinfo_cache_count[cpuinfo_cache_level_1i] = l1i_count; + cpuinfo_cache_count[cpuinfo_cache_level_1d] = l1d_count; + cpuinfo_cache_count[cpuinfo_cache_level_2] = l2_count; + cpuinfo_cache_count[cpuinfo_cache_level_3] = l3_count; + cpuinfo_cache_count[cpuinfo_cache_level_4] = l4_count; + cpuinfo_max_cache_size = cpuinfo_compute_max_cache_size(&processors[0]); + + cpuinfo_global_uarch = (struct cpuinfo_uarch_info) { + .uarch = x86_processor.uarch, + .cpuid = x86_processor.cpuid, + .processor_count = processors_count, + .core_count = cores_count, + }; + + MemoryBarrier(); + + cpuinfo_is_initialized = true; + + processors = NULL; + cores = NULL; + clusters = NULL; + packages = NULL; + l1i = l1d = l2 = l3 = l4 = NULL; + +cleanup: + if (processors != NULL) { + HeapFree(heap, 0, processors); + } + if (cores != NULL) { + HeapFree(heap, 0, cores); + } + if (clusters != NULL) { + HeapFree(heap, 0, clusters); + } + if (packages != NULL) { + HeapFree(heap, 0, packages); + } + if (l1i != NULL) { + HeapFree(heap, 0, l1i); + } + if (l1d != NULL) { + HeapFree(heap, 0, l1d); + } + if (l2 != NULL) { + HeapFree(heap, 0, l2); + } + if (l3 != NULL) { + HeapFree(heap, 0, l3); + } + if (l4 != NULL) { + HeapFree(heap, 0, l4); + } + return TRUE; +} diff --git a/3rdparty/ffmpeg-core b/3rdparty/ffmpeg-core new file mode 160000 index 000000000..94dde08c8 --- /dev/null +++ b/3rdparty/ffmpeg-core @@ -0,0 +1 @@ +Subproject commit 94dde08c8a9e4271a93a2a7e4159e9fb05d30c0a diff --git a/3rdparty/fmt b/3rdparty/fmt new file mode 160000 index 000000000..11ddbcb78 --- /dev/null +++ b/3rdparty/fmt @@ -0,0 +1 @@ +Subproject commit 11ddbcb7898d2d3445d431a54814367b21dee6ad diff --git a/3rdparty/magic_enum b/3rdparty/magic_enum new file mode 160000 index 000000000..1384769c6 --- /dev/null +++ b/3rdparty/magic_enum @@ -0,0 +1 @@ +Subproject commit 1384769c66bd16ec9bb1353f45fe8ec8ccc12dbd diff --git a/3rdparty/nlohmann_json b/3rdparty/nlohmann_json new file mode 160000 index 000000000..272411c5e --- /dev/null +++ b/3rdparty/nlohmann_json @@ -0,0 +1 @@ +Subproject commit 272411c5e6ea45919af7673524e74e60c62116df diff --git a/3rdparty/spdlog b/3rdparty/spdlog new file mode 160000 index 000000000..8671ca4d4 --- /dev/null +++ b/3rdparty/spdlog @@ -0,0 +1 @@ +Subproject commit 8671ca4d492c8ee1cdfd3dd88afb9f88dd268178 diff --git a/3rdparty/stb/LICENSE b/3rdparty/stb/LICENSE new file mode 100644 index 000000000..a77ae91f3 --- /dev/null +++ b/3rdparty/stb/LICENSE @@ -0,0 +1,37 @@ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright (c) 2017 Sean Barrett +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain (www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/3rdparty/stb/stb_image.h b/3rdparty/stb/stb_image.h new file mode 100644 index 000000000..d60371b95 --- /dev/null +++ b/3rdparty/stb/stb_image.h @@ -0,0 +1,7897 @@ +/* stb_image - v2.27 - public domain image loader - http://nothings.org/stb + no warranty implied; use at your own risk + + Do this: + #define STB_IMAGE_IMPLEMENTATION + before you include this file in *one* C or C++ file to create the implementation. + + // i.e. it should look like this: + #include ... + #include ... + #include ... + #define STB_IMAGE_IMPLEMENTATION + #include "stb_image.h" + + You can #define STBI_ASSERT(x) before the #include to avoid using assert.h. + And #define STBI_MALLOC, STBI_REALLOC, and STBI_FREE to avoid using malloc,realloc,free + + + QUICK NOTES: + Primarily of interest to game developers and other people who can + avoid problematic images and only need the trivial interface + + JPEG baseline & progressive (12 bpc/arithmetic not supported, same as stock IJG lib) + PNG 1/2/4/8/16-bit-per-channel + + TGA (not sure what subset, if a subset) + BMP non-1bpp, non-RLE + PSD (composited view only, no extra channels, 8/16 bit-per-channel) + + GIF (*comp always reports as 4-channel) + HDR (radiance rgbE format) + PIC (Softimage PIC) + PNM (PPM and PGM binary only) + + Animated GIF still needs a proper API, but here's one way to do it: + http://gist.github.com/urraka/685d9a6340b26b830d49 + + - decode from memory or through FILE (define STBI_NO_STDIO to remove code) + - decode from arbitrary I/O callbacks + - SIMD acceleration on x86/x64 (SSE2) and ARM (NEON) + + Full documentation under "DOCUMENTATION" below. + + +LICENSE + + See end of file for license information. + +RECENT REVISION HISTORY: + + 2.27 (2021-07-11) document stbi_info better, 16-bit PNM support, bug fixes + 2.26 (2020-07-13) many minor fixes + 2.25 (2020-02-02) fix warnings + 2.24 (2020-02-02) fix warnings; thread-local failure_reason and flip_vertically + 2.23 (2019-08-11) fix clang static analysis warning + 2.22 (2019-03-04) gif fixes, fix warnings + 2.21 (2019-02-25) fix typo in comment + 2.20 (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs + 2.19 (2018-02-11) fix warning + 2.18 (2018-01-30) fix warnings + 2.17 (2018-01-29) bugfix, 1-bit BMP, 16-bitness query, fix warnings + 2.16 (2017-07-23) all functions have 16-bit variants; optimizations; bugfixes + 2.15 (2017-03-18) fix png-1,2,4; all Imagenet JPGs; no runtime SSE detection on GCC + 2.14 (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet JPGs + 2.13 (2016-12-04) experimental 16-bit API, only for PNG so far; fixes + 2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes + 2.11 (2016-04-02) 16-bit PNGS; enable SSE2 in non-gcc x64 + RGB-format JPEG; remove white matting in PSD; + allocate large structures on the stack; + correct channel count for PNG & BMP + 2.10 (2016-01-22) avoid warning introduced in 2.09 + 2.09 (2016-01-16) 16-bit TGA; comments in PNM files; STBI_REALLOC_SIZED + + See end of file for full revision history. + + + ============================ Contributors ========================= + + Image formats Extensions, features + Sean Barrett (jpeg, png, bmp) Jetro Lauha (stbi_info) + Nicolas Schulz (hdr, psd) Martin "SpartanJ" Golini (stbi_info) + Jonathan Dummer (tga) James "moose2000" Brown (iPhone PNG) + Jean-Marc Lienher (gif) Ben "Disch" Wenger (io callbacks) + Tom Seddon (pic) Omar Cornut (1/2/4-bit PNG) + Thatcher Ulrich (psd) Nicolas Guillemot (vertical flip) + Ken Miller (pgm, ppm) Richard Mitton (16-bit PSD) + github:urraka (animated gif) Junggon Kim (PNM comments) + Christopher Forseth (animated gif) Daniel Gibson (16-bit TGA) + socks-the-fox (16-bit PNG) + Jeremy Sawicki (handle all ImageNet JPGs) + Optimizations & bugfixes Mikhail Morozov (1-bit BMP) + Fabian "ryg" Giesen Anael Seghezzi (is-16-bit query) + Arseny Kapoulkine Simon Breuss (16-bit PNM) + John-Mark Allen + Carmelo J Fdez-Aguera + + Bug & warning fixes + Marc LeBlanc David Woo Guillaume George Martins Mozeiko + Christpher Lloyd Jerry Jansson Joseph Thomson Blazej Dariusz Roszkowski + Phil Jordan Dave Moore Roy Eltham + Hayaki Saito Nathan Reed Won Chun + Luke Graham Johan Duparc Nick Verigakis the Horde3D community + Thomas Ruf Ronny Chevalier github:rlyeh + Janez Zemva John Bartholomew Michal Cichon github:romigrou + Jonathan Blow Ken Hamada Tero Hanninen github:svdijk + Eugene Golushkov Laurent Gomila Cort Stratton github:snagar + Aruelien Pocheville Sergio Gonzalez Thibault Reuille github:Zelex + Cass Everitt Ryamond Barbiero github:grim210 + Paul Du Bois Engin Manap Aldo Culquicondor github:sammyhw + Philipp Wiesemann Dale Weiler Oriol Ferrer Mesia github:phprus + Josh Tobin Matthew Gregan github:poppolopoppo + Julian Raschke Gregory Mullen Christian Floisand github:darealshinji + Baldur Karlsson Kevin Schmidt JR Smith github:Michaelangel007 + Brad Weinberger Matvey Cherevko github:mosra + Luca Sas Alexander Veselov Zack Middleton [reserved] + Ryan C. Gordon [reserved] [reserved] + DO NOT ADD YOUR NAME HERE + + Jacko Dirks + + To add your name to the credits, pick a random blank space in the middle and fill it. + 80% of merge conflicts on stb PRs are due to people adding their name at the end + of the credits. +*/ + +#ifndef STBI_INCLUDE_STB_IMAGE_H +#define STBI_INCLUDE_STB_IMAGE_H + +// DOCUMENTATION +// +// Limitations: +// - no 12-bit-per-channel JPEG +// - no JPEGs with arithmetic coding +// - GIF always returns *comp=4 +// +// Basic usage (see HDR discussion below for HDR usage): +// int x,y,n; +// unsigned char *data = stbi_load(filename, &x, &y, &n, 0); +// // ... process data if not NULL ... +// // ... x = width, y = height, n = # 8-bit components per pixel ... +// // ... replace '0' with '1'..'4' to force that many components per pixel +// // ... but 'n' will always be the number that it would have been if you said 0 +// stbi_image_free(data) +// +// Standard parameters: +// int *x -- outputs image width in pixels +// int *y -- outputs image height in pixels +// int *channels_in_file -- outputs # of image components in image file +// int desired_channels -- if non-zero, # of image components requested in result +// +// The return value from an image loader is an 'unsigned char *' which points +// to the pixel data, or NULL on an allocation failure or if the image is +// corrupt or invalid. The pixel data consists of *y scanlines of *x pixels, +// with each pixel consisting of N interleaved 8-bit components; the first +// pixel pointed to is top-left-most in the image. There is no padding between +// image scanlines or between pixels, regardless of format. The number of +// components N is 'desired_channels' if desired_channels is non-zero, or +// *channels_in_file otherwise. If desired_channels is non-zero, +// *channels_in_file has the number of components that _would_ have been +// output otherwise. E.g. if you set desired_channels to 4, you will always +// get RGBA output, but you can check *channels_in_file to see if it's trivially +// opaque because e.g. there were only 3 channels in the source image. +// +// An output image with N components has the following components interleaved +// in this order in each pixel: +// +// N=#comp components +// 1 grey +// 2 grey, alpha +// 3 red, green, blue +// 4 red, green, blue, alpha +// +// If image loading fails for any reason, the return value will be NULL, +// and *x, *y, *channels_in_file will be unchanged. The function +// stbi_failure_reason() can be queried for an extremely brief, end-user +// unfriendly explanation of why the load failed. Define STBI_NO_FAILURE_STRINGS +// to avoid compiling these strings at all, and STBI_FAILURE_USERMSG to get slightly +// more user-friendly ones. +// +// Paletted PNG, BMP, GIF, and PIC images are automatically depalettized. +// +// To query the width, height and component count of an image without having to +// decode the full file, you can use the stbi_info family of functions: +// +// int x,y,n,ok; +// ok = stbi_info(filename, &x, &y, &n); +// // returns ok=1 and sets x, y, n if image is a supported format, +// // 0 otherwise. +// +// Note that stb_image pervasively uses ints in its public API for sizes, +// including sizes of memory buffers. This is now part of the API and thus +// hard to change without causing breakage. As a result, the various image +// loaders all have certain limits on image size; these differ somewhat +// by format but generally boil down to either just under 2GB or just under +// 1GB. When the decoded image would be larger than this, stb_image decoding +// will fail. +// +// Additionally, stb_image will reject image files that have any of their +// dimensions set to a larger value than the configurable STBI_MAX_DIMENSIONS, +// which defaults to 2**24 = 16777216 pixels. Due to the above memory limit, +// the only way to have an image with such dimensions load correctly +// is for it to have a rather extreme aspect ratio. Either way, the +// assumption here is that such larger images are likely to be malformed +// or malicious. If you do need to load an image with individual dimensions +// larger than that, and it still fits in the overall size limit, you can +// #define STBI_MAX_DIMENSIONS on your own to be something larger. +// +// =========================================================================== +// +// UNICODE: +// +// If compiling for Windows and you wish to use Unicode filenames, compile +// with +// #define STBI_WINDOWS_UTF8 +// and pass utf8-encoded filenames. Call stbi_convert_wchar_to_utf8 to convert +// Windows wchar_t filenames to utf8. +// +// =========================================================================== +// +// Philosophy +// +// stb libraries are designed with the following priorities: +// +// 1. easy to use +// 2. easy to maintain +// 3. good performance +// +// Sometimes I let "good performance" creep up in priority over "easy to maintain", +// and for best performance I may provide less-easy-to-use APIs that give higher +// performance, in addition to the easy-to-use ones. Nevertheless, it's important +// to keep in mind that from the standpoint of you, a client of this library, +// all you care about is #1 and #3, and stb libraries DO NOT emphasize #3 above all. +// +// Some secondary priorities arise directly from the first two, some of which +// provide more explicit reasons why performance can't be emphasized. +// +// - Portable ("ease of use") +// - Small source code footprint ("easy to maintain") +// - No dependencies ("ease of use") +// +// =========================================================================== +// +// I/O callbacks +// +// I/O callbacks allow you to read from arbitrary sources, like packaged +// files or some other source. Data read from callbacks are processed +// through a small internal buffer (currently 128 bytes) to try to reduce +// overhead. +// +// The three functions you must define are "read" (reads some bytes of data), +// "skip" (skips some bytes of data), "eof" (reports if the stream is at the end). +// +// =========================================================================== +// +// SIMD support +// +// The JPEG decoder will try to automatically use SIMD kernels on x86 when +// supported by the compiler. For ARM Neon support, you must explicitly +// request it. +// +// (The old do-it-yourself SIMD API is no longer supported in the current +// code.) +// +// On x86, SSE2 will automatically be used when available based on a run-time +// test; if not, the generic C versions are used as a fall-back. On ARM targets, +// the typical path is to have separate builds for NEON and non-NEON devices +// (at least this is true for iOS and Android). Therefore, the NEON support is +// toggled by a build flag: define STBI_NEON to get NEON loops. +// +// If for some reason you do not want to use any of SIMD code, or if +// you have issues compiling it, you can disable it entirely by +// defining STBI_NO_SIMD. +// +// =========================================================================== +// +// HDR image support (disable by defining STBI_NO_HDR) +// +// stb_image supports loading HDR images in general, and currently the Radiance +// .HDR file format specifically. You can still load any file through the existing +// interface; if you attempt to load an HDR file, it will be automatically remapped +// to LDR, assuming gamma 2.2 and an arbitrary scale factor defaulting to 1; +// both of these constants can be reconfigured through this interface: +// +// stbi_hdr_to_ldr_gamma(2.2f); +// stbi_hdr_to_ldr_scale(1.0f); +// +// (note, do not use _inverse_ constants; stbi_image will invert them +// appropriately). +// +// Additionally, there is a new, parallel interface for loading files as +// (linear) floats to preserve the full dynamic range: +// +// float *data = stbi_loadf(filename, &x, &y, &n, 0); +// +// If you load LDR images through this interface, those images will +// be promoted to floating point values, run through the inverse of +// constants corresponding to the above: +// +// stbi_ldr_to_hdr_scale(1.0f); +// stbi_ldr_to_hdr_gamma(2.2f); +// +// Finally, given a filename (or an open file or memory block--see header +// file for details) containing image data, you can query for the "most +// appropriate" interface to use (that is, whether the image is HDR or +// not), using: +// +// stbi_is_hdr(char *filename); +// +// =========================================================================== +// +// iPhone PNG support: +// +// We optionally support converting iPhone-formatted PNGs (which store +// premultiplied BGRA) back to RGB, even though they're internally encoded +// differently. To enable this conversion, call +// stbi_convert_iphone_png_to_rgb(1). +// +// Call stbi_set_unpremultiply_on_load(1) as well to force a divide per +// pixel to remove any premultiplied alpha *only* if the image file explicitly +// says there's premultiplied data (currently only happens in iPhone images, +// and only if iPhone convert-to-rgb processing is on). +// +// =========================================================================== +// +// ADDITIONAL CONFIGURATION +// +// - You can suppress implementation of any of the decoders to reduce +// your code footprint by #defining one or more of the following +// symbols before creating the implementation. +// +// STBI_NO_JPEG +// STBI_NO_PNG +// STBI_NO_BMP +// STBI_NO_PSD +// STBI_NO_TGA +// STBI_NO_GIF +// STBI_NO_HDR +// STBI_NO_PIC +// STBI_NO_PNM (.ppm and .pgm) +// +// - You can request *only* certain decoders and suppress all other ones +// (this will be more forward-compatible, as addition of new decoders +// doesn't require you to disable them explicitly): +// +// STBI_ONLY_JPEG +// STBI_ONLY_PNG +// STBI_ONLY_BMP +// STBI_ONLY_PSD +// STBI_ONLY_TGA +// STBI_ONLY_GIF +// STBI_ONLY_HDR +// STBI_ONLY_PIC +// STBI_ONLY_PNM (.ppm and .pgm) +// +// - If you use STBI_NO_PNG (or _ONLY_ without PNG), and you still +// want the zlib decoder to be available, #define STBI_SUPPORT_ZLIB +// +// - If you define STBI_MAX_DIMENSIONS, stb_image will reject images greater +// than that size (in either width or height) without further processing. +// This is to let programs in the wild set an upper bound to prevent +// denial-of-service attacks on untrusted data, as one could generate a +// valid image of gigantic dimensions and force stb_image to allocate a +// huge block of memory and spend disproportionate time decoding it. By +// default this is set to (1 << 24), which is 16777216, but that's still +// very big. + +#ifndef STBI_NO_STDIO +#include +#endif // STBI_NO_STDIO + +#define STBI_VERSION 1 + +enum +{ + STBI_default = 0, // only used for desired_channels + + STBI_grey = 1, + STBI_grey_alpha = 2, + STBI_rgb = 3, + STBI_rgb_alpha = 4 +}; + +#include +typedef unsigned char stbi_uc; +typedef unsigned short stbi_us; + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef STBIDEF +#ifdef STB_IMAGE_STATIC +#define STBIDEF static +#else +#define STBIDEF extern +#endif +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// PRIMARY API - works on images of any type +// + +// +// load image by filename, open file, or memory buffer +// + +typedef struct +{ + int (*read) (void *user,char *data,int size); // fill 'data' with 'size' bytes. return number of bytes actually read + void (*skip) (void *user,int n); // skip the next 'n' bytes, or 'unget' the last -n bytes if negative + int (*eof) (void *user); // returns nonzero if we are at end of file/data +} stbi_io_callbacks; + +//////////////////////////////////// +// +// 8-bits-per-channel interface +// + +STBIDEF stbi_uc *stbi_load_from_memory (stbi_uc const *buffer, int len , int *x, int *y, int *channels_in_file, int desired_channels); +STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk , void *user, int *x, int *y, int *channels_in_file, int desired_channels); + +#ifndef STBI_NO_STDIO +STBIDEF stbi_uc *stbi_load (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); +STBIDEF stbi_uc *stbi_load_from_file (FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); +// for stbi_load_from_file, file pointer is left pointing immediately after image +#endif + +#ifndef STBI_NO_GIF +STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, int **delays, int *x, int *y, int *z, int *comp, int req_comp); +#endif + +#ifdef STBI_WINDOWS_UTF8 +STBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input); +#endif + +//////////////////////////////////// +// +// 16-bits-per-channel interface +// + +STBIDEF stbi_us *stbi_load_16_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels); +STBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels); + +#ifndef STBI_NO_STDIO +STBIDEF stbi_us *stbi_load_16 (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); +STBIDEF stbi_us *stbi_load_from_file_16(FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); +#endif + +//////////////////////////////////// +// +// float-per-channel interface +// +#ifndef STBI_NO_LINEAR + STBIDEF float *stbi_loadf_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels); + STBIDEF float *stbi_loadf_from_callbacks (stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels); + + #ifndef STBI_NO_STDIO + STBIDEF float *stbi_loadf (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); + STBIDEF float *stbi_loadf_from_file (FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); + #endif +#endif + +#ifndef STBI_NO_HDR + STBIDEF void stbi_hdr_to_ldr_gamma(float gamma); + STBIDEF void stbi_hdr_to_ldr_scale(float scale); +#endif // STBI_NO_HDR + +#ifndef STBI_NO_LINEAR + STBIDEF void stbi_ldr_to_hdr_gamma(float gamma); + STBIDEF void stbi_ldr_to_hdr_scale(float scale); +#endif // STBI_NO_LINEAR + +// stbi_is_hdr is always defined, but always returns false if STBI_NO_HDR +STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user); +STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len); +#ifndef STBI_NO_STDIO +STBIDEF int stbi_is_hdr (char const *filename); +STBIDEF int stbi_is_hdr_from_file(FILE *f); +#endif // STBI_NO_STDIO + + +// get a VERY brief reason for failure +// on most compilers (and ALL modern mainstream compilers) this is threadsafe +STBIDEF const char *stbi_failure_reason (void); + +// free the loaded image -- this is just free() +STBIDEF void stbi_image_free (void *retval_from_stbi_load); + +// get image dimensions & components without fully decoding +STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); +STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp); +STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len); +STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *clbk, void *user); + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_info (char const *filename, int *x, int *y, int *comp); +STBIDEF int stbi_info_from_file (FILE *f, int *x, int *y, int *comp); +STBIDEF int stbi_is_16_bit (char const *filename); +STBIDEF int stbi_is_16_bit_from_file(FILE *f); +#endif + + + +// for image formats that explicitly notate that they have premultiplied alpha, +// we just return the colors as stored in the file. set this flag to force +// unpremultiplication. results are undefined if the unpremultiply overflow. +STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply); + +// indicate whether we should process iphone images back to canonical format, +// or just pass them through "as-is" +STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert); + +// flip the image vertically, so the first pixel in the output array is the bottom left +STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip); + +// as above, but only applies to images loaded on the thread that calls the function +// this function is only available if your compiler supports thread-local variables; +// calling it will fail to link if your compiler doesn't +STBIDEF void stbi_set_unpremultiply_on_load_thread(int flag_true_if_should_unpremultiply); +STBIDEF void stbi_convert_iphone_png_to_rgb_thread(int flag_true_if_should_convert); +STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip); + +// ZLIB client - used by PNG, available for other purposes + +STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen); +STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header); +STBIDEF char *stbi_zlib_decode_malloc(const char *buffer, int len, int *outlen); +STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); + +STBIDEF char *stbi_zlib_decode_noheader_malloc(const char *buffer, int len, int *outlen); +STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); + + +#ifdef __cplusplus +} +#endif + +// +// +//// end header file ///////////////////////////////////////////////////// +#endif // STBI_INCLUDE_STB_IMAGE_H + +#ifdef STB_IMAGE_IMPLEMENTATION + +#if defined(STBI_ONLY_JPEG) || defined(STBI_ONLY_PNG) || defined(STBI_ONLY_BMP) \ + || defined(STBI_ONLY_TGA) || defined(STBI_ONLY_GIF) || defined(STBI_ONLY_PSD) \ + || defined(STBI_ONLY_HDR) || defined(STBI_ONLY_PIC) || defined(STBI_ONLY_PNM) \ + || defined(STBI_ONLY_ZLIB) + #ifndef STBI_ONLY_JPEG + #define STBI_NO_JPEG + #endif + #ifndef STBI_ONLY_PNG + #define STBI_NO_PNG + #endif + #ifndef STBI_ONLY_BMP + #define STBI_NO_BMP + #endif + #ifndef STBI_ONLY_PSD + #define STBI_NO_PSD + #endif + #ifndef STBI_ONLY_TGA + #define STBI_NO_TGA + #endif + #ifndef STBI_ONLY_GIF + #define STBI_NO_GIF + #endif + #ifndef STBI_ONLY_HDR + #define STBI_NO_HDR + #endif + #ifndef STBI_ONLY_PIC + #define STBI_NO_PIC + #endif + #ifndef STBI_ONLY_PNM + #define STBI_NO_PNM + #endif +#endif + +#if defined(STBI_NO_PNG) && !defined(STBI_SUPPORT_ZLIB) && !defined(STBI_NO_ZLIB) +#define STBI_NO_ZLIB +#endif + + +#include +#include // ptrdiff_t on osx +#include +#include +#include + +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) +#include // ldexp, pow +#endif + +#ifndef STBI_NO_STDIO +#include +#endif + +#ifndef STBI_ASSERT +#include +#define STBI_ASSERT(x) assert(x) +#endif + +#ifdef __cplusplus +#define STBI_EXTERN extern "C" +#else +#define STBI_EXTERN extern +#endif + + +#ifndef _MSC_VER + #ifdef __cplusplus + #define stbi_inline inline + #else + #define stbi_inline + #endif +#else + #define stbi_inline __forceinline +#endif + +#ifndef STBI_NO_THREAD_LOCALS + #if defined(__cplusplus) && __cplusplus >= 201103L + #define STBI_THREAD_LOCAL thread_local + #elif defined(__GNUC__) && __GNUC__ < 5 + #define STBI_THREAD_LOCAL __thread + #elif defined(_MSC_VER) + #define STBI_THREAD_LOCAL __declspec(thread) + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_THREADS__) + #define STBI_THREAD_LOCAL _Thread_local + #endif + + #ifndef STBI_THREAD_LOCAL + #if defined(__GNUC__) + #define STBI_THREAD_LOCAL __thread + #endif + #endif +#endif + +#ifdef _MSC_VER +typedef unsigned short stbi__uint16; +typedef signed short stbi__int16; +typedef unsigned int stbi__uint32; +typedef signed int stbi__int32; +#else +#include +typedef uint16_t stbi__uint16; +typedef int16_t stbi__int16; +typedef uint32_t stbi__uint32; +typedef int32_t stbi__int32; +#endif + +// should produce compiler error if size is wrong +typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1]; + +#ifdef _MSC_VER +#define STBI_NOTUSED(v) (void)(v) +#else +#define STBI_NOTUSED(v) (void)sizeof(v) +#endif + +#ifdef _MSC_VER +#define STBI_HAS_LROTL +#endif + +#ifdef STBI_HAS_LROTL + #define stbi_lrot(x,y) _lrotl(x,y) +#else + #define stbi_lrot(x,y) (((x) << (y)) | ((x) >> (-(y) & 31))) +#endif + +#if defined(STBI_MALLOC) && defined(STBI_FREE) && (defined(STBI_REALLOC) || defined(STBI_REALLOC_SIZED)) +// ok +#elif !defined(STBI_MALLOC) && !defined(STBI_FREE) && !defined(STBI_REALLOC) && !defined(STBI_REALLOC_SIZED) +// ok +#else +#error "Must define all or none of STBI_MALLOC, STBI_FREE, and STBI_REALLOC (or STBI_REALLOC_SIZED)." +#endif + +#ifndef STBI_MALLOC +#define STBI_MALLOC(sz) malloc(sz) +#define STBI_REALLOC(p,newsz) realloc(p,newsz) +#define STBI_FREE(p) free(p) +#endif + +#ifndef STBI_REALLOC_SIZED +#define STBI_REALLOC_SIZED(p,oldsz,newsz) STBI_REALLOC(p,newsz) +#endif + +// x86/x64 detection +#if defined(__x86_64__) || defined(_M_X64) +#define STBI__X64_TARGET +#elif defined(__i386) || defined(_M_IX86) +#define STBI__X86_TARGET +#endif + +#if defined(__GNUC__) && defined(STBI__X86_TARGET) && !defined(__SSE2__) && !defined(STBI_NO_SIMD) +// gcc doesn't support sse2 intrinsics unless you compile with -msse2, +// which in turn means it gets to use SSE2 everywhere. This is unfortunate, +// but previous attempts to provide the SSE2 functions with runtime +// detection caused numerous issues. The way architecture extensions are +// exposed in GCC/Clang is, sadly, not really suited for one-file libs. +// New behavior: if compiled with -msse2, we use SSE2 without any +// detection; if not, we don't use it at all. +#define STBI_NO_SIMD +#endif + +#if defined(__MINGW32__) && defined(STBI__X86_TARGET) && !defined(STBI_MINGW_ENABLE_SSE2) && !defined(STBI_NO_SIMD) +// Note that __MINGW32__ doesn't actually mean 32-bit, so we have to avoid STBI__X64_TARGET +// +// 32-bit MinGW wants ESP to be 16-byte aligned, but this is not in the +// Windows ABI and VC++ as well as Windows DLLs don't maintain that invariant. +// As a result, enabling SSE2 on 32-bit MinGW is dangerous when not +// simultaneously enabling "-mstackrealign". +// +// See https://github.com/nothings/stb/issues/81 for more information. +// +// So default to no SSE2 on 32-bit MinGW. If you've read this far and added +// -mstackrealign to your build settings, feel free to #define STBI_MINGW_ENABLE_SSE2. +#define STBI_NO_SIMD +#endif + +#if !defined(STBI_NO_SIMD) && (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET)) +#define STBI_SSE2 +#include + +#ifdef _MSC_VER + +#if _MSC_VER >= 1400 // not VC6 +#include // __cpuid +static int stbi__cpuid3(void) +{ + int info[4]; + __cpuid(info,1); + return info[3]; +} +#else +static int stbi__cpuid3(void) +{ + int res; + __asm { + mov eax,1 + cpuid + mov res,edx + } + return res; +} +#endif + +#define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name + +#if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) +static int stbi__sse2_available(void) +{ + int info3 = stbi__cpuid3(); + return ((info3 >> 26) & 1) != 0; +} +#endif + +#else // assume GCC-style if not VC++ +#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) + +#if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) +static int stbi__sse2_available(void) +{ + // If we're even attempting to compile this on GCC/Clang, that means + // -msse2 is on, which means the compiler is allowed to use SSE2 + // instructions at will, and so are we. + return 1; +} +#endif + +#endif +#endif + +// ARM NEON +#if defined(STBI_NO_SIMD) && defined(STBI_NEON) +#undef STBI_NEON +#endif + +#ifdef STBI_NEON +#include +#ifdef _MSC_VER +#define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name +#else +#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) +#endif +#endif + +#ifndef STBI_SIMD_ALIGN +#define STBI_SIMD_ALIGN(type, name) type name +#endif + +#ifndef STBI_MAX_DIMENSIONS +#define STBI_MAX_DIMENSIONS (1 << 24) +#endif + +/////////////////////////////////////////////// +// +// stbi__context struct and start_xxx functions + +// stbi__context structure is our basic context used by all images, so it +// contains all the IO context, plus some basic image information +typedef struct +{ + stbi__uint32 img_x, img_y; + int img_n, img_out_n; + + stbi_io_callbacks io; + void *io_user_data; + + int read_from_callbacks; + int buflen; + stbi_uc buffer_start[128]; + int callback_already_read; + + stbi_uc *img_buffer, *img_buffer_end; + stbi_uc *img_buffer_original, *img_buffer_original_end; +} stbi__context; + + +static void stbi__refill_buffer(stbi__context *s); + +// initialize a memory-decode context +static void stbi__start_mem(stbi__context *s, stbi_uc const *buffer, int len) +{ + s->io.read = NULL; + s->read_from_callbacks = 0; + s->callback_already_read = 0; + s->img_buffer = s->img_buffer_original = (stbi_uc *) buffer; + s->img_buffer_end = s->img_buffer_original_end = (stbi_uc *) buffer+len; +} + +// initialize a callback-based context +static void stbi__start_callbacks(stbi__context *s, stbi_io_callbacks *c, void *user) +{ + s->io = *c; + s->io_user_data = user; + s->buflen = sizeof(s->buffer_start); + s->read_from_callbacks = 1; + s->callback_already_read = 0; + s->img_buffer = s->img_buffer_original = s->buffer_start; + stbi__refill_buffer(s); + s->img_buffer_original_end = s->img_buffer_end; +} + +#ifndef STBI_NO_STDIO + +static int stbi__stdio_read(void *user, char *data, int size) +{ + return (int) fread(data,1,size,(FILE*) user); +} + +static void stbi__stdio_skip(void *user, int n) +{ + int ch; + fseek((FILE*) user, n, SEEK_CUR); + ch = fgetc((FILE*) user); /* have to read a byte to reset feof()'s flag */ + if (ch != EOF) { + ungetc(ch, (FILE *) user); /* push byte back onto stream if valid. */ + } +} + +static int stbi__stdio_eof(void *user) +{ + return feof((FILE*) user) || ferror((FILE *) user); +} + +static stbi_io_callbacks stbi__stdio_callbacks = +{ + stbi__stdio_read, + stbi__stdio_skip, + stbi__stdio_eof, +}; + +static void stbi__start_file(stbi__context *s, FILE *f) +{ + stbi__start_callbacks(s, &stbi__stdio_callbacks, (void *) f); +} + +//static void stop_file(stbi__context *s) { } + +#endif // !STBI_NO_STDIO + +static void stbi__rewind(stbi__context *s) +{ + // conceptually rewind SHOULD rewind to the beginning of the stream, + // but we just rewind to the beginning of the initial buffer, because + // we only use it after doing 'test', which only ever looks at at most 92 bytes + s->img_buffer = s->img_buffer_original; + s->img_buffer_end = s->img_buffer_original_end; +} + +enum +{ + STBI_ORDER_RGB, + STBI_ORDER_BGR +}; + +typedef struct +{ + int bits_per_channel; + int num_channels; + int channel_order; +} stbi__result_info; + +#ifndef STBI_NO_JPEG +static int stbi__jpeg_test(stbi__context *s); +static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PNG +static int stbi__png_test(stbi__context *s); +static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__png_is16(stbi__context *s); +#endif + +#ifndef STBI_NO_BMP +static int stbi__bmp_test(stbi__context *s); +static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_TGA +static int stbi__tga_test(stbi__context *s); +static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PSD +static int stbi__psd_test(stbi__context *s); +static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc); +static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__psd_is16(stbi__context *s); +#endif + +#ifndef STBI_NO_HDR +static int stbi__hdr_test(stbi__context *s); +static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PIC +static int stbi__pic_test(stbi__context *s); +static void *stbi__pic_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_GIF +static int stbi__gif_test(stbi__context *s); +static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, int *z, int *comp, int req_comp); +static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PNM +static int stbi__pnm_test(stbi__context *s); +static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__pnm_is16(stbi__context *s); +#endif + +static +#ifdef STBI_THREAD_LOCAL +STBI_THREAD_LOCAL +#endif +const char *stbi__g_failure_reason; + +STBIDEF const char *stbi_failure_reason(void) +{ + return stbi__g_failure_reason; +} + +#ifndef STBI_NO_FAILURE_STRINGS +static int stbi__err(const char *str) +{ + stbi__g_failure_reason = str; + return 0; +} +#endif + +static void *stbi__malloc(size_t size) +{ + return STBI_MALLOC(size); +} + +// stb_image uses ints pervasively, including for offset calculations. +// therefore the largest decoded image size we can support with the +// current code, even on 64-bit targets, is INT_MAX. this is not a +// significant limitation for the intended use case. +// +// we do, however, need to make sure our size calculations don't +// overflow. hence a few helper functions for size calculations that +// multiply integers together, making sure that they're non-negative +// and no overflow occurs. + +// return 1 if the sum is valid, 0 on overflow. +// negative terms are considered invalid. +static int stbi__addsizes_valid(int a, int b) +{ + if (b < 0) return 0; + // now 0 <= b <= INT_MAX, hence also + // 0 <= INT_MAX - b <= INTMAX. + // And "a + b <= INT_MAX" (which might overflow) is the + // same as a <= INT_MAX - b (no overflow) + return a <= INT_MAX - b; +} + +// returns 1 if the product is valid, 0 on overflow. +// negative factors are considered invalid. +static int stbi__mul2sizes_valid(int a, int b) +{ + if (a < 0 || b < 0) return 0; + if (b == 0) return 1; // mul-by-0 is always safe + // portable way to check for no overflows in a*b + return a <= INT_MAX/b; +} + +#if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) +// returns 1 if "a*b + add" has no negative terms/factors and doesn't overflow +static int stbi__mad2sizes_valid(int a, int b, int add) +{ + return stbi__mul2sizes_valid(a, b) && stbi__addsizes_valid(a*b, add); +} +#endif + +// returns 1 if "a*b*c + add" has no negative terms/factors and doesn't overflow +static int stbi__mad3sizes_valid(int a, int b, int c, int add) +{ + return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) && + stbi__addsizes_valid(a*b*c, add); +} + +// returns 1 if "a*b*c*d + add" has no negative terms/factors and doesn't overflow +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) || !defined(STBI_NO_PNM) +static int stbi__mad4sizes_valid(int a, int b, int c, int d, int add) +{ + return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) && + stbi__mul2sizes_valid(a*b*c, d) && stbi__addsizes_valid(a*b*c*d, add); +} +#endif + +#if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) +// mallocs with size overflow checking +static void *stbi__malloc_mad2(int a, int b, int add) +{ + if (!stbi__mad2sizes_valid(a, b, add)) return NULL; + return stbi__malloc(a*b + add); +} +#endif + +static void *stbi__malloc_mad3(int a, int b, int c, int add) +{ + if (!stbi__mad3sizes_valid(a, b, c, add)) return NULL; + return stbi__malloc(a*b*c + add); +} + +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) || !defined(STBI_NO_PNM) +static void *stbi__malloc_mad4(int a, int b, int c, int d, int add) +{ + if (!stbi__mad4sizes_valid(a, b, c, d, add)) return NULL; + return stbi__malloc(a*b*c*d + add); +} +#endif + +// stbi__err - error +// stbi__errpf - error returning pointer to float +// stbi__errpuc - error returning pointer to unsigned char + +#ifdef STBI_NO_FAILURE_STRINGS + #define stbi__err(x,y) 0 +#elif defined(STBI_FAILURE_USERMSG) + #define stbi__err(x,y) stbi__err(y) +#else + #define stbi__err(x,y) stbi__err(x) +#endif + +#define stbi__errpf(x,y) ((float *)(size_t) (stbi__err(x,y)?NULL:NULL)) +#define stbi__errpuc(x,y) ((unsigned char *)(size_t) (stbi__err(x,y)?NULL:NULL)) + +STBIDEF void stbi_image_free(void *retval_from_stbi_load) +{ + STBI_FREE(retval_from_stbi_load); +} + +#ifndef STBI_NO_LINEAR +static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp); +#endif + +#ifndef STBI_NO_HDR +static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp); +#endif + +static int stbi__vertically_flip_on_load_global = 0; + +STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip) +{ + stbi__vertically_flip_on_load_global = flag_true_if_should_flip; +} + +#ifndef STBI_THREAD_LOCAL +#define stbi__vertically_flip_on_load stbi__vertically_flip_on_load_global +#else +static STBI_THREAD_LOCAL int stbi__vertically_flip_on_load_local, stbi__vertically_flip_on_load_set; + +STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip) +{ + stbi__vertically_flip_on_load_local = flag_true_if_should_flip; + stbi__vertically_flip_on_load_set = 1; +} + +#define stbi__vertically_flip_on_load (stbi__vertically_flip_on_load_set \ + ? stbi__vertically_flip_on_load_local \ + : stbi__vertically_flip_on_load_global) +#endif // STBI_THREAD_LOCAL + +static void *stbi__load_main(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc) +{ + memset(ri, 0, sizeof(*ri)); // make sure it's initialized if we add new fields + ri->bits_per_channel = 8; // default is 8 so most paths don't have to be changed + ri->channel_order = STBI_ORDER_RGB; // all current input & output are this, but this is here so we can add BGR order + ri->num_channels = 0; + + // test the formats with a very explicit header first (at least a FOURCC + // or distinctive magic number first) + #ifndef STBI_NO_PNG + if (stbi__png_test(s)) return stbi__png_load(s,x,y,comp,req_comp, ri); + #endif + #ifndef STBI_NO_BMP + if (stbi__bmp_test(s)) return stbi__bmp_load(s,x,y,comp,req_comp, ri); + #endif + #ifndef STBI_NO_GIF + if (stbi__gif_test(s)) return stbi__gif_load(s,x,y,comp,req_comp, ri); + #endif + #ifndef STBI_NO_PSD + if (stbi__psd_test(s)) return stbi__psd_load(s,x,y,comp,req_comp, ri, bpc); + #else + STBI_NOTUSED(bpc); + #endif + #ifndef STBI_NO_PIC + if (stbi__pic_test(s)) return stbi__pic_load(s,x,y,comp,req_comp, ri); + #endif + + // then the formats that can end up attempting to load with just 1 or 2 + // bytes matching expectations; these are prone to false positives, so + // try them later + #ifndef STBI_NO_JPEG + if (stbi__jpeg_test(s)) return stbi__jpeg_load(s,x,y,comp,req_comp, ri); + #endif + #ifndef STBI_NO_PNM + if (stbi__pnm_test(s)) return stbi__pnm_load(s,x,y,comp,req_comp, ri); + #endif + + #ifndef STBI_NO_HDR + if (stbi__hdr_test(s)) { + float *hdr = stbi__hdr_load(s, x,y,comp,req_comp, ri); + return stbi__hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp); + } + #endif + + #ifndef STBI_NO_TGA + // test tga last because it's a crappy test! + if (stbi__tga_test(s)) + return stbi__tga_load(s,x,y,comp,req_comp, ri); + #endif + + return stbi__errpuc("unknown image type", "Image not of any known type, or corrupt"); +} + +static stbi_uc *stbi__convert_16_to_8(stbi__uint16 *orig, int w, int h, int channels) +{ + int i; + int img_len = w * h * channels; + stbi_uc *reduced; + + reduced = (stbi_uc *) stbi__malloc(img_len); + if (reduced == NULL) return stbi__errpuc("outofmem", "Out of memory"); + + for (i = 0; i < img_len; ++i) + reduced[i] = (stbi_uc)((orig[i] >> 8) & 0xFF); // top half of each byte is sufficient approx of 16->8 bit scaling + + STBI_FREE(orig); + return reduced; +} + +static stbi__uint16 *stbi__convert_8_to_16(stbi_uc *orig, int w, int h, int channels) +{ + int i; + int img_len = w * h * channels; + stbi__uint16 *enlarged; + + enlarged = (stbi__uint16 *) stbi__malloc(img_len*2); + if (enlarged == NULL) return (stbi__uint16 *) stbi__errpuc("outofmem", "Out of memory"); + + for (i = 0; i < img_len; ++i) + enlarged[i] = (stbi__uint16)((orig[i] << 8) + orig[i]); // replicate to high and low byte, maps 0->0, 255->0xffff + + STBI_FREE(orig); + return enlarged; +} + +static void stbi__vertical_flip(void *image, int w, int h, int bytes_per_pixel) +{ + int row; + size_t bytes_per_row = (size_t)w * bytes_per_pixel; + stbi_uc temp[2048]; + stbi_uc *bytes = (stbi_uc *)image; + + for (row = 0; row < (h>>1); row++) { + stbi_uc *row0 = bytes + row*bytes_per_row; + stbi_uc *row1 = bytes + (h - row - 1)*bytes_per_row; + // swap row0 with row1 + size_t bytes_left = bytes_per_row; + while (bytes_left) { + size_t bytes_copy = (bytes_left < sizeof(temp)) ? bytes_left : sizeof(temp); + memcpy(temp, row0, bytes_copy); + memcpy(row0, row1, bytes_copy); + memcpy(row1, temp, bytes_copy); + row0 += bytes_copy; + row1 += bytes_copy; + bytes_left -= bytes_copy; + } + } +} + +#ifndef STBI_NO_GIF +static void stbi__vertical_flip_slices(void *image, int w, int h, int z, int bytes_per_pixel) +{ + int slice; + int slice_size = w * h * bytes_per_pixel; + + stbi_uc *bytes = (stbi_uc *)image; + for (slice = 0; slice < z; ++slice) { + stbi__vertical_flip(bytes, w, h, bytes_per_pixel); + bytes += slice_size; + } +} +#endif + +static unsigned char *stbi__load_and_postprocess_8bit(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + stbi__result_info ri; + void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 8); + + if (result == NULL) + return NULL; + + // it is the responsibility of the loaders to make sure we get either 8 or 16 bit. + STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); + + if (ri.bits_per_channel != 8) { + result = stbi__convert_16_to_8((stbi__uint16 *) result, *x, *y, req_comp == 0 ? *comp : req_comp); + ri.bits_per_channel = 8; + } + + // @TODO: move stbi__convert_format to here + + if (stbi__vertically_flip_on_load) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi_uc)); + } + + return (unsigned char *) result; +} + +static stbi__uint16 *stbi__load_and_postprocess_16bit(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + stbi__result_info ri; + void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 16); + + if (result == NULL) + return NULL; + + // it is the responsibility of the loaders to make sure we get either 8 or 16 bit. + STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); + + if (ri.bits_per_channel != 16) { + result = stbi__convert_8_to_16((stbi_uc *) result, *x, *y, req_comp == 0 ? *comp : req_comp); + ri.bits_per_channel = 16; + } + + // @TODO: move stbi__convert_format16 to here + // @TODO: special case RGB-to-Y (and RGBA-to-YA) for 8-bit-to-16-bit case to keep more precision + + if (stbi__vertically_flip_on_load) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi__uint16)); + } + + return (stbi__uint16 *) result; +} + +#if !defined(STBI_NO_HDR) && !defined(STBI_NO_LINEAR) +static void stbi__float_postprocess(float *result, int *x, int *y, int *comp, int req_comp) +{ + if (stbi__vertically_flip_on_load && result != NULL) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(float)); + } +} +#endif + +#ifndef STBI_NO_STDIO + +#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) +STBI_EXTERN __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int cp, unsigned long flags, const char *str, int cbmb, wchar_t *widestr, int cchwide); +STBI_EXTERN __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, const wchar_t *widestr, int cchwide, char *str, int cbmb, const char *defchar, int *used_default); +#endif + +#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) +STBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input) +{ + return WideCharToMultiByte(65001 /* UTF8 */, 0, input, -1, buffer, (int) bufferlen, NULL, NULL); +} +#endif + +static FILE *stbi__fopen(char const *filename, char const *mode) +{ + FILE *f; +#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) + wchar_t wMode[64]; + wchar_t wFilename[1024]; + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, sizeof(wFilename)/sizeof(*wFilename))) + return 0; + + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, sizeof(wMode)/sizeof(*wMode))) + return 0; + +#if defined(_MSC_VER) && _MSC_VER >= 1400 + if (0 != _wfopen_s(&f, wFilename, wMode)) + f = 0; +#else + f = _wfopen(wFilename, wMode); +#endif + +#elif defined(_MSC_VER) && _MSC_VER >= 1400 + if (0 != fopen_s(&f, filename, mode)) + f=0; +#else + f = fopen(filename, mode); +#endif + return f; +} + + +STBIDEF stbi_uc *stbi_load(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + FILE *f = stbi__fopen(filename, "rb"); + unsigned char *result; + if (!f) return stbi__errpuc("can't fopen", "Unable to open file"); + result = stbi_load_from_file(f,x,y,comp,req_comp); + fclose(f); + return result; +} + +STBIDEF stbi_uc *stbi_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + unsigned char *result; + stbi__context s; + stbi__start_file(&s,f); + result = stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); + if (result) { + // need to 'unget' all the characters in the IO buffer + fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR); + } + return result; +} + +STBIDEF stbi__uint16 *stbi_load_from_file_16(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi__uint16 *result; + stbi__context s; + stbi__start_file(&s,f); + result = stbi__load_and_postprocess_16bit(&s,x,y,comp,req_comp); + if (result) { + // need to 'unget' all the characters in the IO buffer + fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR); + } + return result; +} + +STBIDEF stbi_us *stbi_load_16(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + FILE *f = stbi__fopen(filename, "rb"); + stbi__uint16 *result; + if (!f) return (stbi_us *) stbi__errpuc("can't fopen", "Unable to open file"); + result = stbi_load_from_file_16(f,x,y,comp,req_comp); + fclose(f); + return result; +} + + +#endif //!STBI_NO_STDIO + +STBIDEF stbi_us *stbi_load_16_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__load_and_postprocess_16bit(&s,x,y,channels_in_file,desired_channels); +} + +STBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *)clbk, user); + return stbi__load_and_postprocess_16bit(&s,x,y,channels_in_file,desired_channels); +} + +STBIDEF stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); +} + +STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); + return stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); +} + +#ifndef STBI_NO_GIF +STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, int **delays, int *x, int *y, int *z, int *comp, int req_comp) +{ + unsigned char *result; + stbi__context s; + stbi__start_mem(&s,buffer,len); + + result = (unsigned char*) stbi__load_gif_main(&s, delays, x, y, z, comp, req_comp); + if (stbi__vertically_flip_on_load) { + stbi__vertical_flip_slices( result, *x, *y, *z, *comp ); + } + + return result; +} +#endif + +#ifndef STBI_NO_LINEAR +static float *stbi__loadf_main(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + unsigned char *data; + #ifndef STBI_NO_HDR + if (stbi__hdr_test(s)) { + stbi__result_info ri; + float *hdr_data = stbi__hdr_load(s,x,y,comp,req_comp, &ri); + if (hdr_data) + stbi__float_postprocess(hdr_data,x,y,comp,req_comp); + return hdr_data; + } + #endif + data = stbi__load_and_postprocess_8bit(s, x, y, comp, req_comp); + if (data) + return stbi__ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp); + return stbi__errpf("unknown image type", "Image not of any known type, or corrupt"); +} + +STBIDEF float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__loadf_main(&s,x,y,comp,req_comp); +} + +STBIDEF float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); + return stbi__loadf_main(&s,x,y,comp,req_comp); +} + +#ifndef STBI_NO_STDIO +STBIDEF float *stbi_loadf(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + float *result; + FILE *f = stbi__fopen(filename, "rb"); + if (!f) return stbi__errpf("can't fopen", "Unable to open file"); + result = stbi_loadf_from_file(f,x,y,comp,req_comp); + fclose(f); + return result; +} + +STBIDEF float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_file(&s,f); + return stbi__loadf_main(&s,x,y,comp,req_comp); +} +#endif // !STBI_NO_STDIO + +#endif // !STBI_NO_LINEAR + +// these is-hdr-or-not is defined independent of whether STBI_NO_LINEAR is +// defined, for API simplicity; if STBI_NO_LINEAR is defined, it always +// reports false! + +STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len) +{ + #ifndef STBI_NO_HDR + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__hdr_test(&s); + #else + STBI_NOTUSED(buffer); + STBI_NOTUSED(len); + return 0; + #endif +} + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_is_hdr (char const *filename) +{ + FILE *f = stbi__fopen(filename, "rb"); + int result=0; + if (f) { + result = stbi_is_hdr_from_file(f); + fclose(f); + } + return result; +} + +STBIDEF int stbi_is_hdr_from_file(FILE *f) +{ + #ifndef STBI_NO_HDR + long pos = ftell(f); + int res; + stbi__context s; + stbi__start_file(&s,f); + res = stbi__hdr_test(&s); + fseek(f, pos, SEEK_SET); + return res; + #else + STBI_NOTUSED(f); + return 0; + #endif +} +#endif // !STBI_NO_STDIO + +STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user) +{ + #ifndef STBI_NO_HDR + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); + return stbi__hdr_test(&s); + #else + STBI_NOTUSED(clbk); + STBI_NOTUSED(user); + return 0; + #endif +} + +#ifndef STBI_NO_LINEAR +static float stbi__l2h_gamma=2.2f, stbi__l2h_scale=1.0f; + +STBIDEF void stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = gamma; } +STBIDEF void stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = scale; } +#endif + +static float stbi__h2l_gamma_i=1.0f/2.2f, stbi__h2l_scale_i=1.0f; + +STBIDEF void stbi_hdr_to_ldr_gamma(float gamma) { stbi__h2l_gamma_i = 1/gamma; } +STBIDEF void stbi_hdr_to_ldr_scale(float scale) { stbi__h2l_scale_i = 1/scale; } + + +////////////////////////////////////////////////////////////////////////////// +// +// Common code used by all image loaders +// + +enum +{ + STBI__SCAN_load=0, + STBI__SCAN_type, + STBI__SCAN_header +}; + +static void stbi__refill_buffer(stbi__context *s) +{ + int n = (s->io.read)(s->io_user_data,(char*)s->buffer_start,s->buflen); + s->callback_already_read += (int) (s->img_buffer - s->img_buffer_original); + if (n == 0) { + // at end of file, treat same as if from memory, but need to handle case + // where s->img_buffer isn't pointing to safe memory, e.g. 0-byte file + s->read_from_callbacks = 0; + s->img_buffer = s->buffer_start; + s->img_buffer_end = s->buffer_start+1; + *s->img_buffer = 0; + } else { + s->img_buffer = s->buffer_start; + s->img_buffer_end = s->buffer_start + n; + } +} + +stbi_inline static stbi_uc stbi__get8(stbi__context *s) +{ + if (s->img_buffer < s->img_buffer_end) + return *s->img_buffer++; + if (s->read_from_callbacks) { + stbi__refill_buffer(s); + return *s->img_buffer++; + } + return 0; +} + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_HDR) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +// nothing +#else +stbi_inline static int stbi__at_eof(stbi__context *s) +{ + if (s->io.read) { + if (!(s->io.eof)(s->io_user_data)) return 0; + // if feof() is true, check if buffer = end + // special case: we've only got the special 0 character at the end + if (s->read_from_callbacks == 0) return 1; + } + + return s->img_buffer >= s->img_buffer_end; +} +#endif + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) +// nothing +#else +static void stbi__skip(stbi__context *s, int n) +{ + if (n == 0) return; // already there! + if (n < 0) { + s->img_buffer = s->img_buffer_end; + return; + } + if (s->io.read) { + int blen = (int) (s->img_buffer_end - s->img_buffer); + if (blen < n) { + s->img_buffer = s->img_buffer_end; + (s->io.skip)(s->io_user_data, n - blen); + return; + } + } + s->img_buffer += n; +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_TGA) && defined(STBI_NO_HDR) && defined(STBI_NO_PNM) +// nothing +#else +static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n) +{ + if (s->io.read) { + int blen = (int) (s->img_buffer_end - s->img_buffer); + if (blen < n) { + int res, count; + + memcpy(buffer, s->img_buffer, blen); + + count = (s->io.read)(s->io_user_data, (char*) buffer + blen, n - blen); + res = (count == (n-blen)); + s->img_buffer = s->img_buffer_end; + return res; + } + } + + if (s->img_buffer+n <= s->img_buffer_end) { + memcpy(buffer, s->img_buffer, n); + s->img_buffer += n; + return 1; + } else + return 0; +} +#endif + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) +// nothing +#else +static int stbi__get16be(stbi__context *s) +{ + int z = stbi__get8(s); + return (z << 8) + stbi__get8(s); +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) +// nothing +#else +static stbi__uint32 stbi__get32be(stbi__context *s) +{ + stbi__uint32 z = stbi__get16be(s); + return (z << 16) + stbi__get16be(s); +} +#endif + +#if defined(STBI_NO_BMP) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) +// nothing +#else +static int stbi__get16le(stbi__context *s) +{ + int z = stbi__get8(s); + return z + (stbi__get8(s) << 8); +} +#endif + +#ifndef STBI_NO_BMP +static stbi__uint32 stbi__get32le(stbi__context *s) +{ + stbi__uint32 z = stbi__get16le(s); + z += (stbi__uint32)stbi__get16le(s) << 16; + return z; +} +#endif + +#define STBI__BYTECAST(x) ((stbi_uc) ((x) & 255)) // truncate int to byte without warnings + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +// nothing +#else +////////////////////////////////////////////////////////////////////////////// +// +// generic converter from built-in img_n to req_comp +// individual types do this automatically as much as possible (e.g. jpeg +// does all cases internally since it needs to colorspace convert anyway, +// and it never has alpha, so very few cases ). png can automatically +// interleave an alpha=255 channel, but falls back to this for other cases +// +// assume data buffer is malloced, so malloc a new one and free that one +// only failure mode is malloc failing + +static stbi_uc stbi__compute_y(int r, int g, int b) +{ + return (stbi_uc) (((r*77) + (g*150) + (29*b)) >> 8); +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +// nothing +#else +static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int req_comp, unsigned int x, unsigned int y) +{ + int i,j; + unsigned char *good; + + if (req_comp == img_n) return data; + STBI_ASSERT(req_comp >= 1 && req_comp <= 4); + + good = (unsigned char *) stbi__malloc_mad3(req_comp, x, y, 0); + if (good == NULL) { + STBI_FREE(data); + return stbi__errpuc("outofmem", "Out of memory"); + } + + for (j=0; j < (int) y; ++j) { + unsigned char *src = data + j * x * img_n ; + unsigned char *dest = good + j * x * req_comp; + + #define STBI__COMBO(a,b) ((a)*8+(b)) + #define STBI__CASE(a,b) case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp components; + // avoid switch per pixel, so use switch per scanline and massive macros + switch (STBI__COMBO(img_n, req_comp)) { + STBI__CASE(1,2) { dest[0]=src[0]; dest[1]=255; } break; + STBI__CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=255; } break; + STBI__CASE(2,1) { dest[0]=src[0]; } break; + STBI__CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=src[1]; } break; + STBI__CASE(3,4) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2];dest[3]=255; } break; + STBI__CASE(3,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break; + STBI__CASE(3,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); dest[1] = 255; } break; + STBI__CASE(4,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break; + STBI__CASE(4,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); dest[1] = src[3]; } break; + STBI__CASE(4,3) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2]; } break; + default: STBI_ASSERT(0); STBI_FREE(data); STBI_FREE(good); return stbi__errpuc("unsupported", "Unsupported format conversion"); + } + #undef STBI__CASE + } + + STBI_FREE(data); + return good; +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) +// nothing +#else +static stbi__uint16 stbi__compute_y_16(int r, int g, int b) +{ + return (stbi__uint16) (((r*77) + (g*150) + (29*b)) >> 8); +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) +// nothing +#else +static stbi__uint16 *stbi__convert_format16(stbi__uint16 *data, int img_n, int req_comp, unsigned int x, unsigned int y) +{ + int i,j; + stbi__uint16 *good; + + if (req_comp == img_n) return data; + STBI_ASSERT(req_comp >= 1 && req_comp <= 4); + + good = (stbi__uint16 *) stbi__malloc(req_comp * x * y * 2); + if (good == NULL) { + STBI_FREE(data); + return (stbi__uint16 *) stbi__errpuc("outofmem", "Out of memory"); + } + + for (j=0; j < (int) y; ++j) { + stbi__uint16 *src = data + j * x * img_n ; + stbi__uint16 *dest = good + j * x * req_comp; + + #define STBI__COMBO(a,b) ((a)*8+(b)) + #define STBI__CASE(a,b) case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp components; + // avoid switch per pixel, so use switch per scanline and massive macros + switch (STBI__COMBO(img_n, req_comp)) { + STBI__CASE(1,2) { dest[0]=src[0]; dest[1]=0xffff; } break; + STBI__CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=0xffff; } break; + STBI__CASE(2,1) { dest[0]=src[0]; } break; + STBI__CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=src[1]; } break; + STBI__CASE(3,4) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2];dest[3]=0xffff; } break; + STBI__CASE(3,1) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); } break; + STBI__CASE(3,2) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); dest[1] = 0xffff; } break; + STBI__CASE(4,1) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); } break; + STBI__CASE(4,2) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); dest[1] = src[3]; } break; + STBI__CASE(4,3) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2]; } break; + default: STBI_ASSERT(0); STBI_FREE(data); STBI_FREE(good); return (stbi__uint16*) stbi__errpuc("unsupported", "Unsupported format conversion"); + } + #undef STBI__CASE + } + + STBI_FREE(data); + return good; +} +#endif + +#ifndef STBI_NO_LINEAR +static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp) +{ + int i,k,n; + float *output; + if (!data) return NULL; + output = (float *) stbi__malloc_mad4(x, y, comp, sizeof(float), 0); + if (output == NULL) { STBI_FREE(data); return stbi__errpf("outofmem", "Out of memory"); } + // compute number of non-alpha components + if (comp & 1) n = comp; else n = comp-1; + for (i=0; i < x*y; ++i) { + for (k=0; k < n; ++k) { + output[i*comp + k] = (float) (pow(data[i*comp+k]/255.0f, stbi__l2h_gamma) * stbi__l2h_scale); + } + } + if (n < comp) { + for (i=0; i < x*y; ++i) { + output[i*comp + n] = data[i*comp + n]/255.0f; + } + } + STBI_FREE(data); + return output; +} +#endif + +#ifndef STBI_NO_HDR +#define stbi__float2int(x) ((int) (x)) +static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp) +{ + int i,k,n; + stbi_uc *output; + if (!data) return NULL; + output = (stbi_uc *) stbi__malloc_mad3(x, y, comp, 0); + if (output == NULL) { STBI_FREE(data); return stbi__errpuc("outofmem", "Out of memory"); } + // compute number of non-alpha components + if (comp & 1) n = comp; else n = comp-1; + for (i=0; i < x*y; ++i) { + for (k=0; k < n; ++k) { + float z = (float) pow(data[i*comp+k]*stbi__h2l_scale_i, stbi__h2l_gamma_i) * 255 + 0.5f; + if (z < 0) z = 0; + if (z > 255) z = 255; + output[i*comp + k] = (stbi_uc) stbi__float2int(z); + } + if (k < comp) { + float z = data[i*comp+k] * 255 + 0.5f; + if (z < 0) z = 0; + if (z > 255) z = 255; + output[i*comp + k] = (stbi_uc) stbi__float2int(z); + } + } + STBI_FREE(data); + return output; +} +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// "baseline" JPEG/JFIF decoder +// +// simple implementation +// - doesn't support delayed output of y-dimension +// - simple interface (only one output format: 8-bit interleaved RGB) +// - doesn't try to recover corrupt jpegs +// - doesn't allow partial loading, loading multiple at once +// - still fast on x86 (copying globals into locals doesn't help x86) +// - allocates lots of intermediate memory (full size of all components) +// - non-interleaved case requires this anyway +// - allows good upsampling (see next) +// high-quality +// - upsampled channels are bilinearly interpolated, even across blocks +// - quality integer IDCT derived from IJG's 'slow' +// performance +// - fast huffman; reasonable integer IDCT +// - some SIMD kernels for common paths on targets with SSE2/NEON +// - uses a lot of intermediate memory, could cache poorly + +#ifndef STBI_NO_JPEG + +// huffman decoding acceleration +#define FAST_BITS 9 // larger handles more cases; smaller stomps less cache + +typedef struct +{ + stbi_uc fast[1 << FAST_BITS]; + // weirdly, repacking this into AoS is a 10% speed loss, instead of a win + stbi__uint16 code[256]; + stbi_uc values[256]; + stbi_uc size[257]; + unsigned int maxcode[18]; + int delta[17]; // old 'firstsymbol' - old 'firstcode' +} stbi__huffman; + +typedef struct +{ + stbi__context *s; + stbi__huffman huff_dc[4]; + stbi__huffman huff_ac[4]; + stbi__uint16 dequant[4][64]; + stbi__int16 fast_ac[4][1 << FAST_BITS]; + +// sizes for components, interleaved MCUs + int img_h_max, img_v_max; + int img_mcu_x, img_mcu_y; + int img_mcu_w, img_mcu_h; + +// definition of jpeg image component + struct + { + int id; + int h,v; + int tq; + int hd,ha; + int dc_pred; + + int x,y,w2,h2; + stbi_uc *data; + void *raw_data, *raw_coeff; + stbi_uc *linebuf; + short *coeff; // progressive only + int coeff_w, coeff_h; // number of 8x8 coefficient blocks + } img_comp[4]; + + stbi__uint32 code_buffer; // jpeg entropy-coded buffer + int code_bits; // number of valid bits + unsigned char marker; // marker seen while filling entropy buffer + int nomore; // flag if we saw a marker so must stop + + int progressive; + int spec_start; + int spec_end; + int succ_high; + int succ_low; + int eob_run; + int jfif; + int app14_color_transform; // Adobe APP14 tag + int rgb; + + int scan_n, order[4]; + int restart_interval, todo; + +// kernels + void (*idct_block_kernel)(stbi_uc *out, int out_stride, short data[64]); + void (*YCbCr_to_RGB_kernel)(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step); + stbi_uc *(*resample_row_hv_2_kernel)(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs); +} stbi__jpeg; + +static int stbi__build_huffman(stbi__huffman *h, int *count) +{ + int i,j,k=0; + unsigned int code; + // build size list for each symbol (from JPEG spec) + for (i=0; i < 16; ++i) + for (j=0; j < count[i]; ++j) + h->size[k++] = (stbi_uc) (i+1); + h->size[k] = 0; + + // compute actual symbols (from jpeg spec) + code = 0; + k = 0; + for(j=1; j <= 16; ++j) { + // compute delta to add to code to compute symbol id + h->delta[j] = k - code; + if (h->size[k] == j) { + while (h->size[k] == j) + h->code[k++] = (stbi__uint16) (code++); + if (code-1 >= (1u << j)) return stbi__err("bad code lengths","Corrupt JPEG"); + } + // compute largest code + 1 for this size, preshifted as needed later + h->maxcode[j] = code << (16-j); + code <<= 1; + } + h->maxcode[j] = 0xffffffff; + + // build non-spec acceleration table; 255 is flag for not-accelerated + memset(h->fast, 255, 1 << FAST_BITS); + for (i=0; i < k; ++i) { + int s = h->size[i]; + if (s <= FAST_BITS) { + int c = h->code[i] << (FAST_BITS-s); + int m = 1 << (FAST_BITS-s); + for (j=0; j < m; ++j) { + h->fast[c+j] = (stbi_uc) i; + } + } + } + return 1; +} + +// build a table that decodes both magnitude and value of small ACs in +// one go. +static void stbi__build_fast_ac(stbi__int16 *fast_ac, stbi__huffman *h) +{ + int i; + for (i=0; i < (1 << FAST_BITS); ++i) { + stbi_uc fast = h->fast[i]; + fast_ac[i] = 0; + if (fast < 255) { + int rs = h->values[fast]; + int run = (rs >> 4) & 15; + int magbits = rs & 15; + int len = h->size[fast]; + + if (magbits && len + magbits <= FAST_BITS) { + // magnitude code followed by receive_extend code + int k = ((i << len) & ((1 << FAST_BITS) - 1)) >> (FAST_BITS - magbits); + int m = 1 << (magbits - 1); + if (k < m) k += (~0U << magbits) + 1; + // if the result is small enough, we can fit it in fast_ac table + if (k >= -128 && k <= 127) + fast_ac[i] = (stbi__int16) ((k * 256) + (run * 16) + (len + magbits)); + } + } + } +} + +static void stbi__grow_buffer_unsafe(stbi__jpeg *j) +{ + do { + unsigned int b = j->nomore ? 0 : stbi__get8(j->s); + if (b == 0xff) { + int c = stbi__get8(j->s); + while (c == 0xff) c = stbi__get8(j->s); // consume fill bytes + if (c != 0) { + j->marker = (unsigned char) c; + j->nomore = 1; + return; + } + } + j->code_buffer |= b << (24 - j->code_bits); + j->code_bits += 8; + } while (j->code_bits <= 24); +} + +// (1 << n) - 1 +static const stbi__uint32 stbi__bmask[17]={0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535}; + +// decode a jpeg huffman value from the bitstream +stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg *j, stbi__huffman *h) +{ + unsigned int temp; + int c,k; + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + + // look at the top FAST_BITS and determine what symbol ID it is, + // if the code is <= FAST_BITS + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); + k = h->fast[c]; + if (k < 255) { + int s = h->size[k]; + if (s > j->code_bits) + return -1; + j->code_buffer <<= s; + j->code_bits -= s; + return h->values[k]; + } + + // naive test is to shift the code_buffer down so k bits are + // valid, then test against maxcode. To speed this up, we've + // preshifted maxcode left so that it has (16-k) 0s at the + // end; in other words, regardless of the number of bits, it + // wants to be compared against something shifted to have 16; + // that way we don't need to shift inside the loop. + temp = j->code_buffer >> 16; + for (k=FAST_BITS+1 ; ; ++k) + if (temp < h->maxcode[k]) + break; + if (k == 17) { + // error! code not found + j->code_bits -= 16; + return -1; + } + + if (k > j->code_bits) + return -1; + + // convert the huffman code to the symbol id + c = ((j->code_buffer >> (32 - k)) & stbi__bmask[k]) + h->delta[k]; + STBI_ASSERT((((j->code_buffer) >> (32 - h->size[c])) & stbi__bmask[h->size[c]]) == h->code[c]); + + // convert the id to a symbol + j->code_bits -= k; + j->code_buffer <<= k; + return h->values[c]; +} + +// bias[n] = (-1<code_bits < n) stbi__grow_buffer_unsafe(j); + + sgn = j->code_buffer >> 31; // sign bit always in MSB; 0 if MSB clear (positive), 1 if MSB set (negative) + k = stbi_lrot(j->code_buffer, n); + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + return k + (stbi__jbias[n] & (sgn - 1)); +} + +// get some unsigned bits +stbi_inline static int stbi__jpeg_get_bits(stbi__jpeg *j, int n) +{ + unsigned int k; + if (j->code_bits < n) stbi__grow_buffer_unsafe(j); + k = stbi_lrot(j->code_buffer, n); + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + return k; +} + +stbi_inline static int stbi__jpeg_get_bit(stbi__jpeg *j) +{ + unsigned int k; + if (j->code_bits < 1) stbi__grow_buffer_unsafe(j); + k = j->code_buffer; + j->code_buffer <<= 1; + --j->code_bits; + return k & 0x80000000; +} + +// given a value that's at position X in the zigzag stream, +// where does it appear in the 8x8 matrix coded as row-major? +static const stbi_uc stbi__jpeg_dezigzag[64+15] = +{ + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63, + // let corrupt input sample past end + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63 +}; + +// decode one 64-entry block-- +static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__huffman *hdc, stbi__huffman *hac, stbi__int16 *fac, int b, stbi__uint16 *dequant) +{ + int diff,dc,k; + int t; + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + t = stbi__jpeg_huff_decode(j, hdc); + if (t < 0 || t > 15) return stbi__err("bad huffman code","Corrupt JPEG"); + + // 0 all the ac values now so we can do it 32-bits at a time + memset(data,0,64*sizeof(data[0])); + + diff = t ? stbi__extend_receive(j, t) : 0; + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + data[0] = (short) (dc * dequant[0]); + + // decode AC components, see JPEG spec + k = 1; + do { + unsigned int zig; + int c,r,s; + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); + r = fac[c]; + if (r) { // fast-AC path + k += (r >> 4) & 15; // run + s = r & 15; // combined length + j->code_buffer <<= s; + j->code_bits -= s; + // decode into unzigzag'd location + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) ((r >> 8) * dequant[zig]); + } else { + int rs = stbi__jpeg_huff_decode(j, hac); + if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (rs != 0xf0) break; // end block + k += 16; + } else { + k += r; + // decode into unzigzag'd location + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) (stbi__extend_receive(j,s) * dequant[zig]); + } + } + } while (k < 64); + return 1; +} + +static int stbi__jpeg_decode_block_prog_dc(stbi__jpeg *j, short data[64], stbi__huffman *hdc, int b) +{ + int diff,dc; + int t; + if (j->spec_end != 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + + if (j->succ_high == 0) { + // first scan for DC coefficient, must be first + memset(data,0,64*sizeof(data[0])); // 0 all the ac values now + t = stbi__jpeg_huff_decode(j, hdc); + if (t < 0 || t > 15) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + diff = t ? stbi__extend_receive(j, t) : 0; + + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + data[0] = (short) (dc * (1 << j->succ_low)); + } else { + // refinement scan for DC coefficient + if (stbi__jpeg_get_bit(j)) + data[0] += (short) (1 << j->succ_low); + } + return 1; +} + +// @OPTIMIZE: store non-zigzagged during the decode passes, +// and only de-zigzag when dequantizing +static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64], stbi__huffman *hac, stbi__int16 *fac) +{ + int k; + if (j->spec_start == 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + + if (j->succ_high == 0) { + int shift = j->succ_low; + + if (j->eob_run) { + --j->eob_run; + return 1; + } + + k = j->spec_start; + do { + unsigned int zig; + int c,r,s; + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); + r = fac[c]; + if (r) { // fast-AC path + k += (r >> 4) & 15; // run + s = r & 15; // combined length + j->code_buffer <<= s; + j->code_bits -= s; + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) ((r >> 8) * (1 << shift)); + } else { + int rs = stbi__jpeg_huff_decode(j, hac); + if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (r < 15) { + j->eob_run = (1 << r); + if (r) + j->eob_run += stbi__jpeg_get_bits(j, r); + --j->eob_run; + break; + } + k += 16; + } else { + k += r; + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) (stbi__extend_receive(j,s) * (1 << shift)); + } + } + } while (k <= j->spec_end); + } else { + // refinement scan for these AC coefficients + + short bit = (short) (1 << j->succ_low); + + if (j->eob_run) { + --j->eob_run; + for (k = j->spec_start; k <= j->spec_end; ++k) { + short *p = &data[stbi__jpeg_dezigzag[k]]; + if (*p != 0) + if (stbi__jpeg_get_bit(j)) + if ((*p & bit)==0) { + if (*p > 0) + *p += bit; + else + *p -= bit; + } + } + } else { + k = j->spec_start; + do { + int r,s; + int rs = stbi__jpeg_huff_decode(j, hac); // @OPTIMIZE see if we can use the fast path here, advance-by-r is so slow, eh + if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (r < 15) { + j->eob_run = (1 << r) - 1; + if (r) + j->eob_run += stbi__jpeg_get_bits(j, r); + r = 64; // force end of block + } else { + // r=15 s=0 should write 16 0s, so we just do + // a run of 15 0s and then write s (which is 0), + // so we don't have to do anything special here + } + } else { + if (s != 1) return stbi__err("bad huffman code", "Corrupt JPEG"); + // sign bit + if (stbi__jpeg_get_bit(j)) + s = bit; + else + s = -bit; + } + + // advance by r + while (k <= j->spec_end) { + short *p = &data[stbi__jpeg_dezigzag[k++]]; + if (*p != 0) { + if (stbi__jpeg_get_bit(j)) + if ((*p & bit)==0) { + if (*p > 0) + *p += bit; + else + *p -= bit; + } + } else { + if (r == 0) { + *p = (short) s; + break; + } + --r; + } + } + } while (k <= j->spec_end); + } + } + return 1; +} + +// take a -128..127 value and stbi__clamp it and convert to 0..255 +stbi_inline static stbi_uc stbi__clamp(int x) +{ + // trick to use a single test to catch both cases + if ((unsigned int) x > 255) { + if (x < 0) return 0; + if (x > 255) return 255; + } + return (stbi_uc) x; +} + +#define stbi__f2f(x) ((int) (((x) * 4096 + 0.5))) +#define stbi__fsh(x) ((x) * 4096) + +// derived from jidctint -- DCT_ISLOW +#define STBI__IDCT_1D(s0,s1,s2,s3,s4,s5,s6,s7) \ + int t0,t1,t2,t3,p1,p2,p3,p4,p5,x0,x1,x2,x3; \ + p2 = s2; \ + p3 = s6; \ + p1 = (p2+p3) * stbi__f2f(0.5411961f); \ + t2 = p1 + p3*stbi__f2f(-1.847759065f); \ + t3 = p1 + p2*stbi__f2f( 0.765366865f); \ + p2 = s0; \ + p3 = s4; \ + t0 = stbi__fsh(p2+p3); \ + t1 = stbi__fsh(p2-p3); \ + x0 = t0+t3; \ + x3 = t0-t3; \ + x1 = t1+t2; \ + x2 = t1-t2; \ + t0 = s7; \ + t1 = s5; \ + t2 = s3; \ + t3 = s1; \ + p3 = t0+t2; \ + p4 = t1+t3; \ + p1 = t0+t3; \ + p2 = t1+t2; \ + p5 = (p3+p4)*stbi__f2f( 1.175875602f); \ + t0 = t0*stbi__f2f( 0.298631336f); \ + t1 = t1*stbi__f2f( 2.053119869f); \ + t2 = t2*stbi__f2f( 3.072711026f); \ + t3 = t3*stbi__f2f( 1.501321110f); \ + p1 = p5 + p1*stbi__f2f(-0.899976223f); \ + p2 = p5 + p2*stbi__f2f(-2.562915447f); \ + p3 = p3*stbi__f2f(-1.961570560f); \ + p4 = p4*stbi__f2f(-0.390180644f); \ + t3 += p1+p4; \ + t2 += p2+p3; \ + t1 += p2+p4; \ + t0 += p1+p3; + +static void stbi__idct_block(stbi_uc *out, int out_stride, short data[64]) +{ + int i,val[64],*v=val; + stbi_uc *o; + short *d = data; + + // columns + for (i=0; i < 8; ++i,++d, ++v) { + // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing + if (d[ 8]==0 && d[16]==0 && d[24]==0 && d[32]==0 + && d[40]==0 && d[48]==0 && d[56]==0) { + // no shortcut 0 seconds + // (1|2|3|4|5|6|7)==0 0 seconds + // all separate -0.047 seconds + // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds + int dcterm = d[0]*4; + v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm; + } else { + STBI__IDCT_1D(d[ 0],d[ 8],d[16],d[24],d[32],d[40],d[48],d[56]) + // constants scaled things up by 1<<12; let's bring them back + // down, but keep 2 extra bits of precision + x0 += 512; x1 += 512; x2 += 512; x3 += 512; + v[ 0] = (x0+t3) >> 10; + v[56] = (x0-t3) >> 10; + v[ 8] = (x1+t2) >> 10; + v[48] = (x1-t2) >> 10; + v[16] = (x2+t1) >> 10; + v[40] = (x2-t1) >> 10; + v[24] = (x3+t0) >> 10; + v[32] = (x3-t0) >> 10; + } + } + + for (i=0, v=val, o=out; i < 8; ++i,v+=8,o+=out_stride) { + // no fast case since the first 1D IDCT spread components out + STBI__IDCT_1D(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7]) + // constants scaled things up by 1<<12, plus we had 1<<2 from first + // loop, plus horizontal and vertical each scale by sqrt(8) so together + // we've got an extra 1<<3, so 1<<17 total we need to remove. + // so we want to round that, which means adding 0.5 * 1<<17, + // aka 65536. Also, we'll end up with -128 to 127 that we want + // to encode as 0..255 by adding 128, so we'll add that before the shift + x0 += 65536 + (128<<17); + x1 += 65536 + (128<<17); + x2 += 65536 + (128<<17); + x3 += 65536 + (128<<17); + // tried computing the shifts into temps, or'ing the temps to see + // if any were out of range, but that was slower + o[0] = stbi__clamp((x0+t3) >> 17); + o[7] = stbi__clamp((x0-t3) >> 17); + o[1] = stbi__clamp((x1+t2) >> 17); + o[6] = stbi__clamp((x1-t2) >> 17); + o[2] = stbi__clamp((x2+t1) >> 17); + o[5] = stbi__clamp((x2-t1) >> 17); + o[3] = stbi__clamp((x3+t0) >> 17); + o[4] = stbi__clamp((x3-t0) >> 17); + } +} + +#ifdef STBI_SSE2 +// sse2 integer IDCT. not the fastest possible implementation but it +// produces bit-identical results to the generic C version so it's +// fully "transparent". +static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) +{ + // This is constructed to match our regular (generic) integer IDCT exactly. + __m128i row0, row1, row2, row3, row4, row5, row6, row7; + __m128i tmp; + + // dot product constant: even elems=x, odd elems=y + #define dct_const(x,y) _mm_setr_epi16((x),(y),(x),(y),(x),(y),(x),(y)) + + // out(0) = c0[even]*x + c0[odd]*y (c0, x, y 16-bit, out 32-bit) + // out(1) = c1[even]*x + c1[odd]*y + #define dct_rot(out0,out1, x,y,c0,c1) \ + __m128i c0##lo = _mm_unpacklo_epi16((x),(y)); \ + __m128i c0##hi = _mm_unpackhi_epi16((x),(y)); \ + __m128i out0##_l = _mm_madd_epi16(c0##lo, c0); \ + __m128i out0##_h = _mm_madd_epi16(c0##hi, c0); \ + __m128i out1##_l = _mm_madd_epi16(c0##lo, c1); \ + __m128i out1##_h = _mm_madd_epi16(c0##hi, c1) + + // out = in << 12 (in 16-bit, out 32-bit) + #define dct_widen(out, in) \ + __m128i out##_l = _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), (in)), 4); \ + __m128i out##_h = _mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), (in)), 4) + + // wide add + #define dct_wadd(out, a, b) \ + __m128i out##_l = _mm_add_epi32(a##_l, b##_l); \ + __m128i out##_h = _mm_add_epi32(a##_h, b##_h) + + // wide sub + #define dct_wsub(out, a, b) \ + __m128i out##_l = _mm_sub_epi32(a##_l, b##_l); \ + __m128i out##_h = _mm_sub_epi32(a##_h, b##_h) + + // butterfly a/b, add bias, then shift by "s" and pack + #define dct_bfly32o(out0, out1, a,b,bias,s) \ + { \ + __m128i abiased_l = _mm_add_epi32(a##_l, bias); \ + __m128i abiased_h = _mm_add_epi32(a##_h, bias); \ + dct_wadd(sum, abiased, b); \ + dct_wsub(dif, abiased, b); \ + out0 = _mm_packs_epi32(_mm_srai_epi32(sum_l, s), _mm_srai_epi32(sum_h, s)); \ + out1 = _mm_packs_epi32(_mm_srai_epi32(dif_l, s), _mm_srai_epi32(dif_h, s)); \ + } + + // 8-bit interleave step (for transposes) + #define dct_interleave8(a, b) \ + tmp = a; \ + a = _mm_unpacklo_epi8(a, b); \ + b = _mm_unpackhi_epi8(tmp, b) + + // 16-bit interleave step (for transposes) + #define dct_interleave16(a, b) \ + tmp = a; \ + a = _mm_unpacklo_epi16(a, b); \ + b = _mm_unpackhi_epi16(tmp, b) + + #define dct_pass(bias,shift) \ + { \ + /* even part */ \ + dct_rot(t2e,t3e, row2,row6, rot0_0,rot0_1); \ + __m128i sum04 = _mm_add_epi16(row0, row4); \ + __m128i dif04 = _mm_sub_epi16(row0, row4); \ + dct_widen(t0e, sum04); \ + dct_widen(t1e, dif04); \ + dct_wadd(x0, t0e, t3e); \ + dct_wsub(x3, t0e, t3e); \ + dct_wadd(x1, t1e, t2e); \ + dct_wsub(x2, t1e, t2e); \ + /* odd part */ \ + dct_rot(y0o,y2o, row7,row3, rot2_0,rot2_1); \ + dct_rot(y1o,y3o, row5,row1, rot3_0,rot3_1); \ + __m128i sum17 = _mm_add_epi16(row1, row7); \ + __m128i sum35 = _mm_add_epi16(row3, row5); \ + dct_rot(y4o,y5o, sum17,sum35, rot1_0,rot1_1); \ + dct_wadd(x4, y0o, y4o); \ + dct_wadd(x5, y1o, y5o); \ + dct_wadd(x6, y2o, y5o); \ + dct_wadd(x7, y3o, y4o); \ + dct_bfly32o(row0,row7, x0,x7,bias,shift); \ + dct_bfly32o(row1,row6, x1,x6,bias,shift); \ + dct_bfly32o(row2,row5, x2,x5,bias,shift); \ + dct_bfly32o(row3,row4, x3,x4,bias,shift); \ + } + + __m128i rot0_0 = dct_const(stbi__f2f(0.5411961f), stbi__f2f(0.5411961f) + stbi__f2f(-1.847759065f)); + __m128i rot0_1 = dct_const(stbi__f2f(0.5411961f) + stbi__f2f( 0.765366865f), stbi__f2f(0.5411961f)); + __m128i rot1_0 = dct_const(stbi__f2f(1.175875602f) + stbi__f2f(-0.899976223f), stbi__f2f(1.175875602f)); + __m128i rot1_1 = dct_const(stbi__f2f(1.175875602f), stbi__f2f(1.175875602f) + stbi__f2f(-2.562915447f)); + __m128i rot2_0 = dct_const(stbi__f2f(-1.961570560f) + stbi__f2f( 0.298631336f), stbi__f2f(-1.961570560f)); + __m128i rot2_1 = dct_const(stbi__f2f(-1.961570560f), stbi__f2f(-1.961570560f) + stbi__f2f( 3.072711026f)); + __m128i rot3_0 = dct_const(stbi__f2f(-0.390180644f) + stbi__f2f( 2.053119869f), stbi__f2f(-0.390180644f)); + __m128i rot3_1 = dct_const(stbi__f2f(-0.390180644f), stbi__f2f(-0.390180644f) + stbi__f2f( 1.501321110f)); + + // rounding biases in column/row passes, see stbi__idct_block for explanation. + __m128i bias_0 = _mm_set1_epi32(512); + __m128i bias_1 = _mm_set1_epi32(65536 + (128<<17)); + + // load + row0 = _mm_load_si128((const __m128i *) (data + 0*8)); + row1 = _mm_load_si128((const __m128i *) (data + 1*8)); + row2 = _mm_load_si128((const __m128i *) (data + 2*8)); + row3 = _mm_load_si128((const __m128i *) (data + 3*8)); + row4 = _mm_load_si128((const __m128i *) (data + 4*8)); + row5 = _mm_load_si128((const __m128i *) (data + 5*8)); + row6 = _mm_load_si128((const __m128i *) (data + 6*8)); + row7 = _mm_load_si128((const __m128i *) (data + 7*8)); + + // column pass + dct_pass(bias_0, 10); + + { + // 16bit 8x8 transpose pass 1 + dct_interleave16(row0, row4); + dct_interleave16(row1, row5); + dct_interleave16(row2, row6); + dct_interleave16(row3, row7); + + // transpose pass 2 + dct_interleave16(row0, row2); + dct_interleave16(row1, row3); + dct_interleave16(row4, row6); + dct_interleave16(row5, row7); + + // transpose pass 3 + dct_interleave16(row0, row1); + dct_interleave16(row2, row3); + dct_interleave16(row4, row5); + dct_interleave16(row6, row7); + } + + // row pass + dct_pass(bias_1, 17); + + { + // pack + __m128i p0 = _mm_packus_epi16(row0, row1); // a0a1a2a3...a7b0b1b2b3...b7 + __m128i p1 = _mm_packus_epi16(row2, row3); + __m128i p2 = _mm_packus_epi16(row4, row5); + __m128i p3 = _mm_packus_epi16(row6, row7); + + // 8bit 8x8 transpose pass 1 + dct_interleave8(p0, p2); // a0e0a1e1... + dct_interleave8(p1, p3); // c0g0c1g1... + + // transpose pass 2 + dct_interleave8(p0, p1); // a0c0e0g0... + dct_interleave8(p2, p3); // b0d0f0h0... + + // transpose pass 3 + dct_interleave8(p0, p2); // a0b0c0d0... + dct_interleave8(p1, p3); // a4b4c4d4... + + // store + _mm_storel_epi64((__m128i *) out, p0); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p0, 0x4e)); out += out_stride; + _mm_storel_epi64((__m128i *) out, p2); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p2, 0x4e)); out += out_stride; + _mm_storel_epi64((__m128i *) out, p1); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p1, 0x4e)); out += out_stride; + _mm_storel_epi64((__m128i *) out, p3); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p3, 0x4e)); + } + +#undef dct_const +#undef dct_rot +#undef dct_widen +#undef dct_wadd +#undef dct_wsub +#undef dct_bfly32o +#undef dct_interleave8 +#undef dct_interleave16 +#undef dct_pass +} + +#endif // STBI_SSE2 + +#ifdef STBI_NEON + +// NEON integer IDCT. should produce bit-identical +// results to the generic C version. +static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) +{ + int16x8_t row0, row1, row2, row3, row4, row5, row6, row7; + + int16x4_t rot0_0 = vdup_n_s16(stbi__f2f(0.5411961f)); + int16x4_t rot0_1 = vdup_n_s16(stbi__f2f(-1.847759065f)); + int16x4_t rot0_2 = vdup_n_s16(stbi__f2f( 0.765366865f)); + int16x4_t rot1_0 = vdup_n_s16(stbi__f2f( 1.175875602f)); + int16x4_t rot1_1 = vdup_n_s16(stbi__f2f(-0.899976223f)); + int16x4_t rot1_2 = vdup_n_s16(stbi__f2f(-2.562915447f)); + int16x4_t rot2_0 = vdup_n_s16(stbi__f2f(-1.961570560f)); + int16x4_t rot2_1 = vdup_n_s16(stbi__f2f(-0.390180644f)); + int16x4_t rot3_0 = vdup_n_s16(stbi__f2f( 0.298631336f)); + int16x4_t rot3_1 = vdup_n_s16(stbi__f2f( 2.053119869f)); + int16x4_t rot3_2 = vdup_n_s16(stbi__f2f( 3.072711026f)); + int16x4_t rot3_3 = vdup_n_s16(stbi__f2f( 1.501321110f)); + +#define dct_long_mul(out, inq, coeff) \ + int32x4_t out##_l = vmull_s16(vget_low_s16(inq), coeff); \ + int32x4_t out##_h = vmull_s16(vget_high_s16(inq), coeff) + +#define dct_long_mac(out, acc, inq, coeff) \ + int32x4_t out##_l = vmlal_s16(acc##_l, vget_low_s16(inq), coeff); \ + int32x4_t out##_h = vmlal_s16(acc##_h, vget_high_s16(inq), coeff) + +#define dct_widen(out, inq) \ + int32x4_t out##_l = vshll_n_s16(vget_low_s16(inq), 12); \ + int32x4_t out##_h = vshll_n_s16(vget_high_s16(inq), 12) + +// wide add +#define dct_wadd(out, a, b) \ + int32x4_t out##_l = vaddq_s32(a##_l, b##_l); \ + int32x4_t out##_h = vaddq_s32(a##_h, b##_h) + +// wide sub +#define dct_wsub(out, a, b) \ + int32x4_t out##_l = vsubq_s32(a##_l, b##_l); \ + int32x4_t out##_h = vsubq_s32(a##_h, b##_h) + +// butterfly a/b, then shift using "shiftop" by "s" and pack +#define dct_bfly32o(out0,out1, a,b,shiftop,s) \ + { \ + dct_wadd(sum, a, b); \ + dct_wsub(dif, a, b); \ + out0 = vcombine_s16(shiftop(sum_l, s), shiftop(sum_h, s)); \ + out1 = vcombine_s16(shiftop(dif_l, s), shiftop(dif_h, s)); \ + } + +#define dct_pass(shiftop, shift) \ + { \ + /* even part */ \ + int16x8_t sum26 = vaddq_s16(row2, row6); \ + dct_long_mul(p1e, sum26, rot0_0); \ + dct_long_mac(t2e, p1e, row6, rot0_1); \ + dct_long_mac(t3e, p1e, row2, rot0_2); \ + int16x8_t sum04 = vaddq_s16(row0, row4); \ + int16x8_t dif04 = vsubq_s16(row0, row4); \ + dct_widen(t0e, sum04); \ + dct_widen(t1e, dif04); \ + dct_wadd(x0, t0e, t3e); \ + dct_wsub(x3, t0e, t3e); \ + dct_wadd(x1, t1e, t2e); \ + dct_wsub(x2, t1e, t2e); \ + /* odd part */ \ + int16x8_t sum15 = vaddq_s16(row1, row5); \ + int16x8_t sum17 = vaddq_s16(row1, row7); \ + int16x8_t sum35 = vaddq_s16(row3, row5); \ + int16x8_t sum37 = vaddq_s16(row3, row7); \ + int16x8_t sumodd = vaddq_s16(sum17, sum35); \ + dct_long_mul(p5o, sumodd, rot1_0); \ + dct_long_mac(p1o, p5o, sum17, rot1_1); \ + dct_long_mac(p2o, p5o, sum35, rot1_2); \ + dct_long_mul(p3o, sum37, rot2_0); \ + dct_long_mul(p4o, sum15, rot2_1); \ + dct_wadd(sump13o, p1o, p3o); \ + dct_wadd(sump24o, p2o, p4o); \ + dct_wadd(sump23o, p2o, p3o); \ + dct_wadd(sump14o, p1o, p4o); \ + dct_long_mac(x4, sump13o, row7, rot3_0); \ + dct_long_mac(x5, sump24o, row5, rot3_1); \ + dct_long_mac(x6, sump23o, row3, rot3_2); \ + dct_long_mac(x7, sump14o, row1, rot3_3); \ + dct_bfly32o(row0,row7, x0,x7,shiftop,shift); \ + dct_bfly32o(row1,row6, x1,x6,shiftop,shift); \ + dct_bfly32o(row2,row5, x2,x5,shiftop,shift); \ + dct_bfly32o(row3,row4, x3,x4,shiftop,shift); \ + } + + // load + row0 = vld1q_s16(data + 0*8); + row1 = vld1q_s16(data + 1*8); + row2 = vld1q_s16(data + 2*8); + row3 = vld1q_s16(data + 3*8); + row4 = vld1q_s16(data + 4*8); + row5 = vld1q_s16(data + 5*8); + row6 = vld1q_s16(data + 6*8); + row7 = vld1q_s16(data + 7*8); + + // add DC bias + row0 = vaddq_s16(row0, vsetq_lane_s16(1024, vdupq_n_s16(0), 0)); + + // column pass + dct_pass(vrshrn_n_s32, 10); + + // 16bit 8x8 transpose + { +// these three map to a single VTRN.16, VTRN.32, and VSWP, respectively. +// whether compilers actually get this is another story, sadly. +#define dct_trn16(x, y) { int16x8x2_t t = vtrnq_s16(x, y); x = t.val[0]; y = t.val[1]; } +#define dct_trn32(x, y) { int32x4x2_t t = vtrnq_s32(vreinterpretq_s32_s16(x), vreinterpretq_s32_s16(y)); x = vreinterpretq_s16_s32(t.val[0]); y = vreinterpretq_s16_s32(t.val[1]); } +#define dct_trn64(x, y) { int16x8_t x0 = x; int16x8_t y0 = y; x = vcombine_s16(vget_low_s16(x0), vget_low_s16(y0)); y = vcombine_s16(vget_high_s16(x0), vget_high_s16(y0)); } + + // pass 1 + dct_trn16(row0, row1); // a0b0a2b2a4b4a6b6 + dct_trn16(row2, row3); + dct_trn16(row4, row5); + dct_trn16(row6, row7); + + // pass 2 + dct_trn32(row0, row2); // a0b0c0d0a4b4c4d4 + dct_trn32(row1, row3); + dct_trn32(row4, row6); + dct_trn32(row5, row7); + + // pass 3 + dct_trn64(row0, row4); // a0b0c0d0e0f0g0h0 + dct_trn64(row1, row5); + dct_trn64(row2, row6); + dct_trn64(row3, row7); + +#undef dct_trn16 +#undef dct_trn32 +#undef dct_trn64 + } + + // row pass + // vrshrn_n_s32 only supports shifts up to 16, we need + // 17. so do a non-rounding shift of 16 first then follow + // up with a rounding shift by 1. + dct_pass(vshrn_n_s32, 16); + + { + // pack and round + uint8x8_t p0 = vqrshrun_n_s16(row0, 1); + uint8x8_t p1 = vqrshrun_n_s16(row1, 1); + uint8x8_t p2 = vqrshrun_n_s16(row2, 1); + uint8x8_t p3 = vqrshrun_n_s16(row3, 1); + uint8x8_t p4 = vqrshrun_n_s16(row4, 1); + uint8x8_t p5 = vqrshrun_n_s16(row5, 1); + uint8x8_t p6 = vqrshrun_n_s16(row6, 1); + uint8x8_t p7 = vqrshrun_n_s16(row7, 1); + + // again, these can translate into one instruction, but often don't. +#define dct_trn8_8(x, y) { uint8x8x2_t t = vtrn_u8(x, y); x = t.val[0]; y = t.val[1]; } +#define dct_trn8_16(x, y) { uint16x4x2_t t = vtrn_u16(vreinterpret_u16_u8(x), vreinterpret_u16_u8(y)); x = vreinterpret_u8_u16(t.val[0]); y = vreinterpret_u8_u16(t.val[1]); } +#define dct_trn8_32(x, y) { uint32x2x2_t t = vtrn_u32(vreinterpret_u32_u8(x), vreinterpret_u32_u8(y)); x = vreinterpret_u8_u32(t.val[0]); y = vreinterpret_u8_u32(t.val[1]); } + + // sadly can't use interleaved stores here since we only write + // 8 bytes to each scan line! + + // 8x8 8-bit transpose pass 1 + dct_trn8_8(p0, p1); + dct_trn8_8(p2, p3); + dct_trn8_8(p4, p5); + dct_trn8_8(p6, p7); + + // pass 2 + dct_trn8_16(p0, p2); + dct_trn8_16(p1, p3); + dct_trn8_16(p4, p6); + dct_trn8_16(p5, p7); + + // pass 3 + dct_trn8_32(p0, p4); + dct_trn8_32(p1, p5); + dct_trn8_32(p2, p6); + dct_trn8_32(p3, p7); + + // store + vst1_u8(out, p0); out += out_stride; + vst1_u8(out, p1); out += out_stride; + vst1_u8(out, p2); out += out_stride; + vst1_u8(out, p3); out += out_stride; + vst1_u8(out, p4); out += out_stride; + vst1_u8(out, p5); out += out_stride; + vst1_u8(out, p6); out += out_stride; + vst1_u8(out, p7); + +#undef dct_trn8_8 +#undef dct_trn8_16 +#undef dct_trn8_32 + } + +#undef dct_long_mul +#undef dct_long_mac +#undef dct_widen +#undef dct_wadd +#undef dct_wsub +#undef dct_bfly32o +#undef dct_pass +} + +#endif // STBI_NEON + +#define STBI__MARKER_none 0xff +// if there's a pending marker from the entropy stream, return that +// otherwise, fetch from the stream and get a marker. if there's no +// marker, return 0xff, which is never a valid marker value +static stbi_uc stbi__get_marker(stbi__jpeg *j) +{ + stbi_uc x; + if (j->marker != STBI__MARKER_none) { x = j->marker; j->marker = STBI__MARKER_none; return x; } + x = stbi__get8(j->s); + if (x != 0xff) return STBI__MARKER_none; + while (x == 0xff) + x = stbi__get8(j->s); // consume repeated 0xff fill bytes + return x; +} + +// in each scan, we'll have scan_n components, and the order +// of the components is specified by order[] +#define STBI__RESTART(x) ((x) >= 0xd0 && (x) <= 0xd7) + +// after a restart interval, stbi__jpeg_reset the entropy decoder and +// the dc prediction +static void stbi__jpeg_reset(stbi__jpeg *j) +{ + j->code_bits = 0; + j->code_buffer = 0; + j->nomore = 0; + j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = j->img_comp[3].dc_pred = 0; + j->marker = STBI__MARKER_none; + j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff; + j->eob_run = 0; + // no more than 1<<31 MCUs if no restart_interal? that's plenty safe, + // since we don't even allow 1<<30 pixels +} + +static int stbi__parse_entropy_coded_data(stbi__jpeg *z) +{ + stbi__jpeg_reset(z); + if (!z->progressive) { + if (z->scan_n == 1) { + int i,j; + STBI_SIMD_ALIGN(short, data[64]); + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; + z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data); + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + // if it's NOT a restart, then just bail, so we get corrupt data + // rather than no data + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } else { // interleaved + int i,j,k,x,y; + STBI_SIMD_ALIGN(short, data[64]); + for (j=0; j < z->img_mcu_y; ++j) { + for (i=0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k=0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y=0; y < z->img_comp[n].v; ++y) { + for (x=0; x < z->img_comp[n].h; ++x) { + int x2 = (i*z->img_comp[n].h + x)*8; + int y2 = (j*z->img_comp[n].v + y)*8; + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; + z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data); + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } + } else { + if (z->scan_n == 1) { + int i,j; + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); + if (z->spec_start == 0) { + if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) + return 0; + } else { + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block_prog_ac(z, data, &z->huff_ac[ha], z->fast_ac[ha])) + return 0; + } + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } else { // interleaved + int i,j,k,x,y; + for (j=0; j < z->img_mcu_y; ++j) { + for (i=0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k=0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y=0; y < z->img_comp[n].v; ++y) { + for (x=0; x < z->img_comp[n].h; ++x) { + int x2 = (i*z->img_comp[n].h + x); + int y2 = (j*z->img_comp[n].v + y); + short *data = z->img_comp[n].coeff + 64 * (x2 + y2 * z->img_comp[n].coeff_w); + if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) + return 0; + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } + } +} + +static void stbi__jpeg_dequantize(short *data, stbi__uint16 *dequant) +{ + int i; + for (i=0; i < 64; ++i) + data[i] *= dequant[i]; +} + +static void stbi__jpeg_finish(stbi__jpeg *z) +{ + if (z->progressive) { + // dequantize and idct the data + int i,j,n; + for (n=0; n < z->s->img_n; ++n) { + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); + stbi__jpeg_dequantize(data, z->dequant[z->img_comp[n].tq]); + z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data); + } + } + } + } +} + +static int stbi__process_marker(stbi__jpeg *z, int m) +{ + int L; + switch (m) { + case STBI__MARKER_none: // no marker found + return stbi__err("expected marker","Corrupt JPEG"); + + case 0xDD: // DRI - specify restart interval + if (stbi__get16be(z->s) != 4) return stbi__err("bad DRI len","Corrupt JPEG"); + z->restart_interval = stbi__get16be(z->s); + return 1; + + case 0xDB: // DQT - define quantization table + L = stbi__get16be(z->s)-2; + while (L > 0) { + int q = stbi__get8(z->s); + int p = q >> 4, sixteen = (p != 0); + int t = q & 15,i; + if (p != 0 && p != 1) return stbi__err("bad DQT type","Corrupt JPEG"); + if (t > 3) return stbi__err("bad DQT table","Corrupt JPEG"); + + for (i=0; i < 64; ++i) + z->dequant[t][stbi__jpeg_dezigzag[i]] = (stbi__uint16)(sixteen ? stbi__get16be(z->s) : stbi__get8(z->s)); + L -= (sixteen ? 129 : 65); + } + return L==0; + + case 0xC4: // DHT - define huffman table + L = stbi__get16be(z->s)-2; + while (L > 0) { + stbi_uc *v; + int sizes[16],i,n=0; + int q = stbi__get8(z->s); + int tc = q >> 4; + int th = q & 15; + if (tc > 1 || th > 3) return stbi__err("bad DHT header","Corrupt JPEG"); + for (i=0; i < 16; ++i) { + sizes[i] = stbi__get8(z->s); + n += sizes[i]; + } + L -= 17; + if (tc == 0) { + if (!stbi__build_huffman(z->huff_dc+th, sizes)) return 0; + v = z->huff_dc[th].values; + } else { + if (!stbi__build_huffman(z->huff_ac+th, sizes)) return 0; + v = z->huff_ac[th].values; + } + for (i=0; i < n; ++i) + v[i] = stbi__get8(z->s); + if (tc != 0) + stbi__build_fast_ac(z->fast_ac[th], z->huff_ac + th); + L -= n; + } + return L==0; + } + + // check for comment block or APP blocks + if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) { + L = stbi__get16be(z->s); + if (L < 2) { + if (m == 0xFE) + return stbi__err("bad COM len","Corrupt JPEG"); + else + return stbi__err("bad APP len","Corrupt JPEG"); + } + L -= 2; + + if (m == 0xE0 && L >= 5) { // JFIF APP0 segment + static const unsigned char tag[5] = {'J','F','I','F','\0'}; + int ok = 1; + int i; + for (i=0; i < 5; ++i) + if (stbi__get8(z->s) != tag[i]) + ok = 0; + L -= 5; + if (ok) + z->jfif = 1; + } else if (m == 0xEE && L >= 12) { // Adobe APP14 segment + static const unsigned char tag[6] = {'A','d','o','b','e','\0'}; + int ok = 1; + int i; + for (i=0; i < 6; ++i) + if (stbi__get8(z->s) != tag[i]) + ok = 0; + L -= 6; + if (ok) { + stbi__get8(z->s); // version + stbi__get16be(z->s); // flags0 + stbi__get16be(z->s); // flags1 + z->app14_color_transform = stbi__get8(z->s); // color transform + L -= 6; + } + } + + stbi__skip(z->s, L); + return 1; + } + + return stbi__err("unknown marker","Corrupt JPEG"); +} + +// after we see SOS +static int stbi__process_scan_header(stbi__jpeg *z) +{ + int i; + int Ls = stbi__get16be(z->s); + z->scan_n = stbi__get8(z->s); + if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int) z->s->img_n) return stbi__err("bad SOS component count","Corrupt JPEG"); + if (Ls != 6+2*z->scan_n) return stbi__err("bad SOS len","Corrupt JPEG"); + for (i=0; i < z->scan_n; ++i) { + int id = stbi__get8(z->s), which; + int q = stbi__get8(z->s); + for (which = 0; which < z->s->img_n; ++which) + if (z->img_comp[which].id == id) + break; + if (which == z->s->img_n) return 0; // no match + z->img_comp[which].hd = q >> 4; if (z->img_comp[which].hd > 3) return stbi__err("bad DC huff","Corrupt JPEG"); + z->img_comp[which].ha = q & 15; if (z->img_comp[which].ha > 3) return stbi__err("bad AC huff","Corrupt JPEG"); + z->order[i] = which; + } + + { + int aa; + z->spec_start = stbi__get8(z->s); + z->spec_end = stbi__get8(z->s); // should be 63, but might be 0 + aa = stbi__get8(z->s); + z->succ_high = (aa >> 4); + z->succ_low = (aa & 15); + if (z->progressive) { + if (z->spec_start > 63 || z->spec_end > 63 || z->spec_start > z->spec_end || z->succ_high > 13 || z->succ_low > 13) + return stbi__err("bad SOS", "Corrupt JPEG"); + } else { + if (z->spec_start != 0) return stbi__err("bad SOS","Corrupt JPEG"); + if (z->succ_high != 0 || z->succ_low != 0) return stbi__err("bad SOS","Corrupt JPEG"); + z->spec_end = 63; + } + } + + return 1; +} + +static int stbi__free_jpeg_components(stbi__jpeg *z, int ncomp, int why) +{ + int i; + for (i=0; i < ncomp; ++i) { + if (z->img_comp[i].raw_data) { + STBI_FREE(z->img_comp[i].raw_data); + z->img_comp[i].raw_data = NULL; + z->img_comp[i].data = NULL; + } + if (z->img_comp[i].raw_coeff) { + STBI_FREE(z->img_comp[i].raw_coeff); + z->img_comp[i].raw_coeff = 0; + z->img_comp[i].coeff = 0; + } + if (z->img_comp[i].linebuf) { + STBI_FREE(z->img_comp[i].linebuf); + z->img_comp[i].linebuf = NULL; + } + } + return why; +} + +static int stbi__process_frame_header(stbi__jpeg *z, int scan) +{ + stbi__context *s = z->s; + int Lf,p,i,q, h_max=1,v_max=1,c; + Lf = stbi__get16be(s); if (Lf < 11) return stbi__err("bad SOF len","Corrupt JPEG"); // JPEG + p = stbi__get8(s); if (p != 8) return stbi__err("only 8-bit","JPEG format not supported: 8-bit only"); // JPEG baseline + s->img_y = stbi__get16be(s); if (s->img_y == 0) return stbi__err("no header height", "JPEG format not supported: delayed height"); // Legal, but we don't handle it--but neither does IJG + s->img_x = stbi__get16be(s); if (s->img_x == 0) return stbi__err("0 width","Corrupt JPEG"); // JPEG requires + if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + c = stbi__get8(s); + if (c != 3 && c != 1 && c != 4) return stbi__err("bad component count","Corrupt JPEG"); + s->img_n = c; + for (i=0; i < c; ++i) { + z->img_comp[i].data = NULL; + z->img_comp[i].linebuf = NULL; + } + + if (Lf != 8+3*s->img_n) return stbi__err("bad SOF len","Corrupt JPEG"); + + z->rgb = 0; + for (i=0; i < s->img_n; ++i) { + static const unsigned char rgb[3] = { 'R', 'G', 'B' }; + z->img_comp[i].id = stbi__get8(s); + if (s->img_n == 3 && z->img_comp[i].id == rgb[i]) + ++z->rgb; + q = stbi__get8(s); + z->img_comp[i].h = (q >> 4); if (!z->img_comp[i].h || z->img_comp[i].h > 4) return stbi__err("bad H","Corrupt JPEG"); + z->img_comp[i].v = q & 15; if (!z->img_comp[i].v || z->img_comp[i].v > 4) return stbi__err("bad V","Corrupt JPEG"); + z->img_comp[i].tq = stbi__get8(s); if (z->img_comp[i].tq > 3) return stbi__err("bad TQ","Corrupt JPEG"); + } + + if (scan != STBI__SCAN_load) return 1; + + if (!stbi__mad3sizes_valid(s->img_x, s->img_y, s->img_n, 0)) return stbi__err("too large", "Image too large to decode"); + + for (i=0; i < s->img_n; ++i) { + if (z->img_comp[i].h > h_max) h_max = z->img_comp[i].h; + if (z->img_comp[i].v > v_max) v_max = z->img_comp[i].v; + } + + // check that plane subsampling factors are integer ratios; our resamplers can't deal with fractional ratios + // and I've never seen a non-corrupted JPEG file actually use them + for (i=0; i < s->img_n; ++i) { + if (h_max % z->img_comp[i].h != 0) return stbi__err("bad H","Corrupt JPEG"); + if (v_max % z->img_comp[i].v != 0) return stbi__err("bad V","Corrupt JPEG"); + } + + // compute interleaved mcu info + z->img_h_max = h_max; + z->img_v_max = v_max; + z->img_mcu_w = h_max * 8; + z->img_mcu_h = v_max * 8; + // these sizes can't be more than 17 bits + z->img_mcu_x = (s->img_x + z->img_mcu_w-1) / z->img_mcu_w; + z->img_mcu_y = (s->img_y + z->img_mcu_h-1) / z->img_mcu_h; + + for (i=0; i < s->img_n; ++i) { + // number of effective pixels (e.g. for non-interleaved MCU) + z->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max-1) / h_max; + z->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max-1) / v_max; + // to simplify generation, we'll allocate enough memory to decode + // the bogus oversized data from using interleaved MCUs and their + // big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't + // discard the extra data until colorspace conversion + // + // img_mcu_x, img_mcu_y: <=17 bits; comp[i].h and .v are <=4 (checked earlier) + // so these muls can't overflow with 32-bit ints (which we require) + z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8; + z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8; + z->img_comp[i].coeff = 0; + z->img_comp[i].raw_coeff = 0; + z->img_comp[i].linebuf = NULL; + z->img_comp[i].raw_data = stbi__malloc_mad2(z->img_comp[i].w2, z->img_comp[i].h2, 15); + if (z->img_comp[i].raw_data == NULL) + return stbi__free_jpeg_components(z, i+1, stbi__err("outofmem", "Out of memory")); + // align blocks for idct using mmx/sse + z->img_comp[i].data = (stbi_uc*) (((size_t) z->img_comp[i].raw_data + 15) & ~15); + if (z->progressive) { + // w2, h2 are multiples of 8 (see above) + z->img_comp[i].coeff_w = z->img_comp[i].w2 / 8; + z->img_comp[i].coeff_h = z->img_comp[i].h2 / 8; + z->img_comp[i].raw_coeff = stbi__malloc_mad3(z->img_comp[i].w2, z->img_comp[i].h2, sizeof(short), 15); + if (z->img_comp[i].raw_coeff == NULL) + return stbi__free_jpeg_components(z, i+1, stbi__err("outofmem", "Out of memory")); + z->img_comp[i].coeff = (short*) (((size_t) z->img_comp[i].raw_coeff + 15) & ~15); + } + } + + return 1; +} + +// use comparisons since in some cases we handle more than one case (e.g. SOF) +#define stbi__DNL(x) ((x) == 0xdc) +#define stbi__SOI(x) ((x) == 0xd8) +#define stbi__EOI(x) ((x) == 0xd9) +#define stbi__SOF(x) ((x) == 0xc0 || (x) == 0xc1 || (x) == 0xc2) +#define stbi__SOS(x) ((x) == 0xda) + +#define stbi__SOF_progressive(x) ((x) == 0xc2) + +static int stbi__decode_jpeg_header(stbi__jpeg *z, int scan) +{ + int m; + z->jfif = 0; + z->app14_color_transform = -1; // valid values are 0,1,2 + z->marker = STBI__MARKER_none; // initialize cached marker to empty + m = stbi__get_marker(z); + if (!stbi__SOI(m)) return stbi__err("no SOI","Corrupt JPEG"); + if (scan == STBI__SCAN_type) return 1; + m = stbi__get_marker(z); + while (!stbi__SOF(m)) { + if (!stbi__process_marker(z,m)) return 0; + m = stbi__get_marker(z); + while (m == STBI__MARKER_none) { + // some files have extra padding after their blocks, so ok, we'll scan + if (stbi__at_eof(z->s)) return stbi__err("no SOF", "Corrupt JPEG"); + m = stbi__get_marker(z); + } + } + z->progressive = stbi__SOF_progressive(m); + if (!stbi__process_frame_header(z, scan)) return 0; + return 1; +} + +// decode image to YCbCr format +static int stbi__decode_jpeg_image(stbi__jpeg *j) +{ + int m; + for (m = 0; m < 4; m++) { + j->img_comp[m].raw_data = NULL; + j->img_comp[m].raw_coeff = NULL; + } + j->restart_interval = 0; + if (!stbi__decode_jpeg_header(j, STBI__SCAN_load)) return 0; + m = stbi__get_marker(j); + while (!stbi__EOI(m)) { + if (stbi__SOS(m)) { + if (!stbi__process_scan_header(j)) return 0; + if (!stbi__parse_entropy_coded_data(j)) return 0; + if (j->marker == STBI__MARKER_none ) { + // handle 0s at the end of image data from IP Kamera 9060 + while (!stbi__at_eof(j->s)) { + int x = stbi__get8(j->s); + if (x == 255) { + j->marker = stbi__get8(j->s); + break; + } + } + // if we reach eof without hitting a marker, stbi__get_marker() below will fail and we'll eventually return 0 + } + } else if (stbi__DNL(m)) { + int Ld = stbi__get16be(j->s); + stbi__uint32 NL = stbi__get16be(j->s); + if (Ld != 4) return stbi__err("bad DNL len", "Corrupt JPEG"); + if (NL != j->s->img_y) return stbi__err("bad DNL height", "Corrupt JPEG"); + } else { + if (!stbi__process_marker(j, m)) return 0; + } + m = stbi__get_marker(j); + } + if (j->progressive) + stbi__jpeg_finish(j); + return 1; +} + +// static jfif-centered resampling (across block boundaries) + +typedef stbi_uc *(*resample_row_func)(stbi_uc *out, stbi_uc *in0, stbi_uc *in1, + int w, int hs); + +#define stbi__div4(x) ((stbi_uc) ((x) >> 2)) + +static stbi_uc *resample_row_1(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + STBI_NOTUSED(out); + STBI_NOTUSED(in_far); + STBI_NOTUSED(w); + STBI_NOTUSED(hs); + return in_near; +} + +static stbi_uc* stbi__resample_row_v_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate two samples vertically for every one in input + int i; + STBI_NOTUSED(hs); + for (i=0; i < w; ++i) + out[i] = stbi__div4(3*in_near[i] + in_far[i] + 2); + return out; +} + +static stbi_uc* stbi__resample_row_h_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate two samples horizontally for every one in input + int i; + stbi_uc *input = in_near; + + if (w == 1) { + // if only one sample, can't do any interpolation + out[0] = out[1] = input[0]; + return out; + } + + out[0] = input[0]; + out[1] = stbi__div4(input[0]*3 + input[1] + 2); + for (i=1; i < w-1; ++i) { + int n = 3*input[i]+2; + out[i*2+0] = stbi__div4(n+input[i-1]); + out[i*2+1] = stbi__div4(n+input[i+1]); + } + out[i*2+0] = stbi__div4(input[w-2]*3 + input[w-1] + 2); + out[i*2+1] = input[w-1]; + + STBI_NOTUSED(in_far); + STBI_NOTUSED(hs); + + return out; +} + +#define stbi__div16(x) ((stbi_uc) ((x) >> 4)) + +static stbi_uc *stbi__resample_row_hv_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate 2x2 samples for every one in input + int i,t0,t1; + if (w == 1) { + out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3*in_near[0] + in_far[0]; + out[0] = stbi__div4(t1+2); + for (i=1; i < w; ++i) { + t0 = t1; + t1 = 3*in_near[i]+in_far[i]; + out[i*2-1] = stbi__div16(3*t0 + t1 + 8); + out[i*2 ] = stbi__div16(3*t1 + t0 + 8); + } + out[w*2-1] = stbi__div4(t1+2); + + STBI_NOTUSED(hs); + + return out; +} + +#if defined(STBI_SSE2) || defined(STBI_NEON) +static stbi_uc *stbi__resample_row_hv_2_simd(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate 2x2 samples for every one in input + int i=0,t0,t1; + + if (w == 1) { + out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3*in_near[0] + in_far[0]; + // process groups of 8 pixels for as long as we can. + // note we can't handle the last pixel in a row in this loop + // because we need to handle the filter boundary conditions. + for (; i < ((w-1) & ~7); i += 8) { +#if defined(STBI_SSE2) + // load and perform the vertical filtering pass + // this uses 3*x + y = 4*x + (y - x) + __m128i zero = _mm_setzero_si128(); + __m128i farb = _mm_loadl_epi64((__m128i *) (in_far + i)); + __m128i nearb = _mm_loadl_epi64((__m128i *) (in_near + i)); + __m128i farw = _mm_unpacklo_epi8(farb, zero); + __m128i nearw = _mm_unpacklo_epi8(nearb, zero); + __m128i diff = _mm_sub_epi16(farw, nearw); + __m128i nears = _mm_slli_epi16(nearw, 2); + __m128i curr = _mm_add_epi16(nears, diff); // current row + + // horizontal filter works the same based on shifted vers of current + // row. "prev" is current row shifted right by 1 pixel; we need to + // insert the previous pixel value (from t1). + // "next" is current row shifted left by 1 pixel, with first pixel + // of next block of 8 pixels added in. + __m128i prv0 = _mm_slli_si128(curr, 2); + __m128i nxt0 = _mm_srli_si128(curr, 2); + __m128i prev = _mm_insert_epi16(prv0, t1, 0); + __m128i next = _mm_insert_epi16(nxt0, 3*in_near[i+8] + in_far[i+8], 7); + + // horizontal filter, polyphase implementation since it's convenient: + // even pixels = 3*cur + prev = cur*4 + (prev - cur) + // odd pixels = 3*cur + next = cur*4 + (next - cur) + // note the shared term. + __m128i bias = _mm_set1_epi16(8); + __m128i curs = _mm_slli_epi16(curr, 2); + __m128i prvd = _mm_sub_epi16(prev, curr); + __m128i nxtd = _mm_sub_epi16(next, curr); + __m128i curb = _mm_add_epi16(curs, bias); + __m128i even = _mm_add_epi16(prvd, curb); + __m128i odd = _mm_add_epi16(nxtd, curb); + + // interleave even and odd pixels, then undo scaling. + __m128i int0 = _mm_unpacklo_epi16(even, odd); + __m128i int1 = _mm_unpackhi_epi16(even, odd); + __m128i de0 = _mm_srli_epi16(int0, 4); + __m128i de1 = _mm_srli_epi16(int1, 4); + + // pack and write output + __m128i outv = _mm_packus_epi16(de0, de1); + _mm_storeu_si128((__m128i *) (out + i*2), outv); +#elif defined(STBI_NEON) + // load and perform the vertical filtering pass + // this uses 3*x + y = 4*x + (y - x) + uint8x8_t farb = vld1_u8(in_far + i); + uint8x8_t nearb = vld1_u8(in_near + i); + int16x8_t diff = vreinterpretq_s16_u16(vsubl_u8(farb, nearb)); + int16x8_t nears = vreinterpretq_s16_u16(vshll_n_u8(nearb, 2)); + int16x8_t curr = vaddq_s16(nears, diff); // current row + + // horizontal filter works the same based on shifted vers of current + // row. "prev" is current row shifted right by 1 pixel; we need to + // insert the previous pixel value (from t1). + // "next" is current row shifted left by 1 pixel, with first pixel + // of next block of 8 pixels added in. + int16x8_t prv0 = vextq_s16(curr, curr, 7); + int16x8_t nxt0 = vextq_s16(curr, curr, 1); + int16x8_t prev = vsetq_lane_s16(t1, prv0, 0); + int16x8_t next = vsetq_lane_s16(3*in_near[i+8] + in_far[i+8], nxt0, 7); + + // horizontal filter, polyphase implementation since it's convenient: + // even pixels = 3*cur + prev = cur*4 + (prev - cur) + // odd pixels = 3*cur + next = cur*4 + (next - cur) + // note the shared term. + int16x8_t curs = vshlq_n_s16(curr, 2); + int16x8_t prvd = vsubq_s16(prev, curr); + int16x8_t nxtd = vsubq_s16(next, curr); + int16x8_t even = vaddq_s16(curs, prvd); + int16x8_t odd = vaddq_s16(curs, nxtd); + + // undo scaling and round, then store with even/odd phases interleaved + uint8x8x2_t o; + o.val[0] = vqrshrun_n_s16(even, 4); + o.val[1] = vqrshrun_n_s16(odd, 4); + vst2_u8(out + i*2, o); +#endif + + // "previous" value for next iter + t1 = 3*in_near[i+7] + in_far[i+7]; + } + + t0 = t1; + t1 = 3*in_near[i] + in_far[i]; + out[i*2] = stbi__div16(3*t1 + t0 + 8); + + for (++i; i < w; ++i) { + t0 = t1; + t1 = 3*in_near[i]+in_far[i]; + out[i*2-1] = stbi__div16(3*t0 + t1 + 8); + out[i*2 ] = stbi__div16(3*t1 + t0 + 8); + } + out[w*2-1] = stbi__div4(t1+2); + + STBI_NOTUSED(hs); + + return out; +} +#endif + +static stbi_uc *stbi__resample_row_generic(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // resample with nearest-neighbor + int i,j; + STBI_NOTUSED(in_far); + for (i=0; i < w; ++i) + for (j=0; j < hs; ++j) + out[i*hs+j] = in_near[i]; + return out; +} + +// this is a reduced-precision calculation of YCbCr-to-RGB introduced +// to make sure the code produces the same results in both SIMD and scalar +#define stbi__float2fixed(x) (((int) ((x) * 4096.0f + 0.5f)) << 8) +static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step) +{ + int i; + for (i=0; i < count; ++i) { + int y_fixed = (y[i] << 20) + (1<<19); // rounding + int r,g,b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr* stbi__float2fixed(1.40200f); + g = y_fixed + (cr*-stbi__float2fixed(0.71414f)) + ((cb*-stbi__float2fixed(0.34414f)) & 0xffff0000); + b = y_fixed + cb* stbi__float2fixed(1.77200f); + r >>= 20; + g >>= 20; + b >>= 20; + if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } + if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } + if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } +} + +#if defined(STBI_SSE2) || defined(STBI_NEON) +static void stbi__YCbCr_to_RGB_simd(stbi_uc *out, stbi_uc const *y, stbi_uc const *pcb, stbi_uc const *pcr, int count, int step) +{ + int i = 0; + +#ifdef STBI_SSE2 + // step == 3 is pretty ugly on the final interleave, and i'm not convinced + // it's useful in practice (you wouldn't use it for textures, for example). + // so just accelerate step == 4 case. + if (step == 4) { + // this is a fairly straightforward implementation and not super-optimized. + __m128i signflip = _mm_set1_epi8(-0x80); + __m128i cr_const0 = _mm_set1_epi16( (short) ( 1.40200f*4096.0f+0.5f)); + __m128i cr_const1 = _mm_set1_epi16( - (short) ( 0.71414f*4096.0f+0.5f)); + __m128i cb_const0 = _mm_set1_epi16( - (short) ( 0.34414f*4096.0f+0.5f)); + __m128i cb_const1 = _mm_set1_epi16( (short) ( 1.77200f*4096.0f+0.5f)); + __m128i y_bias = _mm_set1_epi8((char) (unsigned char) 128); + __m128i xw = _mm_set1_epi16(255); // alpha channel + + for (; i+7 < count; i += 8) { + // load + __m128i y_bytes = _mm_loadl_epi64((__m128i *) (y+i)); + __m128i cr_bytes = _mm_loadl_epi64((__m128i *) (pcr+i)); + __m128i cb_bytes = _mm_loadl_epi64((__m128i *) (pcb+i)); + __m128i cr_biased = _mm_xor_si128(cr_bytes, signflip); // -128 + __m128i cb_biased = _mm_xor_si128(cb_bytes, signflip); // -128 + + // unpack to short (and left-shift cr, cb by 8) + __m128i yw = _mm_unpacklo_epi8(y_bias, y_bytes); + __m128i crw = _mm_unpacklo_epi8(_mm_setzero_si128(), cr_biased); + __m128i cbw = _mm_unpacklo_epi8(_mm_setzero_si128(), cb_biased); + + // color transform + __m128i yws = _mm_srli_epi16(yw, 4); + __m128i cr0 = _mm_mulhi_epi16(cr_const0, crw); + __m128i cb0 = _mm_mulhi_epi16(cb_const0, cbw); + __m128i cb1 = _mm_mulhi_epi16(cbw, cb_const1); + __m128i cr1 = _mm_mulhi_epi16(crw, cr_const1); + __m128i rws = _mm_add_epi16(cr0, yws); + __m128i gwt = _mm_add_epi16(cb0, yws); + __m128i bws = _mm_add_epi16(yws, cb1); + __m128i gws = _mm_add_epi16(gwt, cr1); + + // descale + __m128i rw = _mm_srai_epi16(rws, 4); + __m128i bw = _mm_srai_epi16(bws, 4); + __m128i gw = _mm_srai_epi16(gws, 4); + + // back to byte, set up for transpose + __m128i brb = _mm_packus_epi16(rw, bw); + __m128i gxb = _mm_packus_epi16(gw, xw); + + // transpose to interleave channels + __m128i t0 = _mm_unpacklo_epi8(brb, gxb); + __m128i t1 = _mm_unpackhi_epi8(brb, gxb); + __m128i o0 = _mm_unpacklo_epi16(t0, t1); + __m128i o1 = _mm_unpackhi_epi16(t0, t1); + + // store + _mm_storeu_si128((__m128i *) (out + 0), o0); + _mm_storeu_si128((__m128i *) (out + 16), o1); + out += 32; + } + } +#endif + +#ifdef STBI_NEON + // in this version, step=3 support would be easy to add. but is there demand? + if (step == 4) { + // this is a fairly straightforward implementation and not super-optimized. + uint8x8_t signflip = vdup_n_u8(0x80); + int16x8_t cr_const0 = vdupq_n_s16( (short) ( 1.40200f*4096.0f+0.5f)); + int16x8_t cr_const1 = vdupq_n_s16( - (short) ( 0.71414f*4096.0f+0.5f)); + int16x8_t cb_const0 = vdupq_n_s16( - (short) ( 0.34414f*4096.0f+0.5f)); + int16x8_t cb_const1 = vdupq_n_s16( (short) ( 1.77200f*4096.0f+0.5f)); + + for (; i+7 < count; i += 8) { + // load + uint8x8_t y_bytes = vld1_u8(y + i); + uint8x8_t cr_bytes = vld1_u8(pcr + i); + uint8x8_t cb_bytes = vld1_u8(pcb + i); + int8x8_t cr_biased = vreinterpret_s8_u8(vsub_u8(cr_bytes, signflip)); + int8x8_t cb_biased = vreinterpret_s8_u8(vsub_u8(cb_bytes, signflip)); + + // expand to s16 + int16x8_t yws = vreinterpretq_s16_u16(vshll_n_u8(y_bytes, 4)); + int16x8_t crw = vshll_n_s8(cr_biased, 7); + int16x8_t cbw = vshll_n_s8(cb_biased, 7); + + // color transform + int16x8_t cr0 = vqdmulhq_s16(crw, cr_const0); + int16x8_t cb0 = vqdmulhq_s16(cbw, cb_const0); + int16x8_t cr1 = vqdmulhq_s16(crw, cr_const1); + int16x8_t cb1 = vqdmulhq_s16(cbw, cb_const1); + int16x8_t rws = vaddq_s16(yws, cr0); + int16x8_t gws = vaddq_s16(vaddq_s16(yws, cb0), cr1); + int16x8_t bws = vaddq_s16(yws, cb1); + + // undo scaling, round, convert to byte + uint8x8x4_t o; + o.val[0] = vqrshrun_n_s16(rws, 4); + o.val[1] = vqrshrun_n_s16(gws, 4); + o.val[2] = vqrshrun_n_s16(bws, 4); + o.val[3] = vdup_n_u8(255); + + // store, interleaving r/g/b/a + vst4_u8(out, o); + out += 8*4; + } + } +#endif + + for (; i < count; ++i) { + int y_fixed = (y[i] << 20) + (1<<19); // rounding + int r,g,b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr* stbi__float2fixed(1.40200f); + g = y_fixed + cr*-stbi__float2fixed(0.71414f) + ((cb*-stbi__float2fixed(0.34414f)) & 0xffff0000); + b = y_fixed + cb* stbi__float2fixed(1.77200f); + r >>= 20; + g >>= 20; + b >>= 20; + if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } + if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } + if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } +} +#endif + +// set up the kernels +static void stbi__setup_jpeg(stbi__jpeg *j) +{ + j->idct_block_kernel = stbi__idct_block; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_row; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2; + +#ifdef STBI_SSE2 + if (stbi__sse2_available()) { + j->idct_block_kernel = stbi__idct_simd; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; + } +#endif + +#ifdef STBI_NEON + j->idct_block_kernel = stbi__idct_simd; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; +#endif +} + +// clean up the temporary component buffers +static void stbi__cleanup_jpeg(stbi__jpeg *j) +{ + stbi__free_jpeg_components(j, j->s->img_n, 0); +} + +typedef struct +{ + resample_row_func resample; + stbi_uc *line0,*line1; + int hs,vs; // expansion factor in each axis + int w_lores; // horizontal pixels pre-expansion + int ystep; // how far through vertical expansion we are + int ypos; // which pre-expansion row we're on +} stbi__resample; + +// fast 0..255 * 0..255 => 0..255 rounded multiplication +static stbi_uc stbi__blinn_8x8(stbi_uc x, stbi_uc y) +{ + unsigned int t = x*y + 128; + return (stbi_uc) ((t + (t >>8)) >> 8); +} + +static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp, int req_comp) +{ + int n, decode_n, is_rgb; + z->s->img_n = 0; // make stbi__cleanup_jpeg safe + + // validate req_comp + if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); + + // load a jpeg image from whichever source, but leave in YCbCr format + if (!stbi__decode_jpeg_image(z)) { stbi__cleanup_jpeg(z); return NULL; } + + // determine actual number of components to generate + n = req_comp ? req_comp : z->s->img_n >= 3 ? 3 : 1; + + is_rgb = z->s->img_n == 3 && (z->rgb == 3 || (z->app14_color_transform == 0 && !z->jfif)); + + if (z->s->img_n == 3 && n < 3 && !is_rgb) + decode_n = 1; + else + decode_n = z->s->img_n; + + // nothing to do if no components requested; check this now to avoid + // accessing uninitialized coutput[0] later + if (decode_n <= 0) { stbi__cleanup_jpeg(z); return NULL; } + + // resample and color-convert + { + int k; + unsigned int i,j; + stbi_uc *output; + stbi_uc *coutput[4] = { NULL, NULL, NULL, NULL }; + + stbi__resample res_comp[4]; + + for (k=0; k < decode_n; ++k) { + stbi__resample *r = &res_comp[k]; + + // allocate line buffer big enough for upsampling off the edges + // with upsample factor of 4 + z->img_comp[k].linebuf = (stbi_uc *) stbi__malloc(z->s->img_x + 3); + if (!z->img_comp[k].linebuf) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } + + r->hs = z->img_h_max / z->img_comp[k].h; + r->vs = z->img_v_max / z->img_comp[k].v; + r->ystep = r->vs >> 1; + r->w_lores = (z->s->img_x + r->hs-1) / r->hs; + r->ypos = 0; + r->line0 = r->line1 = z->img_comp[k].data; + + if (r->hs == 1 && r->vs == 1) r->resample = resample_row_1; + else if (r->hs == 1 && r->vs == 2) r->resample = stbi__resample_row_v_2; + else if (r->hs == 2 && r->vs == 1) r->resample = stbi__resample_row_h_2; + else if (r->hs == 2 && r->vs == 2) r->resample = z->resample_row_hv_2_kernel; + else r->resample = stbi__resample_row_generic; + } + + // can't error after this so, this is safe + output = (stbi_uc *) stbi__malloc_mad3(n, z->s->img_x, z->s->img_y, 1); + if (!output) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } + + // now go ahead and resample + for (j=0; j < z->s->img_y; ++j) { + stbi_uc *out = output + n * z->s->img_x * j; + for (k=0; k < decode_n; ++k) { + stbi__resample *r = &res_comp[k]; + int y_bot = r->ystep >= (r->vs >> 1); + coutput[k] = r->resample(z->img_comp[k].linebuf, + y_bot ? r->line1 : r->line0, + y_bot ? r->line0 : r->line1, + r->w_lores, r->hs); + if (++r->ystep >= r->vs) { + r->ystep = 0; + r->line0 = r->line1; + if (++r->ypos < z->img_comp[k].y) + r->line1 += z->img_comp[k].w2; + } + } + if (n >= 3) { + stbi_uc *y = coutput[0]; + if (z->s->img_n == 3) { + if (is_rgb) { + for (i=0; i < z->s->img_x; ++i) { + out[0] = y[i]; + out[1] = coutput[1][i]; + out[2] = coutput[2][i]; + out[3] = 255; + out += n; + } + } else { + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); + } + } else if (z->s->img_n == 4) { + if (z->app14_color_transform == 0) { // CMYK + for (i=0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + out[0] = stbi__blinn_8x8(coutput[0][i], m); + out[1] = stbi__blinn_8x8(coutput[1][i], m); + out[2] = stbi__blinn_8x8(coutput[2][i], m); + out[3] = 255; + out += n; + } + } else if (z->app14_color_transform == 2) { // YCCK + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); + for (i=0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + out[0] = stbi__blinn_8x8(255 - out[0], m); + out[1] = stbi__blinn_8x8(255 - out[1], m); + out[2] = stbi__blinn_8x8(255 - out[2], m); + out += n; + } + } else { // YCbCr + alpha? Ignore the fourth channel for now + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); + } + } else + for (i=0; i < z->s->img_x; ++i) { + out[0] = out[1] = out[2] = y[i]; + out[3] = 255; // not used if n==3 + out += n; + } + } else { + if (is_rgb) { + if (n == 1) + for (i=0; i < z->s->img_x; ++i) + *out++ = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]); + else { + for (i=0; i < z->s->img_x; ++i, out += 2) { + out[0] = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]); + out[1] = 255; + } + } + } else if (z->s->img_n == 4 && z->app14_color_transform == 0) { + for (i=0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + stbi_uc r = stbi__blinn_8x8(coutput[0][i], m); + stbi_uc g = stbi__blinn_8x8(coutput[1][i], m); + stbi_uc b = stbi__blinn_8x8(coutput[2][i], m); + out[0] = stbi__compute_y(r, g, b); + out[1] = 255; + out += n; + } + } else if (z->s->img_n == 4 && z->app14_color_transform == 2) { + for (i=0; i < z->s->img_x; ++i) { + out[0] = stbi__blinn_8x8(255 - coutput[0][i], coutput[3][i]); + out[1] = 255; + out += n; + } + } else { + stbi_uc *y = coutput[0]; + if (n == 1) + for (i=0; i < z->s->img_x; ++i) out[i] = y[i]; + else + for (i=0; i < z->s->img_x; ++i) { *out++ = y[i]; *out++ = 255; } + } + } + } + stbi__cleanup_jpeg(z); + *out_x = z->s->img_x; + *out_y = z->s->img_y; + if (comp) *comp = z->s->img_n >= 3 ? 3 : 1; // report original components, not output + return output; + } +} + +static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + unsigned char* result; + stbi__jpeg* j = (stbi__jpeg*) stbi__malloc(sizeof(stbi__jpeg)); + if (!j) return stbi__errpuc("outofmem", "Out of memory"); + STBI_NOTUSED(ri); + j->s = s; + stbi__setup_jpeg(j); + result = load_jpeg_image(j, x,y,comp,req_comp); + STBI_FREE(j); + return result; +} + +static int stbi__jpeg_test(stbi__context *s) +{ + int r; + stbi__jpeg* j = (stbi__jpeg*)stbi__malloc(sizeof(stbi__jpeg)); + if (!j) return stbi__err("outofmem", "Out of memory"); + j->s = s; + stbi__setup_jpeg(j); + r = stbi__decode_jpeg_header(j, STBI__SCAN_type); + stbi__rewind(s); + STBI_FREE(j); + return r; +} + +static int stbi__jpeg_info_raw(stbi__jpeg *j, int *x, int *y, int *comp) +{ + if (!stbi__decode_jpeg_header(j, STBI__SCAN_header)) { + stbi__rewind( j->s ); + return 0; + } + if (x) *x = j->s->img_x; + if (y) *y = j->s->img_y; + if (comp) *comp = j->s->img_n >= 3 ? 3 : 1; + return 1; +} + +static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp) +{ + int result; + stbi__jpeg* j = (stbi__jpeg*) (stbi__malloc(sizeof(stbi__jpeg))); + if (!j) return stbi__err("outofmem", "Out of memory"); + j->s = s; + result = stbi__jpeg_info_raw(j, x, y, comp); + STBI_FREE(j); + return result; +} +#endif + +// public domain zlib decode v0.2 Sean Barrett 2006-11-18 +// simple implementation +// - all input must be provided in an upfront buffer +// - all output is written to a single output buffer (can malloc/realloc) +// performance +// - fast huffman + +#ifndef STBI_NO_ZLIB + +// fast-way is faster to check than jpeg huffman, but slow way is slower +#define STBI__ZFAST_BITS 9 // accelerate all cases in default tables +#define STBI__ZFAST_MASK ((1 << STBI__ZFAST_BITS) - 1) +#define STBI__ZNSYMS 288 // number of symbols in literal/length alphabet + +// zlib-style huffman encoding +// (jpegs packs from left, zlib from right, so can't share code) +typedef struct +{ + stbi__uint16 fast[1 << STBI__ZFAST_BITS]; + stbi__uint16 firstcode[16]; + int maxcode[17]; + stbi__uint16 firstsymbol[16]; + stbi_uc size[STBI__ZNSYMS]; + stbi__uint16 value[STBI__ZNSYMS]; +} stbi__zhuffman; + +stbi_inline static int stbi__bitreverse16(int n) +{ + n = ((n & 0xAAAA) >> 1) | ((n & 0x5555) << 1); + n = ((n & 0xCCCC) >> 2) | ((n & 0x3333) << 2); + n = ((n & 0xF0F0) >> 4) | ((n & 0x0F0F) << 4); + n = ((n & 0xFF00) >> 8) | ((n & 0x00FF) << 8); + return n; +} + +stbi_inline static int stbi__bit_reverse(int v, int bits) +{ + STBI_ASSERT(bits <= 16); + // to bit reverse n bits, reverse 16 and shift + // e.g. 11 bits, bit reverse and shift away 5 + return stbi__bitreverse16(v) >> (16-bits); +} + +static int stbi__zbuild_huffman(stbi__zhuffman *z, const stbi_uc *sizelist, int num) +{ + int i,k=0; + int code, next_code[16], sizes[17]; + + // DEFLATE spec for generating codes + memset(sizes, 0, sizeof(sizes)); + memset(z->fast, 0, sizeof(z->fast)); + for (i=0; i < num; ++i) + ++sizes[sizelist[i]]; + sizes[0] = 0; + for (i=1; i < 16; ++i) + if (sizes[i] > (1 << i)) + return stbi__err("bad sizes", "Corrupt PNG"); + code = 0; + for (i=1; i < 16; ++i) { + next_code[i] = code; + z->firstcode[i] = (stbi__uint16) code; + z->firstsymbol[i] = (stbi__uint16) k; + code = (code + sizes[i]); + if (sizes[i]) + if (code-1 >= (1 << i)) return stbi__err("bad codelengths","Corrupt PNG"); + z->maxcode[i] = code << (16-i); // preshift for inner loop + code <<= 1; + k += sizes[i]; + } + z->maxcode[16] = 0x10000; // sentinel + for (i=0; i < num; ++i) { + int s = sizelist[i]; + if (s) { + int c = next_code[s] - z->firstcode[s] + z->firstsymbol[s]; + stbi__uint16 fastv = (stbi__uint16) ((s << 9) | i); + z->size [c] = (stbi_uc ) s; + z->value[c] = (stbi__uint16) i; + if (s <= STBI__ZFAST_BITS) { + int j = stbi__bit_reverse(next_code[s],s); + while (j < (1 << STBI__ZFAST_BITS)) { + z->fast[j] = fastv; + j += (1 << s); + } + } + ++next_code[s]; + } + } + return 1; +} + +// zlib-from-memory implementation for PNG reading +// because PNG allows splitting the zlib stream arbitrarily, +// and it's annoying structurally to have PNG call ZLIB call PNG, +// we require PNG read all the IDATs and combine them into a single +// memory buffer + +typedef struct +{ + stbi_uc *zbuffer, *zbuffer_end; + int num_bits; + stbi__uint32 code_buffer; + + char *zout; + char *zout_start; + char *zout_end; + int z_expandable; + + stbi__zhuffman z_length, z_distance; +} stbi__zbuf; + +stbi_inline static int stbi__zeof(stbi__zbuf *z) +{ + return (z->zbuffer >= z->zbuffer_end); +} + +stbi_inline static stbi_uc stbi__zget8(stbi__zbuf *z) +{ + return stbi__zeof(z) ? 0 : *z->zbuffer++; +} + +static void stbi__fill_bits(stbi__zbuf *z) +{ + do { + if (z->code_buffer >= (1U << z->num_bits)) { + z->zbuffer = z->zbuffer_end; /* treat this as EOF so we fail. */ + return; + } + z->code_buffer |= (unsigned int) stbi__zget8(z) << z->num_bits; + z->num_bits += 8; + } while (z->num_bits <= 24); +} + +stbi_inline static unsigned int stbi__zreceive(stbi__zbuf *z, int n) +{ + unsigned int k; + if (z->num_bits < n) stbi__fill_bits(z); + k = z->code_buffer & ((1 << n) - 1); + z->code_buffer >>= n; + z->num_bits -= n; + return k; +} + +static int stbi__zhuffman_decode_slowpath(stbi__zbuf *a, stbi__zhuffman *z) +{ + int b,s,k; + // not resolved by fast table, so compute it the slow way + // use jpeg approach, which requires MSbits at top + k = stbi__bit_reverse(a->code_buffer, 16); + for (s=STBI__ZFAST_BITS+1; ; ++s) + if (k < z->maxcode[s]) + break; + if (s >= 16) return -1; // invalid code! + // code size is s, so: + b = (k >> (16-s)) - z->firstcode[s] + z->firstsymbol[s]; + if (b >= STBI__ZNSYMS) return -1; // some data was corrupt somewhere! + if (z->size[b] != s) return -1; // was originally an assert, but report failure instead. + a->code_buffer >>= s; + a->num_bits -= s; + return z->value[b]; +} + +stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffman *z) +{ + int b,s; + if (a->num_bits < 16) { + if (stbi__zeof(a)) { + return -1; /* report error for unexpected end of data. */ + } + stbi__fill_bits(a); + } + b = z->fast[a->code_buffer & STBI__ZFAST_MASK]; + if (b) { + s = b >> 9; + a->code_buffer >>= s; + a->num_bits -= s; + return b & 511; + } + return stbi__zhuffman_decode_slowpath(a, z); +} + +static int stbi__zexpand(stbi__zbuf *z, char *zout, int n) // need to make room for n bytes +{ + char *q; + unsigned int cur, limit, old_limit; + z->zout = zout; + if (!z->z_expandable) return stbi__err("output buffer limit","Corrupt PNG"); + cur = (unsigned int) (z->zout - z->zout_start); + limit = old_limit = (unsigned) (z->zout_end - z->zout_start); + if (UINT_MAX - cur < (unsigned) n) return stbi__err("outofmem", "Out of memory"); + while (cur + n > limit) { + if(limit > UINT_MAX / 2) return stbi__err("outofmem", "Out of memory"); + limit *= 2; + } + q = (char *) STBI_REALLOC_SIZED(z->zout_start, old_limit, limit); + STBI_NOTUSED(old_limit); + if (q == NULL) return stbi__err("outofmem", "Out of memory"); + z->zout_start = q; + z->zout = q + cur; + z->zout_end = q + limit; + return 1; +} + +static const int stbi__zlength_base[31] = { + 3,4,5,6,7,8,9,10,11,13, + 15,17,19,23,27,31,35,43,51,59, + 67,83,99,115,131,163,195,227,258,0,0 }; + +static const int stbi__zlength_extra[31]= +{ 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0 }; + +static const int stbi__zdist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193, +257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0}; + +static const int stbi__zdist_extra[32] = +{ 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; + +static int stbi__parse_huffman_block(stbi__zbuf *a) +{ + char *zout = a->zout; + for(;;) { + int z = stbi__zhuffman_decode(a, &a->z_length); + if (z < 256) { + if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); // error in huffman codes + if (zout >= a->zout_end) { + if (!stbi__zexpand(a, zout, 1)) return 0; + zout = a->zout; + } + *zout++ = (char) z; + } else { + stbi_uc *p; + int len,dist; + if (z == 256) { + a->zout = zout; + return 1; + } + z -= 257; + len = stbi__zlength_base[z]; + if (stbi__zlength_extra[z]) len += stbi__zreceive(a, stbi__zlength_extra[z]); + z = stbi__zhuffman_decode(a, &a->z_distance); + if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); + dist = stbi__zdist_base[z]; + if (stbi__zdist_extra[z]) dist += stbi__zreceive(a, stbi__zdist_extra[z]); + if (zout - a->zout_start < dist) return stbi__err("bad dist","Corrupt PNG"); + if (zout + len > a->zout_end) { + if (!stbi__zexpand(a, zout, len)) return 0; + zout = a->zout; + } + p = (stbi_uc *) (zout - dist); + if (dist == 1) { // run of one byte; common in images. + stbi_uc v = *p; + if (len) { do *zout++ = v; while (--len); } + } else { + if (len) { do *zout++ = *p++; while (--len); } + } + } + } +} + +static int stbi__compute_huffman_codes(stbi__zbuf *a) +{ + static const stbi_uc length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 }; + stbi__zhuffman z_codelength; + stbi_uc lencodes[286+32+137];//padding for maximum single op + stbi_uc codelength_sizes[19]; + int i,n; + + int hlit = stbi__zreceive(a,5) + 257; + int hdist = stbi__zreceive(a,5) + 1; + int hclen = stbi__zreceive(a,4) + 4; + int ntot = hlit + hdist; + + memset(codelength_sizes, 0, sizeof(codelength_sizes)); + for (i=0; i < hclen; ++i) { + int s = stbi__zreceive(a,3); + codelength_sizes[length_dezigzag[i]] = (stbi_uc) s; + } + if (!stbi__zbuild_huffman(&z_codelength, codelength_sizes, 19)) return 0; + + n = 0; + while (n < ntot) { + int c = stbi__zhuffman_decode(a, &z_codelength); + if (c < 0 || c >= 19) return stbi__err("bad codelengths", "Corrupt PNG"); + if (c < 16) + lencodes[n++] = (stbi_uc) c; + else { + stbi_uc fill = 0; + if (c == 16) { + c = stbi__zreceive(a,2)+3; + if (n == 0) return stbi__err("bad codelengths", "Corrupt PNG"); + fill = lencodes[n-1]; + } else if (c == 17) { + c = stbi__zreceive(a,3)+3; + } else if (c == 18) { + c = stbi__zreceive(a,7)+11; + } else { + return stbi__err("bad codelengths", "Corrupt PNG"); + } + if (ntot - n < c) return stbi__err("bad codelengths", "Corrupt PNG"); + memset(lencodes+n, fill, c); + n += c; + } + } + if (n != ntot) return stbi__err("bad codelengths","Corrupt PNG"); + if (!stbi__zbuild_huffman(&a->z_length, lencodes, hlit)) return 0; + if (!stbi__zbuild_huffman(&a->z_distance, lencodes+hlit, hdist)) return 0; + return 1; +} + +static int stbi__parse_uncompressed_block(stbi__zbuf *a) +{ + stbi_uc header[4]; + int len,nlen,k; + if (a->num_bits & 7) + stbi__zreceive(a, a->num_bits & 7); // discard + // drain the bit-packed data into header + k = 0; + while (a->num_bits > 0) { + header[k++] = (stbi_uc) (a->code_buffer & 255); // suppress MSVC run-time check + a->code_buffer >>= 8; + a->num_bits -= 8; + } + if (a->num_bits < 0) return stbi__err("zlib corrupt","Corrupt PNG"); + // now fill header the normal way + while (k < 4) + header[k++] = stbi__zget8(a); + len = header[1] * 256 + header[0]; + nlen = header[3] * 256 + header[2]; + if (nlen != (len ^ 0xffff)) return stbi__err("zlib corrupt","Corrupt PNG"); + if (a->zbuffer + len > a->zbuffer_end) return stbi__err("read past buffer","Corrupt PNG"); + if (a->zout + len > a->zout_end) + if (!stbi__zexpand(a, a->zout, len)) return 0; + memcpy(a->zout, a->zbuffer, len); + a->zbuffer += len; + a->zout += len; + return 1; +} + +static int stbi__parse_zlib_header(stbi__zbuf *a) +{ + int cmf = stbi__zget8(a); + int cm = cmf & 15; + /* int cinfo = cmf >> 4; */ + int flg = stbi__zget8(a); + if (stbi__zeof(a)) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec + if ((cmf*256+flg) % 31 != 0) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec + if (flg & 32) return stbi__err("no preset dict","Corrupt PNG"); // preset dictionary not allowed in png + if (cm != 8) return stbi__err("bad compression","Corrupt PNG"); // DEFLATE required for png + // window = 1 << (8 + cinfo)... but who cares, we fully buffer output + return 1; +} + +static const stbi_uc stbi__zdefault_length[STBI__ZNSYMS] = +{ + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8 +}; +static const stbi_uc stbi__zdefault_distance[32] = +{ + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 +}; +/* +Init algorithm: +{ + int i; // use <= to match clearly with spec + for (i=0; i <= 143; ++i) stbi__zdefault_length[i] = 8; + for ( ; i <= 255; ++i) stbi__zdefault_length[i] = 9; + for ( ; i <= 279; ++i) stbi__zdefault_length[i] = 7; + for ( ; i <= 287; ++i) stbi__zdefault_length[i] = 8; + + for (i=0; i <= 31; ++i) stbi__zdefault_distance[i] = 5; +} +*/ + +static int stbi__parse_zlib(stbi__zbuf *a, int parse_header) +{ + int final, type; + if (parse_header) + if (!stbi__parse_zlib_header(a)) return 0; + a->num_bits = 0; + a->code_buffer = 0; + do { + final = stbi__zreceive(a,1); + type = stbi__zreceive(a,2); + if (type == 0) { + if (!stbi__parse_uncompressed_block(a)) return 0; + } else if (type == 3) { + return 0; + } else { + if (type == 1) { + // use fixed code lengths + if (!stbi__zbuild_huffman(&a->z_length , stbi__zdefault_length , STBI__ZNSYMS)) return 0; + if (!stbi__zbuild_huffman(&a->z_distance, stbi__zdefault_distance, 32)) return 0; + } else { + if (!stbi__compute_huffman_codes(a)) return 0; + } + if (!stbi__parse_huffman_block(a)) return 0; + } + } while (!final); + return 1; +} + +static int stbi__do_zlib(stbi__zbuf *a, char *obuf, int olen, int exp, int parse_header) +{ + a->zout_start = obuf; + a->zout = obuf; + a->zout_end = obuf + olen; + a->z_expandable = exp; + + return stbi__parse_zlib(a, parse_header); +} + +STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen) +{ + stbi__zbuf a; + char *p = (char *) stbi__malloc(initial_size); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *) buffer; + a.zbuffer_end = (stbi_uc *) buffer + len; + if (stbi__do_zlib(&a, p, initial_size, 1, 1)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF char *stbi_zlib_decode_malloc(char const *buffer, int len, int *outlen) +{ + return stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen); +} + +STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header) +{ + stbi__zbuf a; + char *p = (char *) stbi__malloc(initial_size); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *) buffer; + a.zbuffer_end = (stbi_uc *) buffer + len; + if (stbi__do_zlib(&a, p, initial_size, 1, parse_header)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, char const *ibuffer, int ilen) +{ + stbi__zbuf a; + a.zbuffer = (stbi_uc *) ibuffer; + a.zbuffer_end = (stbi_uc *) ibuffer + ilen; + if (stbi__do_zlib(&a, obuffer, olen, 0, 1)) + return (int) (a.zout - a.zout_start); + else + return -1; +} + +STBIDEF char *stbi_zlib_decode_noheader_malloc(char const *buffer, int len, int *outlen) +{ + stbi__zbuf a; + char *p = (char *) stbi__malloc(16384); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *) buffer; + a.zbuffer_end = (stbi_uc *) buffer+len; + if (stbi__do_zlib(&a, p, 16384, 1, 0)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen) +{ + stbi__zbuf a; + a.zbuffer = (stbi_uc *) ibuffer; + a.zbuffer_end = (stbi_uc *) ibuffer + ilen; + if (stbi__do_zlib(&a, obuffer, olen, 0, 0)) + return (int) (a.zout - a.zout_start); + else + return -1; +} +#endif + +// public domain "baseline" PNG decoder v0.10 Sean Barrett 2006-11-18 +// simple implementation +// - only 8-bit samples +// - no CRC checking +// - allocates lots of intermediate memory +// - avoids problem of streaming data between subsystems +// - avoids explicit window management +// performance +// - uses stb_zlib, a PD zlib implementation with fast huffman decoding + +#ifndef STBI_NO_PNG +typedef struct +{ + stbi__uint32 length; + stbi__uint32 type; +} stbi__pngchunk; + +static stbi__pngchunk stbi__get_chunk_header(stbi__context *s) +{ + stbi__pngchunk c; + c.length = stbi__get32be(s); + c.type = stbi__get32be(s); + return c; +} + +static int stbi__check_png_header(stbi__context *s) +{ + static const stbi_uc png_sig[8] = { 137,80,78,71,13,10,26,10 }; + int i; + for (i=0; i < 8; ++i) + if (stbi__get8(s) != png_sig[i]) return stbi__err("bad png sig","Not a PNG"); + return 1; +} + +typedef struct +{ + stbi__context *s; + stbi_uc *idata, *expanded, *out; + int depth; +} stbi__png; + + +enum { + STBI__F_none=0, + STBI__F_sub=1, + STBI__F_up=2, + STBI__F_avg=3, + STBI__F_paeth=4, + // synthetic filters used for first scanline to avoid needing a dummy row of 0s + STBI__F_avg_first, + STBI__F_paeth_first +}; + +static stbi_uc first_row_filter[5] = +{ + STBI__F_none, + STBI__F_sub, + STBI__F_none, + STBI__F_avg_first, + STBI__F_paeth_first +}; + +static int stbi__paeth(int a, int b, int c) +{ + int p = a + b - c; + int pa = abs(p-a); + int pb = abs(p-b); + int pc = abs(p-c); + if (pa <= pb && pa <= pc) return a; + if (pb <= pc) return b; + return c; +} + +static const stbi_uc stbi__depth_scale_table[9] = { 0, 0xff, 0x55, 0, 0x11, 0,0,0, 0x01 }; + +// create the png data from post-deflated data +static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 raw_len, int out_n, stbi__uint32 x, stbi__uint32 y, int depth, int color) +{ + int bytes = (depth == 16? 2 : 1); + stbi__context *s = a->s; + stbi__uint32 i,j,stride = x*out_n*bytes; + stbi__uint32 img_len, img_width_bytes; + int k; + int img_n = s->img_n; // copy it into a local for later + + int output_bytes = out_n*bytes; + int filter_bytes = img_n*bytes; + int width = x; + + STBI_ASSERT(out_n == s->img_n || out_n == s->img_n+1); + a->out = (stbi_uc *) stbi__malloc_mad3(x, y, output_bytes, 0); // extra bytes to write off the end into + if (!a->out) return stbi__err("outofmem", "Out of memory"); + + if (!stbi__mad3sizes_valid(img_n, x, depth, 7)) return stbi__err("too large", "Corrupt PNG"); + img_width_bytes = (((img_n * x * depth) + 7) >> 3); + img_len = (img_width_bytes + 1) * y; + + // we used to check for exact match between raw_len and img_len on non-interlaced PNGs, + // but issue #276 reported a PNG in the wild that had extra data at the end (all zeros), + // so just check for raw_len < img_len always. + if (raw_len < img_len) return stbi__err("not enough pixels","Corrupt PNG"); + + for (j=0; j < y; ++j) { + stbi_uc *cur = a->out + stride*j; + stbi_uc *prior; + int filter = *raw++; + + if (filter > 4) + return stbi__err("invalid filter","Corrupt PNG"); + + if (depth < 8) { + if (img_width_bytes > x) return stbi__err("invalid width","Corrupt PNG"); + cur += x*out_n - img_width_bytes; // store output to the rightmost img_len bytes, so we can decode in place + filter_bytes = 1; + width = img_width_bytes; + } + prior = cur - stride; // bugfix: need to compute this after 'cur +=' computation above + + // if first row, use special filter that doesn't sample previous row + if (j == 0) filter = first_row_filter[filter]; + + // handle first byte explicitly + for (k=0; k < filter_bytes; ++k) { + switch (filter) { + case STBI__F_none : cur[k] = raw[k]; break; + case STBI__F_sub : cur[k] = raw[k]; break; + case STBI__F_up : cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; + case STBI__F_avg : cur[k] = STBI__BYTECAST(raw[k] + (prior[k]>>1)); break; + case STBI__F_paeth : cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(0,prior[k],0)); break; + case STBI__F_avg_first : cur[k] = raw[k]; break; + case STBI__F_paeth_first: cur[k] = raw[k]; break; + } + } + + if (depth == 8) { + if (img_n != out_n) + cur[img_n] = 255; // first pixel + raw += img_n; + cur += out_n; + prior += out_n; + } else if (depth == 16) { + if (img_n != out_n) { + cur[filter_bytes] = 255; // first pixel top byte + cur[filter_bytes+1] = 255; // first pixel bottom byte + } + raw += filter_bytes; + cur += output_bytes; + prior += output_bytes; + } else { + raw += 1; + cur += 1; + prior += 1; + } + + // this is a little gross, so that we don't switch per-pixel or per-component + if (depth < 8 || img_n == out_n) { + int nk = (width - 1)*filter_bytes; + #define STBI__CASE(f) \ + case f: \ + for (k=0; k < nk; ++k) + switch (filter) { + // "none" filter turns into a memcpy here; make that explicit. + case STBI__F_none: memcpy(cur, raw, nk); break; + STBI__CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k-filter_bytes]); } break; + STBI__CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break; + STBI__CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-filter_bytes])>>1)); } break; + STBI__CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],prior[k],prior[k-filter_bytes])); } break; + STBI__CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k-filter_bytes] >> 1)); } break; + STBI__CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],0,0)); } break; + } + #undef STBI__CASE + raw += nk; + } else { + STBI_ASSERT(img_n+1 == out_n); + #define STBI__CASE(f) \ + case f: \ + for (i=x-1; i >= 1; --i, cur[filter_bytes]=255,raw+=filter_bytes,cur+=output_bytes,prior+=output_bytes) \ + for (k=0; k < filter_bytes; ++k) + switch (filter) { + STBI__CASE(STBI__F_none) { cur[k] = raw[k]; } break; + STBI__CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k- output_bytes]); } break; + STBI__CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break; + STBI__CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k- output_bytes])>>1)); } break; + STBI__CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],prior[k],prior[k- output_bytes])); } break; + STBI__CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k- output_bytes] >> 1)); } break; + STBI__CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],0,0)); } break; + } + #undef STBI__CASE + + // the loop above sets the high byte of the pixels' alpha, but for + // 16 bit png files we also need the low byte set. we'll do that here. + if (depth == 16) { + cur = a->out + stride*j; // start at the beginning of the row again + for (i=0; i < x; ++i,cur+=output_bytes) { + cur[filter_bytes+1] = 255; + } + } + } + } + + // we make a separate pass to expand bits to pixels; for performance, + // this could run two scanlines behind the above code, so it won't + // intefere with filtering but will still be in the cache. + if (depth < 8) { + for (j=0; j < y; ++j) { + stbi_uc *cur = a->out + stride*j; + stbi_uc *in = a->out + stride*j + x*out_n - img_width_bytes; + // unpack 1/2/4-bit into a 8-bit buffer. allows us to keep the common 8-bit path optimal at minimal cost for 1/2/4-bit + // png guarante byte alignment, if width is not multiple of 8/4/2 we'll decode dummy trailing data that will be skipped in the later loop + stbi_uc scale = (color == 0) ? stbi__depth_scale_table[depth] : 1; // scale grayscale values to 0..255 range + + // note that the final byte might overshoot and write more data than desired. + // we can allocate enough data that this never writes out of memory, but it + // could also overwrite the next scanline. can it overwrite non-empty data + // on the next scanline? yes, consider 1-pixel-wide scanlines with 1-bit-per-pixel. + // so we need to explicitly clamp the final ones + + if (depth == 4) { + for (k=x*img_n; k >= 2; k-=2, ++in) { + *cur++ = scale * ((*in >> 4) ); + *cur++ = scale * ((*in ) & 0x0f); + } + if (k > 0) *cur++ = scale * ((*in >> 4) ); + } else if (depth == 2) { + for (k=x*img_n; k >= 4; k-=4, ++in) { + *cur++ = scale * ((*in >> 6) ); + *cur++ = scale * ((*in >> 4) & 0x03); + *cur++ = scale * ((*in >> 2) & 0x03); + *cur++ = scale * ((*in ) & 0x03); + } + if (k > 0) *cur++ = scale * ((*in >> 6) ); + if (k > 1) *cur++ = scale * ((*in >> 4) & 0x03); + if (k > 2) *cur++ = scale * ((*in >> 2) & 0x03); + } else if (depth == 1) { + for (k=x*img_n; k >= 8; k-=8, ++in) { + *cur++ = scale * ((*in >> 7) ); + *cur++ = scale * ((*in >> 6) & 0x01); + *cur++ = scale * ((*in >> 5) & 0x01); + *cur++ = scale * ((*in >> 4) & 0x01); + *cur++ = scale * ((*in >> 3) & 0x01); + *cur++ = scale * ((*in >> 2) & 0x01); + *cur++ = scale * ((*in >> 1) & 0x01); + *cur++ = scale * ((*in ) & 0x01); + } + if (k > 0) *cur++ = scale * ((*in >> 7) ); + if (k > 1) *cur++ = scale * ((*in >> 6) & 0x01); + if (k > 2) *cur++ = scale * ((*in >> 5) & 0x01); + if (k > 3) *cur++ = scale * ((*in >> 4) & 0x01); + if (k > 4) *cur++ = scale * ((*in >> 3) & 0x01); + if (k > 5) *cur++ = scale * ((*in >> 2) & 0x01); + if (k > 6) *cur++ = scale * ((*in >> 1) & 0x01); + } + if (img_n != out_n) { + int q; + // insert alpha = 255 + cur = a->out + stride*j; + if (img_n == 1) { + for (q=x-1; q >= 0; --q) { + cur[q*2+1] = 255; + cur[q*2+0] = cur[q]; + } + } else { + STBI_ASSERT(img_n == 3); + for (q=x-1; q >= 0; --q) { + cur[q*4+3] = 255; + cur[q*4+2] = cur[q*3+2]; + cur[q*4+1] = cur[q*3+1]; + cur[q*4+0] = cur[q*3+0]; + } + } + } + } + } else if (depth == 16) { + // force the image data from big-endian to platform-native. + // this is done in a separate pass due to the decoding relying + // on the data being untouched, but could probably be done + // per-line during decode if care is taken. + stbi_uc *cur = a->out; + stbi__uint16 *cur16 = (stbi__uint16*)cur; + + for(i=0; i < x*y*out_n; ++i,cur16++,cur+=2) { + *cur16 = (cur[0] << 8) | cur[1]; + } + } + + return 1; +} + +static int stbi__create_png_image(stbi__png *a, stbi_uc *image_data, stbi__uint32 image_data_len, int out_n, int depth, int color, int interlaced) +{ + int bytes = (depth == 16 ? 2 : 1); + int out_bytes = out_n * bytes; + stbi_uc *final; + int p; + if (!interlaced) + return stbi__create_png_image_raw(a, image_data, image_data_len, out_n, a->s->img_x, a->s->img_y, depth, color); + + // de-interlacing + final = (stbi_uc *) stbi__malloc_mad3(a->s->img_x, a->s->img_y, out_bytes, 0); + if (!final) return stbi__err("outofmem", "Out of memory"); + for (p=0; p < 7; ++p) { + int xorig[] = { 0,4,0,2,0,1,0 }; + int yorig[] = { 0,0,4,0,2,0,1 }; + int xspc[] = { 8,8,4,4,2,2,1 }; + int yspc[] = { 8,8,8,4,4,2,2 }; + int i,j,x,y; + // pass1_x[4] = 0, pass1_x[5] = 1, pass1_x[12] = 1 + x = (a->s->img_x - xorig[p] + xspc[p]-1) / xspc[p]; + y = (a->s->img_y - yorig[p] + yspc[p]-1) / yspc[p]; + if (x && y) { + stbi__uint32 img_len = ((((a->s->img_n * x * depth) + 7) >> 3) + 1) * y; + if (!stbi__create_png_image_raw(a, image_data, image_data_len, out_n, x, y, depth, color)) { + STBI_FREE(final); + return 0; + } + for (j=0; j < y; ++j) { + for (i=0; i < x; ++i) { + int out_y = j*yspc[p]+yorig[p]; + int out_x = i*xspc[p]+xorig[p]; + memcpy(final + out_y*a->s->img_x*out_bytes + out_x*out_bytes, + a->out + (j*x+i)*out_bytes, out_bytes); + } + } + STBI_FREE(a->out); + image_data += img_len; + image_data_len -= img_len; + } + } + a->out = final; + + return 1; +} + +static int stbi__compute_transparency(stbi__png *z, stbi_uc tc[3], int out_n) +{ + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc *p = z->out; + + // compute color-based transparency, assuming we've + // already got 255 as the alpha value in the output + STBI_ASSERT(out_n == 2 || out_n == 4); + + if (out_n == 2) { + for (i=0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 255); + p += 2; + } + } else { + for (i=0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) + p[3] = 0; + p += 4; + } + } + return 1; +} + +static int stbi__compute_transparency16(stbi__png *z, stbi__uint16 tc[3], int out_n) +{ + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi__uint16 *p = (stbi__uint16*) z->out; + + // compute color-based transparency, assuming we've + // already got 65535 as the alpha value in the output + STBI_ASSERT(out_n == 2 || out_n == 4); + + if (out_n == 2) { + for (i = 0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 65535); + p += 2; + } + } else { + for (i = 0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) + p[3] = 0; + p += 4; + } + } + return 1; +} + +static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int len, int pal_img_n) +{ + stbi__uint32 i, pixel_count = a->s->img_x * a->s->img_y; + stbi_uc *p, *temp_out, *orig = a->out; + + p = (stbi_uc *) stbi__malloc_mad2(pixel_count, pal_img_n, 0); + if (p == NULL) return stbi__err("outofmem", "Out of memory"); + + // between here and free(out) below, exitting would leak + temp_out = p; + + if (pal_img_n == 3) { + for (i=0; i < pixel_count; ++i) { + int n = orig[i]*4; + p[0] = palette[n ]; + p[1] = palette[n+1]; + p[2] = palette[n+2]; + p += 3; + } + } else { + for (i=0; i < pixel_count; ++i) { + int n = orig[i]*4; + p[0] = palette[n ]; + p[1] = palette[n+1]; + p[2] = palette[n+2]; + p[3] = palette[n+3]; + p += 4; + } + } + STBI_FREE(a->out); + a->out = temp_out; + + STBI_NOTUSED(len); + + return 1; +} + +static int stbi__unpremultiply_on_load_global = 0; +static int stbi__de_iphone_flag_global = 0; + +STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply) +{ + stbi__unpremultiply_on_load_global = flag_true_if_should_unpremultiply; +} + +STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert) +{ + stbi__de_iphone_flag_global = flag_true_if_should_convert; +} + +#ifndef STBI_THREAD_LOCAL +#define stbi__unpremultiply_on_load stbi__unpremultiply_on_load_global +#define stbi__de_iphone_flag stbi__de_iphone_flag_global +#else +static STBI_THREAD_LOCAL int stbi__unpremultiply_on_load_local, stbi__unpremultiply_on_load_set; +static STBI_THREAD_LOCAL int stbi__de_iphone_flag_local, stbi__de_iphone_flag_set; + +STBIDEF void stbi__unpremultiply_on_load_thread(int flag_true_if_should_unpremultiply) +{ + stbi__unpremultiply_on_load_local = flag_true_if_should_unpremultiply; + stbi__unpremultiply_on_load_set = 1; +} + +STBIDEF void stbi_convert_iphone_png_to_rgb_thread(int flag_true_if_should_convert) +{ + stbi__de_iphone_flag_local = flag_true_if_should_convert; + stbi__de_iphone_flag_set = 1; +} + +#define stbi__unpremultiply_on_load (stbi__unpremultiply_on_load_set \ + ? stbi__unpremultiply_on_load_local \ + : stbi__unpremultiply_on_load_global) +#define stbi__de_iphone_flag (stbi__de_iphone_flag_set \ + ? stbi__de_iphone_flag_local \ + : stbi__de_iphone_flag_global) +#endif // STBI_THREAD_LOCAL + +static void stbi__de_iphone(stbi__png *z) +{ + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc *p = z->out; + + if (s->img_out_n == 3) { // convert bgr to rgb + for (i=0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 3; + } + } else { + STBI_ASSERT(s->img_out_n == 4); + if (stbi__unpremultiply_on_load) { + // convert bgr to rgb and unpremultiply + for (i=0; i < pixel_count; ++i) { + stbi_uc a = p[3]; + stbi_uc t = p[0]; + if (a) { + stbi_uc half = a / 2; + p[0] = (p[2] * 255 + half) / a; + p[1] = (p[1] * 255 + half) / a; + p[2] = ( t * 255 + half) / a; + } else { + p[0] = p[2]; + p[2] = t; + } + p += 4; + } + } else { + // convert bgr to rgb + for (i=0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 4; + } + } + } +} + +#define STBI__PNG_TYPE(a,b,c,d) (((unsigned) (a) << 24) + ((unsigned) (b) << 16) + ((unsigned) (c) << 8) + (unsigned) (d)) + +static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp) +{ + stbi_uc palette[1024], pal_img_n=0; + stbi_uc has_trans=0, tc[3]={0}; + stbi__uint16 tc16[3]; + stbi__uint32 ioff=0, idata_limit=0, i, pal_len=0; + int first=1,k,interlace=0, color=0, is_iphone=0; + stbi__context *s = z->s; + + z->expanded = NULL; + z->idata = NULL; + z->out = NULL; + + if (!stbi__check_png_header(s)) return 0; + + if (scan == STBI__SCAN_type) return 1; + + for (;;) { + stbi__pngchunk c = stbi__get_chunk_header(s); + switch (c.type) { + case STBI__PNG_TYPE('C','g','B','I'): + is_iphone = 1; + stbi__skip(s, c.length); + break; + case STBI__PNG_TYPE('I','H','D','R'): { + int comp,filter; + if (!first) return stbi__err("multiple IHDR","Corrupt PNG"); + first = 0; + if (c.length != 13) return stbi__err("bad IHDR len","Corrupt PNG"); + s->img_x = stbi__get32be(s); + s->img_y = stbi__get32be(s); + if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + z->depth = stbi__get8(s); if (z->depth != 1 && z->depth != 2 && z->depth != 4 && z->depth != 8 && z->depth != 16) return stbi__err("1/2/4/8/16-bit only","PNG not supported: 1/2/4/8/16-bit only"); + color = stbi__get8(s); if (color > 6) return stbi__err("bad ctype","Corrupt PNG"); + if (color == 3 && z->depth == 16) return stbi__err("bad ctype","Corrupt PNG"); + if (color == 3) pal_img_n = 3; else if (color & 1) return stbi__err("bad ctype","Corrupt PNG"); + comp = stbi__get8(s); if (comp) return stbi__err("bad comp method","Corrupt PNG"); + filter= stbi__get8(s); if (filter) return stbi__err("bad filter method","Corrupt PNG"); + interlace = stbi__get8(s); if (interlace>1) return stbi__err("bad interlace method","Corrupt PNG"); + if (!s->img_x || !s->img_y) return stbi__err("0-pixel image","Corrupt PNG"); + if (!pal_img_n) { + s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0); + if ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err("too large", "Image too large to decode"); + if (scan == STBI__SCAN_header) return 1; + } else { + // if paletted, then pal_n is our final components, and + // img_n is # components to decompress/filter. + s->img_n = 1; + if ((1 << 30) / s->img_x / 4 < s->img_y) return stbi__err("too large","Corrupt PNG"); + // if SCAN_header, have to scan to see if we have a tRNS + } + break; + } + + case STBI__PNG_TYPE('P','L','T','E'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (c.length > 256*3) return stbi__err("invalid PLTE","Corrupt PNG"); + pal_len = c.length / 3; + if (pal_len * 3 != c.length) return stbi__err("invalid PLTE","Corrupt PNG"); + for (i=0; i < pal_len; ++i) { + palette[i*4+0] = stbi__get8(s); + palette[i*4+1] = stbi__get8(s); + palette[i*4+2] = stbi__get8(s); + palette[i*4+3] = 255; + } + break; + } + + case STBI__PNG_TYPE('t','R','N','S'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (z->idata) return stbi__err("tRNS after IDAT","Corrupt PNG"); + if (pal_img_n) { + if (scan == STBI__SCAN_header) { s->img_n = 4; return 1; } + if (pal_len == 0) return stbi__err("tRNS before PLTE","Corrupt PNG"); + if (c.length > pal_len) return stbi__err("bad tRNS len","Corrupt PNG"); + pal_img_n = 4; + for (i=0; i < c.length; ++i) + palette[i*4+3] = stbi__get8(s); + } else { + if (!(s->img_n & 1)) return stbi__err("tRNS with alpha","Corrupt PNG"); + if (c.length != (stbi__uint32) s->img_n*2) return stbi__err("bad tRNS len","Corrupt PNG"); + has_trans = 1; + if (z->depth == 16) { + for (k = 0; k < s->img_n; ++k) tc16[k] = (stbi__uint16)stbi__get16be(s); // copy the values as-is + } else { + for (k = 0; k < s->img_n; ++k) tc[k] = (stbi_uc)(stbi__get16be(s) & 255) * stbi__depth_scale_table[z->depth]; // non 8-bit images will be larger + } + } + break; + } + + case STBI__PNG_TYPE('I','D','A','T'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (pal_img_n && !pal_len) return stbi__err("no PLTE","Corrupt PNG"); + if (scan == STBI__SCAN_header) { s->img_n = pal_img_n; return 1; } + if ((int)(ioff + c.length) < (int)ioff) return 0; + if (ioff + c.length > idata_limit) { + stbi__uint32 idata_limit_old = idata_limit; + stbi_uc *p; + if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096; + while (ioff + c.length > idata_limit) + idata_limit *= 2; + STBI_NOTUSED(idata_limit_old); + p = (stbi_uc *) STBI_REALLOC_SIZED(z->idata, idata_limit_old, idata_limit); if (p == NULL) return stbi__err("outofmem", "Out of memory"); + z->idata = p; + } + if (!stbi__getn(s, z->idata+ioff,c.length)) return stbi__err("outofdata","Corrupt PNG"); + ioff += c.length; + break; + } + + case STBI__PNG_TYPE('I','E','N','D'): { + stbi__uint32 raw_len, bpl; + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (scan != STBI__SCAN_load) return 1; + if (z->idata == NULL) return stbi__err("no IDAT","Corrupt PNG"); + // initial guess for decoded data size to avoid unnecessary reallocs + bpl = (s->img_x * z->depth + 7) / 8; // bytes per line, per component + raw_len = bpl * s->img_y * s->img_n /* pixels */ + s->img_y /* filter mode per row */; + z->expanded = (stbi_uc *) stbi_zlib_decode_malloc_guesssize_headerflag((char *) z->idata, ioff, raw_len, (int *) &raw_len, !is_iphone); + if (z->expanded == NULL) return 0; // zlib should set error + STBI_FREE(z->idata); z->idata = NULL; + if ((req_comp == s->img_n+1 && req_comp != 3 && !pal_img_n) || has_trans) + s->img_out_n = s->img_n+1; + else + s->img_out_n = s->img_n; + if (!stbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, z->depth, color, interlace)) return 0; + if (has_trans) { + if (z->depth == 16) { + if (!stbi__compute_transparency16(z, tc16, s->img_out_n)) return 0; + } else { + if (!stbi__compute_transparency(z, tc, s->img_out_n)) return 0; + } + } + if (is_iphone && stbi__de_iphone_flag && s->img_out_n > 2) + stbi__de_iphone(z); + if (pal_img_n) { + // pal_img_n == 3 or 4 + s->img_n = pal_img_n; // record the actual colors we had + s->img_out_n = pal_img_n; + if (req_comp >= 3) s->img_out_n = req_comp; + if (!stbi__expand_png_palette(z, palette, pal_len, s->img_out_n)) + return 0; + } else if (has_trans) { + // non-paletted image with tRNS -> source image has (constant) alpha + ++s->img_n; + } + STBI_FREE(z->expanded); z->expanded = NULL; + // end of PNG chunk, read and skip CRC + stbi__get32be(s); + return 1; + } + + default: + // if critical, fail + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if ((c.type & (1 << 29)) == 0) { + #ifndef STBI_NO_FAILURE_STRINGS + // not threadsafe + static char invalid_chunk[] = "XXXX PNG chunk not known"; + invalid_chunk[0] = STBI__BYTECAST(c.type >> 24); + invalid_chunk[1] = STBI__BYTECAST(c.type >> 16); + invalid_chunk[2] = STBI__BYTECAST(c.type >> 8); + invalid_chunk[3] = STBI__BYTECAST(c.type >> 0); + #endif + return stbi__err(invalid_chunk, "PNG not supported: unknown PNG chunk type"); + } + stbi__skip(s, c.length); + break; + } + // end of PNG chunk, read and skip CRC + stbi__get32be(s); + } +} + +static void *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req_comp, stbi__result_info *ri) +{ + void *result=NULL; + if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); + if (stbi__parse_png_file(p, STBI__SCAN_load, req_comp)) { + if (p->depth <= 8) + ri->bits_per_channel = 8; + else if (p->depth == 16) + ri->bits_per_channel = 16; + else + return stbi__errpuc("bad bits_per_channel", "PNG not supported: unsupported color depth"); + result = p->out; + p->out = NULL; + if (req_comp && req_comp != p->s->img_out_n) { + if (ri->bits_per_channel == 8) + result = stbi__convert_format((unsigned char *) result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); + else + result = stbi__convert_format16((stbi__uint16 *) result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); + p->s->img_out_n = req_comp; + if (result == NULL) return result; + } + *x = p->s->img_x; + *y = p->s->img_y; + if (n) *n = p->s->img_n; + } + STBI_FREE(p->out); p->out = NULL; + STBI_FREE(p->expanded); p->expanded = NULL; + STBI_FREE(p->idata); p->idata = NULL; + + return result; +} + +static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + stbi__png p; + p.s = s; + return stbi__do_png(&p, x,y,comp,req_comp, ri); +} + +static int stbi__png_test(stbi__context *s) +{ + int r; + r = stbi__check_png_header(s); + stbi__rewind(s); + return r; +} + +static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp) +{ + if (!stbi__parse_png_file(p, STBI__SCAN_header, 0)) { + stbi__rewind( p->s ); + return 0; + } + if (x) *x = p->s->img_x; + if (y) *y = p->s->img_y; + if (comp) *comp = p->s->img_n; + return 1; +} + +static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp) +{ + stbi__png p; + p.s = s; + return stbi__png_info_raw(&p, x, y, comp); +} + +static int stbi__png_is16(stbi__context *s) +{ + stbi__png p; + p.s = s; + if (!stbi__png_info_raw(&p, NULL, NULL, NULL)) + return 0; + if (p.depth != 16) { + stbi__rewind(p.s); + return 0; + } + return 1; +} +#endif + +// Microsoft/Windows BMP image + +#ifndef STBI_NO_BMP +static int stbi__bmp_test_raw(stbi__context *s) +{ + int r; + int sz; + if (stbi__get8(s) != 'B') return 0; + if (stbi__get8(s) != 'M') return 0; + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + stbi__get32le(s); // discard data offset + sz = stbi__get32le(s); + r = (sz == 12 || sz == 40 || sz == 56 || sz == 108 || sz == 124); + return r; +} + +static int stbi__bmp_test(stbi__context *s) +{ + int r = stbi__bmp_test_raw(s); + stbi__rewind(s); + return r; +} + + +// returns 0..31 for the highest set bit +static int stbi__high_bit(unsigned int z) +{ + int n=0; + if (z == 0) return -1; + if (z >= 0x10000) { n += 16; z >>= 16; } + if (z >= 0x00100) { n += 8; z >>= 8; } + if (z >= 0x00010) { n += 4; z >>= 4; } + if (z >= 0x00004) { n += 2; z >>= 2; } + if (z >= 0x00002) { n += 1;/* >>= 1;*/ } + return n; +} + +static int stbi__bitcount(unsigned int a) +{ + a = (a & 0x55555555) + ((a >> 1) & 0x55555555); // max 2 + a = (a & 0x33333333) + ((a >> 2) & 0x33333333); // max 4 + a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits + a = (a + (a >> 8)); // max 16 per 8 bits + a = (a + (a >> 16)); // max 32 per 8 bits + return a & 0xff; +} + +// extract an arbitrarily-aligned N-bit value (N=bits) +// from v, and then make it 8-bits long and fractionally +// extend it to full full range. +static int stbi__shiftsigned(unsigned int v, int shift, int bits) +{ + static unsigned int mul_table[9] = { + 0, + 0xff/*0b11111111*/, 0x55/*0b01010101*/, 0x49/*0b01001001*/, 0x11/*0b00010001*/, + 0x21/*0b00100001*/, 0x41/*0b01000001*/, 0x81/*0b10000001*/, 0x01/*0b00000001*/, + }; + static unsigned int shift_table[9] = { + 0, 0,0,1,0,2,4,6,0, + }; + if (shift < 0) + v <<= -shift; + else + v >>= shift; + STBI_ASSERT(v < 256); + v >>= (8-bits); + STBI_ASSERT(bits >= 0 && bits <= 8); + return (int) ((unsigned) v * mul_table[bits]) >> shift_table[bits]; +} + +typedef struct +{ + int bpp, offset, hsz; + unsigned int mr,mg,mb,ma, all_a; + int extra_read; +} stbi__bmp_data; + +static int stbi__bmp_set_mask_defaults(stbi__bmp_data *info, int compress) +{ + // BI_BITFIELDS specifies masks explicitly, don't override + if (compress == 3) + return 1; + + if (compress == 0) { + if (info->bpp == 16) { + info->mr = 31u << 10; + info->mg = 31u << 5; + info->mb = 31u << 0; + } else if (info->bpp == 32) { + info->mr = 0xffu << 16; + info->mg = 0xffu << 8; + info->mb = 0xffu << 0; + info->ma = 0xffu << 24; + info->all_a = 0; // if all_a is 0 at end, then we loaded alpha channel but it was all 0 + } else { + // otherwise, use defaults, which is all-0 + info->mr = info->mg = info->mb = info->ma = 0; + } + return 1; + } + return 0; // error +} + +static void *stbi__bmp_parse_header(stbi__context *s, stbi__bmp_data *info) +{ + int hsz; + if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') return stbi__errpuc("not BMP", "Corrupt BMP"); + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + info->offset = stbi__get32le(s); + info->hsz = hsz = stbi__get32le(s); + info->mr = info->mg = info->mb = info->ma = 0; + info->extra_read = 14; + + if (info->offset < 0) return stbi__errpuc("bad BMP", "bad BMP"); + + if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) return stbi__errpuc("unknown BMP", "BMP type not supported: unknown"); + if (hsz == 12) { + s->img_x = stbi__get16le(s); + s->img_y = stbi__get16le(s); + } else { + s->img_x = stbi__get32le(s); + s->img_y = stbi__get32le(s); + } + if (stbi__get16le(s) != 1) return stbi__errpuc("bad BMP", "bad BMP"); + info->bpp = stbi__get16le(s); + if (hsz != 12) { + int compress = stbi__get32le(s); + if (compress == 1 || compress == 2) return stbi__errpuc("BMP RLE", "BMP type not supported: RLE"); + if (compress >= 4) return stbi__errpuc("BMP JPEG/PNG", "BMP type not supported: unsupported compression"); // this includes PNG/JPEG modes + if (compress == 3 && info->bpp != 16 && info->bpp != 32) return stbi__errpuc("bad BMP", "bad BMP"); // bitfields requires 16 or 32 bits/pixel + stbi__get32le(s); // discard sizeof + stbi__get32le(s); // discard hres + stbi__get32le(s); // discard vres + stbi__get32le(s); // discard colorsused + stbi__get32le(s); // discard max important + if (hsz == 40 || hsz == 56) { + if (hsz == 56) { + stbi__get32le(s); + stbi__get32le(s); + stbi__get32le(s); + stbi__get32le(s); + } + if (info->bpp == 16 || info->bpp == 32) { + if (compress == 0) { + stbi__bmp_set_mask_defaults(info, compress); + } else if (compress == 3) { + info->mr = stbi__get32le(s); + info->mg = stbi__get32le(s); + info->mb = stbi__get32le(s); + info->extra_read += 12; + // not documented, but generated by photoshop and handled by mspaint + if (info->mr == info->mg && info->mg == info->mb) { + // ?!?!? + return stbi__errpuc("bad BMP", "bad BMP"); + } + } else + return stbi__errpuc("bad BMP", "bad BMP"); + } + } else { + // V4/V5 header + int i; + if (hsz != 108 && hsz != 124) + return stbi__errpuc("bad BMP", "bad BMP"); + info->mr = stbi__get32le(s); + info->mg = stbi__get32le(s); + info->mb = stbi__get32le(s); + info->ma = stbi__get32le(s); + if (compress != 3) // override mr/mg/mb unless in BI_BITFIELDS mode, as per docs + stbi__bmp_set_mask_defaults(info, compress); + stbi__get32le(s); // discard color space + for (i=0; i < 12; ++i) + stbi__get32le(s); // discard color space parameters + if (hsz == 124) { + stbi__get32le(s); // discard rendering intent + stbi__get32le(s); // discard offset of profile data + stbi__get32le(s); // discard size of profile data + stbi__get32le(s); // discard reserved + } + } + } + return (void *) 1; +} + + +static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + stbi_uc *out; + unsigned int mr=0,mg=0,mb=0,ma=0, all_a; + stbi_uc pal[256][4]; + int psize=0,i,j,width; + int flip_vertically, pad, target; + stbi__bmp_data info; + STBI_NOTUSED(ri); + + info.all_a = 255; + if (stbi__bmp_parse_header(s, &info) == NULL) + return NULL; // error code already set + + flip_vertically = ((int) s->img_y) > 0; + s->img_y = abs((int) s->img_y); + + if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + mr = info.mr; + mg = info.mg; + mb = info.mb; + ma = info.ma; + all_a = info.all_a; + + if (info.hsz == 12) { + if (info.bpp < 24) + psize = (info.offset - info.extra_read - 24) / 3; + } else { + if (info.bpp < 16) + psize = (info.offset - info.extra_read - info.hsz) >> 2; + } + if (psize == 0) { + if (info.offset != s->callback_already_read + (s->img_buffer - s->img_buffer_original)) { + return stbi__errpuc("bad offset", "Corrupt BMP"); + } + } + + if (info.bpp == 24 && ma == 0xff000000) + s->img_n = 3; + else + s->img_n = ma ? 4 : 3; + if (req_comp && req_comp >= 3) // we can directly decode 3 or 4 + target = req_comp; + else + target = s->img_n; // if they want monochrome, we'll post-convert + + // sanity-check size + if (!stbi__mad3sizes_valid(target, s->img_x, s->img_y, 0)) + return stbi__errpuc("too large", "Corrupt BMP"); + + out = (stbi_uc *) stbi__malloc_mad3(target, s->img_x, s->img_y, 0); + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + if (info.bpp < 16) { + int z=0; + if (psize == 0 || psize > 256) { STBI_FREE(out); return stbi__errpuc("invalid", "Corrupt BMP"); } + for (i=0; i < psize; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + if (info.hsz != 12) stbi__get8(s); + pal[i][3] = 255; + } + stbi__skip(s, info.offset - info.extra_read - info.hsz - psize * (info.hsz == 12 ? 3 : 4)); + if (info.bpp == 1) width = (s->img_x + 7) >> 3; + else if (info.bpp == 4) width = (s->img_x + 1) >> 1; + else if (info.bpp == 8) width = s->img_x; + else { STBI_FREE(out); return stbi__errpuc("bad bpp", "Corrupt BMP"); } + pad = (-width)&3; + if (info.bpp == 1) { + for (j=0; j < (int) s->img_y; ++j) { + int bit_offset = 7, v = stbi__get8(s); + for (i=0; i < (int) s->img_x; ++i) { + int color = (v>>bit_offset)&0x1; + out[z++] = pal[color][0]; + out[z++] = pal[color][1]; + out[z++] = pal[color][2]; + if (target == 4) out[z++] = 255; + if (i+1 == (int) s->img_x) break; + if((--bit_offset) < 0) { + bit_offset = 7; + v = stbi__get8(s); + } + } + stbi__skip(s, pad); + } + } else { + for (j=0; j < (int) s->img_y; ++j) { + for (i=0; i < (int) s->img_x; i += 2) { + int v=stbi__get8(s),v2=0; + if (info.bpp == 4) { + v2 = v & 15; + v >>= 4; + } + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) out[z++] = 255; + if (i+1 == (int) s->img_x) break; + v = (info.bpp == 8) ? stbi__get8(s) : v2; + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) out[z++] = 255; + } + stbi__skip(s, pad); + } + } + } else { + int rshift=0,gshift=0,bshift=0,ashift=0,rcount=0,gcount=0,bcount=0,acount=0; + int z = 0; + int easy=0; + stbi__skip(s, info.offset - info.extra_read - info.hsz); + if (info.bpp == 24) width = 3 * s->img_x; + else if (info.bpp == 16) width = 2*s->img_x; + else /* bpp = 32 and pad = 0 */ width=0; + pad = (-width) & 3; + if (info.bpp == 24) { + easy = 1; + } else if (info.bpp == 32) { + if (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && ma == 0xff000000) + easy = 2; + } + if (!easy) { + if (!mr || !mg || !mb) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } + // right shift amt to put high bit in position #7 + rshift = stbi__high_bit(mr)-7; rcount = stbi__bitcount(mr); + gshift = stbi__high_bit(mg)-7; gcount = stbi__bitcount(mg); + bshift = stbi__high_bit(mb)-7; bcount = stbi__bitcount(mb); + ashift = stbi__high_bit(ma)-7; acount = stbi__bitcount(ma); + if (rcount > 8 || gcount > 8 || bcount > 8 || acount > 8) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } + } + for (j=0; j < (int) s->img_y; ++j) { + if (easy) { + for (i=0; i < (int) s->img_x; ++i) { + unsigned char a; + out[z+2] = stbi__get8(s); + out[z+1] = stbi__get8(s); + out[z+0] = stbi__get8(s); + z += 3; + a = (easy == 2 ? stbi__get8(s) : 255); + all_a |= a; + if (target == 4) out[z++] = a; + } + } else { + int bpp = info.bpp; + for (i=0; i < (int) s->img_x; ++i) { + stbi__uint32 v = (bpp == 16 ? (stbi__uint32) stbi__get16le(s) : stbi__get32le(s)); + unsigned int a; + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mr, rshift, rcount)); + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mg, gshift, gcount)); + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mb, bshift, bcount)); + a = (ma ? stbi__shiftsigned(v & ma, ashift, acount) : 255); + all_a |= a; + if (target == 4) out[z++] = STBI__BYTECAST(a); + } + } + stbi__skip(s, pad); + } + } + + // if alpha channel is all 0s, replace with all 255s + if (target == 4 && all_a == 0) + for (i=4*s->img_x*s->img_y-1; i >= 0; i -= 4) + out[i] = 255; + + if (flip_vertically) { + stbi_uc t; + for (j=0; j < (int) s->img_y>>1; ++j) { + stbi_uc *p1 = out + j *s->img_x*target; + stbi_uc *p2 = out + (s->img_y-1-j)*s->img_x*target; + for (i=0; i < (int) s->img_x*target; ++i) { + t = p1[i]; p1[i] = p2[i]; p2[i] = t; + } + } + } + + if (req_comp && req_comp != target) { + out = stbi__convert_format(out, target, req_comp, s->img_x, s->img_y); + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + + *x = s->img_x; + *y = s->img_y; + if (comp) *comp = s->img_n; + return out; +} +#endif + +// Targa Truevision - TGA +// by Jonathan Dummer +#ifndef STBI_NO_TGA +// returns STBI_rgb or whatever, 0 on error +static int stbi__tga_get_comp(int bits_per_pixel, int is_grey, int* is_rgb16) +{ + // only RGB or RGBA (incl. 16bit) or grey allowed + if (is_rgb16) *is_rgb16 = 0; + switch(bits_per_pixel) { + case 8: return STBI_grey; + case 16: if(is_grey) return STBI_grey_alpha; + // fallthrough + case 15: if(is_rgb16) *is_rgb16 = 1; + return STBI_rgb; + case 24: // fallthrough + case 32: return bits_per_pixel/8; + default: return 0; + } +} + +static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp) +{ + int tga_w, tga_h, tga_comp, tga_image_type, tga_bits_per_pixel, tga_colormap_bpp; + int sz, tga_colormap_type; + stbi__get8(s); // discard Offset + tga_colormap_type = stbi__get8(s); // colormap type + if( tga_colormap_type > 1 ) { + stbi__rewind(s); + return 0; // only RGB or indexed allowed + } + tga_image_type = stbi__get8(s); // image type + if ( tga_colormap_type == 1 ) { // colormapped (paletted) image + if (tga_image_type != 1 && tga_image_type != 9) { + stbi__rewind(s); + return 0; + } + stbi__skip(s,4); // skip index of first colormap entry and number of entries + sz = stbi__get8(s); // check bits per palette color entry + if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) { + stbi__rewind(s); + return 0; + } + stbi__skip(s,4); // skip image x and y origin + tga_colormap_bpp = sz; + } else { // "normal" image w/o colormap - only RGB or grey allowed, +/- RLE + if ( (tga_image_type != 2) && (tga_image_type != 3) && (tga_image_type != 10) && (tga_image_type != 11) ) { + stbi__rewind(s); + return 0; // only RGB or grey allowed, +/- RLE + } + stbi__skip(s,9); // skip colormap specification and image x/y origin + tga_colormap_bpp = 0; + } + tga_w = stbi__get16le(s); + if( tga_w < 1 ) { + stbi__rewind(s); + return 0; // test width + } + tga_h = stbi__get16le(s); + if( tga_h < 1 ) { + stbi__rewind(s); + return 0; // test height + } + tga_bits_per_pixel = stbi__get8(s); // bits per pixel + stbi__get8(s); // ignore alpha bits + if (tga_colormap_bpp != 0) { + if((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16)) { + // when using a colormap, tga_bits_per_pixel is the size of the indexes + // I don't think anything but 8 or 16bit indexes makes sense + stbi__rewind(s); + return 0; + } + tga_comp = stbi__tga_get_comp(tga_colormap_bpp, 0, NULL); + } else { + tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3) || (tga_image_type == 11), NULL); + } + if(!tga_comp) { + stbi__rewind(s); + return 0; + } + if (x) *x = tga_w; + if (y) *y = tga_h; + if (comp) *comp = tga_comp; + return 1; // seems to have passed everything +} + +static int stbi__tga_test(stbi__context *s) +{ + int res = 0; + int sz, tga_color_type; + stbi__get8(s); // discard Offset + tga_color_type = stbi__get8(s); // color type + if ( tga_color_type > 1 ) goto errorEnd; // only RGB or indexed allowed + sz = stbi__get8(s); // image type + if ( tga_color_type == 1 ) { // colormapped (paletted) image + if (sz != 1 && sz != 9) goto errorEnd; // colortype 1 demands image type 1 or 9 + stbi__skip(s,4); // skip index of first colormap entry and number of entries + sz = stbi__get8(s); // check bits per palette color entry + if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd; + stbi__skip(s,4); // skip image x and y origin + } else { // "normal" image w/o colormap + if ( (sz != 2) && (sz != 3) && (sz != 10) && (sz != 11) ) goto errorEnd; // only RGB or grey allowed, +/- RLE + stbi__skip(s,9); // skip colormap specification and image x/y origin + } + if ( stbi__get16le(s) < 1 ) goto errorEnd; // test width + if ( stbi__get16le(s) < 1 ) goto errorEnd; // test height + sz = stbi__get8(s); // bits per pixel + if ( (tga_color_type == 1) && (sz != 8) && (sz != 16) ) goto errorEnd; // for colormapped images, bpp is size of an index + if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd; + + res = 1; // if we got this far, everything's good and we can return 1 instead of 0 + +errorEnd: + stbi__rewind(s); + return res; +} + +// read 16bit value and convert to 24bit RGB +static void stbi__tga_read_rgb16(stbi__context *s, stbi_uc* out) +{ + stbi__uint16 px = (stbi__uint16)stbi__get16le(s); + stbi__uint16 fiveBitMask = 31; + // we have 3 channels with 5bits each + int r = (px >> 10) & fiveBitMask; + int g = (px >> 5) & fiveBitMask; + int b = px & fiveBitMask; + // Note that this saves the data in RGB(A) order, so it doesn't need to be swapped later + out[0] = (stbi_uc)((r * 255)/31); + out[1] = (stbi_uc)((g * 255)/31); + out[2] = (stbi_uc)((b * 255)/31); + + // some people claim that the most significant bit might be used for alpha + // (possibly if an alpha-bit is set in the "image descriptor byte") + // but that only made 16bit test images completely translucent.. + // so let's treat all 15 and 16bit TGAs as RGB with no alpha. +} + +static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + // read in the TGA header stuff + int tga_offset = stbi__get8(s); + int tga_indexed = stbi__get8(s); + int tga_image_type = stbi__get8(s); + int tga_is_RLE = 0; + int tga_palette_start = stbi__get16le(s); + int tga_palette_len = stbi__get16le(s); + int tga_palette_bits = stbi__get8(s); + int tga_x_origin = stbi__get16le(s); + int tga_y_origin = stbi__get16le(s); + int tga_width = stbi__get16le(s); + int tga_height = stbi__get16le(s); + int tga_bits_per_pixel = stbi__get8(s); + int tga_comp, tga_rgb16=0; + int tga_inverted = stbi__get8(s); + // int tga_alpha_bits = tga_inverted & 15; // the 4 lowest bits - unused (useless?) + // image data + unsigned char *tga_data; + unsigned char *tga_palette = NULL; + int i, j; + unsigned char raw_data[4] = {0}; + int RLE_count = 0; + int RLE_repeating = 0; + int read_next_pixel = 1; + STBI_NOTUSED(ri); + STBI_NOTUSED(tga_x_origin); // @TODO + STBI_NOTUSED(tga_y_origin); // @TODO + + if (tga_height > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (tga_width > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + // do a tiny bit of precessing + if ( tga_image_type >= 8 ) + { + tga_image_type -= 8; + tga_is_RLE = 1; + } + tga_inverted = 1 - ((tga_inverted >> 5) & 1); + + // If I'm paletted, then I'll use the number of bits from the palette + if ( tga_indexed ) tga_comp = stbi__tga_get_comp(tga_palette_bits, 0, &tga_rgb16); + else tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3), &tga_rgb16); + + if(!tga_comp) // shouldn't really happen, stbi__tga_test() should have ensured basic consistency + return stbi__errpuc("bad format", "Can't find out TGA pixelformat"); + + // tga info + *x = tga_width; + *y = tga_height; + if (comp) *comp = tga_comp; + + if (!stbi__mad3sizes_valid(tga_width, tga_height, tga_comp, 0)) + return stbi__errpuc("too large", "Corrupt TGA"); + + tga_data = (unsigned char*)stbi__malloc_mad3(tga_width, tga_height, tga_comp, 0); + if (!tga_data) return stbi__errpuc("outofmem", "Out of memory"); + + // skip to the data's starting position (offset usually = 0) + stbi__skip(s, tga_offset ); + + if ( !tga_indexed && !tga_is_RLE && !tga_rgb16 ) { + for (i=0; i < tga_height; ++i) { + int row = tga_inverted ? tga_height -i - 1 : i; + stbi_uc *tga_row = tga_data + row*tga_width*tga_comp; + stbi__getn(s, tga_row, tga_width * tga_comp); + } + } else { + // do I need to load a palette? + if ( tga_indexed) + { + if (tga_palette_len == 0) { /* you have to have at least one entry! */ + STBI_FREE(tga_data); + return stbi__errpuc("bad palette", "Corrupt TGA"); + } + + // any data to skip? (offset usually = 0) + stbi__skip(s, tga_palette_start ); + // load the palette + tga_palette = (unsigned char*)stbi__malloc_mad2(tga_palette_len, tga_comp, 0); + if (!tga_palette) { + STBI_FREE(tga_data); + return stbi__errpuc("outofmem", "Out of memory"); + } + if (tga_rgb16) { + stbi_uc *pal_entry = tga_palette; + STBI_ASSERT(tga_comp == STBI_rgb); + for (i=0; i < tga_palette_len; ++i) { + stbi__tga_read_rgb16(s, pal_entry); + pal_entry += tga_comp; + } + } else if (!stbi__getn(s, tga_palette, tga_palette_len * tga_comp)) { + STBI_FREE(tga_data); + STBI_FREE(tga_palette); + return stbi__errpuc("bad palette", "Corrupt TGA"); + } + } + // load the data + for (i=0; i < tga_width * tga_height; ++i) + { + // if I'm in RLE mode, do I need to get a RLE stbi__pngchunk? + if ( tga_is_RLE ) + { + if ( RLE_count == 0 ) + { + // yep, get the next byte as a RLE command + int RLE_cmd = stbi__get8(s); + RLE_count = 1 + (RLE_cmd & 127); + RLE_repeating = RLE_cmd >> 7; + read_next_pixel = 1; + } else if ( !RLE_repeating ) + { + read_next_pixel = 1; + } + } else + { + read_next_pixel = 1; + } + // OK, if I need to read a pixel, do it now + if ( read_next_pixel ) + { + // load however much data we did have + if ( tga_indexed ) + { + // read in index, then perform the lookup + int pal_idx = (tga_bits_per_pixel == 8) ? stbi__get8(s) : stbi__get16le(s); + if ( pal_idx >= tga_palette_len ) { + // invalid index + pal_idx = 0; + } + pal_idx *= tga_comp; + for (j = 0; j < tga_comp; ++j) { + raw_data[j] = tga_palette[pal_idx+j]; + } + } else if(tga_rgb16) { + STBI_ASSERT(tga_comp == STBI_rgb); + stbi__tga_read_rgb16(s, raw_data); + } else { + // read in the data raw + for (j = 0; j < tga_comp; ++j) { + raw_data[j] = stbi__get8(s); + } + } + // clear the reading flag for the next pixel + read_next_pixel = 0; + } // end of reading a pixel + + // copy data + for (j = 0; j < tga_comp; ++j) + tga_data[i*tga_comp+j] = raw_data[j]; + + // in case we're in RLE mode, keep counting down + --RLE_count; + } + // do I need to invert the image? + if ( tga_inverted ) + { + for (j = 0; j*2 < tga_height; ++j) + { + int index1 = j * tga_width * tga_comp; + int index2 = (tga_height - 1 - j) * tga_width * tga_comp; + for (i = tga_width * tga_comp; i > 0; --i) + { + unsigned char temp = tga_data[index1]; + tga_data[index1] = tga_data[index2]; + tga_data[index2] = temp; + ++index1; + ++index2; + } + } + } + // clear my palette, if I had one + if ( tga_palette != NULL ) + { + STBI_FREE( tga_palette ); + } + } + + // swap RGB - if the source data was RGB16, it already is in the right order + if (tga_comp >= 3 && !tga_rgb16) + { + unsigned char* tga_pixel = tga_data; + for (i=0; i < tga_width * tga_height; ++i) + { + unsigned char temp = tga_pixel[0]; + tga_pixel[0] = tga_pixel[2]; + tga_pixel[2] = temp; + tga_pixel += tga_comp; + } + } + + // convert to target component count + if (req_comp && req_comp != tga_comp) + tga_data = stbi__convert_format(tga_data, tga_comp, req_comp, tga_width, tga_height); + + // the things I do to get rid of an error message, and yet keep + // Microsoft's C compilers happy... [8^( + tga_palette_start = tga_palette_len = tga_palette_bits = + tga_x_origin = tga_y_origin = 0; + STBI_NOTUSED(tga_palette_start); + // OK, done + return tga_data; +} +#endif + +// ************************************************************************************************* +// Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicolas Schulz, tweaked by STB + +#ifndef STBI_NO_PSD +static int stbi__psd_test(stbi__context *s) +{ + int r = (stbi__get32be(s) == 0x38425053); + stbi__rewind(s); + return r; +} + +static int stbi__psd_decode_rle(stbi__context *s, stbi_uc *p, int pixelCount) +{ + int count, nleft, len; + + count = 0; + while ((nleft = pixelCount - count) > 0) { + len = stbi__get8(s); + if (len == 128) { + // No-op. + } else if (len < 128) { + // Copy next len+1 bytes literally. + len++; + if (len > nleft) return 0; // corrupt data + count += len; + while (len) { + *p = stbi__get8(s); + p += 4; + len--; + } + } else if (len > 128) { + stbi_uc val; + // Next -len+1 bytes in the dest are replicated from next source byte. + // (Interpret len as a negative 8-bit int.) + len = 257 - len; + if (len > nleft) return 0; // corrupt data + val = stbi__get8(s); + count += len; + while (len) { + *p = val; + p += 4; + len--; + } + } + } + + return 1; +} + +static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc) +{ + int pixelCount; + int channelCount, compression; + int channel, i; + int bitdepth; + int w,h; + stbi_uc *out; + STBI_NOTUSED(ri); + + // Check identifier + if (stbi__get32be(s) != 0x38425053) // "8BPS" + return stbi__errpuc("not PSD", "Corrupt PSD image"); + + // Check file type version. + if (stbi__get16be(s) != 1) + return stbi__errpuc("wrong version", "Unsupported version of PSD image"); + + // Skip 6 reserved bytes. + stbi__skip(s, 6 ); + + // Read the number of channels (R, G, B, A, etc). + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) + return stbi__errpuc("wrong channel count", "Unsupported number of channels in PSD image"); + + // Read the rows and columns of the image. + h = stbi__get32be(s); + w = stbi__get32be(s); + + if (h > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (w > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + // Make sure the depth is 8 bits. + bitdepth = stbi__get16be(s); + if (bitdepth != 8 && bitdepth != 16) + return stbi__errpuc("unsupported bit depth", "PSD bit depth is not 8 or 16 bit"); + + // Make sure the color mode is RGB. + // Valid options are: + // 0: Bitmap + // 1: Grayscale + // 2: Indexed color + // 3: RGB color + // 4: CMYK color + // 7: Multichannel + // 8: Duotone + // 9: Lab color + if (stbi__get16be(s) != 3) + return stbi__errpuc("wrong color format", "PSD is not in RGB color format"); + + // Skip the Mode Data. (It's the palette for indexed color; other info for other modes.) + stbi__skip(s,stbi__get32be(s) ); + + // Skip the image resources. (resolution, pen tool paths, etc) + stbi__skip(s, stbi__get32be(s) ); + + // Skip the reserved data. + stbi__skip(s, stbi__get32be(s) ); + + // Find out if the data is compressed. + // Known values: + // 0: no compression + // 1: RLE compressed + compression = stbi__get16be(s); + if (compression > 1) + return stbi__errpuc("bad compression", "PSD has an unknown compression format"); + + // Check size + if (!stbi__mad3sizes_valid(4, w, h, 0)) + return stbi__errpuc("too large", "Corrupt PSD"); + + // Create the destination image. + + if (!compression && bitdepth == 16 && bpc == 16) { + out = (stbi_uc *) stbi__malloc_mad3(8, w, h, 0); + ri->bits_per_channel = 16; + } else + out = (stbi_uc *) stbi__malloc(4 * w*h); + + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + pixelCount = w*h; + + // Initialize the data to zero. + //memset( out, 0, pixelCount * 4 ); + + // Finally, the image data. + if (compression) { + // RLE as used by .PSD and .TIFF + // Loop until you get the number of unpacked bytes you are expecting: + // Read the next source byte into n. + // If n is between 0 and 127 inclusive, copy the next n+1 bytes literally. + // Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times. + // Else if n is 128, noop. + // Endloop + + // The RLE-compressed data is preceded by a 2-byte data count for each row in the data, + // which we're going to just skip. + stbi__skip(s, h * channelCount * 2 ); + + // Read the RLE data by channel. + for (channel = 0; channel < 4; channel++) { + stbi_uc *p; + + p = out+channel; + if (channel >= channelCount) { + // Fill this channel with default data. + for (i = 0; i < pixelCount; i++, p += 4) + *p = (channel == 3 ? 255 : 0); + } else { + // Read the RLE data. + if (!stbi__psd_decode_rle(s, p, pixelCount)) { + STBI_FREE(out); + return stbi__errpuc("corrupt", "bad RLE data"); + } + } + } + + } else { + // We're at the raw image data. It's each channel in order (Red, Green, Blue, Alpha, ...) + // where each channel consists of an 8-bit (or 16-bit) value for each pixel in the image. + + // Read the data by channel. + for (channel = 0; channel < 4; channel++) { + if (channel >= channelCount) { + // Fill this channel with default data. + if (bitdepth == 16 && bpc == 16) { + stbi__uint16 *q = ((stbi__uint16 *) out) + channel; + stbi__uint16 val = channel == 3 ? 65535 : 0; + for (i = 0; i < pixelCount; i++, q += 4) + *q = val; + } else { + stbi_uc *p = out+channel; + stbi_uc val = channel == 3 ? 255 : 0; + for (i = 0; i < pixelCount; i++, p += 4) + *p = val; + } + } else { + if (ri->bits_per_channel == 16) { // output bpc + stbi__uint16 *q = ((stbi__uint16 *) out) + channel; + for (i = 0; i < pixelCount; i++, q += 4) + *q = (stbi__uint16) stbi__get16be(s); + } else { + stbi_uc *p = out+channel; + if (bitdepth == 16) { // input bpc + for (i = 0; i < pixelCount; i++, p += 4) + *p = (stbi_uc) (stbi__get16be(s) >> 8); + } else { + for (i = 0; i < pixelCount; i++, p += 4) + *p = stbi__get8(s); + } + } + } + } + } + + // remove weird white matte from PSD + if (channelCount >= 4) { + if (ri->bits_per_channel == 16) { + for (i=0; i < w*h; ++i) { + stbi__uint16 *pixel = (stbi__uint16 *) out + 4*i; + if (pixel[3] != 0 && pixel[3] != 65535) { + float a = pixel[3] / 65535.0f; + float ra = 1.0f / a; + float inv_a = 65535.0f * (1 - ra); + pixel[0] = (stbi__uint16) (pixel[0]*ra + inv_a); + pixel[1] = (stbi__uint16) (pixel[1]*ra + inv_a); + pixel[2] = (stbi__uint16) (pixel[2]*ra + inv_a); + } + } + } else { + for (i=0; i < w*h; ++i) { + unsigned char *pixel = out + 4*i; + if (pixel[3] != 0 && pixel[3] != 255) { + float a = pixel[3] / 255.0f; + float ra = 1.0f / a; + float inv_a = 255.0f * (1 - ra); + pixel[0] = (unsigned char) (pixel[0]*ra + inv_a); + pixel[1] = (unsigned char) (pixel[1]*ra + inv_a); + pixel[2] = (unsigned char) (pixel[2]*ra + inv_a); + } + } + } + } + + // convert to desired output format + if (req_comp && req_comp != 4) { + if (ri->bits_per_channel == 16) + out = (stbi_uc *) stbi__convert_format16((stbi__uint16 *) out, 4, req_comp, w, h); + else + out = stbi__convert_format(out, 4, req_comp, w, h); + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + + if (comp) *comp = 4; + *y = h; + *x = w; + + return out; +} +#endif + +// ************************************************************************************************* +// Softimage PIC loader +// by Tom Seddon +// +// See http://softimage.wiki.softimage.com/index.php/INFO:_PIC_file_format +// See http://ozviz.wasp.uwa.edu.au/~pbourke/dataformats/softimagepic/ + +#ifndef STBI_NO_PIC +static int stbi__pic_is4(stbi__context *s,const char *str) +{ + int i; + for (i=0; i<4; ++i) + if (stbi__get8(s) != (stbi_uc)str[i]) + return 0; + + return 1; +} + +static int stbi__pic_test_core(stbi__context *s) +{ + int i; + + if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) + return 0; + + for(i=0;i<84;++i) + stbi__get8(s); + + if (!stbi__pic_is4(s,"PICT")) + return 0; + + return 1; +} + +typedef struct +{ + stbi_uc size,type,channel; +} stbi__pic_packet; + +static stbi_uc *stbi__readval(stbi__context *s, int channel, stbi_uc *dest) +{ + int mask=0x80, i; + + for (i=0; i<4; ++i, mask>>=1) { + if (channel & mask) { + if (stbi__at_eof(s)) return stbi__errpuc("bad file","PIC file too short"); + dest[i]=stbi__get8(s); + } + } + + return dest; +} + +static void stbi__copyval(int channel,stbi_uc *dest,const stbi_uc *src) +{ + int mask=0x80,i; + + for (i=0;i<4; ++i, mask>>=1) + if (channel&mask) + dest[i]=src[i]; +} + +static stbi_uc *stbi__pic_load_core(stbi__context *s,int width,int height,int *comp, stbi_uc *result) +{ + int act_comp=0,num_packets=0,y,chained; + stbi__pic_packet packets[10]; + + // this will (should...) cater for even some bizarre stuff like having data + // for the same channel in multiple packets. + do { + stbi__pic_packet *packet; + + if (num_packets==sizeof(packets)/sizeof(packets[0])) + return stbi__errpuc("bad format","too many packets"); + + packet = &packets[num_packets++]; + + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + + act_comp |= packet->channel; + + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (reading packets)"); + if (packet->size != 8) return stbi__errpuc("bad format","packet isn't 8bpp"); + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); // has alpha channel? + + for(y=0; ytype) { + default: + return stbi__errpuc("bad format","packet has bad compression type"); + + case 0: {//uncompressed + int x; + + for(x=0;xchannel,dest)) + return 0; + break; + } + + case 1://Pure RLE + { + int left=width, i; + + while (left>0) { + stbi_uc count,value[4]; + + count=stbi__get8(s); + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pure read count)"); + + if (count > left) + count = (stbi_uc) left; + + if (!stbi__readval(s,packet->channel,value)) return 0; + + for(i=0; ichannel,dest,value); + left -= count; + } + } + break; + + case 2: {//Mixed RLE + int left=width; + while (left>0) { + int count = stbi__get8(s), i; + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (mixed read count)"); + + if (count >= 128) { // Repeated + stbi_uc value[4]; + + if (count==128) + count = stbi__get16be(s); + else + count -= 127; + if (count > left) + return stbi__errpuc("bad file","scanline overrun"); + + if (!stbi__readval(s,packet->channel,value)) + return 0; + + for(i=0;ichannel,dest,value); + } else { // Raw + ++count; + if (count>left) return stbi__errpuc("bad file","scanline overrun"); + + for(i=0;ichannel,dest)) + return 0; + } + left-=count; + } + break; + } + } + } + } + + return result; +} + +static void *stbi__pic_load(stbi__context *s,int *px,int *py,int *comp,int req_comp, stbi__result_info *ri) +{ + stbi_uc *result; + int i, x,y, internal_comp; + STBI_NOTUSED(ri); + + if (!comp) comp = &internal_comp; + + for (i=0; i<92; ++i) + stbi__get8(s); + + x = stbi__get16be(s); + y = stbi__get16be(s); + + if (y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pic header)"); + if (!stbi__mad3sizes_valid(x, y, 4, 0)) return stbi__errpuc("too large", "PIC image too large to decode"); + + stbi__get32be(s); //skip `ratio' + stbi__get16be(s); //skip `fields' + stbi__get16be(s); //skip `pad' + + // intermediate buffer is RGBA + result = (stbi_uc *) stbi__malloc_mad3(x, y, 4, 0); + if (!result) return stbi__errpuc("outofmem", "Out of memory"); + memset(result, 0xff, x*y*4); + + if (!stbi__pic_load_core(s,x,y,comp, result)) { + STBI_FREE(result); + result=0; + } + *px = x; + *py = y; + if (req_comp == 0) req_comp = *comp; + result=stbi__convert_format(result,4,req_comp,x,y); + + return result; +} + +static int stbi__pic_test(stbi__context *s) +{ + int r = stbi__pic_test_core(s); + stbi__rewind(s); + return r; +} +#endif + +// ************************************************************************************************* +// GIF loader -- public domain by Jean-Marc Lienher -- simplified/shrunk by stb + +#ifndef STBI_NO_GIF +typedef struct +{ + stbi__int16 prefix; + stbi_uc first; + stbi_uc suffix; +} stbi__gif_lzw; + +typedef struct +{ + int w,h; + stbi_uc *out; // output buffer (always 4 components) + stbi_uc *background; // The current "background" as far as a gif is concerned + stbi_uc *history; + int flags, bgindex, ratio, transparent, eflags; + stbi_uc pal[256][4]; + stbi_uc lpal[256][4]; + stbi__gif_lzw codes[8192]; + stbi_uc *color_table; + int parse, step; + int lflags; + int start_x, start_y; + int max_x, max_y; + int cur_x, cur_y; + int line_size; + int delay; +} stbi__gif; + +static int stbi__gif_test_raw(stbi__context *s) +{ + int sz; + if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') return 0; + sz = stbi__get8(s); + if (sz != '9' && sz != '7') return 0; + if (stbi__get8(s) != 'a') return 0; + return 1; +} + +static int stbi__gif_test(stbi__context *s) +{ + int r = stbi__gif_test_raw(s); + stbi__rewind(s); + return r; +} + +static void stbi__gif_parse_colortable(stbi__context *s, stbi_uc pal[256][4], int num_entries, int transp) +{ + int i; + for (i=0; i < num_entries; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + pal[i][3] = transp == i ? 0 : 255; + } +} + +static int stbi__gif_header(stbi__context *s, stbi__gif *g, int *comp, int is_info) +{ + stbi_uc version; + if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') + return stbi__err("not GIF", "Corrupt GIF"); + + version = stbi__get8(s); + if (version != '7' && version != '9') return stbi__err("not GIF", "Corrupt GIF"); + if (stbi__get8(s) != 'a') return stbi__err("not GIF", "Corrupt GIF"); + + stbi__g_failure_reason = ""; + g->w = stbi__get16le(s); + g->h = stbi__get16le(s); + g->flags = stbi__get8(s); + g->bgindex = stbi__get8(s); + g->ratio = stbi__get8(s); + g->transparent = -1; + + if (g->w > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + if (g->h > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + + if (comp != 0) *comp = 4; // can't actually tell whether it's 3 or 4 until we parse the comments + + if (is_info) return 1; + + if (g->flags & 0x80) + stbi__gif_parse_colortable(s,g->pal, 2 << (g->flags & 7), -1); + + return 1; +} + +static int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp) +{ + stbi__gif* g = (stbi__gif*) stbi__malloc(sizeof(stbi__gif)); + if (!g) return stbi__err("outofmem", "Out of memory"); + if (!stbi__gif_header(s, g, comp, 1)) { + STBI_FREE(g); + stbi__rewind( s ); + return 0; + } + if (x) *x = g->w; + if (y) *y = g->h; + STBI_FREE(g); + return 1; +} + +static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code) +{ + stbi_uc *p, *c; + int idx; + + // recurse to decode the prefixes, since the linked-list is backwards, + // and working backwards through an interleaved image would be nasty + if (g->codes[code].prefix >= 0) + stbi__out_gif_code(g, g->codes[code].prefix); + + if (g->cur_y >= g->max_y) return; + + idx = g->cur_x + g->cur_y; + p = &g->out[idx]; + g->history[idx / 4] = 1; + + c = &g->color_table[g->codes[code].suffix * 4]; + if (c[3] > 128) { // don't render transparent pixels; + p[0] = c[2]; + p[1] = c[1]; + p[2] = c[0]; + p[3] = c[3]; + } + g->cur_x += 4; + + if (g->cur_x >= g->max_x) { + g->cur_x = g->start_x; + g->cur_y += g->step; + + while (g->cur_y >= g->max_y && g->parse > 0) { + g->step = (1 << g->parse) * g->line_size; + g->cur_y = g->start_y + (g->step >> 1); + --g->parse; + } + } +} + +static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g) +{ + stbi_uc lzw_cs; + stbi__int32 len, init_code; + stbi__uint32 first; + stbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear; + stbi__gif_lzw *p; + + lzw_cs = stbi__get8(s); + if (lzw_cs > 12) return NULL; + clear = 1 << lzw_cs; + first = 1; + codesize = lzw_cs + 1; + codemask = (1 << codesize) - 1; + bits = 0; + valid_bits = 0; + for (init_code = 0; init_code < clear; init_code++) { + g->codes[init_code].prefix = -1; + g->codes[init_code].first = (stbi_uc) init_code; + g->codes[init_code].suffix = (stbi_uc) init_code; + } + + // support no starting clear code + avail = clear+2; + oldcode = -1; + + len = 0; + for(;;) { + if (valid_bits < codesize) { + if (len == 0) { + len = stbi__get8(s); // start new block + if (len == 0) + return g->out; + } + --len; + bits |= (stbi__int32) stbi__get8(s) << valid_bits; + valid_bits += 8; + } else { + stbi__int32 code = bits & codemask; + bits >>= codesize; + valid_bits -= codesize; + // @OPTIMIZE: is there some way we can accelerate the non-clear path? + if (code == clear) { // clear code + codesize = lzw_cs + 1; + codemask = (1 << codesize) - 1; + avail = clear + 2; + oldcode = -1; + first = 0; + } else if (code == clear + 1) { // end of stream code + stbi__skip(s, len); + while ((len = stbi__get8(s)) > 0) + stbi__skip(s,len); + return g->out; + } else if (code <= avail) { + if (first) { + return stbi__errpuc("no clear code", "Corrupt GIF"); + } + + if (oldcode >= 0) { + p = &g->codes[avail++]; + if (avail > 8192) { + return stbi__errpuc("too many codes", "Corrupt GIF"); + } + + p->prefix = (stbi__int16) oldcode; + p->first = g->codes[oldcode].first; + p->suffix = (code == avail) ? p->first : g->codes[code].first; + } else if (code == avail) + return stbi__errpuc("illegal code in raster", "Corrupt GIF"); + + stbi__out_gif_code(g, (stbi__uint16) code); + + if ((avail & codemask) == 0 && avail <= 0x0FFF) { + codesize++; + codemask = (1 << codesize) - 1; + } + + oldcode = code; + } else { + return stbi__errpuc("illegal code in raster", "Corrupt GIF"); + } + } + } +} + +// this function is designed to support animated gifs, although stb_image doesn't support it +// two back is the image from two frames ago, used for a very specific disposal format +static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, int req_comp, stbi_uc *two_back) +{ + int dispose; + int first_frame; + int pi; + int pcount; + STBI_NOTUSED(req_comp); + + // on first frame, any non-written pixels get the background colour (non-transparent) + first_frame = 0; + if (g->out == 0) { + if (!stbi__gif_header(s, g, comp,0)) return 0; // stbi__g_failure_reason set by stbi__gif_header + if (!stbi__mad3sizes_valid(4, g->w, g->h, 0)) + return stbi__errpuc("too large", "GIF image is too large"); + pcount = g->w * g->h; + g->out = (stbi_uc *) stbi__malloc(4 * pcount); + g->background = (stbi_uc *) stbi__malloc(4 * pcount); + g->history = (stbi_uc *) stbi__malloc(pcount); + if (!g->out || !g->background || !g->history) + return stbi__errpuc("outofmem", "Out of memory"); + + // image is treated as "transparent" at the start - ie, nothing overwrites the current background; + // background colour is only used for pixels that are not rendered first frame, after that "background" + // color refers to the color that was there the previous frame. + memset(g->out, 0x00, 4 * pcount); + memset(g->background, 0x00, 4 * pcount); // state of the background (starts transparent) + memset(g->history, 0x00, pcount); // pixels that were affected previous frame + first_frame = 1; + } else { + // second frame - how do we dispose of the previous one? + dispose = (g->eflags & 0x1C) >> 2; + pcount = g->w * g->h; + + if ((dispose == 3) && (two_back == 0)) { + dispose = 2; // if I don't have an image to revert back to, default to the old background + } + + if (dispose == 3) { // use previous graphic + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi]) { + memcpy( &g->out[pi * 4], &two_back[pi * 4], 4 ); + } + } + } else if (dispose == 2) { + // restore what was changed last frame to background before that frame; + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi]) { + memcpy( &g->out[pi * 4], &g->background[pi * 4], 4 ); + } + } + } else { + // This is a non-disposal case eithe way, so just + // leave the pixels as is, and they will become the new background + // 1: do not dispose + // 0: not specified. + } + + // background is what out is after the undoing of the previou frame; + memcpy( g->background, g->out, 4 * g->w * g->h ); + } + + // clear my history; + memset( g->history, 0x00, g->w * g->h ); // pixels that were affected previous frame + + for (;;) { + int tag = stbi__get8(s); + switch (tag) { + case 0x2C: /* Image Descriptor */ + { + stbi__int32 x, y, w, h; + stbi_uc *o; + + x = stbi__get16le(s); + y = stbi__get16le(s); + w = stbi__get16le(s); + h = stbi__get16le(s); + if (((x + w) > (g->w)) || ((y + h) > (g->h))) + return stbi__errpuc("bad Image Descriptor", "Corrupt GIF"); + + g->line_size = g->w * 4; + g->start_x = x * 4; + g->start_y = y * g->line_size; + g->max_x = g->start_x + w * 4; + g->max_y = g->start_y + h * g->line_size; + g->cur_x = g->start_x; + g->cur_y = g->start_y; + + // if the width of the specified rectangle is 0, that means + // we may not see *any* pixels or the image is malformed; + // to make sure this is caught, move the current y down to + // max_y (which is what out_gif_code checks). + if (w == 0) + g->cur_y = g->max_y; + + g->lflags = stbi__get8(s); + + if (g->lflags & 0x40) { + g->step = 8 * g->line_size; // first interlaced spacing + g->parse = 3; + } else { + g->step = g->line_size; + g->parse = 0; + } + + if (g->lflags & 0x80) { + stbi__gif_parse_colortable(s,g->lpal, 2 << (g->lflags & 7), g->eflags & 0x01 ? g->transparent : -1); + g->color_table = (stbi_uc *) g->lpal; + } else if (g->flags & 0x80) { + g->color_table = (stbi_uc *) g->pal; + } else + return stbi__errpuc("missing color table", "Corrupt GIF"); + + o = stbi__process_gif_raster(s, g); + if (!o) return NULL; + + // if this was the first frame, + pcount = g->w * g->h; + if (first_frame && (g->bgindex > 0)) { + // if first frame, any pixel not drawn to gets the background color + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi] == 0) { + g->pal[g->bgindex][3] = 255; // just in case it was made transparent, undo that; It will be reset next frame if need be; + memcpy( &g->out[pi * 4], &g->pal[g->bgindex], 4 ); + } + } + } + + return o; + } + + case 0x21: // Comment Extension. + { + int len; + int ext = stbi__get8(s); + if (ext == 0xF9) { // Graphic Control Extension. + len = stbi__get8(s); + if (len == 4) { + g->eflags = stbi__get8(s); + g->delay = 10 * stbi__get16le(s); // delay - 1/100th of a second, saving as 1/1000ths. + + // unset old transparent + if (g->transparent >= 0) { + g->pal[g->transparent][3] = 255; + } + if (g->eflags & 0x01) { + g->transparent = stbi__get8(s); + if (g->transparent >= 0) { + g->pal[g->transparent][3] = 0; + } + } else { + // don't need transparent + stbi__skip(s, 1); + g->transparent = -1; + } + } else { + stbi__skip(s, len); + break; + } + } + while ((len = stbi__get8(s)) != 0) { + stbi__skip(s, len); + } + break; + } + + case 0x3B: // gif stream termination code + return (stbi_uc *) s; // using '1' causes warning on some compilers + + default: + return stbi__errpuc("unknown code", "Corrupt GIF"); + } + } +} + +static void *stbi__load_gif_main_outofmem(stbi__gif *g, stbi_uc *out, int **delays) +{ + STBI_FREE(g->out); + STBI_FREE(g->history); + STBI_FREE(g->background); + + if (out) STBI_FREE(out); + if (delays && *delays) STBI_FREE(*delays); + return stbi__errpuc("outofmem", "Out of memory"); +} + +static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, int *z, int *comp, int req_comp) +{ + if (stbi__gif_test(s)) { + int layers = 0; + stbi_uc *u = 0; + stbi_uc *out = 0; + stbi_uc *two_back = 0; + stbi__gif g; + int stride; + int out_size = 0; + int delays_size = 0; + + STBI_NOTUSED(out_size); + STBI_NOTUSED(delays_size); + + memset(&g, 0, sizeof(g)); + if (delays) { + *delays = 0; + } + + do { + u = stbi__gif_load_next(s, &g, comp, req_comp, two_back); + if (u == (stbi_uc *) s) u = 0; // end of animated gif marker + + if (u) { + *x = g.w; + *y = g.h; + ++layers; + stride = g.w * g.h * 4; + + if (out) { + void *tmp = (stbi_uc*) STBI_REALLOC_SIZED( out, out_size, layers * stride ); + if (!tmp) + return stbi__load_gif_main_outofmem(&g, out, delays); + else { + out = (stbi_uc*) tmp; + out_size = layers * stride; + } + + if (delays) { + int *new_delays = (int*) STBI_REALLOC_SIZED( *delays, delays_size, sizeof(int) * layers ); + if (!new_delays) + return stbi__load_gif_main_outofmem(&g, out, delays); + *delays = new_delays; + delays_size = layers * sizeof(int); + } + } else { + out = (stbi_uc*)stbi__malloc( layers * stride ); + if (!out) + return stbi__load_gif_main_outofmem(&g, out, delays); + out_size = layers * stride; + if (delays) { + *delays = (int*) stbi__malloc( layers * sizeof(int) ); + if (!*delays) + return stbi__load_gif_main_outofmem(&g, out, delays); + delays_size = layers * sizeof(int); + } + } + memcpy( out + ((layers - 1) * stride), u, stride ); + if (layers >= 2) { + two_back = out - 2 * stride; + } + + if (delays) { + (*delays)[layers - 1U] = g.delay; + } + } + } while (u != 0); + + // free temp buffer; + STBI_FREE(g.out); + STBI_FREE(g.history); + STBI_FREE(g.background); + + // do the final conversion after loading everything; + if (req_comp && req_comp != 4) + out = stbi__convert_format(out, 4, req_comp, layers * g.w, g.h); + + *z = layers; + return out; + } else { + return stbi__errpuc("not GIF", "Image was not as a gif type."); + } +} + +static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + stbi_uc *u = 0; + stbi__gif g; + memset(&g, 0, sizeof(g)); + STBI_NOTUSED(ri); + + u = stbi__gif_load_next(s, &g, comp, req_comp, 0); + if (u == (stbi_uc *) s) u = 0; // end of animated gif marker + if (u) { + *x = g.w; + *y = g.h; + + // moved conversion to after successful load so that the same + // can be done for multiple frames. + if (req_comp && req_comp != 4) + u = stbi__convert_format(u, 4, req_comp, g.w, g.h); + } else if (g.out) { + // if there was an error and we allocated an image buffer, free it! + STBI_FREE(g.out); + } + + // free buffers needed for multiple frame loading; + STBI_FREE(g.history); + STBI_FREE(g.background); + + return u; +} + +static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp) +{ + return stbi__gif_info_raw(s,x,y,comp); +} +#endif + +// ************************************************************************************************* +// Radiance RGBE HDR loader +// originally by Nicolas Schulz +#ifndef STBI_NO_HDR +static int stbi__hdr_test_core(stbi__context *s, const char *signature) +{ + int i; + for (i=0; signature[i]; ++i) + if (stbi__get8(s) != signature[i]) + return 0; + stbi__rewind(s); + return 1; +} + +static int stbi__hdr_test(stbi__context* s) +{ + int r = stbi__hdr_test_core(s, "#?RADIANCE\n"); + stbi__rewind(s); + if(!r) { + r = stbi__hdr_test_core(s, "#?RGBE\n"); + stbi__rewind(s); + } + return r; +} + +#define STBI__HDR_BUFLEN 1024 +static char *stbi__hdr_gettoken(stbi__context *z, char *buffer) +{ + int len=0; + char c = '\0'; + + c = (char) stbi__get8(z); + + while (!stbi__at_eof(z) && c != '\n') { + buffer[len++] = c; + if (len == STBI__HDR_BUFLEN-1) { + // flush to end of line + while (!stbi__at_eof(z) && stbi__get8(z) != '\n') + ; + break; + } + c = (char) stbi__get8(z); + } + + buffer[len] = 0; + return buffer; +} + +static void stbi__hdr_convert(float *output, stbi_uc *input, int req_comp) +{ + if ( input[3] != 0 ) { + float f1; + // Exponent + f1 = (float) ldexp(1.0f, input[3] - (int)(128 + 8)); + if (req_comp <= 2) + output[0] = (input[0] + input[1] + input[2]) * f1 / 3; + else { + output[0] = input[0] * f1; + output[1] = input[1] * f1; + output[2] = input[2] * f1; + } + if (req_comp == 2) output[1] = 1; + if (req_comp == 4) output[3] = 1; + } else { + switch (req_comp) { + case 4: output[3] = 1; /* fallthrough */ + case 3: output[0] = output[1] = output[2] = 0; + break; + case 2: output[1] = 1; /* fallthrough */ + case 1: output[0] = 0; + break; + } + } +} + +static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + char buffer[STBI__HDR_BUFLEN]; + char *token; + int valid = 0; + int width, height; + stbi_uc *scanline; + float *hdr_data; + int len; + unsigned char count, value; + int i, j, k, c1,c2, z; + const char *headerToken; + STBI_NOTUSED(ri); + + // Check identifier + headerToken = stbi__hdr_gettoken(s,buffer); + if (strcmp(headerToken, "#?RADIANCE") != 0 && strcmp(headerToken, "#?RGBE") != 0) + return stbi__errpf("not HDR", "Corrupt HDR image"); + + // Parse header + for(;;) { + token = stbi__hdr_gettoken(s,buffer); + if (token[0] == 0) break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; + } + + if (!valid) return stbi__errpf("unsupported format", "Unsupported HDR format"); + + // Parse width and height + // can't use sscanf() if we're not using stdio! + token = stbi__hdr_gettoken(s,buffer); + if (strncmp(token, "-Y ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); + token += 3; + height = (int) strtol(token, &token, 10); + while (*token == ' ') ++token; + if (strncmp(token, "+X ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); + token += 3; + width = (int) strtol(token, NULL, 10); + + if (height > STBI_MAX_DIMENSIONS) return stbi__errpf("too large","Very large image (corrupt?)"); + if (width > STBI_MAX_DIMENSIONS) return stbi__errpf("too large","Very large image (corrupt?)"); + + *x = width; + *y = height; + + if (comp) *comp = 3; + if (req_comp == 0) req_comp = 3; + + if (!stbi__mad4sizes_valid(width, height, req_comp, sizeof(float), 0)) + return stbi__errpf("too large", "HDR image is too large"); + + // Read data + hdr_data = (float *) stbi__malloc_mad4(width, height, req_comp, sizeof(float), 0); + if (!hdr_data) + return stbi__errpf("outofmem", "Out of memory"); + + // Load image data + // image data is stored as some number of sca + if ( width < 8 || width >= 32768) { + // Read flat data + for (j=0; j < height; ++j) { + for (i=0; i < width; ++i) { + stbi_uc rgbe[4]; + main_decode_loop: + stbi__getn(s, rgbe, 4); + stbi__hdr_convert(hdr_data + j * width * req_comp + i * req_comp, rgbe, req_comp); + } + } + } else { + // Read RLE-encoded data + scanline = NULL; + + for (j = 0; j < height; ++j) { + c1 = stbi__get8(s); + c2 = stbi__get8(s); + len = stbi__get8(s); + if (c1 != 2 || c2 != 2 || (len & 0x80)) { + // not run-length encoded, so we have to actually use THIS data as a decoded + // pixel (note this can't be a valid pixel--one of RGB must be >= 128) + stbi_uc rgbe[4]; + rgbe[0] = (stbi_uc) c1; + rgbe[1] = (stbi_uc) c2; + rgbe[2] = (stbi_uc) len; + rgbe[3] = (stbi_uc) stbi__get8(s); + stbi__hdr_convert(hdr_data, rgbe, req_comp); + i = 1; + j = 0; + STBI_FREE(scanline); + goto main_decode_loop; // yes, this makes no sense + } + len <<= 8; + len |= stbi__get8(s); + if (len != width) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("invalid decoded scanline length", "corrupt HDR"); } + if (scanline == NULL) { + scanline = (stbi_uc *) stbi__malloc_mad2(width, 4, 0); + if (!scanline) { + STBI_FREE(hdr_data); + return stbi__errpf("outofmem", "Out of memory"); + } + } + + for (k = 0; k < 4; ++k) { + int nleft; + i = 0; + while ((nleft = width - i) > 0) { + count = stbi__get8(s); + if (count > 128) { + // Run + value = stbi__get8(s); + count -= 128; + if (count > nleft) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); } + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = value; + } else { + // Dump + if (count > nleft) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); } + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = stbi__get8(s); + } + } + } + for (i=0; i < width; ++i) + stbi__hdr_convert(hdr_data+(j*width + i)*req_comp, scanline + i*4, req_comp); + } + if (scanline) + STBI_FREE(scanline); + } + + return hdr_data; +} + +static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp) +{ + char buffer[STBI__HDR_BUFLEN]; + char *token; + int valid = 0; + int dummy; + + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + + if (stbi__hdr_test(s) == 0) { + stbi__rewind( s ); + return 0; + } + + for(;;) { + token = stbi__hdr_gettoken(s,buffer); + if (token[0] == 0) break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; + } + + if (!valid) { + stbi__rewind( s ); + return 0; + } + token = stbi__hdr_gettoken(s,buffer); + if (strncmp(token, "-Y ", 3)) { + stbi__rewind( s ); + return 0; + } + token += 3; + *y = (int) strtol(token, &token, 10); + while (*token == ' ') ++token; + if (strncmp(token, "+X ", 3)) { + stbi__rewind( s ); + return 0; + } + token += 3; + *x = (int) strtol(token, NULL, 10); + *comp = 3; + return 1; +} +#endif // STBI_NO_HDR + +#ifndef STBI_NO_BMP +static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp) +{ + void *p; + stbi__bmp_data info; + + info.all_a = 255; + p = stbi__bmp_parse_header(s, &info); + if (p == NULL) { + stbi__rewind( s ); + return 0; + } + if (x) *x = s->img_x; + if (y) *y = s->img_y; + if (comp) { + if (info.bpp == 24 && info.ma == 0xff000000) + *comp = 3; + else + *comp = info.ma ? 4 : 3; + } + return 1; +} +#endif + +#ifndef STBI_NO_PSD +static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp) +{ + int channelCount, dummy, depth; + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + if (stbi__get32be(s) != 0x38425053) { + stbi__rewind( s ); + return 0; + } + if (stbi__get16be(s) != 1) { + stbi__rewind( s ); + return 0; + } + stbi__skip(s, 6); + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) { + stbi__rewind( s ); + return 0; + } + *y = stbi__get32be(s); + *x = stbi__get32be(s); + depth = stbi__get16be(s); + if (depth != 8 && depth != 16) { + stbi__rewind( s ); + return 0; + } + if (stbi__get16be(s) != 3) { + stbi__rewind( s ); + return 0; + } + *comp = 4; + return 1; +} + +static int stbi__psd_is16(stbi__context *s) +{ + int channelCount, depth; + if (stbi__get32be(s) != 0x38425053) { + stbi__rewind( s ); + return 0; + } + if (stbi__get16be(s) != 1) { + stbi__rewind( s ); + return 0; + } + stbi__skip(s, 6); + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) { + stbi__rewind( s ); + return 0; + } + STBI_NOTUSED(stbi__get32be(s)); + STBI_NOTUSED(stbi__get32be(s)); + depth = stbi__get16be(s); + if (depth != 16) { + stbi__rewind( s ); + return 0; + } + return 1; +} +#endif + +#ifndef STBI_NO_PIC +static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp) +{ + int act_comp=0,num_packets=0,chained,dummy; + stbi__pic_packet packets[10]; + + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + + if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) { + stbi__rewind(s); + return 0; + } + + stbi__skip(s, 88); + + *x = stbi__get16be(s); + *y = stbi__get16be(s); + if (stbi__at_eof(s)) { + stbi__rewind( s); + return 0; + } + if ( (*x) != 0 && (1 << 28) / (*x) < (*y)) { + stbi__rewind( s ); + return 0; + } + + stbi__skip(s, 8); + + do { + stbi__pic_packet *packet; + + if (num_packets==sizeof(packets)/sizeof(packets[0])) + return 0; + + packet = &packets[num_packets++]; + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + act_comp |= packet->channel; + + if (stbi__at_eof(s)) { + stbi__rewind( s ); + return 0; + } + if (packet->size != 8) { + stbi__rewind( s ); + return 0; + } + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); + + return 1; +} +#endif + +// ************************************************************************************************* +// Portable Gray Map and Portable Pixel Map loader +// by Ken Miller +// +// PGM: http://netpbm.sourceforge.net/doc/pgm.html +// PPM: http://netpbm.sourceforge.net/doc/ppm.html +// +// Known limitations: +// Does not support comments in the header section +// Does not support ASCII image data (formats P2 and P3) + +#ifndef STBI_NO_PNM + +static int stbi__pnm_test(stbi__context *s) +{ + char p, t; + p = (char) stbi__get8(s); + t = (char) stbi__get8(s); + if (p != 'P' || (t != '5' && t != '6')) { + stbi__rewind( s ); + return 0; + } + return 1; +} + +static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + stbi_uc *out; + STBI_NOTUSED(ri); + + ri->bits_per_channel = stbi__pnm_info(s, (int *)&s->img_x, (int *)&s->img_y, (int *)&s->img_n); + if (ri->bits_per_channel == 0) + return 0; + + if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + *x = s->img_x; + *y = s->img_y; + if (comp) *comp = s->img_n; + + if (!stbi__mad4sizes_valid(s->img_n, s->img_x, s->img_y, ri->bits_per_channel / 8, 0)) + return stbi__errpuc("too large", "PNM too large"); + + out = (stbi_uc *) stbi__malloc_mad4(s->img_n, s->img_x, s->img_y, ri->bits_per_channel / 8, 0); + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + stbi__getn(s, out, s->img_n * s->img_x * s->img_y * (ri->bits_per_channel / 8)); + + if (req_comp && req_comp != s->img_n) { + out = stbi__convert_format(out, s->img_n, req_comp, s->img_x, s->img_y); + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + return out; +} + +static int stbi__pnm_isspace(char c) +{ + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; +} + +static void stbi__pnm_skip_whitespace(stbi__context *s, char *c) +{ + for (;;) { + while (!stbi__at_eof(s) && stbi__pnm_isspace(*c)) + *c = (char) stbi__get8(s); + + if (stbi__at_eof(s) || *c != '#') + break; + + while (!stbi__at_eof(s) && *c != '\n' && *c != '\r' ) + *c = (char) stbi__get8(s); + } +} + +static int stbi__pnm_isdigit(char c) +{ + return c >= '0' && c <= '9'; +} + +static int stbi__pnm_getinteger(stbi__context *s, char *c) +{ + int value = 0; + + while (!stbi__at_eof(s) && stbi__pnm_isdigit(*c)) { + value = value*10 + (*c - '0'); + *c = (char) stbi__get8(s); + } + + return value; +} + +static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp) +{ + int maxv, dummy; + char c, p, t; + + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + + stbi__rewind(s); + + // Get identifier + p = (char) stbi__get8(s); + t = (char) stbi__get8(s); + if (p != 'P' || (t != '5' && t != '6')) { + stbi__rewind(s); + return 0; + } + + *comp = (t == '6') ? 3 : 1; // '5' is 1-component .pgm; '6' is 3-component .ppm + + c = (char) stbi__get8(s); + stbi__pnm_skip_whitespace(s, &c); + + *x = stbi__pnm_getinteger(s, &c); // read width + stbi__pnm_skip_whitespace(s, &c); + + *y = stbi__pnm_getinteger(s, &c); // read height + stbi__pnm_skip_whitespace(s, &c); + + maxv = stbi__pnm_getinteger(s, &c); // read max value + if (maxv > 65535) + return stbi__err("max value > 65535", "PPM image supports only 8-bit and 16-bit images"); + else if (maxv > 255) + return 16; + else + return 8; +} + +static int stbi__pnm_is16(stbi__context *s) +{ + if (stbi__pnm_info(s, NULL, NULL, NULL) == 16) + return 1; + return 0; +} +#endif + +static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp) +{ + #ifndef STBI_NO_JPEG + if (stbi__jpeg_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PNG + if (stbi__png_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_GIF + if (stbi__gif_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_BMP + if (stbi__bmp_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PSD + if (stbi__psd_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PIC + if (stbi__pic_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PNM + if (stbi__pnm_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_HDR + if (stbi__hdr_info(s, x, y, comp)) return 1; + #endif + + // test tga last because it's a crappy test! + #ifndef STBI_NO_TGA + if (stbi__tga_info(s, x, y, comp)) + return 1; + #endif + return stbi__err("unknown image type", "Image not of any known type, or corrupt"); +} + +static int stbi__is_16_main(stbi__context *s) +{ + #ifndef STBI_NO_PNG + if (stbi__png_is16(s)) return 1; + #endif + + #ifndef STBI_NO_PSD + if (stbi__psd_is16(s)) return 1; + #endif + + #ifndef STBI_NO_PNM + if (stbi__pnm_is16(s)) return 1; + #endif + return 0; +} + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp) +{ + FILE *f = stbi__fopen(filename, "rb"); + int result; + if (!f) return stbi__err("can't fopen", "Unable to open file"); + result = stbi_info_from_file(f, x, y, comp); + fclose(f); + return result; +} + +STBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp) +{ + int r; + stbi__context s; + long pos = ftell(f); + stbi__start_file(&s, f); + r = stbi__info_main(&s,x,y,comp); + fseek(f,pos,SEEK_SET); + return r; +} + +STBIDEF int stbi_is_16_bit(char const *filename) +{ + FILE *f = stbi__fopen(filename, "rb"); + int result; + if (!f) return stbi__err("can't fopen", "Unable to open file"); + result = stbi_is_16_bit_from_file(f); + fclose(f); + return result; +} + +STBIDEF int stbi_is_16_bit_from_file(FILE *f) +{ + int r; + stbi__context s; + long pos = ftell(f); + stbi__start_file(&s, f); + r = stbi__is_16_main(&s); + fseek(f,pos,SEEK_SET); + return r; +} +#endif // !STBI_NO_STDIO + +STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__info_main(&s,x,y,comp); +} + +STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, int *x, int *y, int *comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user); + return stbi__info_main(&s,x,y,comp); +} + +STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__is_16_main(&s); +} + +STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *c, void *user) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user); + return stbi__is_16_main(&s); +} + +#endif // STB_IMAGE_IMPLEMENTATION + +/* + revision history: + 2.20 (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs + 2.19 (2018-02-11) fix warning + 2.18 (2018-01-30) fix warnings + 2.17 (2018-01-29) change sbti__shiftsigned to avoid clang -O2 bug + 1-bit BMP + *_is_16_bit api + avoid warnings + 2.16 (2017-07-23) all functions have 16-bit variants; + STBI_NO_STDIO works again; + compilation fixes; + fix rounding in unpremultiply; + optimize vertical flip; + disable raw_len validation; + documentation fixes + 2.15 (2017-03-18) fix png-1,2,4 bug; now all Imagenet JPGs decode; + warning fixes; disable run-time SSE detection on gcc; + uniform handling of optional "return" values; + thread-safe initialization of zlib tables + 2.14 (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet JPGs + 2.13 (2016-11-29) add 16-bit API, only supported for PNG right now + 2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes + 2.11 (2016-04-02) allocate large structures on the stack + remove white matting for transparent PSD + fix reported channel count for PNG & BMP + re-enable SSE2 in non-gcc 64-bit + support RGB-formatted JPEG + read 16-bit PNGs (only as 8-bit) + 2.10 (2016-01-22) avoid warning introduced in 2.09 by STBI_REALLOC_SIZED + 2.09 (2016-01-16) allow comments in PNM files + 16-bit-per-pixel TGA (not bit-per-component) + info() for TGA could break due to .hdr handling + info() for BMP to shares code instead of sloppy parse + can use STBI_REALLOC_SIZED if allocator doesn't support realloc + code cleanup + 2.08 (2015-09-13) fix to 2.07 cleanup, reading RGB PSD as RGBA + 2.07 (2015-09-13) fix compiler warnings + partial animated GIF support + limited 16-bpc PSD support + #ifdef unused functions + bug with < 92 byte PIC,PNM,HDR,TGA + 2.06 (2015-04-19) fix bug where PSD returns wrong '*comp' value + 2.05 (2015-04-19) fix bug in progressive JPEG handling, fix warning + 2.04 (2015-04-15) try to re-enable SIMD on MinGW 64-bit + 2.03 (2015-04-12) extra corruption checking (mmozeiko) + stbi_set_flip_vertically_on_load (nguillemot) + fix NEON support; fix mingw support + 2.02 (2015-01-19) fix incorrect assert, fix warning + 2.01 (2015-01-17) fix various warnings; suppress SIMD on gcc 32-bit without -msse2 + 2.00b (2014-12-25) fix STBI_MALLOC in progressive JPEG + 2.00 (2014-12-25) optimize JPG, including x86 SSE2 & NEON SIMD (ryg) + progressive JPEG (stb) + PGM/PPM support (Ken Miller) + STBI_MALLOC,STBI_REALLOC,STBI_FREE + GIF bugfix -- seemingly never worked + STBI_NO_*, STBI_ONLY_* + 1.48 (2014-12-14) fix incorrectly-named assert() + 1.47 (2014-12-14) 1/2/4-bit PNG support, both direct and paletted (Omar Cornut & stb) + optimize PNG (ryg) + fix bug in interlaced PNG with user-specified channel count (stb) + 1.46 (2014-08-26) + fix broken tRNS chunk (colorkey-style transparency) in non-paletted PNG + 1.45 (2014-08-16) + fix MSVC-ARM internal compiler error by wrapping malloc + 1.44 (2014-08-07) + various warning fixes from Ronny Chevalier + 1.43 (2014-07-15) + fix MSVC-only compiler problem in code changed in 1.42 + 1.42 (2014-07-09) + don't define _CRT_SECURE_NO_WARNINGS (affects user code) + fixes to stbi__cleanup_jpeg path + added STBI_ASSERT to avoid requiring assert.h + 1.41 (2014-06-25) + fix search&replace from 1.36 that messed up comments/error messages + 1.40 (2014-06-22) + fix gcc struct-initialization warning + 1.39 (2014-06-15) + fix to TGA optimization when req_comp != number of components in TGA; + fix to GIF loading because BMP wasn't rewinding (whoops, no GIFs in my test suite) + add support for BMP version 5 (more ignored fields) + 1.38 (2014-06-06) + suppress MSVC warnings on integer casts truncating values + fix accidental rename of 'skip' field of I/O + 1.37 (2014-06-04) + remove duplicate typedef + 1.36 (2014-06-03) + convert to header file single-file library + if de-iphone isn't set, load iphone images color-swapped instead of returning NULL + 1.35 (2014-05-27) + various warnings + fix broken STBI_SIMD path + fix bug where stbi_load_from_file no longer left file pointer in correct place + fix broken non-easy path for 32-bit BMP (possibly never used) + TGA optimization by Arseny Kapoulkine + 1.34 (unknown) + use STBI_NOTUSED in stbi__resample_row_generic(), fix one more leak in tga failure case + 1.33 (2011-07-14) + make stbi_is_hdr work in STBI_NO_HDR (as specified), minor compiler-friendly improvements + 1.32 (2011-07-13) + support for "info" function for all supported filetypes (SpartanJ) + 1.31 (2011-06-20) + a few more leak fixes, bug in PNG handling (SpartanJ) + 1.30 (2011-06-11) + added ability to load files via callbacks to accomidate custom input streams (Ben Wenger) + removed deprecated format-specific test/load functions + removed support for installable file formats (stbi_loader) -- would have been broken for IO callbacks anyway + error cases in bmp and tga give messages and don't leak (Raymond Barbiero, grisha) + fix inefficiency in decoding 32-bit BMP (David Woo) + 1.29 (2010-08-16) + various warning fixes from Aurelien Pocheville + 1.28 (2010-08-01) + fix bug in GIF palette transparency (SpartanJ) + 1.27 (2010-08-01) + cast-to-stbi_uc to fix warnings + 1.26 (2010-07-24) + fix bug in file buffering for PNG reported by SpartanJ + 1.25 (2010-07-17) + refix trans_data warning (Won Chun) + 1.24 (2010-07-12) + perf improvements reading from files on platforms with lock-heavy fgetc() + minor perf improvements for jpeg + deprecated type-specific functions so we'll get feedback if they're needed + attempt to fix trans_data warning (Won Chun) + 1.23 fixed bug in iPhone support + 1.22 (2010-07-10) + removed image *writing* support + stbi_info support from Jetro Lauha + GIF support from Jean-Marc Lienher + iPhone PNG-extensions from James Brown + warning-fixes from Nicolas Schulz and Janez Zemva (i.stbi__err. Janez (U+017D)emva) + 1.21 fix use of 'stbi_uc' in header (reported by jon blow) + 1.20 added support for Softimage PIC, by Tom Seddon + 1.19 bug in interlaced PNG corruption check (found by ryg) + 1.18 (2008-08-02) + fix a threading bug (local mutable static) + 1.17 support interlaced PNG + 1.16 major bugfix - stbi__convert_format converted one too many pixels + 1.15 initialize some fields for thread safety + 1.14 fix threadsafe conversion bug + header-file-only version (#define STBI_HEADER_FILE_ONLY before including) + 1.13 threadsafe + 1.12 const qualifiers in the API + 1.11 Support installable IDCT, colorspace conversion routines + 1.10 Fixes for 64-bit (don't use "unsigned long") + optimized upsampling by Fabian "ryg" Giesen + 1.09 Fix format-conversion for PSD code (bad global variables!) + 1.08 Thatcher Ulrich's PSD code integrated by Nicolas Schulz + 1.07 attempt to fix C++ warning/errors again + 1.06 attempt to fix C++ warning/errors again + 1.05 fix TGA loading to return correct *comp and use good luminance calc + 1.04 default float alpha is 1, not 255; use 'void *' for stbi_image_free + 1.03 bugfixes to STBI_NO_STDIO, STBI_NO_HDR + 1.02 support for (subset of) HDR files, float interface for preferred access to them + 1.01 fix bug: possible bug in handling right-side up bmps... not sure + fix bug: the stbi__bmp_load() and stbi__tga_load() functions didn't work at all + 1.00 interface to zlib that skips zlib header + 0.99 correct handling of alpha in palette + 0.98 TGA loader by lonesock; dynamically add loaders (untested) + 0.97 jpeg errors on too large a file; also catch another malloc failure + 0.96 fix detection of invalid v value - particleman@mollyrocket forum + 0.95 during header scan, seek to markers in case of padding + 0.94 STBI_NO_STDIO to disable stdio usage; rename all #defines the same + 0.93 handle jpegtran output; verbose errors + 0.92 read 4,8,16,24,32-bit BMP files of several formats + 0.91 output 24-bit Windows 3.0 BMP files + 0.90 fix a few more warnings; bump version number to approach 1.0 + 0.61 bugfixes due to Marc LeBlanc, Christopher Lloyd + 0.60 fix compiling as c++ + 0.59 fix warnings: merge Dave Moore's -Wall fixes + 0.58 fix bug: zlib uncompressed mode len/nlen was wrong endian + 0.57 fix bug: jpg last huffman symbol before marker was >9 bits but less than 16 available + 0.56 fix bug: zlib uncompressed mode len vs. nlen + 0.55 fix bug: restart_interval not initialized to 0 + 0.54 allow NULL for 'int *comp' + 0.53 fix bug in png 3->4; speedup png decoding + 0.52 png handles req_comp=3,4 directly; minor cleanup; jpeg comments + 0.51 obey req_comp requests, 1-component jpegs return as 1-component, + on 'test' only check type, not whether we support this variant + 0.50 (2006-11-19) + first released version +*/ + + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright (c) 2017 Sean Barrett +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain (www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +------------------------------------------------------------------------------ +*/ diff --git a/3rdparty/stb/stb_truetype.h b/3rdparty/stb/stb_truetype.h new file mode 100644 index 000000000..90a5c2e2b --- /dev/null +++ b/3rdparty/stb/stb_truetype.h @@ -0,0 +1,5079 @@ +// stb_truetype.h - v1.26 - public domain +// authored from 2009-2021 by Sean Barrett / RAD Game Tools +// +// ======================================================================= +// +// NO SECURITY GUARANTEE -- DO NOT USE THIS ON UNTRUSTED FONT FILES +// +// This library does no range checking of the offsets found in the file, +// meaning an attacker can use it to read arbitrary memory. +// +// ======================================================================= +// +// This library processes TrueType files: +// parse files +// extract glyph metrics +// extract glyph shapes +// render glyphs to one-channel bitmaps with antialiasing (box filter) +// render glyphs to one-channel SDF bitmaps (signed-distance field/function) +// +// Todo: +// non-MS cmaps +// crashproof on bad data +// hinting? (no longer patented) +// cleartype-style AA? +// optimize: use simple memory allocator for intermediates +// optimize: build edge-list directly from curves +// optimize: rasterize directly from curves? +// +// ADDITIONAL CONTRIBUTORS +// +// Mikko Mononen: compound shape support, more cmap formats +// Tor Andersson: kerning, subpixel rendering +// Dougall Johnson: OpenType / Type 2 font handling +// Daniel Ribeiro Maciel: basic GPOS-based kerning +// +// Misc other: +// Ryan Gordon +// Simon Glass +// github:IntellectualKitty +// Imanol Celaya +// Daniel Ribeiro Maciel +// +// Bug/warning reports/fixes: +// "Zer" on mollyrocket Fabian "ryg" Giesen github:NiLuJe +// Cass Everitt Martins Mozeiko github:aloucks +// stoiko (Haemimont Games) Cap Petschulat github:oyvindjam +// Brian Hook Omar Cornut github:vassvik +// Walter van Niftrik Ryan Griege +// David Gow Peter LaValle +// David Given Sergey Popov +// Ivan-Assen Ivanov Giumo X. Clanjor +// Anthony Pesch Higor Euripedes +// Johan Duparc Thomas Fields +// Hou Qiming Derek Vinyard +// Rob Loach Cort Stratton +// Kenney Phillis Jr. Brian Costabile +// Ken Voskuil (kaesve) Yakov Galka +// +// VERSION HISTORY +// +// 1.26 (2021-08-28) fix broken rasterizer +// 1.25 (2021-07-11) many fixes +// 1.24 (2020-02-05) fix warning +// 1.23 (2020-02-02) query SVG data for glyphs; query whole kerning table (but only kern not GPOS) +// 1.22 (2019-08-11) minimize missing-glyph duplication; fix kerning if both 'GPOS' and 'kern' are defined +// 1.21 (2019-02-25) fix warning +// 1.20 (2019-02-07) PackFontRange skips missing codepoints; GetScaleFontVMetrics() +// 1.19 (2018-02-11) GPOS kerning, STBTT_fmod +// 1.18 (2018-01-29) add missing function +// 1.17 (2017-07-23) make more arguments const; doc fix +// 1.16 (2017-07-12) SDF support +// 1.15 (2017-03-03) make more arguments const +// 1.14 (2017-01-16) num-fonts-in-TTC function +// 1.13 (2017-01-02) support OpenType fonts, certain Apple fonts +// 1.12 (2016-10-25) suppress warnings about casting away const with -Wcast-qual +// 1.11 (2016-04-02) fix unused-variable warning +// 1.10 (2016-04-02) user-defined fabs(); rare memory leak; remove duplicate typedef +// 1.09 (2016-01-16) warning fix; avoid crash on outofmem; use allocation userdata properly +// 1.08 (2015-09-13) document stbtt_Rasterize(); fixes for vertical & horizontal edges +// 1.07 (2015-08-01) allow PackFontRanges to accept arrays of sparse codepoints; +// variant PackFontRanges to pack and render in separate phases; +// fix stbtt_GetFontOFfsetForIndex (never worked for non-0 input?); +// fixed an assert() bug in the new rasterizer +// replace assert() with STBTT_assert() in new rasterizer +// +// Full history can be found at the end of this file. +// +// LICENSE +// +// See end of file for license information. +// +// USAGE +// +// Include this file in whatever places need to refer to it. In ONE C/C++ +// file, write: +// #define STB_TRUETYPE_IMPLEMENTATION +// before the #include of this file. This expands out the actual +// implementation into that C/C++ file. +// +// To make the implementation private to the file that generates the implementation, +// #define STBTT_STATIC +// +// Simple 3D API (don't ship this, but it's fine for tools and quick start) +// stbtt_BakeFontBitmap() -- bake a font to a bitmap for use as texture +// stbtt_GetBakedQuad() -- compute quad to draw for a given char +// +// Improved 3D API (more shippable): +// #include "stb_rect_pack.h" -- optional, but you really want it +// stbtt_PackBegin() +// stbtt_PackSetOversampling() -- for improved quality on small fonts +// stbtt_PackFontRanges() -- pack and renders +// stbtt_PackEnd() +// stbtt_GetPackedQuad() +// +// "Load" a font file from a memory buffer (you have to keep the buffer loaded) +// stbtt_InitFont() +// stbtt_GetFontOffsetForIndex() -- indexing for TTC font collections +// stbtt_GetNumberOfFonts() -- number of fonts for TTC font collections +// +// Render a unicode codepoint to a bitmap +// stbtt_GetCodepointBitmap() -- allocates and returns a bitmap +// stbtt_MakeCodepointBitmap() -- renders into bitmap you provide +// stbtt_GetCodepointBitmapBox() -- how big the bitmap must be +// +// Character advance/positioning +// stbtt_GetCodepointHMetrics() +// stbtt_GetFontVMetrics() +// stbtt_GetFontVMetricsOS2() +// stbtt_GetCodepointKernAdvance() +// +// Starting with version 1.06, the rasterizer was replaced with a new, +// faster and generally-more-precise rasterizer. The new rasterizer more +// accurately measures pixel coverage for anti-aliasing, except in the case +// where multiple shapes overlap, in which case it overestimates the AA pixel +// coverage. Thus, anti-aliasing of intersecting shapes may look wrong. If +// this turns out to be a problem, you can re-enable the old rasterizer with +// #define STBTT_RASTERIZER_VERSION 1 +// which will incur about a 15% speed hit. +// +// ADDITIONAL DOCUMENTATION +// +// Immediately after this block comment are a series of sample programs. +// +// After the sample programs is the "header file" section. This section +// includes documentation for each API function. +// +// Some important concepts to understand to use this library: +// +// Codepoint +// Characters are defined by unicode codepoints, e.g. 65 is +// uppercase A, 231 is lowercase c with a cedilla, 0x7e30 is +// the hiragana for "ma". +// +// Glyph +// A visual character shape (every codepoint is rendered as +// some glyph) +// +// Glyph index +// A font-specific integer ID representing a glyph +// +// Baseline +// Glyph shapes are defined relative to a baseline, which is the +// bottom of uppercase characters. Characters extend both above +// and below the baseline. +// +// Current Point +// As you draw text to the screen, you keep track of a "current point" +// which is the origin of each character. The current point's vertical +// position is the baseline. Even "baked fonts" use this model. +// +// Vertical Font Metrics +// The vertical qualities of the font, used to vertically position +// and space the characters. See docs for stbtt_GetFontVMetrics. +// +// Font Size in Pixels or Points +// The preferred interface for specifying font sizes in stb_truetype +// is to specify how tall the font's vertical extent should be in pixels. +// If that sounds good enough, skip the next paragraph. +// +// Most font APIs instead use "points", which are a common typographic +// measurement for describing font size, defined as 72 points per inch. +// stb_truetype provides a point API for compatibility. However, true +// "per inch" conventions don't make much sense on computer displays +// since different monitors have different number of pixels per +// inch. For example, Windows traditionally uses a convention that +// there are 96 pixels per inch, thus making 'inch' measurements have +// nothing to do with inches, and thus effectively defining a point to +// be 1.333 pixels. Additionally, the TrueType font data provides +// an explicit scale factor to scale a given font's glyphs to points, +// but the author has observed that this scale factor is often wrong +// for non-commercial fonts, thus making fonts scaled in points +// according to the TrueType spec incoherently sized in practice. +// +// DETAILED USAGE: +// +// Scale: +// Select how high you want the font to be, in points or pixels. +// Call ScaleForPixelHeight or ScaleForMappingEmToPixels to compute +// a scale factor SF that will be used by all other functions. +// +// Baseline: +// You need to select a y-coordinate that is the baseline of where +// your text will appear. Call GetFontBoundingBox to get the baseline-relative +// bounding box for all characters. SF*-y0 will be the distance in pixels +// that the worst-case character could extend above the baseline, so if +// you want the top edge of characters to appear at the top of the +// screen where y=0, then you would set the baseline to SF*-y0. +// +// Current point: +// Set the current point where the first character will appear. The +// first character could extend left of the current point; this is font +// dependent. You can either choose a current point that is the leftmost +// point and hope, or add some padding, or check the bounding box or +// left-side-bearing of the first character to be displayed and set +// the current point based on that. +// +// Displaying a character: +// Compute the bounding box of the character. It will contain signed values +// relative to . I.e. if it returns x0,y0,x1,y1, +// then the character should be displayed in the rectangle from +// to = 32 && *text < 128) { + stbtt_aligned_quad q; + stbtt_GetBakedQuad(cdata, 512,512, *text-32, &x,&y,&q,1);//1=opengl & d3d10+,0=d3d9 + glTexCoord2f(q.s0,q.t0); glVertex2f(q.x0,q.y0); + glTexCoord2f(q.s1,q.t0); glVertex2f(q.x1,q.y0); + glTexCoord2f(q.s1,q.t1); glVertex2f(q.x1,q.y1); + glTexCoord2f(q.s0,q.t1); glVertex2f(q.x0,q.y1); + } + ++text; + } + glEnd(); +} +#endif +// +// +////////////////////////////////////////////////////////////////////////////// +// +// Complete program (this compiles): get a single bitmap, print as ASCII art +// +#if 0 +#include +#define STB_TRUETYPE_IMPLEMENTATION // force following include to generate implementation +#include "stb_truetype.h" + +char ttf_buffer[1<<25]; + +int main(int argc, char **argv) +{ + stbtt_fontinfo font; + unsigned char *bitmap; + int w,h,i,j,c = (argc > 1 ? atoi(argv[1]) : 'a'), s = (argc > 2 ? atoi(argv[2]) : 20); + + fread(ttf_buffer, 1, 1<<25, fopen(argc > 3 ? argv[3] : "c:/windows/fonts/arialbd.ttf", "rb")); + + stbtt_InitFont(&font, ttf_buffer, stbtt_GetFontOffsetForIndex(ttf_buffer,0)); + bitmap = stbtt_GetCodepointBitmap(&font, 0,stbtt_ScaleForPixelHeight(&font, s), c, &w, &h, 0,0); + + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) + putchar(" .:ioVM@"[bitmap[j*w+i]>>5]); + putchar('\n'); + } + return 0; +} +#endif +// +// Output: +// +// .ii. +// @@@@@@. +// V@Mio@@o +// :i. V@V +// :oM@@M +// :@@@MM@M +// @@o o@M +// :@@. M@M +// @@@o@@@@ +// :M@@V:@@. +// +////////////////////////////////////////////////////////////////////////////// +// +// Complete program: print "Hello World!" banner, with bugs +// +#if 0 +char buffer[24<<20]; +unsigned char screen[20][79]; + +int main(int arg, char **argv) +{ + stbtt_fontinfo font; + int i,j,ascent,baseline,ch=0; + float scale, xpos=2; // leave a little padding in case the character extends left + char *text = "Heljo World!"; // intentionally misspelled to show 'lj' brokenness + + fread(buffer, 1, 1000000, fopen("c:/windows/fonts/arialbd.ttf", "rb")); + stbtt_InitFont(&font, buffer, 0); + + scale = stbtt_ScaleForPixelHeight(&font, 15); + stbtt_GetFontVMetrics(&font, &ascent,0,0); + baseline = (int) (ascent*scale); + + while (text[ch]) { + int advance,lsb,x0,y0,x1,y1; + float x_shift = xpos - (float) floor(xpos); + stbtt_GetCodepointHMetrics(&font, text[ch], &advance, &lsb); + stbtt_GetCodepointBitmapBoxSubpixel(&font, text[ch], scale,scale,x_shift,0, &x0,&y0,&x1,&y1); + stbtt_MakeCodepointBitmapSubpixel(&font, &screen[baseline + y0][(int) xpos + x0], x1-x0,y1-y0, 79, scale,scale,x_shift,0, text[ch]); + // note that this stomps the old data, so where character boxes overlap (e.g. 'lj') it's wrong + // because this API is really for baking character bitmaps into textures. if you want to render + // a sequence of characters, you really need to render each bitmap to a temp buffer, then + // "alpha blend" that into the working buffer + xpos += (advance * scale); + if (text[ch+1]) + xpos += scale*stbtt_GetCodepointKernAdvance(&font, text[ch],text[ch+1]); + ++ch; + } + + for (j=0; j < 20; ++j) { + for (i=0; i < 78; ++i) + putchar(" .:ioVM@"[screen[j][i]>>5]); + putchar('\n'); + } + + return 0; +} +#endif + + +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// +//// +//// INTEGRATION WITH YOUR CODEBASE +//// +//// The following sections allow you to supply alternate definitions +//// of C library functions used by stb_truetype, e.g. if you don't +//// link with the C runtime library. + +#ifdef STB_TRUETYPE_IMPLEMENTATION + // #define your own (u)stbtt_int8/16/32 before including to override this + #ifndef stbtt_uint8 + typedef unsigned char stbtt_uint8; + typedef signed char stbtt_int8; + typedef unsigned short stbtt_uint16; + typedef signed short stbtt_int16; + typedef unsigned int stbtt_uint32; + typedef signed int stbtt_int32; + #endif + + typedef char stbtt__check_size32[sizeof(stbtt_int32)==4 ? 1 : -1]; + typedef char stbtt__check_size16[sizeof(stbtt_int16)==2 ? 1 : -1]; + + // e.g. #define your own STBTT_ifloor/STBTT_iceil() to avoid math.h + #ifndef STBTT_ifloor + #include + #define STBTT_ifloor(x) ((int) floor(x)) + #define STBTT_iceil(x) ((int) ceil(x)) + #endif + + #ifndef STBTT_sqrt + #include + #define STBTT_sqrt(x) sqrt(x) + #define STBTT_pow(x,y) pow(x,y) + #endif + + #ifndef STBTT_fmod + #include + #define STBTT_fmod(x,y) fmod(x,y) + #endif + + #ifndef STBTT_cos + #include + #define STBTT_cos(x) cos(x) + #define STBTT_acos(x) acos(x) + #endif + + #ifndef STBTT_fabs + #include + #define STBTT_fabs(x) fabs(x) + #endif + + // #define your own functions "STBTT_malloc" / "STBTT_free" to avoid malloc.h + #ifndef STBTT_malloc + #include + #define STBTT_malloc(x,u) ((void)(u),malloc(x)) + #define STBTT_free(x,u) ((void)(u),free(x)) + #endif + + #ifndef STBTT_assert + #include + #define STBTT_assert(x) assert(x) + #endif + + #ifndef STBTT_strlen + #include + #define STBTT_strlen(x) strlen(x) + #endif + + #ifndef STBTT_memcpy + #include + #define STBTT_memcpy memcpy + #define STBTT_memset memset + #endif +#endif + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +//// +//// INTERFACE +//// +//// + +#ifndef __STB_INCLUDE_STB_TRUETYPE_H__ +#define __STB_INCLUDE_STB_TRUETYPE_H__ + +#ifdef STBTT_STATIC +#define STBTT_DEF static +#else +#define STBTT_DEF extern +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +// private structure +typedef struct +{ + unsigned char *data; + int cursor; + int size; +} stbtt__buf; + +////////////////////////////////////////////////////////////////////////////// +// +// TEXTURE BAKING API +// +// If you use this API, you only have to call two functions ever. +// + +typedef struct +{ + unsigned short x0,y0,x1,y1; // coordinates of bbox in bitmap + float xoff,yoff,xadvance; +} stbtt_bakedchar; + +STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset, // font location (use offset=0 for plain .ttf) + float pixel_height, // height of font in pixels + unsigned char *pixels, int pw, int ph, // bitmap to be filled in + int first_char, int num_chars, // characters to bake + stbtt_bakedchar *chardata); // you allocate this, it's num_chars long +// if return is positive, the first unused row of the bitmap +// if return is negative, returns the negative of the number of characters that fit +// if return is 0, no characters fit and no rows were used +// This uses a very crappy packing. + +typedef struct +{ + float x0,y0,s0,t0; // top-left + float x1,y1,s1,t1; // bottom-right +} stbtt_aligned_quad; + +STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int pw, int ph, // same data as above + int char_index, // character to display + float *xpos, float *ypos, // pointers to current position in screen pixel space + stbtt_aligned_quad *q, // output: quad to draw + int opengl_fillrule); // true if opengl fill rule; false if DX9 or earlier +// Call GetBakedQuad with char_index = 'character - first_char', and it +// creates the quad you need to draw and advances the current position. +// +// The coordinate system used assumes y increases downwards. +// +// Characters will extend both above and below the current position; +// see discussion of "BASELINE" above. +// +// It's inefficient; you might want to c&p it and optimize it. + +STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata, int index, float size, float *ascent, float *descent, float *lineGap); +// Query the font vertical metrics without having to create a font first. + + +////////////////////////////////////////////////////////////////////////////// +// +// NEW TEXTURE BAKING API +// +// This provides options for packing multiple fonts into one atlas, not +// perfectly but better than nothing. + +typedef struct +{ + unsigned short x0,y0,x1,y1; // coordinates of bbox in bitmap + float xoff,yoff,xadvance; + float xoff2,yoff2; +} stbtt_packedchar; + +typedef struct stbtt_pack_context stbtt_pack_context; +typedef struct stbtt_fontinfo stbtt_fontinfo; +#ifndef STB_RECT_PACK_VERSION +typedef struct stbrp_rect stbrp_rect; +#endif + +STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pixels, int width, int height, int stride_in_bytes, int padding, void *alloc_context); +// Initializes a packing context stored in the passed-in stbtt_pack_context. +// Future calls using this context will pack characters into the bitmap passed +// in here: a 1-channel bitmap that is width * height. stride_in_bytes is +// the distance from one row to the next (or 0 to mean they are packed tightly +// together). "padding" is the amount of padding to leave between each +// character (normally you want '1' for bitmaps you'll use as textures with +// bilinear filtering). +// +// Returns 0 on failure, 1 on success. + +STBTT_DEF void stbtt_PackEnd (stbtt_pack_context *spc); +// Cleans up the packing context and frees all memory. + +#define STBTT_POINT_SIZE(x) (-(x)) + +STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, float font_size, + int first_unicode_char_in_range, int num_chars_in_range, stbtt_packedchar *chardata_for_range); +// Creates character bitmaps from the font_index'th font found in fontdata (use +// font_index=0 if you don't know what that is). It creates num_chars_in_range +// bitmaps for characters with unicode values starting at first_unicode_char_in_range +// and increasing. Data for how to render them is stored in chardata_for_range; +// pass these to stbtt_GetPackedQuad to get back renderable quads. +// +// font_size is the full height of the character from ascender to descender, +// as computed by stbtt_ScaleForPixelHeight. To use a point size as computed +// by stbtt_ScaleForMappingEmToPixels, wrap the point size in STBTT_POINT_SIZE() +// and pass that result as 'font_size': +// ..., 20 , ... // font max minus min y is 20 pixels tall +// ..., STBTT_POINT_SIZE(20), ... // 'M' is 20 pixels tall + +typedef struct +{ + float font_size; + int first_unicode_codepoint_in_range; // if non-zero, then the chars are continuous, and this is the first codepoint + int *array_of_unicode_codepoints; // if non-zero, then this is an array of unicode codepoints + int num_chars; + stbtt_packedchar *chardata_for_range; // output + unsigned char h_oversample, v_oversample; // don't set these, they're used internally +} stbtt_pack_range; + +STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, stbtt_pack_range *ranges, int num_ranges); +// Creates character bitmaps from multiple ranges of characters stored in +// ranges. This will usually create a better-packed bitmap than multiple +// calls to stbtt_PackFontRange. Note that you can call this multiple +// times within a single PackBegin/PackEnd. + +STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsigned int h_oversample, unsigned int v_oversample); +// Oversampling a font increases the quality by allowing higher-quality subpixel +// positioning, and is especially valuable at smaller text sizes. +// +// This function sets the amount of oversampling for all following calls to +// stbtt_PackFontRange(s) or stbtt_PackFontRangesGatherRects for a given +// pack context. The default (no oversampling) is achieved by h_oversample=1 +// and v_oversample=1. The total number of pixels required is +// h_oversample*v_oversample larger than the default; for example, 2x2 +// oversampling requires 4x the storage of 1x1. For best results, render +// oversampled textures with bilinear filtering. Look at the readme in +// stb/tests/oversample for information about oversampled fonts +// +// To use with PackFontRangesGather etc., you must set it before calls +// call to PackFontRangesGatherRects. + +STBTT_DEF void stbtt_PackSetSkipMissingCodepoints(stbtt_pack_context *spc, int skip); +// If skip != 0, this tells stb_truetype to skip any codepoints for which +// there is no corresponding glyph. If skip=0, which is the default, then +// codepoints without a glyph recived the font's "missing character" glyph, +// typically an empty box by convention. + +STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int pw, int ph, // same data as above + int char_index, // character to display + float *xpos, float *ypos, // pointers to current position in screen pixel space + stbtt_aligned_quad *q, // output: quad to draw + int align_to_integer); + +STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects); +STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, stbrp_rect *rects, int num_rects); +STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects); +// Calling these functions in sequence is roughly equivalent to calling +// stbtt_PackFontRanges(). If you more control over the packing of multiple +// fonts, or if you want to pack custom data into a font texture, take a look +// at the source to of stbtt_PackFontRanges() and create a custom version +// using these functions, e.g. call GatherRects multiple times, +// building up a single array of rects, then call PackRects once, +// then call RenderIntoRects repeatedly. This may result in a +// better packing than calling PackFontRanges multiple times +// (or it may not). + +// this is an opaque structure that you shouldn't mess with which holds +// all the context needed from PackBegin to PackEnd. +struct stbtt_pack_context { + void *user_allocator_context; + void *pack_info; + int width; + int height; + int stride_in_bytes; + int padding; + int skip_missing; + unsigned int h_oversample, v_oversample; + unsigned char *pixels; + void *nodes; +}; + +////////////////////////////////////////////////////////////////////////////// +// +// FONT LOADING +// +// + +STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data); +// This function will determine the number of fonts in a font file. TrueType +// collection (.ttc) files may contain multiple fonts, while TrueType font +// (.ttf) files only contain one font. The number of fonts can be used for +// indexing with the previous function where the index is between zero and one +// less than the total fonts. If an error occurs, -1 is returned. + +STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int index); +// Each .ttf/.ttc file may have more than one font. Each font has a sequential +// index number starting from 0. Call this function to get the font offset for +// a given index; it returns -1 if the index is out of range. A regular .ttf +// file will only define one font and it always be at offset 0, so it will +// return '0' for index 0, and -1 for all other indices. + +// The following structure is defined publicly so you can declare one on +// the stack or as a global or etc, but you should treat it as opaque. +struct stbtt_fontinfo +{ + void * userdata; + unsigned char * data; // pointer to .ttf file + int fontstart; // offset of start of font + + int numGlyphs; // number of glyphs, needed for range checking + + int loca,head,glyf,hhea,hmtx,kern,gpos,svg; // table locations as offset from start of .ttf + int index_map; // a cmap mapping for our chosen character encoding + int indexToLocFormat; // format needed to map from glyph index to glyph + + stbtt__buf cff; // cff font data + stbtt__buf charstrings; // the charstring index + stbtt__buf gsubrs; // global charstring subroutines index + stbtt__buf subrs; // private charstring subroutines index + stbtt__buf fontdicts; // array of font dicts + stbtt__buf fdselect; // map from glyph to fontdict +}; + +STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data, int offset); +// Given an offset into the file that defines a font, this function builds +// the necessary cached info for the rest of the system. You must allocate +// the stbtt_fontinfo yourself, and stbtt_InitFont will fill it out. You don't +// need to do anything special to free it, because the contents are pure +// value data with no additional data structures. Returns 0 on failure. + + +////////////////////////////////////////////////////////////////////////////// +// +// CHARACTER TO GLYPH-INDEX CONVERSIOn + +STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codepoint); +// If you're going to perform multiple operations on the same character +// and you want a speed-up, call this function with the character you're +// going to process, then use glyph-based functions instead of the +// codepoint-based functions. +// Returns 0 if the character codepoint is not defined in the font. + + +////////////////////////////////////////////////////////////////////////////// +// +// CHARACTER PROPERTIES +// + +STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, float pixels); +// computes a scale factor to produce a font whose "height" is 'pixels' tall. +// Height is measured as the distance from the highest ascender to the lowest +// descender; in other words, it's equivalent to calling stbtt_GetFontVMetrics +// and computing: +// scale = pixels / (ascent - descent) +// so if you prefer to measure height by the ascent only, use a similar calculation. + +STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *info, float pixels); +// computes a scale factor to produce a font whose EM size is mapped to +// 'pixels' tall. This is probably what traditional APIs compute, but +// I'm not positive. + +STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *ascent, int *descent, int *lineGap); +// ascent is the coordinate above the baseline the font extends; descent +// is the coordinate below the baseline the font extends (i.e. it is typically negative) +// lineGap is the spacing between one row's descent and the next row's ascent... +// so you should advance the vertical position by "*ascent - *descent + *lineGap" +// these are expressed in unscaled coordinates, so you must multiply by +// the scale factor for a given size + +STBTT_DEF int stbtt_GetFontVMetricsOS2(const stbtt_fontinfo *info, int *typoAscent, int *typoDescent, int *typoLineGap); +// analogous to GetFontVMetrics, but returns the "typographic" values from the OS/2 +// table (specific to MS/Windows TTF files). +// +// Returns 1 on success (table present), 0 on failure. + +STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int *x0, int *y0, int *x1, int *y1); +// the bounding box around all possible characters + +STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, int codepoint, int *advanceWidth, int *leftSideBearing); +// leftSideBearing is the offset from the current horizontal position to the left edge of the character +// advanceWidth is the offset from the current horizontal position to the next horizontal position +// these are expressed in unscaled coordinates + +STBTT_DEF int stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info, int ch1, int ch2); +// an additional amount to add to the 'advance' value between ch1 and ch2 + +STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int codepoint, int *x0, int *y0, int *x1, int *y1); +// Gets the bounding box of the visible part of the glyph, in unscaled coordinates + +STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int glyph_index, int *advanceWidth, int *leftSideBearing); +STBTT_DEF int stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2); +STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1); +// as above, but takes one or more glyph indices for greater efficiency + +typedef struct stbtt_kerningentry +{ + int glyph1; // use stbtt_FindGlyphIndex + int glyph2; + int advance; +} stbtt_kerningentry; + +STBTT_DEF int stbtt_GetKerningTableLength(const stbtt_fontinfo *info); +STBTT_DEF int stbtt_GetKerningTable(const stbtt_fontinfo *info, stbtt_kerningentry* table, int table_length); +// Retrieves a complete list of all of the kerning pairs provided by the font +// stbtt_GetKerningTable never writes more than table_length entries and returns how many entries it did write. +// The table will be sorted by (a.glyph1 == b.glyph1)?(a.glyph2 < b.glyph2):(a.glyph1 < b.glyph1) + +////////////////////////////////////////////////////////////////////////////// +// +// GLYPH SHAPES (you probably don't need these, but they have to go before +// the bitmaps for C declaration-order reasons) +// + +#ifndef STBTT_vmove // you can predefine these to use different values (but why?) + enum { + STBTT_vmove=1, + STBTT_vline, + STBTT_vcurve, + STBTT_vcubic + }; +#endif + +#ifndef stbtt_vertex // you can predefine this to use different values + // (we share this with other code at RAD) + #define stbtt_vertex_type short // can't use stbtt_int16 because that's not visible in the header file + typedef struct + { + stbtt_vertex_type x,y,cx,cy,cx1,cy1; + unsigned char type,padding; + } stbtt_vertex; +#endif + +STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_index); +// returns non-zero if nothing is drawn for this glyph + +STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int unicode_codepoint, stbtt_vertex **vertices); +STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **vertices); +// returns # of vertices and fills *vertices with the pointer to them +// these are expressed in "unscaled" coordinates +// +// The shape is a series of contours. Each one starts with +// a STBTT_moveto, then consists of a series of mixed +// STBTT_lineto and STBTT_curveto segments. A lineto +// draws a line from previous endpoint to its x,y; a curveto +// draws a quadratic bezier from previous endpoint to +// its x,y, using cx,cy as the bezier control point. + +STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *vertices); +// frees the data allocated above + +STBTT_DEF unsigned char *stbtt_FindSVGDoc(const stbtt_fontinfo *info, int gl); +STBTT_DEF int stbtt_GetCodepointSVG(const stbtt_fontinfo *info, int unicode_codepoint, const char **svg); +STBTT_DEF int stbtt_GetGlyphSVG(const stbtt_fontinfo *info, int gl, const char **svg); +// fills svg with the character's SVG data. +// returns data size or 0 if SVG not found. + +////////////////////////////////////////////////////////////////////////////// +// +// BITMAP RENDERING +// + +STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata); +// frees the bitmap allocated below + +STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff); +// allocates a large-enough single-channel 8bpp bitmap and renders the +// specified character/glyph at the specified scale into it, with +// antialiasing. 0 is no coverage (transparent), 255 is fully covered (opaque). +// *width & *height are filled out with the width & height of the bitmap, +// which is stored left-to-right, top-to-bottom. +// +// xoff/yoff are the offset it pixel space from the glyph origin to the top-left of the bitmap + +STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff); +// the same as stbtt_GetCodepoitnBitmap, but you can specify a subpixel +// shift for the character + +STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint); +// the same as stbtt_GetCodepointBitmap, but you pass in storage for the bitmap +// in the form of 'output', with row spacing of 'out_stride' bytes. the bitmap +// is clipped to out_w/out_h bytes. Call stbtt_GetCodepointBitmapBox to get the +// width and height and positioning info for it first. + +STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint); +// same as stbtt_MakeCodepointBitmap, but you can specify a subpixel +// shift for the character + +STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int codepoint); +// same as stbtt_MakeCodepointBitmapSubpixel, but prefiltering +// is performed (see stbtt_PackSetOversampling) + +STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1); +// get the bbox of the bitmap centered around the glyph origin; so the +// bitmap width is ix1-ix0, height is iy1-iy0, and location to place +// the bitmap top left is (leftSideBearing*scale,iy0). +// (Note that the bitmap uses y-increases-down, but the shape uses +// y-increases-up, so CodepointBitmapBox and CodepointBox are inverted.) + +STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1); +// same as stbtt_GetCodepointBitmapBox, but you can specify a subpixel +// shift for the character + +// the following functions are equivalent to the above functions, but operate +// on glyph indices instead of Unicode codepoints (for efficiency) +STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff); +STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, int *width, int *height, int *xoff, int *yoff); +STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int glyph); +STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int glyph); +STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int glyph); +STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1); +STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y,float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1); + + +// @TODO: don't expose this structure +typedef struct +{ + int w,h,stride; + unsigned char *pixels; +} stbtt__bitmap; + +// rasterize a shape with quadratic beziers into a bitmap +STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, // 1-channel bitmap to draw into + float flatness_in_pixels, // allowable error of curve in pixels + stbtt_vertex *vertices, // array of vertices defining shape + int num_verts, // number of vertices in above array + float scale_x, float scale_y, // scale applied to input vertices + float shift_x, float shift_y, // translation applied to input vertices + int x_off, int y_off, // another translation applied to input + int invert, // if non-zero, vertically flip shape + void *userdata); // context for to STBTT_MALLOC + +////////////////////////////////////////////////////////////////////////////// +// +// Signed Distance Function (or Field) rendering + +STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata); +// frees the SDF bitmap allocated below + +STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float scale, int glyph, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff); +STBTT_DEF unsigned char * stbtt_GetCodepointSDF(const stbtt_fontinfo *info, float scale, int codepoint, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff); +// These functions compute a discretized SDF field for a single character, suitable for storing +// in a single-channel texture, sampling with bilinear filtering, and testing against +// larger than some threshold to produce scalable fonts. +// info -- the font +// scale -- controls the size of the resulting SDF bitmap, same as it would be creating a regular bitmap +// glyph/codepoint -- the character to generate the SDF for +// padding -- extra "pixels" around the character which are filled with the distance to the character (not 0), +// which allows effects like bit outlines +// onedge_value -- value 0-255 to test the SDF against to reconstruct the character (i.e. the isocontour of the character) +// pixel_dist_scale -- what value the SDF should increase by when moving one SDF "pixel" away from the edge (on the 0..255 scale) +// if positive, > onedge_value is inside; if negative, < onedge_value is inside +// width,height -- output height & width of the SDF bitmap (including padding) +// xoff,yoff -- output origin of the character +// return value -- a 2D array of bytes 0..255, width*height in size +// +// pixel_dist_scale & onedge_value are a scale & bias that allows you to make +// optimal use of the limited 0..255 for your application, trading off precision +// and special effects. SDF values outside the range 0..255 are clamped to 0..255. +// +// Example: +// scale = stbtt_ScaleForPixelHeight(22) +// padding = 5 +// onedge_value = 180 +// pixel_dist_scale = 180/5.0 = 36.0 +// +// This will create an SDF bitmap in which the character is about 22 pixels +// high but the whole bitmap is about 22+5+5=32 pixels high. To produce a filled +// shape, sample the SDF at each pixel and fill the pixel if the SDF value +// is greater than or equal to 180/255. (You'll actually want to antialias, +// which is beyond the scope of this example.) Additionally, you can compute +// offset outlines (e.g. to stroke the character border inside & outside, +// or only outside). For example, to fill outside the character up to 3 SDF +// pixels, you would compare against (180-36.0*3)/255 = 72/255. The above +// choice of variables maps a range from 5 pixels outside the shape to +// 2 pixels inside the shape to 0..255; this is intended primarily for apply +// outside effects only (the interior range is needed to allow proper +// antialiasing of the font at *smaller* sizes) +// +// The function computes the SDF analytically at each SDF pixel, not by e.g. +// building a higher-res bitmap and approximating it. In theory the quality +// should be as high as possible for an SDF of this size & representation, but +// unclear if this is true in practice (perhaps building a higher-res bitmap +// and computing from that can allow drop-out prevention). +// +// The algorithm has not been optimized at all, so expect it to be slow +// if computing lots of characters or very large sizes. + + + +////////////////////////////////////////////////////////////////////////////// +// +// Finding the right font... +// +// You should really just solve this offline, keep your own tables +// of what font is what, and don't try to get it out of the .ttf file. +// That's because getting it out of the .ttf file is really hard, because +// the names in the file can appear in many possible encodings, in many +// possible languages, and e.g. if you need a case-insensitive comparison, +// the details of that depend on the encoding & language in a complex way +// (actually underspecified in truetype, but also gigantic). +// +// But you can use the provided functions in two possible ways: +// stbtt_FindMatchingFont() will use *case-sensitive* comparisons on +// unicode-encoded names to try to find the font you want; +// you can run this before calling stbtt_InitFont() +// +// stbtt_GetFontNameString() lets you get any of the various strings +// from the file yourself and do your own comparisons on them. +// You have to have called stbtt_InitFont() first. + + +STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, const char *name, int flags); +// returns the offset (not index) of the font that matches, or -1 if none +// if you use STBTT_MACSTYLE_DONTCARE, use a font name like "Arial Bold". +// if you use any other flag, use a font name like "Arial"; this checks +// the 'macStyle' header field; i don't know if fonts set this consistently +#define STBTT_MACSTYLE_DONTCARE 0 +#define STBTT_MACSTYLE_BOLD 1 +#define STBTT_MACSTYLE_ITALIC 2 +#define STBTT_MACSTYLE_UNDERSCORE 4 +#define STBTT_MACSTYLE_NONE 8 // <= not same as 0, this makes us check the bitfield is 0 + +STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2); +// returns 1/0 whether the first string interpreted as utf8 is identical to +// the second string interpreted as big-endian utf16... useful for strings from next func + +STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font, int *length, int platformID, int encodingID, int languageID, int nameID); +// returns the string (which may be big-endian double byte, e.g. for unicode) +// and puts the length in bytes in *length. +// +// some of the values for the IDs are below; for more see the truetype spec: +// http://developer.apple.com/textfonts/TTRefMan/RM06/Chap6name.html +// http://www.microsoft.com/typography/otspec/name.htm + +enum { // platformID + STBTT_PLATFORM_ID_UNICODE =0, + STBTT_PLATFORM_ID_MAC =1, + STBTT_PLATFORM_ID_ISO =2, + STBTT_PLATFORM_ID_MICROSOFT =3 +}; + +enum { // encodingID for STBTT_PLATFORM_ID_UNICODE + STBTT_UNICODE_EID_UNICODE_1_0 =0, + STBTT_UNICODE_EID_UNICODE_1_1 =1, + STBTT_UNICODE_EID_ISO_10646 =2, + STBTT_UNICODE_EID_UNICODE_2_0_BMP=3, + STBTT_UNICODE_EID_UNICODE_2_0_FULL=4 +}; + +enum { // encodingID for STBTT_PLATFORM_ID_MICROSOFT + STBTT_MS_EID_SYMBOL =0, + STBTT_MS_EID_UNICODE_BMP =1, + STBTT_MS_EID_SHIFTJIS =2, + STBTT_MS_EID_UNICODE_FULL =10 +}; + +enum { // encodingID for STBTT_PLATFORM_ID_MAC; same as Script Manager codes + STBTT_MAC_EID_ROMAN =0, STBTT_MAC_EID_ARABIC =4, + STBTT_MAC_EID_JAPANESE =1, STBTT_MAC_EID_HEBREW =5, + STBTT_MAC_EID_CHINESE_TRAD =2, STBTT_MAC_EID_GREEK =6, + STBTT_MAC_EID_KOREAN =3, STBTT_MAC_EID_RUSSIAN =7 +}; + +enum { // languageID for STBTT_PLATFORM_ID_MICROSOFT; same as LCID... + // problematic because there are e.g. 16 english LCIDs and 16 arabic LCIDs + STBTT_MS_LANG_ENGLISH =0x0409, STBTT_MS_LANG_ITALIAN =0x0410, + STBTT_MS_LANG_CHINESE =0x0804, STBTT_MS_LANG_JAPANESE =0x0411, + STBTT_MS_LANG_DUTCH =0x0413, STBTT_MS_LANG_KOREAN =0x0412, + STBTT_MS_LANG_FRENCH =0x040c, STBTT_MS_LANG_RUSSIAN =0x0419, + STBTT_MS_LANG_GERMAN =0x0407, STBTT_MS_LANG_SPANISH =0x0409, + STBTT_MS_LANG_HEBREW =0x040d, STBTT_MS_LANG_SWEDISH =0x041D +}; + +enum { // languageID for STBTT_PLATFORM_ID_MAC + STBTT_MAC_LANG_ENGLISH =0 , STBTT_MAC_LANG_JAPANESE =11, + STBTT_MAC_LANG_ARABIC =12, STBTT_MAC_LANG_KOREAN =23, + STBTT_MAC_LANG_DUTCH =4 , STBTT_MAC_LANG_RUSSIAN =32, + STBTT_MAC_LANG_FRENCH =1 , STBTT_MAC_LANG_SPANISH =6 , + STBTT_MAC_LANG_GERMAN =2 , STBTT_MAC_LANG_SWEDISH =5 , + STBTT_MAC_LANG_HEBREW =10, STBTT_MAC_LANG_CHINESE_SIMPLIFIED =33, + STBTT_MAC_LANG_ITALIAN =3 , STBTT_MAC_LANG_CHINESE_TRAD =19 +}; + +#ifdef __cplusplus +} +#endif + +#endif // __STB_INCLUDE_STB_TRUETYPE_H__ + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// +//// +//// IMPLEMENTATION +//// +//// + +#ifdef STB_TRUETYPE_IMPLEMENTATION + +#ifndef STBTT_MAX_OVERSAMPLE +#define STBTT_MAX_OVERSAMPLE 8 +#endif + +#if STBTT_MAX_OVERSAMPLE > 255 +#error "STBTT_MAX_OVERSAMPLE cannot be > 255" +#endif + +typedef int stbtt__test_oversample_pow2[(STBTT_MAX_OVERSAMPLE & (STBTT_MAX_OVERSAMPLE-1)) == 0 ? 1 : -1]; + +#ifndef STBTT_RASTERIZER_VERSION +#define STBTT_RASTERIZER_VERSION 2 +#endif + +#ifdef _MSC_VER +#define STBTT__NOTUSED(v) (void)(v) +#else +#define STBTT__NOTUSED(v) (void)sizeof(v) +#endif + +////////////////////////////////////////////////////////////////////////// +// +// stbtt__buf helpers to parse data from file +// + +static stbtt_uint8 stbtt__buf_get8(stbtt__buf *b) +{ + if (b->cursor >= b->size) + return 0; + return b->data[b->cursor++]; +} + +static stbtt_uint8 stbtt__buf_peek8(stbtt__buf *b) +{ + if (b->cursor >= b->size) + return 0; + return b->data[b->cursor]; +} + +static void stbtt__buf_seek(stbtt__buf *b, int o) +{ + STBTT_assert(!(o > b->size || o < 0)); + b->cursor = (o > b->size || o < 0) ? b->size : o; +} + +static void stbtt__buf_skip(stbtt__buf *b, int o) +{ + stbtt__buf_seek(b, b->cursor + o); +} + +static stbtt_uint32 stbtt__buf_get(stbtt__buf *b, int n) +{ + stbtt_uint32 v = 0; + int i; + STBTT_assert(n >= 1 && n <= 4); + for (i = 0; i < n; i++) + v = (v << 8) | stbtt__buf_get8(b); + return v; +} + +static stbtt__buf stbtt__new_buf(const void *p, size_t size) +{ + stbtt__buf r; + STBTT_assert(size < 0x40000000); + r.data = (stbtt_uint8*) p; + r.size = (int) size; + r.cursor = 0; + return r; +} + +#define stbtt__buf_get16(b) stbtt__buf_get((b), 2) +#define stbtt__buf_get32(b) stbtt__buf_get((b), 4) + +static stbtt__buf stbtt__buf_range(const stbtt__buf *b, int o, int s) +{ + stbtt__buf r = stbtt__new_buf(NULL, 0); + if (o < 0 || s < 0 || o > b->size || s > b->size - o) return r; + r.data = b->data + o; + r.size = s; + return r; +} + +static stbtt__buf stbtt__cff_get_index(stbtt__buf *b) +{ + int count, start, offsize; + start = b->cursor; + count = stbtt__buf_get16(b); + if (count) { + offsize = stbtt__buf_get8(b); + STBTT_assert(offsize >= 1 && offsize <= 4); + stbtt__buf_skip(b, offsize * count); + stbtt__buf_skip(b, stbtt__buf_get(b, offsize) - 1); + } + return stbtt__buf_range(b, start, b->cursor - start); +} + +static stbtt_uint32 stbtt__cff_int(stbtt__buf *b) +{ + int b0 = stbtt__buf_get8(b); + if (b0 >= 32 && b0 <= 246) return b0 - 139; + else if (b0 >= 247 && b0 <= 250) return (b0 - 247)*256 + stbtt__buf_get8(b) + 108; + else if (b0 >= 251 && b0 <= 254) return -(b0 - 251)*256 - stbtt__buf_get8(b) - 108; + else if (b0 == 28) return stbtt__buf_get16(b); + else if (b0 == 29) return stbtt__buf_get32(b); + STBTT_assert(0); + return 0; +} + +static void stbtt__cff_skip_operand(stbtt__buf *b) { + int v, b0 = stbtt__buf_peek8(b); + STBTT_assert(b0 >= 28); + if (b0 == 30) { + stbtt__buf_skip(b, 1); + while (b->cursor < b->size) { + v = stbtt__buf_get8(b); + if ((v & 0xF) == 0xF || (v >> 4) == 0xF) + break; + } + } else { + stbtt__cff_int(b); + } +} + +static stbtt__buf stbtt__dict_get(stbtt__buf *b, int key) +{ + stbtt__buf_seek(b, 0); + while (b->cursor < b->size) { + int start = b->cursor, end, op; + while (stbtt__buf_peek8(b) >= 28) + stbtt__cff_skip_operand(b); + end = b->cursor; + op = stbtt__buf_get8(b); + if (op == 12) op = stbtt__buf_get8(b) | 0x100; + if (op == key) return stbtt__buf_range(b, start, end-start); + } + return stbtt__buf_range(b, 0, 0); +} + +static void stbtt__dict_get_ints(stbtt__buf *b, int key, int outcount, stbtt_uint32 *out) +{ + int i; + stbtt__buf operands = stbtt__dict_get(b, key); + for (i = 0; i < outcount && operands.cursor < operands.size; i++) + out[i] = stbtt__cff_int(&operands); +} + +static int stbtt__cff_index_count(stbtt__buf *b) +{ + stbtt__buf_seek(b, 0); + return stbtt__buf_get16(b); +} + +static stbtt__buf stbtt__cff_index_get(stbtt__buf b, int i) +{ + int count, offsize, start, end; + stbtt__buf_seek(&b, 0); + count = stbtt__buf_get16(&b); + offsize = stbtt__buf_get8(&b); + STBTT_assert(i >= 0 && i < count); + STBTT_assert(offsize >= 1 && offsize <= 4); + stbtt__buf_skip(&b, i*offsize); + start = stbtt__buf_get(&b, offsize); + end = stbtt__buf_get(&b, offsize); + return stbtt__buf_range(&b, 2+(count+1)*offsize+start, end - start); +} + +////////////////////////////////////////////////////////////////////////// +// +// accessors to parse data from file +// + +// on platforms that don't allow misaligned reads, if we want to allow +// truetype fonts that aren't padded to alignment, define ALLOW_UNALIGNED_TRUETYPE + +#define ttBYTE(p) (* (stbtt_uint8 *) (p)) +#define ttCHAR(p) (* (stbtt_int8 *) (p)) +#define ttFixed(p) ttLONG(p) + +static stbtt_uint16 ttUSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; } +static stbtt_int16 ttSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; } +static stbtt_uint32 ttULONG(stbtt_uint8 *p) { return (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; } +static stbtt_int32 ttLONG(stbtt_uint8 *p) { return (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; } + +#define stbtt_tag4(p,c0,c1,c2,c3) ((p)[0] == (c0) && (p)[1] == (c1) && (p)[2] == (c2) && (p)[3] == (c3)) +#define stbtt_tag(p,str) stbtt_tag4(p,str[0],str[1],str[2],str[3]) + +static int stbtt__isfont(stbtt_uint8 *font) +{ + // check the version number + if (stbtt_tag4(font, '1',0,0,0)) return 1; // TrueType 1 + if (stbtt_tag(font, "typ1")) return 1; // TrueType with type 1 font -- we don't support this! + if (stbtt_tag(font, "OTTO")) return 1; // OpenType with CFF + if (stbtt_tag4(font, 0,1,0,0)) return 1; // OpenType 1.0 + if (stbtt_tag(font, "true")) return 1; // Apple specification for TrueType fonts + return 0; +} + +// @OPTIMIZE: binary search +static stbtt_uint32 stbtt__find_table(stbtt_uint8 *data, stbtt_uint32 fontstart, const char *tag) +{ + stbtt_int32 num_tables = ttUSHORT(data+fontstart+4); + stbtt_uint32 tabledir = fontstart + 12; + stbtt_int32 i; + for (i=0; i < num_tables; ++i) { + stbtt_uint32 loc = tabledir + 16*i; + if (stbtt_tag(data+loc+0, tag)) + return ttULONG(data+loc+8); + } + return 0; +} + +static int stbtt_GetFontOffsetForIndex_internal(unsigned char *font_collection, int index) +{ + // if it's just a font, there's only one valid index + if (stbtt__isfont(font_collection)) + return index == 0 ? 0 : -1; + + // check if it's a TTC + if (stbtt_tag(font_collection, "ttcf")) { + // version 1? + if (ttULONG(font_collection+4) == 0x00010000 || ttULONG(font_collection+4) == 0x00020000) { + stbtt_int32 n = ttLONG(font_collection+8); + if (index >= n) + return -1; + return ttULONG(font_collection+12+index*4); + } + } + return -1; +} + +static int stbtt_GetNumberOfFonts_internal(unsigned char *font_collection) +{ + // if it's just a font, there's only one valid font + if (stbtt__isfont(font_collection)) + return 1; + + // check if it's a TTC + if (stbtt_tag(font_collection, "ttcf")) { + // version 1? + if (ttULONG(font_collection+4) == 0x00010000 || ttULONG(font_collection+4) == 0x00020000) { + return ttLONG(font_collection+8); + } + } + return 0; +} + +static stbtt__buf stbtt__get_subrs(stbtt__buf cff, stbtt__buf fontdict) +{ + stbtt_uint32 subrsoff = 0, private_loc[2] = { 0, 0 }; + stbtt__buf pdict; + stbtt__dict_get_ints(&fontdict, 18, 2, private_loc); + if (!private_loc[1] || !private_loc[0]) return stbtt__new_buf(NULL, 0); + pdict = stbtt__buf_range(&cff, private_loc[1], private_loc[0]); + stbtt__dict_get_ints(&pdict, 19, 1, &subrsoff); + if (!subrsoff) return stbtt__new_buf(NULL, 0); + stbtt__buf_seek(&cff, private_loc[1]+subrsoff); + return stbtt__cff_get_index(&cff); +} + +// since most people won't use this, find this table the first time it's needed +static int stbtt__get_svg(stbtt_fontinfo *info) +{ + stbtt_uint32 t; + if (info->svg < 0) { + t = stbtt__find_table(info->data, info->fontstart, "SVG "); + if (t) { + stbtt_uint32 offset = ttULONG(info->data + t + 2); + info->svg = t + offset; + } else { + info->svg = 0; + } + } + return info->svg; +} + +static int stbtt_InitFont_internal(stbtt_fontinfo *info, unsigned char *data, int fontstart) +{ + stbtt_uint32 cmap, t; + stbtt_int32 i,numTables; + + info->data = data; + info->fontstart = fontstart; + info->cff = stbtt__new_buf(NULL, 0); + + cmap = stbtt__find_table(data, fontstart, "cmap"); // required + info->loca = stbtt__find_table(data, fontstart, "loca"); // required + info->head = stbtt__find_table(data, fontstart, "head"); // required + info->glyf = stbtt__find_table(data, fontstart, "glyf"); // required + info->hhea = stbtt__find_table(data, fontstart, "hhea"); // required + info->hmtx = stbtt__find_table(data, fontstart, "hmtx"); // required + info->kern = stbtt__find_table(data, fontstart, "kern"); // not required + info->gpos = stbtt__find_table(data, fontstart, "GPOS"); // not required + + if (!cmap || !info->head || !info->hhea || !info->hmtx) + return 0; + if (info->glyf) { + // required for truetype + if (!info->loca) return 0; + } else { + // initialization for CFF / Type2 fonts (OTF) + stbtt__buf b, topdict, topdictidx; + stbtt_uint32 cstype = 2, charstrings = 0, fdarrayoff = 0, fdselectoff = 0; + stbtt_uint32 cff; + + cff = stbtt__find_table(data, fontstart, "CFF "); + if (!cff) return 0; + + info->fontdicts = stbtt__new_buf(NULL, 0); + info->fdselect = stbtt__new_buf(NULL, 0); + + // @TODO this should use size from table (not 512MB) + info->cff = stbtt__new_buf(data+cff, 512*1024*1024); + b = info->cff; + + // read the header + stbtt__buf_skip(&b, 2); + stbtt__buf_seek(&b, stbtt__buf_get8(&b)); // hdrsize + + // @TODO the name INDEX could list multiple fonts, + // but we just use the first one. + stbtt__cff_get_index(&b); // name INDEX + topdictidx = stbtt__cff_get_index(&b); + topdict = stbtt__cff_index_get(topdictidx, 0); + stbtt__cff_get_index(&b); // string INDEX + info->gsubrs = stbtt__cff_get_index(&b); + + stbtt__dict_get_ints(&topdict, 17, 1, &charstrings); + stbtt__dict_get_ints(&topdict, 0x100 | 6, 1, &cstype); + stbtt__dict_get_ints(&topdict, 0x100 | 36, 1, &fdarrayoff); + stbtt__dict_get_ints(&topdict, 0x100 | 37, 1, &fdselectoff); + info->subrs = stbtt__get_subrs(b, topdict); + + // we only support Type 2 charstrings + if (cstype != 2) return 0; + if (charstrings == 0) return 0; + + if (fdarrayoff) { + // looks like a CID font + if (!fdselectoff) return 0; + stbtt__buf_seek(&b, fdarrayoff); + info->fontdicts = stbtt__cff_get_index(&b); + info->fdselect = stbtt__buf_range(&b, fdselectoff, b.size-fdselectoff); + } + + stbtt__buf_seek(&b, charstrings); + info->charstrings = stbtt__cff_get_index(&b); + } + + t = stbtt__find_table(data, fontstart, "maxp"); + if (t) + info->numGlyphs = ttUSHORT(data+t+4); + else + info->numGlyphs = 0xffff; + + info->svg = -1; + + // find a cmap encoding table we understand *now* to avoid searching + // later. (todo: could make this installable) + // the same regardless of glyph. + numTables = ttUSHORT(data + cmap + 2); + info->index_map = 0; + for (i=0; i < numTables; ++i) { + stbtt_uint32 encoding_record = cmap + 4 + 8 * i; + // find an encoding we understand: + switch(ttUSHORT(data+encoding_record)) { + case STBTT_PLATFORM_ID_MICROSOFT: + switch (ttUSHORT(data+encoding_record+2)) { + case STBTT_MS_EID_UNICODE_BMP: + case STBTT_MS_EID_UNICODE_FULL: + // MS/Unicode + info->index_map = cmap + ttULONG(data+encoding_record+4); + break; + } + break; + case STBTT_PLATFORM_ID_UNICODE: + // Mac/iOS has these + // all the encodingIDs are unicode, so we don't bother to check it + info->index_map = cmap + ttULONG(data+encoding_record+4); + break; + } + } + if (info->index_map == 0) + return 0; + + info->indexToLocFormat = ttUSHORT(data+info->head + 50); + return 1; +} + +STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codepoint) +{ + stbtt_uint8 *data = info->data; + stbtt_uint32 index_map = info->index_map; + + stbtt_uint16 format = ttUSHORT(data + index_map + 0); + if (format == 0) { // apple byte encoding + stbtt_int32 bytes = ttUSHORT(data + index_map + 2); + if (unicode_codepoint < bytes-6) + return ttBYTE(data + index_map + 6 + unicode_codepoint); + return 0; + } else if (format == 6) { + stbtt_uint32 first = ttUSHORT(data + index_map + 6); + stbtt_uint32 count = ttUSHORT(data + index_map + 8); + if ((stbtt_uint32) unicode_codepoint >= first && (stbtt_uint32) unicode_codepoint < first+count) + return ttUSHORT(data + index_map + 10 + (unicode_codepoint - first)*2); + return 0; + } else if (format == 2) { + STBTT_assert(0); // @TODO: high-byte mapping for japanese/chinese/korean + return 0; + } else if (format == 4) { // standard mapping for windows fonts: binary search collection of ranges + stbtt_uint16 segcount = ttUSHORT(data+index_map+6) >> 1; + stbtt_uint16 searchRange = ttUSHORT(data+index_map+8) >> 1; + stbtt_uint16 entrySelector = ttUSHORT(data+index_map+10); + stbtt_uint16 rangeShift = ttUSHORT(data+index_map+12) >> 1; + + // do a binary search of the segments + stbtt_uint32 endCount = index_map + 14; + stbtt_uint32 search = endCount; + + if (unicode_codepoint > 0xffff) + return 0; + + // they lie from endCount .. endCount + segCount + // but searchRange is the nearest power of two, so... + if (unicode_codepoint >= ttUSHORT(data + search + rangeShift*2)) + search += rangeShift*2; + + // now decrement to bias correctly to find smallest + search -= 2; + while (entrySelector) { + stbtt_uint16 end; + searchRange >>= 1; + end = ttUSHORT(data + search + searchRange*2); + if (unicode_codepoint > end) + search += searchRange*2; + --entrySelector; + } + search += 2; + + { + stbtt_uint16 offset, start, last; + stbtt_uint16 item = (stbtt_uint16) ((search - endCount) >> 1); + + start = ttUSHORT(data + index_map + 14 + segcount*2 + 2 + 2*item); + last = ttUSHORT(data + endCount + 2*item); + if (unicode_codepoint < start || unicode_codepoint > last) + return 0; + + offset = ttUSHORT(data + index_map + 14 + segcount*6 + 2 + 2*item); + if (offset == 0) + return (stbtt_uint16) (unicode_codepoint + ttSHORT(data + index_map + 14 + segcount*4 + 2 + 2*item)); + + return ttUSHORT(data + offset + (unicode_codepoint-start)*2 + index_map + 14 + segcount*6 + 2 + 2*item); + } + } else if (format == 12 || format == 13) { + stbtt_uint32 ngroups = ttULONG(data+index_map+12); + stbtt_int32 low,high; + low = 0; high = (stbtt_int32)ngroups; + // Binary search the right group. + while (low < high) { + stbtt_int32 mid = low + ((high-low) >> 1); // rounds down, so low <= mid < high + stbtt_uint32 start_char = ttULONG(data+index_map+16+mid*12); + stbtt_uint32 end_char = ttULONG(data+index_map+16+mid*12+4); + if ((stbtt_uint32) unicode_codepoint < start_char) + high = mid; + else if ((stbtt_uint32) unicode_codepoint > end_char) + low = mid+1; + else { + stbtt_uint32 start_glyph = ttULONG(data+index_map+16+mid*12+8); + if (format == 12) + return start_glyph + unicode_codepoint-start_char; + else // format == 13 + return start_glyph; + } + } + return 0; // not found + } + // @TODO + STBTT_assert(0); + return 0; +} + +STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int unicode_codepoint, stbtt_vertex **vertices) +{ + return stbtt_GetGlyphShape(info, stbtt_FindGlyphIndex(info, unicode_codepoint), vertices); +} + +static void stbtt_setvertex(stbtt_vertex *v, stbtt_uint8 type, stbtt_int32 x, stbtt_int32 y, stbtt_int32 cx, stbtt_int32 cy) +{ + v->type = type; + v->x = (stbtt_int16) x; + v->y = (stbtt_int16) y; + v->cx = (stbtt_int16) cx; + v->cy = (stbtt_int16) cy; +} + +static int stbtt__GetGlyfOffset(const stbtt_fontinfo *info, int glyph_index) +{ + int g1,g2; + + STBTT_assert(!info->cff.size); + + if (glyph_index >= info->numGlyphs) return -1; // glyph index out of range + if (info->indexToLocFormat >= 2) return -1; // unknown index->glyph map format + + if (info->indexToLocFormat == 0) { + g1 = info->glyf + ttUSHORT(info->data + info->loca + glyph_index * 2) * 2; + g2 = info->glyf + ttUSHORT(info->data + info->loca + glyph_index * 2 + 2) * 2; + } else { + g1 = info->glyf + ttULONG (info->data + info->loca + glyph_index * 4); + g2 = info->glyf + ttULONG (info->data + info->loca + glyph_index * 4 + 4); + } + + return g1==g2 ? -1 : g1; // if length is 0, return -1 +} + +static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1); + +STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1) +{ + if (info->cff.size) { + stbtt__GetGlyphInfoT2(info, glyph_index, x0, y0, x1, y1); + } else { + int g = stbtt__GetGlyfOffset(info, glyph_index); + if (g < 0) return 0; + + if (x0) *x0 = ttSHORT(info->data + g + 2); + if (y0) *y0 = ttSHORT(info->data + g + 4); + if (x1) *x1 = ttSHORT(info->data + g + 6); + if (y1) *y1 = ttSHORT(info->data + g + 8); + } + return 1; +} + +STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int codepoint, int *x0, int *y0, int *x1, int *y1) +{ + return stbtt_GetGlyphBox(info, stbtt_FindGlyphIndex(info,codepoint), x0,y0,x1,y1); +} + +STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_index) +{ + stbtt_int16 numberOfContours; + int g; + if (info->cff.size) + return stbtt__GetGlyphInfoT2(info, glyph_index, NULL, NULL, NULL, NULL) == 0; + g = stbtt__GetGlyfOffset(info, glyph_index); + if (g < 0) return 1; + numberOfContours = ttSHORT(info->data + g); + return numberOfContours == 0; +} + +static int stbtt__close_shape(stbtt_vertex *vertices, int num_vertices, int was_off, int start_off, + stbtt_int32 sx, stbtt_int32 sy, stbtt_int32 scx, stbtt_int32 scy, stbtt_int32 cx, stbtt_int32 cy) +{ + if (start_off) { + if (was_off) + stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, (cx+scx)>>1, (cy+scy)>>1, cx,cy); + stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, sx,sy,scx,scy); + } else { + if (was_off) + stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve,sx,sy,cx,cy); + else + stbtt_setvertex(&vertices[num_vertices++], STBTT_vline,sx,sy,0,0); + } + return num_vertices; +} + +static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices) +{ + stbtt_int16 numberOfContours; + stbtt_uint8 *endPtsOfContours; + stbtt_uint8 *data = info->data; + stbtt_vertex *vertices=0; + int num_vertices=0; + int g = stbtt__GetGlyfOffset(info, glyph_index); + + *pvertices = NULL; + + if (g < 0) return 0; + + numberOfContours = ttSHORT(data + g); + + if (numberOfContours > 0) { + stbtt_uint8 flags=0,flagcount; + stbtt_int32 ins, i,j=0,m,n, next_move, was_off=0, off, start_off=0; + stbtt_int32 x,y,cx,cy,sx,sy, scx,scy; + stbtt_uint8 *points; + endPtsOfContours = (data + g + 10); + ins = ttUSHORT(data + g + 10 + numberOfContours * 2); + points = data + g + 10 + numberOfContours * 2 + 2 + ins; + + n = 1+ttUSHORT(endPtsOfContours + numberOfContours*2-2); + + m = n + 2*numberOfContours; // a loose bound on how many vertices we might need + vertices = (stbtt_vertex *) STBTT_malloc(m * sizeof(vertices[0]), info->userdata); + if (vertices == 0) + return 0; + + next_move = 0; + flagcount=0; + + // in first pass, we load uninterpreted data into the allocated array + // above, shifted to the end of the array so we won't overwrite it when + // we create our final data starting from the front + + off = m - n; // starting offset for uninterpreted data, regardless of how m ends up being calculated + + // first load flags + + for (i=0; i < n; ++i) { + if (flagcount == 0) { + flags = *points++; + if (flags & 8) + flagcount = *points++; + } else + --flagcount; + vertices[off+i].type = flags; + } + + // now load x coordinates + x=0; + for (i=0; i < n; ++i) { + flags = vertices[off+i].type; + if (flags & 2) { + stbtt_int16 dx = *points++; + x += (flags & 16) ? dx : -dx; // ??? + } else { + if (!(flags & 16)) { + x = x + (stbtt_int16) (points[0]*256 + points[1]); + points += 2; + } + } + vertices[off+i].x = (stbtt_int16) x; + } + + // now load y coordinates + y=0; + for (i=0; i < n; ++i) { + flags = vertices[off+i].type; + if (flags & 4) { + stbtt_int16 dy = *points++; + y += (flags & 32) ? dy : -dy; // ??? + } else { + if (!(flags & 32)) { + y = y + (stbtt_int16) (points[0]*256 + points[1]); + points += 2; + } + } + vertices[off+i].y = (stbtt_int16) y; + } + + // now convert them to our format + num_vertices=0; + sx = sy = cx = cy = scx = scy = 0; + for (i=0; i < n; ++i) { + flags = vertices[off+i].type; + x = (stbtt_int16) vertices[off+i].x; + y = (stbtt_int16) vertices[off+i].y; + + if (next_move == i) { + if (i != 0) + num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy); + + // now start the new one + start_off = !(flags & 1); + if (start_off) { + // if we start off with an off-curve point, then when we need to find a point on the curve + // where we can start, and we need to save some state for when we wraparound. + scx = x; + scy = y; + if (!(vertices[off+i+1].type & 1)) { + // next point is also a curve point, so interpolate an on-point curve + sx = (x + (stbtt_int32) vertices[off+i+1].x) >> 1; + sy = (y + (stbtt_int32) vertices[off+i+1].y) >> 1; + } else { + // otherwise just use the next point as our start point + sx = (stbtt_int32) vertices[off+i+1].x; + sy = (stbtt_int32) vertices[off+i+1].y; + ++i; // we're using point i+1 as the starting point, so skip it + } + } else { + sx = x; + sy = y; + } + stbtt_setvertex(&vertices[num_vertices++], STBTT_vmove,sx,sy,0,0); + was_off = 0; + next_move = 1 + ttUSHORT(endPtsOfContours+j*2); + ++j; + } else { + if (!(flags & 1)) { // if it's a curve + if (was_off) // two off-curve control points in a row means interpolate an on-curve midpoint + stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, (cx+x)>>1, (cy+y)>>1, cx, cy); + cx = x; + cy = y; + was_off = 1; + } else { + if (was_off) + stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, x,y, cx, cy); + else + stbtt_setvertex(&vertices[num_vertices++], STBTT_vline, x,y,0,0); + was_off = 0; + } + } + } + num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy); + } else if (numberOfContours < 0) { + // Compound shapes. + int more = 1; + stbtt_uint8 *comp = data + g + 10; + num_vertices = 0; + vertices = 0; + while (more) { + stbtt_uint16 flags, gidx; + int comp_num_verts = 0, i; + stbtt_vertex *comp_verts = 0, *tmp = 0; + float mtx[6] = {1,0,0,1,0,0}, m, n; + + flags = ttSHORT(comp); comp+=2; + gidx = ttSHORT(comp); comp+=2; + + if (flags & 2) { // XY values + if (flags & 1) { // shorts + mtx[4] = ttSHORT(comp); comp+=2; + mtx[5] = ttSHORT(comp); comp+=2; + } else { + mtx[4] = ttCHAR(comp); comp+=1; + mtx[5] = ttCHAR(comp); comp+=1; + } + } + else { + // @TODO handle matching point + STBTT_assert(0); + } + if (flags & (1<<3)) { // WE_HAVE_A_SCALE + mtx[0] = mtx[3] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[1] = mtx[2] = 0; + } else if (flags & (1<<6)) { // WE_HAVE_AN_X_AND_YSCALE + mtx[0] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[1] = mtx[2] = 0; + mtx[3] = ttSHORT(comp)/16384.0f; comp+=2; + } else if (flags & (1<<7)) { // WE_HAVE_A_TWO_BY_TWO + mtx[0] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[1] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[2] = ttSHORT(comp)/16384.0f; comp+=2; + mtx[3] = ttSHORT(comp)/16384.0f; comp+=2; + } + + // Find transformation scales. + m = (float) STBTT_sqrt(mtx[0]*mtx[0] + mtx[1]*mtx[1]); + n = (float) STBTT_sqrt(mtx[2]*mtx[2] + mtx[3]*mtx[3]); + + // Get indexed glyph. + comp_num_verts = stbtt_GetGlyphShape(info, gidx, &comp_verts); + if (comp_num_verts > 0) { + // Transform vertices. + for (i = 0; i < comp_num_verts; ++i) { + stbtt_vertex* v = &comp_verts[i]; + stbtt_vertex_type x,y; + x=v->x; y=v->y; + v->x = (stbtt_vertex_type)(m * (mtx[0]*x + mtx[2]*y + mtx[4])); + v->y = (stbtt_vertex_type)(n * (mtx[1]*x + mtx[3]*y + mtx[5])); + x=v->cx; y=v->cy; + v->cx = (stbtt_vertex_type)(m * (mtx[0]*x + mtx[2]*y + mtx[4])); + v->cy = (stbtt_vertex_type)(n * (mtx[1]*x + mtx[3]*y + mtx[5])); + } + // Append vertices. + tmp = (stbtt_vertex*)STBTT_malloc((num_vertices+comp_num_verts)*sizeof(stbtt_vertex), info->userdata); + if (!tmp) { + if (vertices) STBTT_free(vertices, info->userdata); + if (comp_verts) STBTT_free(comp_verts, info->userdata); + return 0; + } + if (num_vertices > 0 && vertices) STBTT_memcpy(tmp, vertices, num_vertices*sizeof(stbtt_vertex)); + STBTT_memcpy(tmp+num_vertices, comp_verts, comp_num_verts*sizeof(stbtt_vertex)); + if (vertices) STBTT_free(vertices, info->userdata); + vertices = tmp; + STBTT_free(comp_verts, info->userdata); + num_vertices += comp_num_verts; + } + // More components ? + more = flags & (1<<5); + } + } else { + // numberOfCounters == 0, do nothing + } + + *pvertices = vertices; + return num_vertices; +} + +typedef struct +{ + int bounds; + int started; + float first_x, first_y; + float x, y; + stbtt_int32 min_x, max_x, min_y, max_y; + + stbtt_vertex *pvertices; + int num_vertices; +} stbtt__csctx; + +#define STBTT__CSCTX_INIT(bounds) {bounds,0, 0,0, 0,0, 0,0,0,0, NULL, 0} + +static void stbtt__track_vertex(stbtt__csctx *c, stbtt_int32 x, stbtt_int32 y) +{ + if (x > c->max_x || !c->started) c->max_x = x; + if (y > c->max_y || !c->started) c->max_y = y; + if (x < c->min_x || !c->started) c->min_x = x; + if (y < c->min_y || !c->started) c->min_y = y; + c->started = 1; +} + +static void stbtt__csctx_v(stbtt__csctx *c, stbtt_uint8 type, stbtt_int32 x, stbtt_int32 y, stbtt_int32 cx, stbtt_int32 cy, stbtt_int32 cx1, stbtt_int32 cy1) +{ + if (c->bounds) { + stbtt__track_vertex(c, x, y); + if (type == STBTT_vcubic) { + stbtt__track_vertex(c, cx, cy); + stbtt__track_vertex(c, cx1, cy1); + } + } else { + stbtt_setvertex(&c->pvertices[c->num_vertices], type, x, y, cx, cy); + c->pvertices[c->num_vertices].cx1 = (stbtt_int16) cx1; + c->pvertices[c->num_vertices].cy1 = (stbtt_int16) cy1; + } + c->num_vertices++; +} + +static void stbtt__csctx_close_shape(stbtt__csctx *ctx) +{ + if (ctx->first_x != ctx->x || ctx->first_y != ctx->y) + stbtt__csctx_v(ctx, STBTT_vline, (int)ctx->first_x, (int)ctx->first_y, 0, 0, 0, 0); +} + +static void stbtt__csctx_rmove_to(stbtt__csctx *ctx, float dx, float dy) +{ + stbtt__csctx_close_shape(ctx); + ctx->first_x = ctx->x = ctx->x + dx; + ctx->first_y = ctx->y = ctx->y + dy; + stbtt__csctx_v(ctx, STBTT_vmove, (int)ctx->x, (int)ctx->y, 0, 0, 0, 0); +} + +static void stbtt__csctx_rline_to(stbtt__csctx *ctx, float dx, float dy) +{ + ctx->x += dx; + ctx->y += dy; + stbtt__csctx_v(ctx, STBTT_vline, (int)ctx->x, (int)ctx->y, 0, 0, 0, 0); +} + +static void stbtt__csctx_rccurve_to(stbtt__csctx *ctx, float dx1, float dy1, float dx2, float dy2, float dx3, float dy3) +{ + float cx1 = ctx->x + dx1; + float cy1 = ctx->y + dy1; + float cx2 = cx1 + dx2; + float cy2 = cy1 + dy2; + ctx->x = cx2 + dx3; + ctx->y = cy2 + dy3; + stbtt__csctx_v(ctx, STBTT_vcubic, (int)ctx->x, (int)ctx->y, (int)cx1, (int)cy1, (int)cx2, (int)cy2); +} + +static stbtt__buf stbtt__get_subr(stbtt__buf idx, int n) +{ + int count = stbtt__cff_index_count(&idx); + int bias = 107; + if (count >= 33900) + bias = 32768; + else if (count >= 1240) + bias = 1131; + n += bias; + if (n < 0 || n >= count) + return stbtt__new_buf(NULL, 0); + return stbtt__cff_index_get(idx, n); +} + +static stbtt__buf stbtt__cid_get_glyph_subrs(const stbtt_fontinfo *info, int glyph_index) +{ + stbtt__buf fdselect = info->fdselect; + int nranges, start, end, v, fmt, fdselector = -1, i; + + stbtt__buf_seek(&fdselect, 0); + fmt = stbtt__buf_get8(&fdselect); + if (fmt == 0) { + // untested + stbtt__buf_skip(&fdselect, glyph_index); + fdselector = stbtt__buf_get8(&fdselect); + } else if (fmt == 3) { + nranges = stbtt__buf_get16(&fdselect); + start = stbtt__buf_get16(&fdselect); + for (i = 0; i < nranges; i++) { + v = stbtt__buf_get8(&fdselect); + end = stbtt__buf_get16(&fdselect); + if (glyph_index >= start && glyph_index < end) { + fdselector = v; + break; + } + start = end; + } + } + if (fdselector == -1) stbtt__new_buf(NULL, 0); + return stbtt__get_subrs(info->cff, stbtt__cff_index_get(info->fontdicts, fdselector)); +} + +static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_index, stbtt__csctx *c) +{ + int in_header = 1, maskbits = 0, subr_stack_height = 0, sp = 0, v, i, b0; + int has_subrs = 0, clear_stack; + float s[48]; + stbtt__buf subr_stack[10], subrs = info->subrs, b; + float f; + +#define STBTT__CSERR(s) (0) + + // this currently ignores the initial width value, which isn't needed if we have hmtx + b = stbtt__cff_index_get(info->charstrings, glyph_index); + while (b.cursor < b.size) { + i = 0; + clear_stack = 1; + b0 = stbtt__buf_get8(&b); + switch (b0) { + // @TODO implement hinting + case 0x13: // hintmask + case 0x14: // cntrmask + if (in_header) + maskbits += (sp / 2); // implicit "vstem" + in_header = 0; + stbtt__buf_skip(&b, (maskbits + 7) / 8); + break; + + case 0x01: // hstem + case 0x03: // vstem + case 0x12: // hstemhm + case 0x17: // vstemhm + maskbits += (sp / 2); + break; + + case 0x15: // rmoveto + in_header = 0; + if (sp < 2) return STBTT__CSERR("rmoveto stack"); + stbtt__csctx_rmove_to(c, s[sp-2], s[sp-1]); + break; + case 0x04: // vmoveto + in_header = 0; + if (sp < 1) return STBTT__CSERR("vmoveto stack"); + stbtt__csctx_rmove_to(c, 0, s[sp-1]); + break; + case 0x16: // hmoveto + in_header = 0; + if (sp < 1) return STBTT__CSERR("hmoveto stack"); + stbtt__csctx_rmove_to(c, s[sp-1], 0); + break; + + case 0x05: // rlineto + if (sp < 2) return STBTT__CSERR("rlineto stack"); + for (; i + 1 < sp; i += 2) + stbtt__csctx_rline_to(c, s[i], s[i+1]); + break; + + // hlineto/vlineto and vhcurveto/hvcurveto alternate horizontal and vertical + // starting from a different place. + + case 0x07: // vlineto + if (sp < 1) return STBTT__CSERR("vlineto stack"); + goto vlineto; + case 0x06: // hlineto + if (sp < 1) return STBTT__CSERR("hlineto stack"); + for (;;) { + if (i >= sp) break; + stbtt__csctx_rline_to(c, s[i], 0); + i++; + vlineto: + if (i >= sp) break; + stbtt__csctx_rline_to(c, 0, s[i]); + i++; + } + break; + + case 0x1F: // hvcurveto + if (sp < 4) return STBTT__CSERR("hvcurveto stack"); + goto hvcurveto; + case 0x1E: // vhcurveto + if (sp < 4) return STBTT__CSERR("vhcurveto stack"); + for (;;) { + if (i + 3 >= sp) break; + stbtt__csctx_rccurve_to(c, 0, s[i], s[i+1], s[i+2], s[i+3], (sp - i == 5) ? s[i + 4] : 0.0f); + i += 4; + hvcurveto: + if (i + 3 >= sp) break; + stbtt__csctx_rccurve_to(c, s[i], 0, s[i+1], s[i+2], (sp - i == 5) ? s[i+4] : 0.0f, s[i+3]); + i += 4; + } + break; + + case 0x08: // rrcurveto + if (sp < 6) return STBTT__CSERR("rcurveline stack"); + for (; i + 5 < sp; i += 6) + stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]); + break; + + case 0x18: // rcurveline + if (sp < 8) return STBTT__CSERR("rcurveline stack"); + for (; i + 5 < sp - 2; i += 6) + stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]); + if (i + 1 >= sp) return STBTT__CSERR("rcurveline stack"); + stbtt__csctx_rline_to(c, s[i], s[i+1]); + break; + + case 0x19: // rlinecurve + if (sp < 8) return STBTT__CSERR("rlinecurve stack"); + for (; i + 1 < sp - 6; i += 2) + stbtt__csctx_rline_to(c, s[i], s[i+1]); + if (i + 5 >= sp) return STBTT__CSERR("rlinecurve stack"); + stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]); + break; + + case 0x1A: // vvcurveto + case 0x1B: // hhcurveto + if (sp < 4) return STBTT__CSERR("(vv|hh)curveto stack"); + f = 0.0; + if (sp & 1) { f = s[i]; i++; } + for (; i + 3 < sp; i += 4) { + if (b0 == 0x1B) + stbtt__csctx_rccurve_to(c, s[i], f, s[i+1], s[i+2], s[i+3], 0.0); + else + stbtt__csctx_rccurve_to(c, f, s[i], s[i+1], s[i+2], 0.0, s[i+3]); + f = 0.0; + } + break; + + case 0x0A: // callsubr + if (!has_subrs) { + if (info->fdselect.size) + subrs = stbtt__cid_get_glyph_subrs(info, glyph_index); + has_subrs = 1; + } + // FALLTHROUGH + case 0x1D: // callgsubr + if (sp < 1) return STBTT__CSERR("call(g|)subr stack"); + v = (int) s[--sp]; + if (subr_stack_height >= 10) return STBTT__CSERR("recursion limit"); + subr_stack[subr_stack_height++] = b; + b = stbtt__get_subr(b0 == 0x0A ? subrs : info->gsubrs, v); + if (b.size == 0) return STBTT__CSERR("subr not found"); + b.cursor = 0; + clear_stack = 0; + break; + + case 0x0B: // return + if (subr_stack_height <= 0) return STBTT__CSERR("return outside subr"); + b = subr_stack[--subr_stack_height]; + clear_stack = 0; + break; + + case 0x0E: // endchar + stbtt__csctx_close_shape(c); + return 1; + + case 0x0C: { // two-byte escape + float dx1, dx2, dx3, dx4, dx5, dx6, dy1, dy2, dy3, dy4, dy5, dy6; + float dx, dy; + int b1 = stbtt__buf_get8(&b); + switch (b1) { + // @TODO These "flex" implementations ignore the flex-depth and resolution, + // and always draw beziers. + case 0x22: // hflex + if (sp < 7) return STBTT__CSERR("hflex stack"); + dx1 = s[0]; + dx2 = s[1]; + dy2 = s[2]; + dx3 = s[3]; + dx4 = s[4]; + dx5 = s[5]; + dx6 = s[6]; + stbtt__csctx_rccurve_to(c, dx1, 0, dx2, dy2, dx3, 0); + stbtt__csctx_rccurve_to(c, dx4, 0, dx5, -dy2, dx6, 0); + break; + + case 0x23: // flex + if (sp < 13) return STBTT__CSERR("flex stack"); + dx1 = s[0]; + dy1 = s[1]; + dx2 = s[2]; + dy2 = s[3]; + dx3 = s[4]; + dy3 = s[5]; + dx4 = s[6]; + dy4 = s[7]; + dx5 = s[8]; + dy5 = s[9]; + dx6 = s[10]; + dy6 = s[11]; + //fd is s[12] + stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, dy3); + stbtt__csctx_rccurve_to(c, dx4, dy4, dx5, dy5, dx6, dy6); + break; + + case 0x24: // hflex1 + if (sp < 9) return STBTT__CSERR("hflex1 stack"); + dx1 = s[0]; + dy1 = s[1]; + dx2 = s[2]; + dy2 = s[3]; + dx3 = s[4]; + dx4 = s[5]; + dx5 = s[6]; + dy5 = s[7]; + dx6 = s[8]; + stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, 0); + stbtt__csctx_rccurve_to(c, dx4, 0, dx5, dy5, dx6, -(dy1+dy2+dy5)); + break; + + case 0x25: // flex1 + if (sp < 11) return STBTT__CSERR("flex1 stack"); + dx1 = s[0]; + dy1 = s[1]; + dx2 = s[2]; + dy2 = s[3]; + dx3 = s[4]; + dy3 = s[5]; + dx4 = s[6]; + dy4 = s[7]; + dx5 = s[8]; + dy5 = s[9]; + dx6 = dy6 = s[10]; + dx = dx1+dx2+dx3+dx4+dx5; + dy = dy1+dy2+dy3+dy4+dy5; + if (STBTT_fabs(dx) > STBTT_fabs(dy)) + dy6 = -dy; + else + dx6 = -dx; + stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, dy3); + stbtt__csctx_rccurve_to(c, dx4, dy4, dx5, dy5, dx6, dy6); + break; + + default: + return STBTT__CSERR("unimplemented"); + } + } break; + + default: + if (b0 != 255 && b0 != 28 && b0 < 32) + return STBTT__CSERR("reserved operator"); + + // push immediate + if (b0 == 255) { + f = (float)(stbtt_int32)stbtt__buf_get32(&b) / 0x10000; + } else { + stbtt__buf_skip(&b, -1); + f = (float)(stbtt_int16)stbtt__cff_int(&b); + } + if (sp >= 48) return STBTT__CSERR("push stack overflow"); + s[sp++] = f; + clear_stack = 0; + break; + } + if (clear_stack) sp = 0; + } + return STBTT__CSERR("no endchar"); + +#undef STBTT__CSERR +} + +static int stbtt__GetGlyphShapeT2(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices) +{ + // runs the charstring twice, once to count and once to output (to avoid realloc) + stbtt__csctx count_ctx = STBTT__CSCTX_INIT(1); + stbtt__csctx output_ctx = STBTT__CSCTX_INIT(0); + if (stbtt__run_charstring(info, glyph_index, &count_ctx)) { + *pvertices = (stbtt_vertex*)STBTT_malloc(count_ctx.num_vertices*sizeof(stbtt_vertex), info->userdata); + output_ctx.pvertices = *pvertices; + if (stbtt__run_charstring(info, glyph_index, &output_ctx)) { + STBTT_assert(output_ctx.num_vertices == count_ctx.num_vertices); + return output_ctx.num_vertices; + } + } + *pvertices = NULL; + return 0; +} + +static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1) +{ + stbtt__csctx c = STBTT__CSCTX_INIT(1); + int r = stbtt__run_charstring(info, glyph_index, &c); + if (x0) *x0 = r ? c.min_x : 0; + if (y0) *y0 = r ? c.min_y : 0; + if (x1) *x1 = r ? c.max_x : 0; + if (y1) *y1 = r ? c.max_y : 0; + return r ? c.num_vertices : 0; +} + +STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices) +{ + if (!info->cff.size) + return stbtt__GetGlyphShapeTT(info, glyph_index, pvertices); + else + return stbtt__GetGlyphShapeT2(info, glyph_index, pvertices); +} + +STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int glyph_index, int *advanceWidth, int *leftSideBearing) +{ + stbtt_uint16 numOfLongHorMetrics = ttUSHORT(info->data+info->hhea + 34); + if (glyph_index < numOfLongHorMetrics) { + if (advanceWidth) *advanceWidth = ttSHORT(info->data + info->hmtx + 4*glyph_index); + if (leftSideBearing) *leftSideBearing = ttSHORT(info->data + info->hmtx + 4*glyph_index + 2); + } else { + if (advanceWidth) *advanceWidth = ttSHORT(info->data + info->hmtx + 4*(numOfLongHorMetrics-1)); + if (leftSideBearing) *leftSideBearing = ttSHORT(info->data + info->hmtx + 4*numOfLongHorMetrics + 2*(glyph_index - numOfLongHorMetrics)); + } +} + +STBTT_DEF int stbtt_GetKerningTableLength(const stbtt_fontinfo *info) +{ + stbtt_uint8 *data = info->data + info->kern; + + // we only look at the first table. it must be 'horizontal' and format 0. + if (!info->kern) + return 0; + if (ttUSHORT(data+2) < 1) // number of tables, need at least 1 + return 0; + if (ttUSHORT(data+8) != 1) // horizontal flag must be set in format + return 0; + + return ttUSHORT(data+10); +} + +STBTT_DEF int stbtt_GetKerningTable(const stbtt_fontinfo *info, stbtt_kerningentry* table, int table_length) +{ + stbtt_uint8 *data = info->data + info->kern; + int k, length; + + // we only look at the first table. it must be 'horizontal' and format 0. + if (!info->kern) + return 0; + if (ttUSHORT(data+2) < 1) // number of tables, need at least 1 + return 0; + if (ttUSHORT(data+8) != 1) // horizontal flag must be set in format + return 0; + + length = ttUSHORT(data+10); + if (table_length < length) + length = table_length; + + for (k = 0; k < length; k++) + { + table[k].glyph1 = ttUSHORT(data+18+(k*6)); + table[k].glyph2 = ttUSHORT(data+20+(k*6)); + table[k].advance = ttSHORT(data+22+(k*6)); + } + + return length; +} + +static int stbtt__GetGlyphKernInfoAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2) +{ + stbtt_uint8 *data = info->data + info->kern; + stbtt_uint32 needle, straw; + int l, r, m; + + // we only look at the first table. it must be 'horizontal' and format 0. + if (!info->kern) + return 0; + if (ttUSHORT(data+2) < 1) // number of tables, need at least 1 + return 0; + if (ttUSHORT(data+8) != 1) // horizontal flag must be set in format + return 0; + + l = 0; + r = ttUSHORT(data+10) - 1; + needle = glyph1 << 16 | glyph2; + while (l <= r) { + m = (l + r) >> 1; + straw = ttULONG(data+18+(m*6)); // note: unaligned read + if (needle < straw) + r = m - 1; + else if (needle > straw) + l = m + 1; + else + return ttSHORT(data+22+(m*6)); + } + return 0; +} + +static stbtt_int32 stbtt__GetCoverageIndex(stbtt_uint8 *coverageTable, int glyph) +{ + stbtt_uint16 coverageFormat = ttUSHORT(coverageTable); + switch (coverageFormat) { + case 1: { + stbtt_uint16 glyphCount = ttUSHORT(coverageTable + 2); + + // Binary search. + stbtt_int32 l=0, r=glyphCount-1, m; + int straw, needle=glyph; + while (l <= r) { + stbtt_uint8 *glyphArray = coverageTable + 4; + stbtt_uint16 glyphID; + m = (l + r) >> 1; + glyphID = ttUSHORT(glyphArray + 2 * m); + straw = glyphID; + if (needle < straw) + r = m - 1; + else if (needle > straw) + l = m + 1; + else { + return m; + } + } + break; + } + + case 2: { + stbtt_uint16 rangeCount = ttUSHORT(coverageTable + 2); + stbtt_uint8 *rangeArray = coverageTable + 4; + + // Binary search. + stbtt_int32 l=0, r=rangeCount-1, m; + int strawStart, strawEnd, needle=glyph; + while (l <= r) { + stbtt_uint8 *rangeRecord; + m = (l + r) >> 1; + rangeRecord = rangeArray + 6 * m; + strawStart = ttUSHORT(rangeRecord); + strawEnd = ttUSHORT(rangeRecord + 2); + if (needle < strawStart) + r = m - 1; + else if (needle > strawEnd) + l = m + 1; + else { + stbtt_uint16 startCoverageIndex = ttUSHORT(rangeRecord + 4); + return startCoverageIndex + glyph - strawStart; + } + } + break; + } + + default: return -1; // unsupported + } + + return -1; +} + +static stbtt_int32 stbtt__GetGlyphClass(stbtt_uint8 *classDefTable, int glyph) +{ + stbtt_uint16 classDefFormat = ttUSHORT(classDefTable); + switch (classDefFormat) + { + case 1: { + stbtt_uint16 startGlyphID = ttUSHORT(classDefTable + 2); + stbtt_uint16 glyphCount = ttUSHORT(classDefTable + 4); + stbtt_uint8 *classDef1ValueArray = classDefTable + 6; + + if (glyph >= startGlyphID && glyph < startGlyphID + glyphCount) + return (stbtt_int32)ttUSHORT(classDef1ValueArray + 2 * (glyph - startGlyphID)); + break; + } + + case 2: { + stbtt_uint16 classRangeCount = ttUSHORT(classDefTable + 2); + stbtt_uint8 *classRangeRecords = classDefTable + 4; + + // Binary search. + stbtt_int32 l=0, r=classRangeCount-1, m; + int strawStart, strawEnd, needle=glyph; + while (l <= r) { + stbtt_uint8 *classRangeRecord; + m = (l + r) >> 1; + classRangeRecord = classRangeRecords + 6 * m; + strawStart = ttUSHORT(classRangeRecord); + strawEnd = ttUSHORT(classRangeRecord + 2); + if (needle < strawStart) + r = m - 1; + else if (needle > strawEnd) + l = m + 1; + else + return (stbtt_int32)ttUSHORT(classRangeRecord + 4); + } + break; + } + + default: + return -1; // Unsupported definition type, return an error. + } + + // "All glyphs not assigned to a class fall into class 0". (OpenType spec) + return 0; +} + +// Define to STBTT_assert(x) if you want to break on unimplemented formats. +#define STBTT_GPOS_TODO_assert(x) + +static stbtt_int32 stbtt__GetGlyphGPOSInfoAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2) +{ + stbtt_uint16 lookupListOffset; + stbtt_uint8 *lookupList; + stbtt_uint16 lookupCount; + stbtt_uint8 *data; + stbtt_int32 i, sti; + + if (!info->gpos) return 0; + + data = info->data + info->gpos; + + if (ttUSHORT(data+0) != 1) return 0; // Major version 1 + if (ttUSHORT(data+2) != 0) return 0; // Minor version 0 + + lookupListOffset = ttUSHORT(data+8); + lookupList = data + lookupListOffset; + lookupCount = ttUSHORT(lookupList); + + for (i=0; i= pairSetCount) return 0; + + needle=glyph2; + r=pairValueCount-1; + l=0; + + // Binary search. + while (l <= r) { + stbtt_uint16 secondGlyph; + stbtt_uint8 *pairValue; + m = (l + r) >> 1; + pairValue = pairValueArray + (2 + valueRecordPairSizeInBytes) * m; + secondGlyph = ttUSHORT(pairValue); + straw = secondGlyph; + if (needle < straw) + r = m - 1; + else if (needle > straw) + l = m + 1; + else { + stbtt_int16 xAdvance = ttSHORT(pairValue + 2); + return xAdvance; + } + } + } else + return 0; + break; + } + + case 2: { + stbtt_uint16 valueFormat1 = ttUSHORT(table + 4); + stbtt_uint16 valueFormat2 = ttUSHORT(table + 6); + if (valueFormat1 == 4 && valueFormat2 == 0) { // Support more formats? + stbtt_uint16 classDef1Offset = ttUSHORT(table + 8); + stbtt_uint16 classDef2Offset = ttUSHORT(table + 10); + int glyph1class = stbtt__GetGlyphClass(table + classDef1Offset, glyph1); + int glyph2class = stbtt__GetGlyphClass(table + classDef2Offset, glyph2); + + stbtt_uint16 class1Count = ttUSHORT(table + 12); + stbtt_uint16 class2Count = ttUSHORT(table + 14); + stbtt_uint8 *class1Records, *class2Records; + stbtt_int16 xAdvance; + + if (glyph1class < 0 || glyph1class >= class1Count) return 0; // malformed + if (glyph2class < 0 || glyph2class >= class2Count) return 0; // malformed + + class1Records = table + 16; + class2Records = class1Records + 2 * (glyph1class * class2Count); + xAdvance = ttSHORT(class2Records + 2 * glyph2class); + return xAdvance; + } else + return 0; + break; + } + + default: + return 0; // Unsupported position format + } + } + } + + return 0; +} + +STBTT_DEF int stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int g1, int g2) +{ + int xAdvance = 0; + + if (info->gpos) + xAdvance += stbtt__GetGlyphGPOSInfoAdvance(info, g1, g2); + else if (info->kern) + xAdvance += stbtt__GetGlyphKernInfoAdvance(info, g1, g2); + + return xAdvance; +} + +STBTT_DEF int stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info, int ch1, int ch2) +{ + if (!info->kern && !info->gpos) // if no kerning table, don't waste time looking up both codepoint->glyphs + return 0; + return stbtt_GetGlyphKernAdvance(info, stbtt_FindGlyphIndex(info,ch1), stbtt_FindGlyphIndex(info,ch2)); +} + +STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, int codepoint, int *advanceWidth, int *leftSideBearing) +{ + stbtt_GetGlyphHMetrics(info, stbtt_FindGlyphIndex(info,codepoint), advanceWidth, leftSideBearing); +} + +STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *ascent, int *descent, int *lineGap) +{ + if (ascent ) *ascent = ttSHORT(info->data+info->hhea + 4); + if (descent) *descent = ttSHORT(info->data+info->hhea + 6); + if (lineGap) *lineGap = ttSHORT(info->data+info->hhea + 8); +} + +STBTT_DEF int stbtt_GetFontVMetricsOS2(const stbtt_fontinfo *info, int *typoAscent, int *typoDescent, int *typoLineGap) +{ + int tab = stbtt__find_table(info->data, info->fontstart, "OS/2"); + if (!tab) + return 0; + if (typoAscent ) *typoAscent = ttSHORT(info->data+tab + 68); + if (typoDescent) *typoDescent = ttSHORT(info->data+tab + 70); + if (typoLineGap) *typoLineGap = ttSHORT(info->data+tab + 72); + return 1; +} + +STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int *x0, int *y0, int *x1, int *y1) +{ + *x0 = ttSHORT(info->data + info->head + 36); + *y0 = ttSHORT(info->data + info->head + 38); + *x1 = ttSHORT(info->data + info->head + 40); + *y1 = ttSHORT(info->data + info->head + 42); +} + +STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, float height) +{ + int fheight = ttSHORT(info->data + info->hhea + 4) - ttSHORT(info->data + info->hhea + 6); + return (float) height / fheight; +} + +STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *info, float pixels) +{ + int unitsPerEm = ttUSHORT(info->data + info->head + 18); + return pixels / unitsPerEm; +} + +STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *v) +{ + STBTT_free(v, info->userdata); +} + +STBTT_DEF stbtt_uint8 *stbtt_FindSVGDoc(const stbtt_fontinfo *info, int gl) +{ + int i; + stbtt_uint8 *data = info->data; + stbtt_uint8 *svg_doc_list = data + stbtt__get_svg((stbtt_fontinfo *) info); + + int numEntries = ttUSHORT(svg_doc_list); + stbtt_uint8 *svg_docs = svg_doc_list + 2; + + for(i=0; i= ttUSHORT(svg_doc)) && (gl <= ttUSHORT(svg_doc + 2))) + return svg_doc; + } + return 0; +} + +STBTT_DEF int stbtt_GetGlyphSVG(const stbtt_fontinfo *info, int gl, const char **svg) +{ + stbtt_uint8 *data = info->data; + stbtt_uint8 *svg_doc; + + if (info->svg == 0) + return 0; + + svg_doc = stbtt_FindSVGDoc(info, gl); + if (svg_doc != NULL) { + *svg = (char *) data + info->svg + ttULONG(svg_doc + 4); + return ttULONG(svg_doc + 8); + } else { + return 0; + } +} + +STBTT_DEF int stbtt_GetCodepointSVG(const stbtt_fontinfo *info, int unicode_codepoint, const char **svg) +{ + return stbtt_GetGlyphSVG(info, stbtt_FindGlyphIndex(info, unicode_codepoint), svg); +} + +////////////////////////////////////////////////////////////////////////////// +// +// antialiasing software rasterizer +// + +STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y,float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1) +{ + int x0=0,y0=0,x1,y1; // =0 suppresses compiler warning + if (!stbtt_GetGlyphBox(font, glyph, &x0,&y0,&x1,&y1)) { + // e.g. space character + if (ix0) *ix0 = 0; + if (iy0) *iy0 = 0; + if (ix1) *ix1 = 0; + if (iy1) *iy1 = 0; + } else { + // move to integral bboxes (treating pixels as little squares, what pixels get touched)? + if (ix0) *ix0 = STBTT_ifloor( x0 * scale_x + shift_x); + if (iy0) *iy0 = STBTT_ifloor(-y1 * scale_y + shift_y); + if (ix1) *ix1 = STBTT_iceil ( x1 * scale_x + shift_x); + if (iy1) *iy1 = STBTT_iceil (-y0 * scale_y + shift_y); + } +} + +STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1) +{ + stbtt_GetGlyphBitmapBoxSubpixel(font, glyph, scale_x, scale_y,0.0f,0.0f, ix0, iy0, ix1, iy1); +} + +STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1) +{ + stbtt_GetGlyphBitmapBoxSubpixel(font, stbtt_FindGlyphIndex(font,codepoint), scale_x, scale_y,shift_x,shift_y, ix0,iy0,ix1,iy1); +} + +STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1) +{ + stbtt_GetCodepointBitmapBoxSubpixel(font, codepoint, scale_x, scale_y,0.0f,0.0f, ix0,iy0,ix1,iy1); +} + +////////////////////////////////////////////////////////////////////////////// +// +// Rasterizer + +typedef struct stbtt__hheap_chunk +{ + struct stbtt__hheap_chunk *next; +} stbtt__hheap_chunk; + +typedef struct stbtt__hheap +{ + struct stbtt__hheap_chunk *head; + void *first_free; + int num_remaining_in_head_chunk; +} stbtt__hheap; + +static void *stbtt__hheap_alloc(stbtt__hheap *hh, size_t size, void *userdata) +{ + if (hh->first_free) { + void *p = hh->first_free; + hh->first_free = * (void **) p; + return p; + } else { + if (hh->num_remaining_in_head_chunk == 0) { + int count = (size < 32 ? 2000 : size < 128 ? 800 : 100); + stbtt__hheap_chunk *c = (stbtt__hheap_chunk *) STBTT_malloc(sizeof(stbtt__hheap_chunk) + size * count, userdata); + if (c == NULL) + return NULL; + c->next = hh->head; + hh->head = c; + hh->num_remaining_in_head_chunk = count; + } + --hh->num_remaining_in_head_chunk; + return (char *) (hh->head) + sizeof(stbtt__hheap_chunk) + size * hh->num_remaining_in_head_chunk; + } +} + +static void stbtt__hheap_free(stbtt__hheap *hh, void *p) +{ + *(void **) p = hh->first_free; + hh->first_free = p; +} + +static void stbtt__hheap_cleanup(stbtt__hheap *hh, void *userdata) +{ + stbtt__hheap_chunk *c = hh->head; + while (c) { + stbtt__hheap_chunk *n = c->next; + STBTT_free(c, userdata); + c = n; + } +} + +typedef struct stbtt__edge { + float x0,y0, x1,y1; + int invert; +} stbtt__edge; + + +typedef struct stbtt__active_edge +{ + struct stbtt__active_edge *next; + #if STBTT_RASTERIZER_VERSION==1 + int x,dx; + float ey; + int direction; + #elif STBTT_RASTERIZER_VERSION==2 + float fx,fdx,fdy; + float direction; + float sy; + float ey; + #else + #error "Unrecognized value of STBTT_RASTERIZER_VERSION" + #endif +} stbtt__active_edge; + +#if STBTT_RASTERIZER_VERSION == 1 +#define STBTT_FIXSHIFT 10 +#define STBTT_FIX (1 << STBTT_FIXSHIFT) +#define STBTT_FIXMASK (STBTT_FIX-1) + +static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, int off_x, float start_point, void *userdata) +{ + stbtt__active_edge *z = (stbtt__active_edge *) stbtt__hheap_alloc(hh, sizeof(*z), userdata); + float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0); + STBTT_assert(z != NULL); + if (!z) return z; + + // round dx down to avoid overshooting + if (dxdy < 0) + z->dx = -STBTT_ifloor(STBTT_FIX * -dxdy); + else + z->dx = STBTT_ifloor(STBTT_FIX * dxdy); + + z->x = STBTT_ifloor(STBTT_FIX * e->x0 + z->dx * (start_point - e->y0)); // use z->dx so when we offset later it's by the same amount + z->x -= off_x * STBTT_FIX; + + z->ey = e->y1; + z->next = 0; + z->direction = e->invert ? 1 : -1; + return z; +} +#elif STBTT_RASTERIZER_VERSION == 2 +static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, int off_x, float start_point, void *userdata) +{ + stbtt__active_edge *z = (stbtt__active_edge *) stbtt__hheap_alloc(hh, sizeof(*z), userdata); + float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0); + STBTT_assert(z != NULL); + //STBTT_assert(e->y0 <= start_point); + if (!z) return z; + z->fdx = dxdy; + z->fdy = dxdy != 0.0f ? (1.0f/dxdy) : 0.0f; + z->fx = e->x0 + dxdy * (start_point - e->y0); + z->fx -= off_x; + z->direction = e->invert ? 1.0f : -1.0f; + z->sy = e->y0; + z->ey = e->y1; + z->next = 0; + return z; +} +#else +#error "Unrecognized value of STBTT_RASTERIZER_VERSION" +#endif + +#if STBTT_RASTERIZER_VERSION == 1 +// note: this routine clips fills that extend off the edges... ideally this +// wouldn't happen, but it could happen if the truetype glyph bounding boxes +// are wrong, or if the user supplies a too-small bitmap +static void stbtt__fill_active_edges(unsigned char *scanline, int len, stbtt__active_edge *e, int max_weight) +{ + // non-zero winding fill + int x0=0, w=0; + + while (e) { + if (w == 0) { + // if we're currently at zero, we need to record the edge start point + x0 = e->x; w += e->direction; + } else { + int x1 = e->x; w += e->direction; + // if we went to zero, we need to draw + if (w == 0) { + int i = x0 >> STBTT_FIXSHIFT; + int j = x1 >> STBTT_FIXSHIFT; + + if (i < len && j >= 0) { + if (i == j) { + // x0,x1 are the same pixel, so compute combined coverage + scanline[i] = scanline[i] + (stbtt_uint8) ((x1 - x0) * max_weight >> STBTT_FIXSHIFT); + } else { + if (i >= 0) // add antialiasing for x0 + scanline[i] = scanline[i] + (stbtt_uint8) (((STBTT_FIX - (x0 & STBTT_FIXMASK)) * max_weight) >> STBTT_FIXSHIFT); + else + i = -1; // clip + + if (j < len) // add antialiasing for x1 + scanline[j] = scanline[j] + (stbtt_uint8) (((x1 & STBTT_FIXMASK) * max_weight) >> STBTT_FIXSHIFT); + else + j = len; // clip + + for (++i; i < j; ++i) // fill pixels between x0 and x1 + scanline[i] = scanline[i] + (stbtt_uint8) max_weight; + } + } + } + } + + e = e->next; + } +} + +static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, int n, int vsubsample, int off_x, int off_y, void *userdata) +{ + stbtt__hheap hh = { 0, 0, 0 }; + stbtt__active_edge *active = NULL; + int y,j=0; + int max_weight = (255 / vsubsample); // weight per vertical scanline + int s; // vertical subsample index + unsigned char scanline_data[512], *scanline; + + if (result->w > 512) + scanline = (unsigned char *) STBTT_malloc(result->w, userdata); + else + scanline = scanline_data; + + y = off_y * vsubsample; + e[n].y0 = (off_y + result->h) * (float) vsubsample + 1; + + while (j < result->h) { + STBTT_memset(scanline, 0, result->w); + for (s=0; s < vsubsample; ++s) { + // find center of pixel for this scanline + float scan_y = y + 0.5f; + stbtt__active_edge **step = &active; + + // update all active edges; + // remove all active edges that terminate before the center of this scanline + while (*step) { + stbtt__active_edge * z = *step; + if (z->ey <= scan_y) { + *step = z->next; // delete from list + STBTT_assert(z->direction); + z->direction = 0; + stbtt__hheap_free(&hh, z); + } else { + z->x += z->dx; // advance to position for current scanline + step = &((*step)->next); // advance through list + } + } + + // resort the list if needed + for(;;) { + int changed=0; + step = &active; + while (*step && (*step)->next) { + if ((*step)->x > (*step)->next->x) { + stbtt__active_edge *t = *step; + stbtt__active_edge *q = t->next; + + t->next = q->next; + q->next = t; + *step = q; + changed = 1; + } + step = &(*step)->next; + } + if (!changed) break; + } + + // insert all edges that start before the center of this scanline -- omit ones that also end on this scanline + while (e->y0 <= scan_y) { + if (e->y1 > scan_y) { + stbtt__active_edge *z = stbtt__new_active(&hh, e, off_x, scan_y, userdata); + if (z != NULL) { + // find insertion point + if (active == NULL) + active = z; + else if (z->x < active->x) { + // insert at front + z->next = active; + active = z; + } else { + // find thing to insert AFTER + stbtt__active_edge *p = active; + while (p->next && p->next->x < z->x) + p = p->next; + // at this point, p->next->x is NOT < z->x + z->next = p->next; + p->next = z; + } + } + } + ++e; + } + + // now process all active edges in XOR fashion + if (active) + stbtt__fill_active_edges(scanline, result->w, active, max_weight); + + ++y; + } + STBTT_memcpy(result->pixels + j * result->stride, scanline, result->w); + ++j; + } + + stbtt__hheap_cleanup(&hh, userdata); + + if (scanline != scanline_data) + STBTT_free(scanline, userdata); +} + +#elif STBTT_RASTERIZER_VERSION == 2 + +// the edge passed in here does not cross the vertical line at x or the vertical line at x+1 +// (i.e. it has already been clipped to those) +static void stbtt__handle_clipped_edge(float *scanline, int x, stbtt__active_edge *e, float x0, float y0, float x1, float y1) +{ + if (y0 == y1) return; + STBTT_assert(y0 < y1); + STBTT_assert(e->sy <= e->ey); + if (y0 > e->ey) return; + if (y1 < e->sy) return; + if (y0 < e->sy) { + x0 += (x1-x0) * (e->sy - y0) / (y1-y0); + y0 = e->sy; + } + if (y1 > e->ey) { + x1 += (x1-x0) * (e->ey - y1) / (y1-y0); + y1 = e->ey; + } + + if (x0 == x) + STBTT_assert(x1 <= x+1); + else if (x0 == x+1) + STBTT_assert(x1 >= x); + else if (x0 <= x) + STBTT_assert(x1 <= x); + else if (x0 >= x+1) + STBTT_assert(x1 >= x+1); + else + STBTT_assert(x1 >= x && x1 <= x+1); + + if (x0 <= x && x1 <= x) + scanline[x] += e->direction * (y1-y0); + else if (x0 >= x+1 && x1 >= x+1) + ; + else { + STBTT_assert(x0 >= x && x0 <= x+1 && x1 >= x && x1 <= x+1); + scanline[x] += e->direction * (y1-y0) * (1-((x0-x)+(x1-x))/2); // coverage = 1 - average x position + } +} + +static float stbtt__sized_trapezoid_area(float height, float top_width, float bottom_width) +{ + STBTT_assert(top_width >= 0); + STBTT_assert(bottom_width >= 0); + return (top_width + bottom_width) / 2.0f * height; +} + +static float stbtt__position_trapezoid_area(float height, float tx0, float tx1, float bx0, float bx1) +{ + return stbtt__sized_trapezoid_area(height, tx1 - tx0, bx1 - bx0); +} + +static float stbtt__sized_triangle_area(float height, float width) +{ + return height * width / 2; +} + +static void stbtt__fill_active_edges_new(float *scanline, float *scanline_fill, int len, stbtt__active_edge *e, float y_top) +{ + float y_bottom = y_top+1; + + while (e) { + // brute force every pixel + + // compute intersection points with top & bottom + STBTT_assert(e->ey >= y_top); + + if (e->fdx == 0) { + float x0 = e->fx; + if (x0 < len) { + if (x0 >= 0) { + stbtt__handle_clipped_edge(scanline,(int) x0,e, x0,y_top, x0,y_bottom); + stbtt__handle_clipped_edge(scanline_fill-1,(int) x0+1,e, x0,y_top, x0,y_bottom); + } else { + stbtt__handle_clipped_edge(scanline_fill-1,0,e, x0,y_top, x0,y_bottom); + } + } + } else { + float x0 = e->fx; + float dx = e->fdx; + float xb = x0 + dx; + float x_top, x_bottom; + float sy0,sy1; + float dy = e->fdy; + STBTT_assert(e->sy <= y_bottom && e->ey >= y_top); + + // compute endpoints of line segment clipped to this scanline (if the + // line segment starts on this scanline. x0 is the intersection of the + // line with y_top, but that may be off the line segment. + if (e->sy > y_top) { + x_top = x0 + dx * (e->sy - y_top); + sy0 = e->sy; + } else { + x_top = x0; + sy0 = y_top; + } + if (e->ey < y_bottom) { + x_bottom = x0 + dx * (e->ey - y_top); + sy1 = e->ey; + } else { + x_bottom = xb; + sy1 = y_bottom; + } + + if (x_top >= 0 && x_bottom >= 0 && x_top < len && x_bottom < len) { + // from here on, we don't have to range check x values + + if ((int) x_top == (int) x_bottom) { + float height; + // simple case, only spans one pixel + int x = (int) x_top; + height = (sy1 - sy0) * e->direction; + STBTT_assert(x >= 0 && x < len); + scanline[x] += stbtt__position_trapezoid_area(height, x_top, x+1.0f, x_bottom, x+1.0f); + scanline_fill[x] += height; // everything right of this pixel is filled + } else { + int x,x1,x2; + float y_crossing, y_final, step, sign, area; + // covers 2+ pixels + if (x_top > x_bottom) { + // flip scanline vertically; signed area is the same + float t; + sy0 = y_bottom - (sy0 - y_top); + sy1 = y_bottom - (sy1 - y_top); + t = sy0, sy0 = sy1, sy1 = t; + t = x_bottom, x_bottom = x_top, x_top = t; + dx = -dx; + dy = -dy; + t = x0, x0 = xb, xb = t; + } + STBTT_assert(dy >= 0); + STBTT_assert(dx >= 0); + + x1 = (int) x_top; + x2 = (int) x_bottom; + // compute intersection with y axis at x1+1 + y_crossing = y_top + dy * (x1+1 - x0); + + // compute intersection with y axis at x2 + y_final = y_top + dy * (x2 - x0); + + // x1 x_top x2 x_bottom + // y_top +------|-----+------------+------------+--------|---+------------+ + // | | | | | | + // | | | | | | + // sy0 | Txxxxx|............|............|............|............| + // y_crossing | *xxxxx.......|............|............|............| + // | | xxxxx..|............|............|............| + // | | /- xx*xxxx........|............|............| + // | | dy < | xxxxxx..|............|............| + // y_final | | \- | xx*xxx.........|............| + // sy1 | | | | xxxxxB...|............| + // | | | | | | + // | | | | | | + // y_bottom +------------+------------+------------+------------+------------+ + // + // goal is to measure the area covered by '.' in each pixel + + // if x2 is right at the right edge of x1, y_crossing can blow up, github #1057 + // @TODO: maybe test against sy1 rather than y_bottom? + if (y_crossing > y_bottom) + y_crossing = y_bottom; + + sign = e->direction; + + // area of the rectangle covered from sy0..y_crossing + area = sign * (y_crossing-sy0); + + // area of the triangle (x_top,sy0), (x1+1,sy0), (x1+1,y_crossing) + scanline[x1] += stbtt__sized_triangle_area(area, x1+1 - x_top); + + // check if final y_crossing is blown up; no test case for this + if (y_final > y_bottom) { + y_final = y_bottom; + dy = (y_final - y_crossing ) / (x2 - (x1+1)); // if denom=0, y_final = y_crossing, so y_final <= y_bottom + } + + // in second pixel, area covered by line segment found in first pixel + // is always a rectangle 1 wide * the height of that line segment; this + // is exactly what the variable 'area' stores. it also gets a contribution + // from the line segment within it. the THIRD pixel will get the first + // pixel's rectangle contribution, the second pixel's rectangle contribution, + // and its own contribution. the 'own contribution' is the same in every pixel except + // the leftmost and rightmost, a trapezoid that slides down in each pixel. + // the second pixel's contribution to the third pixel will be the + // rectangle 1 wide times the height change in the second pixel, which is dy. + + step = sign * dy * 1; // dy is dy/dx, change in y for every 1 change in x, + // which multiplied by 1-pixel-width is how much pixel area changes for each step in x + // so the area advances by 'step' every time + + for (x = x1+1; x < x2; ++x) { + scanline[x] += area + step/2; // area of trapezoid is 1*step/2 + area += step; + } + STBTT_assert(STBTT_fabs(area) <= 1.01f); // accumulated error from area += step unless we round step down + STBTT_assert(sy1 > y_final-0.01f); + + // area covered in the last pixel is the rectangle from all the pixels to the left, + // plus the trapezoid filled by the line segment in this pixel all the way to the right edge + scanline[x2] += area + sign * stbtt__position_trapezoid_area(sy1-y_final, (float) x2, x2+1.0f, x_bottom, x2+1.0f); + + // the rest of the line is filled based on the total height of the line segment in this pixel + scanline_fill[x2] += sign * (sy1-sy0); + } + } else { + // if edge goes outside of box we're drawing, we require + // clipping logic. since this does not match the intended use + // of this library, we use a different, very slow brute + // force implementation + // note though that this does happen some of the time because + // x_top and x_bottom can be extrapolated at the top & bottom of + // the shape and actually lie outside the bounding box + int x; + for (x=0; x < len; ++x) { + // cases: + // + // there can be up to two intersections with the pixel. any intersection + // with left or right edges can be handled by splitting into two (or three) + // regions. intersections with top & bottom do not necessitate case-wise logic. + // + // the old way of doing this found the intersections with the left & right edges, + // then used some simple logic to produce up to three segments in sorted order + // from top-to-bottom. however, this had a problem: if an x edge was epsilon + // across the x border, then the corresponding y position might not be distinct + // from the other y segment, and it might ignored as an empty segment. to avoid + // that, we need to explicitly produce segments based on x positions. + + // rename variables to clearly-defined pairs + float y0 = y_top; + float x1 = (float) (x); + float x2 = (float) (x+1); + float x3 = xb; + float y3 = y_bottom; + + // x = e->x + e->dx * (y-y_top) + // (y-y_top) = (x - e->x) / e->dx + // y = (x - e->x) / e->dx + y_top + float y1 = (x - x0) / dx + y_top; + float y2 = (x+1 - x0) / dx + y_top; + + if (x0 < x1 && x3 > x2) { // three segments descending down-right + stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1); + stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x2,y2); + stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3); + } else if (x3 < x1 && x0 > x2) { // three segments descending down-left + stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2); + stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x1,y1); + stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3); + } else if (x0 < x1 && x3 > x1) { // two segments across x, down-right + stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1); + stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3); + } else if (x3 < x1 && x0 > x1) { // two segments across x, down-left + stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1); + stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3); + } else if (x0 < x2 && x3 > x2) { // two segments across x+1, down-right + stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2); + stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3); + } else if (x3 < x2 && x0 > x2) { // two segments across x+1, down-left + stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2); + stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3); + } else { // one segment + stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x3,y3); + } + } + } + } + e = e->next; + } +} + +// directly AA rasterize edges w/o supersampling +static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, int n, int vsubsample, int off_x, int off_y, void *userdata) +{ + stbtt__hheap hh = { 0, 0, 0 }; + stbtt__active_edge *active = NULL; + int y,j=0, i; + float scanline_data[129], *scanline, *scanline2; + + STBTT__NOTUSED(vsubsample); + + if (result->w > 64) + scanline = (float *) STBTT_malloc((result->w*2+1) * sizeof(float), userdata); + else + scanline = scanline_data; + + scanline2 = scanline + result->w; + + y = off_y; + e[n].y0 = (float) (off_y + result->h) + 1; + + while (j < result->h) { + // find center of pixel for this scanline + float scan_y_top = y + 0.0f; + float scan_y_bottom = y + 1.0f; + stbtt__active_edge **step = &active; + + STBTT_memset(scanline , 0, result->w*sizeof(scanline[0])); + STBTT_memset(scanline2, 0, (result->w+1)*sizeof(scanline[0])); + + // update all active edges; + // remove all active edges that terminate before the top of this scanline + while (*step) { + stbtt__active_edge * z = *step; + if (z->ey <= scan_y_top) { + *step = z->next; // delete from list + STBTT_assert(z->direction); + z->direction = 0; + stbtt__hheap_free(&hh, z); + } else { + step = &((*step)->next); // advance through list + } + } + + // insert all edges that start before the bottom of this scanline + while (e->y0 <= scan_y_bottom) { + if (e->y0 != e->y1) { + stbtt__active_edge *z = stbtt__new_active(&hh, e, off_x, scan_y_top, userdata); + if (z != NULL) { + if (j == 0 && off_y != 0) { + if (z->ey < scan_y_top) { + // this can happen due to subpixel positioning and some kind of fp rounding error i think + z->ey = scan_y_top; + } + } + STBTT_assert(z->ey >= scan_y_top); // if we get really unlucky a tiny bit of an edge can be out of bounds + // insert at front + z->next = active; + active = z; + } + } + ++e; + } + + // now process all active edges + if (active) + stbtt__fill_active_edges_new(scanline, scanline2+1, result->w, active, scan_y_top); + + { + float sum = 0; + for (i=0; i < result->w; ++i) { + float k; + int m; + sum += scanline2[i]; + k = scanline[i] + sum; + k = (float) STBTT_fabs(k)*255 + 0.5f; + m = (int) k; + if (m > 255) m = 255; + result->pixels[j*result->stride + i] = (unsigned char) m; + } + } + // advance all the edges + step = &active; + while (*step) { + stbtt__active_edge *z = *step; + z->fx += z->fdx; // advance to position for current scanline + step = &((*step)->next); // advance through list + } + + ++y; + ++j; + } + + stbtt__hheap_cleanup(&hh, userdata); + + if (scanline != scanline_data) + STBTT_free(scanline, userdata); +} +#else +#error "Unrecognized value of STBTT_RASTERIZER_VERSION" +#endif + +#define STBTT__COMPARE(a,b) ((a)->y0 < (b)->y0) + +static void stbtt__sort_edges_ins_sort(stbtt__edge *p, int n) +{ + int i,j; + for (i=1; i < n; ++i) { + stbtt__edge t = p[i], *a = &t; + j = i; + while (j > 0) { + stbtt__edge *b = &p[j-1]; + int c = STBTT__COMPARE(a,b); + if (!c) break; + p[j] = p[j-1]; + --j; + } + if (i != j) + p[j] = t; + } +} + +static void stbtt__sort_edges_quicksort(stbtt__edge *p, int n) +{ + /* threshold for transitioning to insertion sort */ + while (n > 12) { + stbtt__edge t; + int c01,c12,c,m,i,j; + + /* compute median of three */ + m = n >> 1; + c01 = STBTT__COMPARE(&p[0],&p[m]); + c12 = STBTT__COMPARE(&p[m],&p[n-1]); + /* if 0 >= mid >= end, or 0 < mid < end, then use mid */ + if (c01 != c12) { + /* otherwise, we'll need to swap something else to middle */ + int z; + c = STBTT__COMPARE(&p[0],&p[n-1]); + /* 0>mid && midn => n; 0 0 */ + /* 0n: 0>n => 0; 0 n */ + z = (c == c12) ? 0 : n-1; + t = p[z]; + p[z] = p[m]; + p[m] = t; + } + /* now p[m] is the median-of-three */ + /* swap it to the beginning so it won't move around */ + t = p[0]; + p[0] = p[m]; + p[m] = t; + + /* partition loop */ + i=1; + j=n-1; + for(;;) { + /* handling of equality is crucial here */ + /* for sentinels & efficiency with duplicates */ + for (;;++i) { + if (!STBTT__COMPARE(&p[i], &p[0])) break; + } + for (;;--j) { + if (!STBTT__COMPARE(&p[0], &p[j])) break; + } + /* make sure we haven't crossed */ + if (i >= j) break; + t = p[i]; + p[i] = p[j]; + p[j] = t; + + ++i; + --j; + } + /* recurse on smaller side, iterate on larger */ + if (j < (n-i)) { + stbtt__sort_edges_quicksort(p,j); + p = p+i; + n = n-i; + } else { + stbtt__sort_edges_quicksort(p+i, n-i); + n = j; + } + } +} + +static void stbtt__sort_edges(stbtt__edge *p, int n) +{ + stbtt__sort_edges_quicksort(p, n); + stbtt__sort_edges_ins_sort(p, n); +} + +typedef struct +{ + float x,y; +} stbtt__point; + +static void stbtt__rasterize(stbtt__bitmap *result, stbtt__point *pts, int *wcount, int windings, float scale_x, float scale_y, float shift_x, float shift_y, int off_x, int off_y, int invert, void *userdata) +{ + float y_scale_inv = invert ? -scale_y : scale_y; + stbtt__edge *e; + int n,i,j,k,m; +#if STBTT_RASTERIZER_VERSION == 1 + int vsubsample = result->h < 8 ? 15 : 5; +#elif STBTT_RASTERIZER_VERSION == 2 + int vsubsample = 1; +#else + #error "Unrecognized value of STBTT_RASTERIZER_VERSION" +#endif + // vsubsample should divide 255 evenly; otherwise we won't reach full opacity + + // now we have to blow out the windings into explicit edge lists + n = 0; + for (i=0; i < windings; ++i) + n += wcount[i]; + + e = (stbtt__edge *) STBTT_malloc(sizeof(*e) * (n+1), userdata); // add an extra one as a sentinel + if (e == 0) return; + n = 0; + + m=0; + for (i=0; i < windings; ++i) { + stbtt__point *p = pts + m; + m += wcount[i]; + j = wcount[i]-1; + for (k=0; k < wcount[i]; j=k++) { + int a=k,b=j; + // skip the edge if horizontal + if (p[j].y == p[k].y) + continue; + // add edge from j to k to the list + e[n].invert = 0; + if (invert ? p[j].y > p[k].y : p[j].y < p[k].y) { + e[n].invert = 1; + a=j,b=k; + } + e[n].x0 = p[a].x * scale_x + shift_x; + e[n].y0 = (p[a].y * y_scale_inv + shift_y) * vsubsample; + e[n].x1 = p[b].x * scale_x + shift_x; + e[n].y1 = (p[b].y * y_scale_inv + shift_y) * vsubsample; + ++n; + } + } + + // now sort the edges by their highest point (should snap to integer, and then by x) + //STBTT_sort(e, n, sizeof(e[0]), stbtt__edge_compare); + stbtt__sort_edges(e, n); + + // now, traverse the scanlines and find the intersections on each scanline, use xor winding rule + stbtt__rasterize_sorted_edges(result, e, n, vsubsample, off_x, off_y, userdata); + + STBTT_free(e, userdata); +} + +static void stbtt__add_point(stbtt__point *points, int n, float x, float y) +{ + if (!points) return; // during first pass, it's unallocated + points[n].x = x; + points[n].y = y; +} + +// tessellate until threshold p is happy... @TODO warped to compensate for non-linear stretching +static int stbtt__tesselate_curve(stbtt__point *points, int *num_points, float x0, float y0, float x1, float y1, float x2, float y2, float objspace_flatness_squared, int n) +{ + // midpoint + float mx = (x0 + 2*x1 + x2)/4; + float my = (y0 + 2*y1 + y2)/4; + // versus directly drawn line + float dx = (x0+x2)/2 - mx; + float dy = (y0+y2)/2 - my; + if (n > 16) // 65536 segments on one curve better be enough! + return 1; + if (dx*dx+dy*dy > objspace_flatness_squared) { // half-pixel error allowed... need to be smaller if AA + stbtt__tesselate_curve(points, num_points, x0,y0, (x0+x1)/2.0f,(y0+y1)/2.0f, mx,my, objspace_flatness_squared,n+1); + stbtt__tesselate_curve(points, num_points, mx,my, (x1+x2)/2.0f,(y1+y2)/2.0f, x2,y2, objspace_flatness_squared,n+1); + } else { + stbtt__add_point(points, *num_points,x2,y2); + *num_points = *num_points+1; + } + return 1; +} + +static void stbtt__tesselate_cubic(stbtt__point *points, int *num_points, float x0, float y0, float x1, float y1, float x2, float y2, float x3, float y3, float objspace_flatness_squared, int n) +{ + // @TODO this "flatness" calculation is just made-up nonsense that seems to work well enough + float dx0 = x1-x0; + float dy0 = y1-y0; + float dx1 = x2-x1; + float dy1 = y2-y1; + float dx2 = x3-x2; + float dy2 = y3-y2; + float dx = x3-x0; + float dy = y3-y0; + float longlen = (float) (STBTT_sqrt(dx0*dx0+dy0*dy0)+STBTT_sqrt(dx1*dx1+dy1*dy1)+STBTT_sqrt(dx2*dx2+dy2*dy2)); + float shortlen = (float) STBTT_sqrt(dx*dx+dy*dy); + float flatness_squared = longlen*longlen-shortlen*shortlen; + + if (n > 16) // 65536 segments on one curve better be enough! + return; + + if (flatness_squared > objspace_flatness_squared) { + float x01 = (x0+x1)/2; + float y01 = (y0+y1)/2; + float x12 = (x1+x2)/2; + float y12 = (y1+y2)/2; + float x23 = (x2+x3)/2; + float y23 = (y2+y3)/2; + + float xa = (x01+x12)/2; + float ya = (y01+y12)/2; + float xb = (x12+x23)/2; + float yb = (y12+y23)/2; + + float mx = (xa+xb)/2; + float my = (ya+yb)/2; + + stbtt__tesselate_cubic(points, num_points, x0,y0, x01,y01, xa,ya, mx,my, objspace_flatness_squared,n+1); + stbtt__tesselate_cubic(points, num_points, mx,my, xb,yb, x23,y23, x3,y3, objspace_flatness_squared,n+1); + } else { + stbtt__add_point(points, *num_points,x3,y3); + *num_points = *num_points+1; + } +} + +// returns number of contours +static stbtt__point *stbtt_FlattenCurves(stbtt_vertex *vertices, int num_verts, float objspace_flatness, int **contour_lengths, int *num_contours, void *userdata) +{ + stbtt__point *points=0; + int num_points=0; + + float objspace_flatness_squared = objspace_flatness * objspace_flatness; + int i,n=0,start=0, pass; + + // count how many "moves" there are to get the contour count + for (i=0; i < num_verts; ++i) + if (vertices[i].type == STBTT_vmove) + ++n; + + *num_contours = n; + if (n == 0) return 0; + + *contour_lengths = (int *) STBTT_malloc(sizeof(**contour_lengths) * n, userdata); + + if (*contour_lengths == 0) { + *num_contours = 0; + return 0; + } + + // make two passes through the points so we don't need to realloc + for (pass=0; pass < 2; ++pass) { + float x=0,y=0; + if (pass == 1) { + points = (stbtt__point *) STBTT_malloc(num_points * sizeof(points[0]), userdata); + if (points == NULL) goto error; + } + num_points = 0; + n= -1; + for (i=0; i < num_verts; ++i) { + switch (vertices[i].type) { + case STBTT_vmove: + // start the next contour + if (n >= 0) + (*contour_lengths)[n] = num_points - start; + ++n; + start = num_points; + + x = vertices[i].x, y = vertices[i].y; + stbtt__add_point(points, num_points++, x,y); + break; + case STBTT_vline: + x = vertices[i].x, y = vertices[i].y; + stbtt__add_point(points, num_points++, x, y); + break; + case STBTT_vcurve: + stbtt__tesselate_curve(points, &num_points, x,y, + vertices[i].cx, vertices[i].cy, + vertices[i].x, vertices[i].y, + objspace_flatness_squared, 0); + x = vertices[i].x, y = vertices[i].y; + break; + case STBTT_vcubic: + stbtt__tesselate_cubic(points, &num_points, x,y, + vertices[i].cx, vertices[i].cy, + vertices[i].cx1, vertices[i].cy1, + vertices[i].x, vertices[i].y, + objspace_flatness_squared, 0); + x = vertices[i].x, y = vertices[i].y; + break; + } + } + (*contour_lengths)[n] = num_points - start; + } + + return points; +error: + STBTT_free(points, userdata); + STBTT_free(*contour_lengths, userdata); + *contour_lengths = 0; + *num_contours = 0; + return NULL; +} + +STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, float flatness_in_pixels, stbtt_vertex *vertices, int num_verts, float scale_x, float scale_y, float shift_x, float shift_y, int x_off, int y_off, int invert, void *userdata) +{ + float scale = scale_x > scale_y ? scale_y : scale_x; + int winding_count = 0; + int *winding_lengths = NULL; + stbtt__point *windings = stbtt_FlattenCurves(vertices, num_verts, flatness_in_pixels / scale, &winding_lengths, &winding_count, userdata); + if (windings) { + stbtt__rasterize(result, windings, winding_lengths, winding_count, scale_x, scale_y, shift_x, shift_y, x_off, y_off, invert, userdata); + STBTT_free(winding_lengths, userdata); + STBTT_free(windings, userdata); + } +} + +STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata) +{ + STBTT_free(bitmap, userdata); +} + +STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, int *width, int *height, int *xoff, int *yoff) +{ + int ix0,iy0,ix1,iy1; + stbtt__bitmap gbm; + stbtt_vertex *vertices; + int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices); + + if (scale_x == 0) scale_x = scale_y; + if (scale_y == 0) { + if (scale_x == 0) { + STBTT_free(vertices, info->userdata); + return NULL; + } + scale_y = scale_x; + } + + stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale_x, scale_y, shift_x, shift_y, &ix0,&iy0,&ix1,&iy1); + + // now we get the size + gbm.w = (ix1 - ix0); + gbm.h = (iy1 - iy0); + gbm.pixels = NULL; // in case we error + + if (width ) *width = gbm.w; + if (height) *height = gbm.h; + if (xoff ) *xoff = ix0; + if (yoff ) *yoff = iy0; + + if (gbm.w && gbm.h) { + gbm.pixels = (unsigned char *) STBTT_malloc(gbm.w * gbm.h, info->userdata); + if (gbm.pixels) { + gbm.stride = gbm.w; + + stbtt_Rasterize(&gbm, 0.35f, vertices, num_verts, scale_x, scale_y, shift_x, shift_y, ix0, iy0, 1, info->userdata); + } + } + STBTT_free(vertices, info->userdata); + return gbm.pixels; +} + +STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff) +{ + return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y, 0.0f, 0.0f, glyph, width, height, xoff, yoff); +} + +STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int glyph) +{ + int ix0,iy0; + stbtt_vertex *vertices; + int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices); + stbtt__bitmap gbm; + + stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale_x, scale_y, shift_x, shift_y, &ix0,&iy0,0,0); + gbm.pixels = output; + gbm.w = out_w; + gbm.h = out_h; + gbm.stride = out_stride; + + if (gbm.w && gbm.h) + stbtt_Rasterize(&gbm, 0.35f, vertices, num_verts, scale_x, scale_y, shift_x, shift_y, ix0,iy0, 1, info->userdata); + + STBTT_free(vertices, info->userdata); +} + +STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int glyph) +{ + stbtt_MakeGlyphBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, 0.0f,0.0f, glyph); +} + +STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff) +{ + return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y,shift_x,shift_y, stbtt_FindGlyphIndex(info,codepoint), width,height,xoff,yoff); +} + +STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int codepoint) +{ + stbtt_MakeGlyphBitmapSubpixelPrefilter(info, output, out_w, out_h, out_stride, scale_x, scale_y, shift_x, shift_y, oversample_x, oversample_y, sub_x, sub_y, stbtt_FindGlyphIndex(info,codepoint)); +} + +STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint) +{ + stbtt_MakeGlyphBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, shift_x, shift_y, stbtt_FindGlyphIndex(info,codepoint)); +} + +STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff) +{ + return stbtt_GetCodepointBitmapSubpixel(info, scale_x, scale_y, 0.0f,0.0f, codepoint, width,height,xoff,yoff); +} + +STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint) +{ + stbtt_MakeCodepointBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, 0.0f,0.0f, codepoint); +} + +////////////////////////////////////////////////////////////////////////////// +// +// bitmap baking +// +// This is SUPER-CRAPPY packing to keep source code small + +static int stbtt_BakeFontBitmap_internal(unsigned char *data, int offset, // font location (use offset=0 for plain .ttf) + float pixel_height, // height of font in pixels + unsigned char *pixels, int pw, int ph, // bitmap to be filled in + int first_char, int num_chars, // characters to bake + stbtt_bakedchar *chardata) +{ + float scale; + int x,y,bottom_y, i; + stbtt_fontinfo f; + f.userdata = NULL; + if (!stbtt_InitFont(&f, data, offset)) + return -1; + STBTT_memset(pixels, 0, pw*ph); // background of 0 around pixels + x=y=1; + bottom_y = 1; + + scale = stbtt_ScaleForPixelHeight(&f, pixel_height); + + for (i=0; i < num_chars; ++i) { + int advance, lsb, x0,y0,x1,y1,gw,gh; + int g = stbtt_FindGlyphIndex(&f, first_char + i); + stbtt_GetGlyphHMetrics(&f, g, &advance, &lsb); + stbtt_GetGlyphBitmapBox(&f, g, scale,scale, &x0,&y0,&x1,&y1); + gw = x1-x0; + gh = y1-y0; + if (x + gw + 1 >= pw) + y = bottom_y, x = 1; // advance to next row + if (y + gh + 1 >= ph) // check if it fits vertically AFTER potentially moving to next row + return -i; + STBTT_assert(x+gw < pw); + STBTT_assert(y+gh < ph); + stbtt_MakeGlyphBitmap(&f, pixels+x+y*pw, gw,gh,pw, scale,scale, g); + chardata[i].x0 = (stbtt_int16) x; + chardata[i].y0 = (stbtt_int16) y; + chardata[i].x1 = (stbtt_int16) (x + gw); + chardata[i].y1 = (stbtt_int16) (y + gh); + chardata[i].xadvance = scale * advance; + chardata[i].xoff = (float) x0; + chardata[i].yoff = (float) y0; + x = x + gw + 1; + if (y+gh+1 > bottom_y) + bottom_y = y+gh+1; + } + return bottom_y; +} + +STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int opengl_fillrule) +{ + float d3d_bias = opengl_fillrule ? 0 : -0.5f; + float ipw = 1.0f / pw, iph = 1.0f / ph; + const stbtt_bakedchar *b = chardata + char_index; + int round_x = STBTT_ifloor((*xpos + b->xoff) + 0.5f); + int round_y = STBTT_ifloor((*ypos + b->yoff) + 0.5f); + + q->x0 = round_x + d3d_bias; + q->y0 = round_y + d3d_bias; + q->x1 = round_x + b->x1 - b->x0 + d3d_bias; + q->y1 = round_y + b->y1 - b->y0 + d3d_bias; + + q->s0 = b->x0 * ipw; + q->t0 = b->y0 * iph; + q->s1 = b->x1 * ipw; + q->t1 = b->y1 * iph; + + *xpos += b->xadvance; +} + +////////////////////////////////////////////////////////////////////////////// +// +// rectangle packing replacement routines if you don't have stb_rect_pack.h +// + +#ifndef STB_RECT_PACK_VERSION + +typedef int stbrp_coord; + +//////////////////////////////////////////////////////////////////////////////////// +// // +// // +// COMPILER WARNING ?!?!? // +// // +// // +// if you get a compile warning due to these symbols being defined more than // +// once, move #include "stb_rect_pack.h" before #include "stb_truetype.h" // +// // +//////////////////////////////////////////////////////////////////////////////////// + +typedef struct +{ + int width,height; + int x,y,bottom_y; +} stbrp_context; + +typedef struct +{ + unsigned char x; +} stbrp_node; + +struct stbrp_rect +{ + stbrp_coord x,y; + int id,w,h,was_packed; +}; + +static void stbrp_init_target(stbrp_context *con, int pw, int ph, stbrp_node *nodes, int num_nodes) +{ + con->width = pw; + con->height = ph; + con->x = 0; + con->y = 0; + con->bottom_y = 0; + STBTT__NOTUSED(nodes); + STBTT__NOTUSED(num_nodes); +} + +static void stbrp_pack_rects(stbrp_context *con, stbrp_rect *rects, int num_rects) +{ + int i; + for (i=0; i < num_rects; ++i) { + if (con->x + rects[i].w > con->width) { + con->x = 0; + con->y = con->bottom_y; + } + if (con->y + rects[i].h > con->height) + break; + rects[i].x = con->x; + rects[i].y = con->y; + rects[i].was_packed = 1; + con->x += rects[i].w; + if (con->y + rects[i].h > con->bottom_y) + con->bottom_y = con->y + rects[i].h; + } + for ( ; i < num_rects; ++i) + rects[i].was_packed = 0; +} +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// bitmap baking +// +// This is SUPER-AWESOME (tm Ryan Gordon) packing using stb_rect_pack.h. If +// stb_rect_pack.h isn't available, it uses the BakeFontBitmap strategy. + +STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pixels, int pw, int ph, int stride_in_bytes, int padding, void *alloc_context) +{ + stbrp_context *context = (stbrp_context *) STBTT_malloc(sizeof(*context) ,alloc_context); + int num_nodes = pw - padding; + stbrp_node *nodes = (stbrp_node *) STBTT_malloc(sizeof(*nodes ) * num_nodes,alloc_context); + + if (context == NULL || nodes == NULL) { + if (context != NULL) STBTT_free(context, alloc_context); + if (nodes != NULL) STBTT_free(nodes , alloc_context); + return 0; + } + + spc->user_allocator_context = alloc_context; + spc->width = pw; + spc->height = ph; + spc->pixels = pixels; + spc->pack_info = context; + spc->nodes = nodes; + spc->padding = padding; + spc->stride_in_bytes = stride_in_bytes != 0 ? stride_in_bytes : pw; + spc->h_oversample = 1; + spc->v_oversample = 1; + spc->skip_missing = 0; + + stbrp_init_target(context, pw-padding, ph-padding, nodes, num_nodes); + + if (pixels) + STBTT_memset(pixels, 0, pw*ph); // background of 0 around pixels + + return 1; +} + +STBTT_DEF void stbtt_PackEnd (stbtt_pack_context *spc) +{ + STBTT_free(spc->nodes , spc->user_allocator_context); + STBTT_free(spc->pack_info, spc->user_allocator_context); +} + +STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsigned int h_oversample, unsigned int v_oversample) +{ + STBTT_assert(h_oversample <= STBTT_MAX_OVERSAMPLE); + STBTT_assert(v_oversample <= STBTT_MAX_OVERSAMPLE); + if (h_oversample <= STBTT_MAX_OVERSAMPLE) + spc->h_oversample = h_oversample; + if (v_oversample <= STBTT_MAX_OVERSAMPLE) + spc->v_oversample = v_oversample; +} + +STBTT_DEF void stbtt_PackSetSkipMissingCodepoints(stbtt_pack_context *spc, int skip) +{ + spc->skip_missing = skip; +} + +#define STBTT__OVER_MASK (STBTT_MAX_OVERSAMPLE-1) + +static void stbtt__h_prefilter(unsigned char *pixels, int w, int h, int stride_in_bytes, unsigned int kernel_width) +{ + unsigned char buffer[STBTT_MAX_OVERSAMPLE]; + int safe_w = w - kernel_width; + int j; + STBTT_memset(buffer, 0, STBTT_MAX_OVERSAMPLE); // suppress bogus warning from VS2013 -analyze + for (j=0; j < h; ++j) { + int i; + unsigned int total; + STBTT_memset(buffer, 0, kernel_width); + + total = 0; + + // make kernel_width a constant in common cases so compiler can optimize out the divide + switch (kernel_width) { + case 2: + for (i=0; i <= safe_w; ++i) { + total += pixels[i] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; + pixels[i] = (unsigned char) (total / 2); + } + break; + case 3: + for (i=0; i <= safe_w; ++i) { + total += pixels[i] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; + pixels[i] = (unsigned char) (total / 3); + } + break; + case 4: + for (i=0; i <= safe_w; ++i) { + total += pixels[i] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; + pixels[i] = (unsigned char) (total / 4); + } + break; + case 5: + for (i=0; i <= safe_w; ++i) { + total += pixels[i] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; + pixels[i] = (unsigned char) (total / 5); + } + break; + default: + for (i=0; i <= safe_w; ++i) { + total += pixels[i] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; + pixels[i] = (unsigned char) (total / kernel_width); + } + break; + } + + for (; i < w; ++i) { + STBTT_assert(pixels[i] == 0); + total -= buffer[i & STBTT__OVER_MASK]; + pixels[i] = (unsigned char) (total / kernel_width); + } + + pixels += stride_in_bytes; + } +} + +static void stbtt__v_prefilter(unsigned char *pixels, int w, int h, int stride_in_bytes, unsigned int kernel_width) +{ + unsigned char buffer[STBTT_MAX_OVERSAMPLE]; + int safe_h = h - kernel_width; + int j; + STBTT_memset(buffer, 0, STBTT_MAX_OVERSAMPLE); // suppress bogus warning from VS2013 -analyze + for (j=0; j < w; ++j) { + int i; + unsigned int total; + STBTT_memset(buffer, 0, kernel_width); + + total = 0; + + // make kernel_width a constant in common cases so compiler can optimize out the divide + switch (kernel_width) { + case 2: + for (i=0; i <= safe_h; ++i) { + total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; + pixels[i*stride_in_bytes] = (unsigned char) (total / 2); + } + break; + case 3: + for (i=0; i <= safe_h; ++i) { + total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; + pixels[i*stride_in_bytes] = (unsigned char) (total / 3); + } + break; + case 4: + for (i=0; i <= safe_h; ++i) { + total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; + pixels[i*stride_in_bytes] = (unsigned char) (total / 4); + } + break; + case 5: + for (i=0; i <= safe_h; ++i) { + total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; + pixels[i*stride_in_bytes] = (unsigned char) (total / 5); + } + break; + default: + for (i=0; i <= safe_h; ++i) { + total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; + buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; + pixels[i*stride_in_bytes] = (unsigned char) (total / kernel_width); + } + break; + } + + for (; i < h; ++i) { + STBTT_assert(pixels[i*stride_in_bytes] == 0); + total -= buffer[i & STBTT__OVER_MASK]; + pixels[i*stride_in_bytes] = (unsigned char) (total / kernel_width); + } + + pixels += 1; + } +} + +static float stbtt__oversample_shift(int oversample) +{ + if (!oversample) + return 0.0f; + + // The prefilter is a box filter of width "oversample", + // which shifts phase by (oversample - 1)/2 pixels in + // oversampled space. We want to shift in the opposite + // direction to counter this. + return (float)-(oversample - 1) / (2.0f * (float)oversample); +} + +// rects array must be big enough to accommodate all characters in the given ranges +STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects) +{ + int i,j,k; + int missing_glyph_added = 0; + + k=0; + for (i=0; i < num_ranges; ++i) { + float fh = ranges[i].font_size; + float scale = fh > 0 ? stbtt_ScaleForPixelHeight(info, fh) : stbtt_ScaleForMappingEmToPixels(info, -fh); + ranges[i].h_oversample = (unsigned char) spc->h_oversample; + ranges[i].v_oversample = (unsigned char) spc->v_oversample; + for (j=0; j < ranges[i].num_chars; ++j) { + int x0,y0,x1,y1; + int codepoint = ranges[i].array_of_unicode_codepoints == NULL ? ranges[i].first_unicode_codepoint_in_range + j : ranges[i].array_of_unicode_codepoints[j]; + int glyph = stbtt_FindGlyphIndex(info, codepoint); + if (glyph == 0 && (spc->skip_missing || missing_glyph_added)) { + rects[k].w = rects[k].h = 0; + } else { + stbtt_GetGlyphBitmapBoxSubpixel(info,glyph, + scale * spc->h_oversample, + scale * spc->v_oversample, + 0,0, + &x0,&y0,&x1,&y1); + rects[k].w = (stbrp_coord) (x1-x0 + spc->padding + spc->h_oversample-1); + rects[k].h = (stbrp_coord) (y1-y0 + spc->padding + spc->v_oversample-1); + if (glyph == 0) + missing_glyph_added = 1; + } + ++k; + } + } + + return k; +} + +STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int prefilter_x, int prefilter_y, float *sub_x, float *sub_y, int glyph) +{ + stbtt_MakeGlyphBitmapSubpixel(info, + output, + out_w - (prefilter_x - 1), + out_h - (prefilter_y - 1), + out_stride, + scale_x, + scale_y, + shift_x, + shift_y, + glyph); + + if (prefilter_x > 1) + stbtt__h_prefilter(output, out_w, out_h, out_stride, prefilter_x); + + if (prefilter_y > 1) + stbtt__v_prefilter(output, out_w, out_h, out_stride, prefilter_y); + + *sub_x = stbtt__oversample_shift(prefilter_x); + *sub_y = stbtt__oversample_shift(prefilter_y); +} + +// rects array must be big enough to accommodate all characters in the given ranges +STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects) +{ + int i,j,k, missing_glyph = -1, return_value = 1; + + // save current values + int old_h_over = spc->h_oversample; + int old_v_over = spc->v_oversample; + + k = 0; + for (i=0; i < num_ranges; ++i) { + float fh = ranges[i].font_size; + float scale = fh > 0 ? stbtt_ScaleForPixelHeight(info, fh) : stbtt_ScaleForMappingEmToPixels(info, -fh); + float recip_h,recip_v,sub_x,sub_y; + spc->h_oversample = ranges[i].h_oversample; + spc->v_oversample = ranges[i].v_oversample; + recip_h = 1.0f / spc->h_oversample; + recip_v = 1.0f / spc->v_oversample; + sub_x = stbtt__oversample_shift(spc->h_oversample); + sub_y = stbtt__oversample_shift(spc->v_oversample); + for (j=0; j < ranges[i].num_chars; ++j) { + stbrp_rect *r = &rects[k]; + if (r->was_packed && r->w != 0 && r->h != 0) { + stbtt_packedchar *bc = &ranges[i].chardata_for_range[j]; + int advance, lsb, x0,y0,x1,y1; + int codepoint = ranges[i].array_of_unicode_codepoints == NULL ? ranges[i].first_unicode_codepoint_in_range + j : ranges[i].array_of_unicode_codepoints[j]; + int glyph = stbtt_FindGlyphIndex(info, codepoint); + stbrp_coord pad = (stbrp_coord) spc->padding; + + // pad on left and top + r->x += pad; + r->y += pad; + r->w -= pad; + r->h -= pad; + stbtt_GetGlyphHMetrics(info, glyph, &advance, &lsb); + stbtt_GetGlyphBitmapBox(info, glyph, + scale * spc->h_oversample, + scale * spc->v_oversample, + &x0,&y0,&x1,&y1); + stbtt_MakeGlyphBitmapSubpixel(info, + spc->pixels + r->x + r->y*spc->stride_in_bytes, + r->w - spc->h_oversample+1, + r->h - spc->v_oversample+1, + spc->stride_in_bytes, + scale * spc->h_oversample, + scale * spc->v_oversample, + 0,0, + glyph); + + if (spc->h_oversample > 1) + stbtt__h_prefilter(spc->pixels + r->x + r->y*spc->stride_in_bytes, + r->w, r->h, spc->stride_in_bytes, + spc->h_oversample); + + if (spc->v_oversample > 1) + stbtt__v_prefilter(spc->pixels + r->x + r->y*spc->stride_in_bytes, + r->w, r->h, spc->stride_in_bytes, + spc->v_oversample); + + bc->x0 = (stbtt_int16) r->x; + bc->y0 = (stbtt_int16) r->y; + bc->x1 = (stbtt_int16) (r->x + r->w); + bc->y1 = (stbtt_int16) (r->y + r->h); + bc->xadvance = scale * advance; + bc->xoff = (float) x0 * recip_h + sub_x; + bc->yoff = (float) y0 * recip_v + sub_y; + bc->xoff2 = (x0 + r->w) * recip_h + sub_x; + bc->yoff2 = (y0 + r->h) * recip_v + sub_y; + + if (glyph == 0) + missing_glyph = j; + } else if (spc->skip_missing) { + return_value = 0; + } else if (r->was_packed && r->w == 0 && r->h == 0 && missing_glyph >= 0) { + ranges[i].chardata_for_range[j] = ranges[i].chardata_for_range[missing_glyph]; + } else { + return_value = 0; // if any fail, report failure + } + + ++k; + } + } + + // restore original values + spc->h_oversample = old_h_over; + spc->v_oversample = old_v_over; + + return return_value; +} + +STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, stbrp_rect *rects, int num_rects) +{ + stbrp_pack_rects((stbrp_context *) spc->pack_info, rects, num_rects); +} + +STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, stbtt_pack_range *ranges, int num_ranges) +{ + stbtt_fontinfo info; + int i,j,n, return_value = 1; + //stbrp_context *context = (stbrp_context *) spc->pack_info; + stbrp_rect *rects; + + // flag all characters as NOT packed + for (i=0; i < num_ranges; ++i) + for (j=0; j < ranges[i].num_chars; ++j) + ranges[i].chardata_for_range[j].x0 = + ranges[i].chardata_for_range[j].y0 = + ranges[i].chardata_for_range[j].x1 = + ranges[i].chardata_for_range[j].y1 = 0; + + n = 0; + for (i=0; i < num_ranges; ++i) + n += ranges[i].num_chars; + + rects = (stbrp_rect *) STBTT_malloc(sizeof(*rects) * n, spc->user_allocator_context); + if (rects == NULL) + return 0; + + info.userdata = spc->user_allocator_context; + stbtt_InitFont(&info, fontdata, stbtt_GetFontOffsetForIndex(fontdata,font_index)); + + n = stbtt_PackFontRangesGatherRects(spc, &info, ranges, num_ranges, rects); + + stbtt_PackFontRangesPackRects(spc, rects, n); + + return_value = stbtt_PackFontRangesRenderIntoRects(spc, &info, ranges, num_ranges, rects); + + STBTT_free(rects, spc->user_allocator_context); + return return_value; +} + +STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, float font_size, + int first_unicode_codepoint_in_range, int num_chars_in_range, stbtt_packedchar *chardata_for_range) +{ + stbtt_pack_range range; + range.first_unicode_codepoint_in_range = first_unicode_codepoint_in_range; + range.array_of_unicode_codepoints = NULL; + range.num_chars = num_chars_in_range; + range.chardata_for_range = chardata_for_range; + range.font_size = font_size; + return stbtt_PackFontRanges(spc, fontdata, font_index, &range, 1); +} + +STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata, int index, float size, float *ascent, float *descent, float *lineGap) +{ + int i_ascent, i_descent, i_lineGap; + float scale; + stbtt_fontinfo info; + stbtt_InitFont(&info, fontdata, stbtt_GetFontOffsetForIndex(fontdata, index)); + scale = size > 0 ? stbtt_ScaleForPixelHeight(&info, size) : stbtt_ScaleForMappingEmToPixels(&info, -size); + stbtt_GetFontVMetrics(&info, &i_ascent, &i_descent, &i_lineGap); + *ascent = (float) i_ascent * scale; + *descent = (float) i_descent * scale; + *lineGap = (float) i_lineGap * scale; +} + +STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int align_to_integer) +{ + float ipw = 1.0f / pw, iph = 1.0f / ph; + const stbtt_packedchar *b = chardata + char_index; + + if (align_to_integer) { + float x = (float) STBTT_ifloor((*xpos + b->xoff) + 0.5f); + float y = (float) STBTT_ifloor((*ypos + b->yoff) + 0.5f); + q->x0 = x; + q->y0 = y; + q->x1 = x + b->xoff2 - b->xoff; + q->y1 = y + b->yoff2 - b->yoff; + } else { + q->x0 = *xpos + b->xoff; + q->y0 = *ypos + b->yoff; + q->x1 = *xpos + b->xoff2; + q->y1 = *ypos + b->yoff2; + } + + q->s0 = b->x0 * ipw; + q->t0 = b->y0 * iph; + q->s1 = b->x1 * ipw; + q->t1 = b->y1 * iph; + + *xpos += b->xadvance; +} + +////////////////////////////////////////////////////////////////////////////// +// +// sdf computation +// + +#define STBTT_min(a,b) ((a) < (b) ? (a) : (b)) +#define STBTT_max(a,b) ((a) < (b) ? (b) : (a)) + +static int stbtt__ray_intersect_bezier(float orig[2], float ray[2], float q0[2], float q1[2], float q2[2], float hits[2][2]) +{ + float q0perp = q0[1]*ray[0] - q0[0]*ray[1]; + float q1perp = q1[1]*ray[0] - q1[0]*ray[1]; + float q2perp = q2[1]*ray[0] - q2[0]*ray[1]; + float roperp = orig[1]*ray[0] - orig[0]*ray[1]; + + float a = q0perp - 2*q1perp + q2perp; + float b = q1perp - q0perp; + float c = q0perp - roperp; + + float s0 = 0., s1 = 0.; + int num_s = 0; + + if (a != 0.0) { + float discr = b*b - a*c; + if (discr > 0.0) { + float rcpna = -1 / a; + float d = (float) STBTT_sqrt(discr); + s0 = (b+d) * rcpna; + s1 = (b-d) * rcpna; + if (s0 >= 0.0 && s0 <= 1.0) + num_s = 1; + if (d > 0.0 && s1 >= 0.0 && s1 <= 1.0) { + if (num_s == 0) s0 = s1; + ++num_s; + } + } + } else { + // 2*b*s + c = 0 + // s = -c / (2*b) + s0 = c / (-2 * b); + if (s0 >= 0.0 && s0 <= 1.0) + num_s = 1; + } + + if (num_s == 0) + return 0; + else { + float rcp_len2 = 1 / (ray[0]*ray[0] + ray[1]*ray[1]); + float rayn_x = ray[0] * rcp_len2, rayn_y = ray[1] * rcp_len2; + + float q0d = q0[0]*rayn_x + q0[1]*rayn_y; + float q1d = q1[0]*rayn_x + q1[1]*rayn_y; + float q2d = q2[0]*rayn_x + q2[1]*rayn_y; + float rod = orig[0]*rayn_x + orig[1]*rayn_y; + + float q10d = q1d - q0d; + float q20d = q2d - q0d; + float q0rd = q0d - rod; + + hits[0][0] = q0rd + s0*(2.0f - 2.0f*s0)*q10d + s0*s0*q20d; + hits[0][1] = a*s0+b; + + if (num_s > 1) { + hits[1][0] = q0rd + s1*(2.0f - 2.0f*s1)*q10d + s1*s1*q20d; + hits[1][1] = a*s1+b; + return 2; + } else { + return 1; + } + } +} + +static int equal(float *a, float *b) +{ + return (a[0] == b[0] && a[1] == b[1]); +} + +static int stbtt__compute_crossings_x(float x, float y, int nverts, stbtt_vertex *verts) +{ + int i; + float orig[2], ray[2] = { 1, 0 }; + float y_frac; + int winding = 0; + + // make sure y never passes through a vertex of the shape + y_frac = (float) STBTT_fmod(y, 1.0f); + if (y_frac < 0.01f) + y += 0.01f; + else if (y_frac > 0.99f) + y -= 0.01f; + + orig[0] = x; + orig[1] = y; + + // test a ray from (-infinity,y) to (x,y) + for (i=0; i < nverts; ++i) { + if (verts[i].type == STBTT_vline) { + int x0 = (int) verts[i-1].x, y0 = (int) verts[i-1].y; + int x1 = (int) verts[i ].x, y1 = (int) verts[i ].y; + if (y > STBTT_min(y0,y1) && y < STBTT_max(y0,y1) && x > STBTT_min(x0,x1)) { + float x_inter = (y - y0) / (y1 - y0) * (x1-x0) + x0; + if (x_inter < x) + winding += (y0 < y1) ? 1 : -1; + } + } + if (verts[i].type == STBTT_vcurve) { + int x0 = (int) verts[i-1].x , y0 = (int) verts[i-1].y ; + int x1 = (int) verts[i ].cx, y1 = (int) verts[i ].cy; + int x2 = (int) verts[i ].x , y2 = (int) verts[i ].y ; + int ax = STBTT_min(x0,STBTT_min(x1,x2)), ay = STBTT_min(y0,STBTT_min(y1,y2)); + int by = STBTT_max(y0,STBTT_max(y1,y2)); + if (y > ay && y < by && x > ax) { + float q0[2],q1[2],q2[2]; + float hits[2][2]; + q0[0] = (float)x0; + q0[1] = (float)y0; + q1[0] = (float)x1; + q1[1] = (float)y1; + q2[0] = (float)x2; + q2[1] = (float)y2; + if (equal(q0,q1) || equal(q1,q2)) { + x0 = (int)verts[i-1].x; + y0 = (int)verts[i-1].y; + x1 = (int)verts[i ].x; + y1 = (int)verts[i ].y; + if (y > STBTT_min(y0,y1) && y < STBTT_max(y0,y1) && x > STBTT_min(x0,x1)) { + float x_inter = (y - y0) / (y1 - y0) * (x1-x0) + x0; + if (x_inter < x) + winding += (y0 < y1) ? 1 : -1; + } + } else { + int num_hits = stbtt__ray_intersect_bezier(orig, ray, q0, q1, q2, hits); + if (num_hits >= 1) + if (hits[0][0] < 0) + winding += (hits[0][1] < 0 ? -1 : 1); + if (num_hits >= 2) + if (hits[1][0] < 0) + winding += (hits[1][1] < 0 ? -1 : 1); + } + } + } + } + return winding; +} + +static float stbtt__cuberoot( float x ) +{ + if (x<0) + return -(float) STBTT_pow(-x,1.0f/3.0f); + else + return (float) STBTT_pow( x,1.0f/3.0f); +} + +// x^3 + a*x^2 + b*x + c = 0 +static int stbtt__solve_cubic(float a, float b, float c, float* r) +{ + float s = -a / 3; + float p = b - a*a / 3; + float q = a * (2*a*a - 9*b) / 27 + c; + float p3 = p*p*p; + float d = q*q + 4*p3 / 27; + if (d >= 0) { + float z = (float) STBTT_sqrt(d); + float u = (-q + z) / 2; + float v = (-q - z) / 2; + u = stbtt__cuberoot(u); + v = stbtt__cuberoot(v); + r[0] = s + u + v; + return 1; + } else { + float u = (float) STBTT_sqrt(-p/3); + float v = (float) STBTT_acos(-STBTT_sqrt(-27/p3) * q / 2) / 3; // p3 must be negative, since d is negative + float m = (float) STBTT_cos(v); + float n = (float) STBTT_cos(v-3.141592/2)*1.732050808f; + r[0] = s + u * 2 * m; + r[1] = s - u * (m + n); + r[2] = s - u * (m - n); + + //STBTT_assert( STBTT_fabs(((r[0]+a)*r[0]+b)*r[0]+c) < 0.05f); // these asserts may not be safe at all scales, though they're in bezier t parameter units so maybe? + //STBTT_assert( STBTT_fabs(((r[1]+a)*r[1]+b)*r[1]+c) < 0.05f); + //STBTT_assert( STBTT_fabs(((r[2]+a)*r[2]+b)*r[2]+c) < 0.05f); + return 3; + } +} + +STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float scale, int glyph, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff) +{ + float scale_x = scale, scale_y = scale; + int ix0,iy0,ix1,iy1; + int w,h; + unsigned char *data; + + if (scale == 0) return NULL; + + stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale, scale, 0.0f,0.0f, &ix0,&iy0,&ix1,&iy1); + + // if empty, return NULL + if (ix0 == ix1 || iy0 == iy1) + return NULL; + + ix0 -= padding; + iy0 -= padding; + ix1 += padding; + iy1 += padding; + + w = (ix1 - ix0); + h = (iy1 - iy0); + + if (width ) *width = w; + if (height) *height = h; + if (xoff ) *xoff = ix0; + if (yoff ) *yoff = iy0; + + // invert for y-downwards bitmaps + scale_y = -scale_y; + + { + // distance from singular values (in the same units as the pixel grid) + const float eps = 1./1024, eps2 = eps*eps; + int x,y,i,j; + float *precompute; + stbtt_vertex *verts; + int num_verts = stbtt_GetGlyphShape(info, glyph, &verts); + data = (unsigned char *) STBTT_malloc(w * h, info->userdata); + precompute = (float *) STBTT_malloc(num_verts * sizeof(float), info->userdata); + + for (i=0,j=num_verts-1; i < num_verts; j=i++) { + if (verts[i].type == STBTT_vline) { + float x0 = verts[i].x*scale_x, y0 = verts[i].y*scale_y; + float x1 = verts[j].x*scale_x, y1 = verts[j].y*scale_y; + float dist = (float) STBTT_sqrt((x1-x0)*(x1-x0) + (y1-y0)*(y1-y0)); + precompute[i] = (dist < eps) ? 0.0f : 1.0f / dist; + } else if (verts[i].type == STBTT_vcurve) { + float x2 = verts[j].x *scale_x, y2 = verts[j].y *scale_y; + float x1 = verts[i].cx*scale_x, y1 = verts[i].cy*scale_y; + float x0 = verts[i].x *scale_x, y0 = verts[i].y *scale_y; + float bx = x0 - 2*x1 + x2, by = y0 - 2*y1 + y2; + float len2 = bx*bx + by*by; + if (len2 >= eps2) + precompute[i] = 1.0f / len2; + else + precompute[i] = 0.0f; + } else + precompute[i] = 0.0f; + } + + for (y=iy0; y < iy1; ++y) { + for (x=ix0; x < ix1; ++x) { + float val; + float min_dist = 999999.0f; + float sx = (float) x + 0.5f; + float sy = (float) y + 0.5f; + float x_gspace = (sx / scale_x); + float y_gspace = (sy / scale_y); + + int winding = stbtt__compute_crossings_x(x_gspace, y_gspace, num_verts, verts); // @OPTIMIZE: this could just be a rasterization, but needs to be line vs. non-tesselated curves so a new path + + for (i=0; i < num_verts; ++i) { + float x0 = verts[i].x*scale_x, y0 = verts[i].y*scale_y; + + if (verts[i].type == STBTT_vline && precompute[i] != 0.0f) { + float x1 = verts[i-1].x*scale_x, y1 = verts[i-1].y*scale_y; + + float dist,dist2 = (x0-sx)*(x0-sx) + (y0-sy)*(y0-sy); + if (dist2 < min_dist*min_dist) + min_dist = (float) STBTT_sqrt(dist2); + + // coarse culling against bbox + //if (sx > STBTT_min(x0,x1)-min_dist && sx < STBTT_max(x0,x1)+min_dist && + // sy > STBTT_min(y0,y1)-min_dist && sy < STBTT_max(y0,y1)+min_dist) + dist = (float) STBTT_fabs((x1-x0)*(y0-sy) - (y1-y0)*(x0-sx)) * precompute[i]; + STBTT_assert(i != 0); + if (dist < min_dist) { + // check position along line + // x' = x0 + t*(x1-x0), y' = y0 + t*(y1-y0) + // minimize (x'-sx)*(x'-sx)+(y'-sy)*(y'-sy) + float dx = x1-x0, dy = y1-y0; + float px = x0-sx, py = y0-sy; + // minimize (px+t*dx)^2 + (py+t*dy)^2 = px*px + 2*px*dx*t + t^2*dx*dx + py*py + 2*py*dy*t + t^2*dy*dy + // derivative: 2*px*dx + 2*py*dy + (2*dx*dx+2*dy*dy)*t, set to 0 and solve + float t = -(px*dx + py*dy) / (dx*dx + dy*dy); + if (t >= 0.0f && t <= 1.0f) + min_dist = dist; + } + } else if (verts[i].type == STBTT_vcurve) { + float x2 = verts[i-1].x *scale_x, y2 = verts[i-1].y *scale_y; + float x1 = verts[i ].cx*scale_x, y1 = verts[i ].cy*scale_y; + float box_x0 = STBTT_min(STBTT_min(x0,x1),x2); + float box_y0 = STBTT_min(STBTT_min(y0,y1),y2); + float box_x1 = STBTT_max(STBTT_max(x0,x1),x2); + float box_y1 = STBTT_max(STBTT_max(y0,y1),y2); + // coarse culling against bbox to avoid computing cubic unnecessarily + if (sx > box_x0-min_dist && sx < box_x1+min_dist && sy > box_y0-min_dist && sy < box_y1+min_dist) { + int num=0; + float ax = x1-x0, ay = y1-y0; + float bx = x0 - 2*x1 + x2, by = y0 - 2*y1 + y2; + float mx = x0 - sx, my = y0 - sy; + float res[3] = {0.f,0.f,0.f}; + float px,py,t,it,dist2; + float a_inv = precompute[i]; + if (a_inv == 0.0) { // if a_inv is 0, it's 2nd degree so use quadratic formula + float a = 3*(ax*bx + ay*by); + float b = 2*(ax*ax + ay*ay) + (mx*bx+my*by); + float c = mx*ax+my*ay; + if (STBTT_fabs(a) < eps2) { // if a is 0, it's linear + if (STBTT_fabs(b) >= eps2) { + res[num++] = -c/b; + } + } else { + float discriminant = b*b - 4*a*c; + if (discriminant < 0) + num = 0; + else { + float root = (float) STBTT_sqrt(discriminant); + res[0] = (-b - root)/(2*a); + res[1] = (-b + root)/(2*a); + num = 2; // don't bother distinguishing 1-solution case, as code below will still work + } + } + } else { + float b = 3*(ax*bx + ay*by) * a_inv; // could precompute this as it doesn't depend on sample point + float c = (2*(ax*ax + ay*ay) + (mx*bx+my*by)) * a_inv; + float d = (mx*ax+my*ay) * a_inv; + num = stbtt__solve_cubic(b, c, d, res); + } + dist2 = (x0-sx)*(x0-sx) + (y0-sy)*(y0-sy); + if (dist2 < min_dist*min_dist) + min_dist = (float) STBTT_sqrt(dist2); + + if (num >= 1 && res[0] >= 0.0f && res[0] <= 1.0f) { + t = res[0], it = 1.0f - t; + px = it*it*x0 + 2*t*it*x1 + t*t*x2; + py = it*it*y0 + 2*t*it*y1 + t*t*y2; + dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy); + if (dist2 < min_dist * min_dist) + min_dist = (float) STBTT_sqrt(dist2); + } + if (num >= 2 && res[1] >= 0.0f && res[1] <= 1.0f) { + t = res[1], it = 1.0f - t; + px = it*it*x0 + 2*t*it*x1 + t*t*x2; + py = it*it*y0 + 2*t*it*y1 + t*t*y2; + dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy); + if (dist2 < min_dist * min_dist) + min_dist = (float) STBTT_sqrt(dist2); + } + if (num >= 3 && res[2] >= 0.0f && res[2] <= 1.0f) { + t = res[2], it = 1.0f - t; + px = it*it*x0 + 2*t*it*x1 + t*t*x2; + py = it*it*y0 + 2*t*it*y1 + t*t*y2; + dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy); + if (dist2 < min_dist * min_dist) + min_dist = (float) STBTT_sqrt(dist2); + } + } + } + } + if (winding == 0) + min_dist = -min_dist; // if outside the shape, value is negative + val = onedge_value + pixel_dist_scale * min_dist; + if (val < 0) + val = 0; + else if (val > 255) + val = 255; + data[(y-iy0)*w+(x-ix0)] = (unsigned char) val; + } + } + STBTT_free(precompute, info->userdata); + STBTT_free(verts, info->userdata); + } + return data; +} + +STBTT_DEF unsigned char * stbtt_GetCodepointSDF(const stbtt_fontinfo *info, float scale, int codepoint, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff) +{ + return stbtt_GetGlyphSDF(info, scale, stbtt_FindGlyphIndex(info, codepoint), padding, onedge_value, pixel_dist_scale, width, height, xoff, yoff); +} + +STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata) +{ + STBTT_free(bitmap, userdata); +} + +////////////////////////////////////////////////////////////////////////////// +// +// font name matching -- recommended not to use this +// + +// check if a utf8 string contains a prefix which is the utf16 string; if so return length of matching utf8 string +static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(stbtt_uint8 *s1, stbtt_int32 len1, stbtt_uint8 *s2, stbtt_int32 len2) +{ + stbtt_int32 i=0; + + // convert utf16 to utf8 and compare the results while converting + while (len2) { + stbtt_uint16 ch = s2[0]*256 + s2[1]; + if (ch < 0x80) { + if (i >= len1) return -1; + if (s1[i++] != ch) return -1; + } else if (ch < 0x800) { + if (i+1 >= len1) return -1; + if (s1[i++] != 0xc0 + (ch >> 6)) return -1; + if (s1[i++] != 0x80 + (ch & 0x3f)) return -1; + } else if (ch >= 0xd800 && ch < 0xdc00) { + stbtt_uint32 c; + stbtt_uint16 ch2 = s2[2]*256 + s2[3]; + if (i+3 >= len1) return -1; + c = ((ch - 0xd800) << 10) + (ch2 - 0xdc00) + 0x10000; + if (s1[i++] != 0xf0 + (c >> 18)) return -1; + if (s1[i++] != 0x80 + ((c >> 12) & 0x3f)) return -1; + if (s1[i++] != 0x80 + ((c >> 6) & 0x3f)) return -1; + if (s1[i++] != 0x80 + ((c ) & 0x3f)) return -1; + s2 += 2; // plus another 2 below + len2 -= 2; + } else if (ch >= 0xdc00 && ch < 0xe000) { + return -1; + } else { + if (i+2 >= len1) return -1; + if (s1[i++] != 0xe0 + (ch >> 12)) return -1; + if (s1[i++] != 0x80 + ((ch >> 6) & 0x3f)) return -1; + if (s1[i++] != 0x80 + ((ch ) & 0x3f)) return -1; + } + s2 += 2; + len2 -= 2; + } + return i; +} + +static int stbtt_CompareUTF8toUTF16_bigendian_internal(char *s1, int len1, char *s2, int len2) +{ + return len1 == stbtt__CompareUTF8toUTF16_bigendian_prefix((stbtt_uint8*) s1, len1, (stbtt_uint8*) s2, len2); +} + +// returns results in whatever encoding you request... but note that 2-byte encodings +// will be BIG-ENDIAN... use stbtt_CompareUTF8toUTF16_bigendian() to compare +STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font, int *length, int platformID, int encodingID, int languageID, int nameID) +{ + stbtt_int32 i,count,stringOffset; + stbtt_uint8 *fc = font->data; + stbtt_uint32 offset = font->fontstart; + stbtt_uint32 nm = stbtt__find_table(fc, offset, "name"); + if (!nm) return NULL; + + count = ttUSHORT(fc+nm+2); + stringOffset = nm + ttUSHORT(fc+nm+4); + for (i=0; i < count; ++i) { + stbtt_uint32 loc = nm + 6 + 12 * i; + if (platformID == ttUSHORT(fc+loc+0) && encodingID == ttUSHORT(fc+loc+2) + && languageID == ttUSHORT(fc+loc+4) && nameID == ttUSHORT(fc+loc+6)) { + *length = ttUSHORT(fc+loc+8); + return (const char *) (fc+stringOffset+ttUSHORT(fc+loc+10)); + } + } + return NULL; +} + +static int stbtt__matchpair(stbtt_uint8 *fc, stbtt_uint32 nm, stbtt_uint8 *name, stbtt_int32 nlen, stbtt_int32 target_id, stbtt_int32 next_id) +{ + stbtt_int32 i; + stbtt_int32 count = ttUSHORT(fc+nm+2); + stbtt_int32 stringOffset = nm + ttUSHORT(fc+nm+4); + + for (i=0; i < count; ++i) { + stbtt_uint32 loc = nm + 6 + 12 * i; + stbtt_int32 id = ttUSHORT(fc+loc+6); + if (id == target_id) { + // find the encoding + stbtt_int32 platform = ttUSHORT(fc+loc+0), encoding = ttUSHORT(fc+loc+2), language = ttUSHORT(fc+loc+4); + + // is this a Unicode encoding? + if (platform == 0 || (platform == 3 && encoding == 1) || (platform == 3 && encoding == 10)) { + stbtt_int32 slen = ttUSHORT(fc+loc+8); + stbtt_int32 off = ttUSHORT(fc+loc+10); + + // check if there's a prefix match + stbtt_int32 matchlen = stbtt__CompareUTF8toUTF16_bigendian_prefix(name, nlen, fc+stringOffset+off,slen); + if (matchlen >= 0) { + // check for target_id+1 immediately following, with same encoding & language + if (i+1 < count && ttUSHORT(fc+loc+12+6) == next_id && ttUSHORT(fc+loc+12) == platform && ttUSHORT(fc+loc+12+2) == encoding && ttUSHORT(fc+loc+12+4) == language) { + slen = ttUSHORT(fc+loc+12+8); + off = ttUSHORT(fc+loc+12+10); + if (slen == 0) { + if (matchlen == nlen) + return 1; + } else if (matchlen < nlen && name[matchlen] == ' ') { + ++matchlen; + if (stbtt_CompareUTF8toUTF16_bigendian_internal((char*) (name+matchlen), nlen-matchlen, (char*)(fc+stringOffset+off),slen)) + return 1; + } + } else { + // if nothing immediately following + if (matchlen == nlen) + return 1; + } + } + } + + // @TODO handle other encodings + } + } + return 0; +} + +static int stbtt__matches(stbtt_uint8 *fc, stbtt_uint32 offset, stbtt_uint8 *name, stbtt_int32 flags) +{ + stbtt_int32 nlen = (stbtt_int32) STBTT_strlen((char *) name); + stbtt_uint32 nm,hd; + if (!stbtt__isfont(fc+offset)) return 0; + + // check italics/bold/underline flags in macStyle... + if (flags) { + hd = stbtt__find_table(fc, offset, "head"); + if ((ttUSHORT(fc+hd+44) & 7) != (flags & 7)) return 0; + } + + nm = stbtt__find_table(fc, offset, "name"); + if (!nm) return 0; + + if (flags) { + // if we checked the macStyle flags, then just check the family and ignore the subfamily + if (stbtt__matchpair(fc, nm, name, nlen, 16, -1)) return 1; + if (stbtt__matchpair(fc, nm, name, nlen, 1, -1)) return 1; + if (stbtt__matchpair(fc, nm, name, nlen, 3, -1)) return 1; + } else { + if (stbtt__matchpair(fc, nm, name, nlen, 16, 17)) return 1; + if (stbtt__matchpair(fc, nm, name, nlen, 1, 2)) return 1; + if (stbtt__matchpair(fc, nm, name, nlen, 3, -1)) return 1; + } + + return 0; +} + +static int stbtt_FindMatchingFont_internal(unsigned char *font_collection, char *name_utf8, stbtt_int32 flags) +{ + stbtt_int32 i; + for (i=0;;++i) { + stbtt_int32 off = stbtt_GetFontOffsetForIndex(font_collection, i); + if (off < 0) return off; + if (stbtt__matches((stbtt_uint8 *) font_collection, off, (stbtt_uint8*) name_utf8, flags)) + return off; + } +} + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-qual" +#endif + +STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset, + float pixel_height, unsigned char *pixels, int pw, int ph, + int first_char, int num_chars, stbtt_bakedchar *chardata) +{ + return stbtt_BakeFontBitmap_internal((unsigned char *) data, offset, pixel_height, pixels, pw, ph, first_char, num_chars, chardata); +} + +STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int index) +{ + return stbtt_GetFontOffsetForIndex_internal((unsigned char *) data, index); +} + +STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data) +{ + return stbtt_GetNumberOfFonts_internal((unsigned char *) data); +} + +STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data, int offset) +{ + return stbtt_InitFont_internal(info, (unsigned char *) data, offset); +} + +STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, const char *name, int flags) +{ + return stbtt_FindMatchingFont_internal((unsigned char *) fontdata, (char *) name, flags); +} + +STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2) +{ + return stbtt_CompareUTF8toUTF16_bigendian_internal((char *) s1, len1, (char *) s2, len2); +} + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic pop +#endif + +#endif // STB_TRUETYPE_IMPLEMENTATION + + +// FULL VERSION HISTORY +// +// 1.25 (2021-07-11) many fixes +// 1.24 (2020-02-05) fix warning +// 1.23 (2020-02-02) query SVG data for glyphs; query whole kerning table (but only kern not GPOS) +// 1.22 (2019-08-11) minimize missing-glyph duplication; fix kerning if both 'GPOS' and 'kern' are defined +// 1.21 (2019-02-25) fix warning +// 1.20 (2019-02-07) PackFontRange skips missing codepoints; GetScaleFontVMetrics() +// 1.19 (2018-02-11) OpenType GPOS kerning (horizontal only), STBTT_fmod +// 1.18 (2018-01-29) add missing function +// 1.17 (2017-07-23) make more arguments const; doc fix +// 1.16 (2017-07-12) SDF support +// 1.15 (2017-03-03) make more arguments const +// 1.14 (2017-01-16) num-fonts-in-TTC function +// 1.13 (2017-01-02) support OpenType fonts, certain Apple fonts +// 1.12 (2016-10-25) suppress warnings about casting away const with -Wcast-qual +// 1.11 (2016-04-02) fix unused-variable warning +// 1.10 (2016-04-02) allow user-defined fabs() replacement +// fix memory leak if fontsize=0.0 +// fix warning from duplicate typedef +// 1.09 (2016-01-16) warning fix; avoid crash on outofmem; use alloc userdata for PackFontRanges +// 1.08 (2015-09-13) document stbtt_Rasterize(); fixes for vertical & horizontal edges +// 1.07 (2015-08-01) allow PackFontRanges to accept arrays of sparse codepoints; +// allow PackFontRanges to pack and render in separate phases; +// fix stbtt_GetFontOFfsetForIndex (never worked for non-0 input?); +// fixed an assert() bug in the new rasterizer +// replace assert() with STBTT_assert() in new rasterizer +// 1.06 (2015-07-14) performance improvements (~35% faster on x86 and x64 on test machine) +// also more precise AA rasterizer, except if shapes overlap +// remove need for STBTT_sort +// 1.05 (2015-04-15) fix misplaced definitions for STBTT_STATIC +// 1.04 (2015-04-15) typo in example +// 1.03 (2015-04-12) STBTT_STATIC, fix memory leak in new packing, various fixes +// 1.02 (2014-12-10) fix various warnings & compile issues w/ stb_rect_pack, C++ +// 1.01 (2014-12-08) fix subpixel position when oversampling to exactly match +// non-oversampled; STBTT_POINT_SIZE for packed case only +// 1.00 (2014-12-06) add new PackBegin etc. API, w/ support for oversampling +// 0.99 (2014-09-18) fix multiple bugs with subpixel rendering (ryg) +// 0.9 (2014-08-07) support certain mac/iOS fonts without an MS platformID +// 0.8b (2014-07-07) fix a warning +// 0.8 (2014-05-25) fix a few more warnings +// 0.7 (2013-09-25) bugfix: subpixel glyph bug fixed in 0.5 had come back +// 0.6c (2012-07-24) improve documentation +// 0.6b (2012-07-20) fix a few more warnings +// 0.6 (2012-07-17) fix warnings; added stbtt_ScaleForMappingEmToPixels, +// stbtt_GetFontBoundingBox, stbtt_IsGlyphEmpty +// 0.5 (2011-12-09) bugfixes: +// subpixel glyph renderer computed wrong bounding box +// first vertex of shape can be off-curve (FreeSans) +// 0.4b (2011-12-03) fixed an error in the font baking example +// 0.4 (2011-12-01) kerning, subpixel rendering (tor) +// bugfixes for: +// codepoint-to-glyph conversion using table fmt=12 +// codepoint-to-glyph conversion using table fmt=4 +// stbtt_GetBakedQuad with non-square texture (Zer) +// updated Hello World! sample to use kerning and subpixel +// fixed some warnings +// 0.3 (2009-06-24) cmap fmt=12, compound shapes (MM) +// userdata, malloc-from-userdata, non-zero fill (stb) +// 0.2 (2009-03-11) Fix unsigned/signed char warnings +// 0.1 (2009-03-09) First public release +// + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright (c) 2017 Sean Barrett +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain (www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +------------------------------------------------------------------------------ +*/ diff --git a/3rdparty/tracy b/3rdparty/tracy new file mode 160000 index 000000000..00c079cec --- /dev/null +++ b/3rdparty/tracy @@ -0,0 +1 @@ +Subproject commit 00c079cec91e6a374519aa5719a073e7f4539c9d diff --git a/3rdparty/winpthread/CMakeLists.txt b/3rdparty/winpthread/CMakeLists.txt new file mode 100644 index 000000000..4b7c9c6e9 --- /dev/null +++ b/3rdparty/winpthread/CMakeLists.txt @@ -0,0 +1,8 @@ +if (MSVC AND CLANG) + +add_library(winpthread SHARED IMPORTED GLOBAL) + +set_target_properties(winpthread PROPERTIES IMPORTED_IMPLIB "${CMAKE_CURRENT_SOURCE_DIR}/lib/libwinpthread.dll.a") + +endif() + diff --git a/3rdparty/winpthread/COPYING b/3rdparty/winpthread/COPYING new file mode 100644 index 000000000..350770123 --- /dev/null +++ b/3rdparty/winpthread/COPYING @@ -0,0 +1,57 @@ +Copyright (c) 2011 mingw-w64 project + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + +/* + * Parts of this library are derived by: + * + * Posix Threads library for Microsoft Windows + * + * Use at own risk, there is no implied warranty to this code. + * It uses undocumented features of Microsoft Windows that can change + * at any time in the future. + * + * (C) 2010 Lockless Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Lockless Inc. nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AN + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ diff --git a/3rdparty/winpthread/bin/libwinpthread-1.dll b/3rdparty/winpthread/bin/libwinpthread-1.dll new file mode 100644 index 0000000000000000000000000000000000000000..f4ebd6381d6a57a36658d93dbe3e40ab14801f49 GIT binary patch literal 90084 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 DjIr6Z literal 0 HcmV?d00001 diff --git a/3rdparty/winpthread/include/pthread.h b/3rdparty/winpthread/include/pthread.h new file mode 100644 index 000000000..4c2affd36 --- /dev/null +++ b/3rdparty/winpthread/include/pthread.h @@ -0,0 +1,692 @@ +/* + Copyright (c) 2011-2016 mingw-w64 project + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +/* + * Parts of this library are derived by: + * + * Posix Threads library for Microsoft Windows + * + * Use at own risk, there is no implied warranty to this code. + * It uses undocumented features of Microsoft Windows that can change + * at any time in the future. + * + * (C) 2010 Lockless Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Lockless Inc. nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AN + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef WIN_PTHREADS_H +#define WIN_PTHREADS_H + +#include +#include +#include + +#include +#include +#include + +#include + +#include "pthread_compat.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define __WINPTHREADS_VERSION_MAJOR 0 +#define __WINPTHREADS_VERSION_MINOR 5 +#define __WINPTHREADS_VERSION_PATCHLEVEL 0 + +/* MSB 8-bit major version, 8-bit minor version, 16-bit patch level. */ +#define __WINPTHREADS_VERSION 0x00050000 + +#if defined DLL_EXPORT +#ifdef IN_WINPTHREAD +#define WINPTHREAD_API __declspec(dllexport) +#else +#define WINPTHREAD_API __declspec(dllimport) +#endif +#else +#define WINPTHREAD_API +#endif + +/* #define WINPTHREAD_DBG 1 */ + +/* Compatibility stuff: */ +#define RWLS_PER_THREAD 8 + +/* Error-codes. */ +#ifndef ETIMEDOUT +#define ETIMEDOUT 138 +#endif +#ifndef ENOTSUP +#define ENOTSUP 129 +#endif +#ifndef EWOULDBLOCK +#define EWOULDBLOCK 140 +#endif + +/* pthread specific defines. */ + +#define PTHREAD_CANCEL_DISABLE 0 +#define PTHREAD_CANCEL_ENABLE 0x01 + +#define PTHREAD_CANCEL_DEFERRED 0 +#define PTHREAD_CANCEL_ASYNCHRONOUS 0x02 + +#define PTHREAD_CREATE_JOINABLE 0 +#define PTHREAD_CREATE_DETACHED 0x04 + +#define PTHREAD_EXPLICIT_SCHED 0 +#define PTHREAD_INHERIT_SCHED 0x08 + +#define PTHREAD_SCOPE_PROCESS 0 +#define PTHREAD_SCOPE_SYSTEM 0x10 + +#define PTHREAD_DEFAULT_ATTR (PTHREAD_CANCEL_ENABLE) + +#define PTHREAD_CANCELED ((void *) (intptr_t) 0xDEADBEEF) + +#define _PTHREAD_NULL_THREAD ((pthread_t) 0) + +#define PTHREAD_ONCE_INIT 0 + +#define PTHREAD_DESTRUCTOR_ITERATIONS 256 +#define PTHREAD_KEYS_MAX (1<<20) + +#define PTHREAD_MUTEX_NORMAL 0 +#define PTHREAD_MUTEX_ERRORCHECK 1 +#define PTHREAD_MUTEX_RECURSIVE 2 +#define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL + +#define PTHREAD_MUTEX_SHARED 1 +#define PTHREAD_MUTEX_PRIVATE 0 + +#define PTHREAD_PRIO_NONE 0 +#define PTHREAD_PRIO_INHERIT 8 +#define PTHREAD_PRIO_PROTECT 16 +#define PTHREAD_PRIO_MULT 32 +#define PTHREAD_PROCESS_SHARED 1 +#define PTHREAD_PROCESS_PRIVATE 0 + +#define PTHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_NORMAL +#define PTHREAD_MUTEX_TIMED_NP PTHREAD_MUTEX_FAST_NP +#define PTHREAD_MUTEX_ADAPTIVE_NP PTHREAD_MUTEX_FAST_NP +#define PTHREAD_MUTEX_ERRORCHECK_NP PTHREAD_MUTEX_ERRORCHECK +#define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE + +void * WINPTHREAD_API pthread_timechange_handler_np(void * dummy); +int WINPTHREAD_API pthread_delay_np (const struct timespec *interval); +int WINPTHREAD_API pthread_num_processors_np(void); +int WINPTHREAD_API pthread_set_num_processors_np(int n); + +#define PTHREAD_BARRIER_SERIAL_THREAD 1 + +/* maximum number of times a read lock may be obtained */ +#define MAX_READ_LOCKS (INT_MAX - 1) + +/* No fork() in windows - so ignore this */ +#define pthread_atfork(F1,F2,F3) 0 + +/* unsupported stuff: */ +#define pthread_mutex_getprioceiling(M, P) ENOTSUP +#define pthread_mutex_setprioceiling(M, P) ENOTSUP +#define pthread_getcpuclockid(T, C) ENOTSUP +#define pthread_attr_getguardsize(A, S) ENOTSUP +#define pthread_attr_setgaurdsize(A, S) ENOTSUP + +typedef long pthread_once_t; +typedef unsigned pthread_mutexattr_t; +typedef unsigned pthread_key_t; +typedef void *pthread_barrierattr_t; +typedef int pthread_condattr_t; +typedef int pthread_rwlockattr_t; + +/* +struct _pthread_v; + +typedef struct pthread_t { + struct _pthread_v *p; + int x; +} pthread_t; +*/ + +typedef uintptr_t pthread_t; + +typedef struct _pthread_cleanup _pthread_cleanup; +struct _pthread_cleanup +{ + void (*func)(void *); + void *arg; + _pthread_cleanup *next; +}; + +#define pthread_cleanup_push(F, A)\ +{\ + const _pthread_cleanup _pthread_cup = {(F), (A), *pthread_getclean()};\ + __sync_synchronize();\ + *pthread_getclean() = (_pthread_cleanup *) &_pthread_cup;\ + __sync_synchronize() + +/* Note that if async cancelling is used, then there is a race here */ +#define pthread_cleanup_pop(E)\ + (*pthread_getclean() = _pthread_cup.next, ((E) ? (_pthread_cup.func((pthread_once_t *)_pthread_cup.arg)) : (void)0));} + +/* Windows doesn't have this, so declare it ourselves. */ +#ifndef _TIMESPEC_DEFINED +#define _TIMESPEC_DEFINED +struct timespec { + time_t tv_sec; /* Seconds */ + long tv_nsec; /* Nanoseconds */ +}; + +struct itimerspec { + struct timespec it_interval; /* Timer period */ + struct timespec it_value; /* Timer expiration */ +}; +#endif + +#ifndef SCHED_OTHER +/* Some POSIX realtime extensions, mostly stubbed */ +#define SCHED_OTHER 0 +#define SCHED_FIFO 1 +#define SCHED_RR 2 +#define SCHED_MIN SCHED_OTHER +#define SCHED_MAX SCHED_RR + +struct sched_param { + int sched_priority; +}; + +int WINPTHREAD_API sched_yield(void); +int WINPTHREAD_API sched_get_priority_min(int pol); +int WINPTHREAD_API sched_get_priority_max(int pol); +int WINPTHREAD_API sched_getscheduler(pid_t pid); +int WINPTHREAD_API sched_setscheduler(pid_t pid, int pol, const struct sched_param *param); + +#endif + +typedef struct pthread_attr_t pthread_attr_t; +struct pthread_attr_t +{ + unsigned p_state; + void *stack; + size_t s_size; + struct sched_param param; +}; + +int WINPTHREAD_API pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param); +int WINPTHREAD_API pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param); +int WINPTHREAD_API pthread_getschedparam(pthread_t thread, int *pol, struct sched_param *param); +int WINPTHREAD_API pthread_setschedparam(pthread_t thread, int pol, const struct sched_param *param); +int WINPTHREAD_API pthread_attr_setschedpolicy (pthread_attr_t *attr, int pol); +int WINPTHREAD_API pthread_attr_getschedpolicy (const pthread_attr_t *attr, int *pol); + +/* synchronization objects */ +typedef intptr_t pthread_spinlock_t; +typedef intptr_t pthread_mutex_t; +typedef intptr_t pthread_cond_t; +typedef intptr_t pthread_rwlock_t; +typedef void *pthread_barrier_t; + +#define PTHREAD_MUTEX_NORMAL 0 +#define PTHREAD_MUTEX_ERRORCHECK 1 +#define PTHREAD_MUTEX_RECURSIVE 2 + +#define GENERIC_INITIALIZER -1 +#define GENERIC_ERRORCHECK_INITIALIZER -2 +#define GENERIC_RECURSIVE_INITIALIZER -3 +#define GENERIC_NORMAL_INITIALIZER -1 +#define PTHREAD_MUTEX_INITIALIZER (pthread_mutex_t)GENERIC_INITIALIZER +#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER (pthread_mutex_t)GENERIC_RECURSIVE_INITIALIZER +#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER (pthread_mutex_t)GENERIC_ERRORCHECK_INITIALIZER +#define PTHREAD_NORMAL_MUTEX_INITIALIZER (pthread_mutex_t)GENERIC_NORMAL_INITIALIZER +#define PTHREAD_DEFAULT_MUTEX_INITIALIZER PTHREAD_NORMAL_MUTEX_INITIALIZER +#define PTHREAD_COND_INITIALIZER (pthread_cond_t)GENERIC_INITIALIZER +#define PTHREAD_RWLOCK_INITIALIZER (pthread_rwlock_t)GENERIC_INITIALIZER +#define PTHREAD_SPINLOCK_INITIALIZER (pthread_spinlock_t)GENERIC_INITIALIZER + +extern void WINPTHREAD_API (**_pthread_key_dest)(void *); +int WINPTHREAD_API pthread_key_create(pthread_key_t *key, void (* dest)(void *)); +int WINPTHREAD_API pthread_key_delete(pthread_key_t key); +void * WINPTHREAD_API pthread_getspecific(pthread_key_t key); +int WINPTHREAD_API pthread_setspecific(pthread_key_t key, const void *value); + +pthread_t WINPTHREAD_API pthread_self(void); +int WINPTHREAD_API pthread_once(pthread_once_t *o, void (*func)(void)); +void WINPTHREAD_API pthread_testcancel(void); +int WINPTHREAD_API pthread_equal(pthread_t t1, pthread_t t2); +void WINPTHREAD_API pthread_tls_init(void); +void WINPTHREAD_API _pthread_cleanup_dest(pthread_t t); +int WINPTHREAD_API pthread_get_concurrency(int *val); +int WINPTHREAD_API pthread_set_concurrency(int val); +void WINPTHREAD_API pthread_exit(void *res); +void WINPTHREAD_API _pthread_invoke_cancel(void); +int WINPTHREAD_API pthread_cancel(pthread_t t); +int WINPTHREAD_API pthread_kill(pthread_t t, int sig); +unsigned WINPTHREAD_API _pthread_get_state(const pthread_attr_t *attr, unsigned flag); +int WINPTHREAD_API _pthread_set_state(pthread_attr_t *attr, unsigned flag, unsigned val); +int WINPTHREAD_API pthread_setcancelstate(int state, int *oldstate); +int WINPTHREAD_API pthread_setcanceltype(int type, int *oldtype); +int WINPTHREAD_API pthread_create_wrapper(void *args); +int WINPTHREAD_API pthread_create(pthread_t *th, const pthread_attr_t *attr, void *(* func)(void *), void *arg); +int WINPTHREAD_API pthread_join(pthread_t t, void **res); +int WINPTHREAD_API pthread_detach(pthread_t t); +int WINPTHREAD_API pthread_setname_np(pthread_t thread, const char *name); +int WINPTHREAD_API pthread_getname_np(pthread_t thread, char *name, size_t len); + + +int WINPTHREAD_API pthread_rwlock_init(pthread_rwlock_t *rwlock_, const pthread_rwlockattr_t *attr); +int WINPTHREAD_API pthread_rwlock_wrlock(pthread_rwlock_t *l); +int WINPTHREAD_API pthread_rwlock_timedwrlock(pthread_rwlock_t *rwlock, const struct timespec *ts); +int WINPTHREAD_API pthread_rwlock_rdlock(pthread_rwlock_t *l); +int WINPTHREAD_API pthread_rwlock_timedrdlock(pthread_rwlock_t *l, const struct timespec *ts); +int WINPTHREAD_API pthread_rwlock_unlock(pthread_rwlock_t *l); +int WINPTHREAD_API pthread_rwlock_tryrdlock(pthread_rwlock_t *l); +int WINPTHREAD_API pthread_rwlock_trywrlock(pthread_rwlock_t *l); +int WINPTHREAD_API pthread_rwlock_destroy (pthread_rwlock_t *l); + +int WINPTHREAD_API pthread_cond_init(pthread_cond_t *cv, const pthread_condattr_t *a); +int WINPTHREAD_API pthread_cond_destroy(pthread_cond_t *cv); +int WINPTHREAD_API pthread_cond_signal (pthread_cond_t *cv); +int WINPTHREAD_API pthread_cond_broadcast (pthread_cond_t *cv); +int WINPTHREAD_API pthread_cond_wait (pthread_cond_t *cv, pthread_mutex_t *external_mutex); +int WINPTHREAD_API pthread_cond_timedwait(pthread_cond_t *cv, pthread_mutex_t *external_mutex, const struct timespec *t); +int WINPTHREAD_API pthread_cond_timedwait_relative_np(pthread_cond_t *cv, pthread_mutex_t *external_mutex, const struct timespec *t); + +int WINPTHREAD_API pthread_mutex_lock(pthread_mutex_t *m); +int WINPTHREAD_API pthread_mutex_timedlock(pthread_mutex_t *m, const struct timespec *ts); +int WINPTHREAD_API pthread_mutex_unlock(pthread_mutex_t *m); +int WINPTHREAD_API pthread_mutex_trylock(pthread_mutex_t *m); +int WINPTHREAD_API pthread_mutex_init(pthread_mutex_t *m, const pthread_mutexattr_t *a); +int WINPTHREAD_API pthread_mutex_destroy(pthread_mutex_t *m); + +int WINPTHREAD_API pthread_barrier_destroy(pthread_barrier_t *b); +int WINPTHREAD_API pthread_barrier_init(pthread_barrier_t *b, const void *attr, unsigned int count); +int WINPTHREAD_API pthread_barrier_wait(pthread_barrier_t *b); + +int WINPTHREAD_API pthread_spin_init(pthread_spinlock_t *l, int pshared); +int WINPTHREAD_API pthread_spin_destroy(pthread_spinlock_t *l); +/* No-fair spinlock due to lack of knowledge of thread number. */ +int WINPTHREAD_API pthread_spin_lock(pthread_spinlock_t *l); +int WINPTHREAD_API pthread_spin_trylock(pthread_spinlock_t *l); +int WINPTHREAD_API pthread_spin_unlock(pthread_spinlock_t *l); + +int WINPTHREAD_API pthread_attr_init(pthread_attr_t *attr); +int WINPTHREAD_API pthread_attr_destroy(pthread_attr_t *attr); +int WINPTHREAD_API pthread_attr_setdetachstate(pthread_attr_t *a, int flag); +int WINPTHREAD_API pthread_attr_getdetachstate(const pthread_attr_t *a, int *flag); +int WINPTHREAD_API pthread_attr_setinheritsched(pthread_attr_t *a, int flag); +int WINPTHREAD_API pthread_attr_getinheritsched(const pthread_attr_t *a, int *flag); +int WINPTHREAD_API pthread_attr_setscope(pthread_attr_t *a, int flag); +int WINPTHREAD_API pthread_attr_getscope(const pthread_attr_t *a, int *flag); +int WINPTHREAD_API pthread_attr_getstackaddr(const pthread_attr_t *attr, void **stack); +int WINPTHREAD_API pthread_attr_setstackaddr(pthread_attr_t *attr, void *stack); +int WINPTHREAD_API pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *size); +int WINPTHREAD_API pthread_attr_setstacksize(pthread_attr_t *attr, size_t size); + +int WINPTHREAD_API pthread_mutexattr_init(pthread_mutexattr_t *a); +int WINPTHREAD_API pthread_mutexattr_destroy(pthread_mutexattr_t *a); +int WINPTHREAD_API pthread_mutexattr_gettype(const pthread_mutexattr_t *a, int *type); +int WINPTHREAD_API pthread_mutexattr_settype(pthread_mutexattr_t *a, int type); +int WINPTHREAD_API pthread_mutexattr_getpshared(const pthread_mutexattr_t *a, int *type); +int WINPTHREAD_API pthread_mutexattr_setpshared(pthread_mutexattr_t * a, int type); +int WINPTHREAD_API pthread_mutexattr_getprotocol(const pthread_mutexattr_t *a, int *type); +int WINPTHREAD_API pthread_mutexattr_setprotocol(pthread_mutexattr_t *a, int type); +int WINPTHREAD_API pthread_mutexattr_getprioceiling(const pthread_mutexattr_t *a, int * prio); +int WINPTHREAD_API pthread_mutexattr_setprioceiling(pthread_mutexattr_t *a, int prio); +int WINPTHREAD_API pthread_getconcurrency(void); +int WINPTHREAD_API pthread_setconcurrency(int new_level); + +int WINPTHREAD_API pthread_condattr_destroy(pthread_condattr_t *a); +int WINPTHREAD_API pthread_condattr_init(pthread_condattr_t *a); +int WINPTHREAD_API pthread_condattr_getpshared(const pthread_condattr_t *a, int *s); +int WINPTHREAD_API pthread_condattr_setpshared(pthread_condattr_t *a, int s); + +#ifndef __clockid_t_defined +typedef int clockid_t; +#define __clockid_t_defined 1 +#endif /* __clockid_t_defined */ + +int WINPTHREAD_API pthread_condattr_getclock (const pthread_condattr_t *attr, + clockid_t *clock_id); +int WINPTHREAD_API pthread_condattr_setclock(pthread_condattr_t *attr, + clockid_t clock_id); +int WINPTHREAD_API __pthread_clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); + +int WINPTHREAD_API pthread_barrierattr_init(void **attr); +int WINPTHREAD_API pthread_barrierattr_destroy(void **attr); +int WINPTHREAD_API pthread_barrierattr_setpshared(void **attr, int s); +int WINPTHREAD_API pthread_barrierattr_getpshared(void **attr, int *s); + +/* Private extensions for analysis and internal use. */ +struct _pthread_cleanup ** WINPTHREAD_API pthread_getclean (void); +void * WINPTHREAD_API pthread_gethandle (pthread_t t); +void * WINPTHREAD_API pthread_getevent (); + +unsigned long long WINPTHREAD_API _pthread_rel_time_in_ms(const struct timespec *ts); +unsigned long long WINPTHREAD_API _pthread_time_in_ms(void); +unsigned long long WINPTHREAD_API _pthread_time_in_ms_from_timespec(const struct timespec *ts); +int WINPTHREAD_API _pthread_tryjoin (pthread_t t, void **res); +int WINPTHREAD_API pthread_rwlockattr_destroy(pthread_rwlockattr_t *a); +int WINPTHREAD_API pthread_rwlockattr_getpshared(pthread_rwlockattr_t *a, int *s); +int WINPTHREAD_API pthread_rwlockattr_init(pthread_rwlockattr_t *a); +int WINPTHREAD_API pthread_rwlockattr_setpshared(pthread_rwlockattr_t *a, int s); + +#ifndef SIG_BLOCK +#define SIG_BLOCK 0 +#endif +#ifndef SIG_UNBLOCK +#define SIG_UNBLOCK 1 +#endif +#ifndef SIG_SETMASK +#define SIG_SETMASK 2 +#endif + +#include + +#undef _POSIX_THREAD_DESTRUCTOR_ITERATIONS +#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS PTHREAD_DESTRUCTOR_ITERATIONS + +#undef _POSIX_THREAD_KEYS_MAX +#define _POSIX_THREAD_KEYS_MAX PTHREAD_KEYS_MAX + +#undef PTHREAD_THREADS_MAX +#define PTHREAD_THREADS_MAX 2019 + +#undef _POSIX_SEM_NSEMS_MAX +#define _POSIX_SEM_NSEMS_MAX 256 + +#undef SEM_NSEMS_MAX +#define SEM_NSEMS_MAX 1024 + +/* Wrap cancellation points. */ +#ifdef __WINPTRHEAD_ENABLE_WRAP_API +#define accept(...) (pthread_testcancel(), accept(__VA_ARGS__)) +#define aio_suspend(...) (pthread_testcancel(), aio_suspend(__VA_ARGS__)) +#define clock_nanosleep(...) (pthread_testcancel(), clock_nanosleep(__VA_ARGS__)) +#define close(...) (pthread_testcancel(), close(__VA_ARGS__)) +#define connect(...) (pthread_testcancel(), connect(__VA_ARGS__)) +#define creat(...) (pthread_testcancel(), creat(__VA_ARGS__)) +#define fcntl(...) (pthread_testcancel(), fcntl(__VA_ARGS__)) +#define fdatasync(...) (pthread_testcancel(), fdatasync(__VA_ARGS__)) +#define fsync(...) (pthread_testcancel(), fsync(__VA_ARGS__)) +#define getmsg(...) (pthread_testcancel(), getmsg(__VA_ARGS__)) +#define getpmsg(...) (pthread_testcancel(), getpmsg(__VA_ARGS__)) +#define lockf(...) (pthread_testcancel(), lockf(__VA_ARGS__)) +#define mg_receive(...) (pthread_testcancel(), mg_receive(__VA_ARGS__)) +#define mg_send(...) (pthread_testcancel(), mg_send(__VA_ARGS__)) +#define mg_timedreceive(...) (pthread_testcancel(), mg_timedreceive(__VA_ARGS__)) +#define mg_timessend(...) (pthread_testcancel(), mg_timedsend(__VA_ARGS__)) +#define msgrcv(...) (pthread_testcancel(), msgrecv(__VA_ARGS__)) +#define msgsnd(...) (pthread_testcancel(), msgsnd(__VA_ARGS__)) +#define msync(...) (pthread_testcancel(), msync(__VA_ARGS__)) +#define nanosleep(...) (pthread_testcancel(), nanosleep(__VA_ARGS__)) +#define open(...) (pthread_testcancel(), open(__VA_ARGS__)) +#define pause(...) (pthread_testcancel(), pause(__VA_ARGS__)) +#define poll(...) (pthread_testcancel(), poll(__VA_ARGS__)) +#define pread(...) (pthread_testcancel(), pread(__VA_ARGS__)) +#define pselect(...) (pthread_testcancel(), pselect(__VA_ARGS__)) +#define putmsg(...) (pthread_testcancel(), putmsg(__VA_ARGS__)) +#define putpmsg(...) (pthread_testcancel(), putpmsg(__VA_ARGS__)) +#define pwrite(...) (pthread_testcancel(), pwrite(__VA_ARGS__)) +#define read(...) (pthread_testcancel(), read(__VA_ARGS__)) +#define readv(...) (pthread_testcancel(), readv(__VA_ARGS__)) +#define recv(...) (pthread_testcancel(), recv(__VA_ARGS__)) +#define recvfrom(...) (pthread_testcancel(), recvfrom(__VA_ARGS__)) +#define recvmsg(...) (pthread_testcancel(), recvmsg(__VA_ARGS__)) +#define select(...) (pthread_testcancel(), select(__VA_ARGS__)) +#define sem_timedwait(...) (pthread_testcancel(), sem_timedwait(__VA_ARGS__)) +#define sem_wait(...) (pthread_testcancel(), sem_wait(__VA_ARGS__)) +#define send(...) (pthread_testcancel(), send(__VA_ARGS__)) +#define sendmsg(...) (pthread_testcancel(), sendmsg(__VA_ARGS__)) +#define sendto(...) (pthread_testcancel(), sendto(__VA_ARGS__)) +#define sigpause(...) (pthread_testcancel(), sigpause(__VA_ARGS__)) +#define sigsuspend(...) (pthread_testcancel(), sigsuspend(__VA_ARGS__)) +#define sigwait(...) (pthread_testcancel(), sigwait(__VA_ARGS__)) +#define sigwaitinfo(...) (pthread_testcancel(), sigwaitinfo(__VA_ARGS__)) +#define sleep(...) (pthread_testcancel(), sleep(__VA_ARGS__)) +//#define Sleep(...) (pthread_testcancel(), Sleep(__VA_ARGS__)) +#define system(...) (pthread_testcancel(), system(__VA_ARGS__)) +#define access(...) (pthread_testcancel(), access(__VA_ARGS__)) +#define asctime(...) (pthread_testcancel(), asctime(__VA_ARGS__)) +#define catclose(...) (pthread_testcancel(), catclose(__VA_ARGS__)) +#define catgets(...) (pthread_testcancel(), catgets(__VA_ARGS__)) +#define catopen(...) (pthread_testcancel(), catopen(__VA_ARGS__)) +#define closedir(...) (pthread_testcancel(), closedir(__VA_ARGS__)) +#define closelog(...) (pthread_testcancel(), closelog(__VA_ARGS__)) +#define ctermid(...) (pthread_testcancel(), ctermid(__VA_ARGS__)) +#define ctime(...) (pthread_testcancel(), ctime(__VA_ARGS__)) +#define dbm_close(...) (pthread_testcancel(), dbm_close(__VA_ARGS__)) +#define dbm_delete(...) (pthread_testcancel(), dbm_delete(__VA_ARGS__)) +#define dbm_fetch(...) (pthread_testcancel(), dbm_fetch(__VA_ARGS__)) +#define dbm_nextkey(...) (pthread_testcancel(), dbm_nextkey(__VA_ARGS__)) +#define dbm_open(...) (pthread_testcancel(), dbm_open(__VA_ARGS__)) +#define dbm_store(...) (pthread_testcancel(), dbm_store(__VA_ARGS__)) +#define dlclose(...) (pthread_testcancel(), dlclose(__VA_ARGS__)) +#define dlopen(...) (pthread_testcancel(), dlopen(__VA_ARGS__)) +#define endgrent(...) (pthread_testcancel(), endgrent(__VA_ARGS__)) +#define endhostent(...) (pthread_testcancel(), endhostent(__VA_ARGS__)) +#define endnetent(...) (pthread_testcancel(), endnetent(__VA_ARGS__)) +#define endprotoent(...) (pthread_testcancel(), endprotoend(__VA_ARGS__)) +#define endpwent(...) (pthread_testcancel(), endpwent(__VA_ARGS__)) +#define endservent(...) (pthread_testcancel(), endservent(__VA_ARGS__)) +#define endutxent(...) (pthread_testcancel(), endutxent(__VA_ARGS__)) +#define fclose(...) (pthread_testcancel(), fclose(__VA_ARGS__)) +#define fflush(...) (pthread_testcancel(), fflush(__VA_ARGS__)) +#define fgetc(...) (pthread_testcancel(), fgetc(__VA_ARGS__)) +#define fgetpos(...) (pthread_testcancel(), fgetpos(__VA_ARGS__)) +#define fgets(...) (pthread_testcancel(), fgets(__VA_ARGS__)) +#define fgetwc(...) (pthread_testcancel(), fgetwc(__VA_ARGS__)) +#define fgetws(...) (pthread_testcancel(), fgetws(__VA_ARGS__)) +#define fmtmsg(...) (pthread_testcancel(), fmtmsg(__VA_ARGS__)) +#define fopen(...) (pthread_testcancel(), fopen(__VA_ARGS__)) +#define fpathconf(...) (pthread_testcancel(), fpathconf(__VA_ARGS__)) +#define fprintf(...) (pthread_testcancel(), fprintf(__VA_ARGS__)) +#define fputc(...) (pthread_testcancel(), fputc(__VA_ARGS__)) +#define fputs(...) (pthread_testcancel(), fputs(__VA_ARGS__)) +#define fputwc(...) (pthread_testcancel(), fputwc(__VA_ARGS__)) +#define fputws(...) (pthread_testcancel(), fputws(__VA_ARGS__)) +#define fread(...) (pthread_testcancel(), fread(__VA_ARGS__)) +#define freopen(...) (pthread_testcancel(), freopen(__VA_ARGS__)) +#define fscanf(...) (pthread_testcancel(), fscanf(__VA_ARGS__)) +#define fseek(...) (pthread_testcancel(), fseek(__VA_ARGS__)) +#define fseeko(...) (pthread_testcancel(), fseeko(__VA_ARGS__)) +#define fsetpos(...) (pthread_testcancel(), fsetpos(__VA_ARGS__)) +#define fstat(...) (pthread_testcancel(), fstat(__VA_ARGS__)) +#define ftell(...) (pthread_testcancel(), ftell(__VA_ARGS__)) +#define ftello(...) (pthread_testcancel(), ftello(__VA_ARGS__)) +#define ftw(...) (pthread_testcancel(), ftw(__VA_ARGS__)) +#define fwprintf(...) (pthread_testcancel(), fwprintf(__VA_ARGS__)) +#define fwrite(...) (pthread_testcancel(), fwrite(__VA_ARGS__)) +#define fwscanf(...) (pthread_testcancel(), fwscanf(__VA_ARGS__)) +#define getaddrinfo(...) (pthread_testcancel(), getaddrinfo(__VA_ARGS__)) +#define getc(...) (pthread_testcancel(), getc(__VA_ARGS__)) +#define getc_unlocked(...) (pthread_testcancel(), getc_unlocked(__VA_ARGS__)) +#define getchar(...) (pthread_testcancel(), getchar(__VA_ARGS__)) +#define getchar_unlocked(...) (pthread_testcancel(), getchar_unlocked(__VA_ARGS__)) +#define getcwd(...) (pthread_testcancel(), getcwd(__VA_ARGS__)) +#define getdate(...) (pthread_testcancel(), getdate(__VA_ARGS__)) +#define getgrent(...) (pthread_testcancel(), getgrent(__VA_ARGS__)) +#define getgrgid(...) (pthread_testcancel(), getgrgid(__VA_ARGS__)) +#define getgrgid_r(...) (pthread_testcancel(), getgrgid_r(__VA_ARGS__)) +#define gergrnam(...) (pthread_testcancel(), getgrnam(__VA_ARGS__)) +#define getgrnam_r(...) (pthread_testcancel(), getgrnam_r(__VA_ARGS__)) +#define gethostbyaddr(...) (pthread_testcancel(), gethostbyaddr(__VA_ARGS__)) +#define gethostbyname(...) (pthread_testcancel(), gethostbyname(__VA_ARGS__)) +#define gethostent(...) (pthread_testcancel(), gethostent(__VA_ARGS__)) +#define gethostid(...) (pthread_testcancel(), gethostid(__VA_ARGS__)) +#define gethostname(...) (pthread_testcancel(), gethostname(__VA_ARGS__)) +#define getlogin(...) (pthread_testcancel(), getlogin(__VA_ARGS__)) +#define getlogin_r(...) (pthread_testcancel(), getlogin_r(__VA_ARGS__)) +#define getnameinfo(...) (pthread_testcancel(), getnameinfo(__VA_ARGS__)) +#define getnetbyaddr(...) (pthread_testcancel(), getnetbyaddr(__VA_ARGS__)) +#define getnetbyname(...) (pthread_testcancel(), getnetbyname(__VA_ARGS__)) +#define getnetent(...) (pthread_testcancel(), getnetent(__VA_ARGS__)) +#define getopt(...) (pthread_testcancel(), getopt(__VA_ARGS__)) +#define getprotobyname(...) (pthread_testcancel(), getprotobyname(__VA_ARGS__)) +#define getprotobynumber(...) (pthread_testcancel(), getprotobynumber(__VA_ARGS__)) +#define getprotoent(...) (pthread_testcancel(), getprotoent(__VA_ARGS__)) +#define getpwent(...) (pthread_testcancel(), getpwent(__VA_ARGS__)) +#define getpwnam(...) (pthread_testcancel(), getpwnam(__VA_ARGS__)) +#define getpwnam_r(...) (pthread_testcancel(), getpwnam_r(__VA_ARGS__)) +#define getpwuid(...) (pthread_testcancel(), getpwuid(__VA_ARGS__)) +#define getpwuid_r(...) (pthread_testcancel(), getpwuid_r(__VA_ARGS__)) +#define gets(...) (pthread_testcancel(), gets(__VA_ARGS__)) +#define getservbyname(...) (pthread_testcancel(), getservbyname(__VA_ARGS__)) +#define getservbyport(...) (pthread_testcancel(), getservbyport(__VA_ARGS__)) +#define getservent(...) (pthread_testcancel(), getservent(__VA_ARGS__)) +#define getutxent(...) (pthread_testcancel(), getutxent(__VA_ARGS__)) +#define getutxid(...) (pthread_testcancel(), getutxid(__VA_ARGS__)) +#define getutxline(...) (pthread_testcancel(), getutxline(__VA_ARGS__)) +#undef getwc +#define getwc(...) (pthread_testcancel(), getwc(__VA_ARGS__)) +#undef getwchar +#define getwchar(...) (pthread_testcancel(), getwchar(__VA_ARGS__)) +#define getwd(...) (pthread_testcancel(), getwd(__VA_ARGS__)) +#define glob(...) (pthread_testcancel(), glob(__VA_ARGS__)) +#define iconv_close(...) (pthread_testcancel(), iconv_close(__VA_ARGS__)) +#define iconv_open(...) (pthread_testcancel(), iconv_open(__VA_ARGS__)) +#define ioctl(...) (pthread_testcancel(), ioctl(__VA_ARGS__)) +#define link(...) (pthread_testcancel(), link(__VA_ARGS__)) +#define localtime(...) (pthread_testcancel(), localtime(__VA_ARGS__)) +#define lseek(...) (pthread_testcancel(), lseek(__VA_ARGS__)) +#define lstat(...) (pthread_testcancel(), lstat(__VA_ARGS__)) +#define mkstemp(...) (pthread_testcancel(), mkstemp(__VA_ARGS__)) +#define nftw(...) (pthread_testcancel(), nftw(__VA_ARGS__)) +#define opendir(...) (pthread_testcancel(), opendir(__VA_ARGS__)) +#define openlog(...) (pthread_testcancel(), openlog(__VA_ARGS__)) +#define pathconf(...) (pthread_testcancel(), pathconf(__VA_ARGS__)) +#define pclose(...) (pthread_testcancel(), pclose(__VA_ARGS__)) +#define perror(...) (pthread_testcancel(), perror(__VA_ARGS__)) +#define popen(...) (pthread_testcancel(), popen(__VA_ARGS__)) +#define posix_fadvise(...) (pthread_testcancel(), posix_fadvise(__VA_ARGS__)) +#define posix_fallocate(...) (pthread_testcancel(), posix_fallocate(__VA_ARGS__)) +#define posix_madvise(...) (pthread_testcancel(), posix_madvise(__VA_ARGS__)) +#define posix_openpt(...) (pthread_testcancel(), posix_openpt(__VA_ARGS__)) +#define posix_spawn(...) (pthread_testcancel(), posix_spawn(__VA_ARGS__)) +#define posix_spawnp(...) (pthread_testcancel(), posix_spawnp(__VA_ARGS__)) +#define posix_trace_clear(...) (pthread_testcancel(), posix_trace_clear(__VA_ARGS__)) +#define posix_trace_close(...) (pthread_testcancel(), posix_trace_close(__VA_ARGS__)) +#define posix_trace_create(...) (pthread_testcancel(), posix_trace_create(__VA_ARGS__)) +#define posix_trace_create_withlog(...) (pthread_testcancel(), posix_trace_create_withlog(__VA_ARGS__)) +#define posix_trace_eventtypelist_getne(...) (pthread_testcancel(), posix_trace_eventtypelist_getne(__VA_ARGS__)) +#define posix_trace_eventtypelist_rewin(...) (pthread_testcancel(), posix_trace_eventtypelist_rewin(__VA_ARGS__)) +#define posix_trace_flush(...) (pthread_testcancel(), posix_trace_flush(__VA_ARGS__)) +#define posix_trace_get_attr(...) (pthread_testcancel(), posix_trace_get_attr(__VA_ARGS__)) +#define posix_trace_get_filter(...) (pthread_testcancel(), posix_trace_get_filter(__VA_ARGS__)) +#define posix_trace_get_status(...) (pthread_testcancel(), posix_trace_get_status(__VA_ARGS__)) +#define posix_trace_getnext_event(...) (pthread_testcancel(), posix_trace_getnext_event(__VA_ARGS__)) +#define posix_trace_open(...) (pthread_testcancel(), posix_trace_open(__VA_ARGS__)) +#define posix_trace_rewind(...) (pthread_testcancel(), posix_trace_rewind(__VA_ARGS__)) +#define posix_trace_setfilter(...) (pthread_testcancel(), posix_trace_setfilter(__VA_ARGS__)) +#define posix_trace_shutdown(...) (pthread_testcancel(), posix_trace_shutdown(__VA_ARGS__)) +#define posix_trace_timedgetnext_event(...) (pthread_testcancel(), posix_trace_timedgetnext_event(__VA_ARGS__)) +#define posix_typed_mem_open(...) (pthread_testcancel(), posix_typed_mem_open(__VA_ARGS__)) +#define printf(...) (pthread_testcancel(), printf(__VA_ARGS__)) +#define putc(...) (pthread_testcancel(), putc(__VA_ARGS__)) +#define putc_unlocked(...) (pthread_testcancel(), putc_unlocked(__VA_ARGS__)) +#define putchar(...) (pthread_testcancel(), putchar(__VA_ARGS__)) +#define putchar_unlocked(...) (pthread_testcancel(), putchar_unlocked(__VA_ARGS__)) +#define puts(...) (pthread_testcancel(), puts(__VA_ARGS__)) +#define pututxline(...) (pthread_testcancel(), pututxline(__VA_ARGS__)) +#undef putwc +#define putwc(...) (pthread_testcancel(), putwc(__VA_ARGS__)) +#undef putwchar +#define putwchar(...) (pthread_testcancel(), putwchar(__VA_ARGS__)) +#define readdir(...) (pthread_testcancel(), readdir(__VA_ARSG__)) +#define readdir_r(...) (pthread_testcancel(), readdir_r(__VA_ARGS__)) +#define remove(...) (pthread_testcancel(), remove(__VA_ARGS__)) +#define rename(...) (pthread_testcancel(), rename(__VA_ARGS__)) +#define rewind(...) (pthread_testcancel(), rewind(__VA_ARGS__)) +#define rewinddir(...) (pthread_testcancel(), rewinddir(__VA_ARGS__)) +#define scanf(...) (pthread_testcancel(), scanf(__VA_ARGS__)) +#define seekdir(...) (pthread_testcancel(), seekdir(__VA_ARGS__)) +#define semop(...) (pthread_testcancel(), semop(__VA_ARGS__)) +#define setgrent(...) (pthread_testcancel(), setgrent(__VA_ARGS__)) +#define sethostent(...) (pthread_testcancel(), sethostemt(__VA_ARGS__)) +#define setnetent(...) (pthread_testcancel(), setnetent(__VA_ARGS__)) +#define setprotoent(...) (pthread_testcancel(), setprotoent(__VA_ARGS__)) +#define setpwent(...) (pthread_testcancel(), setpwent(__VA_ARGS__)) +#define setservent(...) (pthread_testcancel(), setservent(__VA_ARGS__)) +#define setutxent(...) (pthread_testcancel(), setutxent(__VA_ARGS__)) +#define stat(...) (pthread_testcancel(), stat(__VA_ARGS__)) +#define strerror(...) (pthread_testcancel(), strerror(__VA_ARGS__)) +#define strerror_r(...) (pthread_testcancel(), strerror_r(__VA_ARGS__)) +#define strftime(...) (pthread_testcancel(), strftime(__VA_ARGS__)) +#define symlink(...) (pthread_testcancel(), symlink(__VA_ARGS__)) +#define sync(...) (pthread_testcancel(), sync(__VA_ARGS__)) +#define syslog(...) (pthread_testcancel(), syslog(__VA_ARGS__)) +#define tmpfile(...) (pthread_testcancel(), tmpfile(__VA_ARGS__)) +#define tmpnam(...) (pthread_testcancel(), tmpnam(__VA_ARGS__)) +#define ttyname(...) (pthread_testcancel(), ttyname(__VA_ARGS__)) +#define ttyname_r(...) (pthread_testcancel(), ttyname_r(__VA_ARGS__)) +#define tzset(...) (pthread_testcancel(), tzset(__VA_ARGS__)) +#define ungetc(...) (pthread_testcancel(), ungetc(__VA_ARGS__)) +#define ungetwc(...) (pthread_testcancel(), ungetwc(__VA_ARGS__)) +#define unlink(...) (pthread_testcancel(), unlink(__VA_ARGS__)) +#define vfprintf(...) (pthread_testcancel(), vfprintf(__VA_ARGS__)) +#define vfwprintf(...) (pthread_testcancel(), vfwprintf(__VA_ARGS__)) +#define vprintf(...) (pthread_testcancel(), vprintf(__VA_ARGS__)) +#define vwprintf(...) (pthread_testcancel(), vwprintf(__VA_ARGS__)) +#define wcsftime(...) (pthread_testcancel(), wcsftime(__VA_ARGS__)) +#define wordexp(...) (pthread_testcancel(), wordexp(__VA_ARGS__)) +#define wprintf(...) (pthread_testcancel(), wprintf(__VA_ARGS__)) +#define wscanf(...) (pthread_testcancel(), wscanf(__VA_ARGS__)) +#endif + +/* We deal here with a gcc issue for posix threading on Windows. + We would need to change here gcc's gthr-posix.h header, but this + got rejected. So we deal it within this header. */ +#ifdef _GTHREAD_USE_MUTEX_INIT_FUNC +#undef _GTHREAD_USE_MUTEX_INIT_FUNC +#endif +#define _GTHREAD_USE_MUTEX_INIT_FUNC 1 + +#ifdef __cplusplus +} +#endif + +#endif /* WIN_PTHREADS_H */ diff --git a/3rdparty/winpthread/include/pthread_compat.h b/3rdparty/winpthread/include/pthread_compat.h new file mode 100644 index 000000000..63f5f495f --- /dev/null +++ b/3rdparty/winpthread/include/pthread_compat.h @@ -0,0 +1,86 @@ +/* + Copyright (c) 2011-2016 mingw-w64 project + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +/* + * Parts of this library are derived by: + * + * Posix Threads library for Microsoft Windows + * + * Use at own risk, there is no implied warranty to this code. + * It uses undocumented features of Microsoft Windows that can change + * at any time in the future. + * + * (C) 2010 Lockless Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Lockless Inc. nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AN + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef WIN_PTHREADS_PTHREAD_COMPAT_H +#define WIN_PTHREADS_PTHREAD_COMPAT_H + +#ifdef __GNUC__ + +#define WINPTHREADS_INLINE inline +#define WINPTHREADS_ATTRIBUTE(X) __attribute__(X) +#define WINPTHREADS_SECTION(X) __section__(X) + +#elif _MSC_VER + +#include "pthread_time.h" + +#ifdef _WIN64 +typedef __int64 pid_t; +#else +typedef int pid_t; +#endif +typedef int clockid_t; + +#define WINPTHREADS_INLINE __inline +#define WINPTHREADS_ATTRIBUTE(X) __declspec X +#define WINPTHREADS_SECTION(X) allocate(X) + +#endif + +#endif diff --git a/3rdparty/winpthread/include/pthread_signal.h b/3rdparty/winpthread/include/pthread_signal.h new file mode 100644 index 000000000..42a50ae06 --- /dev/null +++ b/3rdparty/winpthread/include/pthread_signal.h @@ -0,0 +1,29 @@ +/* + Copyright (c) 2013-2016 mingw-w64 project + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +#ifndef WIN_PTHREADS_SIGNAL_H +#define WIN_PTHREADS_SIGNAL_H + +/* Windows has rudimentary signals support. */ +#define pthread_sigmask(H, S1, S2) 0 + +#endif /* WIN_PTHREADS_SIGNAL_H */ diff --git a/3rdparty/winpthread/include/pthread_time.h b/3rdparty/winpthread/include/pthread_time.h new file mode 100644 index 000000000..7a7538c39 --- /dev/null +++ b/3rdparty/winpthread/include/pthread_time.h @@ -0,0 +1,98 @@ +/* + Copyright (c) 2011-2016 mingw-w64 project + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +#include + +#ifndef WIN_PTHREADS_TIME_H +#define WIN_PTHREADS_TIME_H + +/* Posix timers are supported */ +#ifndef _POSIX_TIMERS +#define _POSIX_TIMERS 200809L +#endif + +/* Monotonic clocks are available. */ +#ifndef _POSIX_MONOTONIC_CLOCK +#define _POSIX_MONOTONIC_CLOCK 200809L +#endif + +/* CPU-time clocks are available. */ +#ifndef _POSIX_CPUTIME +#define _POSIX_CPUTIME 200809L +#endif + +/* Clock support in threads are available. */ +#ifndef _POSIX_THREAD_CPUTIME +#define _POSIX_THREAD_CPUTIME 200809L +#endif + +#ifndef __clockid_t_defined +typedef int clockid_t; +#define __clockid_t_defined 1 +#endif /* __clockid_t_defined */ + +#ifndef TIMER_ABSTIME +#define TIMER_ABSTIME 1 +#endif + +#ifndef CLOCK_REALTIME +#define CLOCK_REALTIME 0 +#endif + +#ifndef CLOCK_MONOTONIC +#define CLOCK_MONOTONIC 1 +#endif + +#ifndef CLOCK_PROCESS_CPUTIME_ID +#define CLOCK_PROCESS_CPUTIME_ID 2 +#endif + +#ifndef CLOCK_THREAD_CPUTIME_ID +#define CLOCK_THREAD_CPUTIME_ID 3 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Make sure we provide default for WINPTHREAD_API, if not defined. */ +#pragma push_macro("WINPTHREAD_API") +#ifndef WINPTHREAD_API +#define WINPTHREAD_API +#endif + +/* These should really be dllimport'ed if using winpthread dll */ +int __cdecl WINPTHREAD_API nanosleep(const struct timespec *request, struct timespec *remain); + +int __cdecl WINPTHREAD_API clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *request, struct timespec *remain); +int __cdecl WINPTHREAD_API clock_getres(clockid_t clock_id, struct timespec *res); +int __cdecl WINPTHREAD_API clock_gettime(clockid_t clock_id, struct timespec *tp); +int __cdecl WINPTHREAD_API clock_settime(clockid_t clock_id, const struct timespec *tp); + +#pragma pop_macro("WINPTHREAD_API") + +#ifdef __cplusplus +} +#endif + +#endif /* WIN_PTHREADS_TIME_H */ + diff --git a/3rdparty/winpthread/include/pthread_unistd.h b/3rdparty/winpthread/include/pthread_unistd.h new file mode 100644 index 000000000..646935344 --- /dev/null +++ b/3rdparty/winpthread/include/pthread_unistd.h @@ -0,0 +1,192 @@ +/* + Copyright (c) 2011-2016 mingw-w64 project + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +#ifndef WIN_PTHREADS_UNISTD_H +#define WIN_PTHREADS_UNISTD_H + +/* Set defines described by the POSIX Threads Extension (1003.1c-1995) */ +/* _SC_THREADS + Basic support for POSIX threads is available. The functions + + pthread_atfork(), + pthread_attr_destroy(), + pthread_attr_getdetachstate(), + pthread_attr_getschedparam(), + pthread_attr_init(), + pthread_attr_setdetachstate(), + pthread_attr_setschedparam(), + pthread_cancel(), + pthread_cleanup_push(), + pthread_cleanup_pop(), + pthread_cond_broadcast(), + pthread_cond_destroy(), + pthread_cond_init(), + pthread_cond_signal(), + pthread_cond_timedwait(), + pthread_cond_wait(), + pthread_condattr_destroy(), + pthread_condattr_init(), + pthread_create(), + pthread_detach(), + pthread_equal(), + pthread_exit(), + pthread_getspecific(), + pthread_join(, + pthread_key_create(), + pthread_key_delete(), + pthread_mutex_destroy(), + pthread_mutex_init(), + pthread_mutex_lock(), + pthread_mutex_trylock(), + pthread_mutex_unlock(), + pthread_mutexattr_destroy(), + pthread_mutexattr_init(), + pthread_once(), + pthread_rwlock_destroy(), + pthread_rwlock_init(), + pthread_rwlock_rdlock(), + pthread_rwlock_tryrdlock(), + pthread_rwlock_trywrlock(), + pthread_rwlock_unlock(), + pthread_rwlock_wrlock(), + pthread_rwlockattr_destroy(), + pthread_rwlockattr_init(), + pthread_self(), + pthread_setcancelstate(), + pthread_setcanceltype(), + pthread_setspecific(), + pthread_testcancel() + + are present. */ +#undef _POSIX_THREADS +#define _POSIX_THREADS 200112L + +/* _SC_READER_WRITER_LOCKS + This option implies the _POSIX_THREADS option. Conversely, under + POSIX 1003.1-2001 the _POSIX_THREADS option implies this option. + + The functions + pthread_rwlock_destroy(), + pthread_rwlock_init(), + pthread_rwlock_rdlock(), + pthread_rwlock_tryrdlock(), + pthread_rwlock_trywrlock(), + pthread_rwlock_unlock(), + pthread_rwlock_wrlock(), + pthread_rwlockattr_destroy(), + pthread_rwlockattr_init() + + are present. +*/ +#undef _POSIX_READER_WRITER_LOCKS +#define _POSIX_READER_WRITER_LOCKS 200112L + +/* _SC_SPIN_LOCKS + This option implies the _POSIX_THREADS and _POSIX_THREAD_SAFE_FUNCTIONS + options. The functions + + pthread_spin_destroy(), + pthread_spin_init(), + pthread_spin_lock(), + pthread_spin_trylock(), + pthread_spin_unlock() + + are present. */ +#undef _POSIX_SPIN_LOCKS +#define _POSIX_SPIN_LOCKS 200112L + +/* _SC_BARRIERS + This option implies the _POSIX_THREADS and _POSIX_THREAD_SAFE_FUNCTIONS + options. The functions + + pthread_barrier_destroy(), + pthread_barrier_init(), + pthread_barrier_wait(), + pthread_barrierattr_destroy(), + pthread_barrierattr_init() + + are present. +*/ +#undef _POSIX_BARRIERS +#define _POSIX_BARRIERS 200112L + +/* _SC_TIMEOUTS + The functions + + mq_timedreceive(), - not supported + mq_timedsend(), - not supported + posix_trace_timedgetnext_event(), - not supported + pthread_mutex_timedlock(), + pthread_rwlock_timedrdlock(), + pthread_rwlock_timedwrlock(), + sem_timedwait(), + + are present. */ +#undef _POSIX_TIMEOUTS +#define _POSIX_TIMEOUTS 200112L + +/* _SC_TIMERS - not supported + The functions + + clock_getres(), + clock_gettime(), + clock_settime(), + nanosleep(), + timer_create(), + timer_delete(), + timer_gettime(), + timer_getoverrun(), + timer_settime() + + are present. */ +/* #undef _POSIX_TIMERS */ + +/* _SC_CLOCK_SELECTION + This option implies the _POSIX_TIMERS option. The functions + + pthread_condattr_getclock(), + pthread_condattr_setclock(), + clock_nanosleep() + + are present. +*/ +#undef _POSIX_CLOCK_SELECTION +#define _POSIX_CLOCK_SELECTION 200112 + +/* _SC_SEMAPHORES + The include file is present. The functions + + sem_close(), + sem_destroy(), + sem_getvalue(), + sem_init(), + sem_open(), + sem_post(), + sem_trywait(), + sem_unlink(), + sem_wait() + + are present. */ +#undef _POSIX_SEMAPHORES +#define _POSIX_SEMAPHORES 200112 + +#endif /* WIN_PTHREADS_UNISTD_H */ diff --git a/3rdparty/winpthread/include/sched.h b/3rdparty/winpthread/include/sched.h new file mode 100644 index 000000000..e77bf4cc3 --- /dev/null +++ b/3rdparty/winpthread/include/sched.h @@ -0,0 +1,79 @@ +/* + Copyright (c) 2011-2016 mingw-w64 project + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +#include +#include +#include + +#include +#include +#include + +#include + +#ifndef WIN_PTHREADS_SCHED_H +#define WIN_PTHREADS_SCHED_H + +#ifndef SCHED_OTHER +/* Some POSIX realtime extensions, mostly stubbed */ +#define SCHED_OTHER 0 +#define SCHED_FIFO 1 +#define SCHED_RR 2 +#define SCHED_MIN SCHED_OTHER +#define SCHED_MAX SCHED_RR + +struct sched_param { + int sched_priority; +}; + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined DLL_EXPORT && !defined (WINPTHREAD_EXPORT_ALL_DEBUG) +#ifdef IN_WINPTHREAD +#define WINPTHREAD_SCHED_API __declspec(dllexport) +#else +#define WINPTHREAD_SCHED_API __declspec(dllimport) +#endif +#else +#define WINPTHREAD_SCHED_API +#endif + +int WINPTHREAD_SCHED_API sched_yield(void); +int WINPTHREAD_SCHED_API sched_get_priority_min(int pol); +int WINPTHREAD_SCHED_API sched_get_priority_max(int pol); +int WINPTHREAD_SCHED_API sched_getscheduler(pid_t pid); +int WINPTHREAD_SCHED_API sched_setscheduler(pid_t pid, int pol, const struct sched_param *param); + +#ifdef __cplusplus +} +#endif + +#endif + +#ifndef sched_rr_get_interval +#define sched_rr_get_interval(_p, _i) \ + ( errno = ENOTSUP, (int) -1 ) +#endif + +#endif /* WIN_PTHREADS_SCHED_H */ diff --git a/3rdparty/winpthread/include/semaphore.h b/3rdparty/winpthread/include/semaphore.h new file mode 100644 index 000000000..14cb70371 --- /dev/null +++ b/3rdparty/winpthread/include/semaphore.h @@ -0,0 +1,81 @@ +/* + Copyright (c) 2011-2016 mingw-w64 project + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +#ifndef WIN_PTHREADS_SEMAPHORE_H +#define WIN_PTHREADS_SEMAPHORE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined DLL_EXPORT && !defined (WINPTHREAD_EXPORT_ALL_DEBUG) +#ifdef IN_WINPTHREAD +#define WINPTHREAD_SEMA_API __declspec(dllexport) +#else +#define WINPTHREAD_SEMA_API __declspec(dllimport) +#endif +#else +#define WINPTHREAD_SEMA_API +#endif + +/* Set this to 0 to disable it */ +#define USE_SEM_CriticalSection_SpinCount 100 + +#define SEM_VALUE_MAX INT_MAX + +#ifndef _MODE_T_ +#define _MODE_T_ +typedef unsigned short mode_t; +#endif + +typedef void *sem_t; + +#define SEM_FAILED NULL + +int WINPTHREAD_SEMA_API sem_init(sem_t * sem, int pshared, unsigned int value); + +int WINPTHREAD_SEMA_API sem_destroy(sem_t *sem); + +int WINPTHREAD_SEMA_API sem_trywait(sem_t *sem); + +int WINPTHREAD_SEMA_API sem_wait(sem_t *sem); + +int WINPTHREAD_SEMA_API sem_timedwait(sem_t * sem, const struct timespec *t); + +int WINPTHREAD_SEMA_API sem_post(sem_t *sem); + +int WINPTHREAD_SEMA_API sem_post_multiple(sem_t *sem, int count); + +/* yes, it returns a semaphore (or SEM_FAILED) */ +sem_t * WINPTHREAD_SEMA_API sem_open(const char * name, int oflag, mode_t mode, unsigned int value); + +int WINPTHREAD_SEMA_API sem_close(sem_t * sem); + +int WINPTHREAD_SEMA_API sem_unlink(const char * name); + +int WINPTHREAD_SEMA_API sem_getvalue(sem_t * sem, int * sval); + +#ifdef __cplusplus +} +#endif + +#endif /* WIN_PTHREADS_SEMAPHORE_H */ diff --git a/3rdparty/winpthread/lib/libwinpthread.dll.a b/3rdparty/winpthread/lib/libwinpthread.dll.a new file mode 100644 index 0000000000000000000000000000000000000000..00844415900016c288c1286cacc4524d4409f67d GIT binary patch literal 88994 zcmeHQd(2$LbwA$%#c^H70RxUh%x7bWOO4s@X`2wop$>rr2qlC7rL5Px7k_K-x4Z1_ zXZ+E;OWpJ(p(twA3Pq8sMiGkAR;>_dxb*h} zkUW8Ykc|F?%engjNX}!qkv#RETt4y;0LjO2za*c$mdn$h1R%NaGM8Vz5rE`Zai1i= z{$(!D>;@qD^iy0u^9lgTZ{Ek{x4r^E^6Wg9&thJZ&tVyn{LX`1e)lf{NWO58%X8=x z$rr!Q<@XK&ko>`ix%}bR07#zS!{r6^f#l1d=kntB0Z9G?^N{>0?u+ElaepLV!Sf;c z>Kd1?eF=c%uduvH{^njTfBPH&$={(*Brjtgl5d>i^35**kofXlyL03iAIzvlA2y8%ePkA9H+;0Ij(;}`(Re?7zHf4&QVG6x5_ z)IJMyB$xg-m&Swa@B9Z9LY7fPmsB&*-xa&!yKk-Yr` zmv?*$=1AW87hK-;zc5E~0`(+!yvXIQZ7@gjzDKy+^E}Lvy#IS#?!O!6NFMlYE)V`2 z%#l2d=k@Tt-Oi~eJH5epZJ0INjfF z{n+SrJH4}-CQl&Uc(_@}CQ_KTv!1n!dYMKRgZ^mTSl{T5JA*EspFFskE-VWM?5z8P ztf!^3zhvL(8Q!qJlzuuJpKEqE^n=MH(zmnGc-Y_6b}3Rw+v@g5dRG2_)LP5hjm=Kh zZHs(b3fGRZG5fL6&4z}Nq2RW7LT+0_A#EFjVW&Urj5izW9a$Fa1km18y7Dy78|P!@ zL8U;_xI5BI)k>BLc!gVQ&EDy(fuC*kx6vEqhp4uZTD%6WX0MfXi`kSy*p3FB9znF< z5)gH1j5LI3nYmCI_GQK_-LTX^XQvw}0#qFGPL)hVGz_v<=kZRfP#gpuq0z1B+7Ft; z=DNdP>9iaa9qfyQyB7-0w$<;oHipBj*Ah2LiBeBy7jwKh5ciH-XQhtD&2ecKuGI20 zdK(x~hW%DH8uf=Gr$Y`KeGiq+HFT}Y)qUJ5W=siA!ikq`c^bQsluHP`oc$ zlF<9^L|ZR%u5XO9^Wt`KL=0Q+%;^Taky)6y^AG#ueyd-sfXp2To02_rFcNjJ?R2^j z9|}8BX7+v@mr&(4?st`pw{m5<3B7$ZEeMz>Fm_&EZj@h?N!1R7jr$C+G2<&Yb|7VD z??>RZ>@0-d$mwoIFyDpBv=^-f$5E(dY_t#fZpL(fJAzJ8YaXXGgX0Kgh%xVZemqeM zuJac9n=6FvnZ9h(8cE_0LP55HOh0su zZmn8Cw!PA6IYcAKG8YQXmbZ8dH$0w6o~~JD=dzx7-m;Rl1ijH=oq?{@^K`SOcoMLZ zwFIL@W9{6~id@-w`CMfr$v;nQG>bsVSemeCXX9pTtx!aHqO$2WH|+)-0*ogMI}R3X zOEd=q`CL_^G?NR*FQ5*~wJjnd8Sft~FfTE3?Ze@`p4&jJt|$d=iIMBr?&8#UAS?>GT~N%kaaGa2+)MK+i=Bw$ znismL6-N;l1D|bMXGfimuD3KTB+m-BhCCkA**S=4=yy976`=Ad z3wLe@O<`tc2F1Lc-dcu?7o)REPT4Ri=I7Ooi(U{1*DZ|P4gjz`2EJJe0=x1$8hYax zLQ{4f4ZW4K>^f2|`#Q2zb(Kt@cqMd`nc2RMcx2-uxesla6pyW6C3kk+ z!pQBuG1)l_Rj=9WkGfeV*h}@F)s;l(P_>f-&`jh1R1SW2#Z>+u3&PruNRt-BY-Ah= z4Oo(J3LiMMwsONtmI-*q7^)iUqsHUIK2rGjpIXrQ&Q-=zJ9|&%c|qQ6vM6)z6C`BGDbhi_lLfE#b5xy~C z^?A{Sf=*?@#$uxg8s$V0K1|a%J-}zAG1BbR)Rg3+TL!kWpJp24dv$kW%d_8wxIl)_#?mTFXeVCB8luiBmT&5 zX?Iv8?Zh9?ia+wZ{*wHe|1f&BZeBQqyY2`wvB=0O%0>+)iu)wc;?mhF0V<}Hz=TD`7iFPi$bU8Zs`S7#h zDOaMk*lKVy{^T_*_0sY#=hDvZtvm)UPmGe4x_-xUl+@8}A4;}pSE~voS7>%sD7n^c zXQAXqx1B@@-NB(KxxlVW-t~|9=_-)Cen`QC=SSC(@N^FTzOf zi2{vCD1{A2%~Akr@?l-9=A2E`{30uBY?`uLGG5fs9YLEy%|4#MK5K9reiLehCki$) z#en;8n`(wa3ej@kfYK(*jbnyJBz&4 zKCi``WvmT+HPtq)#;B^PuGZ|TYN~m+omEraKrW! zKZo)Z`l`X5_(^fc^hRN*knX|JYZDVn__N?88#hwmIEM-octR+L-yGxo~>` zBq-tMa`7nP-5{kEPL7hp6Qg8hfzOK3TQ0NK>irl)2~x>?gn9%>A$W^AM%6lR%2BUc zE&JttKs6IiUPALHSYH#3^&-VgtJ;=eMZ`z#}*ZB?7jkO_i!&1V)FkUyo9j8Db9Qt z_zWUG*Xc(*&d`{K(pg)+`YC`1Ub5rN5v)vooXif58>!-Cc58N3oXmc=oyEx`vz~>h)uE@FX1V=(kWZZmLamgeS1i8r+ZHJU$_COs@*4Dkwe3 znw&viNyvip&TD{Es&R|8=DS#A`DT%O+EWXYv(77vcFdZ!KCUO_ECo3$KUzdx#bS~k zs}ANV{64q?zr+AY=?#xkc5-!mT9}-bURkwU<;Ssh@zs3#NUf@xuVkc_9IZ#kc@>2i z2io|T93f`ae5-CdS@X@~K0<50bE@32FWO$SA=VhRj|vPoRr?W!#8!io_)|j1=~)3@ zZW|BQ0=VteW`_-RMbsi5c%5R!*d$MY5@X7v0a!gD=@*hGq>n0h6Ch9sCgB)|(wRBHp3SiC?j^GIsM{L-| z)ZmB@B4Mlk8Tj%HE@3^r3n83&s^JDEjzo9*^we;|BS#Gq80fG1C^6Rhi)63cb5tHa||Z2fv6tP>6}5FS|}N-C-&R6T$%PyKn&)zO42FUfUq zBSzFD{duzOjf;S3URkIzlpbV-u;cdZ>RGG%&Kk&4t0hlK-N)BhajZ&;F-+HaFcrX& zr)ULdY)tX>ccv&>u{%XyRY(tIy3&KJ0Jc2!8$(A&mSaWrSfkcHL_Te*7pA=57$cLz zGpkB;*?6!Pz@z7DFzIumW^Hudnt?UF1rjgQK%)?8Q#hklN5ocx2k@sBsEl=XZG`DQ z`<@O1xb-yO4o+)V0bkh=Ef+e;d^?3F_xmV($O&N6Qw<2d_j^o34XC}|11m%K+R`O9 zo*FQKXHPXCWHL%=rOkTC;*D4#HDJ*zvj()Z9&810?kSEz+l4KhG9d2uDT`y8XQe39 zZ7Q)=KN`Truh>1%vo_ke<-(fin#C4ztXR7)Z@8=0{P8@6zH0CYeu~zY7OjM5r9hJg z9+U-e^r;sSP8F_&c+Xg@=nCmY6Ub}_yXZ7km%_64qH_=TIrgD#* zm=ZbW(tHFc#)2s>Ef~i&SN|a7l z^Aq)>0Sx_eLRZ6a9rBk%P8qtYUWL-A)*IVp#x_pPm=t(IU$7Ql6r=y}*qN zSVHH)Q~+b2M#jU>7BLk$TOTqzH4jLRnLCEYgQozNK8@r;hOzKeC8$Gu-ikF&g^WAR zkt4ivk`Pi^jjSU9oO~Jq0S`-L;ke%{UNnV_fMA}O7~)ADkv=>JLZs((YJel2|uZ@mI7`wb*L#5dIXA*7nMTltb^qR{-ap@C6@|S7Lnw zUpB|y%ZkHL*ckF@z?bcni7$uVgRcPoeZ`Jnv(_8^pc`Le;6t=AY;PW}R17;I0vLYR zkegF6%)pTFtO91z#DlZ|Eo^M6JYqgd2s#f$Xd8?+iq947rgf{+FzM|i)ZaX=Nct7qVbVa`h%COeK z_F1Rf>79TR(^CMhV=bP?R59ZK%_)2e5MGr9Fsb+8D}bp_PXX{VZhVP`aJ12D zZ(c2iJq74Pn~lyO$I5A3+*1G{O?Xxj(UeVfR688N z>Zhjwcz+qzR0BBL$aZm00Ss@-yGqDuW**d~9s%+6#lNdZN#E;0o#?fTHM)iL2&hU@ zcvS{7srTS3phqCB(G2&P_-f?C(xZ)JA!{@3TTR*u@6U68C&1r3J;nBnEKR~f;$Un z63;->)0Pq*xoSMA^I$4~olm1v;XM*lXFJ_)ygk<;qf?nDCWLsB2RQ+3d#c;u4uza- zv(e7F*%(JR$BUqly6vp;sDL9)QH`e606smT3Epj>sWr@+(}kwoBO6UZ;XzXXPo8Qu zI3dw=rr+ts8=J>1ol}&ZbQw3 zKpb&zEEwg<9ux&|+-aTz9Me&xzm@^7NUS_}$UFx`lkSy;DMRT&RshqT;uE~XKvp+v zM$8KY#-|qZ#>Ns)_Mj+$^-g0?;5Hpa##?3LjZYzCPcS|iURj_rwbj^K3E;pJYYA_c z*vig#B5pl}u$Igd6GS}8gPah)+irW){9s?(dyCcvu4;QblGQ3&eyka`~v8`}FC z334RuZ{%i)x%L2e9L5oibQ(;%o}*Mnq6$-Kg{)d3wccxA7&WoJGq&guE?K z)`7ySk^m;v9&`n;>}ix8++v`s@njP__+o8!g^aQzRB>-?IOXXc90hRghwUfCJ16Mr z(?`Ws_4JjDinB)9Q4bMq{7a6;vwHfDx$R_6AN5^?_VgVxal~F)Mqp|Tk*pqf&Si{! zkGIwJHdb;vBXM7zLSHpFgP)=YhhfX@p#y9sh92}Kj$SK%{8_#J*v%!^hV~I_Gz%G> zXCe-&PzIj0JC_4E`t&|GIA|hk)H&V5aSZXIY8OEsH^rtr%XIW&2j~|w@MhUiPl_M4q)WdiimKNi6ilF6m4x6vLYg@?Sw~;z$8_k z$P~cAr*RJOlP0204g1Y@t2x5)p7GXp!EGqzl>=9r(u1r3CO(aGfCCCyO?=fPHJ_r5 zQ$gb#xHknP<%!h@S_z?8n+~7o) z)jFq>#*m$OSS02xFBM;&N`1v#%0`@x*C!VC@McaHHv{mhSd!9mH=14(3XbI2C zp(ZUnI16Cn6E6YR7jecr+oFwTA-qJ6FITsssq!Eygn?h4=iAAx?F*MN&zuReTvZr|7?uuC z+=IfF@~jMDnuP~v0i6Ac{iHZ+vth3-!C7k(mKFHnH_2A0{;S(i$2}!K+Y(95VAYllQW>|P|7Qor3F{$uo6K9N! zj1^lUV^UdN>7Z7%bPtXKnEJ$h!7dX=*q1wn+?U~%BT|`q557Wp`^0@+uQv6T6Pm95Ac!nS4SxL>v zUcJP5KhHeH#Q@$uabK{r1ZPvneMy{^abE?4>S(qQ!sOd6uvueRue4BR&_B^KtijwD zg2?d99nMS>57I)oe0#>ntRd|R3u!w4GhOwj?wK2ChJ^=b0c?I6uL^H6aV7>uMH|UN zMi(-kOL*h}mQ;BV6~Nlp>(+SHgE%I13uA;Yg+t@)JeyFOGsKksEtE^qhBo@D8n3!t zv#T1fy31{6jaS|0wv*#kx8eDOj#u3Qy=JdJ>Soy>S`=-k!p2Q8^kR$-rPgree9*k$ z&{1A_TJ8%0?E6A`N6H(4t*S>0H`7u<(PCzjcchq}aNHEqJh3K#abL7!&8)p6WqXbt zb#KPoGTKR@1veFQZsG~-vj)@~&9S1q(GjGjdN35gs;Bq^KarO@KJrXS{1Kk$=#gn2 z>;y38>CJGkO<`x4jpB_xle`&@#~#E9c~XE5OY$HmfEQ2iW`ZAwh8S!#9&VoLcYeg* zdTM#Y5o9NOP!zy=AGX`hv$ihCRt-hicE-tajrCFE@nL_xL3P<^khP+1Pm4DUs`k*m zMtf)t|0(#Cc~^v4sa-Yh>H$1>S``xB;JPw+y<#0TMe}ZHQ&_WCg>+youLhkO51s

W-O3a~0_J=h9hw-**HcAFUFGIpEph2mDmZWmeb zGIsmhxWf__++ep~MY|FfT(aB5$h?MPZuOVU|NP&NDNLQsHreEHrnnqGsa8P_zwk@v z`iW-01oG7-4wE(2lrn{_WKVmMDa;qX$2=E1Ygz$A9S#4mf3z$_N=?k1T7 z@AjwwD8pM%FK<17DNl1_utlQU7sXz#SaBuB1Sr7LJ@@_-dRUAeBDOh7Ec*Z`NilVZv8z&wCTaEW(cEk%lW + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. \ No newline at end of file diff --git a/LICENSES/Kyty-MIT.txt b/LICENSES/Kyty-MIT.txt new file mode 100644 index 000000000..0867cf0cb --- /dev/null +++ b/LICENSES/Kyty-MIT.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 InoriRus + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 000000000..429b99533 --- /dev/null +++ b/README.md @@ -0,0 +1,190 @@ +# KytyPS5 + +[![Platform](https://img.shields.io/badge/platform-Windows%20x64-0078D4.svg)](#system-requirements) +[![Status](https://img.shields.io/badge/status-early%20development-orange.svg)](#current-status) +[![License](https://img.shields.io/badge/license-GPL--2.0-blue.svg)](LICENSE) + +KytyPS5 is a free and open-source PlayStation 5 emulator written in C++ for Windows. It is based on +a heavily modified version of [Kyty](https://github.com/InoriRus/Kyty). The project is in an early +stage of development, so compatibility is limited and behavior may change significantly between +builds. + +> [!IMPORTANT] +> KytyPS5 is not affiliated with Sony Interactive Entertainment or PlayStation. The project does +> not distribute games or copyrighted system software. Use only game files that you have obtained +> legally. + +## Current Status + +KytyPS5 can boot 2D games and a selection of 3D games, including titles built with Unreal Engine +4/5, Unity, and custom engines. No external low-level emulation modules are currently required. + +Development is focused on compatibility and boot reliability. + +Linux support is planned, but Windows is the only supported platform at this time. + +## Bugs and Issues + +The project is in an early stage, so please be mindful when opening new issues. Expect crashes, +graphical glitches, low compatibility, and poor performance. + +## Screenshots + + + + + + + + + + +
+ Disgaea 6
+ Disgaea 6 running in KytyPS5 +
+ Dreaming Sarah
+ Dreaming Sarah running in KytyPS5 +
+ Minecraft Legends
+ Minecraft Legends running in KytyPS5 +
+ SILENT HILL: The Short Message
+ SILENT HILL: The Short Message running in KytyPS5 +
+ +## Contributing + +Testing games and submitting detailed bug reports are useful ways to contribute. Search existing +issues first, then use the **Game Emulation Bug Report** template and attach the complete log file. + +Code contributions should be focused, build successfully on Windows, and include relevant tests +where practical. Because KytyPS5 is still evolving quickly, consider opening an issue before +starting a large change. + +## Developer Information + +The PS5 graphics architecture is based on AMD RDNA 2. Use AMD's +[RDNA 2 Instruction Set Architecture Reference Guide (document 70648)](https://docs.amd.com/v/u/en-US/rdna2-shader-instruction-set-architecture) +as the primary instruction-encoding reference when working on shader decoding and recompilation. + +Important areas of the codebase: + +- [`src/graphics/shader/recompiler`](src/graphics/shader/recompiler) — instruction decoding, + intermediate representation, control flow, resource tracking, and SPIR-V emission +- [`src/graphics/guest_gpu`](src/graphics/guest_gpu) — PS5 (Prospero) GPU formats and command processing +- [`src/graphics/host_gpu`](src/graphics/host_gpu) — Vulkan host backend and resource management +- [`tests`](tests) — focused memory, shader, and resource-tracking regression tests + +The renderer targets Vulkan 1.3. Keep shader changes aligned with both the RDNA 2 ISA semantics and +the Vulkan/SPIR-V validation rules. + +## Building + +### System requirements + +- Windows 10 version 1803 +- A 64-bit x86 processor +- A Vulkan 1.3-capable GPU with current drivers + +### Build requirements + +- Git +- CMake 3.12 or newer +- Ninja +- Visual Studio 2022 or Build Tools 2022 with the **Desktop development with C++** workload and + **C++ Clang tools for Windows** component +- Qt 6 for MSVC 2022 64-bit, including Concurrent, Network, and Widgets +- Vulkan SDK 1.3 or newer + +The Microsoft C++ compiler (`cl.exe`) is not supported; use `clang-cl`. + +Open an **x64 Native Tools Command Prompt for Visual Studio 2022** (or the equivalent Developer +PowerShell), change to the repository root, and initialize the dependencies: + +```powershell +git submodule update --init --recursive +``` + +Configure the project. Replace the Qt path with the version installed on your system: + +```powershell +cmake -S src -B _Build/windows -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_PREFIX_PATH="C:/Qt/6.x.x/msvc2022_64" +``` + +Build the launcher and stage a runnable installation: + +```powershell +cmake --build _Build/windows --target launcher +cmake --install _Build/windows --prefix _Build/windows/install +``` + +The finished application and its runtime dependencies will be placed in +`_Build/windows/install`. + +### Visual Studio Code + +A ready-made Visual Studio Code setup is included in [`.vscode`](.vscode). It configures CMake +Tools to build the project with Ninja and `clang-cl` and provides launch profiles for both +`launcher.exe` and `kyty_emulator.exe`. + +Before using it: + +1. Install the **CMake Tools** and **C/C++** extensions in Visual Studio Code. +2. Update `CMAKE_PREFIX_PATH` in [`.vscode/settings.json`](.vscode/settings.json) to point to your + Qt 6 MSVC installation. +3. Update the `--game` path in [`.vscode/launch.json`](.vscode/launch.json) for the + **Debug kyty_emulator** profile. +4. Open the repository in an x64 Visual Studio developer environment, configure the CMake project, + and select a launch profile from **Run and Debug**. + +## Running + +Update your graphics driver before reporting rendering problems. + +To use the graphical launcher: + +```powershell +.\_Build\windows\install\launcher.exe +``` + +On first launch, add one or more game folders in the global settings. The launcher searches those +folders recursively for game directories containing `eboot.bin`. Select a detected game and run it +from the game list. + +The emulator can also be started directly with a legally obtained game directory or ELF file: + +```powershell +.\_Build\windows\install\kyty_emulator.exe --game "D:\Games\ExampleGame" +``` + +Run `kyty_emulator.exe --help` to see the available graphics, logging, validation, profiling, and +debugging options. + +### AI Use + +AI tools may be used for research, reverse engineering, and development assistance. Contributors +must fully understand, review, and test all code they submit and remain responsible for its +correctness. Repository communication, including pull-request descriptions, code comments, and +issue comments, must come from the human contributor rather than an autonomous AI agent. + +Pull requests that include AI-assisted or AI-generated work should disclose the scope of the AI +involvement and describe the human review and testing performed before submission. Unverified or +untested generated changes may be closed without review. + +## License + +KytyPS5 is licensed under the [GNU General Public License version 2](LICENSE) +(`GPL-2.0-only`). + +This project is based on the original [Kyty](https://github.com/InoriRus/Kyty), which was released +under the MIT License. Kyty's original copyright and license notice are preserved in +[`LICENSES/Kyty-MIT.txt`](LICENSES/Kyty-MIT.txt). Third-party components remain subject to the +licenses included with those components. + +## Special Thanks + +- [InoriRus/Kyty](https://github.com/InoriRus/Kyty) — KytyPS5 is based on a heavily modified version + of the original Kyty project. +- [shadps4-emu/shadPS4](https://github.com/shadps4-emu/shadPS4) — reference for memory-model + understanding and the AVPlayer implementation. diff --git a/docs/screenshots/.gitkeep b/docs/screenshots/.gitkeep new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/docs/screenshots/.gitkeep @@ -0,0 +1 @@ + diff --git a/docs/screenshots/ps5-01.png b/docs/screenshots/ps5-01.png new file mode 100644 index 0000000000000000000000000000000000000000..1152e3253aed922f57d2219255dfcedff281ada8 GIT binary patch literal 1653769 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%0DlKa@)+@oHqHRSlI&S?`JGkIosBG8q#BtN0Wx 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

=X3upB(G3|T#@*aCVVibRW11Qt=bwHG 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�X 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

5*=c@T-M526u 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

j}O_$SJqkWTuqvQo}sN` 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˦Il&<88L@?Qzi0 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�H-i!uG^iN2309C4yt($+d}^EiN?XxPX54;yzzI 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�o3FC^D>opM{h(z$uz>D< z$`9UW|Lu?X@q0sd4hsq^uCt?9lcX_euYry#D^QLI_HvemVX!?Q%S&0QjC1Mi#-cC( z>J`5Ht5;mzL{}Dz9Y5mf{rmj0e|o^<&75qC2zIN1!xg~+`Rk93tIj0X2~q4zsfc2N za3=Y<@Tuc!4E6cV98ZpX*%hidvtjdpSMtn;o*c$Agr64An_dGc%B>ET6+nM*FXIpH zWvC#3g}kd^(uiWEB^%2+SYuJv(vB0NlP^$EjWV-1^29Vw6D^Dr*5g@m*0dJsCu3vC z9AN+zd20GYI2^KQBW`pfzO)i^eK{6_)!&=sW5(Ht!8m6xvm6xKk?LAn&$;l{ShTV% zCWeK?R{OF0Rm0ZpBd#MXvUN?Tvy4#@S!oy*@VH-ad#~WVCnX1k1uc69FD7ugt@(|Y z+AN>K1@ySI3=6}!u-w|qczZkJ&27WeB4ea-S!J#iShu=oQXg@tWH6Mrz}OP3!CILB z_5*kZ)pdH0Kc0<(HPttN=2PfVu~{cH4uc(4_}wwalGtaR_UWLZQY`kvt$4lxl;)gVy`Lo;IRRvt?JRa#$8cAbnUs%>zQBP43!O}0o@#m=iUB_`Td|!!)DJUi!i@yhuQbJA1v2`w>BlrBVkS?<5 zRsp+=|K{Q(f8f_Q|)lW?Vuar*oN)nvPNbH6hccLxba)L@s$~n*xW^jNS9?)$!xbX4~Hm+VfhJ+0Y2;x{PtAmGm!NE9ZkQIyzaTOhkWX40v zgFUj%`^1YYB{savIU-@AARF{9VSoyR$?vkgQ*!xv)X{_>&Wf;3`}uGbG$!JC7oP z{rM{Xga~$N60K<^F{`UR8fitMXcW3M!|x6(Ax5zQo_x65;LVq)J`^6eEYsjskG(s}ON|R_!TgNP2SmWjY^w(*gUw5l$O(mxzCTvlX@Ac71 zgSgd%*us+!Ve@^^L$1Dy(UCkh+0sB!qH`lF>_$1d zpK;+gUgP|Cufw~az;Nt}wn8!&Lm4<8eE^R?5b+vKSrL5ko6zWB%ZO~eLev-$Hx8im z6OI9gxy3EF5W$+x`T|$}{#WQ;T_^6f z!6t4+u$|~?`1FvE{^_5ybMF!TexKc8NnXl*RID_Mi#^t^u5slzuhQ%(C^Ba~fjz_# z{hbl-{10!k`}n|-QYE>u6xNbkL$jOG>L!!v0*jEnd6_X7jd`+@Gt4A@>BxT}fZZ{E z^_G`j4xF~;t_T+0$T&Dn1Xp9D@xpk`PmZfNKELq1kK@zL`#$b?_V;vN)1fDa@eJXo z#q*}ek-@!G(M=Tw#eOFDq2cQ#07W~Z=%pmR7EzKAxp8$o8qp{W-(KCI=k}K;7!T{1 z7sd(kr^4rK={b2XBS3xBuU}4Q@|_8@6Ajnnd8j%0dKA{OZwfxjGd>=V84YrxNRy;; z4b4VlqVbR$dc;?I39t1UG$OD?MxKwzOWD`hSjC`>*~t_3ixi!-&~XbLH^g%Zps=KN z%t}0FDH>6hLviz6=2%l;ZHd;JR(pvkaw{-(#OA>8@ovEfTLoKVOW(PG?!}fXUCsBe zv{`LNq>=0kd>R+fAMNJ6wUzV1uHoT$#CADiR6vQwYK_*h{6#5I+#*hzL~&E^;cm}^r&FPQbi|Cx3eEZ{p40S88~mH zvYJe8OFD_?a}MKHlZ$#XF*uu_KQ9xhYD!Z73}27y>lT(P7Cb+1AD=n$PN#UDQAYHB z+R10-{?j#=(H3`2u{Iz*>T=G93dmn3_i9zAJ;??1JlF{_I!nr*jQW7#ZBOjN+o_z9 z7Ob~S-A<)FrA?<}PuHbti{oudETgg$ArtHQRd(#HDa}M&Zj6vpI+Ht9nl7 zAL8UTI~pQ;*nf|M*r@2aIU$8B8wDtBNojrkP6zE}P_hbG*-93B3K!6Ic+2r^cXmkm z(iVc0n8w6~Z`GcqBme#CR4LB}mg?_JtCgHO7?VX$mCa0BzdvK;UNg|DaW))61uL3; z-gS#qZl$-xspQdGyD_G41o5<0YLs)C9hNKdWR7@|T1x*S7*C|`QvbSLYgF)ST5lC3 zpQ;WTtzr@#GqNQ^Bij#3982L`L(7U_FOwX3o%okKtlM+g>!J=XowS+I*pXN~{Y0G|U9EFJ8$9rY~GZjaz-vRCi)AoOXJJ3qC&$rBMVsu96B zxjs80SUzVVg7>nLKYiHeXZt0O#)=iK_{v(s8|NFWb~TucJRhTgJRg%6a{N5dIwFc< zqR6|9jzK5vj4Y1_hRuQDVZUT^VAvU3@?R_uJ`ui6&b2j{x)Hrp(@70BF8MewX!p*s zv2=-4N7&(z;$WZh@DN+b4J*fuVeYNmI;KNh3>R3P3yx}8%*#{Css+p(O=A*XCt9a| z%|U&Y>In#A4^6>Sa^7xO#*Kv7PXq@_n993edE_B?7B1~{;_!!r1mzrw`e~QOn38ce zW^64itfG2Ls8$!0rr6np{x01M7udM+5^EPO(TJnTzOd7%7f>0ZtPHjjSJA_~pq~}w zrR*(*Dap5=Q0#4^8%?5xWuo5Vl>5vxVa|lO$3#kNu|+|?^%!%wM{?l`y44ZF)JHM~ zn~!MiZm~2P@WT0vG}ET6)!IB@su zzV#%`#W{fl#;2Vkk=+BeBLzJ<7zN>})})U3ZS~q*`05p!y{21P8nJwRgQaU5j+6|w zU_b*=3i&qK?k10aHez^KGT0yT@F%y(4##Mvh?QpbdWW^^D`<6&ST$(&5|-XrAnq&! zJ(u4e#bBG=AMcYLlw^Z~{X2W?K6%2y!4A2RJr^UTNwuP>W0o(jbNxU0cW7N$b+&Ba z;F0`U<6JSHM})QVr!?$8mN=?lH(z4ASY}`h+xH)_|745w{03`RFR-}2$oAuHiY%ub zWgOgjNVaI|Fbgr+<^2WUAm_=WI}FFefaDc& zw{ZKNk8QO-aN!AHzY3UYMR=VEu1MRXiC}-{7m~T*wdh15I3$6C^HXsqzo);CJD&Y5 zzmAVH``hEFa85XP8a!|M5MGZSD)_B|td~$OHAy=S;y95>pgiZCEqOUfcxCxT+HrG| z)_;dnH8Lv7izA__hGXnhS`|JYNj~+s)4zi_$Hen-ZjWcvMFlash2+Ynx9FO14IZ+lOOr_s47w;LzmcekG8O zP&z@!DN)=cZggn2R%mtBX?E5~TZ^bD#!@oQ`;3RXWc_VMgKe_m9{Koyq7Z`Hm|VsR zJH6j;rF~|4hkq`dot&(utY%4t>f=KyOxv}8&iC+>%GIP<6<0noF({*Hg;36VeqK%w zpHmp_kEcgKU!wf)L&Eq+5jYim{?-4}N7IlTW{F_yH11PY`l#elC{j03sFWggE~91D zuC%)aw?#s|u7ZgUpTPxmrNK%@nWz;RrPaM4Csj(r`cOM%$AF^-5a zZa-lkM@_~gA!meCb5N3JX-l%njIGzXSf+P5?crs}97*YWn8-d|H!0gwXkq)G7TyXK zNt}>GDH_eV$QhI&4PPgMC9ThaK<;X#e^r9iK*|ckL;361Bl+dYWncTSj$ywBT)X8I z6FH|#!&$t{SMkqDL*!QtCM;YH(F1|W~4Q~Hg|BSwrrcOqD!DBOeIga|(0;_qBc z(JHQH>>c{K;mz$KKiMt#=)lrIb7d*w#%j!!Ud%$OXvT^}E5_qPM#DptQu07*%@JhQ z>ETxgr)f)8RVqzpkk!FE1@{gNdzoce8VciA)cgV=+OeV?D`GAC-+gHc$nC&|*Z9RC7 zoM$J3tCai>k<%xjC&jJsA2oHZKby$BD)?b&^!f^|dhEtZ6^9HsbAF{PMVBAQ^ zwPKtX>^|M)>Q`Ro;*CqZ^B3>X-`!`tcfg~cybI%;MiQaRoMbR2JscAkhL(zHMKKMf zS^xeuR=;~4WfI~}lca??ZC|u6+mE>p&9>eDZrg;`Z~XvCg)yTVDZIB+@d1(uh7yqjIilbxV6dP&28R)f6V@%B(o*s z(hzqPXF@Zz^$;>GV=t4&P=M3pwA-ISzTt<1z2$cEDQ;s~r^=i`J2Z;!eC-cQ+l z^q9T9ez32xyu6ZIdHF22hQjYJ9JrMBgs?xJki1M2!8Tkq>_s{a5$q3wd~o^uNa2)l zc)bYkDudut9nb!jU&qC%pYu2>+~cJ4$KiR>)^Su`*6A`rkuNkTmzyN*lsJyTScZo~ zzSE5O-r@oaotKH+Lw`jzfL4;rWDEopHgI1ajIS=OKUP}YEJ|+?($9~nzQ=~+v&KyN z0=`#Ijo(2TlW;%T=Ofwq@+i0Wc5vyDV^3_07L^OPKw&jIWyD*9G5_~l@AANoNm>c5 zC?(5s7!SD0AzyD4yqcDjWrnp%#v~OpCM8pCRJugoJdf#IVrlgXoz)FmODiPp4pv#p zY>eIArg``Yjl;W)_U|(qY*S=?8gWcs%KpOR67KI8e6*AE;f`TwEO7*#M6=$6mwK9C zzSL&1DFoWlkd?!OT)dvVvz_syrx~~RE!*Xo0pnnF5?v@Ap<`LmoHQ3`bXMstUuJ3b z8jI^!>8z{}r6~r(aCpFQcZ>e^CWl*h>F+&Yxc`XpXqO@%V9K#PcNuXX9gKvNGF4!| z9}+|^byB+@2TnP6R?@93t?Q#evr zA@_=<+e3KX>hQ_r`59b5`}$S-5ZjV=sfa>3BRZegO7r#T+oMV$Eg>oVccrt?24swq za;4>`G|kzU=uZ9f9N9WEz!}9@3(IHRXKN<+5`~Cjz;=o~wFSc85#vT6;=^ z;c?wQXOHH?Ys}ZjA|#Z|*ZGO`={E7-UaoL;uzya#3MpKz4xVkRv$}w;ETyth>tvL% zqjKGB12^yWcB*WYDLqcxiLa~A&%;hu2jlD^b}K~<#_b>JX;eS5OqZ$Aq=>6f>s-A~ zm+fodYbdG1{5&MYhk1fGA|auqBzLZm<*Y1H(LjVERf)St^lzHj)PA3S{P68xeZ1_U?MXeQWpZ+?Td^r5yT9&)Wrunz0;1EOmH%Z2YH1hgjq-de zmLi(-`8+FpPBs`{JY=j9>3thevtu7Sl%ul5FxA=M^{po^prx->*8pkhS$wucu;{-U z3kz~`3U{s|9eoUD`lp9j!EsQNg>0Wa5gZdacgJ#H;PdykQJ4QT<$9*=fL{>7N8qGX za${JzDIjQn{TUL$K2PN?5}pYDd*_>u2u@~JwiyK@ZTZs&BmVUMm_wt9A|VzRBY1fw z=K5;F#f~Oc7Hg$Gc|In~hLlA<_hIz35O+Wtr8H5TlEe+-v`KCh!@_cy89v-8cyGJl z(aAvwT(#2)sIH4Iwbkc-w8qa^aGsHGZGtILjVAHpDmqR;$$pOjHXBnu{)F?9=7nC5PN(PgR)0>Fg}EPKZb=DWKUZF45O`mZvXZVIefY=d$@WRz6fzw zT1$}^40ron{Z5ySSK9pWx1TWBDntgQiIpaeBN|I?%K|s4B@do{;?+_VCF6cZHXc*t z;*LxRY}q5Y6~!!FT;-+z_&0vvdFl2<1*cqMgHWU{4ra%Zj&GGqnit?zOY8GoAUT4ZxNZ2W*lSgZqvvO z?I@BIJ;Ab%0hO!UYfe@jv-= z0QZ0YC*1qJA9Gk149bF$DJhJbP*9q*)uz#kX*4wPWaYO!l%sG{%CfS#80H)f4S8uM zuA5)|TRmR;Rtp~O^YO=U`+h>KB%euM3Stcnt$E@5SGn}P7b{(k`f%rMSX_d0m%wU@ zu_YfxWLcM={L7#6lYjXmaT{$6xwT|QNa4bIm(cRkk8xzMB_M*Goq0mnA5WUHMg-en ze3RqqTH>z@KHMKO6>s|bV_l@6$f>)^>G0XG`tSNVA5srLK8@h0aF3JDABX2jTgSTe>&i!UBhl>85EYhw5&GZrA5uRF0@%`Y8o+g6HOEh z#j~(r4R3Gd{Ajb_e&6tLJZ7sHkr_8m1Qunn7-dm9Mkh_u<|6Ih1r}CcV&&3TxbX7V zIDg|hYu97qwxTFuuv2pIuw?Jv9$UBHV*CEj*xP)M!@W<)hC3A5p^)ZATt%P8f<306 zwP(}$=f`q#<(o$MoL)WM&wqZmE@|ZpgLMmlFtOL!H^_wmQxQwAZC4 zH+&dQHjyfH*<7WmWS`Z8$Gmnt4o9_E2phZrP>&PV+v`$@mRU)BOPN!y9u<8EaU;KH z5$e-V-uv(nm2Rt9C^a>?e|8)72xEF}O8ETze{L`s8Y-bV zaT(3jGmbx+)b|W7puJ8*0?y~?ZB$oR)=4{fh?Zyd;4!Z)E7++Rq67IIqbCld{Rj7g zLE%;hPgBB@-mfl}c~C$8Nlk!BZT%;#xt(0c)!dd;js*2G_%u?k>>(VxImo)E{BiC` zWGQQUHScs>*&i5J4+)>n%m4CZTyvcFwjl^D~i5)X3Me^}Bc2?9=_|?;+&yWa? z+{-(DRQK|G^wNcAa{>KX;kXL@b;el?@aKuM%6ZoKpA*_&Nr^69y7XUdKiH|CI}yGE zsv`zO=|ok$PZNG{kqft;8MLcd&sOe9sr(=s-b~lee-@A-yLv#=XxcQm(T#Yy8=;kU z#4ALpB8nAJqG+a?G*+xMBVJrgQP#56FF45Iu(0fAmWTb4-LWAzia3ghv?h)s;y59W z8!~~OBt&sS6vZeld%nmUpVHF!6@~828RZBK?fxPi5k(Pk6q7`nW~6ARidHPEl1GIl zD=pdV9L2wNNPwk8@zsrl*H>d+T#Q+6YFe>IDa)`ZxI4Byu}wCXF4Brp$TG@L19BZfZyDWNMrrRp2`F#{(N21MIWSZ<`OEXcls^_OR!3!c@P(~6}j+1=e@@9+SY&!M|r zqGoflnplCjd$#Vu+ckiUr;1LR(8My>e#-dpfMQf%5e!kQN8D(W4En5=5v!yVayL>! zUPO)ro_uS!YFB&mR*2ig5puGk*Qb}&z1khi@9MkC+Z}5~q9RhQxOh3`##a|P|CJlG z*SaK)0=4@w?A?d`N3i`+R;Dhl0hYaw9`WeUKV_;Gj?cU_k$1NdKVE z;9$V8KN7o56r)ke)B8iRvD}pid2Gl{$*5m2J{&VT95Or@NZNxw!@~i?g8{?-kUSex zn$i*BqJxHxXz7@h8y8vs_H{a!*U@PV#R#@OfW14A?Mj=Q%%n6%Pa)}p zZedFc5e&=FNZ)2I(Vh0^3bkVtgK zFlFEc0laJdTAZ5AO#MD8+@;m^I7h{=heP0cT8^Pk_Ri+xF&!q;IAIzT7^@gr&1PQm z=etiiq$G-CVjW>h14T~H3|OY1gC(&d;_AezY~>XL}>=4-2-7jFFw5O0yvm zq(DV6QPQT-US(nRC01Yf5*J_l7T@^R%Y5(KE8KXg!PRpqFRrJ&xYlI(e2d1p4sojs zq?Ea$$cL2Wn9^hzD|-c36Vkp^DcK(p$WuQbj99My!Vkd|{Bh5!K1V-|Tzv$}#W^0; z)TuN;D67=4s^z@71U1RQ6AfX0RijqzGo4phUUe*SkJ4?}*7D0sGOfkBNmX$L)90&P z_w^(d?mOa2~9#u)dp)v>X%cc&+!{JKD&lhW{>jJ4!$!9e8aoWhT@Q=C0# zfsKZ(?q!~BwYpxV9zIVW>i?HEtBAAebG)vm?Q}Yh$WvLAP^MC%b>Gv(XVs59@ln+^ z%-jE}(uA^08Qz+Fjy_)r@u_^9_!bOfX_Tv91z(1=!}LoQzKqaPsu0Ol=*&tkZ{d|x zb&2a%SLLPA#5yL4QWBjIDYu8Q$;nMlVRCtS%%uxwczvC#@}^M_v6xAz(m$(|zLmv} zBxO#HnGm!7BlFzak?@{WuA?ehbnWX~mq~U7mX}ke+ulp}{0Q4%+7hJY{dtKa@n-GR z+oK#ki(JZiu}B=9=QZl%wyZ*Ys!-}s zKUJQyP*eQHbX~%BI|;|d^6e@FZS^8YWns1X%vxPe1JTL+g>O>A>FW|=UW)2EQQ@@t zpA^H}B*AsxBT^CFv_~iD(u|u#TDX=kG)}7U7a4zDWIwB%XN~_kp>w(QyhN}Z%^L({ z5IucIJqvuEKQAKK=UX3?{5cs=)H4jL$3yBUCE&_w)8JYs=B2JCj$?GBP>~{O3JI(u zh1Rg#inzLzaBVRKV>ld_M2Ti>;mOc&Yd2?SXeK0ViKZZ7OiDqDRVgY?h$H#aIwH~$ zN^5bArakE^lR-L)(K?pNp(r7VQ=&LQM==IXVPIq|qe3Q~A`Lqu!(nb2mfm{)?L`8t zG&Em7pRnGRTX2I+P-oWiWSp^SQbx%lE1eZ$W3j^l#r{4v&+6IDVh(9p@4?~k>iBs` z;0niv&ykH|(s)dW*k>>u<4B{zT5@ICw>eL3#-`06O-a&*7^=r}k-#-f&drWub1@ak z*>gj!fZcb8F(jvK2K${K7o0tHd0O|rC#axRfeYbi>@s4U3}_kiz+V1bZS zKCgKSRw$IUWcxw_t0JSdv_fNf73(sZjK@9;?`c3y{(CkkSxIY$eX@sliCSHf)pO`L zo{*I&iye)etL$?41z4idf4YxQXA} zS8Ezt(@JBO*E%dLwOCka&{=5GU1-tiHR&!i=q@zqEi~yZH0dr#SZ{K!Nq4bJsw1M@ z(9#jtzqZ89@1G-HTowYdzXcC}0=xI%a0|vIEUdwj5W$;&b&Gp{_zwN?SXOmfPb69j zMPyFQMP!#=%VS?s%&C%aRv=`QwITwA8I&}QS? z*IEDWtLQX=VhsIFc=RI}Jr#C6Y08S=xCwDAd)p58An~yRg3n2V25+HJhLc7TO~gI)+bfjmWc-G=(J5bQWTI zD-AlmgibG^+l%QeB=iJP!8s zqyCw2njB9P=idgHR8uxIQ4-62EYcrWBE?D+(`+oER5Tew{KQrDTULhpbM^3gTyf!Q zWxqu?%yg*u(CA!GjutOGXNn{iw6O-ALQa5QfmsnkWfy-B3 zaFZpFNRf1e-RdCU*)?{a^C zL{=6oB#JA&h%c>1eD_k58_NmnotPvNf_@g_{&{z7*c+GpUZy{b0V@9>vT6^4ZHdaLf- z>ZnMJD#YhAFE2&u+_09mBzCJ!tbg&_`t;sog{%UWb!BxM75PIQ&x4;lm-&hiVf^X5 zDvciXIbN&b$D^(%39D96`ssJ;bQ;=6Jx}?FoOL}5=7mX~VQ-kWqItFuN+Ejm#GtoT zpPSE7zQbNHEw4WcOFCYgUaqi>XZ0G&QDMFwn38Y0ZM0k6S-6#w-hO=93h%1iN#tHu z7*DNRown0Tx3jCinP^#bIa`k^zSl=(rSo)k-0ykqB00*nSfHFo1?BW1ZSL*V%Uj*E zO3sx|e5pRYk1to6sy>y~Pk*Y>&%Z<>QpvfBn6B%xs!z3txa3s9uUqvpiHy}45q_$A z`}00ky=R1Bnn*>&Iwn>zv6e+8T1OaT$%~A!$tbN5V?MnB#6OeN$>6=Ic&*Pu1^V%M zX-DGv_9CzwIWKutE}&(vXTQ=^%9T8-*cH6aB(CHvdhxAR!LI_AaEU8`z^ zZ$Ls!#2O3y?TrTi?uD4eg%)unZW)hyVZ~Y)S!GnPk#l8^Ta-rO8BC?JX=(nt}z zeZv426UACnbDUVH%%0pS51eT+EJ|U`!@TpwpLd2SXc7AAe;&>^JfEDFfgsAA3 z1&5~KKpVDI$!=uG8!0-Gml&#a^|Fp~MJ<8T=V}pypQozBocPul@@&j-JR;W-$)#(k zR&TNzSOK=oD0d#C8VSkr3hB8QP)Y5^MoC{yv?7foI!Qt+iD|~Ng1>SZ%}hP4u@u>u z?R&R5+6qE;h6uaA)!#(2F z4bpR$NFpb%pUi%`NwT-i%e@{;ogR&*xcgMD-qs#R=s!P9S#tZ(OajrwaF`a!VTLI z_sClIx{W8Rcb)s@IjeqCM}n@bclr81xJhp^@0tmd?(wcSBaxl0syVW$=;w#Tt?bR12(Ta4_b*pFHO2R-a)} z67^ErD_t7hCgZ`7D2XZaoKJrE6BaL==iDpT-6Vt}0a6WXD+w#hN#Oo@P9MsLvho+d zU$viB$w3ujYY#q#M|b3cqdU;vfa_m|RtJ;kWV^dO{KF5q|HmIQGR34Va!39eyi4Qh z5zKmmc&fe3gf#YXC6%;6D5`Uaf~Js2Ls2Y)3*yPv9y zQs^wg)mLHR61z_<|LVW_=a}IZ3u{1oZl&#{?tbjA!jNtr)V&&W}~bl zHyzKqzv+1Oye5Ax&>x3!^yHq}1qSK-Ex)V=t|ouNJi^C<@VH)%|Eoi}XS@Bf;7@k; z_>-M|w#y8YXmk>x6qMtVUN+*_qAeOl$tc(8C?$%UbeaoX*|^AyFMXBEuYHTP?|y^U zwPm7>L@p&kq3^%H$%6;`eDj-^>9redKQ{dS|CI65Klx)me)A95diXZWZ1G}e#Fthg zmYd>PsFi4f0LJg>DPGUAFT7sR}!w2WB&Xv?{Vqk0HwT7#utxA01E@BTAFYc0E?g_BiR8TF!>C{ME3UO!Wvy0(V87BBbV(bX5BJ zn3h&z&r4IyDfs`ZGt=dXY$9b9UY)OFHmqK&`uTaNq!9V4Sr8_2RYcTr@M$EMikR@w zD6A5~sZEmzZ?k7-Av zs^7E=Zd-R5O+teNp2G$7JWSVMx(-4NNC{#1(U`XADzvWWX?P0^TRJ5oCB`~?RgQ4W z-M*q#i_gmB^U;Aj;>@kn^@z|D_tGJ}q?OfIFHC46Vq*8IQa(vjX<4)`djktO>f1-! z*Vm*PdwqRFoASB(|D_%MN8-rHSoLMeS(C&GNs^*fL|GJMc}7Mib$8Eml7qB*DRkxax$>P)0Z7#gZ`6Ct7(qI{r5jk>LYA0p-oP4`lS7u4+T4i>A z!^g`QQcl*&SNakhU8~c;>riYZv`DcZfAtF6FiiWr5SxlfNnJV9TR)t&ZpyiaRyEhq zzMj#X{&Et+YbcZbyrpgBDp*}heZTN+C*h|CkY0 zKc`<<#zxW44Ld_4D|9o9R*H6_S!gO2Qbi{f;vmd_eo3L-$eVq#m#7gkI=AeNEd5;E zL4P{h`kMs>G$ZK5iiL)vn<`Xnc%b^Mtz6>r@)a6@+25z!-@_EStSEGt?YR;d_UY+3 z!5Mep?azOO@#|y5QAFDO&=W|~xgiyfD(hI-$$tP0Ou?Sb*)(IaIHF7v#u^67GLAsU z30lj|R2_bje?FYnj;r6~XI+cOASlx!VwGjV;P8+lZ9;FEXn6w_r4yNLKE@6Y$e-RP zSzV*?!d2qMRa8iBySzNKR-{ox8fo_((TZbQNldI~SJ{+#&i>{jvi<=|E0!)@A#OCW zC^BOh7bRI)k`>~9IvbDZKi$NpO>}o*u6|Dq1^MO!itVSwODjYR%f#It%}8Udp)8H; zSG=`J_i&Gw&R?Y6XgQblio~sC%8HV*l>H1pZ78=Q_|C2Oxbye{_WD=QORMNcK*oC_ z*vKl;kO)rWi1kjBrC4+D=m8IY_ER=Ld~arq7b19#*48Gk<|#Mn%4%P?;y2cA&t9cS zwdT@!&85pN^u~F#PSFM;E$=*cdJQgr^*qgP;;c=GUWjE?DL6VogV7R28PKJ;c!-zS z`e2jo_aCBF%*tz*S$_2*3`cP9Cvg8wh@4wuv=FD4z6zJ#0IS*i=n+qTa+?P~xy#}H z(21UlF!S-I<}C&Ob$g137eR=@fpt6#gx;*HB-1}@V` z$kT&OartZwG%U1INY{l(Ee-76W&i$={Y`mzu?pfuv9c5sU${)Mu))^mBktVW=Kh0S z#)tbXUfE#f>cz=*uo#Wmx%&yN#RV46t;<9GFvAWr5~aC#sl$bfU2!drk~Xpi@;1dD z?7a6g^1&l94qhyfQ zeNdU$uZ`V{4Kf8KByb5ty!+08ci-uwohOA7FuK8;ZyoT~oBI_J>{l`eE6shlKd!>$ zSN;6d@gzkp?IiT*s3qFlJJWi8W5m|~9OgllfQt{FNn7p8A71w$z zw4!Q@h5D7M{u^h{ljA^&Fz%7ZQ)#D<=av--rs_s-5T@u zA3fmq5B`(~@BA^lo9{C^+$10GSNjFK?II>+AK5|`>M`VMC=;efJ(pKww@kfN6Q!r= zNzVf>oyaENv+%O{6?Fa?`y}aRN4t9N_46me6DQOAKZ?#|rPJvkljVM;R0!i%zIAD$ z+^WH$BbjEUmz9cULXMpbJ()hAo=4E>RCvC_fCB!Kj}Btxj#K!p30GE^Xh6a zG)ZWZV6luT7|+=^Tw2KY-s$n|C{&|@d_0WXE7s2G3r8c2Ij!fD@~EHpM6DlBJqeXl zOo(7_A>J11x>n9*ZiFVUjTsdYtYAVyiRDR7;%d8et5l_hgbJ3Kwu)HtrF#DoLI(*E z=-b2wgtpYmYks!>h1&8~ZC#uA(o{fD%gQ=&|15X+V3Z{n^t^hC`KaqWgtsMyn%ei)hZ1Pus60-B{+x(l zkyuZy1eZ2BIsc>1`X25PtB7{eB~s$ywBwHdt;10Y`|E;dHRhie&MNO&6Q$y7x^&R1Yilq4W761HYQQQ8S+i7Wtk9CrRrE5Iu2;AQy2a7pqT?2$p>0 z|8QV$(V#_&!IC)F8y5KPg_!SOh-oAV3#q1?OcS<8!mXMc7D52u+b_7cSMqdV8I&>= z>L)hErJSNP)t-B~QRK2^7C0S73L23ji2!8(-*G7usQ$A03!DuW1BoGCQQSO#g&WHk zF#SV{{XNRV!^++6B>o%(MDXhDC<1MM=m{k0+>i=Km30!Vsa!9X zShh^YLo?zoBW$Zhv(=rrjkJLR;y9w&NJwJMaGaCp zCBXY3FD|2!fQ&Z=laCz{tc3{HvR7Oqj#%%uSV|%WJ6nA6 z(;xBhowsI2&)}AaZ+)rwz>umlB$(O@{NM?Dx9_lW<0|WK+?-Pv(S`=H zy#eFhK2cWi^363~yuQk4Z;0_WYjYSbGkyf0{BOU^ zNnZAfI!#v?@QNOCwxNkU4|G5f#57uKbXG5O=JMA$^VM&$`qkIrlDLA-vYh>cA;0%e z-{$vz_s8tqI^h29Lsrf=`H%mj{}s<)y};oB-hBrqZ(pPF!H-xz_*3%!EvDmLihOF7 zrSmXG7MczcLsn$`@P5i$TN(Y_Fg4{Kt0{%GFq0a(b}$u%j=a@MD2O6hdogiyjrPiA z&OZNbu6+Bqc>TA&$ZvfKE_Pt+<2(EZ|I7a;dv`~iS>0gunI-<}U;84z^RK_j%5sYb zzQ>10@b+8q{vZ9APrv^i9^Uu?gS{I}hTCM>grZ0=#k_*=ag$%n+NF%?Ce7SCWHpcK z7$m6qCtQHG76HJMb&(rq^;yQ-kOUc)X$gg@^Omb$LI5CKF+t|Vz{<1 z&z+1qStv1IGdUAkczOjx30Km|`8dfe+r3V?!1bNaCZ~1Yot*AC9Cf9PI_gAzPNxWV zX_TGtuh-U{ISbjsx*kp!jHN8>yN@ovtbrU31%`Zq)$5}%FG=2L%GQ*;Jmr?Rcy>EEUlv1WIa!u5Woi{u;+EOvtI-r_ zikWp@l|F-^AS0E0@hc_H(;~UK6fzboJ7Rb<%UH>Ulk#{R zw7oABGuO@Yvh^f&siK}DB*e#mV(aNeR~&VYPEX6&6zG7}c#S~U3}pUQ#3IK1Wx&%4 z`Y#GkO7D}#2R43f<#CGO`t72Gnhhw66~SdnxjBBGkb(afrwEo>>&mNF`3UE3d}c<= zNgRAMT>9z_t3^zc$XdoKN7%`Qu;^rEXprk{ps; zCZ7sBSy>pE=7wQfurtm%nq&;78T|~l#)|E+JUA;LP|yqD@{-3hT@MOTEPr}vILsBP zQ!e}pPlQBG@f(VlE??qYZ-t&0knZk~kB68vomUjjr7U6Kgm_lgDhUnc>~%H2`pDoW z3FpG*&T5!tyExY3P>ags`IEq4NQ#1Ck#R)Ej?OvM1tU*mq7dcD9)VcJjU+l=&dEx` z3Mc2HEQmkj>4IyILM7wE7^dR^lQh9}R#Clmy!KM5#5M+#=j3}^WP1<5WJDLABfk6s zI&NC!*2$RlP-|W3Yfb2B;=rd7c*MR(;AztSA*0=GhPyj-H_x*2%q3LKBY|;Mwo1F{ zXvBl-A2Rhqiq0~r7f_rqMlE9Ztcpc}NfXk&ZHm#5=)z@G9OG$N3Ie8C%Fwz^U&}Mj z`T@P(5`iD!d75S%5QRRz?~!E%<7vudnttxeU`OxGPe0=3gZr2lzliEC$)W=bQ{)um z5vIsx-}OdQ_FY$sM&Ps7YOoynO!`OMdH2WM``J$@vaBLrieTj|QG1Q%-b22SN4(*6 zX?mK5=ds*f=7l%D$+@erbnXbHG>yn3ZUoSXg~&qkVgEkt-GyXYX@I;Y%Ek(by#pB~ z*1axF>B_HXRhdexFqbdE$}^zTQVEPG)d<=)E)-eD^x%jh8!+10=aYYYoulmm(;_FY z>^)m=DTOHC-G7a^!VZ+iS0bC9VrCh=`J2zO`R(UXNdsj(Jl`W&Zp%K}Mu~FUU}-g= zdrWq7Zv4aFW$3k1$zg`?1{@ z)B|s+iSlI1!n5^{gOGM-i8Eh&hV?I{x?T)Un!80BQ9 zkY|X>zND#*u-f>lg4;MA(iA+Sb#7u?rQFp;hn} z5;i`7;XVw8vY5dL&7ue{tPIZvk5aak>_R5tRcUgHWP7^YfVCzx+};@?--m}8M~A7c zQ_lUZl>g-aJ>uT|tTOgh#z6~Hv7mO>?O%J%oy)(uw3YK}_-W3|9P6QvK6iN1@F&6N zkq1waPoZSb*EzrO$DsJ)n&wMun#lMVW5}|E$#h6j$d(+S80E6%c{`AO*5`M5NQ|7W)F#u$ns=dHUb-@BJF!Elh~9A%kxO)q^we&vuolEqo$EFb%A=9F!s z2=;;ojrJx>>o0QQm4Abme&_3a`M0m~KezyE5q$jNZT{W=;Q!8gd!28*{srzo*dy!) zJp1w{|Kq>@b(Yt=>}2rWL-@%bJmABB@;d4Fb7tw^b5IP32x%SQoD)O3qeiC63q2K`1z` zgf8=`=2R+d=1~t@RNms064$lwyw$2&kjl|g=j}=IB)ONlK3YztO$09H$#IWMX(^-b zYRN@G*~^|pPERMJER@rEdK_H4%ADEpJRKwtr;MD>$6yHYiSWU0y`pA{Q>kBJ_XtjB zd!d$TT`b3uM?t7qET=9n>HAV{y}p8aSiRn*++h_QA--KCB=nc#P)Ud5ic2Rwe_jzR z^K`;>Q?bl7vpr-*=_ywQPT}a>Lzne(b(ViQhAAn9%`3Ea%I>=RH5EnhJRcngr4Fu+ zjxKo%C?%kZDhC~XE>+-%gkFe7Q{)9%o|CFX_PsYw{!8fwr0%-%o zm?4E-kYVPObk&x5Iw-ry=uz|Y^)`J{DC@2{Bp@PU!h{jyx%|by*k>yTD~F%2BG_@g zq|Nc)%^Z=(D1frEt1VZU6iipa^zjUNwK| z_2vI6q_(cj1%VD&vC3cdm(d0E&jWv1+4HoW;1`7_rT2vRr&0u$-}6wj0p-tE5$rmt z4E{1GyPI~|#pT=GP@fc!qt-o^y1`W*Mg;E0CxgzTA8_laQt$qS1cXXfpvlelq}3`? znrGa~EO?>k^U_j)*5WSu>XK(I5*}B>1+bItSz(yw;?{YbiZb}xLCQx5hC4%v+6@(F zno?df0ACk0HDtMFlxg;og6oGlH~Vf#7q}taSB7Q)p@+CM)uQxDa>Fn&OmanPTgjZF zy?&9X_8nz+)Qmhs!-vo>Z#h{3!xToD#1t7QQ->N>8wF!8rD%k_e(7a;euSQm$@cds z61%r(WfFT)zr}?wj5qIQbyj|5LV7OToiEI5G3sS6!lSO9MmgtVROMn+WE>R<+a_h= zd!(VqP{C9~?rA(<9t38&3!#-9Z19QYS9mZNr53+(TIb`bU^6$ykmnhbWXcqUUcZ2D zcIWr~EeeXsi2P`ud~k>&C%Sl<_~P@ZFgkf7af^DtQqE$}DuhF=&_zzVvqf>ZM{8w` z?%D>;rIoofi;yP?d-v{;8ZdE_B5E)x4AV@kJ*%8q#PXRUIM2ujeTwlAj3HP%g9-yY z3fe`^)ELIe6t?biE^csPX@xM12m?_7H{+1N7Z=fmfi%sSBpKsLN}h}B;m-#~Ttnab zgj>5is2AQqwL7v$vb{c21ZOEIjo0d+Jh8s+MjDy$}sVE-p zy)allOWawbwfB%Oo0zWzJ(hf*XI@z0(yJHPxNwEuCNz3unQ}Bhn!^4zWK-*=85kbI z=m0Wt+vR8^FCaJa!OmK`4dtC;Y$iEY1L73I?qf7`HlVu!$|>eN`R$&QkDY>$tO_6@ z9gNud$u^Vzgv?|Z683K$ad6{^WHQ23T;ki(Q7Bq1=q_uT8v%ZI4c%BlsX`|5@$r;L z_r-NOS2rLFg+46Z#woZ97#)!A?Xi1(z+@6I9^^dy@w<$U`XnYNDa7&>JAokXxIKKW ztW~TbHHOR-WR>`m!q9s0D(#mRD}tSkst1G$mQ_JeOvw%pdHBu^#{IFZueb6l%4541 zv~7>X6eLAXYGgu1*%!G$D?%u_mI$=R((@bio?o9I2xcz9jaaVl?vQTn z@bF>IG|8=Xq`~+Zg-$8bjGd1T*!lQSp3Tw@UeR0(-Y08;gt-8B7M^GI}zCnH8PAFV3tst+}S9#QiUl0+ShZ!qbHRWGCn34m(b1vquor{mXF>@$2tGiCnKiI z8?;uI*|~m`bUdlWd@{JP2#059N&70f&U;fX37ZS~L=gtyF zKL6r}KVa+d0srNH^1tEb7cZ6tygwoR;awj7WUQm!3l*1>!AZEYUz4N|-pxJlc?Z{c(vD)I;laI?mfV>NM0L zG9z+YuSdNt>ayW1PQh;7vB=s_A@wkjnQ~E0X^~pCNmbF}o`jF%WcTSDlZ(aa7h|56 z)mRGfXZx#4JmE^cuaxEL%A6qfxmNfk$_3XdrLvfrOv?YV?R|W!D3UU&r8&sFt5cdv z`Sat(e7>b3*j=6frP98RUiWXl&Q*w~gP`?D%9XomE9}NsB=4 zg@y^k*@6r+r@X7Dcyb6eB9pG4eO{2>sAnUDXZHdgGhxgaEdA=2P!TNccD(hd@Za&w z@y*4R`*#`tw5Z1xSu7R7RsG4M``hVJ%92<&i%idlyLvsXl<8k0MQ}ZhL$#$122Xi2 zx6hs~|Njb~15Rp$zbJUxj_`}ZlhV5&{>HDZ;GI8z{{OId@1TBd4sxrXZ)4Z>+>LL3 zP<3#zPB%b54%Gogp{!f4`PGJ1oD}{zJT8^H@ld&`EV{Ok>nFhFVk$16HJYZ1Xwx84 z0lxCAF-s-iO5y55Q>npHq`A=ccwr?VEedu<84X`^sTcCcx>!aXzPhE6z)Jd#FC5e6tfKzlL) zGs|5Fo#iTo@B)-F_{%H! z%d6s^@-h8?(N$wT2Bf*TTpk`BGTPfFpH5i5{5(;oXRV1`2FLdko{h|fA@DR&;L~n3 z@jXwx4_FIi8+9ROdFC0}!Jdq}jTSm?$Ue9xhrxg>%P8`U_;8=qxWQ6y8PC&1p-;nF z1ACq$Y6Jy!S+LnOso)vUkb0$#*doBlMyd>TfBK@iOuB(FMs_!FaPFw+G{yM zoC{+OqWm51!<|oHxC7~tDAV#ptmFI;{0M?T{_9X&M;G?LA4AlDFoqzO^T2%~NfY?8 z7cf=3dJ3249zq_LHc7dGfzTxa?D4OXwLvwCHP(2HQK zh$4?>JEqlX(&{$sr%9{ZWb<5$XRfq3`$mto*Dtg3>Q$DnuCjdPEWIn|={|pkXt`(i zKlZF!>r(zqo{{VgN$%faaP2xb|L9Y;e)=gpH*PWku$ATA1uyr9SpD)vx;FESi>B9FcgVIaSroEL>AHyW=Qq9PA``w4uTPKgXB8H`dm zoWL-FhL6b&q&doy!6}Y3FI)-u!Yct6&UxIrlhYp>CR1q}*Y?$?N83Y={jcMsaEHfT z|7FE5JKgSCf0)21QC#WzG(0FwPMTRooq=%<2Z`Y@k^c%=(5Mweene>R(>Dh>H-<7H ze5K=awIh?1bqq4YPxe!q&pyY-i&q%z?vqUuxvxI~lwDra4iw9grWb17T=)6r`G6}+ zJ}a>TlT+jgX)<9t9g}4VMa3<#v5P@Rxr~om$#(G7kFRA*m~Q0J2qU7nL)=Cvi zeM7Q+lVq?=I-O2~Rx2jdFv)z5QjfudA(O)clEEG(oyy`XV^C&R`fTF5ddSqQ zJ4%Jl{3C`OZj#fTGiTA|4wvhE&MtSC6xj{35M z<7d^W?BlVj@#l|v*;UNn*{ig$0Ny{dqE6iV8T z*UQl;zvZ{&fBY!p3QC$wp3mnmVaIz(U7i;oF1g~Gd5GrI$bfbjiJCCY- z%Kf6`tD~;WQQOibC(nBHE62|=cTpfpj@5f_6;K8466#e(C`a{t zZu5C~%EQ-^D)0jFw55HDq9Dyul443~Qmg2i?}Isp%qoFh&vrahwxGx;nX>Ts(KpaiO|kq^!Fr)1(ER(rCV%DzA(kznnbPA@STk*X8}Q%%g1gr$IIK zVjev?gimtFLIqLBSGnN!m#?QO`S|px%4Bt~SjRJciZY~KPU3Bq`zPHoTumNdRu%Qw z$|}z_nzZJkzog=`!STe6Np*gG9&o+N-J$Dv+Op~?7V%1Yu|W|3B8Er zc!gHbCh}tRV+>+`g(t+K#`uc@b&Ag~6Y8`*j?Q`<1+5E>M_B|P@6>g;VYygn5nQ6Y z`F=K3ySu7b0(*8Jj&dlH??pG@)8Hf?I+PCsazk=-VCg!oYv^j6YOE$PEfs@R?rOwx z%h*ZVvb?fPg~C^*TLV*>yvR+#auBc*1o%qvt#dx#JTHUdX_Uc5QIO^tNjfF)0-`WP z**!=nso~Rugg@Cz_|bL>GYca{(^uri5NgA#%kbt#%+=+XtT24{?wIe~p71cyP{3NG z`1*yAOI@FpSQA(eePV$q`UB^-I=3#Ww}u(-?`C|kn{${Nu`a9=|2d$}q0^M1fLKYr z-aO;+>{7r+Qy!YM5?7ec17Tqwk+VYPn2*weA8#f6_(96BP{gWWEzY^TVHn13hQSJ# zx|{f;A=$w`MVbh6DwLf>qbRl(#VeIwi^A+#<^L?R^868~m%9ijU$rGKh_E0CtoyW~ z$v83@``U2e83w*04+GF1dS<;?%i{#i-^ohoIR?#hXkn5?k4ulh3FQ_=K{6eYhE0n0 z5~{l@N;6w4Qxur#m}L7dMun&#LQVIGEFQ&xfgc6eA51zWd2km@LC|Q?UEieL zYS9P-B44bGJYC(Ryd1$zo-sN+Ae&4;DO#&*7|$oo3r1^gn{B8GT21re@Ciua;ZVp6sL8l92mm%HtZh3!PMqe z=ckhVf~I`%VBE1i z`ESG!b$Za}_TTvdNB6fGO~wq45~f*B>Xg4mUgZm8PzroxLC@9S_!`gu#urf>a{o`> z-U>}sv8d*x6mp8fUAAF0L>?V^dZ;&=zT`H(4HfTD_H~~&l-W!Gk4jdsBO~n zJT|}eJnP?lUJ5wY-UYZR9b+xNRVMD13qvxPk_-|V`HY+Nv-`VQ>+7f+6Luom z&;C_wSDsgY>;D&>&*wOgN9E)2q~WK>z5iVhw~P}(;V)M z48si4LPlj@8=5|xZNN&aOQ%s<1b^qjl`iv~ zum02j?Yu?sF67q_7<}hnuy^eT>}|czWVpk3ZV&mRyE4ukrWuE+XyJt}A>N$u4uySN z3Tp3A?#NBK_oYIil!x{s!nj9o<0Uq)euJyO`9I=IzkP-;eMR#E&_FDL|EK@+|0^r; z8sGfFn@q+NR#uzn(C~ZTe~Z8IH-3YE|KI&L$$_6u;ZJW(_{rbA#V6nY4);I&Lk4>{ zW>&#s@jNfp^VG|)gIn5YW)`ER9M|(v6%|E2m+DCDAbHl8G@T4pnfP3kqob<&UDz^A z%`Nf#e>XKPbk}QEt+PuZshz~ScL_wuFtIM99ha(ga*8X-PbidKPRqR9e9n9;&GWxJ%4=nL z$KkG3Qwd75>>_?{~C1m_;t2RVk0*Oed#~ z?~(?@50&&m373*x|57OYSxd-~kdoMEVb_8M1u-!Z5k>Wxv+~c_{fNaWba`FR781zl zU#;(APN_;AN?sl3R28L6ML|Rugk)Jxnx~{j_PZ_Ydy%wZnSV-7Qkg4uv^zdU$or=7 zc)s3}o5-zGlrQerWt}9Q$dT~HvmvFmuakb^8rH&EN-rhB%q)V%Ds{dsBp(@{gib?Z zU08c|AxD)?IWHJ9qCmD3F|)a4QLN3k*y-Wqs7hD8{3nI7^V;I9T*h8g>C;$`l?f?R zruO>hYY{BGd3uXr*DjCZs~ZR12PoQ;_CNwki0x{ zdr;vOpP?@G6pyk9mR>s#C;zU7)%|~eT}$MY=D z8BZsqnYfD!d`&CRY_>d}@A+KpdYo^2oNZ|?bbOxc`CRJyY_xoufhIGC8wVMm9^_04 zxU%H&jdLL{ulg*-io7suUjD+z5GjHQ;Oc2?PM#_mRr_}} zpOeahM=4JQkG?8+)VQ(;g((=Bj2qd22Ri2<@;C}LI0^^?&nkf{nIiu^B@-S>De_$E@T4%tkYy=(mRYMR7>tGtvJ|zl0YO;nBjRq? zBooLpbhAw(is(imohT%*mdi>hlJS^yG-P~uK#^v%NkJVph~g$|G5p5s=lJzEE)ch4 zd}qx$gH_NL8F&%2mtkoYT0QWZV%bX!dod3_9diA>ZMJROs(epa;<^v{#|M0&yGCv322VQKVv}oK56^GJvBk z=sysv;lTq)cR-Cn_wd4)pcxUiB0_IKm_H!Qj|j~XA$>yA$Il07rl?k1>ZN?KYIc^U z_U={+mXYwH$HDanY<>S{Jbdpq2fKaxql9smlN33LwZP4dyBmu_)mO47^VwIQ;oKK5 z61Ek7vx(Q}Fx@+(NJMe(DYtL2BGew6tBP~01=-MGjz*}#5N|MKWi{sPb4x6*My#wi zXmuhWpcp0O2Yu;VHZR}p`RjQ!v}WU#^K88N3}HLQixgg{INBMKBr=8Mo+Mn~5{0r% zout#0WH2QiPASqHmF9%YFzcrC`n?ILQl!xnVznq$mZz7`g8)h0qM= zErM?jW!m^O7Qtz6g`m@AytTz-XP0a=sz*HrPeDT~p6z;kVO=bLudeu<>u6eDfiA29 zIGd8C33;AUSdRgj-4A$>!YGqPF3K*<^fW{s#GazzyZ_>8s1*iu8V#C_7R}Z&t@Z}3 zmFLONyu#@0vv?OhbUZT%=7(=x=lyr?@#f1{x$|I~pM3B!?M9P_+k2#0#=rA#f0MPU zMX(0)6mw^fpMJWFe$22^>XACvPa>9cc`+BZERJwA}SSi zPB9?QQxRd*qq};UwTmxv@y(aG`h1h;)}UkWF1tI2{G)&H79kOxR*Ror`?v&*)V@RA!P zs`t4vf2l<^RL-hlMJ3ldoP3nZDQwwgc*)^v3x)UuO5-b!V5YVy=TT(4h^ms^eV3HT zf0=ubg&6jE)yk`9OLsMJbh-Z}U9R-94rSX`QRQ(-jXSFUs~mLU4pkb;T<4YE_4p+h zOJ0^aSJTw%@hCZ!yyipQwd%jRoR++qr?aH4j6Kh>@?Y7fuvEL6xY|_tSv?j>tkkqD zp^B2*^SqIoIc}D+;CSm>H^V-jY;U5fV}zyE)LTucC@H9h+69M{W2qcf`J3m-e9OyO z7027vm0snxR9S}P&s+%6MAz01EU_XhEr(h0jX{T7X&Ni%2?=m1ZBJ_{3mh0hs(8JgrTN*yY6 zwk|XlDT0r8=9Az$;o>2nMA_+{o=f$P>&jNMfk*~>Yz-uKJ=NoJn)s4yX^~vNR)1iX zT;0bGQk92WU2_4g?E{uU6h7{#KA_ZLX0HQsU6fq{jZ94DO7`B^vo51QJ;?C2p%=j< zms$l2Tt+LU&|2er9>y4wG-W&;Qxq9WLF6ko8j9z89+x|^&)Bm)&DCX}msSE^SPD4P z4rqm%tSHzW=X|)A^XXwh4t(Woz+br(vK)IHP6|HQOZo1d3GZyDd~%pG$YioC@SK8F z=7O4m=1j}ye8(sBV3Zp6Cz9u4E(sLi*@u_;$LPh-7*Py8CSQP-4;NaRubqkb>e-0b zH$r-$N8o94qZp-z?QzbhhZ%2gi`DNt+bMSrQ<=+dXu6?CD^&O%e7v7B%?mPZxMdRB z?G>KstfI$b%w&v7le!jiA)*3#`jTr{sDe2%b&Xv_)%9Z9vh*AF@`jmQbbKmvy1Y>nQ}&9$Oi}H{X)7X$7y{ot1TxA?G7u40->6Y;T)lJi_ZP;V-XY&~^{;oN<;j%`(#5y$)4J zV>_vA45Pz+CP#-fmsjz_5UmxyRp!QlPc!g|d=F2_9=^&ga#5m;&W8hv=>)Ic#cOv_ zN{KacmU4LOQ{uc}t=(p+(<2H)0^g(63<(2YtiosYFBu^d-k?3%4_WpKe!NW2!5E4> zXEGj96!~lteK?&kDhkZfD#n|)98}6+@&c1gAldI;%{Qkp6DQxSui_WQ_JQM%SiX z`?I^e`_`x2`FMvLAIay|N4wnmXouS$ZFA@2ZSH=&&DOOYwy*E9eQlTi)*h|SfWml; zlNQr)%p_}*dOf`6GODwRYInsAwbJ6Ax5&#rFmoUMpi~0)A3}c%vRz;d^u#hV9n0tN zChUF$2M=I;AZ~=meV7hJsoY+&ieRS%F6Ge{D*qJ}nPRf5+4|o5-2S5bmoLX$ zJnu6)0+nP$MMh*Y&OW!qGp}vXTaAdD0e%#-bom*)EGOSTB5H@korp#|q}h#WcN?@j z4cfgXD_1sXJ+lH7_@PGou=Vjn#>46CmC9Kq8(WtGvGmBXRz?ca{So=@fTd^J1g#Ji z$jbT>_O5HN;RQ^_aQ!9>_n_#D+vfg`ZJ%9ni4jDy4|O&c1{<4X-F5b-A!FSj31f!ioWbETcW*ZMC;#w0-ucls*FP9= z{lfttzTfBl_Xd3M{(ukO8}R=7L*9RH$b0V%dGGx(KYM?~&)yqz?_R-$&1G^^a5NZm zbW}j>6K^!27o(P9R4+t%c1)>{s|q$ZJT9E`xp~*n9~Pfk87yt~Xgu!vuW%gIiH1ec zK*!g-TvG%O(}KekM!DRp9DD^0PqAzj!GS-o2+mKb2=>-D>8-6WxpRkfctqwFKp^)U z2W6k*+ks*w(rm;YZ*2H{?QFp1C68VV#^mH_!ZaB(nT|-Zlr$?y3$gS~3Q+?0Qy8X( zB$qW0fl~NNiVf_?*Ya#0dLE&tX~qp&jW%K2fuKhku2OWbaIpRyhi5kFT!1)&JW08I zdz;(W_eqa5?N*zgeE1PR`rre)ahv|p2xZ`nFFnW7a*Jj&1|aoeoagjE9`l`_-RB>_ zcZUyl20R#zNlj950WCZct2KFpdel17d0w~}ak(wN2X=Q4dH?;}{P7>Whe;J#p7W!R->21RaCY@9UJ-ENnN^n78Z?^` z#`l!ck0CBi%FW+DNWaq9~vp-`(MIkaXo_xue_VTm6;mj#gJAca(Lk zAEy~P-5Y$hOjV=VU2`$@%muVJ=K|VLzU#XM<`Q}wLV5Y*p->q6e(GFCJH=gLl`)Ps zNAEm^^_x}MR>!ZDsPpVNhs!$5bLhC7I*BV$rPxs_?{C#K^JSE|mvJ0r)qG0}z(pu) zGf!_ZX9YjsK2>hc*SM6Vk}p-1^p;l_N#^ko7xz(^=U=rIN(pe+BvgJ+ash4ZqQ|^4 zwg?@^F;BJd!i}lQZpGtOmZ7+ON?PXWtK+0{7eUSXOqFx)knzUl<|NIHDw0b2QnkL- ze&zU9Z4se)K3z$%LRaLtOd)B6Cqg%sJVo+kU*Ph+xLKO_hOnG4KQ#@U#(5Q-dUT{=&BWU63lDL$#qTx*w$h>lCPYReu=SHTB(b>c2ZrQ1Z5wYuZwWf<$t`K;~~dUrY_}mF~6R?E{kGU6~X0rS>`V# zORp9e(6V4->F}fj!6Gcm z!^bBg#8e&<9HfqmQk{&`##Q#F7Z9Lq+0|?1Fe~4VKko4G=+dA`OhZL9bR;gxlqw&z zE31O*kC3N9^+xSh3M;HzAFC7|ld&@~e7tY?csD21hO_O`67Cq3L2E_e`@~^{r#-SP zV>li$nvSiN@C1sSKttqdvF5YxR~3dqn)BAZ2_Nj|>?NXPeYWRwxhM61Zztt@cN4ZI zigBTs8rYv2ZuN8S9HsOkjVdzoJjKJ{S*6iRL(3#>k}*icnqg6kDyszUs6tjV&O%Q@ zfv2FW<)uA+L^BxRwKb2w@=VCft0Aim@o7Cy#-v%n(bVvx2NS+~KjBZeQf?27xY#p_ z#E9ZI_F=W@(NA)29Hm@4fc-3E>=mr9u5h8Z%CZ+@`iGbWdjmg$ycw!-W^!fSHPvxE zti0te#0mLS@yM%oLi3SvDpw6KE;9CugomWuRvGsLL(y*I#SOGxyce#aENd=YF4Ti9 zD&;PWQgdHi!3n`9;N;luiYW|9G7*d5MjPe!QZ)vXrI_i2A}i2Q8%%*BBUo9*>n@?= zc$U#|&O8RjVDgM~=K=Zt4#Ao8_)BZ(AS&~+e+nSW3#M7l#C|d(FLIs&&+{1UY%|!~ zrqNr*3qw5LpN-zyjzhlI#J(tn<3LramylxM_-9-l>N+|+Uz+}Ym{$1K( z$m-Gxji^Bw1w>Im90hh?;7Yv~aKep)o+l5Qd2SxrHdPd+Ae~M*JlsQTP26l@fYD^k zsK_b0E5{YVl!{-o6m~yc zS$vTh+3P7cvZr}kz_c(7rUiHJCS3p75ud)j#jUsRapx!Z*!^gmZjur;BlL1ltb>=& zLSq?@29Rf>;G4njDLk7THWFtvg2Vf8@G0zn3j4QUxD9Cvg@X07@XS?Mz6{HkVCg)B z9lOVIRf$iOD<1u4v0bK5{Ypm*1MmvKnPEbnWD^09D z)~;-_d}Y&CBggYIx)+yN|H@g;eC;gfUc1P-H_vhIi|07^#b;T5;WFVfm*_qJ44W^X zXY-YFY`lDq?zv@aF{><%3QS789J2DtCYx`Z;mn&Goc-b%&c68!n{QrX zBm?7QT7e(H>N0F@!rCURY(SpFurG?-@dysK#QJydHtgMzPk%@D12(xRn2lBZV&%Zd zo|%LJTsi}rXJKg*q7E!yX200vcmIo@@`FFP$Gbn==j|UH@b(Y3_}M!*+1)=P&qZEy zL}qg%3U4Q2(yEpZw))d)!AI8zy!FE)zWdgg?|y$m9Kn_6eOvE}%*yb!5OKrj<=46l zM}`kS8qfG#{y7<^i1L~6^UnXz6HikY_k8|1XloH%R|M}T1v^tkKL1EYH-ziXYFFi zBAYUu44F)ZBAqW~Y8Xcmz zMG(d)?K3HSJ{>f8x4*)T;6>7BFR}83z z7i2SAq|>#ngRzr`Zld13JGtM`i)h9@I-PT@T=)VTFTcj~zq!J*n?7efk&(aoxBig- z$A9$q3G$GBf5i3Mcj!+C#9lrK0dab24$PLIVqV_Vdl-o zwTwLJod!a|qv;6o3Gwa7)hZnZS)A$W;nKS@9d)i{=Evf)zV({BZX`Dj*JGa#fHN<@3oR2roT6+rd`#RVG}xQ0f-pRL8xN{y1G1S zfs(R3bn&X;Ren7!q*ksC=M}-_=y|*hq22Y6$3sRR*JqEXSzOBFQBULerGJi!V98z2 zwFea$Qx(}2IXzD2B2?p)`8X*o;p*_Db*aY|UOA=t;_U!j>Av<^jo0XeJ(@x5S1zFc zGT|>nGgdoV{qqY#MG?GTzji9P0jnGY7T0FJBQB2fI4tVSo*hbE`SXLRqwn-MZCn|c zL_ka+KJS(6p`y_kyJ|hBpfK)nu=?QoG$_kANCn-)kU>_> zCpiqVg2Oapm=_#O;r^gNVdzE26~am>w9`h%#$P{+7dM61$KpzDa%0E~QKF@J&NR=N78ylekW43JX+}OB;{^dx zt5eTL##E~i4zwopJ)*$Fj0UL5h~>?*M9mgTi{-GFPN2WfOgo-t3VPv8t zw{4vnLsArsMmfVl%BVkOG?+5%PZ$rTOh+lZyCb&m_1V4ANBI%0jV0ORy4{0D8>S<1 z`@5iNM5qdJAw3+!q=1!8=&nL%4LTdpI}5FK@Y~{++K*)OSEC?HVCN1TZo%XLqL#H1 zR)C@Z$wMB#^$`z#_6hx?J`}pcxZ( zVxm@qsM#iJH;FneqD~jD*+NB4f|hl4Z9kmL@8G6g|t9^z?Q-1Q+0U!OW&$XZK@!=0{v-@yF|0w0~DCOvA!eBTdxBHDd z-EFDoYSRLRuTM)RRm{6PJcS(U}_lD9?2BY z3t>4Fcgmsv7W_Wu)W$C%gTz>TmajStJNBD8Xa55t6kMYL|y-2+ByuKFj{8GU4 zOFm~>nueF7imAAOPNs~Kgu`jZ{?u@o7>*LfAcJ8B6Z^cKS??R2KwMgP0&!*UZi@!+ z{g5bZ5`+<97^D4=sqwfsFnqLcxZd};J?(JlouRS$MXtPgj#uAovCE|NS3wc4dvhWW?6NHU&A|MvJxX5|=NZ#JRI1rL4L zc`)YSW}o5yZIbamc`~A~dzriUPkD2cXA`MqRUK8q*E}qzRc}xDb?iG$Y z$ouX*H7;CAa(9qLD07ndCk&dE^e%>rzbH*ve@P|pyw&OWlju1;s=TkmSUN*|0*EPU3^Rw)pC4Asi~}t!7FqsdceHf#ei%qDC#< zT9$1(AHQ0L$aS^X*X6WS^f}2Xzf1b+5Srym8FLYT>LF!pNih$JU8X4Iqok}}!jr+Z z`(js^rse|Lr{V&7W~pwDjivQkJ_%gfYEH9-3-;OB$*OCoMdi8pr=iD5V0NsJ2~SEH za&p9sLiy*;T`F0G|o0%fGlw-MGh1*lU zK7YJ;9Ad_sQXbrQS(m4Sp1FW_v+BaD^6pgU$vlLIzEuO)6~VRni>H9&i=(Tm5ESl~ zJg%b3qtn2Zb5bu`T*~87Pb2&iKL7j_!E(sRa$Lrq2FH7y9IkKHuU3Cgi+XHj$4}u^ zT@ehP^5$GXH-6;;`d>Z#WoYJKP#szq8nrv)6Jya(S%tg)xOh*C@+SD_$-{DhTRh0Q zLD9@s_GtoqTEuizlctLC?0%kA6vpjgRX$9)qxx|CxQ{!q1N7`MezupPyBP=#38GYc zcR%HKZ%+AVw7(;(raDR}qHC7BVdDzKNd~{gw&u=As@7|O_TJTKQ<4jZ23aZ>yTwF>r zgxatcD_&U%_>Bt@zw=zoubm5duBV9S_Bs`K%Fy-=Yq4fE_EF>vCS&%81F}5FAnx`a zjtu=oS{FOH-q7$&Thj|Q`xC==@1%V9ZpQoj1;f0+_z=bc8?7EKkPKPu!_t?B2V|xjZoj@|0rK7y0lbal4ymkY{+Y<&7IJtKIo=PzZflDlVrz zjlZ&i*Jz?@maSDdg-ezfOp}!1G-Yo*;o)e^-grV9#(14BhY#*E+TX*NVn&mxam2H3 zpW9(TFAC^}9-Sy)W2wh#r%g8wX@voPp22uPU~*#LCyru#-y^giS=@4p%Fir~M<0#J=<~e)ggr9w~ z%a6WygCGC*@A2;Me!!i#?=w2gDb_B+`4?dGIoU(lk4gslAv9X{(}6}8;x71I@K<5u z3Y>eX{B+KNXQtkdSxks>JTnE;B4_8?7I(h$0Y^7?NCyKjQ`?6ENMbM{s2EfeR498FE9V+bQDlb6 z&VcdOA(Nc}g}AwpJd~2YjSs3}^Js#K>>kK~NlE%c4nN)D)^|Q;``SasMNVoJ`2_{V zOeV@_7I6zL*D_O(7or3or#V}@8U3NN(zW#DIqVN%>mJ;@E*8Dn$hwPm%dC{#?Ye7l z;dwZJRempAh6`uJa(LFhP5Hzz_|AH}kehfrgtMFQ%roR`=h)v5*uFL7_WKX{?(g5` z5B}ymeDCl4ki)$pnYB`vb`#aIQvw%G)olM8`@cHol$@DAcmIF-vy}he-x=~Z|IUD) zzUQpU9|L1VabA=f!;|uVQanwXf0a>vPCw1_$4M~u+0J0ZV%CN$CGM0X>q2?KF#cGS zcPRPRTGMRCT)OlOue|y)-ENOwBj8L+^IX^C%bNkec_HAdXFSffz?h6IoiLpY8ISvn zrelt#8GBRM8X4}76b~nGFokgjx$OhKhNcf|@w^gPDUIg^c-kin8pLsjAnKA3u{(j= z{hW8VGro5>(wXyRAu3^s#*9{<-X*Rl;bA69~EEE(K9dM zuH34k&dKpS&2|yn>?qsI;duPAPRA$aUEJ~;nDMS2|4HCDpI zrP%5VeWiO{GjpX{*1Il;kNUX7SZlUfJDHMVdA@`|X(DSODU+*Z9@RROJUU*-(?Ga9 z-#*6HTvP>%tdz=BWqqW@>vHD~mj}T0Pgif3v&K`>cOvCmr?iV&t&|y;^GR^e<&|5=47S8d+aHI^xunoZsXVJ|+g{SD zWqem+fKNm~SW}3})#Fr2U1W@KA9s}3OVmS4?mM29-^Z_1>!t9tN8kknI>7frd_O>W znxse>Btu4-Y`-A)7@^43+E^=pHwI-UCCMhJ!q6n5?KO#YC>{zbiW+UbE5^jAN*mNU z<4QXnseG!)w_}U}# z0~%qB=gH)4UK9krPZS0Oo=;jB`boj{!-7%Gav}$g61Y7yd~{H7Yfx}FbMY*;P%Dw< z+vj60bu~UYgYlTW$kAG{+=$toab-EA6MC#RJ=U6< zdxr_b3=$)0d|*9N{Pv}oZ(V5c%34e(l6`xdzT)HkltF4{%3Lsnp5bg0URe#e*zwpO z4e3wDq*+cQ3TXrZ2A^wtDg6`@TQ37l3%EZr+~^zb4h@H?SVI>W5)ziWEiSHau-WY4 zPp9O=0j4;v2tKI?J~8Tw*%LA@i(edJacB+ovQ9vOVQ5lz@(FkH3Afdhhk?N~TX=C3 z&shN1V3;HH1c-9rIBNWTOnvJ(O}(BL#uQAa6HKFpZuLNUm^`DHjK~Lv80DkFCIG6) z(4kMbc@`Z;qTsA&_!uY!6gkCsME3A5Dva=#*U-UnrTZe7ETKrID9^`ealMmZNRxzY zaKzy5EyAWKHa$<==Pk-s*}A8b5y@x>7}_hVG@^)R;M0l%%y>Y0ctDsJEHACHw7fzT z$v6~-;)4E3p_JWsU5SQT6llj$6a}MUpDaxY!jM+Gi|2{^*euH!XBi_?FpZiNRyi!z z&WhOg=!PB*BV%r>*R!s&Yp~=SyAN?P956XL1V9H7UKkPUf>+Nk@yhunanBD{^;L+a zttr4X_~}m$_~Y+CU}u;!Ev&__Q=r-63OhcF=RxOW> z@Gd$JMFOL{Fx(eSQoCEJpmp)Bos_s=Ez0n)2TN$+t!~|xyE-yc_R62x|C0N&@bb$1Eu`M{ z4eI5S-L((h}4?P9!Cx-ng^b?_zMdGQ%o%L#L=mct} z#5NeBs715UBZ`{%K}e2ff0FawcFJ3K6W-m;xjQmU3XhH-@$Ki&@i)HyB47E|7dZD) zk6@)NZ9Gc3`SC7!0{y|5`&+v_JlN-O+y|pDnIakGm`w4lZ@$K_ee-3o&*vU+6vE)J zVDKPk+TSKi2ISckj4Z&_s`fr)-uF_q(%=)um z<8*m88$1+?~&r#s7p%KN@j3T15j%w%uD`@VJ-nhRvKE~m4PkEgVFv8g^| zXxp)IuA{+2;oI6sTUTX5=qtH+dZ>!ElgOzkGDIO)%3f9O>T>E7r1g>|$NBiBLh-nq z>WZAo6Ils~TWv*=3~iT%*Xw;;P9H7%4o>3SK}}9eIC|#eI{uv&C5J@OR^}t+9&-Wh z=7bi>sq+9wMMi6KIvYO-`|kf1S%{W#1j@kT$6DaULQirHke= z-1X$T<(RQYHAMJYl{=B?+_I~xY?izn@0~2EnvA$I=KG#dqH5AA<-6-;xZ{+3q$WOk z<_g~RsQLPpkaDcWvI=NMEn0CKUk7AGYF$82$V_T!ENh^wm32mes<`WSWtlnN=VV2O zHj1W>>4t5T(qu)Bwu(rFrdZJD9sk@RoN={woT=BZJTI(4PT8+rjFO{OUdveG;*>eL zdEV+cRj0MeXNh0luZ0tGU~6=eMX>xAlr=9)D|35#$d&;CA+q-~m2r2`J^xWqcFcG4 z;nnaezn%p1Z6JrVp&>toMesbwP6wBdJe42E@lsBQdK$+s{d2Ymmi)z&j6;==k3yA# z#nhC1ugj;qTK#<-PKqV;DwsV#fUg7A;x)RzasmA-JPH0Hi--(_i$9+MpNnf~eQXe@ zQ{@J=YIr@)Sn-pj99rWaZo3&9GXS zW!r2>wJ&KicR5!1;3i`g@)GIN%)+W^?NP~f{!!UI_)8`>NWzSL*q%C<(Md)>HSA3c zyW;|lp%Yq#$Se!%4pVD9PvdzWzULA8K8+|M4nn)Hry}$;tpL)(usg>M#JZ9OS2p+Od*!g zv8Q-tE#S&>z`0g{uN7KBk{7(UlMwrgi#?xnElsSU=_$T-p}})Y0V}bOuNA|@@L-tn z{%%U18&)F4iz_~_uLiui5%9)Z#FeFxPN*0q6UIqGn&+S(4nvw@h(;!=hp8xBoML2> z3(u3nDoTJt6%73mYs+0Ot!&UX3MONU>G;@e^doQSmAKV-?*Clc*(CUJ%)%d`yj>hR zk6GFiBbOI4V;Go}+v$KUGIjz*KlB+#K3N#zg(2GWYs$#SWw!6B#+6*R=vt}!T8;6)+f+B(WAZcjhn36z5TXrFZF z0cJA7Yj^RMR;=>;%R_gXCL~Icgb~vqLi;|Az^4<1bmNe26wve(I!n++ zL8H?{KSB|#P-x$0+V3+u*vAwF$`A3wkd|+F^Wq9`UR)Db*a|Di_M`^K9Q|u}nvM5CoEs zuSAg?Mpg!z(CNa`lE{FT_8J@}{ODh9@!;-=!6+xq#Wi_h+p54VNO1COWw;VP|6k~v z|E(y=9r=~NF4k+W1ib!AP~pk(XDon&!-C)c7h~S~(Uh(2<1X@`UdAy=J2e)iTokql zr;W!G#{EU1%E!;bQ|u^HR|Mx-g2Lcwk+mFA1}g=TC;J1dnj-ktAm_#tD1t{(NE#@> zV|TaD-hQ7nGhECMcsAQ3R2k$`(sV+WPRXqTxG;uM28W5^Ac0{jN?=!(LY}iDPxkKZ zh0qHP?EnG=VHgv|E&L!R3>qju;3!qxJ}UTdC*$LToKFsO9*hdotl&~F;49}^yu9Aw zi_F$R;DQbOa_x8T;Pjwso-260`RzIYSvY=2hOM zDhd!;KtEveFK+Ps3n6D>2o>z?9`axRH-EsNeg7jy z2UGS&hYXXkOfM_LN~gzqcNtG>;zmrf)8xV70iLf}-RN-y>^#tH-$~fN_aUQ$Et2s* zl*l+H=>d@f>8FGz%1KWxk?9k-S|Dp+c5S$y0<89v?d- zRK`zNW{GNdst#?z@z9SNfuOi{Q$sAC7+ITtKUe3ur5Im7+@6 zqLjVKO8%|}mOdwc6?&Da$ta87_p3QoaKih(vcIJ}Ua1+imSffikK&X-&GK(V24^^3Sa(P!NtEQ_e?i~FhrzJg3KFa#KW|N~{XEP_a)wIXytRF6} zt|_Gir8JhDa5OAdOq5VFwPx9pE^WmHv?@QEieZ3cF%Rc)%2Hl_%8)sEtX$P7l(wNx zsa%a`W!&Wn?oZio=F=XpSyA(vSIOOGC;OeckW#%T*PMiuDV&@hZy6^?u5>DNyYo^O zT&O5}LIU(mW+kTk7VB}5-)gC)#JZR>F3oCL@TvZI1J|N>w>0?WFg3>9QyC@x0AUB3#ce`BBg3 zX`pQ1@G1)6a$G#l`^Q0A@KK83C&MBc@T}pLxKXdRQF%DH`$IjC$HC=OoG{+bmvVZ{ zOQ;+_Z$&V3_qvh>kuiC8dK`BaOSyxiv#tXwuU3B_hkC3sH_2HkMJsI6@S8M(#;;sJ z{|cWk{vwOeXQ2IaPy|aSKR##+RWkUvSanM4=a0tm^yS_ki~Po82fWkbNn*+{Dk*Y% z<8&(=13WsaK}2|_KpcdGo{v_V(3kyvpXn&F!f-e> zv_p?pAa0-=zM>H*T7jY)DteJ-HP$@S(tPzyz}L3Xch3T+Akt!Vlls}0R^tZ9cDW8h$tbN49Y&LHDr&*#gV5zqC+dN0Wf zo?8l8i9JG3u|F-i-Ospnlrc;VtFh+!p2s)Ng?#;N#8);Wt}I8aG(1p-G|x%0j7gf3 z6$Me?(}@GtS{hF&(##O}qPT7bil#4o?SzVMsA&eE{enR_;mqlPP90#-!;n zMergRtiV*yYyaoMPE-O{B>3}E0-p$ZpvVoR6b#7NHVM~@A=?3r8WDLTMuiccRT$1I z_H6!-D~6|00zV#)uU`!((r_}2F&I;jBvVwggKmlCT`@SM81|vLj0z&@l|_#B6grLw zmRC?gATQzdOdkhRkUqRm`rr;aYT)-)@T>y*(J){Nipdz0PSJ5wHcP}no|A0dV|wp4 z7(*V!q<(;k#ND*EN=U5bsG~YhGX}fc7-NWnrQD+a01X zqS*`yoLlI}(!2ncXP(xwf*#0~>yw!N|-plCM9{E#RV z7tqU%NZeWn9=?KNI-$rj;!gL`ieRPiqnKneW->S;n@m9a_(4d^EBMmIRlay>jVSO% z7gz1zT0s!7egBA^`$r_xoGceBU>C(;W_2}nQJt}{9Q)nZETl5WROPw*r|tcs-Sk*J z6SMjHS;A&akt#-eW2TA6RCk!_Hq*poGDw;B$0UQ4=^$e|NJxfL@@a+_iTg~+-F-y% zNGCAZf&1^mXs6tBw(|^ho~tPD45*Z&>)RY&+ZJnJta7|!(R>WHo*KCHYKv!I?=n7& z34(~Y6{7tHqurF9j}F+ow!^{o2aF#c5^r=Uii~71A{k6bZrr5*?gw0d>n>aG-{s)e zLy~EV*A7szV(;1(yC2`|^zR<<$?w0*);qV^zV?vaPmY)l z6+yFs-wW_N4LWDnc;T;nfyrRZgKPJW4Q_5;P+4mXPg^ChR>Z!h*Y;R@ah2|~t7S{7 z0`vs>TX3{3TuO#8=|dxyhXl{HjS>5DRoH#56~o;D=tY|KQ1SJ14Swr#hpQVME^IzS=j^it zuUtZ}#voPa_x|aR`1}9xEzYd0lTH)%_x4f1{^*F^!66v2BJu;x<;^o(zj=?hKe*2C z{PtH^TkC-W9l|sZ8D$ZZ!<=M1CY=s2&h2_di7yuxg-y3^KjeS+fBY}G_vsF6y)O5T zwwYv8AxIlGmX_IETA?U%I^8yY6!Fi$`(u`to4odgXBh!IyNU<*C+y$4#%TXO$#4&o z%Yq+c+|+Pk6|ZGIq_*yDbn)bKsXTDXI=5&_a;#1V%Mez+^OmZ$a^hUlnK|p>vd_8H z?hqw(bzrR0=+e2VOQE*3Y%EnA^Yx-q5_V$Jg;E)>oh&#?B=mT%bEUcR>*dN7x!O?T zP}8>_zZT`U5S9Cb{Mc`M`!LvrhSm4|O0^aB_kCNklDH*KpvNZDD6!mB!f9-ZlABWZ z8L_VH1#q%gUN2>;s?4mmrQ|)2`t@o&V<))X+>69_^tzNHr_xFSCs(D#TPdrq%xXS* zCgY_`+RQVzwO-w{VPKvw_NcvK-=D6X)OKLtFs&Z1^^B2C|o&rLbhi~P%t_XfI zx=UG`9}hK}jGTmYuJtANvi(X4s`u8%!}0heUOZV%N~mM~xE!m09*SUP7Z+p;4CGwf zKRI{i;i%LL6v0krUA)tv8ml_qc-lj2P2hzr#mlsUHjx*js|(S8ghkA6MS&uu2W%R%+TqDN$^if`csO?!a(u->^5%i9N$wLtcL6Ba~y)>Be$nY z!1LH>`Fvp`;>(*MUs&~dY1!v;NAc3K#~0QEzIG<$*Uv@##`%~pZ$?~bD=1R74i7jS zk1-fpVaR5;&1Sbl?1{CXrxl^^(GES%v;tmUjd^W7;#|k${hbLn4l^E%a+HF%?oIjQ zI}-2CWqQqiaLn+nL~N!@qf@&2L?7@}{|J*LR*`WEi9O*?Kf7ViU0)p8Spv?^EB_xAb_|bD zAlH$Yf2Gi0`PLdZif3-YjWP5eZZY25VRQW~tyYUL^k_r@p6A@#KP458@ciLkVIK3)(q*xjKh6rShP%oDzJX_YTMw@wsjneH&NFOj`s%F>cyeKX+x z%@LE4y_e5;B;&OL%xsmi>&N9pkn4+X_?P=eH6JTSHr&kSF2yUum6v?p_GwY6&X4bL=k0ske)~SRe|(?YZ$IG9+gsdy`#yJna*yqI?lZj8r}yl- zxRstE6RY1ehn-L1{!bz4OPF1OPj^E$WSo&{z!(PCcNl!KW0k<=zOu$nYE=89Qcj_b zSfd{lj1Oa8{MUbrXTN!svoD@yrS$^&H0SW(AxTk?6gi_w!uE}aY`t@v`)}Xk-rKjh z^T7k|-_m$$p*Uxd`+ZWjX^nmdoVKhzH`Sbx>@80D8+qby;_HAyzeUm#s zyTjq$5z|c8Oe#keGP*_1N+sWQ}DhlDb@Y%Hzv-s7(Ds1@1y2rowKWXr#H)7)0D!Uy&Ye?=X z9{kMk-S@^Ej;%81r2H#b6vb9??)=d>`R;pC_#!+>++PIdc{1PHpBEI+@-?s46v4(6 zq`BeYL@~}~OlSqr4WQxn#r+J5;9(RHEq7R3+aw4=(qziLySHfV-e7g~fIJr(s>lp% zPvCG0qgZOm@zl3L7td zgJ-_{C7%DyCeL5cocGJ!=y!Gw`3HaRdyEfLe9vcRa3G$60F+^KX_d{DRnjzLd8JDn z2mJ9{Kj!L{GkoLMUSSIC9KhE0gxwoA8SUOD8SGM|Q;eNJmv_)b$~C9{di*4raqpEC zrCPneNM5C4Sth^*?w?a=xYYAQpX65`66Nhu&y>6pbG~dxk87JU-Gaf@Lf$ef@82^E zwK9e)dG?N5a~tdETBHCrmM3#ApexTg<@) z-RrUolXB)~!0c9T3xIjzG<@4TEk32=(Q<0-3h>i)YrmZ_UQj^k!vRW9an^LatIKCQEQi)?*$bIK-UJ5&p1Q=70 z&GnDEoYv?uHlM1DB6CWCk}cX)O>tA@o8yIW*vYZRtI3|5&vVwhRZhEhV$Q}@#(@Zr zz~&@9wMTqiFcfgce15uWzR zii~kGVp2>+3Iz98i-s($>!!Nm~CEOYa<&uY9z zC+yJ-ns~o*0sSldqVN}4>|~%^_-UR0jEZ2_Y29F4MR`^Z7M}%+(#vCw+-lqnqKZXn z7U5B`+|X7Z<`jwsA)yKgoeOAtvp4qPqcB2K`HJ9pR(|FoeDWyWq87*lyE_~e)wC{5 zZn-umRX%>YSXI>NaMV@5t1qSoan(G@V2~CZW*G-l!`|31NDRIfw{i-Z?3bHOsZ`dM zCMOBnWCWx{Dx={Qw0uK1G%SUNZjjT|8IelyOoAyArpbiibjl=6X@mjm?H22uCQHpG zjWDp*OWrJ0#pb3On zKHANAFez`DuSO5=NCg_souNtVeA zSdpSkif>YUl@ogfy+HOc?nTfH3hqrO+?ZyxI%io4TEuBiF&bgAtlpIH7#UuOxjgC$ zQY&Mpn5BMvjML=>b`k_gTkACQpgaJB;L@8EvMSQA!U0v$oRg@PO$EyV{ zh*N(EdMp+fbSju4C(APuV^FOwDsExM15B2K_ECN)JTgF@p`!r5-Nfs3QJxQ0SMf+x z;+Qlc-FZOz@IJ+ONVt9$uho_Ph93uG#F8b?L3`*pMk$R+r%dnOqL@xmQ48H@W0DEQ zWQ5o4VZ4AGNb`au&za^q6RQ|bCu0t8-z01_=&Wy`ed~F_7>X=ou=9ZQ=!mto4O)!` zaU^>Ky9Ftq6>f}ETHJr8S;lBMWHKIsG4z&J2&338SP;mb&SO%oA&O|UT7-d*?}>%6 zLMHU`EF+nW$+Pri*U)oNc)pMJeX{YGJTJ(T6s8HwxzBRuv$@$Iiaa~H?&MC&3j&Wu zDxEFoylZ%8K8a-b?r@=WZd8 zy{7E=KNl`xVwkK*Q^W4Pl!w<3c<|9f?tOHZ!`&gn{*=MdgkgWeus>zkpEB-GnGO=B zgDLqiCGa&HuWu5z16#iWG6jeuLmT>APs z&VAtmE6*>{IcFH|47mT3d)#~P6Gr_3#d$wI=pFdc6kE{MrQ?&ul>4 zC=(hFiZ&eWifd>J`4|IP0(mA%;m8*sv@$S($rv9T^5Gv}XZ!9UheuQTM+rwq3H^S` zu%FJ(kB$=hM+w7W#$=Ln=aU0IdH;YrpNyDHi<#?g=K|WcGG@*yxcXWAJm%uP@^Z*; z{zl9zFNeJHO316PguM1jz^g9@y!wjIYp+DS_HxJ@uZMi;jfh^aq6DTQD_O+BUc~Qz zXTV!O81v4DDc2q*Ofx4zg6i4)l@c!er0XZ+$x|%C=ab9N2leN37xwdjvKGO|6v0JK zZr~_`tPl_9YZ0`3F^cB|MR0LSMXwvH>2!Ls{YpAw{r-Dw4j<6YC&!+%3M0?# z3bFoe`C{?g4WS*#dE|-W*V7P35zR)6AdCsa7<9m<_x<2ht%T@$lNEmf#FJGj6?m4`dHc_2$)-V3#kKf}bKm3F@UcO2) zNjN<0)9rQ0GjSC?%~DKmP=zMX4W81p;s*WEn79#g@tJiz!1p1H6nQHIKLXll9iw$* z_w|*9xiTg=C52tQH77L+r999YPlx!P>;)V|UEzxN)0@9+Hyw?5usGD#HkFCke|- zUE(<6ou7Wp7v6Z5Z+`0)46xgW2fGP-pWJ1*bDzo4L-KS)QKS`RVEuhp-i7NEuTn#) zt9yr>S6j`?jjFgUbotr4_gp+?%C-47%_^#4<=bC9KNng~$UBr2Ix6QWcc`Y3oEO*4 zU9V4$N|>5c{yIJyOYt!m&^Cr~Y96cDl5^ol^|Kg4OKIik7IDucwVq%WR&vuWu$vnP z=hM|`sm62X%%006XT88>G?jLAN6D|*TR&9zQr?XP^W3e=DVBRqrcRdAYPl}Iy6iiM zoH`}eVw6|PJgTu5)mh>kr%%pY9p-Z`|5xMIQP#yB5<1_@<=4s1BV0h+x`>=sXOl|G ztDi-fmFgDNxCI8aREz$(8n{~2`Q=cjLp~Bu{>zx>-kIdxV*Vp->^N4IAxh)2f0r#F zbukzM+on}HaeQ{FxzLV|r8O&nAzQG>K+;NmT}_P5KeJ^zN+p+hIKBzzWnQi1<-DBN z&s~^y%UZOL?*;f;-YG>PpOF*^X_1m!Wxu2oYOB3)o+s{Ot)5j(ZY^8q>*HG7wZ96aD$Mi%V&2ed>8hUvP@x#q~T59G&yaU+UN8-{VoX znpT=l*rn;WXavof3uyf-7tp`LFDw26i{)ol1XCGkR3K@2Y9qqOhibaM7iPyURkkSzIYtxi=bYrdt~#Jd+ZbC znA;O!KJIb2fmt4sCDO^awBvAfEg$*Z#HQntoTtWcm=@e08gBIs<1|NWL*!`+>ryhX zd+;i2LFYM(VFgNw3z|tXCCgKaJVTKY>Ku<8lgqX7bjn~lWs)W&xvZXyeV>hPo3l$@ zmYWR%&u3Z~_NIoTX+ht9j4_0sBJdQkb-&z+G}jIbzI!j_=21@I!3(P%Up>=ev*ilmNmS>EUl;OngA)IAEPN>1x@?v$6B)r>C_;~8^+}b5N_!Pq-CYe}sCx>|{ zSR@k;b23mnnU|09hP)UjUs;6ux;!#! zd2w;PTHt~>3xXbv#RZ)jd6tpo8JYIQHFOwJ^bavc$-b#di(1DjVZBC#-)ZAD+9*#p zD}0o!K-u+8o>Pp6B=>HU9qfWB2-eQvwWQp~!Wc}NfC3!^;+i@y$OnCS+>d-fVbo+gas{IpfKMgZ*6!Q_yI(Xtp|dHA~*2D40yfWHRGU)NJ8f z1-5e9R8x?r3CUq1VuWXGCDdUnN0C_bNs!6^A}oBC`LyqgMNZS z5k>*vf$|8Vkh7PXTz;X)voH2|?xi+o&PS}Shisl*;mo-Xn;Q|Et(5)!DYv%DmsUlo z4A#h)Kl21(Cv0T*CkgYc1+6HA<-RcL8@BHz?0#~<&L`XK-rZq5O-PNgpJMi3+%(Im zrR;sC*^Suz!a89)6xVVlhe-;DN3i`AP{Fd0HK6wQt2+4dMP?(cB@&mMAklrk-B zU5vQYb^J-K+vnUErjwkzpB(b(`-j~5bi{aC%-lg6<0h>v1q+nG?#o?wL59*K*kE|` z&4}OljRqIa`#f{O=b4K>mo7!T_DaB)-|%_um5|q83AuVDAa00+gAc03;SoI8o^p6p zaJU!o>2;s~&)?hSd+&_6zMY<^1fJ2j04Ih2qVbESYo2$1e$=$AYv^WG5sY}%Nh}$G zhK*Pe+viH2N)fEAA~>b}%q7lWy-J#Dtk`^X!?eB zpy&k94xwokz*>Rld1%i^DUT>_5yc$}EiRz<#s!}qr2KR{qpc_BgEqqB0E_POU!S65N8QWSt6zV$I5{`4NNyzm^8@sz{E z0i8}uCVUEyz5XF-nqzVpO(!h1J9Og~-+AjD&YoN5o4@udSgYVp0D2SrW*aZqK>KY1 z-NGkED_@jkMNVq1fQ>0CkCJvFv+~4KiSqEgh#+VYMID;$4LZvg>2AKj#&cib+^cW$ z?3Z8V>erUI`U+eLpyRRv{+qx3FZfUYvwy-`bBS>><^J9d#%kl6QN)Yqp5@&7I*mre zXf&bM>kv0$u3f*wn_qm6Z~WRzXkd2)_x2KYuRUP!@Gj%SEwW@lQKT4aeOH%v_a0si zadAq8nw!#hZ-(=hM@~uN4mI~)FLCT$A7dxG>+hy@xb)>)q|jK>KmUGRmQkh?I?AK0 zLz#04HyYGABycsYp4aQ_a&+(e`UDryhSK|%yrrM~#y?M^gea_A=9yAa6b>>fxJCAh z(hB6cN?KiHx@_~)VV;*_-CWk)xs0|YU}o~Nh;Q?)=VYT!kK=E(g`G4=+m;I*s;yY2 zE6a5Y7UpxTQXz6Gp43jym#Ta?xVl&6#L-tR--VUbmo+GRgNrG@?tfVWSBtWoYS~p9 z%2+43fTmpdQkBzrTINxXjtXUY>*Un83X&>i!e3EBcuvu7xnGrAr`Q#Gt7Au5 zD;HN}(kT`l9mgT*-SU)@e~yO^i_X=o|9bNAd^}I~=go?oBu|(YQ!-QDOWe1b*)dng z_mXE-Dl{IEj>yQY+uo8EiQ_m`mf+F~XCq8SS-BX}O6EjGFege+VHLq{jCH8e;Chq9 zuS!5!lB3VHNuA^J?ecVrUt6db3;-d*;lZV+Rv)qWkW9-kGC z-p{HCE+yo6PpI-xA=`$SxjL6+EJ}Y`6g7+EI!;@YN1^1GQ2p~!1efwyhm@*k{C--v zyk#lSafP$1hm&)6wN8;s>uDdYJwh*HIbQjd3+P|rFBa;8{TBqEt0GuE!qvdzhqXsv z<-`H4yn)LD?&B4~^|1213@;zn+yPA@x-@C1h=z*91+*PfjWKgBZOT;T0J!K=hei=7 z*-v+F)#ZYR?USItF0zWjV7U|DKMfKE(+2-XPTvqlazyL!Uv<2 z9o;5uona|zqbF1H(Gapla!|J5Tno={(^EnHf<19wqg+1rq?%_{sk^wRV|&i*?_*J5 zNKC=~Y|JOcko%Eh9EV~#YWMssC+(0-ACvECl+SaS9Lw^A^e))Cx1A4MfQ6S92A&?q zkms3Leufb$YJgG{!y~Z<4w^E3WE)WxxhR6$Ep*(RDbyFsMg=xPJ{*wlZIkcsP)sK% z&nH;jz-zWq!D$r1g(!jx`_k)&bjjg_ba;U^1Ct!Vs_BCTuij?yReE(#e>~a6q0Uw3e3f{9rE5LI^SVK}a$g zF*!OQAB|WsKAkk+{`Dar{CJ0-{rDm8{^$W=9CP8>wF+O2e3S+qgTKa)zqilt{q0Y9 z??-#Q^Jfov`$yZn{nJBk-cOjOZc42jI~+fhRrdN;(d!h8o>H<^td_|Mf97^rl(~V6 zXJx?k;R34!L==IA4VQ8hkyf<3F=yU5OW3jUSXfKohwnk!7q`W8ieM`+$rvUBXm`Q4 z*2GHU=}^=kH}LrJdfU5n=Aj$RhC}b#EW8k z^9x9(9$WA1F&a$Cj3_V-GF}2MOI%vL$uVgZ9>wu|FR?ZJ8xED?I&kfT~yox2z&Kv#z1F zLdF4K(eyR3U1Q?L$|qL@JB#2He`Aw)b&2cOKZZ}=qjT#621f(-r-r?$>;b$#g;8dR zJVl_z5?St{$8JfW6k*h&+3Hyr&>=|yHxE#-IZe(h|?UwyX8 zs~aKbIzHjNkqrP^d3b(A5cTM+T%>vC62--3X!x`3*njflPr3Hd7FV9T%y>LyXJ?PW zU`V4G(_89t=l(;+>6Aj}7+tW|>(Ogv&}wheUAw}{g*Q3-!f)`*mtW@D zU)$v6FNVBuMseAfEsv{g{g;3IF5mn9&p5ZT&Nv;jH#)%R0Q}F#frk^gv!Ag2(GG_XZZkZ%Lz)aJ^3o#sc+YWTqdW4- zJDkLqo>ETFIW};nLCaPuf(s{xO!AZ z`&z1M4Hv`M_wh%%fF_@9)#S#avIfULb;y*xUHGl#onO3&9ar)%f|O@ltnz$YDpbl+ zA4iKrsmvAy+l*KCd25l&=y^!)>JhTzcvZI4yqr22bssm?Z|xfAB(<8SYlV9Kj8%X> z30yyLaFmuPrAT^@P*rl*@kY+;HLf02**T6!OR71I3+S1usq7Qg9P6?%Uz(JztwpJp zn^~nci)3IigCVW)!?z0KdB}BBQ3UJCew}4K1#S;uCy%Z-)Q>7$U-6ZP?*#;Y zh^KuDQ;=jS(_%_$#L;t||H4&QKL=Na`!3r@==X>aMR0YmTkRGPR48=0lywqI>%7u` z1@#_LZKL_VSz=L`D5_kEl84BUtCgeEVV;h%q^cs=DV3$|9p?GtBu`cLn6C1{!9(HO z{cr2-e_AN(emWo^B(QGxh124A+PR)C;YQWZ3fI<8s|XfuyVjME5+zT4WKn!MZn`!s zkEi9IgQMdldLLbr)4}n?@xI#bF89w;ic1;b6A;YqF%C{H>V5x7;aaAsEO?l|F7jRt zug0jhyK@2E4SO_$7XGhXK>rGVnea<2%AZ*gEW=58Q$A@Bt`7!_@#yP|(wC1D`q&M~ z#i*vL53<#(?lx4t8HM;XiHHb@l(>N|OH}d-Yps9XYs}LQuG+2ovk&q{$tup%K5Q#n z8*Nwc+CZ=mLXW~pxz{;9yIDDlLM4;0X<N3If_uNGptJh5>Ql<7u&K$cr3LYvM4V9R)j-e)1sU4{uF)XD8?WAZMBt ztT#0;uLWFP2`P->=(N~{q0}h<;%V@E33^y761YuKngObC6QWc*0Kj$9>`kD%L5JUi3c8Q zY3hlGqD`5iEK-tX0s=@71W>4|tR^e_d`-T-z5PA?Zo`8wV()#u)GP6K{c;8<8 zoZUq8#TT)o`^WbM{pplRl2T|0eUDZc(1}9YQAEGc+>8sZryfMBthUz((;PjSP{h-t zGwRqh8$kKJ)*kEHecknOK;Yv6u(PCrROf8zgiV!^HX3L@Fngog68Q9Rj~90>4GWzw ze0b>bQT5!@>Dl}(bgdyvQ_>OTKZ2kEt`CLbP#2I+jYe=+Kq*(u(bUO) z%k>9ZYbXlR-7T{1$0$!sIxE-3TUxKK1w{>@=sN=R zhK@rpbM0_u&F7WNUCzCEk+ZL@a{A>iCtqA;-#$zC{1R^936QJ%u=f~twkrTwA-<)U2^AUSshBQyTnHn1u0c5t zUehONhXgGjKT<58@3HnmmyL}a4^1`%U&;Qt-ClzW-@CxcubpJ=<#m={J3-KD01jx$ z=VX}i@cl=O2UAi5blPuR8Bn~_i@5k}=Q;7sGjz^$P$Y(ba~AtJPM?Flj3kz+FguvS zSmQYJO33*)+NfX+9BVFHz>a7+V(CJQ)gCOVm?T!HLQFshj>GAfmw544PI2<(HBP*= z&c>@7ti85QW2KGX3}x|x){w=peHZp0!@*s{@Mz!yxHT@s~s-A+Tzly5tm+xc;VF!FTCF3#Myw| z?Swe4_rhlTb5=;YrXf6YT|47g)9)9e)!Q%RdH~~L!o!CNAAOSY;ioAdej?`wAE$iy zamt6EB)t3HCRaY+=is1Vzn{||WhDq)(xJsii|J`@p7!3-QSOd<{+C718h>4ea}xba zBUJ-}XEcJ1rm5@59>K%3TKwpkI`Yc^!7D+=C3eXk-KBA`O*k2v#e|hMa8^iL(Dua~ zv^(DvDF@FF38NOiAL9EFTKQ~_H8&5$1oXB2jJtz^{i!B&;f0>Zw@w7SyzKGPO2Fxk zOUrlgYnsk8q#RQ1^Dt?1k2BnBo@01^8L#Eh3dG4z-o464AKu~B7cVfKOnLZtliOR5 z@O_`v-V%P2|nCPm&N zPYcp`Oqz};@&uiWRxOB$Ye2?bj)&`p1Yw(~wZ_uwCDtyy#i`f7#ij3`<)ybeymZOu z!kS_&sLVlQ_67b&|M-vj;SWA#xErH0*c%NPCSw$eQ>$ydbpAXiR#$nnv(2qX4`@aa zCpK1TwIe?J{5G$@ahC7C{W1#Jp2EYujK`mCv;Xi8qrJPNNuMH*Yo?(qs^`Rf8IrMK zeY9+k!{D!cQ}&PvL>rSGV`Ad4~M9k1CXUJk@98EtYlWwg4WUYn zkT$#qc=#MP0gV~u+cE$A1nUuB!$PuYag}IUmLRU#PU^T+O2}?6B5aoOJc^#otN1H( zLkU1;XM3ClCZiX{R0mY7Y!_4Yrpn(%<<+FIjI+uE`!DfSIcrPRd|n+zHguUNm#~-t zAF2{sU5WcLFKT71&by_j@lmD09q zk*NtsiS{~}#YrZN<4~2ii^+y#WuVQz99Phg_P4;NggIimALmD7vB*mTpIv0)fs7#k?G7V38>^Qc{vNj z)?>0)@_(2E7njg!7$8_IPI(4|k`S%3P{pHbG^~};;I=?83%?HuL*5?+1kc}Bq$y0y zv-uz-@~*UnXXQ}kl$0@515hmwb#AR&RfZ%~0phcKN}h`uXU~ACl5dsYCz0^(8R*yU zdtF!lk;M>;H214=_2tOs?6U&F!eRA0D@jYX)QN1wwXM^txaD8I&PAadmuyN7mqDS$ zDS0-MIE*q-xtz|H$|}8IgzCQRcQ(JkK&1860KxW{C;0~Cjs30Xu{Kym-2`;gn1FVl zn}B{!f0O9na8a)T!TaT>yZBs83J0&;`{3v*_^8U_S!j`e=|oA_B4406Td#=b{nzhp zXGNP%hCP}@w225+AS=eK^+=P}+;q6D-)AAqlRaFF2^Yu6TuTQ|BNMB$uIssDpUAzV zWY0-TtzDU@nvL@?)x)&+^P~+Q4t79LX-8=VNl~yH=iC_<-0906$qu?S6K#P4W%h}5 z9fj{Yw8DUHBcj)6&~1dY10UaYNQ;6|oY0@f6uQ879ok_);L2q5AT9W_yD@)wGiEOp z@T%h}URw3I*z@Uy4oRl@Y&YTOk7FJT3mUHCeAnY_$K!O{Wx3%Hr<$E<&b>j-!$FSc zDbDs>&UReZB8RrGa2>@og<+yuYbx0bE-5%j3ihV3JAtWo7^INqn%7r-RvNCDk=BZF zlCU!x^Y~!EG)?gwhi)TcrP*Y;)g+7}ZpQ^5jtX{EhfZ^qjj&BI7*I?m0#+PZ#B3*` zMl}uJLsU)_%mbqJ+3D&<-OW*99uJ7EsOk=AGGM<*=~FP(c%|6}nWFE6~XZui3=w_HaT2Di*4Tc#v13p`zoiuw#vy@I-GcEgN+wgD-ifp8`pDqaBY{#I5jPy#O?bI%WF+8 zy>p&RzjjeTU=ZzJ)rZj-CWY)v8yIuMnbBYcF(HisgGUFl_jnjVn#gn4P6=sTPqTD7 zVC|(f)?Zj=V?9L`4%yVBWzw{Ic8QmM_ccy@{UqHBJ=`D?5E#n6nUg`x{a-v_G?*OTj0ZD=<|Lm4e*=6#oq%O}~}o^b2aO(|nW z16ZzMX)WM)|D%(<@!e%Ez1ro{D=l7lrO6Agwt3;T4wqkRv3}a;@x2(wQM5ZQ?T$yg z>sDtcB5H=jaYmktyy~B+y`O((FSOQVNy5X2DIa~B@!_Y50e(|H_$1+jkEeY2$&e2| zdBEeX{!Ey&fz95|JuYdUm-_Q(rK9{D_580oJ$rBat0i>^2rfvoxcm&_#7_Tg1tedQcs7^1bp_gx}K(Q%;Hg2sv>SoQJrD#^59)E^R0 z4#?6mc{W9tn!(0WiE?oqAJ>lv8%wmhr&v4lI_JOkEna^6HC}!v;Kd7y3q4qM#3Xf| z7xeoRHn;Y9@BM51SO4{Y$KyNuY;;z5xU=FGT<7&S&hfopc?E#o1RfuxJo1X!8lcYWO!}asijDY>rQLzA$lmPGxRa0l5MB z52wNMvEbeSY|5_4GkGR56nBfrrmIX}?SH<7vU?cY!vceDZSwtaOyakCSK}E~PD$It z=BWik^+d8x|NajDKz6>kMZ$uV2@>++jVOT|y+sxF7wxMpQi zmE9^`%9wzT@bHvK3v2X23y<}=sXC9AgC|j)8wKUul$}?iTm&L<&GK8tQ$3OU*|{kb z&J*UQ?6oT8FMwX%U6s4Db5j{PnSns+Wb>usv`&@T;fjB8@2kK-Cx^dHj6CcD4mAfC z*EzO+F>)1NELTUkLWtLpCM{s8L2zGJs&2kz6hAX*SaLUSgRvTFIv--*<#_DU6nxvA5rA3ml zBxZzX(p$c%Qs*L8j_ReUawRcX4Q_ESZ7ijBv2|UY_0X!kp4D1)YCx{99DF4%B`++8 zvt?M)V)DFpI7Z`HS`d+#y8xWEWW)HfBwQW_f~~A(zgVGqO*)^xSrUIXk91iUq&BuP zlJKppo)q4b$(B(G{V*L)$+MHlM3mR&_tdu6UnG`UAJ&xiVNLTz`SC@_ro)C+kApHE zaaqw}6VPqHP4wIZ^mF=~Oke(U{K7N`1V4#vB|HCADtTrq^}|%T`r@>x;zWu~F7DzPRZJ=LP2LIUN@Xm`z4XL2m6RIRjZ+>4Ic#;V%O!wx*P(d3oJZvLDN zss7wm4z5#a{b@6}oTqty>LJaCY8yw->@`w>boI~#5U?vfV_ooQl5uUn;Pd^0z$s`4 zif$Aw$=hclzI&$0+h>~m>e&XrcD~84 zU1;#@=No+gY=gH?HTm|bh__Ei{OZ{TzjdL>Z(eBdjS~S`k@K(a#{9RRO?YoB8vb;*K*E8BmTD1S>GBeLocJ_8~S}htYtGH%=U@+Azpo@ZJ zG6KL4Bce`6Wb-Vf6iPYxVMrEF86E7=&@P^qe79hQ7R7-Q=#{O<#R5Z70>9$M{u?I} zjj8h;C5vQyW2U*`x_skTzs7I=hu`DnZ}xcUTWehY)(Kwt<_Ru+^Awl9d76vgJjME} z8-%BpP-2z=R3JM(Dw%EpxcTmVKKT9X?C(wl=r_D81>Kd1xBtOq&b+pP7g__I+MFIl zU0B(G)eTr#heikX$B<><*vv8R6_AWYyLI=Ws0Fk-5@z8-n!>?#3Ab?)8eN*FSJ-%S zgHzu;&8cskWbO4eqUAQqOF&J507@WO8mDPL;r1`?GVD*uv>nKbD^DpdeeW!<|L)5) zmYOK#$(wR=*94?|;<3-&_qUl0643~*<*B0-@quQ%>$3XFIf7Pjc;$=IsAd!I^g1iA zt#RfXCpr7gGo1P636?K(@q#8Kr(pXbY+Zv+ulzpI8n*Ai{m&p7flj5Knb8E+u-1cf zr(pGz$%8d$^uP&CdTi=}BIeeoTip6=uQUT~L0}EEx{5cy+o098b(e;s4aJfORu=@m z;^GS}zW(hF-*~&rx881*=eOT(^PP9jbMd9KT)(=*aA**^QY`iFRW5Yx$Cj!}ii=yk znI7<*1N&x?KMsXION*W_diKktzwG$xRQ1#UO>$9@GJ6EiY6Qnn!(kbn4dpN zdG}GutwF(lqVW`*ZNWRILw@ICgI894PP9Gzr!_;mV3_3ma%K$i2TK$f5Q7eyTMy;TxL3%@ZixV4-dB4?~fRbV$Pj8MZ3`=aC~-0 z`%JSbuB$k^u}+rcY;NxH!=HZ2?YsLZr^%U9J)+2$^aE`d)+0E17N%2p{6I4qY?4m< zWbue1kI{wQ_g&gd$My03CXMzQ-PKE+eBpb1_qQ(a>%ZONg(X-GAhLVh1O5JlKmOO( z_=o@KkN9u?pTEz}gFdV69^Gz(dwY)<=VO{t$eR~m=Hl72xW31`?|;m_t;Z-=b82aY zGpE*Rwj$np{~B++d7gK^{~8z|cym8v>!Upm?%!s#dy8puK%UE@I+;MO0E7Azdo|TA z)9o@HSWR5pFG{A1W!ku|mttDknbVBYYGcDX7{np>i%wMo1Z)^KoGJ`UvpmY8Xj=zV z;R#oA98SADt=`MO9q(Gsow^BVC7OSh>Kw_~-1dCxBs|ThcK(q@s=Gbvtiq^xsWjzh!>FEF9xZRPUxv81oGniKtc2PtVA*&R?})L*fEOfKP;POg2kC**F{=6dI@0rW38!K!r4&21-Gp zGn29^T`3t;vqNx|HhU#nzE&QVZ0VBvxk{(-P=8+0yqxQ0$#Xnh#{=z<>w=_6NOVF@ zR)S_#D3U%gUF{ON5e=^?U1{_)_x2ndLLvja=R}B=j*Jv-lxzHY*)HoU7mO0m(_*!4 zgq4j*#-58v@*6XcDt_wv-nN`ovJ_wSFJ0W)Sn52uwKiyZ+bR2Y`&{< z3m{i10wqwoJEzepVT-BqfI!N;G0$u3Nc)WlpNr?lF+3hsKRgRr`8hZ<3RzYT_OK** zZKeFAT(>0tT>}JHeSu1T623ZSct?{B%jPwP*V*@9j+8M)ZhJTN5bgD|#fefQ3w*h zbcW^|JKGJYDl7Y3xUBxg6x56f=yHdV*+fM*ZbgSX+q1GPCxGY8T-wRzjp-U%l zcr?oRa4Y7@PR8y1l)Y)jdei0JAm!7on7st1xro6<^ZJUfvyp>g)Mg!%#0$$p^iok!C5UykPJ{Fsj z#dL~JQ=C>8Trm{{GD+v439=M-DnRhs>MCIvm{sUATzxSzg=sh(va`FxV9=-4YO}hw zMi_=>pSKD)MVr#CAk9*?cen7nJ=*IVW}(9@UjhV=WzkC*;WrvMr8cy2gEdoMkQKUG zVQ=0mj9KF#!0|l_*I_ys;A906z7&gEScNgct4;E34i~k1ZNPR*R-96I8*N}m(d$Kg z^PSVY^6gWcy4a@K)->84jZQ$L)uy4QMClHZ?&GI@)bs#GyTBMiEe1X{Vy=0x!`+V_ zbMxa}rdeUMlLaKy8gLZKbJ%}0V)ObQo7Z;Ox-RGT^?kN)4%oXhV)yn4<@q$$yWj@U z=|HmyNeqQexrsB2<;*kCnK8BQKsttXtt(x{ZK$aE+p<;R6Hw9BeHihlSu(yXZ9Ma6jwDp9J zm(W>p=qy2}=g{eTbh;j`c19x_5yv@O+p@^cPAG_ED)71dukld2DX;7AYgcog?EQRL zmTa~hm!9Nw_T7_Q9;Rn={p{|ah3dIK-)Hz`#(P|9c@A$Z0D{v3wiCtJ7;p()=y=fd zXoj}nEpj$iTUeO6%qA(%~oA`c&?}rr1X2)%&7^GT*T2YVCl+o@5SQlh9!tLYJX4uK2J25fD*+`9*Z z-8)Q&+ayylu`F7_QiD3m#dQNbzeS_HPIu!Hr(gUIZ+>%~uf6Kgbir4UB{}!*jrfy4 z`+)!9pZy7c`X?Xr`Dgc-^kY_9UAnCn1)7KZTXdRDE}uHfix(~uCn-1X+~elM`;3w? zq33aGWsS2ZH)yq*T>JbUU;oA>-u{)B0oa+s!=04JAMbE*|0bioJLHL76k4?&c6570 z4$U0`r^uCDTUSzA?Rl8&RBwI!Ct=9je z1O8ckVBu0^Ci`Xz_@K)9LtADADx_8(%i2%P=I*+Vh7R`-YvOIlRvbCi% zw?(7KqB<(Fe9lYnXtHUUP47|Re{r&5&G$*{SM*iHq)fdoA*q=XXG4FMSdMb}%LjsO z8mb(fCvEEecF-wJKsTP7fPPNT>8qiy;Pd$cKrm%>C|A{Id{jliGgqFAT`meim5un~ z#!lj`Vy`!rwj<=AXsVF5Y7i>ltkf~bT!J*l$|F>>;dakk)7f?%J212+pJv_F`LS2Z z0>P#EC5bCPWZ34(M#cXG(#$4H~ zn|SR&#F~uWo+v&)$hkAfXu5V4l)`hxET*Rvjw4{O=O`lIquU7SHA7sZ#po!-dZ$U` zyZDZx>B&U7qhOp?`K7hyQqSSlWigTSqx)0-m+K?me;l(j5!25XmqMC>nP@N5SDjiz zR%rh8&X|Al*?@n2C+36ADchrz%PS!V(~Jj$gkh#=`VJcnhZB*@Z=4VLcV1|+(ew#j z8LTCF#x%{)C^kB6);cXQ2km)`3(e=lnE&Cy0oq^YQuhSmG=|9p9mg|+z2laJ!AP87lSz&2uNhab< zotLI5d6rWYVv0D=QYMozy9c|3OUty^Hs(VIpvZHQ@d%W{4FcRC1ZDP;(VAQf06fid zCRs+DGBf4`g@l+amI&i0O>@`2&W084(vUGts8K#1^pcu?!b5-qFm4tEhs@APZ-_2 z$Ng)2Jb0LpYF(PCE)Z?yBre#zJ>c=RT{f@pvUPo%&FedCUfX5!+AiCl@3C`zkKNDr zaD0#EMi;l$K`r%A?G{YOk{H*4!rGH4#AI|b7QnaB67@Qr3IIAifXOyYb_5um^vyYh z(Fk@25VfJV4uv8a#!MdWG5zo^w|;h)Yacyi94F+aVse0H%c0eF&>1Y9=&*F6jT;8? z9ULM}Je+Xw@PG#&ZK7O7v=pJ^TozB%@~lX5#&`DcBA@1Zo2)+tt#N$?B(T2;+xKAF zhv_~{_F%FLlYyM^HuRdXaT1agcJIUHP1xIn>CogtfzAqa0V?ugqYYV9UvnS~GL+oi>Bz6i|*BX`FQ`nc{aJ*)dg^t3P*^)C)T`8PvH0l}Gu-58QW z`m#%btfjCPmA?!S9H^A_AZImF^a5FTQ3rv0p`sVMbVH9Y2#g8n76~5X++k}{@X2<< zhg%t+?dA+KP2f75XgIvI&A%4`|sW4^DB>d`Gs?gMpGU<-saKX4sn){ ziNsG z+AVJ0yUzz#uQEv|XbM6<;MDRur%!CqYBsoa=Mitbb%Aex_eB7<#&CBt<>5z<*?(}8 z$=+Rxcq9v!ifStPsE&;`6Q=f<2cs5!TTdc8jZHavt-z9JAqmCyB*gFhr0dgYJ{>lt zmXrDzd!Fn&cisea-DKxn1+78)1*U(6lJRW`lq%75EXVy8Ah7+h8IESJN`TGArRynq zIyp$cQ@}k5MHW%XVPms7r!W9v31G{fqOMs8UXA&!scBViqfzE|jXhn;M<$p{aIOZd zRH>UMk<-)4X_+s_AZ6z@48S4$Jxd5yPW4=q5UPARZfNxs*t9*poYrHnn}C-2Bope~ zLODzIatHEXmetzal%0f^c^X@+D}L;ilpPy}oRr_b&Eeyb1)v3(lQ?s2t=`FD%c;yw zRa}Usq0AcvN)$Fqein@H1e~q+B;{L?J(XpC%uxzYNl6hnRn9tKYUdS26IkXAZF!R1 z6uxx1cWs>{Zp*jS43e{TY1dC7n+p|Lmr{QU2&~L}p^S-gQk{~KmETdF#7#kJxV7c0 zKrAg4IwvCqQ)evB)mg4=3Oqa_rycV^q0yyQYh5xLqbvd?5PY~CNvW_`Ir+ji zXr8A{{J+3k}Jtw*&}+k9{eg&VP#?K!`b{)C}X9-#diai zqZL|yoA9{_=;!pDzFPW{pYj(3f-9<5nqr)HG1&_A%g`eKQVlKE2)6IB9p|~qszFHC zn1HTU2#V`MR~Ry>u5+`WPvuS{GldG%!8V;)*R13e)5^B&vh^g zge-+F7kfUhulg*75N8>axL{{maCew9j5F>G3LZ`sQ!QX~J8<~=$%szmiWcSkU_!}u zlH0?SAKZ`m!Gnaj5Ywj)n$P!BKHAQBIML*V;(I3p{^M7g{Jj@jeDg%aO61|2y^ulS zJ1&hdpx20KhXKCpqETd8^X^Wcf3Z0r_g7etdi1n|9uCo|bjoekJzKZQlK86oJx(|? zZVt^_3mwNSvo>XO=0Tm5`7vQB6rpm6i=1Je$o`UcKzk(32fB#mLk|v9%}I5641XNu zY~jN%OE*9$s%*fYztTQv=1|fNXb*Vlu%A znmAEg^1+z(%KN*x&6b4ul{ur?7b(DvF$bzt7(84oMPo?%YLs zy`E?So56FMX7msC7>`H9aZHw`?Cxx_x%q%J&j?r62$$E$i^?Rk26Q2NGLQH7MDf}W z$sCtyUNA{BhH*xJny^2K*`LJpry1ikW0K{hMS<3$9c=4y6eX~pp~b3mn`$ART95CVb47PoZJ5 zJ7VXf$LzfS5I=zKIb-rVY>3wG$`Y(}U?qZO*Q9L&R!>5^Cm`_6s{#OLiGb!>8*|W* z4GOZ@!+H5MYGnh$6R`dgAO2{EfA!yf!l&;KxPLcc8cRQXKk*9U+JS2rfgOz zmuHtQdt83O1IL$k+i{^Ci7EWiq$;BYFiv290=r|_9m38422W$jVPSM{K}oB5`yr?c+Mr*q+y&lf#C>~{YCS?J67{bkXje)?ZkY90Xu z7iJ&!LJRn^9x0lh^kw;yKycGdITdBJe7pB= zelA8RQJ@?b*9-827GductrMqMedz?JR|8HM;{-qb$yGl5;1(Cponz4tz_Xuv?nXrBL2BZB=;>iJdmdG|5I4I@eI03F3;RP+C_6fQx=Q(-#6<)a9 z|Cf69OLU;ks?{qqlr`!N?bPO`DQ%u=UA7|4RNhr2sG-r42Si8H)#_B@?V zi%+lK;O4{o983ljS_6vE3plm1#>V<8o*#1M#w}id^DN)_?n?kX7{JYkF%Lg}z}|zK zjQ8%6#si8xMd`xq4JzZS!&8<*U*)$Xqggp9>nGB{*w0+Czk$~0IPP~UjYC`%@m}J#q0YJ zD{?KNi=0fDPdFVcsB6cYb}^L&gCx%!vxlhXxU=Jar-A}>ZSEtp^BX!Zd6GBtvayH8 zam?0MCOraT$oz~pGPG%*C4C6E`Z6TtYqktXJ{`B5ip1(UU_rm*hVdk_`62Pl%0oZJ z1T++qH%I12H9s}~#$Kk5A}Cbi*E@AEF$^s2GuxnK?;WU^811t<*6KkLxp( z)fMHUWXUTV=R7A*qnvzUyFe)?(Vk>3?kRt1%hp3w}`50XYu>PblBaZu${6|KHS*VT{}25jOpjV zoRJF5P9d|^qD(-}R?d{+)!da`2J1%tZKWuC+!f`-pq-?5Oy|2?Nldk>*fA!Zm5H#h zCKr!E4q|3X%##Y261VBZI}V-_Ggz`}S0?ero#_f|8SH9A`^=_gzLK|e)N>1J3spIx zjoH*`1_x=*L7Fp8HFx?24@L!DUlV%ZyAG~nWaTJ)$076_BG1KjC1kr=)OQsv-=P;d zEJrSJ>*+w8hq z=9~ew9fj+P>;Wc4&XxX{5BeE*;(#TuOE-7$;{=_`K44aSi=}Mo_-_xnJoI3W4kM~y z%F9u7`8l7ik2fJhk zdtwqgYN9;fI8f4+k4L!e4qm5c>Y68oS)iv=ig=3Sx&#}iaiZqjxO4j^d0w!xvdYTJ z3cfG0Q78@$_SxKg#9(khp5vKniobxSd$l;G%rZlky*N{PvBHweg;Ce9O* z@dT&P1WE=Xx>nliU~rv+UW?ZHGC@~n@$gVX3VsW4*}A^VjUPYY)|CSe1}Sl&$%=v;sdp^Dc15{8 za|9^Pp=L%}lWB;PjChogjZ=nuF_S?`bG?PzjKKH7Qvz_tu}PH)HA_T0z0lC=33%#< z;6|j|DWmIs9$ufYd1K7htr45Ihiu;1XY1NFkFRZW|I^1jzPro8BxRh+8hJ-4PQA3u zOTTi4Q!lS`=Jj=2s~sMEHe|XV<9H6IzI}?Y6V@^(CmD{p_v8EAeeVI=clODPf-`Td zasI7!g2-d_LXV|WZ65@j7czDDayw9KqHj(csRercEj&|9l5Fy3p;SmX~l(tZ?sE#wS18=gzeu*MEAS z2iJBOj&kCpFbf{6>1D~sLaH1j)EYQ!p3C*@vn1B6oCpa*C7MdU7JzquQfe-N*(W_K zAju&$XI4O(6E+-Ls{xIMVmj3|Gtu*>glFTPC+n_$U;mfuS&ufH`QR$QbMEK77seUscj|jbKj}2w5N)1f&fdMblGsd@(v;>&tl{_|7u`!K*>a-#y6Mg`MMv(a#PdD-Kwbuj^bvFEeV za)~^J_XHErqom-2EinQ8@ovh;dkOa^8M|>#Z0cuAj^pCEKAzts?5xpRJ;~~&vz%HF zS?>u%^Wz_V%6mWmoU^A+5>FHM_WL~C*(T0X)92M>Sx%B>gkC@tgmhX>(k!PLMnqvC zZJX;*sDiEjE)Tc2NQ;!;`JHd_{dZpH^x1XBz^%J*>-v=KyEhs2w@Ic$^Bu~f66Jz9?|$zUQsCY$+`2vG z(Z{zqc+Xe+^G_%uC6OU zywX;-Wb-1aujOxXw!$t)jXd zg$|d~@=8lNwRvp;rui~jl~q&6I7XtTpxGIslDY#MQN>Zl_Of|Ha?^M zEag;_XjzvfdacSiy`6F+01Mo^J4Mirt^2&v_;}@3{uRFC8%RF|3*^Y80ha3d`ejI! zdj$WofnfOprKYGPJ>RZ;QL4fa?p@{53A!{rG5`GB1oU%yPJe~Te3D-o5G+)$PG`xw z`l6M=QT}Ylz?s{m9^*$qVh10O4h-7MGA9jO|98PT)9ZFsP(cD;?iihAiMV-&oF*GT^J{csMo?4HykuS@CJiMkDcP zFo2sG6x7!0&8EFtaF4fY;Z2zH=hr?XwNOelp_X za!BYoWJSSn5_99xF86l_989JxH$np6!}B~M-{nHj|3mhf;fqJ{OBPMAKW8J5{e>YJRWl6^Uv7X*&^4PrITmS z-4%vzz#vW;rJ~h4N>YYt%4j-exVuZN91=egK-hr1XQqET6=LTl2ZAU5Wr3vJpL zQx_@6!EZLvzDKMI2K&1>X--2M?G2><^umCs)uhpG5i}cw%_d>9LC|c_JH5g3g;TUv zmto1w>5`2T+`HFNgB{sdw`@mr1=4AwE~h-%d-l`?Xmk*G zz~kn-kNEhH?{F|lndXwV%G-olAV~fi^~M9 z5Eb~)ieNGo^TPEQ6cA4Y#O|$wAA#~gH5q=o$L62i=EnPbJos#v$Jcjxcy*h{S9f@H zZJS4*Z?m^MWMVXvGYTBfVQD?$m0vx>8^3dj6EB^>Yj!x;(LDHMn|Pe!HhflITqbP# zxUMXUiHBo$Z*Ftt53aFwXP>wzKtbC{hEp3ka-p4W5U( zcmn6-3hv4>%5C%U4|n;C|LG>TKe*4{qXTklqOzv_Yx7I)4H&!t1eTIB>wae^V|P#U z`Tzn!{k~fr+Fb=I12P!KFiMSy@5-#&p++w+pdW+d5H1D0@M1umz{7_b(^!+6;wte~ zam!Ejta5YsdWPm6E^MognD;*_%tg;Q^!!P!^s~`d6;7Sz!~E*F{mY{Y2v(vIoC*-^ zCTZVam&$Toyw*4zBAF1QB7_!VQ|lh07>YY)uM2*o^sb zJLB4Z&a{B0r#Rho`P!<-w@wCp<3z}bwnx)HJUJ?)$qLw?Y7VA34~7~4`fkj7TNzgl zGIq0^SQlt(GPi7lk+$CT@VtniwMujO1WRWxa^hrz)m7O&{V)FFV}A0JtDHS~0tdxp zGUf5kE^(HY>N z|95=ztry9FEe*GC!QCrUb{^hiGCUy560`~g0CpQVUK7{v;07H$zb8O&_Y6xLFR*&4 z!O}TsDY$rcoik@v`Tc+K6K>vrKz}@>6SWAv0M`{zqup$BVs(Y3r4Cy=dtAMFo5%ef z;yfuO>p32ssKv$8r|ES&#A(Wvo40uLt&6<<&TEW-yN}`4^$FXbUZwx&CgXz#Wa)?^ zPtCYcMpTY5Z|WMbttvlu%qr7<_KE%dVr0XUGNX=|++9S%i;TxDPt{oS>HcTQ^jl0= zcARgY)?K&@OhC)~>YKD=r)2H>N`}?=e0D4>@3aB5>xW21VpFEiE#OxLvdL){WSdi& ziho`ri}+P$@>PJ~DqR?U>j0Y_v1_CqE(*~otZV7j^Km|%c3)(*5U3S7xMm@H#i`8? z>5uwGlM^!mZgZ^qcjo+lQ4+uPvVXi%it#IDO1P3TZYA`rJXI;QrGK`p+N(t-pvC{; zysuB{Q_pi7ni=P*n(~1yA5~gv<^ zH70MBS;$~DUCa3^(fmJOqRt&IPA9Cdefvd?WjDRQg688LY+->vzY%M{l6Dry!59a9h5ck@*7 zRgvUE#ffXa2{BOY<13%Q4Fu#-3g7h@=VK1i12ozIl$FdRObOM+#aB(V;qmadY5mxI zlyq8oRI;wStTp&0>`fjt_TAmNfbx~P7iW`xSSOJjl zT6{k(j;B%Gwaqv6O9q1Fd$JnnWi1RfSspi*qg~lA_m^iH+LA^V^Mqc+QndWs1oU%y zPJdlUeT6`a8AxR&$)E~KY5gKWjEzQNA^66To+}`M3)0`D;#@LPq3f@d!sRr_6JPjm@Lg8 zFYwSP$1x^mHG6{*_qO(Va4=#NXXLq2h)W8@r0eRm^Y1# z+1Zkx8cVZfKz?l=Z;mH?xHsgF9>*j_ixYkue;T9meBm(rS*XmFV+125yt+2 zp4aI(ZjK}~X<)kTnbu5nhU1B;;91i36hCvsmCtAM_hsqJ#8%`5SrStK-r5!(g}`tl`CzjT>XFJ5N#+(i;~lC6Uk27RAiau=W2WT&lR?1|WT9_6sM0+-G} z(3HHwE=USZ zrVBD-GPbi8@y>tvB4=M)!wW*t9yi~;$NT^M3j4bw(p;0qIis5g1cAfSxfT#}=g0T> zElH%YcH)Z8K*qHv0rJ88*S-KYZ5IBkpvtT zkUG`{PE&L7&78>H7foml^mn1Z4LYCE2F^!0+0?;3wSfvk&;jJ9xpig0jVq5zZDg%w zk`ei;tCFDQNja6Z00g%E5&Pa=w>u%<`1UCS1dj!v4i!WWY)>FHo3qwSiM_OyQj)_Y zg|^4~36Ha9Jg!|&8IG!WW-n%GX7028{mxC`*V9lZdq4kt(UV^W&Bro-|I4RpqV=yU zH9dzntwyjeN+1|h%nlOROEjUQ@JzAO8hk$__<}(2N|17)Q{V>;qNqg_wekEA$MqPe znx8+M^3z8NKikZ>KPs4Jvi16#YaZ{M3VG*D$i*d}rN}L<)*MAeq1hd0{I8$K{NQ2A zdpjBT@I2C2Wt$rR7^XopSKR(p7!OPXeYW^-qsI}bM*r&Gc(;M}tp)@Zg)(&?O{ zy?UPBrI5}!SW)0B*xeiOM}PbtJ3D>SBxgFx2t1!|yNTzyEG>2Eb=&Oj4Y={}KDW0Y ziY9Q4dW|;c)=%>C>Bs-?6HJYZzZr2OOSoeKJWp zWSm)nb=2xx$AG`{CZIJnqY*|E(uQflBRwY_2LY*kGX}O}{%Y*+RBPO7{_GPwaV?s{ z+AIj4>o1qGHK(GgOJ?{vJnnZLqY*skA0_diO&?Ylq&hQOJlS!-4O9GCz{pp1^U<@X zqa0(YOv-@$w~N{<{*>g1X&*(@6`&}iRX=?&n9bp36)~V)^m9>?SrRu4Gb)G4!Qa%MJs?XclzLz$Dk=#ie zRv=|V>s-o%DV$PXt8%AIe%duaR-!ZSXUeK*=lP1XHIRDa-0j-R+|Kz{=)0KyW2bnIBb$#-f#58?MwJ5~|43I~2Ypg)&CTtqE$W zQ>(XjtYp$;+JD=gxJK!zt{p6O>#UNL4NYWnlnkFvw!BD4^{otN%ci}rr+cvkD*4Tm z$V0vd$%lHrE{@}AH1D!X%P$)Umb75Xlr7`T$?iCGw5zHv`l^9o%WwT#X$M`FqUGl% zpr6xo`fEn5vtJPq{G`fL8Vji!o~`<^KAuKWB}qf4Xb=*qz-aykcuKlpm`1d&_gYqG zX7WP*B~Cjqv80d&R|Z3~s}JpIS6|9%+$?mmF^~6$JlG$x zIT*7$p0Yol;yMoPz{7J*d8n;G6rN1lOr8&uj6405e|ab7Uq2r5;XzDFm#!1h$rUQg zP(@(|%wLjp`Ew-I-#*FZaov4&B(jtV35UGMiSvxqQE0PLS?HMDEO55yTl&kQFB@x- zn~5Ahz+E|s3L7O@Ye^Sc_P;9%luqz^%XmvGPXQK18#sA%mm*0}UWjr%JA+ewYe=|G z5DGZ!2bEd6MWi)4mBFEMT`}+c1Rz*zjZTb7UPpjnS-fEu0?gDybEFH1r*xENIq+z; zTDaD%_)&hILRprvy}d=he*nP7iIa4@J$yevYt8od7I*L6VSjIre*b`ezt3RMXK!zh z;c#FkZNY0a>Amn0y4fbx)nK+xI?Kog2dFT@Yj$cfKY~mUx?Y!>IzKNoNuHDBW?x#z zA@F^iFhGYsI`oJdAt%qA;f0r9X5;)>)=r$HySz-;6m4I724RTr`*MaMVWUx=UKo)T zK1t@0<}Mil2hKVpy-Z_zfZJAZq79uT=!hv{I$c=qGSV&|yt~KeAMJ7P+5z{j9dPT~ zCfhp$1EPvXuQutjskD=dRs?p!My_X1kqOe?DO0{Q6w{n=#ie^DGBdBnrmLO^@L7gv z0?4I25($X&@UzF<`}8qWyBD$HH?{u;c+IsYGeB&k8}Y`kU1GSKaP>#`xqo$+TOU2< z@!fp^@3kh&3zAX7@}(tu=em6U!#mvg*&`m^K46sQWqetoiIa@!C}lcL*}S#K!Q&yT z=a$&IH{kYX+vLVHwpjfT@Ho@5xF##_h3BB{@Z#57G#Xk=WN&VYiSJ}=Kw!IQL8IGk z)W#alavSA3jQSbx|HUp>KYYyI&Y%Qx>j16=Nlgf~XR~ffzcvR9NNn8z#IfeqtpV3Q z8*%N^7*MRP`-0T;0$2{A8$u_5$cKI^3lOX!fn1B3=&T@YI<$?M=uRubRS}~}Mw;2_ zncCIl{e&OA`xz=#gh9yC zQkT&8O%tAy7D)*><+>m%B%ZaEC27YThb+t4+~48h{tmg$`So9WlmG31^0)c=n=cSG zLMA!f*@uU>VDG+Sn)>8H51Q+^-II9T)A*e;_}w!Ey>o=U^E8$&(OkYrvv-E((kh*k z9^Exq3q{jgDQLGM`hzhyZayT@thL>?xx{%D(mdAbNN};Q zI*A{vNofI!I{(^$Isu*mF)I_$m>6cv9~-$TEC^NWK$)^#Cp)G;YTPel|H_oEg?s8P zm#zIYP$(JqqbnXv^X>)OWFpDmx|zd3AqtpjlOjkvSnKdsDIE~>Ca zLe-nYB(d0|axZ&~&XU*mTG^=L zHE|ouZ}a8T`m5%rq`a2prA(oeQ)+pr7M0VQbfq6u`KyzI*^}BgKmq2+? zm~v8<)!bNzslJ%pl%Fb0NrSIknP;0Trx@@fEBA)A%SNiD2X)xfQh_El3MG1GR3TL7 zp}Mv*v8AS7T4%2pk#+BwZ_#Se6%^!3c(G-{x;Ii6H|CxE3kBv76T?=MwjN`3xTY?# zyjzazWXqbwQ|TmIz+9ndI1N&r5*INJ3g0Zku`-@rNFgx1)x18MD)Zw4yjGma|16*N zJ5|dg$xBJuJXLa#x}_?4bvHuQJB3G;wmMbcg_Kk4r$8H!R)Dg@aa5(PDi1~*ysUex z`D@#PYRvpK_WQK8jRBI)9e_8wrUU& z;43kcY^zvZ4g~8>sk~Lnk^N7Ul1XMIokAO1opb3xn*p00L(Z(46cb5yKnOC(RJBG# z*E-o++YV>Fqiqh$%uF>dq-1bHoRvq( zhT%jy?zVA}5FN}w(s86bs0swGPg~f3?21#HdaE6*3MP5M%>&H`+ZneGGEO(eO;RYC z$TIR4VVN)-kxE`@_J?D(4QM+_bB0MqoE3B%0YTuA<^{Jm_jtHBVsDaA6q3tYYvL@& zRf@oMXoUg&am>TL0gw7)2Gc|)?6ZPa=+lh?Lf<#(n9U^(OfyYCDcGFk+&oD5`Qr)y z?`uPTvO8us*Sy%-U>O$`iw2evafMllXrGDfm+@6lJ(On;(fWAC1Q_>@QbfuHU6AG( zLvjkG1Qg?0IeL*&uu(5KK`}OvmU#2ACxf zT$|iDl8S;Np3rkNE1^fT`Q?D%JkJ@AN8G)82dyYAlrR;U_}#&vSeZ z)CPO%G-JI)YqCSy@fa+37!)0bv>2);L%+=^g-3S={Of=IkgM~+Hu*om}#dYpo-DY=tL{bJEF4Ml5Y~cyzbVy_B{h^wE*T>UH|a22a-9s}QJ z;Q9=d#{eI?5n(rg{aErd^2BDZqeK9M1YAY9ai-WD7rgf<=A-S58wWBa+x8S^TMpkm5%8@O z0bg4SSZ%sQ-l8^F@+8YOyHm}6oN;fE@`tw)-rG*OG05o`IVqJ1=<55meR|uYufALv zPq{dbhvzr&gEoF+mBy(q?GtTIG~nLthuprs#lgV@$8~9U8Z7sEczEcfklp5VL6*y; z-!z>vNv8CgEn3Yc&8We2I_2^HHd}*TK=GgcN594Y@xS=@X*NPqV35L{P1t%2~i zxkqnfg{6}lte!bZxONJbPZO=3rhV!RE9cH}?%V}VoIXQueHFJA&{$Tqd$87l(1T7R zpBOcLD@z{VaRg3%lVa4T)uFg z(`PoAq%n6MZt`enmyOd)eE-+p;PUG)aCIAQf3(Y^_iwRx|6|4n_lc+br0ImL5U9eA zUajn9JSTZ9V^C`{T1LlJxial%4WzJRM*Ccq|JD1-)$Eh{o7pgw@o%SzB`ixt32Yn{ zqV+HTqElBv7FCGi%Ecj4f!SZRD(eNhEUU94Q8RC#%-*MVIH~Jnf8ot?SpiP7V}1eD zs&T*g0c!54)q#aJ7JKx9ZH_EYNIPmr>~(%DNZ`4ZS!mmDlXh1ue;pq88(ACot^p$j z#5Vu)<9_4M@|~B9gwDYuk=gZmsY7f(1+UdTl;Nd)ViePg_>&-;cct)SL-uTc>I}H!?3biQAboO%9c{ z72!d`Da+$bIjxshk))JW%fE=rmc@EGEp$$~V8N+Nw<<@ra8-kL?8g#~nrGFJouwk3?YKYlB%$Jyo zY+5BIjgNn%9B2QlJIg;N-bMaxdaV|%jc?YCP*sl#kZ0v)pNZQ_+I2Y=rADxCLYtSO zkbEybj?(4g2J5=seidb%DkSct5p!zux{jS|u9X8@CX^`!&r0)r+j`F__kXW1T97MC zhf_RDPvT})BUq?PgZ25e7>;&f^Gq!Of-Tt;eNnP;cx75dBi_n%k<6Y%N4v5$-y$Gb zzJ;UYFi)00jmA+fp6lZ|vLEnLxJ=|V@ElvNpVM=CPJf-~D*=M-!BZ;F%H8p4-gUiU zxA!g%9o01Z{|2+G9LfRSMAGV9LmJCIh7gY)y>r? zqa9Gpt@72TK`4yL=xTMNbl_!hX(BNdx$k%cjwb^_V;V|$5b!tEDVgb5&o=^|S+Qr$ zT$k&34ewZ~%rc2CDqz=!X(Uma>8a!fna&P%;_W*thXRqOW4MrfkO}*goME1GZBO$T z4^lqcN_epgoyfs+of7;l88tEsfQIMNjeM3GA-zV(QY+&0N{1}VdAvL1&hCI=oR$EK z9Vh{$MM0VstTh50yK-A8I*ov}R>X-;i}iMcP9wy3XU(0JY1EpV2MK?6Z^A$NbiyCr z8S}H92@jGn-O%Aev&o9%5flZE7ENG#mZZuoKRzAlzV>3#taNR%zIsSs z)wL6>t)C=`r{r0N7d6;;@5p;fsYr4jFJhX@sM%1G;Jr zNs{yM#tx6}?lX;Z(wcUz-OD&Peh#)qJosdjz3mZkYBi24?OrQ0>nBAsiF5AW*yZ8v zeI{{Q$EcplB=2CsgjN3*RUpTh1IWN}RfTGSes8_;V(6aX;{M~v?G z`S_zT!?EpS8Ts4tZStbLt^vH(-AsPXyDrIEX$l<3Cru^h_!Y{Tm9*zsrOtb7O-aZxb&gqcvoC-PH z@o0z6k=nnObWyN1PWhickNJxS86WLtJdQJB3UW1@bH^D^**k@U>-yyx_$|W5Dvjnk zD<|Nk%WJ&zo!5vqPIL3YeSZFn_h^T0mX~^*KDo}u@(M|ovfbY+TevLC+1lBo5k_pR ztS}jm+3fGKGdKVgzy7Ol^6S6)CIAEAaR!g}p`Sow8UFTfz;ArdAD&`32nj#a*_pe#F7%RVKqNl6XLpkIA)|#IBRnDP|10U_9kmP#9$< zhAXmTm-=L`z!Czw9)4ay9Q80{99RczXZ_cy?!I!n=&X)!g=&7vUHxoC`QJMOl8n{m415;%To^$Tntp~i!%$^}NA7Ff2t zCQ(P%UqI07W46YU_*tllPl>n3)jG^4w zG%8c41990!eOz%Y@O^o3(GretO9#-T4&NY9y+R;GN^ zpVYse>Z(rSt1LH4OrvLHV!qw%iEQ&gN|nSRX^|N?Tcb#svoV8bHr9%f{`-7-=J}lG z&`Rbo)$_o*6Yw%}8e}>p(-{!~o>9bclrkp7B^KX_2%M%d_bvWs^R~KD<(#qr!OVeI zHud6XZj4vvtt^7J$1GLpcV}9U#r#-qF{ZEU;aO=`lC_~rc$Id#gL{aNiUP+c^a2_E zT4!4FeIC%0T#{pEPPRUetrWg;2$UH3w!GN)Hr2s^ zX2DTCeEYoC3eNa>R;u#s$yml0CF|3s#g(voSxHPclru|U|X>WJ*o1vhulA%tQ%Vi)vF`Nn1BxP#RPP@3x{;@ zY^PNYd2%#W{M#cuGMiP*c~K1ltB#}@$QbiHuBrwiwoxr7hs~fuqBJrvg9p2E(}pZu znL%5*s#uz_0@;VS;$kt`oRweGu~pK9ffRy5!!XtC#2LFu&M?(n-_5yukh9i+$a8S& z`+zEi>pJ+pOCt(tH$pnikZvoY-3*u}8GEA%+rueIzPMZ{rHFi&(@Sj{VL%x8w4#9J zX2fzUqSuUQM?RtF$qH&jn^YX&InSi@Y*fY|5wo{^qG( zzK%`L==?8}v@XcAl-v)|jV>x^9x@9JA`qP>=qy3`9$u%1+isWN^9*Ux9!__+$ac3; zK@%rx$-bxy$!Hs=Q*@T#c6%sKRs${w9V~E+n1;slYnm$ys3_3Mlp;ycS&9=yVj{Y% z3x$sITf|eATv!WznoR=)!%;pKlGd6uP1)YwW^ZqorKJ_t*VbvZ+i0!XeEf*dZ(QT{ zt()xbY%`gRNslL3zuK!^tnrPmzEg~4oI^Mx6x$jg_lYFfJvGiDrZF+Q%oo5 zJjZRca2qYd^D+58Bv0Ad*~HP%YjuoCszU)Dj>6EQ z=UO?WPQ*0#nZ_==dlL@!ru4VR3ac*_^UFNtxzFsbwqes7;Tw z{AK!zg6SwBNyPkJ34EIg&(a^7B+i%&6O!Bj%~n39jjqeAFko<&7mP;=JsnT#`~7vNc_27RV}@zLekzv8vs%J6;5o1qLNhqLNAPih;8CjCpK7k} zXY7m%DB#5e-4Pj^{aYIAy{#Zouq+Kqec z?GJF2%j)tHjWEP>UHan@S)QRa#7Ro0(WKL8k);{igMG$X!kcfr#^3(UZ}IgvE`kAq zcY$pMx(%!A@YY!v-n+~F>o>W4d70r##LkLK_q4~?&Ut+Al*dHAT$LBG#Zv&~v(nKa9}{pcZgHXoNYbQFfXdf^f;pTETV$|}1D z1MWV4KtDO)H-77D{Pu5ui?`o?h08CWVwg9$ekeDcj(6*akYg5fyS05<=SgG0SR`D> zn)_CmalhHR$!hIl;(X${Hc+m$ ze5S-ium#|SgGH$ns=}(|WC08dEZV%a`D4S8_zu194vG45J~B&_@oA^&Br^- zgE0YZ%jyv(plvCwdT8>YQh2B?=JEAQ(5t>m@2QP_^K$?MwOOf^R%zC?k+>^-d< zw6-}}#i0#AOQ}^~%~d%wb5yhAwpeE*Mx(rvmayj3G|OGbL20R*D%%HD`UFf9nOeT; zb5m9#3Tu@|{Q3s2x4CUoQy}{S7ZkO(i%A*l1GY@o(=cC}$>{INUF|r?>@V2k_-SOzpIi$`nrwNV z1El9H#b~M>{w&BsH zF}Le3eLOm*8Ccn_o%~ko z88xnwPE%<SEdiR-p^co0t-3CO@nuurb38km;PqPa_IwMj?$Tz;PUsEN7ZzjFObB5V=`W3If-m9r`S{ z8=P2f(~JV5D5TQ}=tLo{D4^lH_?}r&tznR8w#GS|ql|YSPWgjd6aL`#lwWMe+#jc6 z_ETjPPDVFWtc4-Veneyz1jvE{k;L)o>29CyfnSeo5>J6%Cv(`OTyWasaZ@j&VTu7dsfm~lO_o|Y@(Z8lph`jg3W}CP7`z<%YL(+ z4sNqm4$5XpqtldhZ;QO&$L+4mzQa!>jh+n9@d$5q9mfymYSJ1RUO*PID9<;1*gDUi zHTOkM5l<=NDNYpOxSp7ZrsmvMpZ3H8!4sAp#aa~5_yRz%)|xEK81(z>?(UE#DKEV6 zBHeC}JkJ;m`h5QRbw2y-6SlXvm`tZ=t?@jccDKjIsk6ND`dh4@JcIB1?CxxmW+|%C zpmpvAQr9QW^F!R^<01KEh!aG(%@&Rq${x>VvZdUP!1|mIVE%sYfi@bqah@~IGU5Wl zRtwdL7*lZP?hRa^*Jzvl=4Z7$EFFr*Q2lv5M}sgTY&008G4V7Zo0$EdwKkbp`O~Nw z;IvMSK+$bGw3j`Uf}{q{Nn2{KtKa&i#!mKDug<>I;_OS2F@KyxI)(i$0fwEL=g@}> zr=i_8jAcwVCk!6PJlc<$q`B~IKv_Kp0t-p&sFkF#JS|{5f10o|Et6q&P2;*d8;-p$ zwR_4~k3K=b^0(gcdFSs$_<{NE(-d|GkY}K3eLBy9r3j)3j47z?#~!zDxZHm*B1y!| z74`5DfVaH1&liBet_RC&VxBTis(z5Tsr<-wO%5gkxv!pYZ)JS;$&^n&P5AV)gik+9 z`Q+1-pxa~p(i;6d;Q)tz;n5#SpDAo4;NE3pWsftf4tF0b24jem*}iQ(Ewj(%UH!iP zZ*S`Ni$i)=`YOWsYRIPNuMS6FJwsn3Ia~7tn$4#-ePrWiNScx zmCtXnKiTK>r5^v6|MEZO*T4TdD{C$Kg~RnbIiG$o=2tLfoOqz{Wq$Q;)FjdC=25c*}ge?dx z+b^MIPiN_l+wa9%=#VgN_d}VyD#!hXKMWsvAr`>08EsuTY@8ObRmSYB1r`>K{jFB0 zE&=9Bo>rpDY66>lP-e_ghHcDUK8bHDXeOzU<37=%%e4cDMsOl*jvc0qUD9`FX z>tw^JAM!2Pc@;V4N!81$a*32N0bN_zuFX7I1^d?nSw~DaE2F?*11iuZpli)b+x)7RRe5gXghXegH6R!$_o%JP zsgx;gz*(yiTu-6wwCds5^yn&|ESDk`RqEC{C_-ZhnYof7d19}GJ4^MLC4Vd3Z(9ng zbM~-g{nZZ)*i?sr59gxzw)r&6Ulm6^eo%8ju=o)kgb(p0DWH5lKhIgkQGd!Dm&%mE zNHt0z*viJywffYQ6Rnl8oMeGc`)lP@m%XH$8W3#r*t)DsS$^yOMZz|H^>_A8)xcT% zY&LzBTgq|*0e&sCS+1+FD}S;_uarX{Sww5w^2H@75lk z*_+$1fzfrj97PiDVID+&a?F=g8|S>AC(%)yXsW&1>-;KHrjJ8Uzq zvt^~O5j@*gRuVg2JV(2dI2_ahAXxtAzdK#aXE6aSRzs}`=!Vz8e{KT$IX$O;tLQHU z2%c?*ds0@8Nkgq`>tRnsl|Q0ahHyhuRK{5RGOu(IxSWDh0{9EPa`X3 zyH}AN5i87~LTO@h_Opynb_#xSKjqeL%8NZkCr}2ws7?6KM6B?Ak7nc(IEpkY7{GKIcco=hY7&FR^%*>!I zAwfGC=Nc{6{01$@CqT@FKS?%EddEzO{DO2u0Oex?J}joEarf1bLM8}&<=~^(PsXy= z)ie7Ae_1wWl6O>Ezbg9T;p;+^rU^yZLNz-mH#m%d8*%6?L1!7t_wicoBY|LD2k zk>?Zn;X;`oej+sg+}_7&#@)>W#@d6h0pk&vy&t7O*?Qm9t8-t8R*IL;`F#I74Zibt zmdLc?-p#m_MdjWMZf5Y_Y9gcVMr%0t;t9^bcoLX^${>$nf5!lz#)sD6y0F>-&#DP) zu6(%1&wsMRV44|o&N8gG=_uo@gO@cvX71+zUd$E}+L)TQ*VcXI)1=a{IUCo}wYDYe z_Tno6mtJWAO$pK~pce@UJepK(Ujd8@kw?o1avF_g!o~{MKigz9N=%$4?s>4+Uf1}9 zN)vc_&EY@zPujSi;`YsIA(@`@WBXjy+uFNBZmYQM^R2BZ@BMt2AN^>^kA58U!*>&Y z_-;bjfEQmh+YTs2)C_p#g;mC5xO#I^@>5+@VO9@j{tnSm&pG0qO-KEH(e;y_@r38k zN{hk~`5vdl{o6xzAUH2_rb$dcE$GXR1~arA!ik0e!oimSg0oC>DpdT|xsYEu6Y$nX zz=^g;!*_U6lMSGC&eka9pMD}G7o87T$DoC#=5p4PSd>hI_4c}w;2l=RiB z=1QtlWAY*Gl7|h7ZbYjod++v|5pRF{RrV`L%QSzO?tLG5DV;IIm!3tIzNM!$0AZ4{i~J0pEV- z6$ZT~4-9Y0=-?~?|NOuIQ~vRP^M}0k?U(5+w+R(=kkgumUg|YyHC_JYpZpZB@aQ$$ ze0KXb+x>kqor8wUXV3AiS6<`f#s;_UJ>aJwe#FjbpTGYPzR&;pzx+)6`NT-Rp+Drq{1R{zY{-#9FEL6+Awb?e`! zlC7g$4_8UPW^*Q^>#0$g{em42r5v*blz_{1*UHEzaQq6C#`IGPFdP%Isq>|BzO2rd#iP!;Z#je$rv@p_rc57Y0(wpW7W%8=sAyhR zhvP80tYr))^Fns+$(E&hI40F*ZphK1OrQj}FUyQgkA!cP89-@e%Bq0z@>Kk#HP96? zTr3ThnAlSzvG-WkV9*%NLerChB60$U#PG!Kw$Z3%4j7+Dc z>0=FGz+gK+s+F2q&?@e#oT-xqixmp5+*@~^>XMkx14)mhxn7r7ZmmSEhOeZ5zElZm z6C&lF#j~W0oab{0V~*LDiSP+PutJG)kdhLa6?Pm{g(*BgnUs-#LA7sqxgN!U@}AjJ z!D=W=PftklWH#;cf0(T1Y5g0bG zx-V4&f~)#asG3E4dOS~ZVdHRc$c&92``jLN*Y&c^a}&_d={fz4p)U;tQ>$1w0tn{F z%BLc!q@)3{6?T9}gOC89fPhE^l?iCO3e~iT8avRcH$#VMzA~;;buS?(s?IhT6E~%c zI@OxUavzu3PRA@&z8$0GYm#C7NO<#cSuhx+b6uFdfb(KD&8{*lI;{yQqX{Nvqij`g z8wKgOxQN+ksq8BgTa~#TA!P=P*6fcR2$pW=R~XO9`6!84GN~*1s^_sdkc&dezKVkc zcH)ekY05ziH}`WM4|CQ+2whd0psfWiGIt$9*TGc^M{A~8POlMgcBRAVl`d=D7VRjM z=<1nmw6C))=Yz)ye{^%oj~~VS`GYCH*onD2%-BzIVmoPH<2_X=%E{R9BO1!XQx1W0 zOc(44bfnOpt%LQ2=$9117YSCG)x*AWaJ6WiPjzkp!Y|QDnPKLOaJHBhhqUEXHpTBk`YKyXpuv^qFzC&^rY#tH$*2Cms)k76>$Us*?mk<@)ffld?h@t9)V z$5)D0)FgC0LNn1PRvt`V)=JpX?N8-S%>F^96`A8QMKJ}YMaDFqP$UVhsA(o?X6dNV z6|nVqliRoNus52r+aIxWFl4VkCesQ`UIy(3K`W$)Q*=?uL)$s|DF1=L`lxVDz=CHRTds} z|7oIFUTY8p1vn}A1*9>=iP_{BnLW%3QE%+JK#uEa;w0wd_jVWz%%Z9?{2C9n=hZ3U z+UxF;!}otHWM$1I2po2|bE6qt^J4;<4adeb3(U@dwB-fFaZdjr<)B~8oYPpdxs~(L z#~B}ensWbM!3!Oa-cm@k+~Dz6%ye3tn5>1l;I^capZd)cXvY1qNL(J}{;20qqD6k{ z&+2`=`t>i1e)%yxo$5T)f#9sj8OBrkNx?*RK>%rn2_4Y{?gko1f$u##5IitI@R_#D z_fLnswCc0bbm>M8zAKAQ7g1K^>`imteU$OhPR3_@DIe`;Y)^BBd2Pw8GSy@4EX*X; ze1E=9^=Pa1rdAi1ZMBS7bdf`zp)=4#;B@i3E@7x>M=q<&9U6_0R=dIeIAJiFFdmNC zSXm+T1JE#>j7ic2*K;{{;spKim{b@1)^C2Fjg4g*QPoxjKpW^^d(4#|UgP?QcX;$* zn_T6*^BZq4U23yw^7RC;d@$y{KYpJ-{^#%V;d|FflblX7;)OG-vNu-tT>f|IP1ymp9*h zfx>gyp1`fmf@|-Mxc&1RJpA}QcJF;efA2P<(H2QMBF|&A&SZR9rfydLPbM?^HWR?+ zk=&bScB2Z%R0j;Qw2knWNW}nvro~OlSb^cz; zy6l~5fVLUARY0$}7All9GzvSOx6Fx)DmLpwo3VctK3d#YF62tjjr}p2x|z0HI#qKn zjv4#Aj(~S+Zfve=;i{RjznN1(i7ZXnc4}DM*T(*}`3=zmKCCrt{n)skMwPT`pqCXR z0(dSet7;B>xBnI#5IVYCJdJEv_AogHCe))$K$rYWAfOBgZ01xJ(X5;nORu_<+_dFR z_KTLeC#M8;E0?7YQ&y|Fr`cF$!#C+ys@wt#1Hz}KY)C0XVl<}A%Xyl@ZdYdZuAciw z9i?bGez_pRY9?ENOf2CD5LnMafmLOvUlFZvR`Fi#scOl}!@8HUTL0c`II=87VB5+H zp=(U)S{V3fsyMQi_-uRv0MFajs7TT)E^OOeFLgHbI@$YrSe8#ov&b(bM47ogAJJ4V zA#F3ymem#-&4+2J9>3+vRUVNOk{KY_*5@_^sYxJ1la+n)!?{+GJd^yhfYwpwl3l6B``> z>lIj46-k3-0MToc70Au!kHT~jpP-*-WTBDGCe{A@6uirYA;TrHnnGSPSs<1)^g7ty5bQZ1o9x)f86k@uh+{40lku2#_Ms@iv$iA6( zmR!^ED+j=}mo}|hX%cew(wr;11)uJuJRYW;YRV8HDHNdtvW0LpFmq6ZzDL7%30;Rc zFF4U{@xuBNtKAk+U{)X2X0MC9V0TjRV34voO!;4LO!y~P#{BS6%=JM+Kg*@LwS3n9 z6=W&_m9gSB@RjU=6Dk4IsVy=%ES00NuP;hZ`bM5cU&b$A(!Zl1FlM5&B4dyxXx~E{ zFl>?R4pIGs`7+Erfxh}+1?kg;CP`vwv{B72$~giE2FMb~GnDV)T8-e^Ypp=*oMJL2 zd2knldCV!S=K!MM2nvMw9(y#BkUr8IR~h&2q6)xd6*hU83b_Qb(24nJ~z)>2{cWErI&{^xz={6xN@O>XI3ek=uny-aSDz)1#=U-^^cYg08 z7hY=+E-4&Z+_*a7#wBk_kk)lHXQGaptnm-}=2JPM&uK^rR4buA>+Zc8x}` zg2;!BWjMJCZV1{V&s_T388<&Y;Qp=QjA`d5efYDlj=Gz@l4-8WT;!~a`A{l)axdsG z?eFC5Z^J8JU!m2}KrH%nMK1QJ2N@W%tY{5Q7a9s24bGT2?sM+b?Y-GF$1fBtYYjKuWbM9+?>}lO>ZsvUS ziGaW#ev)$kZpOJtvv#UM`&5e$Kkf_IJ?Gcn%YP;P86a9-*8j})jElLuYI z^sY|xyw~aIH_uLAWmsR7=6RUc2p%ReaaNQQof_~IbOPx3nuckHz6cO(HG;pk?(^Fh z8nglj?+Em_(3&_G6VSVpjN1nZzkfUB{q2l9!-8>t0*i z%8%9sMUg>~p|gZM9zzmBv5e}qXmmU}9RY4HoL%R&S1)idN%{QdJ+5EB&5IY#v(oL+ z2m^)4qi#CWp@G=LuP(GRcjr+@e%s(^lfz+^h% z#aGWkuZ3=eguv?Fko@C2{D1!8AM?>KK4)*Y&-G95asKQYzxwtoGaxX)wa<6?iyz+L z7eD)qrWev|G`O?%0Idtwx=VcHY0b2~LSbzm*2&)4bc@6)H=^Td zz9GX?KuBR)^-u-nd+SZgXY~!&Wn-z5^Q=5w<>IS=f{a{eWnE4^KeQ$`+uYc+S^u-# zSN?KxlMfY`F7N78m(479wq1}#19H^KN><_2_WZRR+tJsoob5cbXav`}vSH4~LFrE< ztj!+Ib#5x&Bo@i1%4fZlR_?1O^JkqZA5}dujZT#IvTyQr(v_Agz?~ML_WJ;&_rP+itlyq;o*9 z{Vh!2!ga;E=W`R#&*?e+&7-dr2<9o3XZ;YW8eCghHwfveCJiSv=1QsxUQ?S~G^-#f z_gtxWG7ndeGwt5Y`>I1yCwXG`sH;prNoU!BcQY+abt8?q+`CHQ8#7Sz16plNF}r4e zU4@yvHBwUSI)yIEy<}x@S8o_)lHPY@P-o2}i^(S0I|;i2*f#j4@>fX5KEs%f zni;4FKb`@A?fyZ^q+eEg3dmgfu~f-*{>_ufHd8K@TtEV``C&URrE3EUPjtpsoblmi z!TXOB9uHG4cN8sO21jLqF)_KWLo*E6=(SkuHfe;u8bfqM;@N! zddA&f4msvK@ewo8{d7u(m@AcugC_{;NOq5W@l5p9gtCZCjifCQ+`(xt$^O7c6bzkA z(b*Igga!z1&Pqms9*xNMcF6X3QGS5aXp4QX%E{ct9BEB4KERC{c-^IH;-*eTK|UU$ zTu-!yOViL#A+4dv$@X{Ad5+@;s6b4$AL+j+DB>wS2UY@)RwMCAG`uWhijzCqMz%KmRPN-YrVIM7+5 z=q#h%`gF3HB#)=)G(kBoUZ*FT-WZ;h?0a4mns_{9w7W$%8B!!u6k=*L@&cNEK*J4a zxGsU~5-1nnk$vH1uQ;>9-PAX7%H&?)IHi`c@A@>N7E@q*GT_nn1LEm~(DP^nvO=^@ zR;ssd+~mU#KIUyO@SS(M{N3N{(OXM#+^GbjJKVT7=Ek*yGTf5N>bBmhn{UV5edAXHe)HdN(p`>l zTt^1lDubN=qNA~(;3baM=80ilsbH76rQ%acWHd`Teqblc^Xl_yWojMJRE{e=JT z&4eF4%=mOKXD2Zxpq<5er{~5&wx50Uc&@7V7mc5osdbfXRB6DXqR1%H1f8c+^{VqU zRvWa=i0Ney2t%J&E}!E5gU7u8;pbdDd5T65;<+x78xY5$E!+!Rc*;lNaQ)6LPM&P@ zjjvytXN6DRyUu6t-(X{H1K;x*4afZG&p%|f5%71veu)==_kaJV{J;Jmzt5GAZ!kC* ziY8m0^R2gE;k)m=HXkH^@P|Lj zSMS~8cYpU={1^ZG-(_{BgX=mZz(e5rr*QoTeeS;h=WO2kIeVMe8I89|k`Y-RgU+Fl z{X0u}f|;g%GF5pbryXC`J9OnZ#kf>vJmo9L?5Jt?*|g!vQGsp8t7F8Eotm5l&GaG@ z(6xmQ8ar4rVU??Gh5!2G^Z%c{Kl}A9$@2TKPsAR64s-{r<4e**kWOE7p#P6)R#z9~blLlgR$A*=Z@Vzl@n| zXZpYWFY^!%AI=0$t&G7EYq3$D39`Q|)|2t9j>$Z-!&!aHvz#+b*yUgM|NSs#Z5dxo@W}YhMRn39$ssZ7NW}ZrS6YF;cHdvTbdKzO`cr|t_ZMM;!kIJjT zYL}E*b`ZCmqIG8(+YG!M$>ZAE$76$OXysp}iPWe3TB;~j9gYQMV^X=LT6-tyXj-Dk zmjC^@wVhL+-FWm_>0*Orz069>DQ2$AW|wbV?~=acMK6h~ZBtFyrP)vMV*U}IqRtcE z&B@73#*!r!vWPJ=s`PBze}isxQ4_&!8gXhZ735Caa)-xzhY6cuVwey|g{P#VpbY01 zE6r7v81mHcUrjsnWj?hm-FnpaeHEAU$||(}%wu#J&w_3Z%9+$IEOv;Y-~W@~vYeRE z-`n0<;R5}Z{Bsk~&+#1phT}6*1Z(4XdE=>mv;oqlC?jKJ2IMAVXfm>}22SB$O}};!wppso=(S&(e$*1p3WERIX<}`v3*J+NsjcxNP zOg_ddD`oYr>;?v%^Ov|axP;Qb^4|rs&~2xvXZyAaXVY$e70TN-T^lKuy%!~MBfy4O zEmC$l8%E7Qhj`nFo12D)VHKp(Fa96XUFjxeUG2_vXc*VCi_X?*1**UcAzY28tUV`% z=U`c}zbHAFdp|Kf1f% zU*1{rgTo~U%bN3AbJOy3-RIR%rvMcdB!=n6rYPWRQReH=DG7Bi{#R+jg|01P?pue; z--ow7C2)_USMK___|0d5P;X%ZK-LmF3Rf|A6}G2%`dQ=RvR?e=*&tv2@cuCtu$BCU)i4W(v7QZZ*Mak49K#a zd^jW@jmSqsvcZ7q#unqr2J_Q1-uzO+*S0=d z?ahpD{Q7`b-^_XQ>jPeRMHc)}PGLTVgNJZ(3rwh-~S>;iu;Tym_fLW+_1`Ja6XaF#B!2!P!vNFN^3|XScD|;rmKYqVh0MY* zfpKcs${`hl4e(hgf_GLG!LzdF{&~e8KdAWOql%v#R=j;&@~G&VfYut+F{=K6j*LT) z4_YZh##}mP*J;}XF@4#N@uMq}r{ulHfLIy`%8ex1X0$zGvODI=2=WBd#4?=@`J+F4 zn?L!ZclrFwFLQc2Zu>aA0zW2L7@`GE{pSr)YS~?66+l{OjIXWY)^(- zm8azYx{;1iMX+g2Y$2hK8Rb?v_+r*}vt}t_*r1->U2%WL{OSK`Uz-grA#*+fB-G=|%qY zLC&_}o3KF^R};(V1}zh46|9?d#}QIGmDlAd(9p=v;>KiiBm0NEHggVY(plgd+IHn> zg8ZL`ox(~dk;Nrm$&=jmc`-4eZCJyn`mDU8d=NuiH9et^3vE`bsuo@~MtAkKb)ogH zJQSz(xO7{ERLiFlPcQ);cr-Qvt#Fa--+UvTd8#mX)0-ocbS1^7nWxePp2DMY-=C*4 z=*ETin-g@um&P@ip0~yXfjZt1vlu6GZm-uXBk^cz^S%>-|y)Xw;gdR`JtRZ7`Yqps^+>I z=fzMOc*4;aChhQP{N3YQxmI!@%3c|v=vO1~K}nX9kdg-9kAvw@NLx4IFs;?LJW6fb z>~B$TpsvfPRkW zc#h9X5#0Xz0|zj2$SE~445)vV8U4;Cin`2=D4HMp^~M$vZ?97nzSTt9dLCf zEP_DPAEaFLY@=1M+NCusgG~?=k;(435%(cqs&EAvT*m_>U11yltO;gdn{KUbz-8dn z>jaG{L`*2)NaUgJA)>J79C1;2WnbB7Ae0sp1G^pU)20)zvkV;ilceSUf9u8 zImoS-;e!?`ob@;>90&87JEs*N9?bcN@6P#qZ_oJl!;;(cQuxt`31}a-XsdwNa;tEx z(J}--q?UAhlhhcJvZD6ktS4ME;h<$`>9QXE0YuCt>#*KcvHorB`ndSH^v!1p;g!T# za+@$AVObZPlnY4P9itah?z6$gWxe>#vqDSbyr(D%%yo^Wz+uu&4rj^M1BTncSznvxENxY3CH(<45) z{|WQ+6GmCi=5WGdK4)1}oXi&d?rvSFvv2-!vT4gaqHSuZr!-Pc2{v? z6DE@lwys=bw6V$lM<4OR&6-zU&qxyOgB_T2cD4(yUa>rQ;IN5hx@nkfSSA~m=|;k2 zGh@18nQR!Q8wua|^#OnBZ;W{D3j?CyFKWEkRs7Jj#=YIak83l<}R;zS}(0&Cv`G`JR2l}sjT~5R&p>eFlW@V?hJgwwM zvBDddC#d<3pC5PsBzRK)@wl*cdpw@R&%X|s^c2Bmxddub3**EvN<|r**>*QDYZSpB zJ)q_`1L}O5mVui{z<}++~7_wxeJp z^r|v;)SoIhF`+#QyFputrQMh2!x-8&CZk0q;Tn^(qNr)PBVzK#-89^ye$?IcO+X|0 z^0bz?bb4AR-!*1Euha+&g?BNpYKo2Y-|%UlN3B`6Xd&G9tj{PttdZlNlIEKc1+~yc z+CV9Xp0$f8fJ0hZhlZ}KXBy?QZLD}{Jt{q7Sd5s0)}6qy+-M|hqp%J#ylc)F))QML zPDx+#B|DkLVwg1&S4#%DiFq)V_hTA1v<&jvI$o8On;bMhYh(dCLGFnqYi+lbW(sSp z$krkL#!r-jZT5ev8xf~=`BePN|JZIhU#K(h zWuB_^Y7ARa)6|78#I&_o*$ay-I*Uo9%t^T7{KS5`JRIjJVQ7bp?1;q5ZombLNU55v zd`Sl36T&&x(htPks_?yM&8>WEnMugQna_Q`wZ=v@DvD#Ns~R~yTDU_?EV+;!!6`}D z7v54}J-T^wVYg+{*bC@F>)S@Ap@pB6t5%_-Ciz+=2CY{v;2d$2zEc&wIu}~|iX|mW z3M#~`c1FgCp)5QJ{YKozwry|HEDp0iZn-4YHf8A>6184nbWu@juG}?s9>Rq-B5igD zCuCvyi`0e0?scbePy~0s@iqrfii><23^_RjzKPu}_6d07@lfj7pRpp?hh5hC?ZxOn zufvo0Fri;D7~w0EkUcj6{T$En96dye;Nzy*zWBNbIuy8A5lk~+lg4_)fK4-DWCvoV zL?^qwtVEY#lnzt0v6R0S=>S2pWe9?q5mN|BFkze;8K9YArqs^iTu3JfSuK@S>e9|=y{Q!g7-JdOtT}5a z8s9@Ow^P-Q($&qG!nGIERc%ZnP-ejdlnRz2h^-EuK;rIpyI~cm(k}?|&2J4|4J!ER zfKdj`a^@;(+nRuGCMvuSgIE<*;sIe8w8g8{5`!Ddn#_R*6HLBU z-cx#qvP2pw?K_B^*1WwKEA@2&p2X9W`1vz}@U6jm(HorA1(o4vwlnz8tLWP5IPX|i zC8#3!0vH3XSm3LYbTTHHOtHgZ!!zDH++smJo8fCGyMgt*sC6*18#oyaNypTB1`2wp8mIE0Ph^da>?208AVaBySK-(SaSRJC;aG#-{=1Q`&3oUXgpzO_bR(P zR~QwJEt4}&a~8(4ab=6GtJ@4mV}^sA$uMO)&au`qn=iS2{~pW15VN@rq3i}kJ75gH zDybgb$0QlabgMZ-*@SvD1~GX(JI6bRO;V>oX# zTrOCgo$=mVKjrp=1NP6B%$LQ5AID2K_W084FY>~*9kw?nqSWns3J`ZsF`skq-S?T= zlI=mtcqb*zG?W2r$j644KbP~BU&{H~HwS#}o8kYr#(eG9Z}8P`4*BXgEMNWRkQZOg z$p>MFvhkcB6@2f1I>5O(yRR-`)4}c#b|!L8vduznq+dDOulS$-+k3q8qqA^ctrT`u z;iqpdBu6s}iWQH(clF($1x-3nc^y71x&PjrS2j|{BM+nS#)qB3(_CnEWe7VX+;N5f zWRBU%F`2Xr06Tk@FMTcN7k+ub*ME7yFZ}X=U-;#WU;O1fTmydbmj`?!T(7*Ikq@PQ zLm z*o7-RTVt>`Bh4p_HeO`9_ab|*!gvI3;rPM3=ltm(y~m@EAM)zUH+XRPi1+S(!f|}*Uh7>Zdp(f%=4UwVnFFTKp}X2vqJ+&zbPzYDj2@GcMD z{|=`IAF!MqP?a-WUE+P+C}-64YuoZEqWX&XPGl;TrP`~Jh1FPY1!!9;LkEZ)oHxY9-8!VcUj$l^YnDPe*fEYWM-8ho%m z5$8nSC@tj6O|1fO+w)Y!>f%6 z=)gz5rLXd7J5SZ-RlkFVS3*5E<(#&WRNitwUodeNEAv zx22GFpu&ZndD^}rZ8CPnyg7)8WlgdBzYF2BjGUYSLq=xAI2|#_hGdDDgr2$crer42 zs*N>#2VuTV?^nwqzWdN`$Kj+L-mbI-giRK;Z+CYq9aTx|a8zODS4J^X=V|y!D5>cd z!V#$J_kKx1!}Fic|QrJEyAch&6_clsx3J z!iBy_cLcZb3BM`VJsDbRw$Jik=J(sYweEI}lE2TnPl8a=h9B4AvO2yD{ZL&hwRn>F zpTvi9i3_vS8~K#o=O&<^<2jzAho{^TyuSI7W>cEazEBy5$vY;Xb21}CF~Y#QM$Vhj zU)-TcO!Dg}*Fy9L8K8@7rCph>DvP_e?$0+0#_rYi-&U9cbiHF*I7C2Eh_W9@;v7UB+b}$%x_?}B+Fq19pc-r^Yz!>mV33%*qNHQK{ zhtZDUs-iwS!7UcxjqK7jt?1o{u?CapB%={_D9TLlYJ4S%V7Hjz7U!g!yP~W`+CdPW zR7J3{Po@ZN+B#z}NrEpHxW&9-Z(}SrO~q_-Pq@JtvSPuoF1fnBO&;g!5C+w}1bH zpM39}ci%ear$0R7{8Xoy;y$MfX>QlQQ}o^Y&x%f~eUYaN@RZ&g6idhatY$HDd~&vy- z-&?T1A524s$@qO~t!|`DAn?A7bK7_vVi~6$)3@XQ_-gV(kQo|x12(~?L-Of0 zMmyKpcr{~lY$=aV`EUQfzstKn{D1)oH?HsT=X zHLDwTqoqNKqT!XZT-d=L^GpokRVykd(QGv@3_bc^LbEm3?Cpuo`O0kSs~Y5`5j&jbX6skcPxDyhR}ZuA{r_0M4u-ff|9g_`qTTE#xZ=b2Im^3 zmzttgRcXHl1cA~`-NyAV?UnB5lstCx(`UahpQG&$1|N3Mc55vD%7TgLP-^v~F*o!v z61O4DAx0ZO6fG^quc%Mu4A-2TjJzpNZEEr94W%oYyE%nlHf3Ker!4r=y4P>7@?CSX zU3#={B<~g<6oQifb-e2FdX{h#y3LOXyd-zR$8G#E1-dy=v@ynR8pk?Cu*9YOFfchZ zb=s}RIHZoIq!yG9S9f+QBo%olYHpoRl=!7SWk+(XT(%?;2d!yWFMMvVrk+B-)XkVK zSX%!DHQ#>oYuhhvLnNQJG1*-8Ob{!7^||M1q46Yvf0Q@mo#Y|LYH6MfS|;-|-VscP zU%PMm&wX6>R_juK!*s|b+hC9m8E0b#&rLu-$8$VK4^OEGW^FSRH=a7^kw&}i)-0xH z0$R?lkcLYIE$#BUop3iDUFF*f3ff(X7%82Eij-}v5^vmjcAw?aU*FxK3fooy^4?=~ z01!G=6$+Ea1hkQfQYk>BFjfIr<6Ex??o(U4)VOQaeAPh#+zNxO0#nnJOUw?XHX%vc zvxT&C2n&_Ff?p6QTETMl7YlbS9ra1+-T%cj4jpe$ruREUjb$Bg(CYvd8jnGg^v-zB ztC~Brnjh}hd~#ayU{>)$78q?24>HZ9gV6=@hGFePj z;maj%zJS`v_mrf;d~~GnH%4|HFV4w}IXCw97+jzTuIrkjSaNc5%wRAeALM-a!TY@T z-n-nra|dHA+q+k|`O>Sr{`oI48jY!Ea|XxfjGQd=IZ7+GU%1B2mu|7OF=jZ(NE0~+ zuBshpvpFB%xf2w@+n6lx*%8TPgLG>*(5+Vwu9h9aRYhV`wzqc~42QU? z)VD{VYu!+ zm$)ldV!t5315Mu$ z0o&(py6w{i-XH7sELazhlw;kSr^ja#%U=vUP7yq-;Jh*n!!ShAR|J1_UQ<4yBDnO9 zlfv;Y@09%bsN~+fqVzgWm5^S?-5qnP>tfZWU~`Z0OIuvo%t&S@{G)&LJ3PGmh}>pmgN(D&Im<_A&Xpl1=57<9^#G}IpeDy1@kY+ivS;67`GqNOMn9Eu3M@OeTIy@#xf@x7Nt1hdm zX0a@pFBW8J%6K$lILz7J+vL`(*LnTRuP|Sfy#3Y({D1!bKc+k{xW2bbT{#{dopR^V zBkrF(#2Lrtc*4$To4xHF2E&Zme8#Le#n=VE@vC3r%uM*nM@v5ZqmQ`v?hiP)|08DS z4=Kts%4$iiX1&+YbREsR@~-;P7^Lo-rkALa4b;A?bcmtpiF6Xe23f>LCZlB{Th7Py zy&b})X97A2a;8TX;P}8-kC&<1-DmMGVlAOZWZo_<+BjQ!#gtK+w*R~IYkhX*;dV!+ z!M8&?Xpesi6Rr)tRjzGh+mKEaXDs{o>!jCJHh+C2`>T9jdtFp7{xn^ge-OE}H7Ol- zHikI~sgpnl=ct-vq;wu&bq=6U$M(7Pq1Q#cDj~G6L1qqwHAWO~wU^y=>!9iRM)}jq zel{F?l7>wLE~F$%9N}x7!^%y{&;%3Ev0}6*`@0Ji1!#OarxJZ`8jrNi@{6gVbm;S8 z*Da>+>a}j3DipHGg+ZpJ=3b7vG8jfS3&+AJzqIsMUah^Oz=eIS0*he~%<3vud6lpu zSl_lZkLL+v|5`?wS5jJs`fQYj>bDF1!XyoeS(Lw`w2J2?^|uOrqke6pP;_DAN}m@b zAHv5zlv#FLCr#TZ@d#X?z0SQ!y-3`ehd3W5&`Xq%x>q*C8Zot8QL$hlgH#6#w_xd) zI9x>Iem$wVVO^js`7DDXxbI)fCwHxq)rTVk=xms1c~w|Y=+NZ^-5uQ0SL0SrQD}X& zbm_j2pW0OWieL@jQZ_LOgK%E2esOVJ@xAuUE#G$2C&b%wv$QcTm;CvWxu zw=uQ5Uu(+VH?L3fzvV#vDec>mX#1~uYa#b-jdszkJ%Pp}i=J$!Pj|iVRPI`Oe;O$7 zYuRG=_KW&-5dM)y8CqsJOc5==l(^9?o!TMW|?>2nj% z&+#13u?Eke2JB3SLlBu?#$Yh584cJCV7#;(Gbn&c4^L*d+=;LEScPy4jK zgYH5o*Y~L%WNH%9Bq2>C5AAtE-9e%EP&ql@q!Io)b<+;b`sk;tmfgOrtqRqtXxm#>(jwd*Oe%O2P4dIg3X70PYn#<>r#}#Sxzz< zV+SJud|gw|&RO362%N``reT+=(6JAbB-p`#WI7fluzo{V!`42Z?iZ##MPCwHyCU_B)f78R}~EEC11XFlb5dC;N>efxxRCS zm#^OBjTc_w&6}_D#anOig>ZfG)*HMTJ%8cW>wNBoS9tmAEyjZ>?|kx*Mv7lT!KK|($Km3zpZhuhn^6R^drzu!5 z2e|e^6~!qq0tSr|SiV;m-Y0O#~(Oe`O*gCi3L}8SX8cH*4e1- z(KS%NeR#v8hmODh_s;ki|7^zhzc=ULprUp(^lq*Tl)&x#$i2C1-!;!sJdIoLzT-c7 z*C0wOJU0L1`*m0s?xJVKWnmQS-1~0pMltf-cNMI6ZSlDG&w`&toSzjQrwBeN;k1N} z%#cP+;ipjq-(6JPn^&CGVLDO2qwr06!Wc7*+{NW$NU$(L94$5!rBqEFc6cbS#Gh@q z{g=1>&$|B{!x)RT8A&oEA8wG3w-{~QgS%Xl#0 zOK-f&%QtR9Z8$hQVdiF3WsNBYDqXJmS{P zm$-HF1zvjb7PoG`!1m?_Cn}5cC_xJw=8|jpt=_aoBJh*?v-Q$NmS{!0(%jaKwg_#p?M{Ft+Yk14`#VCSmGe2I$7s2f9S z&-pOn?jz-t?o5nKOkM_^UN&JDo61sp*`N?k!Wo{qNy(etrXu@eMA_jGnM!v^UCyZz zROSF8`5#q!#XGH5vC5gNZmT{7>)jY(>&{QR5g#~ zfY{fnPmvo_EAoGqh{89GmDJ66RZLOW-ie9ZpiHj9V)B-*>#4z-^t;a&hf}D3j~tg| zkX?-$)Q9s|p9ESr4mrEoh6TZNuk6yxu#8MDXL72tEaFw&$*14S<6whwPreax z^Lie4w8&!}`h2<0ZPkZhox9eb3(9AyQ^`-^rJt|{Mv0gOPs3bQYK2B^oN`wMiP$Z)_ym1e3o+ieF(Z3F(`8EjbH09PZHML-NwtQV3zB z^{glfON!^%$&dJC~qFw2695#F#VRkust3LXry$r%%-aCvBC5q-Ld`E$MIhy`I z#32i^q-{+C4f8MpXmu)E<6oCj z->q#k<^M*$$=-7l(9iK4&+&wKMn$k--5^1`Xjv_l$f|FAySlR1ip8BZYZ|#2(h-ES zYqcW_|6282e}Y;%s&2O@?)|j-&x(uO6*jCWON_+^(>n@7tDwO9a85=TY6NpTt>13A zC&g+l(1}eqB+G;3mq>9E!-qebw{9J;`d3{1M)7zb3WJ!dR`VmlG1T#D=e!YBN$sEvyh$5D_qym}c-;E9;$C8P*sqzPmRS(Y=b9eE*Qk|b*& zh(%>E_k|&>+Fa$^$KlCx{OtHy$N!`-VU?noi8dra1G&LBJRz-<0>b#W`j$Aen3gzsMOkWg(M0&!7kfM0uLXq=YM$xY?PUr5o~N(iCjl zUby)=Nx9_8WW*rNNHY%}?Sxz-S=i$3Qq&Pc)rd$S_4oG)jz}GcdUGTza z%+-x;u5Ry9RirKkiKKFd|{)~^`FPNQfkR+b* zq=*!|Dfn>SwK0u3XsvC$<^0s}r@wd1+uxt@-rIW3dH2WX{N($m9PXFQ&TCw+yV0+` z|JC=O)nUaw;Ie+CeRG+wr^Ba-$2pjtd(KWhvvbd44j;d}cI(a9-C z$0y8YGpe#;u~<+nm(;cF2A<6q%+BYWozF?~gn##M|1!yFz_-8qK5u{jHupYw!18p# z_H+Yl5@z!y_YaO33^QK1c7+#q_qevb!(cGrq*(CUo7ea&fA#Bp>sQ|7ul~E=;0s@Q zox6qQ$8Rrq=T9DT|DEr0{NPN8%?Kvv~-wE!1aC=h7w-(6+p@2%)i|TDXU#@do z#j0DMR-*K>K@M341)DL3agqz&Lq20`aQdCr;Rvf(5iGeAc{^4cOKy^24j5$bv2uLN z^BGB_w%2zaPZ@S!_e&sX>DShtKytJC)8)78Xc?oO!IZjlM%8hW$C&>#CKuX1ZST~V zq-)3#xz2}OvvEF@A524qi+D^pFsSt!zd|ETQ+~P0Nlg}Z1J|J@RAJkNS;MQ|$bz!C ztm`1jz9oolUQMJ^ls7MM%%>0`-D6CFyt$Pct3 zx*VAQW}Ws&XFsp0pvz$1mFHRihqT?eFI~VC2b0VUo6DvUqe7Fs02p*|)EJy59W3q+~VYtraJkQcIQgiI}Ig9Vookpc~ zs1Amm`L(&F`W%&w!tbMR{dn&kHrr1I2i3@tma`-0zE3(-d^QzmIx8ym$th_07gIKX zas-NN?-H^m6Q53MdCMh=V*#lAN2QHf%ys(G|8vNFDrgoX= zH&F*;U^lhZ7s=yp*M{JqTXvw3vnubr9+LlLkFy_tFTX3Nbo?$w!LvKNIqi7I<@{BD zr;sTl%>yx~b7fb1lHVvp4={1I+VMMKm}*|}w>tT$`l)Cz)d0q@f!h#!bstrRxzLxN zaf0LSD2GVv@6E!F3=S);tm5fyQxRWoUpQ6Xlhzw2VedS>PxxfQ$*-~Cmq?6J$CDMr zQN+Y!F-DUB$I6n#3s%>ZIyXc1|Ah;BiR^;&*7*+GU5+gb10b>b-7cw@<|GQw#7Y#W zoIw}CIU;7krC=s#I(;WxK=bnAjWKX`^&NkH4miurS54RMuvxP=@yhq&yAF zugreGA_!`db2@kNklZuLGFNEztQ)Qq5t$`*@OBl9DU{TaaysZ5;1*S- z=jX6tH*@&zknAuv6#Gngzk40K!VV`P<-5YSL?r&4RCXiZYeHVoSzRN$&MN9gqPojZ zzs9fLBG?HHS3&LW{{Q;;&wB#khu;FzbZecgZ1xnNU_>J)pD257fj4;C*3ycg(QV*l zfnBhMU(~=g(6;S18dC7&g?+!PUmNBM?z_~yQmFbKbIvC^!V%@7_A9VWh8p?OnHqm*oxF++Mcq}B0o-dLg z7+3(gY>U%9Cg{UTEOd>W$34KJsibV|bA2$w?<-hGLAO@0n-!VDEH2!IVpiAX*7zOOOb4Z7`pUVqZ-z2|o9@y{!M*As*tc(sWja)09|^l;aiOCC7s>iNxJ z%Ee=KRdcIckBF%EbSZ7La%xW(=X3TB@J~C+9`|5zta~wHEpX$XA>lHi79Q03vm!6^OE%{hhDH#h8@jSo zE6Y-E{IP7MUHnNuzJl~M{kt!WsauIFG-&6?O> zty*id^<(cS)A0Ga9vsiz{%54ppYnC+y|bgbn%yN5p)JYU$4DtpMF!9~yBTx2?=Q5! z^iT&`^*^cM@>dL<;gmyWl>^{oFmItdE|$X{tOG^FpPHmM19ZLog~jc*oJ%#x;RnlL zD`qpZ|F2Hf&LyM{ml(ZGoi})g(rFN4pK{3={B@3S&r+8}d7_?O8C0^@B}!fdwbX_S zbbo2Fbyly@s^sDXd=YIz9SXlzj1JbNC=#P`lrq^>O2McjdMl`-LA*^~R;2p(#oCv2 z%K*9nuEgWdF2{~bWQp41l;Me#HsJ=(Cen42p0PUaQxfE9e$?EO7m6#pRZU-jet6#B z&1A%F?9lvG_CQ~-y3yhlgXWy1qzS(FJt4{|N6Z0wPw8pW-r3- z^a`fSLu~N-42GIBl;{2|ucb=B7<#X{Y_>&&_f%*u1|(y40@2tJp~uJB!CRxetHdX4 za?V18mEAXUYIn+zwMfD*(;tGyAtIE$=m}UZThuxOz~c{F}~*TR-FoQ zG#-3~fgQ}Y;zy7W=oPJ`)&<7jo1hSR+T2;M;2(BkF7dQ(N_D&%DGXKwFBw@BBRGih zy$)42w4N%s7qPRXM{AYXY|zlX&GSmD@yZw>&6MBzbLWKzDiqfUJX*W? zxi=6G?y?*?SKa7TYzRO|O$^of!#&i5lw(ygPd{e9QK&aS`H5Z6-&4uM{kww9 zDa8iHmQbyvG?C6jjN4wJZ z!Hn6_MaeU;zh(#rZaW{V(PQ=K@xlY6hzJTo|8tA{=NkFxLUYCB;;$L?Q5BmY(*mo_!5I@$e8wbY88 z+`zz`7n&x()%yv_etSzDCPKdDz`}e(QNnyk-LL2L2UPU#rTfIqoVx6)#lUGqWfEmP z79|j|Rm(I<87Ao`Ysj)!<|fGPcx%GoNom$=er#-FCee$W#n&zQv3zKnVXM5)!l#W# z;ZE6**u~)C;*TwU4WModlbg7@PO)-KL-X%g{45=MHF_ z?26ZE+yz_KQ3iIw%q>MFWL0|D6kfS+ewgIlpihowe$iXyki zy`#%7BwalS%i?We1Drju)7!h=SEH9tt)jkzY}2b-8^!|UoOy9sagkI@DxKM@_DY(I zX%xgI5#EpE#%~27A!-o4-?{ga)iKS`FnPNiqSkM0>*}l>~?eQ8~d0Cxw`14I~xZ@`Mu8!yagCe~bH< z68-$c@gf5+JK^cmcM48S>kZE}#813Pvohw0l=2#FzQ-|KEN!o1+a0B^M_Wp-DyhL< zKnu~MZ`NyJ!Cc;~xdNiPy{Rv1xg;e-YgKYR(L6Qf=WkJ%WzOqM`q-}V!mG<$TjuJ) z>P5mb8NCutRsW@2kk+64bnhgJa=dC^AI!DX6i@*W|Flo+zcREz_u@z2)pV5Qz2(7?8=yFugJwxoJOaA zH6sFOa&09)`|LI2b-y~G#23^-8f_1PS!|p4Ny*v!Ar<{ts-dB3IW=G8tOJ~#0WO%+ElrcB>qdlqvY zG;~v0>OYV4;XqU3LaF9`d)ZBYW&jDE>B41U6ZKW>ZnqUUg;*YiYp%`&KX;!3i@-mVq%_v@%<6W%*guq)p9KryZ1a_IcdNVoXw$i z_~;>Wm=bK11Yl#E7uuT7mJT0=yQ)Xi__S;a>xPr4#2-Dc%LmIdn=`0Tyd7$-JMbyO zlh!6meu!x`^5hwQd?T|N?(g{rZ#M3l%i+0+rYYP`e1z2d*My+^#&V7R@#q+}X1Zc@9jaOcbz8lQ=u+F1r0}rHwahgd(FD^TwFiSXMZ#*3=NNvZYfS zq^d$F&u}PnQ)_lrXiwbnevXHK<0Q*mh;ntMKa=|U2-UIvcS0+R)+h--Jo=DW7e>i5 zwFC=Io|v+PZx&bZ;nqq^S}M|cjVd^b^aL%)RFGo(y680bD&Qx0>fMJxe_Wr&}7amT%vp3S=bGz-65b?eH0lTD8 z;Hmeq8(#+yT=$94$jb7zvWJ=QHIi4@b)}~Nj;D7#bRNoW0)G5BVeJ+*G)775C2Ag6 zmxz6cz-XVH>S%;uHhQVA%xSpM-rs!67+)}99E>bo-W7CCd5e{xlR+>5znBu$I-5Dg z+6n6EZ?BtjkR@5!tVi8`jd7ms^f=Shadr3qrpi>A>D!_0MBR9sW-(-{HGwssn%$@l zHzG2EmF>XFPHtu|2iMVq4$c>%HK(Eza<%a~)SM zpyAhVc&oQmpTKhmc^`qZS;|E}l?fM{d3#?Oyk$LjrT`mvfQ#4OJj2AcokPLfY{ImA z*Zl1;GNR7PZq&G#uzDa`0LN&5b{qC=asvwp$A=-#J}j3K@=%w>MY2shJg!sX+pG0S zCQPU#H7?leW9IJj8zj6*HtO{xysh%$+#-99WmI$!dtgH zr;f(r2DOI=D18{pIw{EWonLo?{iGB5gaj>L|NIz8RmXMG(U7MRu2mY!X4_#8@}IN+Ag!>}rva$# z(XZdmCR0%oIJ_<DICS932J4b*>fV#f@*MrAI*K(-3H)|J(gf0I^eN3BS=JX&_Lx(~x)i&-f2LH0{EMsy|_V22PhC;u= zDz!+@TDfr?m`!FzRab|c)xG2T{b#(h_$#2BX+Jm9yIFttE5~=QA9pqFFov>I%@kKQ z%QD`;hnPba{U9l$vSdir^}?L~z~4ZP(hFNf#24)A?KwAL-P$t<(aL)O~UQEoC$!EpH zY3ZVCMsYn+1T?o_T9fB!KviO1LM1hs;C08or|FXDvzUY=(z+|cjYKibmK~X)a<#ft z-?9Fy?Re?OjLs3zU5lh;mzu|p>8EUIpcYutX*Y+wuhzywC>-|FApP9IgLl)!)ciWKu?*?e~LtatB4py9J z`iG-l+m!=%uFTE)`9_jLY&|&pfUIyWme?>1g?{Z`hpFdCq*-?1V}CGp7Um65!%hvY ztUT_YC(R&jUKy4^5t#X}!nI-T%xYwaf}qS_PlQi8lzN>4)wmAR8ti|*b)7D#=WvM| z5r+Tv=B`B*%pCu)YztTjLk*j^oN>}h|J@fCgbaUfy3t7iz(_lBQ0SE*V;u zR-@dQvGnY9>BgvUJJ@jiYnu0=Cjf7@8Rw0M^XeJ?vbMkZJKbp~6HKF4oAIFdg3oQ= z_yBYtN_OW}ws@4^LG|S6;6QATOfU5+9utwVi+RPAF~YD$^%P(~5`BF%Ee6=`JgYN% zPB1r$DQ)?Kw{QuFO)(n(RDJtdP2^bmiRhiUFgsozTVF%9oKh7cjeOWDZ64EeY)FH) zijQ&wk!PYvt!Z3HN12H4k31z=9xvw!#B2Km5E%_c%~=9rLr6W`L$jKdgmFc{c}niB z9N;Mz5Ew}u=hCSDcV6Pe93d5&#WmDP(yP5Q5o#{ft^GEBu)NbWy|uf_Bv8rq7Ty#_ z+vN*YIn<2`wHAXOeva~$({dk(uCp>Ts6J+_*2 zx~_(aRyNiw`93CIEyr@{(mwquYgIV?-bw9BktGprdUnz9Kd zP3==Bvj_=Jy~^Bz$4nP*>TIMsJP6G2Tz7mkF86K-Y8?!GPHspwRx0cdayM1Hz0A4Gr_;@oe8sh?)yG6GFUQxxr%Ce?($nxNPmjrsLrqAW8Q#7x_ zJHcysG**D^Agv#eEApto*hg>u{lhP}EO?BA?+Zgk}#%S%s%=UO&Pfo4a@Rnb3__PCUSG|RE^RB%~mSvy0 z`{p>s7ow(AZ;qFYEG`j^F`P931)*V!`ck1(zqSU%airhir>$nb?Xz`YHEQRQebQU~ z_$qmQ12uw#hLr(jq?PWpczh0YS`P|#Rk-#pLPPb_QWyCS7HwX;Mpph`rejSFxpO9M{{8-6$97bl&^p}i#cO5 zHZ*<=Nhe=@f%`o04wYiFcVtugF?Vu0i}_$@cYK(KfZ$%L-|2bN$m)2Uke0j44N3HV zEA;jS3g0|#_3q6|Z$nOY0y1C{K-);KQo6p&4>V_KJ%mA}~OGP=Dv4T9pWUe>y+uEpSLH@lo$q3TDRi8iW;b!d8ZN!M#VF9%ST`O@GUowKU`o15dfp{3iQ5RnvAl4K02>@u0 zhHg_A(EonF3+VQl-0)N^{dc-onxUt3D}S;iqRtQ2_=74nMvqo!S0INfg~LFCmg;c! zFFyPjo});PV^jYxl658Ij~QKebvg6KrnX2F52<_$+mIkND_|L(VfsHw>aTJ=JhZ;e zh3t_WYm3z{d%eCkhTPl;eCDblHlDzDeM~+POuE))^IU6f>FQ>VnguaTbfNNcYN<)< zOc#G``J#pQl}3=H2-7{%9d+e(1@}~m-j14vj7(Lnfj59ct#Ui>Nin1+MrDuIrE{$A zef%50i}6)~bdRfR;nRD)4D{Bcboo_+r*Ir*Nn?gMmHDUSw$S_rkD)$%M zWjhZDkHFnxFE<|k!V%ORld)Fti4e~-U*3SR35hjy=Gpa6rZHQ*D-XCekaJos-=k*= zk1q6@v2i#>isn~q!T|*QMsfU+pP7 z5Vsdtm7iUcEXQ=opV&Md;D|R@qIoArOa3K#&wd;t98ooBPRwPH6s;wNwiXhDeni8Q z+qVEK49$}y7@X@fQz*7y`ey@f`%ucJ%SxjViDV+Bm8R8T$6u!Rt8J?}?AV#YnxZ%M zSRUq7Z^EmeQ=Wwk|I2iBl!5LzKXtrK#E7*(ExRZP#L!qzl#*Ovpxz6Im`tS$Q+Jk> zqQ4*;uAu|6ZFWlED8t|nfaHP-%QYW*L=79MUP+Fhxu&cxfJ$?<(k8y|V;J^$T&WjR zcba$)0RbQNchWYGBQU-Dr0)hs#3;3rsP$b5_Sww z6a8Xwu|lTG(JRptY+L1bY=2MNDRl&*!cfecQa`bl;UF>b0Q?p3R@GlRfQBKoFb+%tCTWRVd!A@gr{eR)HzBqon~%5ckAH$6#xXyR`V7Ab z3{(p6d!P|P<))647*6~Z=Etm*#+voP{89A9cV#Ggqgl=~Nv}GzZs@0PjsPTL# z!s1KONh{m$-qH7T5kAm)OZoy+oFMR*mfIet>>zkO6)#R0+g`GQb@?8ZETro9;B8B4 z-#Sv)j;8K+1>Evg4_^P&?dGllNqq6y$68ZR6Z{J?Se(BzAM)F z*XbkhS$^pKzrHyaZ2`;X-L~LFCA+{5BUddxBzgrmdEc=wOvJs~H^Zn#YZG@51nB9z zeU)$1^Ww}0!)1pDo5sx?b7BOiPa*h`j0cpG&qq>ob-%e8GU2MOGiT)A*wKp_R#a9XHudkVK7VM!(sAe)L z$ae5s|^4TxnY?*eTX4N+-l z>Ya$)^9=I7cqwpx_!B^Q__zSY01)v3AOVt4Ml=A=l?@{x8e=X!({#0k(dycQF`eH& zD|n;{GXXudO^ZN4YG0Fd;!f7f>y^Z1W|}OfTR5sKRNj7q^dIaOWla719W>+ zRB@VEh)`+&Dj#s?jQlf(`HP}-lhI3slU2cTUWNw^?P6g z`{hRI)bFymd4Fb*fRNkrry7EJ*)$^>CdQdN-5?gG6Zd{$a#3~wdO`DcVvD#htEIbS zd*)wN7rO@*Nm5Xx6H)7(WmH2&dGi^!Xnl;)U70Yt_5@*ZskcAsf^E@|iYl*z!+OKm z{RFcEHMYwO;@{pWF@0O;Vq9EWT8cQnEG7sk_PtbGF#2+@e_Qwgl7DMR--18_vy z{M9JomZjp)8mN7`c)XmYi9gcQv6;TgON^X}{txMxSY|C+rBOZ7uP2)AmZn0Q6AZ$y zOGOm~GVyx$Y;U(U-{)YRkKNXwOHh#)##QuFKlAi5PoL((Eu$ApHBVJ>Cw zrfW#E2)XX?s;<{oxb7L3=>>!(!&uwL5v$hg1cKv^S zH*x+_g=4HFzkTz=b#bw%B*yh;c>2$1f^}B`eFB+QoFdd$Xr7xZjVY9?*F;=sGEn#X zSfK|A2o`swm1FF=&V@SKY3*TmOS|_?;kdS-4eR}7_l$^*7bOy6d12?bZ}$~f9>xC_ z<&{_Gnkz4V*G&yEtj$d*t7kmP(Jk*TdYXh@RbPbA)$Ql~f~F_MT&A^9ZLgTNHOJNy z>ZPv?ksTMUIu;`&U3~Bc{;O^OYdj~Y!;3fL7BdmJN_GDb)oZN+MC6>MG5JyGnegAj z-u~naV|-dCq}$(4Q&W{#q9cG{&c4}nxvXaDolXKdMxXY^6IpLos=Yn0pyzT?Egkl4 zpZ26PRT-&rBJq?`dwuiNfqSYD(GXA(w}HtjsSKkb4uAUU-$wwz)tNqjiphkt83VZi z-L75V`F2Zqe2sH+&BW@QAt#5_J}yc@iXS32{#kw$*WppvL(|3k{H@jP&1yA zSm61V#2E#dM7O!0xz7UgS z>p$5M^wpOAbJqR{{LvQnK9W!kJxu5;Y1zs`N=al*GW0-7&QhpcegqB!(Dg|`^LEy9 z(Hb4~&-$3cEoWke;loBOj7d{`8;R;5JWV^X)_Id|IHQKmYk4Fom)5Z%PMC1rW`Mw#_$qidF%MeqDWF*n5;U0OIyE z4hjfy3OshZ8@!tBmL?-FXs95xHzI~nyp9C@+@#oOU0bZ``nRXZmd~YVj*+bGUl-?Y;g>3w?dstayZvw*6t;aA&+2--#3LGbYyh5y z$H|7_dRgH0a?j}Yi(v00Am~!F=Oupm?f}#?2I#ruKP$kvo5jxPdIX8=L(T&-kUGmqy-PF?E^m4ON?nRiSdc zNLqTVufgpv~-Ef_A_#sTe)}7-Z=^qRAZ@3uKWcVyXSOo56H& z@mteZx%BG3ciLG9DlyhfJRFrjSKgBj(};wt^Xub(3Bf|5|ABqTy~I%ua-1r3&=f&i<`6-ppka#N51o zxL5@TuCq6>q$#r=Xy)b2dOx~p62X9rQz7bCn;y75^=-qP__4Mv4pD6vtSSx0Jrwb0AdBRWt> z^JE9I>pRQ9aB#Dh-mlFm8< zO}X(!2M0Z`c=_|vl2bC@*b1lkhakK;O}rUNINUT5;Zszbk_asEi?IbbaCQSpiu*;XE z5_DVv1-;X-xT>4D3C-3UwX+)o`;FIpl7D~ymHKa}L|>5@{|zPYN>U=ck|0#POw@bX z_fmwT9AAr2{=vh_m=%FMS}+>$AlRqZATVbTZkE#vxi zWhLj>v#qT3V@G8HzvwX4X;P0H%eKjG&tdJ!ozvx-;ea36O&WfGKC%VJzZ?;C3$kx- zd36cr>j%C4Oprt}u|i{?oz_tczic%(n<}*tlfC8=Xfu8%@}Qz0Tlz$$T!B(6XZs&* zQ{xf)q8V>~&NKeY%DC;UIbVN5ROUGn61#AKXQ&>bHwMpieb`$bik*osNn2(xGB3}_ zoV=8?6O%dg$u;jp)(j0~Y<8bWa>a{S;sF?5%W(`Tpq7&?A%}_BOm;r*(tF&T%M^tv z@y0^hAtksuuFGuCj;BmLF67>HEKC|Xu8dT_(6{j#U$u7N>FM?W=fP*m=v6o=w&}LbR4l+fIHw@h zC@9%{Ls;)4Ep#M;U|xqM#``=XAI5oN+GosX>T(f$U;G%qLn1Nhdv1D#6UGIN7`*IX zV)4uIo8ghgMCU)`Gs5rkI;T9}3VhRJ>1W>7&UpZjKo8zDWlnSdXfKI=#T`7S*lM46 z+4MUx?3EI+CV)J)o?pOc(x{Uj>(xTr4X!@qC=~SQa__J8Z+-C^o4E;K{Tj&A##bA= zT|MBtO>|n~unTQ;Jcn@boH>Vb#|T#j508a`fz(<(}wlUCEfD(hL~ zrY1VPloO|EGJ;ZP7(y|@%V~>nk7h*JfEs?^S__8y09}|EnvbLG0P*knLb?#6_3@9o zbaqj^8I8D(1&jX98ZKG_Y~e6iNgpmcTQ^2T{q7mv?zIEI;EMOaeLovo1~UUK&L8i? zqI!mzxSy;N<>gsA5V7qrzO z?$c!cT8uy#ORZ^O7H{Gvu-gnU+$+s=V$YcxRhzKRG8^C%m1Po~$8^oP*hBApI(&WX zo#=hc>>ZC~J-L9iiVW&bY%MApdS8<6wF{L24;E_CQu}HYtV1g&+N^Bp*Sw5Mx$SJfnQE?5 zg)d760X5JY!hoMQsA+y(-*UOVaj>J#+!udYt4po&jT`$T#d2~1Jh(SCjBj^K2Xy)n z-B&_2NeN?Zdo?<}k)27UY*w-s79_*BR3m)CI+6!8%N(KnhtImybz)2+7P1U9UlxN3 zh~PO@GfK(?WH|t$q;u29O+kNccaR$)otGqLtco;r={M(9`L1SZXZW0embE^So6L3q zImmO3F_gnB0$_$WgKJj+&|4gb&ahRr<7MAl9cY#wHeLbS7~;T?_neSZEL&Mg@8+sD zoQ^RespG$tOc^bPOhfdbr4DZvI=rEBhB@sZ-SR;|Kk%nUkC6#zZVJ7YDRwTCi4K z&u&GvFFI4@FAfPA;ukfTbqo4gh2YD?BbpO64zA9XD8HQoglcE1#K_5-=PSV0FH+bs z<|)0EPs5|qN&U0VYb)sKE={6Z$r3B9uv?AFvBw={5mwtBnSLhcfv=!rynAVx;(nId zugXicH}{lMukmw|ycNMWuMVAS|0Ksll2QM-4iSz*3f=FRj0X;yV)6TwV*_isK;wAq z&*9qzH9`T~*^#-ZTMVIicn@AVYypn%9{BSi{4a4cbfLHBWL#BC8u#lC7rKSYkzOt% z3r>GOVaJD+4Wz${(1m9jPC|w)y_bttcW2LU-ft$kMDKOBs82f3^c#H;5`tsUN{Q4J zzkIOikvKG0=g2XQAM#NhAM@$E^z9|AR2&`n`yVNdxl_Qvsc4Qw-f>YuI!7Akdq-e8 zk_TJ+7X(2ZEbgs4kc1XDz{En=be+=@1+Tz?p4u@gd+Z&a0uu38)1=`|R)^f_YwiVc zK^amlbRKKYuZdgg@8^|WIiw2+$E!H9w6J`5nnE!$uYf*GpugY6bMX#sN7Y8vuP$k5 zWG|8ab5XP&Ceg*s(PMn4J*ufG+s&#UNyXrd~B!bx^nG}C23~#h~#>-}?Oeg5DfG=sKsbIu_ zTKxeUdN3&xM6rxiFK$Glg+_v=I8KZv)$3WvhqWx<3Y((d-&;m2th-@srb1 z;caX&9LsUD%+O|^ovh@=zACd8mx`>vy>hUWo-@<*)d4Y=6|Lv_OnO6@kC58g@Zu`I zs>}bF0O|fSN=2gdw(@H`c7SNM!b*2w{I2&#ZlX=FG`!#Ub!^kpB&%o}?5TGc*gvOK zt0w#FTp;jM<|X%^!FhRmgS9mxAr>d1_J6Q|+3TN0y`-Ls0(p;r#GazV{zaUUb}x%G zTvK#bo%3wf7C3H`Nc1KL=1!^Ot32s{m`4Q1yc~a7OFH<3L8~#q3yM46uiy6ez;RtJE-@ z@498^OkB?#u0~Ip@9{UCgAs|TvSP0L@N3`3-D)4oc8#P_L#q$$c}#=qCuUK`-%{~o zgy=1M-O2a9NWOr#UkF~Fw;wQH9*iC>95=h*=Dv-4^Mcor*VEnuzo4gt+^KAuHaJcU z)#!dMCr+9_5$lu7BRC-U76X>s0ECD8n9R5)`9(y_TP~JgmReUf*Ug1KT`~4PNd_LD zKauoadj;k7UM~0aW%k_R9gP36T-+zMo#x3pRc}Ymyq4&IqYAxnQFD3bLS&?r({?Qhc~A6 zu0^{&-^VIQfkN0DVyjq@hyPstWhlVih`7m^ENiIXiA!F@Xkr20By-5v+H(@9^2SSMhvsPeYH@b2G7H6AJw`7wYnHw0(iQBRw^Cn znncP2RkAya8Cpo^gI(2R>(uRzKAHp{IE-eX+}yS6Wp-@Z-EH2_oO1ncHohZgy^c$*3= zD;$C${63*(5NI^&Vv5VbX!Txxo&H)?1xaF59AT5J6uOjc>m#*}EFWp{1|#0YnAyg< z*A66@%bn@4&gAO(qwml1=gSst=39&0LbgJKcp?h1G}HipB)l0Sv5704Z+E+{k{1@+ zGPgPUlJY)ztk#gL+16_=sLr7}%q|=Dqf~fply`;P&;)Kc6!|}*agdZXejlwDSOCq~ z;ly2~XtT-FzW|Y|tOd5fRg9%JbrBgdyq3X@k@9e_d)z!9XE)D+M^Kq;&^kPt!iV$n z{msIhU4^BE-iJ`3UHv@EQs-O>;>a;MZ{qKFb$`{6k8!2;TKe>3YjcmiOa!!lEk}*G zr)qkJ0Hr*UMmu=`myL7Vf0EcS@U!GG$< zH3ZM$FPj2-Q6tbABg>$-pugQ`_&r$w>V&MbX2wc?S)SE!|KJH^KC?P-vX%u^_MnPI z-9i{$*btTH5qbJ;n=wPjC6SmN4frwUrYLcw>m~LbI)2Z=0>MVjL0U8c-tg?t1yQF9 zu|}d;(e^JZnr*PJ_9AdOZ1EC@hBPIP#~g_{@@*=W7^={3OFK^tY3EosAOzuW zsu>$94TYQ@+h~25zGq(t$@sfgzH$+fK>+p9B2nGXT$hc+%_%E*Fjz=~z%vl+Y2a$X zWoc(-CwW9N@KHXa)ZRgX7#mq35`kw}V$xNNyP&bLGfL65OA&6uQy4)gE6!D|wQ8$5 zK>p4KJkGukLmEA#?2#apo8!J)0^(ckl}rQ=HMIm{$scxQWO07+FHNRVA*|4tHtbI=6 zU3l(^nm>FF_4Zc?pty81x?kUlGAwUxZ1s5^l-uzL> zx-}A_UK&~zX=Qo#D)=-_2x*MyAQO${D?n6EN%V->X`FM@|9F7K;2BWss86w@1MGT~@NSuY2+nL#2{?~sLK?R+y*xD=y zaghiyKvNwJg^{lb3CeK410|fzHBn?<50{vzWmA$4iD5<3wf1{nWn}HSi8s5?iMyMvL|wPf2qJg$x9u>oY87aL7Q0Jj`8d7gR2)CdqVlwA8bWFH3JDS=WVijiZ)5Dbx;$rhbKGM{+I3HoN zU31c~iVW^d=FO!-BTL`=v|Dk(&6!4H;yX3X80C?wbfRW@JL@mddBxA+FfR{!u}MF6 z(6HGX1MT@MTZvXS0MN&E^vs>2T8aea5G4$AI0LbY%a&g*P!2UQyT_9cA}iZ}-$jjR z(TJeM$2b`q*&8k-E5wY;gqn}9jGMM3_PXw0o*m0qz0@hqOg?l9jDvQ(Ji=cPYL~TH z?B|%7+CUQc2qHz|Qqc|U!fV0@UHRS%9@8AA$(^;5)l3{NS2&K-ed%AXj=k=JHFa4#9p zg`0EG5bsxYYMQ}KaQ@$#g9?0gjOX+x6{E<9cqrha1}XTc=7wSioN)QA#S0TJ?bkDI z8%+IgBOW_@cNROJDD+?$N$@``t(i_mW0`>(oHq)e7_@kvEv+j#3YVIF4NR+RTQpP1 zB{pF1EDmDJIAnU81}VOn-H4Z1X=x^`1a0l<{fMfQF7Gh0o(?6L@7|Z;MwcjXJNR?iblT|XBQo?2 zIh}Hd3^SoM%nyci!8BrV6Gv#&dK{}-KOxa&BHnKIhAA@Ln~(PGiu^Y@PIkp0(rfd9 zqw*Vmt;Zi)p;u2Qf0_zr172lky&Uoj8ZH9_wlfQtS%u!R{N?OuN-9ryr?uH%FszKv zb90UgNh1*5yd0MFvEF!a8NPK1cJAFPzwHs*f3>NnS^eYl?0q;dZu)crd5%q>Egcn* zyr_1a%;Wm9Toy^hi>W6ek?{>$=09X`$BiZJBMqk;g9b8Lin&6jYFU~4xHK=YvMeU+3iORe3-#t;vXmB;I3swv1K4-oEBlx)S za`w3KI#%F%F?P!zc&AQSj$IMM>94tG5aGtnlDk^rASaD$zYqLu_x;q&-wP)#pGINH zi*}c~uhyO*XYo{gy+Dhgr1|kEh?%w--G0cx_+7x#&t2+0dFJEt-NkTE7q7{xQoHg& z?vef~4(!i(tqt??@aBP|NL4oRQ@-+V)ema>xW=(Xqd9!e9_dp zAeut>X#VMUww6tCY+I+veg(DSHZYFz1li7e@h$_P7qMRsT{H%2!Mx}}o@P$`ni}@F zL67U;a(&X%aQ^D}8xs2l?iCc6p}=i(pJxy8K^M>JIPUY}DLF2w}DNj2~CG=DUd>hV?VnZ&p4g`8H`DuAG z_5+?ID52ZhYV)s8@lT<-6`I87wF(c&j#lL!rHWEa%GT0LV_vO=Hm{nqwmhwCH#ezC z$xKFWa>j`$d5nRB@{qzWA$+$jh5DtGST%1#;WkYP(S}o~LL3YWil}T|y7?#I)ymh+ zZdirhOP+#t5nxCzbr2RV(a<91Rf*vuUNxbwQbn+|tHD}AXAzDlT2o^%CX4nZuhyMH zX_yAuXgi@l<1MwXf)cn4N?=1yj_j4EQ(Ij+s0nC8h7U?=QB-?GxoeO%Qog};?P|oO zopx1uI>Z&yjq79`Os`!PDvsfeyY*=yIaNBhfAy{{ z$&;nk_ocB}V@Z+(V=dEs%GO|;Q92@hZUXu_p5rQJDhcacYMf?#MOnmqwm^3UH6}JsM@gdo|&(B=$70wC6BD5$}>!w%B08Y z4C~oBF_idBqhxf#(7Wxuh~h}hxgKUKYIIp9=`Jdi-G0Z>#y*_Yp=+F zUfbi4pQDo#{^{@i0T1km;>rsoqcPR-A=Swd$#j!sx``c*I_-#-#8)NN(IeRnJRD(% zV~kCtZ=Rh|-@A>we;YfOiScr|2<8g~#u$<`BOOgicW;vH-Xa@J*u3*&{=;wl2LJxA z{Z&8~A}y6)bQ%2<;}g6FYV@x^UGUlk7rhT z&I=jafBSyPAKfo`RCpG?rZ#dWaqx@}6Sq$$TLC)xi!6MN6-1SO-IGd6UHW-d~8BMP<-Fk`5E3dP4?Q?A1{4yIaPuTc8?0f@ux8R0_F92iU_J(Fe><@3EZiej#t5s`X9Ba(0y1P=KysBka_b#srZ+k?sA-t_Ii{e3#T{6btgOxFd9tG95 z@!~(42k0pZopU(n8#%r+58!-QT;AoUQ1kLLa(t17uLDo@{hKHcItQ|D9zgvjw6yqn z=heUY^0)Y#FaK&#N~K^@z~X|@S)ei3?mbdEE9PJ^GVeuD@(9B@{)dl#kAL*h?|0Jq z+4HI@%LPx$tKP%X6)b&4iTKwVQiVzq(ont@iYwh!c__>AmB&T7Cca|o3#ZG>q2^ZW zFZP#_kTuo_yL^8Ugl{C>z~Q*YxU!@hr=naarmE$=x~r;9zrnZ`B$h5u^`A8da$<5& z0$Vx$2;}_FEX{DnbANe{%E<Xt}eSvOY;%LR;YxQ8vc)bP@a|yt;5p=6>0s zfZS<$)jYjt%%D+Ln=t>WJZhezT~(`$Cd{vv{(^QjELJhbQoEYUISLYLz)L$FU^(aZ8P6yGvC619Hn-NdG;=zy=>3%9MAC_7vb8k?#hnfuUDU^s0xazpsY*k zy2jNGS37VrP)M*$k|A5^gpF)SZd0y~clgTg>wIR?S*i^U3Yjaz2RRh<^cCa{qoV`yebHMKZL z(wRo9{=#ZExkT`Ioav_+ZA#se64F}tQ^fxJeqz7t0{i{Zn>vI#ufnBNKI6d_-E zRZMqNRrspJ)g{?r1o?n^IHEEZoFlC&@LmRUAz4j7#7bbDz-wWZdN@D0_7X5@v?UVS z_evKlfLUAP>z;mIA$&1+H4og9+rHpYZaB>>MV89$)x=(=5&H9o2Upkld;p^fF3*El z_yl=&HGXl9o1f#0g_sK-O)zP9^`S9f^8v|t*q%#!5lvhTXU9ydf-P%VE*H2Y#biT_ z1#3LkIN8l=rF|ty@x?;U39d@)aI~Tb2B=RCsSo$bmJ4>XjO$xFOeRxC!<^ADXE?}$ z8B9a%+#1E2v>}PLq^T%+vos|i3`mlcJWCklDOq^;Bxu@JW5^~Wrq}k^*xg|`9yM*H z!a2w3`8hv&=RMA|A$EHY?`rDV8NMvYw)ZfDVbtgJP*>C^M_>%eaEwVZNyB+uRZt!5 zQ$D&!H9w=SN(h!26vkSTBqhxTa>nv#lO)T@Pxg6j?>etsdnuevXQ`@++Yj$jImh1i z4lnF(Gt4hm0>@aBa{#KM=NYAzbWI;;5R=i9+%nBgV>0@c zjf7DGMFq7J%SAr;?~GR)*=9Y=TG>j@ajk=S$By5|9B;o*mc@$bB)IeVs-!L}s=`y0 zIR$%^;{k3j#lHl5LwL!+Ch+d}Kje4+@ppOe?N2D?g;-;%J=Ml*)O%mS)H8NAhHPz& zI6OX~C`(FfIhu^HlL6yFLba?g&XXET>Me_T!STsCH(tC#Jsz;{;QkyQd;A4DSl?75K1_TKlOWH-*x6{;MD9-^2JmxT~L-TINF8N`C%R z$X0!5oc&+FERXZ6X(*(&+i)@T**Eh57s*y3g=lB#Y6%2pg;xa^^J+`mzPV=T%>xij zJcb=|%{)MJ6qMFs*A!|q4}b`Bj&P2q6ANXripvBZYW|1IdJ}eZuJTkFL~s z%maium7s7oQn;1+U8(0k2VULGNBr9_e2H&dd7ZE9zQR{`U*jvguk)3?&-2yYH~Gr$ z=lSyP=lRO+=lI3FFY(Is7RDvu6L6NY_EdFESyhx(+0KJi6;)lY%!P@fG$A(`o7sdc z$+$Aw=F7XU^VQwg`Rd;1`0DQG`0DN(e0BGAzOwTwU)_0yTa!KR%nw-9<)00&HuPbdOUrTpv7uj;n~(GeRB1soO^RN>MN#$|5*x4(phoV@)mgMSI%!ZeEpES8!iG6Ahz z$j`c6HR?ml+rq?rxzesmsL#p-w0y@Y8EK%M?ABe$d!HAc5)xX&UTn+pF-Wocs=rb9NeO-8{4^zfNXKtD~|&+#13@f=Tv#x(T!VaCJRBlhQqJenPG zFmJEJ#RBr`xU;p{W4$JdWkP?y~vlg zUgRq~FL86S%O~giB-SuWa~5?$sSz`1Ha1Th zc8u1}QMj@hv^!)sG0>P*?FbUujfE9tZE1y~E}S6)Vg^8tPyKnkQ(_07SpZKTUxOUyG-*q9Rwqt+YFsr|q zL)*Jm2pxLncg%WTwOA5wamA8qaYmY^_`#5JvOzT%V!bCVN{p)mMcZ@(2S|KI>KSAb zybfmuFP-cdHeupTcqjacC)6)g0(Wtd`_B^`q6D8)bLdMxVaX@9Vm{1qd5&#%b9Qz8(S=wbDXg_YenhnDsYwTdQDPHl3)izS>!N3$1Ub0<0j10@ArE$V^WEc%CStk98_tGxMSky49VCleJa3F7PVUR#-!`Q8^!g;b{ZOEF0 zab~$bNqB8LW1NN~BQVTscrbIke_U~}sHvQ1n93;8dq~%sjFvuQYnbrLR>J4P*}-LP z>`N1dZ{%FL1+Q4g_4AVXqZ9t%x4*~l{7>JZSe9WIzn195T zsbxCKdHCp%q9`fTlm~m;k*rX)SnMyTcu)0wu%*N zVWL@N$Mv$6rne5Q#IyR-ysY<+rWkVB`it*d|0?IT;nl}QXy*ai<9HG*-l%L9WZTb( zS3yiV>O4S~SLME)2MFU%q~3fu54-j{P2QgekUC3Ef=#+(Qy&(l_vZmzu>92UMQ7GBM4!qw3h zyMrmOOt14FzV>VU($&xN`K_1v!q&@tZtGP(xBV(_ZoSUuwqE6pt(SRy^F^lVl+)#s z2WLm@&raB%A94TukO$|F*gxOr;rT-zo@j9w70xS8KGn{k2M9 z`M*Bhm}?}~q=`*@yJm-PUt!tivZSU6yktq59n6}VrfUL?lqwpJ{?#C{_@Zey%YY ztz#IBrH!_YKd$G5gs~Yn^K)9p){lOFMizw`LxLj-)&YE=wX~~VzGwSs+trZzns!zF zv?Y+Aa${=3H`TPOpOpz{rI&m~X;1`bWLPXkFsaR2etb5xC2SSJ^~xE+pDqo0c@=(b zzmvEu$`5V0?z5n+zr?0&p7m|IiBNUG>YJxXWPLXP903+ zh&hhZRTQpZQ7<^JW*jX~c`!fV-fW+{XW=^C=kECf?wvgh1L{K#=Es~YXE;0?gCSqo zzR9m#d!0A7uJDuNdz_Xs7*e#u%SP1c{KRi7fa=c&VQ`6;(2z6j~rdLb(eCZT&=(HHonz1$M#+d=Ru8L7)sXuQF%~exd*#z{o_B^E$L^3E;!P zSQF8DQ94Sw(@62I-DwCPOg}AT?PO;#uN)ym_;$G8@Dpdq@0 z-8h`QZNtQ_>v&atwp=PdkDlRMV$3>Tm35`2hQ;id3MZy|hhuD>Lzd#5!?>EnwF4oA zcKbS!5LF>Q3{=&GwC2eob$dB3*ben`3>Q{DAGm_sZovn(sw`5CXi_zJtb zR~Ze5vJ*H@$q?LCww)!{>`!-sNiIMUWD z3s{?wra3mvgzni8JJ}-1M-0yod2R0oFKl1squU>Xfh$|P>}+gtWow7gAZJmAmFqm7 zt+>F8DuM@-0pp!%(`@wp_MZWk^97&0{Vr$whtx$8ras!HN9m={D{+UL7569}k93Rc znzL@6x=$MR@ep6#wzqq&MWnRsIIp?>EO1#m>+<61_7UCi^5mtM?S15~0pfVYe-u{T zqX6n2zi;10&z<-~*uKI!x?dkz>(~!_5!OZ%QA(byYjqXUA8id1Uf<66+LeTHVwf#q zSy?J4lZj0q*eob)$Jm51Z)#*`lnHba*~+b$YqUCHsS~!EljgSV$E#Y(QF%jchcLQA zvhy;-*T2l<8(ZA^1;gLkgwew#KmN`={^!5{JKTQn0eLRwIcJL{4;KU8n*J7dlP@z{ z)NGu6pQ}^P=48nI2m2I7NtI@tUAfAcD>?OZCSSQpVhrxVDYM0r(Qv?MFyN2=;K%HY z2mIPEyoSky<`0&h*(1;V_!0Ay+brh?l*JjYTHt*pW%pexCSLnBBT5}<4_bP9f`To$ z>3?lMOr!J(3QDtjyiR$EY~?!=Ojo{ICtK+yvO_zLio>_^m8PLGk>tPS7ug}FZ{xHc zCtFEqiAm$Ds71C46V-iQRe4ZCU(BnraJ$Q^GP$10Sh8_l9VUA(-+bk3s&GPS-PEf< z>rCbr!g<)?*r(PunFl}gsltb&&(1`ocn+MP`_vZniod>9OfkK!E(5$TIRiRTq zE`I^9wr{1}&7%6J;#E5QaAmZ?|LXI9nZN$hxA>*2Ut%NQ;bh^te>UgAY{tE_6YiZJ za_8&;w@>eJ`}7`nP9Jdh>>l^e9&oTY0ZP_KwPx zRKBEe1+!|-c{Ss-IOWmeko&WT+&z=|ue+xYxO4W9yJru%f4d3n$VRT2Z&2V@*-Xp{-{23Ii#xk%*l)y%* ztZi!-O68|*S7UjnrJb6}SBkE_x6LB3pn#5f!+YiwoG}kOfY!6BW1vV6q!TU zw!#q~2hj3Gx5s=s#C2o?ujn_|`uTKeD1;v+9{uJOT9(*PTO+M6;e|GAW;6DNR~cur z$l%Whn$xGbp5r;56wl6-B*dSua^u3l^2!&#NW# zY7wqEvueh9Ip?&TF{|b*s)Ed8SserZNbU@~AH#;?#+1oveuCF=2p! z(K>1KVS`XED_(Mc7Q6^lS0y!HJX|qiJ>bn^%0k)JYiEabZVDG8~d*|9|%Wtl5?v%k#s2fKPim^F4QtDI+5?BZtb& z%FG(Ns;k+}Ce@@!N+wE=GLz{|devvqC(v_?W)w{(Gnv|`5?Mtyn_bmaS(Q`FapOkZ z@l1R40noz&9B|+J4EM&3A*=7-&Cl@-2No6<;FuP$kfVwLCd=duld1+|)`s>Xb@$&* zF!?+-&Qx^c%x*Q-fDw8IeJi_^SrH>{GddB7|e1>Ha}&% zTyi*?ur;1g6a%s>BTZ5=rKlD&>c(JHf~{AmG(iEJtNI$#5jku~Jq+x|lIB zhCA10WNGT!MlJ1+adq7~ zdmGX5rXWc)rZJTB71=Ns)9ZbI4zXKRRXlzA2%{}&kam)_yS zouBboeTS9ZqEIWoJN$rG_A`b>!Ke2huw0cWCHYh}C39+;M6tay;o$l{izjDfN>St) zi`j~LSy9awyngq9TU!O&sp8>L#`I)Ld3r>>JjT>Bnr2C3DjHMCc$#1pA&5yPf#Z51 zcyZIwUQW?2X&GAuQ<=(54xeXM*VB&2Rx;YV>K7m#a% zU7Vhen2H4%TiGzS!gGIVS?wxvaAnmmVirhQZIy9xS?!r`#wjSgG9htF3cq7a#v?Ho z(#AB-6m*~x`-u4PHB&VH7Lq~IG9M5um*L8Zmzj^jV6jTRKR=(bG5S{e@-lew@drLU z4+&0D(U#uJ%Bqh?uC08?pWXT)zkls5ezgB4KRS4uObs|&t$4JU@@Rg_)8&-Ya?V*f zV^+;O+{rY znGdU%tePdOx|BJvX2r5z$Xr;pU{)`LmwJh{hE%2GNx@bz(b!a0y>&M~wvzfLEdDoc?!}+EELX@+sTbnBmG8n}LTPJhhrg1iA$Pss zaQD%5^XU#{CZ-f~7S}m30-rLM)wJ_HAtt|j*Ox!*>X4X{Pf1GZ;tnM|mWwZ`US6ih z4_-;<6whJCtMAv({rK4MfGZ&>yk@xy&9E$zqq1ZWZ~;!UyA*>RA}U6uKYA8 zXEHoR%c66oNR=Gl;k!;T?NG1DJe$uk&!?eZuX^i_z8@B3<;!;r-^%$-9==}HZl=@6 zAD8PFWdd6AHX$Q(yZ7ZRZ(lyW%>2R(4@q6f>*qmSk|eE38=HSG@18#n4=Ke$r~e(> zw(P8@Cw!gqoT!AYe49}^W|)l`XQOo;!Z#jYT%IrS5-;()fmRWG>tyU2ChIklqC~L1 z!Lo9`QM7B=VleIMtcKckkYxw)ig~>dGdjyT%ceo8gsptUcX#fxYAPNqkJ%|kC}7o8 zecm=AG_QVw*f%v@lhMj`_$;!0H*qF9wDM<>go@6B8=yCB1?U?WKfsn4UAHV+ndUnv zaktKQ4txhb^=AM_15zuIbYKuuEVUc_bzgTIAnW5Hnjj!dl=}Btxt$8_DnTJ5VLUHU z=h~&m7Xu&0f((e(nn;}VeP>H#rQFI^8HCG3h9#^(_J&D(XI&aop&Ysw!j8>Q=_aw z#WT}R0<8%hL|O`gixzge1)rioJs`<=f^%tWVh zHgM7&-1y>Qt>ym1hkW$t3A5cB)MZ6;a)L?=bTJh9W_fG=YOO39gDqFor%%y?5y@mH z$j7=ff}cD>ogTA4JU{_ey#fU~Nl4OEb_2^n&8Rd(jdsxa5H&mI?#@21Uc1HCc$=-! zh|HNG^zB5ErC1BKX+&Y(nE=@gsUZV&q8V@$cLtCi?E}^EqL|+cn4NcmIW8olb-eB>Ue?|Ci7U zuHCR#!&UwDA>l3#eev5DkFPquXN9k)RHtVsHG%<-SC)@X4IiBtw6bg!ij|RtIm0|B zNm4Sc7$luefZ0nQ|DcLxV~2`U+)^BwZZT}HQl#QxjA$6J52 z&ChN(+-|9`}z%T{NOdJPoAQd6n7j5G3M2S0l%FWoE%rI9?z-gk7>#?ntJAxO~F!>Me+!5(J4{_$9033rE-fzy_+oV zRVd}gIZ9z%z8I%i+jP8+zx<-ueqD7Llp9<531{5yysOcY_wpTu{)JEZv!EL;lsKU& z3%mV1fVR$LG}33hsH_@yeyUH4f8Q>YYvmW_0sLG*tN;!*Mu^W_#7ea{Z5yT9v7ubC zFxFB#3uRph-56d9+ABZ2n=fa|^Y4|3(l2(!rsb1%4k9RDS{iX#b+qG>6+I`Z(fjZM>)X_3mf?S;yhPC&7mjD&j{}wkFp|qQW^orpAx#&JNKfmhcSTCqoJqH@qs`cfsaNtW@ zs$~2t<-wA;Im}!u5-t5Q2;&PJ&sxb*cmA8R%E~lFE1mUv)%eXelJJnnR`ODQb)j2D zuup$zTO`%e7B>j}FJb~37mIev*Vz0st^`Y5Qa=4$W}M$5<+waP8{$wgFFxMj{`_&o z@Vxr(DMmLf5|{Vk|0g;n(J4hzus=9pl1&&S19WS}p?iPx(dYQ0`z2oDC4N^CDT3X3 zew{6W3T;987Rv?&v2~qb=}5bqx?M@>70A|gq84?@SvliuHK(B9=6Ih!xc(M@dgC2R zQ}f%?&jMFhKE+A0hl%cP>RgJ>IP$ z40e5&w9lXNoqw;W*#Kij`71ktyRmtizH<>K6|N?S7-0Y*mv!cGWPo!yLJ11#cwSyS zg49A;jW4^&yt!ZPZxpN935}_-SxPb((G&y9K|x|cn+8=^=QPFASyb}4mU9M6Wek;@ zc#!fDQF{I)f90sHVQyWLFlI|KE)WYYgdP#-LhpZF@@;!GqlGobU{9fS-)^JA@Na z2&ZX6n#k_pG!17sei^XVQq?v0pC0q+*@9Iu#xyct1lsM$&d_-*|1K}4TwxY7Y`H>@ zwn#>kAR}Wjt0m^?BeJt8H@5F!jA6Dq1EtVuN|NSi<;IiCblUf^-^e}g)y3`?p-cB-T=t$T`nd{T6rFDxHl<5?XrVuO5iD?ATHZY} z{QZ-LL|JZ*6iE`9j7~F@J7UEnQ;JCjdpYbCmiy)o(mcA)zy9-I@#NEoj0ZWB$q-{2PG>7-+hY#?Pyd3a*<0NEcNtWc z{ZY*;TPNIX-sNDDGbo0<_x^`0mdiHId66TdvWVKH&bm4wjII3GXT20E{LZ8P zBDSdQbJm46o7MGs5R|{0;<*ZBbQRPQLP>bPD*E4&>eZXi4&gv(1lr1t|7zTEJgC+T zuk+9;_sUIhi_)iCS|z`{;;dU%`@D-1Nfaxo_6xz?I9<#9N@M)_mf<)Kt>m4Q4|#tT zsaOCvwvYQmjWtxZqH#N;{aKTuKycR1+&qA?-LmD=v{qLAe89Q+Ey{`YvKnA7Gyxr# zD8u1!oB!k6|1tmZ-9O;>58q)g-{te!3BP&rDW6Oq@@R3yqF%Z=l}M@E-m;6=wu)a_ zJmbwiOFCWrZca!ZBd)BJP=zzm+P?4#VmJ2{&xJW&z$<;Eq!?={O~tHQaI`pMx>`~< zHF=tFeYDH(9lp-bufN8ssd)e7(IsWoD=62?s%_O=KHr*7S@p^LjovqN(_wKn7 zb!j z>LMXwqQ?~EBvwo9W@W#)m%XS(H`58Z=vA-+U#2`~eK`rlmvTq-rAdm?ipq$6fK72q zy((5#e7&lpdQ}!YNWI!vZ&Ev66d@Zhz@o7vSXUY{5)zkEgQ5cOPq}9 zFWEyRcMiiBpdUiYmnI=?x$y4K8%H0WPW(@Q}7Wjf>9@Q|H+hfy{r)v22g z?|dYkg!P>-yT94!b9%)X&-+{*U01E{(tt7unvhL!Uk=QZX&f8sce zbt^x8x5KUIZIH96BsZOZw;Mpx6Rj?5R}BXQS*~;Ay6!U2ZRO_%J%S)7xzLRn_gfAeb!N!z78{%}cR#xR}QZ5fG*NIKhsM=ubnx-zP6*O4}!!ahy zunJVupz8)@qLFOd+)6$xrxf;ag*Zit+F+@zZHJYK1n&6%Cc?GF4tD#OXgF?b;+&6117^^ zdoD1zNG^b{*Wx-+IR$Z=XtMOn+YxSzVLF>}@A!=S^O9Pnn7YB%vUo~m8M-LYxwG}z zt{4tzW~VgM6I7a$j3($}5PVpJSuNoBDaCBT?)Z>pIcK^$fkcy}nNu>j4_7NxlA=dD z=zK&neZp(I*LeN#Hd&I&w{PWq_*GR?HH|3Eb-1;XbC?HN#vsecl7z;13n80PRTU4P zJmBo<8O^-G7>iCc`9RKU^w^XObzSk~>0>72E%px%$%}&J>6EiaPsKw|W?dTY*CxW3 z;hZq%ICpTqBm`^k*BsWJ`oAwi*YC50d_HWBA!ttRIet1V`#FkPahG4Qd#oJxzt{Y5 zMJ4dYuCkb1boH<$5a%OTA#NA<%a0B5^pI`aWRXn!RV(Kx`IcYW_Ee|=*H%i|g5^ApFsrK}q6-FwK}-+PUp z|M5Ev2k_(*&Bwo~sg6FRSvWh-uS ze-X6#Ls(SpV_4_@e0U`kQHh8Z9?y$7)d7BDS8n4L-C~80wm;~~Yd0@Y(bUPnXBcs~M$P(HOTY*UFAwxkU-=clcT>>MY?z;_Jhw!ArEgoNVHAI#D7| zqHjQ+Bo#s0?soBuH9fJOS2kif&zq30nuJA1dNY{P@)Nyv+~tonF` zZ{-wfe(pxfd*COAl!KslQf{~DdYK2@H?#>}qBfd)kvbwE$aOQszo=mS+>PhmU;R8w zlqPd?Zbn&5$Kr(l-;L9U_Izf9Ghr2wl9D-vt;8=ojALcFho`-ss^Ajyk&$EExyIcz zc^|PAJ3&9+#E*RA-d*JH{Y#uVGS-T})fgJhP!*zlb+LNiF>fM+P@>l%Zta|?ONY3r zjs#-3uL+GN)u|}WtlQ1%cFHQZ8`mFu(AKYUy^8eDeYnQ`k4wCA)(D8?DGO};-eS+6 zbvZ4YnS6^ZexkW>cT9($%Z)D|b4Xz{2eF}U71!_$36J4#7xH~18x z>WB32;_@qRLYcTKHu?7DWwRo<+eSSvJT0Hz7`~+Yl47xFm9SN8G0Mga(=nrLM5eQ~ z1zBsj;MGNV&S2kQ{KHGpOT5JIA|gfb7_6&s-D*5viK}QZ5Gq_>QHDlA8VKLvHlU;% zAuBKq22lo|lv9qECrno}5(U==6TY{5hu_*Fn+J zU|6JcAuA7qJf+b&9}0;xRw#SrbKFTWc(Wv%2>R8*VGyfTg0@}xdI5Qv_{(?yWCf?l z(&9{%bxc67MGRh6kzBr5U5|*{j0*K>qT`h*jQR)8OFY(tOheH(oxq?R#b}_ zOIu>o3_YAsjmDTH1#3ym5@puSM0>i4Q;rdRp(uGaSSo8N-TA=^ITJ-#dr>lY@o21N zX&WA!75D6tPj$_5SYX^ash24Ze^+3wrK(Eoa3VW`pH&guoUaJhML{we$l1V7X>P5> z)-`sy#GX8*n4Yj}8gAXV&3HUhPUFPMK>FNZXW~9#a zxg^|CPg3+y6v29a%$>Qkr5^pnLM~=S1Dq%;r-@qX|1(JB-I$oIZNO zqkH#*-wg_M=Ny&8-pdVG^WuwH-~BnUUJLh>iV@Cnz7*YX&r9X%*c5{$(zIUSr*-cu zX8p7EF6-`5=yMdgQfIBXcj5}?a>jll((z-*!A8#=Y;tq(X^y=F4&&cnHNKu$&%-x` z8`Zfxqo2Ol3*pma-R|IzP7NQN7!oYoxicB9gUM*$C-c>|a?c<;f)|bS@ly?{whR(Q zktno_!#K0ijj@zX!?IdY)-{c>BsyV~DGo=P*LO0uGSG<0=v4zxSC;or8XnGTmbGD= zC0Gl!wQ^j@rlc#yBu}_AN%{7UD1w#MSgWP?Z!M;$IIsla2HDE9zuK`CVrDUEcl)?W zQ=OyJF-fsUy7daht=Bnx<0gOd4*crh{0)Ecul|bBAg9Q4EQ+Vcr;PvE4;cODf5N~0 zFypgdS}JFBN-N0ig8lj5F-l4r)9~>p_gSqA$5wC1B*Wrf6{@a5d)Z=`5w`Pm@h zu3H$3`#zRm=;zxaDL39UY20o*8MTWj{la#qgo$M9eaG?$atUeiA+B0hQ=M{cIAN!l z@ap6y|K+#-DL=jT4tGa4sT<2Dr;m95=u_^`9&@@nr7|mb=C)Jz8m9zyF$VL_?P&K( z5SdB}+p?}CU2Uo(VF+bk{zaxCZ9(cj2Ru&}Q3$V^l4&*LWOd5fYR0Nrl4;GsaKc-= zxA@N9E#^(h=ZjPJ^D!t`nyTB6Rw8YUCRG{QTcFz@XP?)y=TqkJLTL?oxgNql*`7cD zHte+Rf8Q|$@fj{(?|T)eQX1>#>ZGJd8oCsa-S$e_PnlUXYy5}5T^^Lz9su3AIA@s}%-@bgwGsuSb<6TUac>&u}+ zk&|Qn=8rb4Kj&O_)Q;7V3^@iWY}IhzP8-61P5m-N8>8?f^jcZww5yCEf+eI%NnU4MK;lw<*X>yoq9E-I&t%~IE#sXp4CHAY1fp%0m8d1)R9zp zIzBG{rL`uXW1)L#wDqc=XN|v+)^q!}d-?QB7+kyFxVrqyFahn$qH&ks1-uzC?_InDu z2`8%=16^=uw8tM@dy_x8{vB4P=H0W;JCuO9X>@8bnLzLj>n8XH$pRHMr8}E7b*p!@ z?=&C-Ab*}uJRnL`g3{3{VvDT8cjl*j*HzBMk_OawTKc^BPJtJwbVa0du{j0n@N^`9 z+$zd=*YO4z-???WkK+bj;WQ_{+HFlpg|j$1w{~)O13&9lJfCL*+E?cNOS(7y_WrJd zxPb_?bjK7-+^Bc`Z@z_+AJoz+xBGOif|w&;S`!jyYQ@v=^gle6ujK6%U#P@3Z7I zPhdDiC8^T@_I>~E!dOdLt+2xhYP{UFnpz&UMx|NUk*bvJ1|AGisVL5^HQ1`A zJ~^U!^f`mGBMyf{Zd|)TF&M}|-Hmj7J?JOR;&vcOG{s;*wOTMcJHd`7kYr-kI`S7D zEw*VWR&%y#xP5q?qHyOKZ)#v*!?zo0e*jg%f_x8y0EJWwd5KapBu%@7_}acOvlU(f590I{l|O-Wa}j5cd++v59KH zCO0;?_kUl8XYv0me*dAsLfdPfjc5WyAGRN|9b72c;Ni39oD=eE%TfpwL*On64C6 zWHMT5G3nTj8{8PHe`_T>fECg|X(w*2r9okIj?KoX@eQ&YuX63R+x+o6usk{C(PwA8 z|KUCAx@I^SFk4g{{^)gf-})B6`YV{7!P2PpdKjF@&-4O3D?IN%g4v8<_lJSg|^MCX`0RH+{EB@!d zdBW_$FIb-4qgp<}HY;Z;HuMQpdvvXP;FtYOdn7ZlhL%H~B45gL6i}og?orSDTWi`wRxJh|m zR&i~UTm0;mSnbs+C`4H$JOo}eZXDmzx_At~39Ur?O4w*ea18Gv^Av$sQ6$9qCA3@R z&8D&%D{Z3j_hn_(QAVM-G2G$*@b*9BKfe2i{N(Tl?BzQ=m>%()Cm-?N@jV{Q9x|<_ zl+Cg|_t)CW?X>l~ejWYjTw^~J)JXqTDIEKf=hQVQrTcK!MH9zO5HXE={oq$0Og3EO(YPz_|)vo-Dv z@-Rymr_Ps9k@LEA1&R#a&SuFaJot2kCy_*^ax$Hh>J;P7L0_6uOxU+&7nExkEx3Bs z*R7$pk~z%vlJ4Wvc;#s{AE?Aq!d2nZ64$H3Q>dgB|_c0|H|KfvpEy}ew{hr+E8L(Hp!8~nL}}U%$-q~38&xh>p1tWF3-w~`7D$yi^0m)zhT8Sy><$~t; z3EA|N?WW{lG+}pZhtX(^)}oyAgO~OhVJRqCojK+-lTzF?OwUeeP$a`qTj#B%!dlYR zoKaJ9`|vt>mT&O%>`=&TP~sNx1U_F3PESwy^s~?S^}FwJS{Y0}k{8j(tBZ`JC^qkk zwpMoho*rRVOVY!e=&W#cuR~K~Pmd|43q}Cd)PDs^RqU3e%Vi%|thK!|d^t`SFZ$wjv$oJpSx+9^L!2^%+a9 zeeTOMLibH9pEZ{?T=Z@eHrKf4y9WeC<>h{_=I4Bb&|i$sdEvv(TluyAY@;7>yV`Y^ zckOfJ?ji1xAMYM{vUHWe?c+I0<}UpnZ}D?P$j2SGqcK1J_eJQx-xTi`$Hmkxe*5C_ zRmT@2^zcHjtlK+#vFMwOK6WOf4X{&)`D1S~I!R=5Nh?dDAk%WE-ek0eCo7oOuxen{ z$PVB5ZmeaJ8Z>SPnlV^YlPSa2AY+&+whGPRNK8gI)^fbCoRyZ7%5t=VhqH!R*|3!- zWXWd9q*_cxPjbyD)$A4tx5o*)xmclDHDWT_D(m_Rp$%^DXa`g~2C;4=V~sQYsUXQw z=?FbMAlrYP@$FYQ{61`NC+w!0zxnImaC|bQX&Q!u0Xx6{Cc_`T#z4c}8*uB6V%Y$> zVvx?*KmBXQY6ZZ9hfgTWiY8H(YvCr0#6sQIuk9|z`dCQvyh|bG z!N(l94p&h626}?NG&ajg{8_B1pj>%tcWg!F)c2b$vdAHx3ov-Iq+#qEkAVf7aT240~a8cg$WfEeO_`~IWD5oe7C8>Mijv9(hK!>urK1*V;e0%3M ze|qct{Pgf`3O!`HT=HOc#Qn1eJe)n|WOd5Co>MpO8#1-fa;v@6S_*xdqd6hf{^{hy zCdq`<#O2D3e%+r~P9ZfxCNZ`6U#CwGPEqWoBW0*G4P{fYtV`zgl0s)(FLu~1ws`OC zA-_ENl!3~GBd_SU=gGJG*S4D$;yI!YN4=EC(gF1a6RI7on{P=?L%6hwz!IltD6VWv5UrFY9?5q#3FBJF>k93QbOib;`B=440Br6A;) zQ1j0zDTzwO0;1bxT3gw7U0Yc;6QnF*Lmd;Jaow$pHl^Ler$-|TSj18K8Df6=qR?F^ zpJq?TnWOHuSp9s7OHTOfueN4&i-d6W*CiR``Jzlf{a_uFc=odGMAP zHI+MCI=l(|Uxtf(2^DGW{X&4?F8T9C;VFfD6C^5OtJr3gjn+*-zkqnZG<*TpzCh5g z8Na)nzr;&?U1$}-w@zXEuQzeXXvHZ>{d%_W5lR>tsvzy6LX2+g>u4bSpcLWRrt!5;<{b+Tm8 z7ozdhOuN%JbV|stYSrZ7rv7c(iBn! zV#=(ao;KA^`Mlb&>bFZP&WS)fJPCZ>_>N|*P!<2(JoHrhVLd{e7bBD?Pa$+fZB&}N z{>4w2ln5(jh3B|q7Z4=ixr=2KBp9dDMy7s}+Q4eXe0c&%LNc1rjK+}WD5c1j3v|=8 z%HVG7PPXlCgl@U8P8nPSr8QJ;!YXYSNeGRLO7~XFq$^Fk*sf=W_CGTA=p%iXM@CJpguLY_K zvzUTuNcRp=nJ7zJpLGStPblUqMor2fAF-?!Eb4{qGVa^)RG?HMX9N$%nB|-|t{w39 zojXiMV-ly-?<1yCo1g^ln~ye5QT*P!zY#BLegFXf^hrcPRN|A5-sP<~zeCeB%oZoy zyfdH}`?Tr1PFTzue=wxvsz_Rt%)HR#Kh~m$y7!#c7OloSzv{N$B=yiV`?ZN{42LtfL$E40`-*2;N8kegF4GxVqn~ z`#cX{oI=2hr1h+b`&IGvRUtMRtve>869#!kl4RjX1gYBa#+a;ym4PQq%d%0_Rusei zTPxVfMS+Yp)O9JAWUL`cQUX=1$69u1QfejRrS?ZmjETs^0B-y}^=FJic=MVWm+zLnQ-ru|u}~ zD%s&(%y$yre09PPu8sKZuRr18gQq-wdd9WAZSwEFLiW~8zWqwV?Kc&JJMgelWZR0J z(Tw8bf6KtEP$(WfKBB5?O5igR)Z`X>hi@?%zrxO)JM6x3lkHnu+@|FEbV^b->~4>F z=ZCNHfBwJxZ~5ML-@r~S&F2lXUo9x#f6D2jUy&>yF>GdNyP~lbrFDwnsMb*DEVA^Y z0pk|hdPT5xJ&Q1ASigLDPsu~IqZ=8moVR^i3+r48L`vPOm04t-G=_=FYTpF3YV*ST@=}uPAKiS1 zfAPxC7-u6MOpkf*>8E^r_Blt(V;0Svs#&&XppB_Re?7{>ID;hl;deKk&b{qWZh9-@ z8?6#|7O8S`VcwIMpHslLw7fqbcW@V)xbI9#ga6xli%^+{MZM%`H3bU;T`2@-mi{pL_ArbutbqiJsb2oD2C*-R^qr6oN`o zQ&Za5ShDO!@5bomv<_c>xG?_pH;LPgJWPiut1-r(-Rnzi{|c@lt*TRY;x8&_1@5a{xusLxV9;7|eYD3Q&6w9K{`KScIIR}o8phC+ zhCx_&kRg2f=kpq-h@+O83@}533^Gs`ZiVKHfWj++okM4pS-n@w&b4@yNshk73RtmZ%pu2-j05MVIJH6d}h=0X-DNo)l<~Wq3a2`pR09emk-C2|n z@+{=``W460r5|>K<2rphGLz&dQbbB!S#`U7o64$}TUSEJIFrPM}Fp?e{e1=E062B(FXh}IgNr(zPisi_`6p#J<*c=C{4 z1qa)^?Cl+pW#Q~#g{uqw#F#Gwt%6wIi#KTeu;o$|_E|&9Nv1BbTH)CfB)}z z@7=%Qhky2m?B02eY;r(4IbgD-84hOr@|PbnJzAhDy=Er*`12zke)y1jRRNIZDcgrT z96fl*<9qi(ikbZHaoA1zI`=oEBuQj48aa+Z&I7ho22Ly4X}bwpL6N{t23aD%J*+j< z^@^%m(U_Vv%^770hvSrQ?`K>aK!Rnqf>{lZOUrMMYd$Ly}?-J=~?8Nci{CKQ&#`(7bNpJs;PPM^n|LasM8Ur z+dt+f|LBkT&;N@*$d~W!sA052GPp-X*F%6$h zpKx#bh-I@BGtkY7#+?IfkwtTUK1LSjNjVaes{&=+yU0|tj1*nC)~id4>dVvnl{^V! zo_Jo!%?Gr!Vg;}-rS7(F+p;hD@mv@Zz3!A!70RoXGl7>)$?jmx?a>~uj1PGCCZ5b8q1n}Aj}p}|m^l9er;Qc~g-srfj& z=yK-We9Gu>xA}K~a=RCET`&)LI}z0!{tB}6*XCY?=d}Aqx!sq(j#90X zQ~r7h#~WRgUue)-fFs9x#WBfq_~rfOo2>Gqo!-Zqtji(%V^4t~Bu(6mR< z1R0!n%U`EVc0|?}*mSYkbsft01KhC~{l(nYT9%ZYy#N!?G5oxx^1HL!y7_sj`xg7l zRRrTqw>Q0A@;;ZI7rrFQcQ3RvopCU{#@1JD0{ZL3dhx&f{^CKuV)VKA`Z;=um-xC7 zDT24!O4V1a@@e?Ls_nGIpUkG;;YmzR$n6I^t_!7tZ|fSpw&SBTxlYJ+MoGh8KKc#E z)vSFlmq)xJD}2uVMlGc5{4Sgi(Ktn?c7uy{5a8(OwgVk=aXGqNI!>bVm}Q;jIkP)0 zB0k)XPMrMwFgV6l_@d1%w;Io#R}pv1C4c11T3I>myO!&c2HFXS;Nss3_rYHmu|)e9 zQ9cr{qKi7wzC-H$;wBlc3hB_Sml01pTrnq}Tj@+m%H`_H$3|QURUfvG5L=fI{}$ZF z`ntiEB~>|-4pKg#$p_dpMO)BSg))918i)4Jt{k@KWOqBw@?D6Du^KTIUAf^~(hg|9 z9w=7^axG@jYuivNh0#*i{6m4YmQ~ZhXd6A6U`+!)OE*l+bYLx519c6iLFI+ys%cQ# zV&+rK$zzg}BSxlXlB8(UFdB}SY{~9jV;Y*KCP@;qRBlnkxbiHFI96QQjCj&oktQik zRkE6%QZ+SJYcXlu`jYfC(^Hbwg4b_cXYc|Q!Sac@#YT-`F<)?cddlhPDOziekB@oy z@F5@y;Z3HKW0Ymd)2C1Q#V>xrM<0E}>2yw0Owf~E^k5RsadzK`E<_QmQ-4OXYXdD} zl6yV{YtY4jWH1(GeH5Q+8knAnBDjVuEtpqRX4O=p>X!kp2p;aBhFe(EaCU8+RvZMqUiCC>}q3#FM9wn4M0^M?((p-bN=G+RRClCBtjiQMO=l zQnP)y&3rlK@uP<x8}Fm&az;^WEb&=ll6$Xz5-lf~%ym>mJkh z&;1thg(-m}_n1!mzUQ#^Zi63>^>(}$W^*uye#n6S@5``>=ksvc`+pzcdnjLKPvwiq z`8<=+wr4UrNm9~8&X>oEf}luXly1JqncQi-Mo1wg**eq2)?!VAH8rU+Op26Yny{5? zu8qXpGr-Z(aJI6XR+gg@9!wj~Rt?)lLZ&zGXiK$XkZLBmVw5U&ii8`Zl!F2atyolw z+Q@h16+3>Mr3vF2fpYC-A_`%hq0`Kl<&jr7b~W}{)GDTk4a8HVle-Vv6(WV zVv;Bhvx3(L6TUy*B~b}a>nfB0?EzMKcwO?8Hql7Jtt_-8s4 z!WEBtbkE9H9QG>kv|9TVlypAR^X$|m@H7Ui$dmOKmc?3;kT zsH_SfQtCW*@)7^R&F}NG!*8>nkGX&Li2KvW9Is9&n-z8Ab^+UX!I_tlb|pVnK05$icPyP zrCYapY9Z(1cQO1gNu5TMw>yIC&e!hi!cg0FDfyiA)Wogp9!tVgNZeV@qAU;daPe}5 zJ~m5K=*9KZdCziIbwZ+KudsEsbZy1-cX!K({8df?oRYaRCsr7|5?J-pyP3yzg!DP? zd>!Gcl2FPnf`mz29q(z1T7A8?yNsHLa_x?mhX2539L&fO`2 zr70B}wP_fo1!sJ*Ua^|anR*FI;B+gXUl!itr*~RMWqu+HH3#A1{Td2VZ zTdri6FQAg-@^o4YbqP%c*+9ZpD|A!B*%9jaDI-&}H{N1*YlpgAk>xpgF$5($Urke! zC`Fzn6nW-~Q}|BeNtgJ)JZp+#fL$%A&Q4e^=GY`f7eiSE>-=h=sT(wbyALFM`SLI$r0 zUeye0O`aAk${Dlr%$4=7cW`a>Xa_ai#sarTLtYtA*coqMst6`uzxQP z-8yIEb6gJFrvR%hHUX=_j16XDu$jT;7DkHfaLjlAEpZuI^Y~^EI7|LadbzAa6 z&D#Cdb>EEh{X83;i*RZ9OFgjWX;YBCTl@PsltaJGi8-D~xGKbjBc6>lQO z)3b`{s$pl4U{F+-n2a7~n(L#KH+K@Q4K;;Ul(j}Fi&B=xnT(dPWiSodQ5EqLeN1R+sxIKoqUO(imZ{6b8fBzAylPO74Gko(Fi}8^8Am_}&sfDFZc%FRP&_D6rw#iDL-uau42B8j zW0?Q4;_R0vEI)gf)zjZloxDf0e2T5-B-HGsIj;{z3H<%>E|s->UanXfF-7c04Q0=) zF0S6$RFY*})BT!6Izf#iF8+-VEiMvc7_a#F;ucf6abbV#<8#8(xhiDj(;Y*3zAhT` zbVpbH$?K4|Kqro8eUdniFXn|PJwB`~d=?YDsS?GpRiIVkj@OYLexa+e@k7{%zBGLr zaB~s;{9Q*#bF2uKvnS&+bTz~>Ox;|7H|vU<12Akh0Zl7APbElJ+`C*{A8hl#fAi1y z*47Q?)so*n`IIM%V^+l-*f6IiNZP|L&l?qhQ^&=tdtx}C+x&Bz8X|i?|T^s zsf3btK71O*5`vH0n_`b~8710O%atl;P0-cZ#?3j4rNxpNOR-3C#ktEEKAtqPs6o`y zi=S?}`eFzRN4{)DaQ~b1?pKY&!$x@~=IX@+^#0(0Nj9PQT{8jwbs~ILSHGV#=$DUv zj9+c+FYyvz2O>rAjw|fGp~iKhm2_a0C>(re*D56|x0H1g0PaI+&(sl*3b*31?Wl*Y zjF|KBRkFWBrM{IjMd-TfWn38hBl;jb7jmmE$1-@EvfhYo4XvvfVhUpHRsObdyx_)1AI<&tW4icvsb zV8&b6EJIm~u1b_M?d+u)#~7aEEAqR|RrfX4Ejkd>X(8PT|B1)a`|6M=O@?M(uVm-4 zj+DXu?Eg9#d`?(55mF^7YB)iq8P(Iz#5{D8hckcAgR6^8xxkbQR92ws5;Z>~o1HK+ zH9Lb52Yc7p-Q8z0-l7-|!NO`er)e6pBq2*Ri`g-0q8N<^B{58J9DvxdD?Q=}<*QFQ3M2xu*eX`!un^ym>MC#NjtbKd{p zeeT`6$LF7a&dJFM^ZA^zEGf&9*=)v>Cr|k3qmTI2uYSdEfBUZNluk2}e1P3Kgkpq> z&)-!zGu#^#!M^QiYMSFGs4OQLZ=sVkYA+p`x<;QKFxCK}a^PF3Qg1xO>vMVTpx#Fkd>xkFixy8@_*$?>1pZ&RJ z8f?~Wvs9us%lve@R<*>q=$%Ku-Du&Q&w2ZW zac;a;3`Ov_GStwo7Ds}+w{Ft0@^oa*S@Qz_(N4NbG6td=y5n2a7~Dc44tH}^6Qhl*T@ z$>@0vPb&EBal`vZCCBrcTi#^!MIu+SOZetE<(>VMyA#b&YmOG0RU=lI;{JoTOq4i9 zTeqfH?stJsMl{(jkM6*D0B?^9e)Q9~IeK!+fB)b9JC5Fc#I@}a-+Jc`A2qPBu$wCW z`ObiUymx~iUw;i$&QX!`Aj_GS&={u#-hyNcQeznY^(j0k84NV9e}BaGUIwR%*}sAL zuOGAc^nJ=F?@`Yl(yY#~%@RxPmQi*~{WBH{L<3Qt{n{GO83pkCqXa-)@epM&5kVK0L4;zwBPIq5HnS2T!VONf-zEu8SRywvF;i4b!PpKkx9#qYbNM0oWwuvlO6TWNY) zaT$?TDNbiso}q;IFX1{tQ#cdQiAup*8fq$A_7uQE-{)CMB1(C3CwHkgL{%wq`<=zg zFD_6?r!IO{XxzdL6iQ!B5iIF+3vB!xty{FUUi)1Pjh1@V@05?*+@1+&QKmj0eC`Y= zC>W5D_7-5Q=j|6oC=p+-BG`Z1Dk{Sv6&HmL@a5mE< z&$I8^NcX@GL|h7^-NK$jAGd$r1W^Ke`2@-JI|4#CnA}lHl)%!7@+s+u5_lej?=ZQN z^h}ee_H3keb5FLN90+m?d1!k>mhgWao}1v`=U@MlQYZKM@J)K)Aod+%@&39{?eI>d z;5%qB4WH)z{}{q=E8(`I97=<~JZ<556P>_K;3CM}=dzc5kR6Scor7gXQ?D@EkZkQ@ z^PEOQwvye!n@U&rSGcra4B{B~--I8^)Yej2F&XVCsVgXFUM$>1jM8K%YGYW~8tZn; zuJQ6!vi1dGjiEM%N+pnqS!a9n0BsC9%Tf72W_-^}lv1cH#Vn>UJEpLf-8|=TdyC!S zke$gkTU*<7a=QBp55qX|DQ_(3}`%>ix zT8u9`jp3yAM^R=pL75IeLns4Q$GFlQyx8f#B#Z0 zduNX{O=(m@GdYkvisM#Nugi|$T$IF0UMK)#u&X8Y@gr0|Al=?|X9e~6uPfBiBL*dm zR6&;H%*!d$@{D#4qXVx9-bRl^hWm-)dY*A@d!Ibb`T+nqIX&j+OpBTZ9?@h=AP3#_r=>=~QyPx-b9-h_zc?e-Ir*gTEtNFPKUKE{8i2E#?Tc6)8 zR0ihGWc12dPF9wWrL&*8g?!)8J%cF zktim)Vw{P|=)*z6wV`61z`WAbjeLcz(!}*YU5_;Ms4Y%OG{WjF%2AFQX!4zeS9d4e z|KK6N{>8_feEyWJ*KV-;{crI|Ywo6s-_I1^&Na8{f}OHpJ}Ws+Q;xITnXCqtL3#+c zCh%%)u<;>Pp&Ln1cj1`9urCXl-+pe%hQvI*OUp{OYvjnOEzU;_zh-KZcr+PlZ z7%Rjjv;=-~y+6+C(vZ+W)f?!Av)+?q$suRul26Z`@N{`XWh;!5b6btEAt&8V;Fgx(-AlaF zSEIf1h(we}&I(+s9B${eqVQ3P@j2urBw?cYu=Wm8#8q`Ztc3U9i?{}A@)vxUHU7eE z(Edj`t(<3LooRBNu$7G{^pH_9;^Fd`rKzGEi6z}doC2TI+9?g4)LM5U$;6OU$ox^7 z%FbF%f>pAZr?NG*^|NJO4ssi(^lMu4x{x~MPWO&w>3J2|`I6Sk(eWKGp7-*Ucxq8l zy31nGN|Wnc&MP)6$AOfEIOe__eT+U|H^YA)U7xZiIxKkY<$OfD3n`nWpu>r?aZQkrkdbvvKua8+BRPId z4F6ghCE=xRx@fL7`kq?uyAU_upKx_Z+n*3lJf}Xily6O0sC+GABG~>*IHhQ?-x>t>qVh`Dfi!Gq7t@>EymfH zQ95Sy(ggH3A6LkhD|q=5@%6_35-;&Z&?-I2J?zg2RcvBsIjah(*2$H^}m97=N)E_^s={v-@G zJf~g%32xA*y%JbbDl0CXSpC(?-tpB+AtBXH0qimLnX2s)hy0XvlDhx&5hk%ZXMoW zdwY+`WShZYMB>h_RTlERpePCk!y$trqsTG_MaIs~HjBlAlj9@ClQDxq!C+93Wnwx> z2uOZ!sG>nBk|bd?8l#(vW_rT%Ct@HX7nT7 z6d-cbi6$=!CRu*X*~cb51*_Yco)o#9iQF?;ZmSh$F~dwxNk(Imt)0zZOkH80JYrB; zMruHs1zx(s|*xJo` z?FWaPE*jqd?R`FZ_fyoeyYmEKwOsJwul|nHr%$_eNbmFQJV$(O5C_EW3T$dIg);-) zfA7AXWFot`b(S#Lov>_{Jbw6qCx3O1dKQkVI1er5EAA}ag!BEL|Hk8TAJ2ylUH79O zSKPMwr>{#199+8Yo#)Q^VX>dhO5iT-?(g%S&vScL|L5VV{{A5$^tI&rD)Cjw`?R!t zd}jFYL=?5-6e_DxI-$rivNUfeD;2#qPC??VE3OQjR+h6$b5_Aw4U5K7Ig9slD;ncX zMz63EOiqi((KdJfTq~c`Rus2LF7OKXQC;D8I(SuZT zFiiN?PQuNRW}Ipkl}zg;+RzxW8s*0_T1h)0ixXuRvuzB@7SN1=9hQ@f)q&z}0;?xe z&YsTr?B3_FyG?rIkmO*@k46bUO(9p1EkMmJ^Hs%JnlbeYq%`OOq&MI-ZTQx-rao=B zad*I-*GH(CV)3^%)BkbG@{^A#AALY|{0V0H6jM#HW(BqZyS^LPqtFT88csM!Q>-z3 zSk9T7cv)|EjAh%h4z#0ifq(0tU60BA_r82acnYc=VToIy9e+n5cA*pdA{s}^L1@7lg493xmV({|;jvvVp*%_Uug|mtmSzS=d zt#S2X#W#pQ`qto7SR5X{I?0pTHW+I-80_-O_%=6(hy2^4-*8gRTK@so#UpSMbP@}5 z75>W%UuZXs&qIx**>6V3v>aEEBq`P!DpOOMvQ<3wjEh)_k-NqNEI4B6$AtAb4uEVDzo^kYH;##IJ zD<4ip`Jzz_+*!l1Lb)48c=l$2UtjNQcR(H8NQ@-6e9l}e0uGLfNreECS zxmGVkd){1Y8^0*6#R9>3bFDAZ1hoH_C9d45f>o<5mCNtU4&i)l7fSsXftQ*35*5L5 zPKSOGZA#7y?Y}Wl&IEKqp5(0w=)p@9(7!tf71ZW?gH!+ha?y|NtBd(1UgC?ORRq6s zvL7mR*U+{dVWQ4&+j#hDIW#6-K`3uy`M+S5}#@*VNkfyd>Pg@U>~!8|-j* ze1q4B}t9=_AoO)X9VR$5v6Ce-5&h{(yWTJt+^ zWz}vtgV&$Gv5Wq95XRU4~wx7n^$$qczbx*NBFJo|oBXxruZ_ z)9mwpGb90_oOsueL*7O5(RX=b{~>=o0*^k&0w=Lwi8)r@hOUP1Km|VJw=d1gb-=)(=;beq8-mX+ydQ(%r@!|T{Ows;b1~1LS?SHa8+f-y!`_^Sll)MU2d)tk4-)09=YqREHYL{`CXN|@5JBbaJQuHcQk zud}ziPnza#2ZQ8KqGfQOrWt9Hkmo6*VZqjT$Y?lZFepf~l)+%Ycs!vhOX*Y>1xcbw zQ%#;FWVt&R%9y_HtAjzFu{9bpOcP91F`u2uq>r<9&@AWd4u|ZG1|&(^4)UG}n-swt zpb&FWd7iVkzt6$7YwYgrlVurcDg)Q1X)wlMt(Z36+dtsOjay8%w$Msrbi%UO!o+5w z5gxSG;f&zuOk{xi^oaW8Dam+?bh3jk2A$w7>I#mYFsKzHRgfkbv(*{X@&vna_mz}) zJ=#GJw?QeA>6C1K%Kn`p-}>H7-ucPvTz_qc_kaB^fAtrC!@=P-wzqcJ-P$G33qF4T z1AhHCe@AsvF?%v&akgNzGa|{lX;iD4!AB?DeeF7j@7(IV^T>*X8{azQ@U?wTXC?pg zU;bOBk8AGiUuSW=q;{sEeKMN5;`I0tO)X~!hv}2`V!oDi-$GrW7`CaU*{-nzIo_gm zkK$5^Y8AnzF)WVGNV0@1D>(j} *?7s^xb)43ey`SESTdGEgno|$GZz-8g%w#v4D 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%0A>>PJ;W^Rn^E8}lpZe0zuuJYJ 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®MRg#1#DcDIhMbPr=f;7F<+uP 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�J43@NXIp?U-NF>e#pFS=l!&1!c z)L2a-79&yEy(Zm_RaVwkOCGM@;9oi{WO+fFW)y{GG8!`4+r#Xo1ciTaNy-LUnPS<_ zEDv+dOUrHIK(jSAym4pBTlX{G+bXy}wqyl#0?YHO5H=x8BD$RwqA-5q{+0J{6k?kV z)XEZ*>6pR82Tbm5q0)LY-6h(*EHBwoCzOR6(FknHpLg z!S$;SJ`lbLSeF_^D~WT8e$~A4lu(ZD26&KUN{AXaeJC9O3kF)D%(&?gjhXlSE7dvSy6~{ z+PIWTPM|GIa1LiT)N}KHHQy9gmfvfoN=HPwQd3G52a8jjO4JqyRI^qMWtwp}CXT-H zlL(T6gX1l93rhOV(pJd|MSFM(=tseqQ&)@@wc%0l*VSJYS00@27emfAZec@?DVL7< zCaKzr=;|4;7~Z+7fJ8+S(e7w(ti?DdaGhGlE8gW1=}W94iK_6c+DjT$ix9+-E#(;} zN66l#ImQ;E%)2&wezUHxwl)qG>ip@Qo7F5*KY#wp`6K?Dv|R2}Ndes?4x1QbnB-GN z`G~2NL|yZ=Rc?Oqℜ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

eF(di!nAih8!-QUl638l0S% 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%0AkE2atv^juok-)dlcKL7{eOx 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

9w7zM}ZI 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

  • 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 Vb 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

  • P`jt9~{BP1~pT%59imnKR(=LP-ivaTO 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]r;!J8>f}Q;hPLkDDO` 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�!^-y*#N`XSWEf-TWqexcb&ab7;2#Y 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