Linux Audio

Check our new training course

Yocto distribution development and maintenance

Need a Yocto distribution for your embedded project?
Loading...
v3.5.6
 
  1/* una_asm.S: Kernel unaligned trap assembler helpers.
  2 *
  3 * Copyright (C) 1996,2005,2008 David S. Miller (davem@davemloft.net)
  4 * Copyright (C) 1996,1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
  5 */
  6
  7#include <linux/errno.h>
  8
  9	.text
 10
 11retl_efault:
 12	retl
 13	 mov	-EFAULT, %o0
 14
 15	/* int __do_int_store(unsigned long *dst_addr, int size,
 16	 *                    unsigned long *src_val)
 17	 *
 18	 * %o0 = dest_addr
 19	 * %o1 = size
 20	 * %o2 = src_val
 21	 *
 22	 * Return '0' on success, -EFAULT on failure.
 23	 */
 24	.globl	__do_int_store
 25__do_int_store:
 26	ld	[%o2], %g1
 27	cmp	%o1, 2
 28	be	2f
 29	 cmp	%o1, 4
 30	be	1f
 31	 srl	%g1, 24, %g2
 32	srl	%g1, 16, %g7
 334:	stb	%g2, [%o0]
 34	srl	%g1, 8, %g2
 355:	stb	%g7, [%o0 + 1]
 36	ld	[%o2 + 4], %g7
 376:	stb	%g2, [%o0 + 2]
 38	srl	%g7, 24, %g2
 397:	stb	%g1, [%o0 + 3]
 40	srl	%g7, 16, %g1
 418:	stb	%g2, [%o0 + 4]
 42	srl	%g7, 8, %g2
 439:	stb	%g1, [%o0 + 5]
 4410:	stb	%g2, [%o0 + 6]
 45	b	0f
 4611:	 stb	%g7, [%o0 + 7]
 471:	srl	%g1, 16, %g7
 4812:	stb	%g2, [%o0]
 49	srl	%g1, 8, %g2
 5013:	stb	%g7, [%o0 + 1]
 5114:	stb	%g2, [%o0 + 2]
 52	b	0f
 5315:	 stb	%g1, [%o0 + 3]
 542:	srl	%g1, 8, %g2
 5516:	stb	%g2, [%o0]
 5617:	stb	%g1, [%o0 + 1]
 570:	retl
 58	 mov	0, %o0
 59
 60	.section __ex_table,#alloc
 61	.word	4b, retl_efault
 62	.word	5b, retl_efault
 63	.word	6b, retl_efault
 64	.word	7b, retl_efault
 65	.word	8b, retl_efault
 66	.word	9b, retl_efault
 67	.word	10b, retl_efault
 68	.word	11b, retl_efault
 69	.word	12b, retl_efault
 70	.word	13b, retl_efault
 71	.word	14b, retl_efault
 72	.word	15b, retl_efault
 73	.word	16b, retl_efault
 74	.word	17b, retl_efault
 75	.previous
 76
 77	/* int do_int_load(unsigned long *dest_reg, int size,
 78	 *                 unsigned long *saddr, int is_signed)
 79	 *
 80	 * %o0 = dest_reg
 81	 * %o1 = size
 82	 * %o2 = saddr
 83	 * %o3 = is_signed
 84	 *
 85	 * Return '0' on success, -EFAULT on failure.
 86	 */
 87	.globl	do_int_load
 88do_int_load:
 89	cmp	%o1, 8
 90	be	9f
 91	 cmp	%o1, 4
 92	be	6f
 934:	 ldub	[%o2], %g1
 945:	ldub	[%o2 + 1], %g2
 95	sll	%g1, 8, %g1
 96	tst	%o3
 97	be	3f
 98	 or	%g1, %g2, %g1
 99	sll	%g1, 16, %g1
