/* Support */
|
/* Support */
|
|
|
#include <stdarg.h>
|
#include <stdarg.h>
|
|
|
#if OR1K
|
#if OR1K
|
|
|
void __dummy() {} /* to fix RTL simulator bug */
|
void __dummy() {} /* to fix RTL simulator bug */
|
void reset_support()
|
void reset_support()
|
{
|
{
|
main();
|
main();
|
exit(0);
|
exit(0);
|
}
|
}
|
|
|
void printf(const char *fmt, ...)
|
void printf(const char *fmt, ...)
|
{
|
{
|
va_list args;
|
va_list args;
|
va_start(args, fmt);
|
va_start(args, fmt);
|
asm("l.addi\tr3,%0,0": :"r" (fmt));
|
asm("l.addi\tr3,%0,0": :"r" (fmt));
|
asm("l.addi\tr4,%0,0": :"r" (args));
|
asm("l.addi\tr4,%0,0": :"r" (args));
|
asm("l.sys 202");
|
asm("l.sys 202");
|
}
|
}
|
|
|
void exit(int x)
|
void exit(int x)
|
{
|
{
|
asm("l.sys 203");
|
asm("l.sys 203");
|
}
|
}
|
|
|
void report(unsigned long value)
|
void report(unsigned long value)
|
{
|
{
|
unsigned long spr = 0x1234;
|
unsigned long spr = 0x1234;
|
asm("l.mtspr\t\t%0,%1,0x0" : : "r" (spr), "r" (value));
|
asm("l.mtspr\t\t%0,%1,0x0" : : "r" (spr), "r" (value));
|
return;
|
return;
|
}
|
}
|
|
|
void __main()
|
void __main()
|
{
|
{
|
}
|
}
|
|
|
void bcopy(const void *srcvoid, void * dstvoid, int length)
|
void bcopy(const void *srcvoid, void * dstvoid, int length)
|
{
|
{
|
char *dst = dstvoid;
|
char *dst = dstvoid;
|
const char *src = srcvoid;
|
const char *src = srcvoid;
|
|
|
while (length--)
|
while (length--)
|
*dst++ = *src++;
|
*dst++ = *src++;
|
}
|
}
|
|
|
#else
|
#else
|
void report(unsigned long value)
|
void report(unsigned long value)
|
{
|
{
|
unsigned long spr = 0x1234;
|
unsigned long spr = 0x1234;
|
printf("l.mtspr %x,%x\n", spr, value);
|
printf("l.mtspr %x,%x\n", spr, value);
|
return;
|
return;
|
}
|
}
|
#endif
|
#endif
|
|
|