Browse Source

🧹 Add and use a DVL_ALWAYS_INLINE macro

Also moves attribute macros out of miniwin into a new header.
pull/1947/head
Gleb Mazovetskiy 5 years ago committed by Anders Jenbo
parent
commit
4d10642b3d
  1. 2
      Source/appfat.h
  2. 11
      Source/engine/render/dun_render.cpp
  3. 13
      Source/miniwin/miniwin.h
  4. 16
      Source/sha.cpp
  5. 27
      Source/utils/attributes.h
  6. 2
      Source/utils/console.h
  7. 1
      Source/utils/sdl2_to_1_2_backports.h

2
Source/appfat.h

@ -7,7 +7,7 @@
#include <SDL.h>
#include "miniwin/miniwin.h"
#include "utils/attributes.h"
namespace devilution {

11
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 <typename F>
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 <LightType Light>
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 <LightType Light>
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 <LightType Light>
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 <TransparencyType Transparency, LightType Light>
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<Light>(dst, src, n, tbl);

13
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;

16
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]);

27
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

2
Source/utils/console.h

@ -3,7 +3,7 @@
#include <cstdarg>
#include <cstddef>
#include "miniwin/miniwin.h"
#include "utils/attributes.h"
namespace devilution {

1
Source/utils/sdl2_to_1_2_backports.h

@ -9,6 +9,7 @@
#include <cmath>
#include <cstddef>
#include "utils/attributes.h"
#include "utils/console.h"
#include "utils/stubs.h"

Loading…
Cancel
Save