Linux Audio

Check our new training course

Loading...
v4.17
 
  1/*
  2 * String handling functions for PowerPC.
  3 *
  4 * Copyright (C) 1996 Paul Mackerras.
  5 *
  6 * This program is free software; you can redistribute it and/or
  7 * modify it under the terms of the GNU General Public License
  8 * as published by the Free Software Foundation; either version
  9 * 2 of the License, or (at your option) any later version.
 10 */
 
 11#include <asm/processor.h>
 12#include <asm/errno.h>
 13#include <asm/ppc_asm.h>
 14#include <asm/export.h>
 15
 
 16_GLOBAL(__memset16)
 17	rlwimi	r4,r4,16,0,15
 18	/* fall through */
 19
 20_GLOBAL(__memset32)
 21	rldimi	r4,r4,32,0
 22	/* fall through */
 23
 24_GLOBAL(__memset64)
 25	neg	r0,r3
 26	andi.	r0,r0,7
 27	cmplw	cr1,r5,r0
 28	b	.Lms
 29EXPORT_SYMBOL(__memset16)
 30EXPORT_SYMBOL(__memset32)
 31EXPORT_SYMBOL(__memset64)
 
 32
 33_GLOBAL(memset)
 34	neg	r0,r3
 35	rlwimi	r4,r4,8,16,23
 36	andi.	r0,r0,7			/* # bytes to be 8-byte aligned */
 37	rlwimi	r4,r4,16,0,15
 38	cmplw	cr1,r5,r0		/* do we get that far? */
 39	rldimi	r4,r4,32,0
 40.Lms:	PPC_MTOCRF(1,r0)
 41	mr	r6,r3
 42	blt	cr1,8f
 43	beq+	3f			/* if already 8-byte aligned */
 44	subf	r5,r0,r5
 45	bf	31,1f
 46	stb	r4,0(r6)
 47	addi	r6,r6,1
 481:	bf	30,2f
 49	sth	r4,0(r6)
 50	addi	r6,r6,2
 512:	bf	29,3f
 52	stw	r4,0(r6)
 53	addi	r6,r6,4
 543:	srdi.	r0,r5,6
 55	clrldi	r5,r5,58
 56	mtctr	r0
 57	beq	5f
 58	.balign 16
 594:	std	r4,0(r6)
 60	std	r4,8(r6)
 61	std	r4,16(r6)
 62	std	r4,24(r6)
 63	std	r4,32(r6)
 64	std	r4,40(r6)
 65	std	r4,48(r6)
 66	std	r4,56(r6)
 67	addi	r6,r6,64
 68	bdnz	4b
 695:	srwi.	r0,r5,3
 70	clrlwi	r5,r5,29
 71	PPC_MTOCRF(1,r0)
 72	beq	8f
 73	bf	29,6f
 74	std	r4,0(r6)
 75	std	r4,8(r6)
 76	std	r4,16(r6)
 77	std	r4,24(r6)
 78	addi	r6,r6,32
 796:	bf	30,7f
 80	std	r4,0(r6)
 81	std	r4,8(r6)
 82	addi	r6,r6,16
 837:	bf	31,8f
 84	std	r4,0(r6)
 85	addi	r6,r6,8
 868:	cmpwi	r5,0
 87	PPC_MTOCRF(1,r5)
 88	beqlr+
 89	bf	29,9f
 90	stw	r4,0(r6)
 91	addi	r6,r6,4
 929:	bf	30,10f
 93	sth	r4,0(r6)
 94	addi	r6,r6,2
 9510:	bflr	31
 96	stb	r4,0(r6)
 97	blr
 98EXPORT_SYMBOL(memset)
 
 99
