#include "kozos.h" int get_pvr() { int pvr; asm volatile ("mfpvr %0" : "=r"(pvr) :); return pvr; } int get_msr() { int msr; asm volatile ("mfmsr %0" : "=r"(msr) :); return msr; } void set_msr(int msr) { asm volatile ("sync"); asm volatile ("isync"); asm volatile ("mtmsr %0" :: "r"(msr)); asm volatile ("sync"); asm volatile ("isync"); } int get_mbar() { int mbar; asm volatile ("mfspr %0,311" : "=r"(mbar) :); return mbar; } int get_dec() { int dec; asm volatile ("mfdec %0" : "=r"(dec) :); return dec; } void set_dec(int dec) { asm volatile ("mtdec %0" :: "r"(dec)); } void *memset(void *b, int c, int len) { char *p; for (p = b; len> 0; len--) *(p++) = c; return b; } void *memcpy(void *dst, const void *src, int len) { char *d = dst; const char *s = src; for (; len> 0; len--) *(d++) = *(s++); return dst; } void *memchr(void *b, int c, int len) { char *p = b; for (; len> 0; len--) { if (*p == c) return p; p++; } return NULL; } int strlen(const char *s) { int len; for (len = 0; *s; s++, len++) ; return len; } char *strcpy(char *dst, const char *src) { char *d = dst; for (;; dst++, src++) { *dst = *src; if (!*src) break; } return d; } int strncmp(const char *s1, const char *s2, int len) { for (; len> 0; len--) { if (*(s1++) != *(s2++)) return 1; } return 0; } char *strchr(char *s, int c) { for (; *s; s++) { if (*s == c) return s; } return NULL; }