1e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/*
2e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Copyright (C) 2002 Paul Mackerras, IBM Corp.
3e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng *
4e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * This program is free software; you can redistribute it and/or
5e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * modify it under the terms of the GNU General Public License
6e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * as published by the Free Software Foundation; either version
7e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 2 of the License, or (at your option) any later version.
8e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */
9e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <asm/processor.h>
10e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <asm/ppc_asm.h>
11e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
12e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	.align	7
13e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng_GLOBAL(memcpy)
14e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengBEGIN_FTR_SECTION
15e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	std	r3,48(r1)	/* save destination pointer for return value */
16e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengFTR_SECTION_ELSE
17e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	b	memcpy_power7
18e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengALT_FTR_SECTION_END_IFCLR(CPU_FTR_VMX_COPY)
19e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	PPC_MTOCRF(0x01,r5)
20e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	cmpldi	cr1,r5,16
21e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	neg	r6,r3		# LS 3 bits = # bytes to 8-byte dest bdry
22e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	andi.	r6,r6,7
23e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	dcbt	0,r4
24e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	blt	cr1,.Lshort_copy
25e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* Below we want to nop out the bne if we're on a CPU that has the
26e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng   CPU_FTR_UNALIGNED_LD_STD bit set and the CPU_FTR_CP_USE_DCBTZ bit
27e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng   cleared.
28e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng   At the time of writing the only CPU that has this combination of bits
29e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng   set is Power6. */
30e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengBEGIN_FTR_SECTION
31e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	nop
32e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengFTR_SECTION_ELSE
33e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	bne	.Ldst_unaligned
34e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengALT_FTR_SECTION_END(CPU_FTR_UNALIGNED_LD_STD | CPU_FTR_CP_USE_DCBTZ, \
35e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng                    CPU_FTR_UNALIGNED_LD_STD)
36e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng.Ldst_aligned:
37e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r3,r3,-16
38e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengBEGIN_FTR_SECTION
39e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	andi.	r0,r4,7
40e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	bne	.Lsrc_unaligned
41e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengEND_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD)
42e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	srdi	r7,r5,4
43e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	ld	r9,0(r4)
44e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r4,r4,-8
45e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	mtctr	r7
46e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	andi.	r5,r5,7
47e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	bf	cr7*4+0,2f
48e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r3,r3,8
49e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r4,r4,8
50e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	mr	r8,r9
51e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	blt	cr1,3f
52e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng1:	ld	r9,8(r4)
53e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	std	r8,8(r3)
54e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng2:	ldu	r8,16(r4)
55e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	stdu	r9,16(r3)
56e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	bdnz	1b
57e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng3:	std	r8,8(r3)
58e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	beq	3f
59e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r3,r3,16
60e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng.Ldo_tail:
61e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	bf	cr7*4+1,1f
62e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	lwz	r9,8(r4)
63e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r4,r4,4
64e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	stw	r9,0(r3)
65e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r3,r3,4
66e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng1:	bf	cr7*4+2,2f
67e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	lhz	r9,8(r4)
68e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r4,r4,2
69e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	sth	r9,0(r3)
70e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r3,r3,2
71e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng2:	bf	cr7*4+3,3f
72e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	lbz	r9,8(r4)
73e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	stb	r9,0(r3)
74e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng3:	ld	r3,48(r1)	/* return dest pointer */
75e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	blr
76e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
77e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng.Lsrc_unaligned:
78e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	srdi	r6,r5,3
79e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r5,r5,-16
80e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	subf	r4,r0,r4
81e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	srdi	r7,r5,4
82e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	sldi	r10,r0,3
83e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	cmpdi	cr6,r6,3
84e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	andi.	r5,r5,7
85e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	mtctr	r7
86e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	subfic	r11,r10,64
87e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	add	r5,r5,r0
88e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
89e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	bt	cr7*4+0,0f
90e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
91e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	ld	r9,0(r4)	# 3+2n loads, 2+2n stores
92e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	ld	r0,8(r4)
93e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	sld	r6,r9,r10
94e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	ldu	r9,16(r4)
95e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	srd	r7,r0,r11
96e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	sld	r8,r0,r10
97e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	or	r7,r7,r6
98e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	blt	cr6,4f
99e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	ld	r0,8(r4)
100e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	# s1<< in r8, d0=(s0<<|s1>>) in r7, s3 in r0, s2 in r9, nix in r6 & r12
101e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	b	2f
102e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
103e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng0:	ld	r0,0(r4)	# 4+2n loads, 3+2n stores
104e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	ldu	r9,8(r4)
105e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	sld	r8,r0,r10
106e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r3,r3,-8
107e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	blt	cr6,5f
108e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	ld	r0,8(r4)
109e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	srd	r12,r9,r11
110e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	sld	r6,r9,r10
111e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	ldu	r9,16(r4)
112e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	or	r12,r8,r12
113e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	srd	r7,r0,r11
114e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	sld	r8,r0,r10
115e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r3,r3,16
116e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	beq	cr6,3f
117e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
118e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	# d0=(s0<<|s1>>) in r12, s1<< in r6, s2>> in r7, s2<< in r8, s3 in r9
119e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng1:	or	r7,r7,r6
120e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	ld	r0,8(r4)
121e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	std	r12,8(r3)
122e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng2:	srd	r12,r9,r11
123e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	sld	r6,r9,r10
124e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	ldu	r9,16(r4)
125e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	or	r12,r8,r12
126e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	stdu	r7,16(r3)
127e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	srd	r7,r0,r11
128e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	sld	r8,r0,r10
129e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	bdnz	1b
130e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
131e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng3:	std	r12,8(r3)
132e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	or	r7,r7,r6
133e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng4:	std	r7,16(r3)
134e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng5:	srd	r12,r9,r11
135e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	or	r12,r8,r12
136e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	std	r12,24(r3)
137e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	beq	4f
138e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	cmpwi	cr1,r5,8
139e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r3,r3,32
140e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	sld	r9,r9,r10
141e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	ble	cr1,6f
142e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	ld	r0,8(r4)
143e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	srd	r7,r0,r11
144e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	or	r9,r7,r9
145e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng6:
146e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	bf	cr7*4+1,1f
147e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	rotldi	r9,r9,32
148e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	stw	r9,0(r3)
149e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r3,r3,4
150e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng1:	bf	cr7*4+2,2f
151e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	rotldi	r9,r9,16
152e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	sth	r9,0(r3)
153e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r3,r3,2
154e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng2:	bf	cr7*4+3,3f
155e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	rotldi	r9,r9,8
156e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	stb	r9,0(r3)
157e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng3:	ld	r3,48(r1)	/* return dest pointer */
158e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	blr
159e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
160e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng.Ldst_unaligned:
161e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	PPC_MTOCRF(0x01,r6)		# put #bytes to 8B bdry into cr7
162e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	subf	r5,r6,r5
163e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	li	r7,0
164e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	cmpldi	cr1,r5,16
165e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	bf	cr7*4+3,1f
166e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	lbz	r0,0(r4)
167e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	stb	r0,0(r3)
168e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r7,r7,1
169e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng1:	bf	cr7*4+2,2f
170e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	lhzx	r0,r7,r4
171e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	sthx	r0,r7,r3
172e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r7,r7,2
173e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng2:	bf	cr7*4+1,3f
174e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	lwzx	r0,r7,r4
175e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	stwx	r0,r7,r3
176e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng3:	PPC_MTOCRF(0x01,r5)
177e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	add	r4,r6,r4
178e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	add	r3,r6,r3
179e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	b	.Ldst_aligned
180e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
181e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng.Lshort_copy:
182e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	bf	cr7*4+0,1f
183e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	lwz	r0,0(r4)
184e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	lwz	r9,4(r4)
185e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r4,r4,8
186e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	stw	r0,0(r3)
187e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	stw	r9,4(r3)
188e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r3,r3,8
189e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng1:	bf	cr7*4+1,2f
190e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	lwz	r0,0(r4)
191e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r4,r4,4
192e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	stw	r0,0(r3)
193e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r3,r3,4
194e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng2:	bf	cr7*4+2,3f
195e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	lhz	r0,0(r4)
196e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r4,r4,2
197e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	sth	r0,0(r3)
198e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	addi	r3,r3,2
199e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng3:	bf	cr7*4+3,4f
200e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	lbz	r0,0(r4)
201e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	stb	r0,0(r3)
202e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng4:	ld	r3,48(r1)	/* return dest pointer */
203e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	blr
204