18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci
38c2ecf20Sopenharmony_ci/*
48c2ecf20Sopenharmony_ci * memcmp for PowerPC32
58c2ecf20Sopenharmony_ci *
68c2ecf20Sopenharmony_ci * Copyright (C) 1996 Paul Mackerras.
78c2ecf20Sopenharmony_ci *
88c2ecf20Sopenharmony_ci */
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci#include <asm/ppc_asm.h>
118c2ecf20Sopenharmony_ci#include <asm/export.h>
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci	.text
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci_GLOBAL(memcmp)
168c2ecf20Sopenharmony_ci	srawi.	r7, r5, 2		/* Divide len by 4 */
178c2ecf20Sopenharmony_ci	mr	r6, r3
188c2ecf20Sopenharmony_ci	beq-	3f
198c2ecf20Sopenharmony_ci	mtctr	r7
208c2ecf20Sopenharmony_ci	li	r7, 0
218c2ecf20Sopenharmony_ci1:	lwzx	r3, r6, r7
228c2ecf20Sopenharmony_ci	lwzx	r0, r4, r7
238c2ecf20Sopenharmony_ci	addi	r7, r7, 4
248c2ecf20Sopenharmony_ci	cmplw	cr0, r3, r0
258c2ecf20Sopenharmony_ci	bdnzt	eq, 1b
268c2ecf20Sopenharmony_ci	bne	5f
278c2ecf20Sopenharmony_ci3:	andi.	r3, r5, 3
288c2ecf20Sopenharmony_ci	beqlr
298c2ecf20Sopenharmony_ci	cmplwi	cr1, r3, 2
308c2ecf20Sopenharmony_ci	blt-	cr1, 4f
318c2ecf20Sopenharmony_ci	lhzx	r3, r6, r7
328c2ecf20Sopenharmony_ci	lhzx	r0, r4, r7
338c2ecf20Sopenharmony_ci	addi	r7, r7, 2
348c2ecf20Sopenharmony_ci	subf.	r3, r0, r3
358c2ecf20Sopenharmony_ci	beqlr	cr1
368c2ecf20Sopenharmony_ci	bnelr
378c2ecf20Sopenharmony_ci4:	lbzx	r3, r6, r7
388c2ecf20Sopenharmony_ci	lbzx	r0, r4, r7
398c2ecf20Sopenharmony_ci	subf.	r3, r0, r3
408c2ecf20Sopenharmony_ci	blr
418c2ecf20Sopenharmony_ci5:	li	r3, 1
428c2ecf20Sopenharmony_ci	bgtlr
438c2ecf20Sopenharmony_ci	li	r3, -1
448c2ecf20Sopenharmony_ci	blr
458c2ecf20Sopenharmony_ciEXPORT_SYMBOL(memcmp)
46