Linux Audio

Check our new training course

Loading...
v6.2
  1/* SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-2.0
  2
  3   Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
  4   2004, 2005, 2006
  5   Free Software Foundation, Inc.
  6*/
  7
  8!! libgcc routines for the Renesas / SuperH SH CPUs.
  9!! Contributed by Steve Chamberlain.
 10!! sac@cygnus.com
 11
 12!! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines
 13!! recoded in assembly by Toshiyasu Morita
 14!! tm@netcom.com
 15
 16/* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and
 17   ELF local label prefixes by J"orn Rennecke
 18   amylaar@cygnus.com  */
 19
 20	.text
 21	.balign	4
 22	.global	__movmem
 23	.global __movstr
 24	.set __movstr, __movmem	
 25	/* This would be a lot simpler if r6 contained the byte count
 26	   minus 64, and we wouldn't be called here for a byte count of 64.  */
 27__movmem:
 28	sts.l	pr,@-r15
 29	shll2	r6
 30	bsr	__movmemSI52+2
 31	mov.l	@(48,r5),r0
 32	.balign	4
 33movmem_loop: /* Reached with rts */
 34	mov.l	@(60,r5),r0
 35	add	#-64,r6
 36	mov.l	r0,@(60,r4)
 37	tst	r6,r6
 38	mov.l	@(56,r5),r0
 39	bt	movmem_done
 40	mov.l	r0,@(56,r4)
 41	cmp/pl	r6
 42	mov.l	@(52,r5),r0
 43	add	#64,r5
 44	mov.l	r0,@(52,r4)
 45	add	#64,r4
 46	bt	__movmemSI52
 47! done all the large groups, do the remainder
 48! jump to movmem+
 49	mova	__movmemSI4+4,r0
 50	add	r6,r0
 51	jmp	@r0
 52movmem_done: ! share slot insn, works out aligned.
 53	lds.l	@r15+,pr
 54	mov.l	r0,@(56,r4)
 55	mov.l	@(52,r5),r0
 56	rts
 57	mov.l	r0,@(52,r4)
 58	.balign	4
 59
 60	.global	__movmemSI64
 61	.global __movstrSI64
 62	.set	__movstrSI64, __movmemSI64
 63__movmemSI64:
 64	mov.l	@(60,r5),r0
 65	mov.l	r0,@(60,r4)
 66	.global	__movmemSI60
 67	.global __movstrSI60
 68	.set	__movstrSI60, __movmemSI60
 69__movmemSI60:
 70	mov.l	@(56,r5),r0
 71	mov.l	r0,@(56,r4)
 72	.global	__movmemSI56
 73	.global __movstrSI56
 74	.set	__movstrSI56, __movmemSI56
 75__movmemSI56:
 76	mov.l	@(52,r5),r0
 77	mov.l	r0,@(52,r4)
 78	.global	__movmemSI52
 79	.global __movstrSI52
 80	.set	__movstrSI52, __movmemSI52
 81__movmemSI52:
 82	mov.l	@(48,r5),r0
 83	mov.l	r0,@(48,r4)
 84	.global	__movmemSI48
 85	.global	__movstrSI48
 86	.set	__movstrSI48, __movmemSI48
 87__movmemSI48:
 88	mov.l	@(44,r5),r0
 89	mov.l	r0,@(44,r4)
 90	.global	__movmemSI44
 91	.global	__movstrSI44
 92	.set	__movstrSI44, __movmemSI44
 93__movmemSI44:
 94	mov.l	@(40,r5),r0
 95	mov.l	r0,@(40,r4)
 96	.global	__movmemSI40
 97	.global __movstrSI40
 98	.set	__movstrSI40, __movmemSI40
 99__movmemSI40:
