Skip to content

Commit

Permalink
Avoid strict aliasing violations. Closes #593
Browse files Browse the repository at this point in the history
  • Loading branch information
LIJI32 committed Mar 9, 2024
1 parent efc93d0 commit 8739da6
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 3 deletions.
4 changes: 2 additions & 2 deletions Core/apu.c
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ static void update_sample(GB_gameboy_t *gb, GB_channel_t index, int8_t value, un
output.left = output.right = 0;
}

if (*(uint32_t *)&(gb->apu_output.current_sample[index]) != *(uint32_t *)&output) {
if (gb->apu_output.current_sample[index].packed != output.packed) {
refresh_channel(gb, index, cycles_offset);
gb->apu_output.current_sample[index] = output;
}
Expand Down Expand Up @@ -131,7 +131,7 @@ static void update_sample(GB_gameboy_t *gb, GB_channel_t index, int8_t value, un
if (likely(!gb->apu_output.channel_muted[index])) {
output = (GB_sample_t){(0xF - value * 2) * left_volume, (0xF - value * 2) * right_volume};
}
if (*(uint32_t *)&(gb->apu_output.current_sample[index]) != *(uint32_t *)&output) {
if (gb->apu_output.current_sample[index].packed != output.packed) {
refresh_channel(gb, index, cycles_offset);
gb->apu_output.current_sample[index] = output;
}
Expand Down
11 changes: 11 additions & 0 deletions Core/apu.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,22 @@

/* APU ticks are 2MHz, triggered by an internal APU clock. */

#ifdef GB_INTERNAL
typedef union
{
struct {
int16_t left;
int16_t right;
};
uint32_t packed;
} GB_sample_t;
#else
typedef struct
{
int16_t left;
int16_t right;
} GB_sample_t;
#endif

typedef struct
{
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ endif

# These must come before the -Wno- flags
WARNINGS += -Werror -Wall -Wno-unknown-warning -Wno-unknown-warning-option -Wno-missing-braces
WARNINGS += -Wno-nonnull -Wno-unused-result -Wno-strict-aliasing -Wno-multichar -Wno-int-in-bool-context -Wno-format-truncation
WARNINGS += -Wno-nonnull -Wno-unused-result -Wno-multichar -Wno-int-in-bool-context -Wno-format-truncation

# Only add this flag if the compiler supports it
ifeq ($(shell $(CC) -x c -c $(NULL) -o $(NULL) -Werror -Wpartial-availability 2> $(NULL); echo $$?),0)
Expand Down

0 comments on commit 8739da6

Please sign in to comment.