By thePowersGang
*/
#include "common.h"
+#include <stdint.h>
// === CODE ===
char *strcpy(char *dest, const char *src)
int file_exists(const char *filename)
{
int fd;
- //fd = open(filename, OPENFLAG_READ);
- fd = open(filename, 0);
- if(fd == -1) return 0;
- close(fd);
- return 1;
+ //fd = open(filename, OPENFLAG_READ);
+ fd = open(filename, 0);
+ if(fd == -1) return 0;
+ close(fd);
+ return 1;
}
+
+uint64_t __divmod64(uint64_t Num, uint64_t Den, uint64_t *Rem)
+{
+ uint64_t ret = 0, add = 1;
+
+ if( Den == 0 ) {
+ if(Rem) *Rem = 0;
+ return -1;
+ }
+
+ // Find what power of two times Den is > Num
+ while( Num >= Den )
+ {
+ Den <<= 1;
+ add <<= 1;
+ }
+
+ // Search backwards
+ while( add > 1 )
+ {
+ add >>= 1;
+ Den >>= 1;
+ // If the numerator is >= Den, subtract and add to return value
+ if( Num >= Den )
+ {
+ ret += add;
+ Num -= Den;
+ }
+ }
+ if(Rem) *Rem = Num;
+ return ret;
+}
+
+uint32_t __divmod32(uint32_t Num, uint32_t Den, uint32_t *Rem)
+{
+ uint32_t ret = 0, add = 1;
+
+ if( Den == 0 ) {
+ if(Rem) *Rem = 0;
+ return -1;
+ }
+
+ // Find what power of two times Den is > Num
+ while( Num >= Den )
+ {
+ Den <<= 1;
+ add <<= 1;
+ }
+
+ // Search backwards
+ while( add > 1 )
+ {
+ add >>= 1;
+ Den >>= 1;
+ // If the numerator is >= Den, subtract and add to return value
+ if( Num >= Den )
+ {
+ ret += add;
+ Num -= Den;
+ }
+ }
+ if(Rem) *Rem = Num;
+ return ret;
+}
+
+uint64_t __udivdi3(uint64_t Num, uint64_t Den)
+{
+ return __divmod64(Num, Den, NULL);
+}
+
+uint64_t __umoddi3(uint64_t Num, uint64_t Den)
+{
+ uint64_t ret;
+ __divmod64(Num, Den, &ret);
+ return ret;
+}
+
+int32_t __divsi3(int32_t Num, int32_t Den)
+{
+ int32_t sign = 1;
+ if(Num < 0) {
+ Num = -Num;
+ sign = -sign;
+ }
+ if(Den < 0) {
+ Den = -Den;
+ sign = -sign;
+ }
+ return sign * __divmod32(Num, Den, NULL);
+}
+
+int32_t __modsi3(int32_t Num, int32_t Den)
+{
+ int32_t sign = 1;
+ uint32_t tmp;
+ if(Num < 0) {
+ Num = -Num;
+ sign = -sign;
+ }
+ if(Den < 0) {
+ Den = -Den;
+ sign = -sign;
+ }
+ __divmod32(Num, Den, &tmp);
+ return ((int32_t)tmp)*sign;
+}
+
+uint32_t __udivsi3(uint32_t Num, uint32_t Den)
+{
+ return __divmod32(Num, Den, NULL);
+}
+
+
+uint32_t __umodsi3(uint32_t Num, uint32_t Den)
+{
+ uint32_t ret;
+ __divmod32(Num, Den, &ret);
+ return ret;
+}
+