100	mov.l	@(36,r5),r0
101	mov.l	r0,@(36,r4)
102	.global	__movmemSI36
103	.global	__movstrSI36
104	.set	__movstrSI36, __movmemSI36
105__movmemSI36:
106	mov.l	@(32,r5),r0
107	mov.l	r0,@(32,r4)
108	.global	__movmemSI32
109	.global	__movstrSI32
110	.set	__movstrSI32, __movmemSI32
111__movmemSI32:
112	mov.l	@(28,r5),r0
113	mov.l	r0,@(28,r4)
114	.global	__movmemSI28
115	.global	__movstrSI28
116	.set	__movstrSI28, __movmemSI28
117__movmemSI28:
118	mov.l	@(24,r5),r0
119	mov.l	r0,@(24,r4)
120	.global	__movmemSI24
121	.global	__movstrSI24
122	.set	__movstrSI24, __movmemSI24
123__movmemSI24:
124	mov.l	@(20,r5),r0
125	mov.l	r0,@(20,r4)
126	.global	__movmemSI20
127	.global	__movstrSI20
128	.set	__movstrSI20, __movmemSI20
129__movmemSI20:
130	mov.l	@(16,r5),r0
131	mov.l	r0,@(16,r4)
132	.global	__movmemSI16
133	.global	__movstrSI16
134	.set	__movstrSI16, __movmemSI16
135__movmemSI16:
136	mov.l	@(12,r5),r0
137	mov.l	r0,@(12,r4)
138	.global	__movmemSI12
139	.global	__movstrSI12
140	.set	__movstrSI12, __movmemSI12
141__movmemSI12:
142	mov.l	@(8,r5),r0
143	mov.l	r0,@(8,r4)
144	.global	__movmemSI8
145	.global	__movstrSI8
146	.set	__movstrSI8, __movmemSI8
147__movmemSI8:
148	mov.l	@(4,r5),r0
149	mov.l	r0,@(4,r4)
150	.global	__movmemSI4
151	.global	__movstrSI4
152	.set	__movstrSI4, __movmemSI4
153__movmemSI4:
154	mov.l	@(0,r5),r0
155	rts
156	mov.l	r0,@(0,r4)
157
158	.global	__movmem_i4_even
159	.global	__movstr_i4_even
160	.set	__movstr_i4_even, __movmem_i4_even
161
162	.global	__movmem_i4_odd
163	.global	__movstr_i4_odd
164	.set	__movstr_i4_odd, __movmem_i4_odd
165
166	.global	__movmemSI12_i4
167	.global	__movstrSI12_i4
168	.set	__movstrSI12_i4, __movmemSI12_i4
169
170	.p2align	5
171L_movmem_2mod4_end:
172	mov.l	r0,@(16,r4)
173	rts
174	mov.l	r1,@(20,r4)
175
176	.p2align	2
177
178__movmem_i4_even:
179	mov.l	@r5+,r0
180	bra	L_movmem_start_even
181	mov.l	@r5+,r1
182
183__movmem_i4_odd:
184	mov.l	@r5+,r1
185	add	#-4,r4
186	mov.l	@r5+,r2
187	mov.l	@r5+,r3
188	mov.l	r1,@(4,r4)
189	mov.l	r2,@(8,r4)
190
191L_movmem_loop:
192	mov.l	r3,@(12,r4)
193	dt	r6
194	mov.l	@r5+,r0
195	bt/s	L_movmem_2mod4_end
196	mov.l	@r5+,r1
197	add	#16,r4
198L_movmem_start_even:
199	mov.l	@r5+,r2
200	mov.l	@r5+,r3
201	mov.l	r0,@r4
202	dt	r6
203	mov.l	r1,@(4,r4)
204	bf/s	L_movmem_loop
205	mov.l	r2,@(8,r4)
206	rts
207	mov.l	r3,@(12,r4)
208
209	.p2align	4
210__movmemSI12_i4:
211	mov.l	@r5,r0
212	mov.l	@(4,r5),r1
213	mov.l	@(8,r5),r2
214	mov.l	r0,@r4
215	mov.l	r1,@(4,r4)
216	rts
217	mov.l	r2,@(8,r4)
v6.8
  1/* SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-2.0
  2
  3   Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
  4   2004, 2005, 2006
  5   Free Software Foundation, Inc.
  6*/
  7
  8!! libgcc routines for the Renesas / SuperH SH CPUs.
  9!! Contributed by Steve Chamberlain.
 10!! sac@cygnus.com
 11
 12!! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines
 13!! recoded in assembly by Toshiyasu Morita
 14!! tm@netcom.com
 15
 16/* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and
 17   ELF local label prefixes by J"orn Rennecke
 18   amylaar@cygnus.com  */
 19
 20	.text
 21	.balign	4
 22	.global	__movmem
 23	.global __movstr
 24	.set __movstr, __movmem	
 25	/* This would be a lot simpler if r6 contained the byte count
 26	   minus 64, and we wouldn't be called here for a byte count of 64.  */
 27__movmem:
 28	sts.l	pr,@-r15
 29	shll2	r6
 30	bsr	__movmemSI52+2
 31	mov.l	@(48,r5),r0
 32	.balign	4
 33movmem_loop: /* Reached with rts */
 34	mov.l	@(60,r5),r0
 35	add	#-64,r6
 36	mov.l	r0,@(60,r4)
 37	tst	r6,r6
 38	mov.l	@(56,r5),r0
 39	bt	movmem_done
 40	mov.l	r0,@(56,r4)
 41	cmp/pl	r6
 42	mov.l	@(52,r5),r0
 43	add	#64,r5
 44	mov.l	r0,@(52,r4)
 45	add	#64,r4
 46	bt	__movmemSI52
 47! done all the large groups, do the remainder
 48! jump to movmem+
 49	mova	__movmemSI4+4,r0
 50	add	r6,r0
 51	jmp	@r0
 52movmem_done: ! share slot insn, works out aligned.
 53	lds.l	@r15+,pr
 54	mov.l	r0,@(56,r4)
 55	mov.l	@(52,r5),r0
 56	rts
 57	mov.l	r0,@(52,r4)
 58	.balign	4
 59
 60	.global	__movmemSI64
 61	.global __movstrSI64
 62	.set	__movstrSI64, __movmemSI64
 63__movmemSI64:
 64	mov.l	@(60,r5),r0
 65	mov.l	r0,@(60,r4)
 66	.global	__movmemSI60
 67	.global __movstrSI60
 68	.set	__movstrSI60, __movmemSI60
 69__movmemSI60:
 70	mov.l	@(56,r5),r0
 71	mov.l	r0,@(56,r4)
 72	.global	__movmemSI56
 73	.global __movstrSI56
 74	.set	__movstrSI56, __movmemSI56
 75__movmemSI56:
 76	mov.l	@(52,r5),r0
 77	mov.l	r0,@(52,r4)
 78	.global	__movmemSI52
 79	.global __movstrSI52
 80	.set	__movstrSI52, __movmemSI52
 81__movmemSI52:
 82	mov.l	@(48,r5),r0
 83	mov.l	r0,@(48,r4)
 84	.global	__movmemSI48
 85	.global	__movstrSI48
 86	.set	__movstrSI48, __movmemSI48
 87__movmemSI48:
 88	mov.l	@(44,r5),r0
 89	mov.l	r0,@(44,r4)
 90	.global	__movmemSI44
 91	.global	__movstrSI44
 92	.set	__movstrSI44, __movmemSI44
 93__movmemSI44:
 94	mov.l	@(40,r5),r0
 95	mov.l	r0,@(40,r4)
 96	.global	__movmemSI40
 97	.global __movstrSI40
 98	.set	__movstrSI40, __movmemSI40
 99__movmemSI40:
100	mov.l	@(36,r5),r0
101	mov.l	r0,@(36,r4)
102	.global	__movmemSI36
103	.global	__movstrSI36
104	.set	__movstrSI36, __movmemSI36
105__movmemSI36:
106	mov.l	@(32,r5),r0
107	mov.l	r0,@(32,r4)
108	.global	__movmemSI32
109	.global	__movstrSI32
110	.set	__movstrSI32, __movmemSI32
111__movmemSI32:
112	mov.l	@(28,r5),r0
113	mov.l	r0,@(28,r4)
114	.global	__movmemSI28
115	.global	__movstrSI28
116	.set	__movstrSI28, __movmemSI28
117__movmemSI28:
118	mov.l	@(24,r5),r0
119	mov.l	r0,@(24,r4)
120	.global	__movmemSI24
121	.global	__movstrSI24
122	.set	__movstrSI24, __movmemSI24
123__movmemSI24:
124	mov.l	@(20,r5),r0
125	mov.l	r0,@(20,r4)
126	.global	__movmemSI20
127	.global	__movstrSI20
128	.set	__movstrSI20, __movmemSI20
129__movmemSI20:
130	mov.l	@(16,r5),r0
131	mov.l	r0,@(16,r4)
132	.global	__movmemSI16
133	.global	__movstrSI16
134	.set	__movstrSI16, __movmemSI16
135__movmemSI16:
136	mov.l	@(12,r5),r0
137	mov.l	r0,@(12,r4)
138	.global	__movmemSI12
139	.global	__movstrSI12
140	.set	__movstrSI12, __movmemSI12
141__movmemSI12:
142	mov.l	@(8,r5),r0
143	mov.l	r0,@(8,r4)
144	.global	__movmemSI8
145	.global	__movstrSI8
146	.set	__movstrSI8, __movmemSI8
147__movmemSI8:
148	mov.l	@(4,r5),r0
149	mov.l	r0,@(4,r4)
150	.global	__movmemSI4
151	.global	__movstrSI4
152	.set	__movstrSI4, __movmemSI4
153__movmemSI4:
154	mov.l	@(0,r5),r0
155	rts
156	mov.l	r0,@(0,r4)
157
158	.global	__movmem_i4_even
159	.global	__movstr_i4_even
160	.set	__movstr_i4_even, __movmem_i4_even
161
162	.global	__movmem_i4_odd
163	.global	__movstr_i4_odd
164	.set	__movstr_i4_odd, __movmem_i4_odd
165
166	.global	__movmemSI12_i4
167	.global	__movstrSI12_i4
168	.set	__movstrSI12_i4, __movmemSI12_i4
169
170	.p2align	5
171L_movmem_2mod4_end:
172	mov.l	r0,@(16,r4)
173	rts
174	mov.l	r1,@(20,r4)
175
176	.p2align	2
177
178__movmem_i4_even:
179	mov.l	@r5+,r0
180	bra	L_movmem_start_even
181	mov.l	@r5+,r1
182
183__movmem_i4_odd:
184	mov.l	@r5+,r1
185	add	#-4,r4
186	mov.l	@r5+,r2
187	mov.l	@r5+,r3
188	mov.l	r1,@(4,r4)
189	mov.l	r2,@(8,r4)
190
191L_movmem_loop:
192	mov.l	r3,@(12,r4)
193	dt	r6
194	mov.l	@r5+,r0
195	bt/s	L_movmem_2mod4_end
196	mov.l	@r5+,r1
197	add	#16,r4
198L_movmem_start_even:
199	mov.l	@r5+,r2
200	mov.l	@r5+,r3
201	mov.l	r0,@r4
202	dt	r6
203	mov.l	r1,@(4,r4)
204	bf/s	L_movmem_loop
205	mov.l	r2,@(8,r4)
206	rts
207	mov.l	r3,@(12,r4)
208
209	.p2align	4
210__movmemSI12_i4:
211	mov.l	@r5,r0
212	mov.l	@(4,r5),r1
213	mov.l	@(8,r5),r2
214	mov.l	r0,@r4
215	mov.l	r1,@(4,r4)
216	rts
217	mov.l	r2,@(8,r4)