removing C code, opting to mess around in odin.
This commit is contained in:
1
code/asm/readme.md
Normal file
1
code/asm/readme.md
Normal file
@ -0,0 +1 @@
|
||||
# Handwritten assembly
|
6
code/yasm.odin
Normal file
6
code/yasm.odin
Normal file
@ -0,0 +1,6 @@
|
||||
package yasm
|
||||
|
||||
|
||||
main :: proc()
|
||||
{
|
||||
}
|
121
scripts/build.odin
Normal file
121
scripts/build.odin
Normal file
@ -0,0 +1,121 @@
|
||||
package build
|
||||
|
||||
//region Script Grime
|
||||
import mem "core:mem"
|
||||
import vmem "core:mem/virtual"
|
||||
import os "core:os/os2"
|
||||
import "core:fmt"
|
||||
import _strings "core:strings"
|
||||
StrGen :: _strings.Builder
|
||||
strgen_init :: _strings.builder_init
|
||||
strgen_join :: _strings.join
|
||||
|
||||
join_path :: #force_inline proc(elems : ..string) -> string { res, _ := os.join_path(transmute([]string)elems, context.allocator); return transmute(string)res }
|
||||
get_working_dir :: #force_inline proc() -> string { res, _ := os.get_working_directory(context.allocator); return transmute(string)res }
|
||||
|
||||
join_str :: #force_inline proc(elems : ..string) -> string {
|
||||
gen : StrGen; strgen_init(& gen, context.allocator)
|
||||
res, _ := strgen_join(elems, "")
|
||||
return res
|
||||
}
|
||||
|
||||
// For a beakdown of any flag, type <odin_compiler> <command> -help
|
||||
command_build :: "build"
|
||||
command_check :: "check"
|
||||
command_query :: "query"
|
||||
command_report :: "report"
|
||||
command_run :: "run"
|
||||
|
||||
flag_build_mode :: "-build-mode:"
|
||||
flag_build_mode_dll :: "-build-mode:dll"
|
||||
flag_collection :: "-collection:"
|
||||
flag_file :: "-file"
|
||||
flag_debug :: "-debug"
|
||||
flag_define :: "-define:"
|
||||
flag_default_allocator_nil :: "-default-to-nil-allocator"
|
||||
flag_disable_assert :: "-disable-assert"
|
||||
flag_dynamic_map_calls :: "-dynamic-map-calls"
|
||||
flag_extra_assembler_flags :: "-extra_assembler-flags:"
|
||||
flag_extra_linker_flags :: "-extra-linker-flags:"
|
||||
flag_ignore_unknown_attributes :: "-ignore-unknown-attributes"
|
||||
flag_keep_temp_files :: "-keep-temp-files"
|
||||
flag_max_error_count :: "-max-error-count:"
|
||||
flag_micro_architecture_native :: "-microarch:native"
|
||||
flag_no_bounds_check :: "-no-bounds-check"
|
||||
flag_no_crt :: "-no-crt"
|
||||
flag_no_entrypoint :: "-no-entry-point"
|
||||
flag_no_thread_local :: "-no-thread-local"
|
||||
flag_no_thread_checker :: "-no-threaded-checker"
|
||||
flag_output_path :: "-out="
|
||||
flag_optimization_level :: "-opt:"
|
||||
flag_optimize_none :: "-o:none"
|
||||
flag_optimize_minimal :: "-o:minimal"
|
||||
flag_optimize_size :: "-o:size"
|
||||
flag_optimize_speed :: "-o:speed"
|
||||
falg_optimize_aggressive :: "-o:aggressive"
|
||||
flag_pdb_name :: "-pdb-name:"
|
||||
flag_sanitize_address :: "-sanitize:address"
|
||||
flag_sanitize_memory :: "-sanitize:memory"
|
||||
flag_sanitize_thread :: "-sanitize:thread"
|
||||
flag_subsystem :: "-subsystem:"
|
||||
flag_show_debug_messages :: "-show-debug-messages"
|
||||
flag_show_timings :: "-show-timings"
|
||||
flag_show_more_timings :: "-show-more-timings"
|
||||
flag_show_system_calls :: "-show-system-calls"
|
||||
flag_target :: "-target:"
|
||||
flag_thread_count :: "-thread-count:"
|
||||
flag_use_lld :: "-lld"
|
||||
flag_use_separate_modules :: "-use-separate-modules"
|
||||
flag_vet_all :: "-vet"
|
||||
flag_vet_unused_entities :: "-vet-unused"
|
||||
flag_vet_semicolon :: "-vet-semicolon"
|
||||
flag_vet_shadow_vars :: "-vet-shadowing"
|
||||
flag_vet_using_stmt :: "-vet-using-stmt"
|
||||
|
||||
flag_microarch_zen5 :: "--microarch:znver5"
|
||||
|
||||
flag_rad_linker :: "-radlink"
|
||||
|
||||
flag_msvc_link_disable_dynamic_base :: "/DYNAMICBASE:NO"
|
||||
flag_msvc_link_base_address :: "/BASE:"
|
||||
flag_msvc_link_fixed_base_address :: "/FIXED"
|
||||
flag_msvc_link_stack_size :: "/STACK"
|
||||
flag_msvc_link_debug :: "/DEBUG"
|
||||
|
||||
msvc_link_default_base_address :: 0x180000000
|
||||
//endregion Script Grime
|
||||
|
||||
build :: proc(working_dir : string, args : []string) -> (stdout : string, stderr : string) {
|
||||
fmt.println("Building:", args)
|
||||
res, errs : []byte; _, res, errs, _ = os.process_exec({ working_dir = working_dir, command = args}, context.allocator)
|
||||
return transmute(string)res, transmute(string)errs;
|
||||
}
|
||||
|
||||
main :: proc() {
|
||||
varena : vmem.Arena; _ = vmem.arena_init_growing(& varena, mem.Megabyte * 64 ); context.allocator = vmem.arena_allocator(& varena)
|
||||
exe_odin :: "odin.exe"
|
||||
|
||||
path_root := get_working_dir()
|
||||
path_build := join_path(path_root, "build")
|
||||
path_code := join_path(path_root, "code")
|
||||
file_source := join_path(path_code, "yasm.odin")
|
||||
file_exe := join_path(path_build, "yasm.exe")
|
||||
|
||||
res, errs := build(path_build, {
|
||||
exe_odin,
|
||||
command_build,
|
||||
file_source,
|
||||
flag_file,
|
||||
join_str(flag_output_path, file_exe),
|
||||
flag_optimize_none,
|
||||
flag_default_allocator_nil,
|
||||
flag_debug,
|
||||
flag_microarch_zen5,
|
||||
flag_rad_linker,
|
||||
flag_no_thread_checker,
|
||||
flag_show_timings,
|
||||
join_str(flag_subsystem, "console"),
|
||||
})
|
||||
fmt.println(res)
|
||||
fmt.println(errs)
|
||||
}
|
@ -1,22 +1,41 @@
|
||||
$misc = join-path $PSScriptRoot 'helpers/misc.ps1'
|
||||
. $misc
|
||||
$path_root = split-path -Path $PSScriptRoot -Parent
|
||||
$path_build = join-path $path_root 'build'
|
||||
$path_code = join-path $path_root 'code'
|
||||
|
||||
$update_deps = join-path $PSScriptRoot 'update_deps.ps1'
|
||||
. $update_deps
|
||||
$path_source = join-path $PSScriptRoot 'build.odin'
|
||||
$exe = join-path $path_build 'build_win32.exe'
|
||||
|
||||
$path_root = git rev-parse --show-toplevel
|
||||
$path_build = join-path $path_root 'build'
|
||||
$path_scripts = join-path $path_root 'scripts'
|
||||
$path_source = join-path $path_root 'source'
|
||||
$path_toolchain = join-path $path_root 'toolchain'
|
||||
if ((test-path $path_build) -eq $false) {
|
||||
new-item -itemtype directory -path $path_build
|
||||
}
|
||||
|
||||
verify-path $path_build
|
||||
push-location $path_build
|
||||
function build-hello {
|
||||
}
|
||||
build-hello
|
||||
$odin = 'odin.exe'
|
||||
|
||||
function build-copy_hello {
|
||||
}
|
||||
# build-copy_hello
|
||||
$command_build = 'build'
|
||||
|
||||
$flag_debug = '-debug'
|
||||
$flag_file = '-file'
|
||||
$flag_dyn_map_calls = '-dynamic-map-calls'
|
||||
$flag_no_bounds_check = '-no-bounds-check'
|
||||
$flag_no_threaded_checker = '-no-threaded-checker'
|
||||
$flag_no_type_assert = '-no-type-assert'
|
||||
$flag_optimize_none = '-o:none'
|
||||
$flag_output_path = '-out='
|
||||
$flag_default_allocator_nil = '-default-to-nil-allocator'
|
||||
|
||||
push-location $path_root
|
||||
$build_args = @()
|
||||
$build_args += $command_build
|
||||
$build_args += $path_source
|
||||
$build_args += $flag_file
|
||||
# $build_args += $flag_debug
|
||||
$build_args += $flag_optimize_none
|
||||
$build_args += $flag_no_bounds_check
|
||||
$build_args += $flag_no_threaded_checker
|
||||
$build_args += $flag_no_type_assert
|
||||
$build_args += $flag_dyn_map_calls
|
||||
$build_args += $flag_default_allocator_nil
|
||||
$build_args += $flag_output_path + $exe
|
||||
& $odin $build_args
|
||||
& $exe
|
||||
pop-location
|
||||
|
@ -1,125 +0,0 @@
|
||||
#ifdef INTELLISENSE_DIRECTIVES
|
||||
# pragma once
|
||||
# include "macros.hpp"
|
||||
#endif
|
||||
|
||||
#pragma region Basic Types
|
||||
|
||||
#define U8_MIN 0u
|
||||
#define U8_MAX 0xffu
|
||||
#define I8_MIN ( -0x7f - 1 )
|
||||
#define I8_MAX 0x7f
|
||||
|
||||
#define U16_MIN 0u
|
||||
#define U16_MAX 0xffffu
|
||||
#define I16_MIN ( -0x7fff - 1 )
|
||||
#define I16_MAX 0x7fff
|
||||
|
||||
#define U32_MIN 0u
|
||||
#define U32_MAX 0xffffffffu
|
||||
#define I32_MIN ( -0x7fffffff - 1 )
|
||||
#define I32_MAX 0x7fffffff
|
||||
|
||||
#define U64_MIN 0ull
|
||||
#define U64_MAX 0xffffffffffffffffull
|
||||
#define I64_MIN ( -0x7fffffffffffffffll - 1 )
|
||||
#define I64_MAX 0x7fffffffffffffffll
|
||||
|
||||
#if defined( ARCH_32_BIT )
|
||||
# define USIZE_MIN GEN_U32_MIN
|
||||
# define USIZE_MAX GEN_U32_MAX
|
||||
# define ISIZE_MIN GEN_S32_MIN
|
||||
# define ISIZE_MAX GEN_S32_MAX
|
||||
#elif defined( ARCH_64_BIT )
|
||||
# define USIZE_MIN GEN_U64_MIN
|
||||
# define USIZE_MAX GEN_U64_MAX
|
||||
# define ISIZE_MIN GEN_I64_MIN
|
||||
# define ISIZE_MAX GEN_I64_MAX
|
||||
#else
|
||||
# error Unknown architecture size. This library only supports 32 bit and 64 bit architectures.
|
||||
#endif
|
||||
|
||||
#define F32_MIN 1.17549435e-38f
|
||||
#define F32_MAX 3.40282347e+38f
|
||||
#define F64_MIN 2.2250738585072014e-308
|
||||
#define F64_MAX 1.7976931348623157e+308
|
||||
|
||||
#if defined( GEN_COMPILER_MSVC )
|
||||
# if _MSC_VER < 1300
|
||||
typedef unsigned char u8;
|
||||
typedef signed char s8;
|
||||
typedef unsigned short u16;
|
||||
typedef signed short s16;
|
||||
typedef unsigned int u32;
|
||||
typedef signed int s32;
|
||||
# else
|
||||
typedef unsigned __int8 u8;
|
||||
typedef signed __int8 s8;
|
||||
typedef unsigned __int16 u16;
|
||||
typedef signed __int16 s16;
|
||||
typedef unsigned __int32 u32;
|
||||
typedef signed __int32 s32;
|
||||
# endif
|
||||
typedef unsigned __int64 u64;
|
||||
typedef signed __int64 s64;
|
||||
#else
|
||||
# include <stdint.h>
|
||||
|
||||
typedef uint8_t u8;
|
||||
typedef int8_t s8;
|
||||
typedef uint16_t u16;
|
||||
typedef int16_t s16;
|
||||
typedef uint32_t u32;
|
||||
typedef int32_t s32;
|
||||
typedef uint64_t u64;
|
||||
typedef int64_t s64;
|
||||
#endif
|
||||
|
||||
static_assert( sizeof( u8 ) == sizeof( s8 ), "sizeof(u8) != sizeof(s8)" );
|
||||
static_assert( sizeof( u16 ) == sizeof( s16 ), "sizeof(u16) != sizeof(s16)" );
|
||||
static_assert( sizeof( u32 ) == sizeof( s32 ), "sizeof(u32) != sizeof(s32)" );
|
||||
static_assert( sizeof( u64 ) == sizeof( s64 ), "sizeof(u64) != sizeof(s64)" );
|
||||
|
||||
static_assert( sizeof( u8 ) == 1, "sizeof(u8) != 1" );
|
||||
static_assert( sizeof( u16 ) == 2, "sizeof(u16) != 2" );
|
||||
static_assert( sizeof( u32 ) == 4, "sizeof(u32) != 4" );
|
||||
static_assert( sizeof( u64 ) == 8, "sizeof(u64) != 8" );
|
||||
|
||||
typedef size_t usize;
|
||||
typedef ptrdiff_t ssize;
|
||||
|
||||
static_assert( sizeof( usize ) == sizeof( ssize ), "sizeof(usize) != sizeof(ssize)" );
|
||||
|
||||
// NOTE: (u)zpl_intptr is only here for semantic reasons really as this library will only support 32/64 bit OSes.
|
||||
#if defined( _WIN64 )
|
||||
typedef signed __int64 sptr;
|
||||
typedef unsigned __int64 uptr;
|
||||
#elif defined( _WIN32 )
|
||||
// NOTE; To mark types changing their size, e.g. zpl_intptr
|
||||
# ifndef _W64
|
||||
# if ! defined( __midl ) && ( defined( _X86_ ) || defined( _M_IX86 ) ) && _MSC_VER >= 1300
|
||||
# define _W64 __w64
|
||||
# else
|
||||
# define _W64
|
||||
# endif
|
||||
# endif
|
||||
typedef _W64 signed int sptr;
|
||||
typedef _W64 unsigned int uptr;
|
||||
#else
|
||||
typedef uintptr_t uptr;
|
||||
typedef intptr_t sptr;
|
||||
#endif
|
||||
|
||||
static_assert( sizeof( uptr ) == sizeof( sptr ), "sizeof(uptr) != sizeof(sptr)" );
|
||||
|
||||
typedef float f32;
|
||||
typedef double f64;
|
||||
|
||||
static_assert( sizeof( f32 ) == 4, "sizeof(f32) != 4" );
|
||||
static_assert( sizeof( f64 ) == 8, "sizeof(f64) != 8" );
|
||||
|
||||
typedef s8 b8;
|
||||
typedef s16 b16;
|
||||
typedef s32 b32;
|
||||
|
||||
#pragma endregion Basic Types
|
@ -1,63 +0,0 @@
|
||||
#ifdef INTELLISENSE_DIRECTIVES
|
||||
# pragma once
|
||||
# include "basic_types.hpp"
|
||||
#endif
|
||||
|
||||
#pragma region Debug
|
||||
|
||||
#if defined( _MSC_VER )
|
||||
# if _MSC_VER < 1300
|
||||
# define DEBUG_TRAP() __asm int 3 /* Trap to debugger! */
|
||||
# else
|
||||
# define debug_trap() __debugbreak()
|
||||
# endif
|
||||
#elif defined( GEN_COMPILER_TINYC )
|
||||
# define DEBUG_TRAP() process_exit( 1 )
|
||||
#else
|
||||
# define DEBUG_TRAP() __builtin_trap()
|
||||
#endif
|
||||
|
||||
#define ASSERT( cond ) ASSERT( cond, NULL )
|
||||
|
||||
#define ASSERT_MSG( cond, msg, ... ) \
|
||||
do \
|
||||
{ \
|
||||
if ( ! ( cond ) ) \
|
||||
{ \
|
||||
assert_handler( #cond, __FILE__, scast( s64, __LINE__ ), msg, ##__VA_ARGS__ ); \
|
||||
GEN_DEBUG_TRAP(); \
|
||||
} \
|
||||
} while ( 0 )
|
||||
|
||||
#define ASSERT_NOT_NULL( ptr ) ASSERT_MSG( ( ptr ) != NULL, #ptr " must not be NULL" )
|
||||
|
||||
// NOTE: Things that shouldn't happen with a message!
|
||||
#define PANIC( msg, ... ) ASSERT_MSG( 0, msg, ##__VA_ARGS__ )
|
||||
|
||||
#if Build_Debug
|
||||
#define FATAL( ... ) \
|
||||
do \
|
||||
{ \
|
||||
local_persist thread_local \
|
||||
char buf[GEN_PRINTF_MAXLEN] = { 0 }; \
|
||||
\
|
||||
str_fmt(buf, PRINTF_MAXLEN, __VA_ARGS__); \
|
||||
PANIC(buf); \
|
||||
} \
|
||||
while (0)
|
||||
#else
|
||||
|
||||
# define FATAL( ... ) \
|
||||
do \
|
||||
{ \
|
||||
str_fmt_out_err( __VA_ARGS__ ); \
|
||||
process_exit(1); \
|
||||
} \
|
||||
while (0)
|
||||
#endif
|
||||
|
||||
void assert_handler( char const* condition, char const* file, s32 line, char const* msg, ... );
|
||||
s32 assert_crash( char const* condition );
|
||||
void process_exit( u32 code );
|
||||
|
||||
#pragma endregion Debug
|
@ -1,183 +0,0 @@
|
||||
#ifdef INTELLISENSE_DIRECTIVES
|
||||
# pragma once
|
||||
#endif
|
||||
|
||||
#pragma region Macros
|
||||
|
||||
#ifndef global
|
||||
#define global static // Global variables
|
||||
#endif
|
||||
#ifndef internal
|
||||
#define internal static // Internal linkage
|
||||
#endif
|
||||
#ifndef local_persist
|
||||
#define local_persist static // Local Persisting variables
|
||||
#endif
|
||||
|
||||
#ifndef api_c
|
||||
#define api_c extern "C"
|
||||
#endif
|
||||
|
||||
#ifndef bit
|
||||
#define bit( Value ) ( 1 << Value )
|
||||
#define bitfield_is_equal( Type, Field, Mask ) ( (Type(Mask) & Type(Field)) == Type(Mask) )
|
||||
#endif
|
||||
|
||||
#ifndef cast
|
||||
#define cast( type, value ) ( (type)(value) )
|
||||
#endif
|
||||
|
||||
#ifndef ccast
|
||||
#define ccast( type, value ) ( const_cast< type >( (value) ) )
|
||||
#endif
|
||||
#ifndef pcast
|
||||
#define pcast( type, value ) ( * reinterpret_cast< type* >( & ( value ) ) )
|
||||
#endif
|
||||
#ifndef rcast
|
||||
#define rcast( type, value ) reinterpret_cast< type >( value )
|
||||
#endif
|
||||
#ifndef scast
|
||||
#define scast( type, value ) static_cast< type >( value )
|
||||
#endif
|
||||
|
||||
#ifndef stringize
|
||||
#define stringize_va( ... ) #__VA_ARGS__
|
||||
#define stringize( ... ) stringize_va( __VA_ARGS__ )
|
||||
#endif
|
||||
|
||||
#ifndef do_once
|
||||
#define do_once( statement ) for ( local_persist b32 once = true; once; once = false, (statement) )
|
||||
|
||||
#define do_once_start \
|
||||
do \
|
||||
{ \
|
||||
local_persist \
|
||||
bool done = false; \
|
||||
if ( done ) \
|
||||
break; \
|
||||
done = true;
|
||||
|
||||
#define do_once_end \
|
||||
} \
|
||||
while(0);
|
||||
#endif
|
||||
|
||||
#ifndef labeled_scope_start
|
||||
#define labeled_scope_start if ( false ) {
|
||||
#define labeled_scope_end }
|
||||
#endif
|
||||
|
||||
#ifndef compiler_decorated_func_name
|
||||
# ifdef COMPILER_CLANG
|
||||
# define compiler_decorated_func_name __PRETTY_NAME__
|
||||
# elif defined(COMPILER_MSVC)
|
||||
# define compiler_decorated_func_name __FUNCDNAME__
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef num_args_impl
|
||||
#define num_args_impl( _0, \
|
||||
_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, \
|
||||
_11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \
|
||||
_21, _22, _23, _24, _25, _26, _27, _28, _29, _30, \
|
||||
_31, _32, _33, _34, _35, _36, _37, _38, _39, _40, \
|
||||
_41, _42, _43, _44, _45, _46, _47, _48, _49, _50, \
|
||||
_51, _52, _53, _54, _55, _56, _57, _58, _59, _60, \
|
||||
_61, _62, _63, _64, _65, _66, _67, _68, _69, _70, \
|
||||
_71, _72, _73, _74, _75, _76, _77, _78, _79, _80, \
|
||||
_81, _82, _83, _84, _85, _86, _87, _88, _89, _90, \
|
||||
_91, _92, _93, _94, _95, _96, _97, _98, _99, _100, \
|
||||
N, ... \
|
||||
) N
|
||||
|
||||
// ## deletes preceding comma if _VA_ARGS__ is empty (GCC, Clang)
|
||||
#define num_args(...) \
|
||||
num_args_impl(_, ## __VA_ARGS__, \
|
||||
100, 99, 98, 97, 96, 95, 94, 93, 92, 91, \
|
||||
90, 89, 88, 87, 86, 85, 84, 83, 82, 81, \
|
||||
80, 79, 78, 77, 76, 75, 74, 73, 72, 71, \
|
||||
70, 69, 68, 67, 66, 65, 64, 63, 62, 61, \
|
||||
60, 59, 58, 57, 56, 55, 54, 53, 52, 51, \
|
||||
50, 49, 48, 47, 46, 45, 44, 43, 42, 41, \
|
||||
40, 39, 38, 37, 36, 35, 34, 33, 32, 31, \
|
||||
30, 29, 28, 27, 26, 25, 24, 23, 22, 21, \
|
||||
20, 19, 18, 17, 16, 15, 14, 13, 12, 11, \
|
||||
10, 9, 8, 7, 6, 5, 4, 3, 2, 1, \
|
||||
0 \
|
||||
)
|
||||
#endif
|
||||
|
||||
#ifndef clamp
|
||||
#define clamp( x, lower, upper ) min( max( ( x ), ( lower ) ), ( upper ) )
|
||||
#endif
|
||||
#ifndef count_of
|
||||
#define count_of( x ) ( ( size_of( x ) / size_of( 0 [ x ] ) ) / ( ( ssize )( ! ( size_of( x ) % size_of( 0 [ x ] ) ) ) ) )
|
||||
#endif
|
||||
#ifndef is_between
|
||||
#define is_between( x, lower, upper ) ( ( ( lower ) <= ( x ) ) && ( ( x ) <= ( upper ) ) )
|
||||
#endif
|
||||
#ifndef size_of
|
||||
#define size_of( x ) ( ssize )( sizeof( x ) )
|
||||
#endif
|
||||
|
||||
#ifndef max
|
||||
#define max( a, b ) ( (a > b) ? (a) : (b) )
|
||||
#endif
|
||||
#ifndef min
|
||||
#define min( a, b ) ( (a < b) ? (a) : (b) )
|
||||
#endif
|
||||
|
||||
#if defined( _MSC_VER ) || defined( GEN_COMPILER_TINYC )
|
||||
# define offset_of( Type, element ) ( ( GEN_NS( ssize ) ) & ( ( ( Type* )0 )->element ) )
|
||||
#else
|
||||
# define offset_of( Type, element ) __builtin_offsetof( Type, element )
|
||||
#endif
|
||||
|
||||
#ifndef forceinline
|
||||
# ifdef GEN_COMPILER_MSVC
|
||||
# define forceinline __forceinline
|
||||
# define neverinline __declspec( noinline )
|
||||
# elif defined(GEN_COMPILER_GCC)
|
||||
# define forceinline inline __attribute__((__always_inline__))
|
||||
# define neverinline __attribute__( ( __noinline__ ) )
|
||||
# elif defined(GEN_COMPILER_CLANG)
|
||||
# if __has_attribute(__always_inline__)
|
||||
# define forceinline inline __attribute__((__always_inline__))
|
||||
# define neverinline __attribute__( ( __noinline__ ) )
|
||||
# else
|
||||
# define forceinline
|
||||
# define neverinline
|
||||
# endif
|
||||
# else
|
||||
# define forceinline
|
||||
# define neverinline
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef neverinline
|
||||
# ifdef GEN_COMPILER_MSVC
|
||||
# define neverinline __declspec( noinline )
|
||||
# elif defined(GEN_COMPILER_GCC)
|
||||
# define neverinline __attribute__( ( __noinline__ ) )
|
||||
# elif defined(GEN_COMPILER_CLANG)
|
||||
# if __has_attribute(__always_inline__)
|
||||
# define neverinline __attribute__( ( __noinline__ ) )
|
||||
# else
|
||||
# define neverinline
|
||||
# endif
|
||||
# else
|
||||
# define neverinline
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if !defined(typeof) && (!defined(__STDC_VERSION__) || __STDC_VERSION__ < 202311L)
|
||||
# if defined(_MSC_VER)
|
||||
# define typeof(x) __typeof(x)
|
||||
# elif defined(__GNUC__) || defined(__clang__)
|
||||
# define typeof(x) __typeof__(x)
|
||||
# else
|
||||
# error "Compiler not supported"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#pragma endregion Macros
|
@ -1,25 +0,0 @@
|
||||
#ifdef INTELLISENSE_DIRECTIVES
|
||||
# pragma once
|
||||
# include "debug.h"
|
||||
#endif
|
||||
|
||||
#pragma region Memory
|
||||
|
||||
#define kilobytes( x ) ( ( x ) * ( s64 )( 1024 ) )
|
||||
#define megabytes( x ) ( kilobytes( x ) * ( s64 )( 1024 ) )
|
||||
#define gigabytes( x ) ( megabytes( x ) * ( s64 )( 1024 ) )
|
||||
#define terabytes( x ) ( gigabytes( x ) * ( s64 )( 1024 ) )
|
||||
|
||||
#define _ONES ( cast( usize, - 1) / U8_MAX )
|
||||
#define _HIGHS ( GEN__ONES * ( U8_MAX / 2 + 1 ) )
|
||||
#define _HAS_ZERO( x ) ( ( ( x ) - _ONES ) & ~( x ) & _HIGHS )
|
||||
|
||||
#define swap( a, b ) \
|
||||
do { \
|
||||
typeof(a) \
|
||||
temp = (a); \
|
||||
(a) = (b); \
|
||||
(b) = temp; \
|
||||
} while(0)
|
||||
|
||||
#pragma endregion Memory
|
@ -1,115 +0,0 @@
|
||||
#ifdef INTELLISENSE_DIRECTIVES
|
||||
# pragma once
|
||||
#endif
|
||||
|
||||
#pragma region Platform Detection
|
||||
|
||||
/* Platform architecture */
|
||||
|
||||
#if defined( _WIN64 ) || defined( __x86_64__ ) || defined( _M_X64 ) || defined( __64BIT__ ) || defined( __powerpc64__ ) || defined( __ppc64__ ) || defined( __aarch64__ )
|
||||
# ifndef ARCH_64_BIT
|
||||
# define ARCH_64_BIT 1
|
||||
# endif
|
||||
#else
|
||||
# ifndef ARCH_32_BItxt_StrCaT
|
||||
# define ARCH_32_BIT 1
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Platform OS */
|
||||
|
||||
#if defined( _WIN32 ) || defined( _WIN64 )
|
||||
# ifndef SYSTEM_WINDOWS
|
||||
# define SYSTEM_WINDOWS 1
|
||||
# endif
|
||||
#elif defined( __APPLE__ ) && defined( __MACH__ )
|
||||
# ifndef SYSTEM_OSX
|
||||
# define SYSTEM_OSX 1
|
||||
# endif
|
||||
# ifndef SYSTEM_MACOS
|
||||
# define SYSTEM_MACOS 1
|
||||
# endif
|
||||
# include <TargetConditionals.h>
|
||||
# if TARGET_IPHONE_SIMULATOR == 1 || TARGET_OS_IPHONE == 1
|
||||
# ifndef SYSTEM_IOS
|
||||
# define SYSTEM_IOS 1
|
||||
# endif
|
||||
# endif
|
||||
#elif defined( __unix__ )
|
||||
# ifndef SYSTEM_UNIX
|
||||
# define SYSTEM_UNIX 1
|
||||
# endif
|
||||
# if defined( ANDROID ) || defined( __ANDROID__ )
|
||||
# ifndef SYSTEM_ANDROID
|
||||
# define SYSTEM_ANDROID 1
|
||||
# endif
|
||||
# ifndef SYSTEM_LINUX
|
||||
# define SYSTEM_LINUX 1
|
||||
# endif
|
||||
# elif defined( __linux__ )
|
||||
# ifndef SYSTEM_LINUX
|
||||
# define SYSTEM_LINUX 1
|
||||
# endif
|
||||
# elif defined( __FreeBSD__ ) || defined( __FreeBSD_kernel__ )
|
||||
# ifndef SYSTEM_FREEBSD
|
||||
# define SYSTEM_FREEBSD 1
|
||||
# endif
|
||||
# elif defined( __OpenBSD__ )
|
||||
# ifndef SYSTEM_OPENBSD
|
||||
# define SYSTEM_OPENBSD 1
|
||||
# endif
|
||||
# elif defined( __EMSCRIPTEN__ )
|
||||
# ifndef SYSTEM_EMSCRIPTEN
|
||||
# define SYSTEM_EMSCRIPTEN 1
|
||||
# endif
|
||||
# elif defined( __CYGWIN__ )
|
||||
# ifndef SYSTEM_CYGWIN
|
||||
# define SYSTEM_CYGWIN 1
|
||||
# endif
|
||||
# else
|
||||
# error This UNIX operating system is not supported
|
||||
# endif
|
||||
#else
|
||||
# error This operating system is not supported
|
||||
#endif
|
||||
|
||||
/* Platform compiler */
|
||||
|
||||
#if defined( _MSC_VER )
|
||||
# define COMPILER_MSVC 1
|
||||
#elif defined( __GNUC__ )
|
||||
# define COMPILER_GCC 1
|
||||
#elif defined( __clang__ )
|
||||
# define COMPILER_CLANG 1
|
||||
#elif defined( __MINGW32__ )
|
||||
# define COMPILER_MINGW 1
|
||||
# error Unknown compiler
|
||||
#endif
|
||||
|
||||
#if defined( __has_attribute )
|
||||
# define HAS_ATTRIBUTE( attribute ) __has_attribute( attribute )
|
||||
#else
|
||||
# define HAS_ATTRIBUTE( attribute ) ( 0 )
|
||||
#endif
|
||||
|
||||
#if defined(GCC_VERSION_CHECK)
|
||||
# undef GCC_VERSION_CHECK
|
||||
#endif
|
||||
#if defined(GCC_VERSION)
|
||||
# define GCC_VERSION_CHECK(major,minor,patch) (GCC_VERSION >= VERSION_ENCODE(major, minor, patch))
|
||||
#else
|
||||
# define GCC_VERSION_CHECK(major,minor,patch) (0)
|
||||
#endif
|
||||
|
||||
#pragma endregion Platform Detection
|
||||
|
||||
#pragma region Mandatory Includes
|
||||
|
||||
# include <stdarg.h>
|
||||
# include <stddef.h>
|
||||
|
||||
# if defined( SYSTEM_WINDOWS )
|
||||
# include <intrin.h>
|
||||
# endif
|
||||
|
||||
#pragma endregion Mandatory Includes
|
@ -1,7 +0,0 @@
|
||||
#ifdef __clang__
|
||||
# pragma clang diagnostic pop
|
||||
#endif
|
||||
|
||||
#ifdef __GNUC__
|
||||
# pragma GCC diagnostic pop
|
||||
#endif
|
@ -1,18 +0,0 @@
|
||||
#ifdef __clang__
|
||||
# pragma clang diagnostic push
|
||||
# pragma clang diagnostic ignored "-Wunused-const-variable"
|
||||
# pragma clang diagnostic ignored "-Wunused-but-set-variable"
|
||||
# pragma clang diagnostic ignored "-Wswitch"
|
||||
# pragma clang diagnostic ignored "-Wunused-variable"
|
||||
# pragma clang diagnostic ignored "-Wunknown-pragmas"
|
||||
# pragma clang diagnostic ignored "-Wvarargs"
|
||||
# pragma clang diagnostic ignored "-Wunused-function"
|
||||
#endif
|
||||
|
||||
#ifdef __GNUC__
|
||||
# pragma GCC diagnostic push
|
||||
# pragma GCC diagnostic ignored "-Wunknown-pragmas"
|
||||
# pragma GCC diagnostic ignored "-Wcomment"
|
||||
# pragma GCC diagnostic ignored "-Wswitch"
|
||||
# pragma GCC diagnostic ignored "-Wunused-variable"
|
||||
#endif
|
@ -1,9 +0,0 @@
|
||||
#include "base/push_ignores.inline.h"
|
||||
|
||||
#include "base/platform.h"
|
||||
#include "base/macros.h"
|
||||
#include "base/basic_types.h"
|
||||
#include "base/debug.h"
|
||||
#include "base/memory.h"
|
||||
|
||||
#include "base/pop_ignores.inline.h"
|
Reference in New Issue
Block a user