3a_asm/2_isa: fixed our examples
[calu.git] / 2_isa / src / strncmp.s
index ab2682fd8170263345e4896993507ca994456aaa..038cece64011a6d053519a0eeb96e8a64c2e8070 100644 (file)
@@ -1,35 +1,23 @@
-int strncmp(const uint8_t *b1, const uint8_t *b2, size_t len)
-{
-       int diff=0;
-       
-
-       for (;len && (*b1) && (*b2) && !(diff); --len) {
-               diff = b1[i] - b2[i];
-       }
-
-       return diff;
-}
-
-
-strncmp.s:
+.text
+strncmp:
 
 ldis r5, 0      ;
 
-:strfor
+strfor:
 ldis r0, 0      ;
-ldb r0, r1      ; r0 = (*b1)
-ldb r5, r2      ; r5 = (*b2)
-addi r3, 0      ; len == 0
-addinq r0, 0    ; (*b1) == 0
-addinq r5, 0    ; (*b2) == 0
+ldb r0, 0(r1)
+ldb r5, 0(r2)   ; r5 = (*b2)
+cmpi r3, 0      ; len == 0
+cmpinq r0, 0    ; (*b1) == 0
+cmpinq r5, 0    ; (*b2) == 0
 
 ldiseq r0,0     ;    
 reteq           ;
 
 sub r0, r0, r5  ; diff = (*b1)-(*b2)
-addi r0,0       ; diff!=0
+cmpi r0, 0      ; diff!=0
 retnq           ;
-addi r1,1       ; ++b1
-addi r2,1       ; ++b2
-subi r3,1       ; ++len
-branch strfor   ;
+addi r1, r1 ,1  ; ++b1
+addi r2, r2, 1  ; ++b2
+subi r3, r3, 1  ; --len
+br strfor   ;