100_GLOBAL_TOC(memmove)
101	cmplw	0,r3,r4
102	bgt	backwards_memcpy
103	b	memcpy
104
105_GLOBAL(backwards_memcpy)
106	rlwinm.	r7,r5,32-3,3,31		/* r0 = r5 >> 3 */
107	add	r6,r3,r5
108	add	r4,r4,r5
109	beq	2f
110	andi.	r0,r6,3
111	mtctr	r7
112	bne	5f
113	.balign 16
1141:	lwz	r7,-4(r4)
115	lwzu	r8,-8(r4)
116	stw	r7,-4(r6)
117	stwu	r8,-8(r6)
118	bdnz	1b
119	andi.	r5,r5,7
1202:	cmplwi	0,r5,4
121	blt	3f
122	lwzu	r0,-4(r4)
123	subi	r5,r5,4
124	stwu	r0,-4(r6)
1253:	cmpwi	0,r5,0
126	beqlr
127	mtctr	r5
1284:	lbzu	r0,-1(r4)
129	stbu	r0,-1(r6)
130	bdnz	4b
131	blr
1325:	mtctr	r0
1336:	lbzu	r7,-1(r4)
134	stbu	r7,-1(r6)
135	bdnz	6b
136	subf	r5,r0,r5
137	rlwinm.	r7,r5,32-3,3,31
138	beq	2b
139	mtctr	r7
140	b	1b
141EXPORT_SYMBOL(memmove)
v6.13.7
  1/* SPDX-License-Identifier: GPL-2.0-or-later */
  2/*
  3 * String handling functions for PowerPC.
  4 *
  5 * Copyright (C) 1996 Paul Mackerras.
 
 
 
 
 
  6 */
  7#include <linux/export.h>
  8#include <asm/processor.h>
  9#include <asm/errno.h>
 10#include <asm/ppc_asm.h>
 11#include <asm/kasan.h>
 12
 13#ifndef CONFIG_KASAN
 14_GLOBAL(__memset16)
 15	rlwimi	r4,r4,16,0,15
 16	/* fall through */
 17
 18_GLOBAL(__memset32)
 19	rldimi	r4,r4,32,0
 20	/* fall through */
 21
 22_GLOBAL(__memset64)
 23	neg	r0,r3
 24	andi.	r0,r0,7
 25	cmplw	cr1,r5,r0
 26	b	.Lms
 27EXPORT_SYMBOL(__memset16)
 28EXPORT_SYMBOL(__memset32)
 29EXPORT_SYMBOL(__memset64)
 30#endif
 31
 32_GLOBAL_KASAN(memset)
 33	neg	r0,r3
 34	rlwimi	r4,r4,8,16,23
 35	andi.	r0,r0,7			/* # bytes to be 8-byte aligned */
 36	rlwimi	r4,r4,16,0,15
 37	cmplw	cr1,r5,r0		/* do we get that far? */
 38	rldimi	r4,r4,32,0
 39.Lms:	PPC_MTOCRF(1,r0)
 40	mr	r6,r3
 41	blt	cr1,8f
 42	beq	3f			/* if already 8-byte aligned */
 43	subf	r5,r0,r5
 44	bf	31,1f
 45	stb	r4,0(r6)
 46	addi	r6,r6,1
 471:	bf	30,2f
 48	sth	r4,0(r6)
 49	addi	r6,r6,2
 502:	bf	29,3f
 51	stw	r4,0(r6)
 52	addi	r6,r6,4
 533:	srdi.	r0,r5,6
 54	clrldi	r5,r5,58
 55	mtctr	r0
 56	beq	5f
 57	.balign 16
 584:	std	r4,0(r6)
 59	std	r4,8(r6)
 60	std	r4,16(r6)
 61	std	r4,24(r6)
 62	std	r4,32(r6)
 63	std	r4,40(r6)
 64	std	r4,48(r6)
 65	std	r4,56(r6)
 66	addi	r6,r6,64
 67	bdnz	4b
 685:	srwi.	r0,r5,3
 69	clrlwi	r5,r5,29
 70	PPC_MTOCRF(1,r0)
 71	beq	8f
 72	bf	29,6f
 73	std	r4,0(r6)
 74	std	r4,8(r6)
 75	std	r4,16(r6)
 76	std	r4,24(r6)
 77	addi	r6,r6,32
 786:	bf	30,7f
 79	std	r4,0(r6)
 80	std	r4,8(r6)
 81	addi	r6,r6,16
 827:	bf	31,8f
 83	std	r4,0(r6)
 84	addi	r6,r6,8
 858:	cmpwi	r5,0
 86	PPC_MTOCRF(1,r5)
 87	beqlr
 88	bf	29,9f
 89	stw	r4,0(r6)
 90	addi	r6,r6,4
 919:	bf	30,10f
 92	sth	r4,0(r6)
 93	addi	r6,r6,2
 9410:	bflr	31
 95	stb	r4,0(r6)
 96	blr
 97EXPORT_SYMBOL(memset)
 98EXPORT_SYMBOL_KASAN(memset)
 99
100_GLOBAL_TOC_KASAN(memmove)
101	cmplw	0,r3,r4
102	bgt	backwards_memcpy
103	b	memcpy
104
105_GLOBAL(backwards_memcpy)
106	rlwinm.	r7,r5,32-3,3,31		/* r0 = r5 >> 3 */
107	add	r6,r3,r5
108	add	r4,r4,r5
109	beq	2f
110	andi.	r0,r6,3
111	mtctr	r7
112	bne	5f
113	.balign 16
1141:	lwz	r7,-4(r4)
115	lwzu	r8,-8(r4)
116	stw	r7,-4(r6)
117	stwu	r8,-8(r6)
118	bdnz	1b
119	andi.	r5,r5,7
1202:	cmplwi	0,r5,4
121	blt	3f
122	lwzu	r0,-4(r4)
123	subi	r5,r5,4
124	stwu	r0,-4(r6)
1253:	cmpwi	0,r5,0
126	beqlr
127	mtctr	r5
1284:	lbzu	r0,-1(r4)
129	stbu	r0,-1(r6)
130	bdnz	4b
131	blr
1325:	mtctr	r0
1336:	lbzu	r7,-1(r4)
134	stbu	r7,-1(r6)
135	bdnz	6b
136	subf	r5,r0,r5
137	rlwinm.	r7,r5,32-3,3,31
138	beq	2b
139	mtctr	r7
140	b	1b
141EXPORT_SYMBOL(memmove)
142EXPORT_SYMBOL_KASAN(memmove)