100	sra	%g1, 16, %g1
1013:	b	0f
102	 st	%g1, [%o0]
1036:	ldub	[%o2 + 1], %g2
104	sll	%g1, 24, %g1
1057:	ldub	[%o2 + 2], %g7
106	sll	%g2, 16, %g2
1078:	ldub	[%o2 + 3], %g3
108	sll	%g7, 8, %g7
109	or	%g3, %g2, %g3
110	or	%g7, %g3, %g7
111	or	%g1, %g7, %g1
112	b	0f
113	 st	%g1, [%o0]
1149:	ldub	[%o2], %g1
11510:	ldub	[%o2 + 1], %g2
116	sll	%g1, 24, %g1
11711:	ldub	[%o2 + 2], %g7
118	sll	%g2, 16, %g2
11912:	ldub	[%o2 + 3], %g3
120	sll	%g7, 8, %g7
121	or	%g1, %g2, %g1
122	or	%g7, %g3, %g7
123	or	%g1, %g7, %g7
12413:	ldub	[%o2 + 4], %g1
125	st	%g7, [%o0]
12614:	ldub	[%o2 + 5], %g2
127	sll	%g1, 24, %g1
12815:	ldub	[%o2 + 6], %g7
129	sll	%g2, 16, %g2
13016:	ldub	[%o2 + 7], %g3
131	sll	%g7, 8, %g7
132	or	%g1, %g2, %g1
133	or	%g7, %g3, %g7
134	or	%g1, %g7, %g7
135	st	%g7, [%o0 + 4]
1360:	retl
137	 mov	0, %o0
138
139	.section __ex_table,#alloc
140	.word	4b, retl_efault
141	.word	5b, retl_efault
142	.word	6b, retl_efault
143	.word	7b, retl_efault
144	.word	8b, retl_efault
145	.word	9b, retl_efault
146	.word	10b, retl_efault
147	.word	11b, retl_efault
148	.word	12b, retl_efault
149	.word	13b, retl_efault
150	.word	14b, retl_efault
151	.word	15b, retl_efault
152	.word	16b, retl_efault
153	.previous
v6.9.4
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/* una_asm.S: Kernel unaligned trap assembler helpers.
  3 *
  4 * Copyright (C) 1996,2005,2008 David S. Miller (davem@davemloft.net)
  5 * Copyright (C) 1996,1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
  6 */
  7
  8#include <linux/errno.h>
  9
 10	.text
 11
 12retl_efault:
 13	retl
 14	 mov	-EFAULT, %o0
 15
 16	/* int __do_int_store(unsigned long *dst_addr, int size,
 17	 *                    unsigned long *src_val)
 18	 *
 19	 * %o0 = dest_addr
 20	 * %o1 = size
 21	 * %o2 = src_val
 22	 *
 23	 * Return '0' on success, -EFAULT on failure.
 24	 */
 25	.globl	__do_int_store
 26__do_int_store:
 27	ld	[%o2], %g1
 28	cmp	%o1, 2
 29	be	2f
 30	 cmp	%o1, 4
 31	be	1f
 32	 srl	%g1, 24, %g2
 33	srl	%g1, 16, %g7
 344:	stb	%g2, [%o0]
 35	srl	%g1, 8, %g2
 365:	stb	%g7, [%o0 + 1]
 37	ld	[%o2 + 4], %g7
 386:	stb	%g2, [%o0 + 2]
 39	srl	%g7, 24, %g2
 407:	stb	%g1, [%o0 + 3]
 41	srl	%g7, 16, %g1
 428:	stb	%g2, [%o0 + 4]
 43	srl	%g7, 8, %g2
 449:	stb	%g1, [%o0 + 5]
 4510:	stb	%g2, [%o0 + 6]
 46	b	0f
 4711:	 stb	%g7, [%o0 + 7]
 481:	srl	%g1, 16, %g7
 4912:	stb	%g2, [%o0]
 50	srl	%g1, 8, %g2
 5113:	stb	%g7, [%o0 + 1]
 5214:	stb	%g2, [%o0 + 2]
 53	b	0f
 5415:	 stb	%g1, [%o0 + 3]
 552:	srl	%g1, 8, %g2
 5616:	stb	%g2, [%o0]
 5717:	stb	%g1, [%o0 + 1]
 580:	retl
 59	 mov	0, %o0
 60
 61	.section __ex_table,#alloc
 62	.word	4b, retl_efault
 63	.word	5b, retl_efault
 64	.word	6b, retl_efault
 65	.word	7b, retl_efault
 66	.word	8b, retl_efault
 67	.word	9b, retl_efault
 68	.word	10b, retl_efault
 69	.word	11b, retl_efault
 70	.word	12b, retl_efault
 71	.word	13b, retl_efault
 72	.word	14b, retl_efault
 73	.word	15b, retl_efault
 74	.word	16b, retl_efault
 75	.word	17b, retl_efault
 76	.previous
 77
 78	/* int do_int_load(unsigned long *dest_reg, int size,
 79	 *                 unsigned long *saddr, int is_signed)
 80	 *
 81	 * %o0 = dest_reg
 82	 * %o1 = size
 83	 * %o2 = saddr
 84	 * %o3 = is_signed
 85	 *
 86	 * Return '0' on success, -EFAULT on failure.
 87	 */
 88	.globl	do_int_load
 89do_int_load:
 90	cmp	%o1, 8
 91	be	9f
 92	 cmp	%o1, 4
 93	be	6f
 944:	 ldub	[%o2], %g1
 955:	ldub	[%o2 + 1], %g2
 96	sll	%g1, 8, %g1
 97	tst	%o3
 98	be	3f
 99	 or	%g1, %g2, %g1
