summaryrefslogtreecommitdiffstats
path: root/src/common
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2019-11-04 00:54:03 +0100
committerbunnei <bunneidev@gmail.com>2019-11-04 04:22:41 +0100
commit1bdae0fe29f87daa81d2aba052a10a709b87485a (patch)
tree16d0f4aa4c4a11222c6950b3ad60e7d1d9905036 /src/common
parentMerge pull request #3059 from FearlessTobi/stub-am-commands (diff)
downloadyuzu-1bdae0fe29f87daa81d2aba052a10a709b87485a.tar
yuzu-1bdae0fe29f87daa81d2aba052a10a709b87485a.tar.gz
yuzu-1bdae0fe29f87daa81d2aba052a10a709b87485a.tar.bz2
yuzu-1bdae0fe29f87daa81d2aba052a10a709b87485a.tar.lz
yuzu-1bdae0fe29f87daa81d2aba052a10a709b87485a.tar.xz
yuzu-1bdae0fe29f87daa81d2aba052a10a709b87485a.tar.zst
yuzu-1bdae0fe29f87daa81d2aba052a10a709b87485a.zip
Diffstat (limited to 'src/common')
-rw-r--r--src/common/bit_field.h7
-rw-r--r--src/common/common_funcs.h22
2 files changed, 17 insertions, 12 deletions
diff --git a/src/common/bit_field.h b/src/common/bit_field.h
index 8131d1f95..fd2bbbd99 100644
--- a/src/common/bit_field.h
+++ b/src/common/bit_field.h
@@ -36,6 +36,13 @@
#include "common/common_funcs.h"
#include "common/swap.h"
+// Inlining
+#ifdef _WIN32
+#define FORCE_INLINE __forceinline
+#else
+#define FORCE_INLINE inline __attribute__((always_inline))
+#endif
+
/*
* Abstract bitfield class
*
diff --git a/src/common/common_funcs.h b/src/common/common_funcs.h
index 04ecac959..c029dc7b3 100644
--- a/src/common/common_funcs.h
+++ b/src/common/common_funcs.h
@@ -1,10 +1,11 @@
-// Copyright 2013 Dolphin Emulator Project / 2014 Citra Emulator Project
+// Copyright 2019 yuzu emulator team
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
#pragma once
#include <algorithm>
+#include <array>
#include <string>
#if !defined(ARCHITECTURE_x86_64)
@@ -16,18 +17,15 @@
#define CONCAT2(x, y) DO_CONCAT2(x, y)
#define DO_CONCAT2(x, y) x##y
-// helper macro to properly align structure members.
-// Calling INSERT_PADDING_BYTES will add a new member variable with a name like "pad121",
-// depending on the current source line to make sure variable names are unique.
-#define INSERT_PADDING_BYTES(num_bytes) u8 CONCAT2(pad, __LINE__)[(num_bytes)]
-#define INSERT_PADDING_WORDS(num_words) u32 CONCAT2(pad, __LINE__)[(num_words)]
+/// Helper macros to insert unused bytes or words to properly align structs. These values will be
+/// zero-initialized.
+#define INSERT_PADDING_BYTES(num_bytes) std::array<u8, num_bytes> CONCAT2(pad, __LINE__){};
+#define INSERT_PADDING_WORDS(num_words) std::array<u32, num_words> CONCAT2(pad, __LINE__){};
-// Inlining
-#ifdef _WIN32
-#define FORCE_INLINE __forceinline
-#else
-#define FORCE_INLINE inline __attribute__((always_inline))
-#endif
+/// These are similar to the INSERT_PADDING_* macros, but are needed for padding unions. This is
+/// because unions can only be initialized by one member.
+#define INSERT_UNION_PADDING_BYTES(num_bytes) std::array<u8, num_bytes> CONCAT2(pad, __LINE__);
+#define INSERT_UNION_PADDING_WORDS(num_words) std::array<u32, num_words> CONCAT2(pad, __LINE__);
#ifndef _MSC_VER