diff options
Diffstat (limited to 'Source/Kernel/Core/cppsupport.wtf.cpp')
-rw-r--r-- | Source/Kernel/Core/cppsupport.wtf.cpp | 54 |
1 files changed, 0 insertions, 54 deletions
diff --git a/Source/Kernel/Core/cppsupport.wtf.cpp b/Source/Kernel/Core/cppsupport.wtf.cpp deleted file mode 100644 index 06ef1b9..0000000 --- a/Source/Kernel/Core/cppsupport.wtf.cpp +++ /dev/null @@ -1,54 +0,0 @@ -//This file just contains a few methods required for some C++ things to work -#include <types.h> - -namespace CMem { - u8int* memcpy(u8int*, const u8int*, int); -}; - -using namespace CMem; - -extern "C" void __cxa_pure_virtual() {} //Required when using abstract classes - -void *__dso_handle; //Required when using global objects -extern "C" int __cxa_atexit(void (*f)(void*), void *p, void *d) { return 0; } - -extern "C" void * memmove(void* dst, const void* src, size_t len) { - memcpy((u8int*)dst, (const u8int*)src, len); - return dst; -} - -//Functions for quad divisions/modulo. Taken and arranged from klibc include/asm/div64.h -//These only work with 32-bit divisors and only return 32-bit remainder. -//TODO : think of some correct quad div/mod algorithms -inline u64int doDiv(u64int dividend, u32int divisor, u32int *remainder) { - union { - u64int v64; - u32int v32[2]; - } d = { dividend }; - u32int upper; - - upper = d.v32[1]; - d.v32[1] = 0; - if (upper >= divisor) { - d.v32[1] = upper / divisor; - upper %= divisor; - } - asm ("divl %2" : "=a" (d.v32[0]), "=d" (*remainder) : - "rm" (divisor), "0" (d.v32[0]), "1" (upper)); - return d.v64; -} - -extern "C" { -u64int __udivdi3(u64int dividend, u64int b) { - u32int divisor, remainder; - divisor = b; - return doDiv(dividend, divisor, &remainder); -} - -u64int __umoddi3(u64int dividend, u64int b) { - u32int divisor, remainder; - divisor = b; - doDiv(dividend, divisor, &remainder); - return remainder; -} -} |