Paul Pan
7b33e4213a
1. add test soft 2. modify verilator (TODO: crossbar need to replace) 3. fix CP0: now CU0 is always 1 4. Controller: cacheop 5. Controller: fix TEN 6. mycpu_top fix CP0_i 7. fix AXI.sv 8. fix AXIReader.sv 9. fix AXIWriter.sv: getting the correct data and length 10. MU: fix cache writeback, fix mem data mux, fix writer address, fix read request
85 lines
1.2 KiB
C
85 lines
1.2 KiB
C
int printf(const char *fmt,...)
|
|
{
|
|
int i;
|
|
char c;
|
|
void **arg;
|
|
void *ap;
|
|
int w;
|
|
__builtin_va_start(ap,fmt);
|
|
arg=ap;
|
|
for(i=0;fmt[i];i++)
|
|
{
|
|
c=fmt[i];
|
|
if(c=='%')
|
|
{
|
|
w=1;
|
|
again:
|
|
switch(fmt[i+1])
|
|
{
|
|
case 's':
|
|
putstring(*arg);
|
|
arg++;
|
|
i++;
|
|
break;
|
|
case 'c':
|
|
putchar((long)*arg);
|
|
arg++;
|
|
i++;
|
|
break;
|
|
case 'u':
|
|
printbase((long)*arg,w,10,0);
|
|
arg++;
|
|
i++;
|
|
break;
|
|
case 'd':
|
|
printbase((long)*arg,w,10,1);
|
|
arg++;
|
|
i++;
|
|
break;
|
|
case 'l':
|
|
printbase((long)*arg,w,10,0);
|
|
arg++;
|
|
i=i+2;
|
|
break;
|
|
case 'o':
|
|
printbase((long)*arg,w,8,0);
|
|
arg++;
|
|
i++;
|
|
break;
|
|
case 'b':
|
|
printbase((long)*arg,w,2,0);
|
|
arg++;
|
|
i++;
|
|
break;
|
|
case 'p':
|
|
case 'x':
|
|
printbase((long)*arg,w,16,0);
|
|
arg++;
|
|
i++;
|
|
break;
|
|
case '%':
|
|
putchar('%');
|
|
i++;
|
|
break;
|
|
case '0':
|
|
i++;
|
|
case '1' ... '9':
|
|
for(w=0;fmt[i+1]>'0' && fmt[i+1]<='9';i++)
|
|
w=w*10+(fmt[i+1]-'0');
|
|
goto again;
|
|
break;
|
|
|
|
default:
|
|
putchar('%');
|
|
break;
|
|
}
|
|
|
|
}
|
|
else{
|
|
if(c=='\n') putchar('\r');
|
|
putchar(c);
|
|
}
|
|
}
|
|
return 0;
|
|
}
|