5 asm(" # This is to stay compatible with crt0 C programs (starts at 0x80000003c)");
7 asm(" nop # 0x80000000");
24 asm("_start: lui $29,0x8000 ");
25 asm(" ori $29,$29,0x2000"); /* + 8KiB */
31 static inline putchar(unsigned ch
)
36 #define SER_OUTBUSY() (*(volatile unsigned *)0xFF000000 != 0)
37 #define SER_OUT(data) (*(volatile unsigned *)0xFF000000 = (data))
44 static void put_unsigned(unsigned n
)
46 // (unsigned)-1 == 4294967295
47 static unsigned powers10
[] = {
61 unsigned leading_zero
= 1;
68 for (p
= powers10
; *p
; ++p
) {
72 for (i
= 0; n
>= scale
; ++i
, n
-= scale
)
74 if (i
!= 0 || !leading_zero
) {
85 static unsigned cand
[NCAND
];
90 for (i
= 0; i
!= NCAND
*32; ++i
) {
91 if ((cand
[i
>> 5] & (1 << (i
& 31))) == 0) {
95 // Remove 3p 5p 7p 9p ...
96 // 3p ~ cand[(3p - 3)/2] = cand[(6i+9-3)/2] = cand[3i+3]
97 // 5p ~ cand[(5p - 3)/2] = cand[(10i+15-3)/2] = cand[5i+6]
99 // np ~ cand[(np - 3)/2] = cand[(2ni+3n-3)/2] = cand[ni+1.5(n-1)]
102 // (n+2)p ~ cand[((n+2)p - 3)/2] =
103 // cand[((np + 2p) - 3) / 2] =
104 // cand[(np - 3)/2 + p]
106 for (j
= i
+ p
; j
< NCAND
*32; j
+= p
) {
107 cand
[j
>> 5] |= 1 << (j
& 31);
108 // printf("-%d ", 2*j+3);