Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/arch/csky/abiv2/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 2 kB image not shown  

Quelle  strcmp.S   Sprache: Sparc

 
/* SPDX-License-Identifier: GPL-2.0 */
// Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.

#include <linux/linkage.h>
#include "sysdep.h"

ENTRY(strcmp)
 mov a3, a0
 /* Check if the s1 addr is aligned.  */
 xor a2, a3, a1
 andi a2, 0x3
 bnez a2, 7f
 andi t1, a0, 0x3
 bnez t1, 5f

1:
 /* If aligned, load word each time.  */
 ldw t0, (a3, 0)
 ldw t1, (a1, 0)
 /* If s1[i] != s2[i], goto 2f.  */
 cmpne   t0, t1
 bt      2f
 /* If s1[i] == s2[i], check if s1 or s2 is at the end.  */
 tstnbz t0
 /* If at the end, goto 3f (finish comparing).  */
 bf 3f

 ldw t0, (a3, 4)
 ldw t1, (a1, 4)
 cmpne t0, t1
 bt 2f
 tstnbz t0
 bf 3f

 ldw t0, (a3, 8)
 ldw t1, (a1, 8)
 cmpne t0, t1
 bt 2f
 tstnbz t0
 bf 3f

 ldw t0, (a3, 12)
 ldw t1, (a1, 12)
 cmpne t0, t1
 bt 2f
 tstnbz t0
 bf 3f

 ldw t0, (a3, 16)
 ldw t1, (a1, 16)
 cmpne t0, t1
 bt 2f
 tstnbz t0
 bf 3f

 ldw t0, (a3, 20)
 ldw t1, (a1, 20)
 cmpne t0, t1
 bt 2f
 tstnbz t0
 bf 3f

 ldw t0, (a3, 24)
 ldw t1, (a1, 24)
 cmpne t0, t1
 bt 2f
 tstnbz t0
 bf 3f

 ldw t0, (a3, 28)
 ldw t1, (a1, 28)
 cmpne t0, t1
 bt 2f
 tstnbz t0
 bf 3f

 addi a3, 32
 addi a1, 32

 br 1b

# ifdef __CSKYBE__
 /* d[i] != s[i] in word, so we check byte 0.  */
2:
 xtrb0   a0, t0
 xtrb0   a2, t1
 subu    a0, a2
 bez     a2, 4f
 bnez    a0, 4f

 /* check byte 1 */
 xtrb1   a0, t0
 xtrb1   a2, t1
 subu    a0, a2
 bez     a2, 4f
 bnez    a0, 4f

 /* check byte 2 */
 xtrb2   a0, t0
 xtrb2   a2, t1
 subu    a0, a2
 bez     a2, 4f
 bnez    a0, 4f

 /* check byte 3 */
 xtrb3   a0, t0
 xtrb3   a2, t1
 subu    a0, a2
# else
 /* s1[i] != s2[i] in word, so we check byte 3.  */
2:
 xtrb3 a0, t0
 xtrb3 a2, t1
 subu    a0, a2
 bez     a2, 4f
 bnez    a0, 4f

 /* check byte 2 */
 xtrb2 a0, t0
 xtrb2 a2, t1
 subu    a0, a2
 bez     a2, 4f
 bnez    a0, 4f

 /* check byte 1 */
 xtrb1 a0, t0
 xtrb1 a2, t1
 subu a0, a2
 bez a2, 4f
 bnez    a0, 4f

 /* check byte 0 */
 xtrb0 a0, t0
 xtrb0 a2, t1
 subu a0, a2

# endif /* !__CSKYBE__ */
 jmp     lr
3:
 movi a0, 0
4:
 jmp     lr

 /* Compare when s1 or s2 is not aligned.  */
5:
 subi    t1, 4
6:
 ldb a0, (a3, 0)
 ldb a2, (a1, 0)
 subu a0, a2
 bez a2, 4b
 bnez a0, 4b
 addi    t1, 1
 addi a1, 1
 addi a3, 1
 bnez t1, 6b
 br 1b

7:
 ldb a0, (a3, 0)
 addi a3, 1
 ldb a2, (a1, 0)
 addi a1, 1
 subu    a0, a2
 bnez    a0, 4b
 bnez a2, 7b
 jmp r15
ENDPROC(strcmp)

Messung V0.5
C=95 H=98 G=96

¤ Dauer der Verarbeitung: 0.2 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.