Path: blob/main/contrib/arm-optimized-routines/string/arm/strcmp-armv6m.S
39555 views
/*1* strcmp for ARMv6-M (optimized for performance, not size)2*3* Copyright (c) 2014-2022, Arm Limited.4* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception5*/67#include "asmdefs.h"89#if __ARM_ARCH == 6 && __ARM_ARCH_6M__ >= 11011.thumb_func12.syntax unified13.arch armv6-m1415.macro DoSub n, label16subs r0, r0, r117#ifdef __ARM_BIG_ENDIAN18lsrs r1, r4, \n19#else20lsls r1, r4, \n21#endif22orrs r1, r023bne \label24.endm2526.macro Byte_Test n, label27lsrs r0, r2, \n28lsrs r1, r3, \n29DoSub \n, \label30.endm3132ENTRY_ALIGN (__strcmp_armv6m, 4)33mov r2, r034push {r4, r5, r6, lr}35orrs r2, r136lsls r2, r2, #3037bne 6f38ldr r5, =0x0101010139lsls r6, r5, #7401:41ldmia r0!, {r2}42ldmia r1!, {r3}43subs r4, r2, r544bics r4, r245ands r4, r646beq 3f4748#ifdef __ARM_BIG_ENDIAN49Byte_Test #24, 4f50Byte_Test #16, 4f51Byte_Test #8, 4f5253b 7f543:55cmp r2, r356beq 1b57cmp r2, r358#else59uxtb r0, r260uxtb r1, r361DoSub #24, 2f6263uxth r0, r264uxth r1, r365DoSub #16, 2f6667lsls r0, r2, #868lsls r1, r3, #869lsrs r0, r0, #870lsrs r1, r1, #871DoSub #8, 2f7273lsrs r0, r2, #2474lsrs r1, r3, #2475subs r0, r0, r1762:77pop {r4, r5, r6, pc}78793:80cmp r2, r381beq 1b82rev r0, r283rev r1, r384cmp r0, r185#endif8687bls 5f88movs r0, #1894:90pop {r4, r5, r6, pc}915:92movs r0, #093mvns r0, r094pop {r4, r5, r6, pc}956:96ldrb r2, [r0, #0]97ldrb r3, [r1, #0]98adds r0, #199adds r1, #1100cmp r2, #0101beq 7f102cmp r2, r3103bne 7f104ldrb r2, [r0, #0]105ldrb r3, [r1, #0]106adds r0, #1107adds r1, #1108cmp r2, #0109beq 7f110cmp r2, r3111beq 6b1127:113subs r0, r2, r3114pop {r4, r5, r6, pc}115116END (__strcmp_armv6m)117118#endif /* __ARM_ARCH == 6 && __ARM_ARCH_6M__ >= 1 */119120121