diff options
author | 2018-12-05 19:45:08 +0100 | |
---|---|---|
committer | 2018-12-05 19:45:08 +0100 | |
commit | 0bd02131b644b61088789f52f31b750c9aecaa6d (patch) | |
tree | 811c679a1bba8b24fc7967cdfe73640254d64156 /3rdparty/bx/src/crtnone.cpp | |
parent | 9a81ec7eaf00d73a23db5c003dc45b55d4b76c4a (diff) |
3rdparty: Updated bgfx, bimg, and bx to latest upstream. [Ryan Holtz]
Diffstat (limited to '3rdparty/bx/src/crtnone.cpp')
-rw-r--r-- | 3rdparty/bx/src/crtnone.cpp | 258 |
1 files changed, 181 insertions, 77 deletions
diff --git a/3rdparty/bx/src/crtnone.cpp b/3rdparty/bx/src/crtnone.cpp index 85028212133..93579515c7f 100644 --- a/3rdparty/bx/src/crtnone.cpp +++ b/3rdparty/bx/src/crtnone.cpp @@ -1,15 +1,22 @@ /* - * Copyright 2010-2017 Branimir Karadzic. All rights reserved. + * Copyright 2010-2018 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bx#license-bsd-2-clause */ #include "bx_p.h" #include <bx/debug.h> +#include <bx/file.h> +#include <bx/math.h> #include <bx/sort.h> -#include <bx/readerwriter.h> +#include <bx/timer.h> #if BX_CRT_NONE +#include "crt0.h" + +#define NOT_IMPLEMENTED() \ + { bx::debugPrintf("crtnone: %s not implemented\n", BX_FUNCTION); abort(); } + extern "C" void* memcpy(void* _dst, const void* _src, size_t _numBytes) { bx::memCopy(_dst, _src, _numBytes); @@ -81,6 +88,11 @@ extern "C" int32_t strncmp(const char* _lhs, const char* _rhs, size_t _max) return bx::strCmp(_lhs, _rhs, _max); } +extern "C" int32_t strcasecmp(const char* _lhs, const char* _rhs) +{ + return bx::strCmpI(_lhs, _rhs); +} + extern "C" const char* strstr(const char* _str, const char* _find) { return bx::strFind(_str, _find); @@ -97,7 +109,7 @@ extern "C" int isprint(int _ch) return bx::isPrint(_ch); } -extern "C" int toupper (int _ch) +extern "C" int toupper(int _ch) { return bx::toUpper(_ch); } @@ -110,13 +122,16 @@ extern "C" size_t mbstowcs(wchar_t* _dst, const char* _src, size_t _max) extern "C" char* strdup(const char* _src) { - BX_UNUSED(_src); - return NULL; + uint32_t size = bx::strLen(_src)+1; + char* dup = (char*)malloc(size); + bx::strCopy(dup, size, _src); + return dup; } extern "C" long int strtol(const char* _str, char** _end, int _base) { BX_UNUSED(_str, _end, _base); + NOT_IMPLEMENTED(); return -1; } @@ -125,32 +140,29 @@ extern "C" int abs(int _value) return _value >= 0 ? _value : -_value; } -extern "C" float fabsf(float _value) +extern "C" float fabsf(float _x) { - return _value >= 0.0f ? _value : -_value; + return bx::abs(_x); } -extern "C" double fabs(double _value) +extern "C" double fabs(double _x) { - return _value >= 0.0 ? _value : -_value; + return bx::abs(_x); } extern "C" double ldexp(double _x, int _exp) { - BX_UNUSED(_x, _exp); - return 0.0; + return bx::ldexp(float(_x), _exp); } extern "C" float expf(float _x) { - BX_UNUSED(_x); - return 0.0f; + return bx::exp(_x); } extern "C" float logf(float _x) { - BX_UNUSED(_x); - return 0.0f; + return bx::log(_x); } extern "C" float log10f(float _x) @@ -159,88 +171,74 @@ extern "C" float log10f(float _x) return 0.0f; } -extern "C" float powf(float _x) +extern "C" float powf(float _x, float _y) { - BX_UNUSED(_x); - return 0.0f; + return bx::pow(_x, _y); } -extern "C" double pow(double _x) +extern "C" double pow(double _x, float _y) { - BX_UNUSED(_x); - return 0.0; + return bx::pow(_x, _y); } extern "C" float sinf(float _x) { - BX_UNUSED(_x); - return 0.0f; + return bx::sin(_x); } extern "C" float cosf(float _x) { - BX_UNUSED(_x); - return 0.0f; + return bx::cos(_x); } extern "C" float tanf(float _x) { - BX_UNUSED(_x); - return 0.0f; + return bx::tan(_x); } extern "C" float atan2f(float _y, float _x) { - BX_UNUSED(_y, _x); - return 0.0f; + return bx::atan2(_y, _x); } extern "C" float sqrtf(float _x) { - BX_UNUSED(_x); - return 0.0f; + return bx::sqrt(_x); } extern "C" double sqrt(double _x) { - BX_UNUSED(_x); - return 0.0; + return bx::sqrt(_x); } extern "C" float ceilf(float _x) { - BX_UNUSED(_x); - return 0.0f; + return bx::ceil(_x); } extern "C" double ceil(double _x) { - BX_UNUSED(_x); - return 0.0; + return bx::ceil(_x); } extern "C" float floorf(float _x) { - BX_UNUSED(_x); - return 0.0f; + return bx::floor(_x); } extern "C" double floor(double _x) { - BX_UNUSED(_x); - return 0.0; + return bx::floor(_x); } extern "C" float acosf(float _x) { - BX_UNUSED(_x); - return 0.0f; + return bx::acos(_x); } extern "C" float fmodf(float _numer, float _denom) { - BX_UNUSED(_numer, _denom); - return 0.0f; + return bx::mod(_numer, _denom); } extern "C" int atoi(const char* _str) @@ -257,21 +255,24 @@ extern "C" double atof(const char* _str) return result; } -extern "C" struct DIR* opendir(const char* dirname) +extern "C" struct DIR* opendir(const char* _dirname) { - BX_UNUSED(dirname); + BX_UNUSED(_dirname); +// NOT_IMPLEMENTED(); return NULL; } -extern "C" struct dirent* readdir(struct DIR* dirp) +extern "C" struct dirent* readdir(struct DIR* _dirp) { - BX_UNUSED(dirp); + BX_UNUSED(_dirp); + NOT_IMPLEMENTED(); return NULL; } -extern "C" int closedir (struct DIR* dirp) +extern "C" int closedir(struct DIR* _dirp) { - BX_UNUSED(dirp); + BX_UNUSED(_dirp); + NOT_IMPLEMENTED(); return 0; } @@ -300,8 +301,13 @@ extern "C" int snprintf(char* _out, size_t _max, const char* _format, ...) extern "C" int printf(const char* _format, ...) { - BX_UNUSED(_format); - return -1; + va_list argList; + va_start(argList, _format); + bx::WriterI* writer = bx::getStdOut(); + bx::Error err; + int32_t len = bx::write(writer, &err, _format, argList); + va_end(argList); + return len; } struct FILE @@ -337,172 +343,270 @@ FILE * stdout; extern "C" FILE* fopen(const char* _filename, const char* _mode) { BX_UNUSED(_filename, _mode); + bx::debugPrintf("fopen(\"%s\", \"%s\");\n", _filename, _mode); +// NOT_IMPLEMENTED(); return NULL; } extern "C" int fclose(FILE* _stream) { BX_UNUSED(_stream); - return -1; + bx::debugPrintf("fclose(%p);\n", _stream); +// NOT_IMPLEMENTED(); + return 0; } extern "C" size_t fread(void* _ptr, size_t _size, size_t _count, FILE* _stream) { BX_UNUSED(_ptr, _size, _count, _stream); + NOT_IMPLEMENTED(); return -1; } extern "C" size_t fwrite(const void* _ptr, size_t _size, size_t _count, FILE* _stream) { BX_UNUSED(_ptr, _size, _count, _stream); + NOT_IMPLEMENTED(); return -1; } extern "C" int fseek(FILE* _stream, long int _offset, int _origin) { BX_UNUSED(_stream, _offset, _origin); + NOT_IMPLEMENTED(); return -1; } extern "C" int fseeko64(FILE* _stream, off64_t _offset, int _whence) { BX_UNUSED(_stream, _offset, _whence); + NOT_IMPLEMENTED(); return -1; } extern "C" long int ftell(FILE* _stream) { BX_UNUSED(_stream); + NOT_IMPLEMENTED(); return -1; } extern "C" off64_t ftello64(FILE* _stream) { BX_UNUSED(_stream); + NOT_IMPLEMENTED(); return -1; } extern "C" int feof(FILE* _stream) { BX_UNUSED(_stream); + NOT_IMPLEMENTED(); return -1; } extern "C" int ferror(FILE* _stream) { BX_UNUSED(_stream); + NOT_IMPLEMENTED(); return -1; } extern "C" FILE* popen(const char* _command, const char* _type) { BX_UNUSED(_command, _type); + NOT_IMPLEMENTED(); return NULL; } extern "C" int pclose(FILE* _stream) { BX_UNUSED(_stream); + NOT_IMPLEMENTED(); return -1; } extern "C" int execvp(const char* _file, char* const _argv[]) { BX_UNUSED(_file, _argv); + NOT_IMPLEMENTED(); return -1; } +typedef int32_t clockid_t; + +inline void toTimespecNs(timespec& _ts, int64_t _nsecs) +{ + _ts.tv_sec = _nsecs/INT64_C(1000000000); + _ts.tv_nsec = _nsecs%INT64_C(1000000000); +} + +extern "C" int clock_gettime(clockid_t _clock, struct timespec* _ts) +{ + BX_UNUSED(_clock); + int64_t now = crt0::getHPCounter(); + toTimespecNs(*_ts, now); + return 0; +} + extern "C" long syscall(long _num, ...) { - BX_UNUSED(_num); - return -1; + va_list argList; + va_start(argList, _num); + + long result = -1; + + switch (_num) + { + case 39: + result = crt0::processGetId(); + break; + + case 228: + { + clockid_t arg0 = va_arg(argList, clockid_t); + timespec* arg1 = va_arg(argList, timespec*); + result = clock_gettime(arg0, arg1); + } + break; + + default: + bx::debugPrintf("? syscall %d\n", _num); + break; + } + + va_end(argList); + + return result; } extern "C" long sysconf(int name) { BX_UNUSED(name); + NOT_IMPLEMENTED(); return -1; } -extern "C" pid_t fork() +extern "C" pid_t fork(void) { + NOT_IMPLEMENTED(); return -1; } -extern "C" int sched_yield() +extern "C" int sched_yield(void) { + NOT_IMPLEMENTED(); return -1; } extern "C" int prctl(int _option, unsigned long _arg2, unsigned long _arg3, unsigned long _arg4, unsigned long _arg5) { BX_UNUSED(_option, _arg2, _arg3, _arg4, _arg5); + NOT_IMPLEMENTED(); return -1; } extern "C" int chdir(const char* _path) { BX_UNUSED(_path); + bx::debugPrintf("chdir(%s) not implemented!\n", _path); return -1; } extern "C" char* getcwd(char* _buf, size_t _size) { BX_UNUSED(_buf, _size); + NOT_IMPLEMENTED(); return NULL; } extern "C" char* getenv(const char* _name) { - BX_UNUSED(_name); - return NULL; + return const_cast<char*>(crt0::getEnv(_name) ); } extern "C" int setenv(const char* _name, const char* _value, int _overwrite) { BX_UNUSED(_name, _value, _overwrite); + bx::debugPrintf("setenv(%s, %s, %d) not implemented!\n", _name, _value, _overwrite); return -1; } extern "C" int unsetenv(const char* _name) { BX_UNUSED(_name); + bx::debugPrintf("unsetenv(%s) not implemented!\n", _name); return -1; } -extern "C" time_t time(time_t* _arg) +#if 0 +struct timeval { - BX_UNUSED(_arg); - return -1; -} + time_t tv_sec; + suseconds_t tv_usec; +}; + +struct timespec +{ + time_t tv_sec; + long tv_nsec; +}; +#endif // extern "C" int gettimeofday(struct timeval* _tv, struct timezone* _tz) { - BX_UNUSED(_tv, _tz); - return -1; + BX_UNUSED(_tz); + + timespec ts; + + if (NULL == _tv) + { + return 0; + } + + clock_gettime(0 /*CLOCK_REALTIME*/, &ts); + _tv->tv_sec = ts.tv_sec; + _tv->tv_usec = (int)ts.tv_nsec / 1000; + return 0; +} + +typedef int64_t time_t; + +extern "C" time_t time(time_t* _arg) +{ + timespec ts; + clock_gettime(0 /*CLOCK_REALTIME*/, &ts); + time_t result = ts.tv_sec; + + if (NULL != _arg) + { + *_arg = result; + } + + return result; } extern "C" void* realloc(void* _ptr, size_t _size) { - BX_UNUSED(_ptr, _size); - return NULL; + return crt0::realloc(_ptr, _size); } extern "C" void* malloc(size_t _size) { - return ::realloc(NULL, _size); + return crt0::realloc(NULL, _size); } extern "C" void free(void* _ptr) { - BX_UNUSED(_ptr); + crt0::realloc(_ptr, 0); } #endif // BX_PLATFORM_* -extern "C" void abort() +extern "C" void abort(void) { - while (true) {}; + bx::debugPrintf("crtnone: abort called!\n"); + crt0::exit(bx::kExitFailure); } extern "C" void __assert_fail(const char* _assertion, const char* _file, uint32_t _line, const char* _function) @@ -517,7 +621,7 @@ void operator delete(void*) { } -extern "C" void __cxa_pure_virtual() +extern "C" void __cxa_pure_virtual(void) { } @@ -527,7 +631,7 @@ extern "C" int __cxa_atexit(void (*_dtorFn)(void*), void* _arg, void* _dsoHandle return 0; } -extern "C" void __gxx_personality_v0() +extern "C" void __gxx_personality_v0(void) { } @@ -577,17 +681,17 @@ namespace __cxxabiv1 __extension__ typedef int __guard __attribute__( (mode(__DI__) ) ); - extern "C" int __cxa_guard_acquire (__guard* _g) + extern "C" int __cxa_guard_acquire(__guard* _g) { return !*(char*)(_g); } - extern "C" void __cxa_guard_release (__guard* _g) + extern "C" void __cxa_guard_release(__guard* _g) { *(char*)_g = 1; } - extern "C" void __cxa_guard_abort (__guard* _g) + extern "C" void __cxa_guard_abort(__guard* _g) { BX_UNUSED(_g); } |