mirror of
https://github.com/Ed94/metadesk.git
synced 2026-06-18 10:02:24 -07:00
39 lines
1.3 KiB
C
39 lines
1.3 KiB
C
#if MD_INTELLISENE_DIRECTIVES
|
|
#pragma once
|
|
#include "base_types.h"
|
|
#endif
|
|
|
|
#define MD_KILOBYTES( x ) ( ( x ) * ( S64 )( 1024 ) )
|
|
#define MD_MEGABYTES( x ) ( MD_KILOBYTES( x ) * ( S64 )( 1024 ) )
|
|
#define MD_GIGABYTES( x ) ( MD_MEGABYTES( x ) * ( S64 )( 1024 ) )
|
|
#define MD_TERABYTES( x ) ( MD_GIGABYTES( x ) * ( S64 )( 1024 ) )
|
|
|
|
#define MD__ONES ( scast( GEN_NS usize, - 1) / MD_U8_MAX )
|
|
#define MD__HIGHS ( MD__ONES * ( MD_U8_MAX / 2 + 1 ) )
|
|
#define MD__HAS_ZERO( x ) ( ( ( x ) - MD__ONES ) & ~( x ) & MD__HIGHS )
|
|
|
|
#define swap(a, b) \
|
|
do \
|
|
{ \
|
|
typeof(a) tmp = a; \
|
|
a = b; \
|
|
b = tmp; \
|
|
} \
|
|
while (0)
|
|
|
|
#if MD_COMPILER_MSVC || (MD_COMPILER_CLANG && MD_OS_WINDOWS)
|
|
# pragma section(".rdata$", read)
|
|
# define read_only __declspec(allocate(".rdata$"))
|
|
#elif (MD_COMPILER_CLANG && MD_OS_LINUX)
|
|
# define read_only __attribute__((section(".rodata")))
|
|
#else
|
|
// NOTE(rjf): I don't know of a useful way to do this in GCC land.
|
|
// __attribute__((section(".rodata"))) looked promising, but it introduces a
|
|
// strange warning about malformed section attributes, and it doesn't look
|
|
// like writing to that section reliably produces access violations, strangely
|
|
// enough. (It does on Clang)
|
|
# define read_only
|
|
#endif
|
|
|
|
|