100	sll	%g1, 16, %g1
101	sra	%g1, 16, %g1
1023:	b	0f
103	 st	%g1, [%o0]
1046:	ldub	[%o2 + 1], %g2
105	sll	%g1, 24, %g1
1067:	ldub	[%o2 + 2], %g7
107	sll	%g2, 16, %g2
1088:	ldub	[%o2 + 3], %g3
109	sll	%g7, 8, %g7
110	or	%g3, %g2, %g3
111	or	%g7, %g3, %g7
112	or	%g1, %g7, %g1
113	b	0f
114	 st	%g1, [%o0]
1159:	ldub	[%o2], %g1
11610:	ldub	[%o2 + 1], %g2
117	sll	%g1, 24, %g1
11811:	ldub	[%o2 + 2], %g7
119	sll	%g2, 16, %g2
12012:	ldub	[%o2 + 3], %g3
121	sll	%g7, 8, %g7
122	or	%g1, %g2, %g1
123	or	%g7, %g3, %g7
124	or	%g1, %g7, %g7
12513:	ldub	[%o2 + 4], %g1
126	st	%g7, [%o0]
12714:	ldub	[%o2 + 5], %g2
128	sll	%g1, 24, %g1
12915:	ldub	[%o2 + 6], %g7
130	sll	%g2, 16, %g2
13116:	ldub	[%o2 + 7], %g3
132	sll	%g7, 8, %g7
133	or	%g1, %g2, %g1
134	or	%g7, %g3, %g7
135	or	%g1, %g7, %g7
136	st	%g7, [%o0 + 4]
1370:	retl
138	 mov	0, %o0
139
140	.section __ex_table,#alloc
141	.word	4b, retl_efault
142	.word	5b, retl_efault
143	.word	6b, retl_efault
144	.word	7b, retl_efault
145	.word	8b, retl_efault
146	.word	9b, retl_efault
147	.word	10b, retl_efault
148	.word	11b, retl_efault
149	.word	12b, retl_efault
150	.word	13b, retl_efault
151	.word	14b, retl_efault
152	.word	15b, retl_efault
153	.word	16b, retl_efault
154	.previous