162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci/*
462306a36Sopenharmony_ci * memcmp for PowerPC32
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Copyright (C) 1996 Paul Mackerras.
762306a36Sopenharmony_ci *
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include <linux/export.h>
1162306a36Sopenharmony_ci#include <asm/ppc_asm.h>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci	.text
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci_GLOBAL(memcmp)
1662306a36Sopenharmony_ci	srawi.	r7, r5, 2		/* Divide len by 4 */
1762306a36Sopenharmony_ci	mr	r6, r3
1862306a36Sopenharmony_ci	beq-	3f
1962306a36Sopenharmony_ci	mtctr	r7
2062306a36Sopenharmony_ci	li	r7, 0
2162306a36Sopenharmony_ci1:	lwzx	r3, r6, r7
2262306a36Sopenharmony_ci	lwzx	r0, r4, r7
2362306a36Sopenharmony_ci	addi	r7, r7, 4
2462306a36Sopenharmony_ci	cmplw	cr0, r3, r0
2562306a36Sopenharmony_ci	bdnzt	eq, 1b
2662306a36Sopenharmony_ci	bne	5f
2762306a36Sopenharmony_ci3:	andi.	r3, r5, 3
2862306a36Sopenharmony_ci	beqlr
2962306a36Sopenharmony_ci	cmplwi	cr1, r3, 2
3062306a36Sopenharmony_ci	blt-	cr1, 4f
3162306a36Sopenharmony_ci	lhzx	r3, r6, r7
3262306a36Sopenharmony_ci	lhzx	r0, r4, r7
3362306a36Sopenharmony_ci	addi	r7, r7, 2
3462306a36Sopenharmony_ci	subf.	r3, r0, r3
3562306a36Sopenharmony_ci	beqlr	cr1
3662306a36Sopenharmony_ci	bnelr
3762306a36Sopenharmony_ci4:	lbzx	r3, r6, r7
3862306a36Sopenharmony_ci	lbzx	r0, r4, r7
3962306a36Sopenharmony_ci	subf.	r3, r0, r3
4062306a36Sopenharmony_ci	blr
4162306a36Sopenharmony_ci5:	li	r3, 1
4262306a36Sopenharmony_ci	bgtlr
4362306a36Sopenharmony_ci	li	r3, -1
4462306a36Sopenharmony_ci	blr
4562306a36Sopenharmony_ciEXPORT_SYMBOL(memcmp)
46