You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Currently, most Amiga compilers represent enums as 32-bit ints. GCC compilers have -fshort-enums switch, but it comes with a tradeoff:
Allocate to an enum type only as many bytes as it needs for the declared range of possible values. Specifically, the enum type is equivalent to the smallest integer type that has enough room.
Warning: the -fshort-enums switch causes GCC to generate code that is not binary compatible with code generated without that switch. Use it to conform to a non-default application binary interface.
binary compatibility doesn't affect us - this will obviously break when linking with stuff compiled without that switch, but all ACE-based games don't have this option - usually they come with all required sources and no binary blobs,
extra ops to mask out the remaining bytes of the register doesn't affect us, since m68k has .b, .w and .l op variants
structs changing sizes doesn't affect us because ACE don't even tries to maintain compatibility
I'm still kinda torn about this, but I think having small enums is the way to go - should save some ram space in structs
Still, I have no benchmarks to prove that it doesn't truly affect the performance. One thing to consider is that 68000 has 16-bit data bus and it's always slower to transfer 32-bit data between memory and regs.
Needs more research and benchmarks!
The text was updated successfully, but these errors were encountered:
Basically you don't use the enum in function arguments, you only ever use the properly sized type.
C++ lets you define the size which is a lot nicer (as does C23 now).
I would say if not the above pattern, -fshort-enums is the way to go.
Looks cool! The only downside is that intellisense will show FOO as part of anonymous enum and there will be a lost opportunity to put proper values in the first place of suggestion list when typing tMyEnum eValue = .
I'll probably stick to C23 stuff falling back to this construct using some macro magic to keep the compatibility with Bebbo compiler. Like:
But I'll have to see how vscode's intellisense behaves with that once C23 ships. On the side note, docs for this one C23 feature are very scarce and are only in this one writeup. I guess the topic is still too fresh. ;)
Currently, most Amiga compilers represent enums as 32-bit ints. GCC compilers have
-fshort-enums
switch, but it comes with a tradeoff:also,
-fshort-enums
is placed on the most not recommended build flags on one of the blog posts I've found: https://interrupt.memfault.com/blog/best-and-worst-gcc-clang-compiler-flags#-fshort-enumsome things to consider:
I'm still kinda torn about this, but I think having small enums is the way to go - should save some ram space in structs
Still, I have no benchmarks to prove that it doesn't truly affect the performance. One thing to consider is that 68000 has 16-bit data bus and it's always slower to transfer 32-bit data between memory and regs.
Needs more research and benchmarks!
The text was updated successfully, but these errors were encountered: