7 extern char __iheap_start;
9 #define IWRAM_POOL_SZ 32768
10 #define __iheap_start iwram[0]
11 static char iwram[IWRAM_POOL_SZ];
13 static char *top = &__iheap_start;
15 int iwram_brk(void *addr)
17 if((char*)addr < &__iheap_start) {
18 addr = &__iheap_start;
22 panic(get_pc(), "iwram_brk (%p) >= sp", addr);
28 void *iwram_sbrk(intptr_t delta)
31 iwram_brk(top + delta);
35 int ispow2(unsigned int x)
47 void *malloc_nf_impl(size_t sz, const char *file, int line)
50 if(!(p = malloc(sz))) {
51 panic(get_pc(), "%s:%d malloc %lu\n", file, line, (unsigned long)sz);
56 void *calloc_nf_impl(size_t num, size_t sz, const char *file, int line)
59 if(!(p = calloc(num, sz))) {
60 panic(get_pc(), "%s:%d calloc %lu\n", file, line, (unsigned long)(num * sz));
65 void *realloc_nf_impl(void *p, size_t sz, const char *file, int line)
67 if(!(p = realloc(p, sz))) {
68 panic(get_pc(), "%s:%d realloc %lu\n", file, line, (unsigned long)sz);
73 char *strdup_nf_impl(const char *s, const char *file, int line)
79 if(!(res = malloc(len + 1))) {
80 panic(get_pc(), "%s:%d strdup\n", file, line);
82 memcpy(res, s, len + 1);
87 /* utility functions which are implemented in assembly on GBA builds */
89 void fillblock_16byte(void *dest, uint32_t val, int count)
94 for(i=0; i<count; i++) {
105 return 0; /* not useful on PC builds */
110 return (void*)-1; /* not useful on PC builds */