isa: Markus' sample. (strncmp)
[calu.git] / 2_isa / src / strncmp.s
1 int strncmp(const uint8_t *b1, const uint8_t *b2, size_t len)
2 {
3         int diff=0;
4         
5
6         for (;len && (*b1) && (*b2) && !(diff); --len) {
7                 diff = b1[i] - b2[i];
8         }
9
10         return diff;
11 }
12
13
14 strncmp.s:
15
16 ldis r5, 0      ;
17
18 :strfor
19 ldis r0, 0      ;
20 ldb r0, r1      ; r0 = (*b1)
21 ldb r5, r2      ; r5 = (*b2)
22 addi r3, 0      ; len == 0
23 addinq r0, 0    ; (*b1) == 0
24 addinq r5, 0    ; (*b2) == 0
25
26 ldiseq r0,0     ;    
27 reteq           ;
28
29 sub r0, r0, r5  ; diff = (*b1)-(*b2)
30 addi r0,0       ; diff!=0
31 retnq           ;
32 addi r1,1       ; ++b1
33 addi r2,1       ; ++b2
34 subi r3,1       ; ++len
35 branch strfor   ;