From 4d10642b3d7c2d38bf074e775326620e1a5d16e5 Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Wed, 12 May 2021 07:33:36 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=A7=B9=20Add=20and=20use=20a=20DVL=5FALWA?= =?UTF-8?q?YS=5FINLINE=20macro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also moves attribute macros out of miniwin into a new header. --- Source/appfat.h | 2 +- Source/engine/render/dun_render.cpp | 11 ++++++----- Source/miniwin/miniwin.h | 13 ------------- Source/sha.cpp | 16 ++++++++-------- Source/utils/attributes.h | 27 +++++++++++++++++++++++++++ Source/utils/console.h | 2 +- Source/utils/sdl2_to_1_2_backports.h | 1 + 7 files changed, 44 insertions(+), 28 deletions(-) create mode 100644 Source/utils/attributes.h diff --git a/Source/appfat.h b/Source/appfat.h index 8deaf21d4..52ef8fee6 100644 --- a/Source/appfat.h +++ b/Source/appfat.h @@ -7,7 +7,7 @@ #include -#include "miniwin/miniwin.h" +#include "utils/attributes.h" namespace devilution { diff --git a/Source/engine/render/dun_render.cpp b/Source/engine/render/dun_render.cpp index 8bbf44590..cc4d9f663 100644 --- a/Source/engine/render/dun_render.cpp +++ b/Source/engine/render/dun_render.cpp @@ -11,6 +11,7 @@ #include "lighting.h" #include "options.h" +#include "utils/attributes.h" namespace devilution { @@ -476,7 +477,7 @@ inline int CountLeadingZeros(std::uint32_t mask) } template -void ForEachSetBit(std::uint32_t mask, const F &f) +DVL_ALWAYS_INLINE void ForEachSetBit(std::uint32_t mask, const F &f) { int i = 0; while (mask != 0) { @@ -500,7 +501,7 @@ enum class LightType { }; template -inline void RenderLineOpaque(std::uint8_t *dst, const std::uint8_t *src, std::uint_fast8_t n, const std::uint8_t *tbl) +DVL_ALWAYS_INLINE void RenderLineOpaque(std::uint8_t *dst, const std::uint8_t *src, std::uint_fast8_t n, const std::uint8_t *tbl) { if (Light == LightType::FullyDark) { memset(dst, 0, n); @@ -522,7 +523,7 @@ inline void RenderLineOpaque(std::uint8_t *dst, const std::uint8_t *src, std::ui } template -inline void RenderLineBlended(std::uint8_t *dst, const std::uint8_t *src, std::uint_fast8_t n, const std::uint8_t *tbl, std::uint32_t mask) +DVL_ALWAYS_INLINE void RenderLineBlended(std::uint8_t *dst, const std::uint8_t *src, std::uint_fast8_t n, const std::uint8_t *tbl, std::uint32_t mask) { #ifndef DEBUG_RENDER_COLOR if (Light == LightType::FullyDark) { @@ -558,7 +559,7 @@ inline void RenderLineBlended(std::uint8_t *dst, const std::uint8_t *src, std::u } template -inline void RenderLineStippled(std::uint8_t *dst, const std::uint8_t *src, std::uint_fast8_t n, const std::uint8_t *tbl, std::uint32_t mask) +DVL_ALWAYS_INLINE void RenderLineStippled(std::uint8_t *dst, const std::uint8_t *src, std::uint_fast8_t n, const std::uint8_t *tbl, std::uint32_t mask) { if (Light == LightType::FullyDark) { ForEachSetBit(mask, [=](int i) { dst[i] = 0; }); @@ -574,7 +575,7 @@ inline void RenderLineStippled(std::uint8_t *dst, const std::uint8_t *src, std:: } template -inline void RenderLine(std::uint8_t *dst, const std::uint8_t *src, std::uint_fast8_t n, const std::uint8_t *tbl, std::uint32_t mask) +DVL_ALWAYS_INLINE void RenderLine(std::uint8_t *dst, const std::uint8_t *src, std::uint_fast8_t n, const std::uint8_t *tbl, std::uint32_t mask) { if (Transparency == TransparencyType::Solid) { RenderLineOpaque(dst, src, n, tbl); diff --git a/Source/miniwin/miniwin.h b/Source/miniwin/miniwin.h index 28b892362..64ec7b338 100644 --- a/Source/miniwin/miniwin.h +++ b/Source/miniwin/miniwin.h @@ -16,19 +16,6 @@ namespace devilution { #define MAX_PATH 260 #endif -#ifdef __has_attribute -#define DVL_HAVE_ATTRIBUTE(x) __has_attribute(x) -#else -#define DVL_HAVE_ATTRIBUTE(x) 0 -#endif - -#if DVL_HAVE_ATTRIBUTE(format) || (defined(__GNUC__) && !defined(__clang__)) -#define DVL_PRINTF_ATTRIBUTE(fmtargnum, firstarg) \ - __attribute__((__format__(__printf__, fmtargnum, firstarg))) -#else -#define DVL_PRINTF_ATTRIBUTE(fmtargnum, firstarg) -#endif - typedef uint32_t DWORD; typedef unsigned char BYTE; diff --git a/Source/sha.cpp b/Source/sha.cpp index 050192bb5..691f1aa27 100644 --- a/Source/sha.cpp +++ b/Source/sha.cpp @@ -50,11 +50,11 @@ static void SHA1Init(SHA1Context *context) static void SHA1ProcessMessageBlock(SHA1Context *context) { - DWORD i, temp; - DWORD W[80]; - DWORD A, B, C, D, E; + std::uint32_t i, temp; + std::uint32_t W[80]; + std::uint32_t A, B, C, D, E; - auto *buf = (DWORD *)context->buffer; + auto *buf = (std::uint32_t *)context->buffer; for (i = 0; i < 16; i++) W[i] = SDL_SwapLE32(buf[i]); @@ -111,9 +111,9 @@ static void SHA1ProcessMessageBlock(SHA1Context *context) context->state[4] += E; } -static void SHA1Input(SHA1Context *context, const char *message_array, DWORD len) +static void SHA1Input(SHA1Context *context, const char *message_array, std::uint32_t len) { - DWORD i, count; + std::uint32_t i, count; count = context->count[0] + 8 * len; if (count < context->count[0]) @@ -136,10 +136,10 @@ void SHA1Clear() void SHA1Result(int n, char Message_Digest[SHA1HashSize]) { - DWORD *Message_Digest_Block; + std::uint32_t *Message_Digest_Block; int i; - Message_Digest_Block = (DWORD *)Message_Digest; + Message_Digest_Block = (std::uint32_t *)Message_Digest; if (Message_Digest != nullptr) { for (i = 0; i < 5; i++) { *Message_Digest_Block = SDL_SwapLE32(sgSHA1[n].state[i]); diff --git a/Source/utils/attributes.h b/Source/utils/attributes.h new file mode 100644 index 000000000..d6be58666 --- /dev/null +++ b/Source/utils/attributes.h @@ -0,0 +1,27 @@ +/** + * @file attributes.h + * + * Macros for attributes on functions, variables, etc. + */ +#pragma once + +#ifdef __has_attribute +#define DVL_HAVE_ATTRIBUTE(x) __has_attribute(x) +#else +#define DVL_HAVE_ATTRIBUTE(x) 0 +#endif + +#if DVL_HAVE_ATTRIBUTE(format) || (defined(__GNUC__) && !defined(__clang__)) +#define DVL_PRINTF_ATTRIBUTE(fmtargnum, firstarg) \ + __attribute__((__format__(__printf__, fmtargnum, firstarg))) +#else +#define DVL_PRINTF_ATTRIBUTE(fmtargnum, firstarg) +#endif + +#if DVL_HAVE_ATTRIBUTE(always_inline) +#define DVL_ALWAYS_INLINE inline __attribute__((always_inline)) +#elif defined(_MSC_VER) +#define DVL_ALWAYS_INLINE __forceinline +#else +#define DVL_ALWAYS_INLINE inline +#endif diff --git a/Source/utils/console.h b/Source/utils/console.h index 97632f456..59b6b058c 100644 --- a/Source/utils/console.h +++ b/Source/utils/console.h @@ -3,7 +3,7 @@ #include #include -#include "miniwin/miniwin.h" +#include "utils/attributes.h" namespace devilution { diff --git a/Source/utils/sdl2_to_1_2_backports.h b/Source/utils/sdl2_to_1_2_backports.h index 38c999d21..60360135e 100644 --- a/Source/utils/sdl2_to_1_2_backports.h +++ b/Source/utils/sdl2_to_1_2_backports.h @@ -9,6 +9,7 @@ #include #include +#include "utils/attributes.h" #include "utils/console.h" #include "utils/stubs.h"