3 asm(" # This is to stay compatible with crt0 C programs (starts at 0x80000003c)");
5 asm(" nop # 0x80000000");
22 asm("_start: la $29,0x80002000"); /* sp = + 8KiB */
23 asm(" la $28, _gp "); /* gp */
24 asm(" la $4, _ftext "); /* a0 */
25 asm(" la $5, _etext "); /* a1 */
32 static inline putchar(unsigned ch
)
37 #define SER_OUTBUSY() (*(volatile unsigned *)0xFF000000 != 0)
38 #define SER_OUT(data) (*(volatile unsigned *)0xFF000000 = (data))
45 static void put_unsigned(unsigned n
)
47 // (unsigned)-1 == 4294967295
48 static unsigned powers10
[] = {
62 unsigned leading_zero
= 1;
69 for (p
= powers10
; *p
; ++p
) {
73 for (i
= 0; n
>= scale
; ++i
, n
-= scale
)
75 if (i
!= 0 || !leading_zero
) {
86 put_unsigned(n
>> 5); putchar('\n');
87 put_unsigned(i
>> 5); putchar('\n');
88 put_unsigned(i
<< 5); putchar('\n');
89 put_unsigned(n
>> 31); putchar('\n');
90 put_unsigned(i
>> 31); putchar('\n');
91 put_unsigned(i
<< 31); putchar('\n');
102 for (sh
= 0; sh
< 32; ++sh
) {
103 put_unsigned(1 << sh
); putchar('\n');
104 // putchar(i == (1 << sh) ? '.' : (failed++, '!'));
110 for (sh
= 31; sh
>= 0; --sh
) {
111 put_unsigned(((int) 0x80000000) >> sh
); putchar('\n');
112 // putchar(i == (((int) 0x80000000) >> sh) ? '.' : (failed++, '!'));
117 for (sh
= 31; sh
>= 0; --sh
) {
118 put_unsigned(((unsigned) 0x80000000) >> sh
); putchar('\n');
119 // putchar(u == ((unsigned) 0x80000000 >> sh) ? '.' : (failed++, '!'));
123 put_unsigned(failed
);