isa: Markus' sample. (strncmp)
authorMarkus HOFSTAETTER <c0725034@ti16.(none)>
Wed, 27 Oct 2010 15:22:40 +0000 (17:22 +0200)
committerMarkus HOFSTAETTER <c0725034@ti16.(none)>
Wed, 27 Oct 2010 15:22:40 +0000 (17:22 +0200)
2_isa/src/strncmp.s [new file with mode: 0644]

diff --git a/2_isa/src/strncmp.s b/2_isa/src/strncmp.s
new file mode 100644 (file)
index 0000000..ab2682f
--- /dev/null
@@ -0,0 +1,35 @@
+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:
+
+ldis r5, 0      ;
+
+: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
+
+ldiseq r0,0     ;    
+reteq           ;
+
+sub r0, r0, r5  ; diff = (*b1)-(*b2)
+addi r0,0       ; diff!=0
+retnq           ;
+addi r1,1       ; ++b1
+addi r2,1       ; ++b2
+subi r3,1       ; ++len
+branch strfor   ;