From 65db12baaa2a2bab42ffec4ac4de98eee607773f Mon Sep 17 00:00:00 2001 From: Gabriel Ravier Date: Thu, 30 Jan 2020 14:25:34 +0100 Subject: [PATCH] Started trying to optimize MakePixelWaveData --- src/Attributes.h | 11 +++++++++++ src/Backends/Audio/SDL2.cpp | 9 +++------ src/PixTone.cpp | 3 ++- 3 files changed, 16 insertions(+), 7 deletions(-) create mode 100644 src/Attributes.h diff --git a/src/Attributes.h b/src/Attributes.h new file mode 100644 index 00000000..f2c03824 --- /dev/null +++ b/src/Attributes.h @@ -0,0 +1,11 @@ +#pragma once + +#ifdef __GNUC__ + +#define ATTRIBUTE_HOT __attribute__((hot)) + +#else + +#define ATTRIBUTE_HOT + +#endif diff --git a/src/Backends/Audio/SDL2.cpp b/src/Backends/Audio/SDL2.cpp index 88d6a0c8..42612e22 100644 --- a/src/Backends/Audio/SDL2.cpp +++ b/src/Backends/Audio/SDL2.cpp @@ -10,17 +10,14 @@ #include "../../Organya.h" #include "../../WindowsWrapper.h" +#include "../../Attributes.h" #define MIN(a, b) ((a) < (b) ? (a) : (b)) #define MAX(a, b) ((a) > (b) ? (a) : (b)) #define CLAMP(x, y, z) MIN(MAX((x), (y)), (z)) -#ifdef __GNUC__ -#define ATTR_HOT __attribute__((hot)) #else #define ATTR_HOT -#endif - struct AudioBackend_Sound { unsigned char *samples; @@ -76,8 +73,8 @@ static void SetSoundPan(AudioBackend_Sound *sound, long pan) sound->volume_r = sound->pan_r * sound->volume; } -// Most CPU-intensive function in the game (2/3rd CPU time consumption in my experience), so marked with attrHot so the compiler considers it a hot spot (as it is) when optimizing -ATTR_HOT static void MixSounds(float *stream, unsigned int frames_total) +// Most CPU-intensive function in the game, so marked with ATTRIBUTE_HOT so the compiler considers it a hot spot (as it is) when optimizing. This alone can reduce the CPU usage of CSE2 by up to 60% +ATTRIBUTE_HOT static void MixSounds(float *stream, unsigned int frames_total) { for (AudioBackend_Sound *sound = sound_list_head; sound != NULL; sound = sound->next) { diff --git a/src/PixTone.cpp b/src/PixTone.cpp index a2d06126..fd48a938 100644 --- a/src/PixTone.cpp +++ b/src/PixTone.cpp @@ -4,6 +4,7 @@ #include #include +#include "Attributes.h" #include "WindowsWrapper.h" #include "Random.h" @@ -65,7 +66,7 @@ void MakeWaveTables(void) //BOOL wave_tables_made; -BOOL MakePixelWaveData(const PIXTONEPARAMETER *ptp, unsigned char *pData) +ATTRIBUTE_HOT BOOL MakePixelWaveData(const PIXTONEPARAMETER *ptp, unsigned char *pData) { int i; int a, b, c, d;