PageRenderTime 39ms CodeModel.GetById 17ms app.highlight 16ms RepoModel.GetById 1ms app.codeStats 1ms

/arch/ppc/boot/common/string.S

https://bitbucket.org/evzijst/gittest
Assembly | 150 lines | 144 code | 6 blank | 0 comment | 2 complexity | d8c102dd0ff8426be2c15cfdedb9c2e4 MD5 | raw file
  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#define r0	0
 12#define r3	3
 13#define r4	4
 14#define r5	5
 15#define r6	6
 16#define r7	7
 17#define r8	8
 18
 19	.globl	strlen
 20strlen:
 21	addi	r4,r3,-1
 221:	lbzu	r0,1(r4)
 23	cmpwi	0,r0,0
 24	bne	1b
 25	subf	r3,r3,r4
 26	blr
 27
 28	.globl	memset
 29memset:
 30	rlwimi	r4,r4,8,16,23
 31	rlwimi	r4,r4,16,0,15
 32	addi	r6,r3,-4
 33	cmplwi	0,r5,4
 34	blt	7f
 35	stwu	r4,4(r6)
 36	beqlr
 37	andi.	r0,r6,3
 38	add	r5,r0,r5
 39	subf	r6,r0,r6
 40	rlwinm	r0,r5,32-2,2,31
 41	mtctr	r0
 42	bdz	6f
 431:	stwu	r4,4(r6)
 44	bdnz	1b
 456:	andi.	r5,r5,3
 467:	cmpwi	0,r5,0
 47	beqlr
 48	mtctr	r5
 49	addi	r6,r6,3
 508:	stbu	r4,1(r6)
 51	bdnz	8b
 52	blr
 53
 54	.globl	memmove
 55memmove:
 56	cmplw	0,r3,r4
 57	bgt	backwards_memcpy
 58	/* fall through */
 59
 60	.globl	memcpy
 61memcpy:
 62	rlwinm.	r7,r5,32-3,3,31		/* r0 = r5 >> 3 */
 63	addi	r6,r3,-4
 64	addi	r4,r4,-4
 65	beq	2f			/* if less than 8 bytes to do */
 66	andi.	r0,r6,3			/* get dest word aligned */
 67	mtctr	r7
 68	bne	5f
 691:	lwz	r7,4(r4)
 70	lwzu	r8,8(r4)
 71	stw	r7,4(r6)
 72	stwu	r8,8(r6)
 73	bdnz	1b
 74	andi.	r5,r5,7
 752:	cmplwi	0,r5,4
 76	blt	3f
 77	lwzu	r0,4(r4)
 78	addi	r5,r5,-4
 79	stwu	r0,4(r6)
 803:	cmpwi	0,r5,0
 81	beqlr
 82	mtctr	r5
 83	addi	r4,r4,3
 84	addi	r6,r6,3
 854:	lbzu	r0,1(r4)
 86	stbu	r0,1(r6)
 87	bdnz	4b
 88	blr
 895:	subfic	r0,r0,4
 90	mtctr	r0
 916:	lbz	r7,4(r4)
 92	addi	r4,r4,1
 93	stb	r7,4(r6)
 94	addi	r6,r6,1
 95	bdnz	6b
 96	subf	r5,r0,r5
 97	rlwinm.	r7,r5,32-3,3,31
 98	beq	2b
 99	mtctr	r7
100	b	1b
101
102	.globl	backwards_memcpy
103backwards_memcpy:
104	rlwinm.	r7,r5,32-3,3,31		/* r0 = r5 >> 3 */
105	add	r6,r3,r5
106	add	r4,r4,r5
107	beq	2f
108	andi.	r0,r6,3
109	mtctr	r7
110	bne	5f
1111:	lwz	r7,-4(r4)
112	lwzu	r8,-8(r4)
113	stw	r7,-4(r6)
114	stwu	r8,-8(r6)
115	bdnz	1b
116	andi.	r5,r5,7
1172:	cmplwi	0,r5,4
118	blt	3f
119	lwzu	r0,-4(r4)
120	subi	r5,r5,4
121	stwu	r0,-4(r6)
1223:	cmpwi	0,r5,0
123	beqlr
124	mtctr	r5
1254:	lbzu	r0,-1(r4)
126	stbu	r0,-1(r6)
127	bdnz	4b
128	blr
1295:	mtctr	r0
1306:	lbzu	r7,-1(r4)
131	stbu	r7,-1(r6)
132	bdnz	6b
133	subf	r5,r0,r5
134	rlwinm.	r7,r5,32-3,3,31
135	beq	2b
136	mtctr	r7
137	b	1b
138
139	.globl	memcmp
140memcmp:
141	cmpwi	0,r5,0
142	blelr
143	mtctr	r5
144	addi	r6,r3,-1
145	addi	r4,r4,-1
1461:	lbzu	r3,1(r6)
147	lbzu	r0,1(r4)
148	subf.	r3,r0,r3
149	bdnzt	2,1b
150	blr