mirror of
https://github.com/ocornut/imgui.git
synced 2024-12-19 01:28:47 +08:00
Amend 326dc95f9
This commit is contained in:
parent
3f3c62a3c9
commit
2671f68f7f
10
imgui.cpp
10
imgui.cpp
@ -2150,7 +2150,7 @@ void ImFormatStringToTempBufferV(const char** out_buf, const char** out_buf_end,
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef IMGUI_ENABLE_SSE4_2
|
||||
#ifndef IMGUI_ENABLE_SSE4_2_CRC
|
||||
// CRC32 needs a 1KB lookup table (not cache friendly)
|
||||
// Although the code to generate the table is simple and shorter than the table itself, using a const table allows us to easily:
|
||||
// - avoid an unnecessary branch/memory tap, - keep the ImHashXXX functions usable by static constructors, - make it thread-safe.
|
||||
@ -2184,7 +2184,7 @@ ImGuiID ImHashData(const void* data_p, size_t data_size, ImGuiID seed)
|
||||
ImU32 crc = ~seed;
|
||||
const unsigned char* data = (const unsigned char*)data_p;
|
||||
const unsigned char *data_end = (const unsigned char*)data_p + data_size;
|
||||
#ifndef IMGUI_ENABLE_SSE4_2
|
||||
#ifndef IMGUI_ENABLE_SSE4_2_CRC
|
||||
const ImU32* crc32_lut = GCrc32LookupTable;
|
||||
while (data < data_end)
|
||||
crc = (crc >> 8) ^ crc32_lut[(crc & 0xFF) ^ *data++];
|
||||
@ -2212,7 +2212,7 @@ ImGuiID ImHashStr(const char* data_p, size_t data_size, ImGuiID seed)
|
||||
seed = ~seed;
|
||||
ImU32 crc = seed;
|
||||
const unsigned char* data = (const unsigned char*)data_p;
|
||||
#ifndef IMGUI_ENABLE_SSE4_2
|
||||
#ifndef IMGUI_ENABLE_SSE4_2_CRC
|
||||
const ImU32* crc32_lut = GCrc32LookupTable;
|
||||
#endif
|
||||
if (data_size != 0)
|
||||
@ -2222,7 +2222,7 @@ ImGuiID ImHashStr(const char* data_p, size_t data_size, ImGuiID seed)
|
||||
unsigned char c = *data++;
|
||||
if (c == '#' && data_size >= 2 && data[0] == '#' && data[1] == '#')
|
||||
crc = seed;
|
||||
#ifndef IMGUI_ENABLE_SSE4_2
|
||||
#ifndef IMGUI_ENABLE_SSE4_2_CRC
|
||||
crc = (crc >> 8) ^ crc32_lut[(crc & 0xFF) ^ c];
|
||||
#else
|
||||
crc = _mm_crc32_u8(crc, c);
|
||||
@ -2235,7 +2235,7 @@ ImGuiID ImHashStr(const char* data_p, size_t data_size, ImGuiID seed)
|
||||
{
|
||||
if (c == '#' && data[0] == '#' && data[1] == '#')
|
||||
crc = seed;
|
||||
#ifndef IMGUI_ENABLE_SSE4_2
|
||||
#ifndef IMGUI_ENABLE_SSE4_2_CRC
|
||||
crc = (crc >> 8) ^ crc32_lut[(crc & 0xFF) ^ c];
|
||||
#else
|
||||
crc = _mm_crc32_u8(crc, c);
|
||||
|
@ -66,6 +66,10 @@ Index of this file:
|
||||
#include <nmmintrin.h>
|
||||
#endif
|
||||
#endif
|
||||
// Emscripten has partial SSE 4.2 support where _mm_crc32_u32 is not available. See https://emscripten.org/docs/porting/simd.html#id11 and #8213
|
||||
#if defined(IMGUI_ENABLE_SSE4_2) || !defined(__EMSCRIPTEN__)
|
||||
#define IMGUI_ENABLE_SSE4_2_CRC
|
||||
#endif
|
||||
|
||||
// Visual Studio warnings
|
||||
#ifdef _MSC_VER
|
||||
|
Loading…
Reference in New Issue
Block a user