xref: /kernel/linux/linux-6.6/arch/sh/lib/ashrsi3.S (revision 62306a36)
162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-2.0
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci   Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
462306a36Sopenharmony_ci   2004, 2005, 2006
562306a36Sopenharmony_ci   Free Software Foundation, Inc.
662306a36Sopenharmony_ci*/
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci!! libgcc routines for the Renesas / SuperH SH CPUs.
962306a36Sopenharmony_ci!! Contributed by Steve Chamberlain.
1062306a36Sopenharmony_ci!! sac@cygnus.com
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci!! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines
1362306a36Sopenharmony_ci!! recoded in assembly by Toshiyasu Morita
1462306a36Sopenharmony_ci!! tm@netcom.com
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci/* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and
1762306a36Sopenharmony_ci   ELF local label prefixes by J"orn Rennecke
1862306a36Sopenharmony_ci   amylaar@cygnus.com  */
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci!
2162306a36Sopenharmony_ci! __ashrsi3
2262306a36Sopenharmony_ci!
2362306a36Sopenharmony_ci! Entry:
2462306a36Sopenharmony_ci!
2562306a36Sopenharmony_ci! r4: Value to shift
2662306a36Sopenharmony_ci! r5: Shifts
2762306a36Sopenharmony_ci!
2862306a36Sopenharmony_ci! Exit:
2962306a36Sopenharmony_ci!
3062306a36Sopenharmony_ci! r0: Result
3162306a36Sopenharmony_ci!
3262306a36Sopenharmony_ci! Destroys:
3362306a36Sopenharmony_ci!
3462306a36Sopenharmony_ci! (none)
3562306a36Sopenharmony_ci!
3662306a36Sopenharmony_ci! __ashrsi3_r0
3762306a36Sopenharmony_ci!
3862306a36Sopenharmony_ci! Entry:
3962306a36Sopenharmony_ci!
4062306a36Sopenharmony_ci! r4: Value to shift
4162306a36Sopenharmony_ci! r0: Shifts
4262306a36Sopenharmony_ci!
4362306a36Sopenharmony_ci! Exit:
4462306a36Sopenharmony_ci!
4562306a36Sopenharmony_ci! r0: Result
4662306a36Sopenharmony_ci!
4762306a36Sopenharmony_ci! Destroys:
4862306a36Sopenharmony_ci!
4962306a36Sopenharmony_ci! (none)
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci	.global	__ashrsi3
5262306a36Sopenharmony_ci	.global	__ashrsi3_r0
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci	.align	2
5562306a36Sopenharmony_ci__ashrsi3:
5662306a36Sopenharmony_ci	mov	r5,r0
5762306a36Sopenharmony_ci	.align	2
5862306a36Sopenharmony_ci__ashrsi3_r0:
5962306a36Sopenharmony_ci	and	#31,r0
6062306a36Sopenharmony_ci	mov.l	r4,@-r15
6162306a36Sopenharmony_ci	mov	r0,r4
6262306a36Sopenharmony_ci	mova	ashrsi3_table,r0
6362306a36Sopenharmony_ci	mov.b	@(r0,r4),r4
6462306a36Sopenharmony_ci	add	r4,r0
6562306a36Sopenharmony_ci	jmp	@r0
6662306a36Sopenharmony_ci	mov.l	@r15+,r0
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci	.align	2
6962306a36Sopenharmony_ciashrsi3_table:
7062306a36Sopenharmony_ci	.byte		ashrsi3_0-ashrsi3_table
7162306a36Sopenharmony_ci	.byte		ashrsi3_1-ashrsi3_table
7262306a36Sopenharmony_ci	.byte		ashrsi3_2-ashrsi3_table
7362306a36Sopenharmony_ci	.byte		ashrsi3_3-ashrsi3_table
7462306a36Sopenharmony_ci	.byte		ashrsi3_4-ashrsi3_table
7562306a36Sopenharmony_ci	.byte		ashrsi3_5-ashrsi3_table
7662306a36Sopenharmony_ci	.byte		ashrsi3_6-ashrsi3_table
7762306a36Sopenharmony_ci	.byte		ashrsi3_7-ashrsi3_table
7862306a36Sopenharmony_ci	.byte		ashrsi3_8-ashrsi3_table
7962306a36Sopenharmony_ci	.byte		ashrsi3_9-ashrsi3_table
8062306a36Sopenharmony_ci	.byte		ashrsi3_10-ashrsi3_table
8162306a36Sopenharmony_ci	.byte		ashrsi3_11-ashrsi3_table
8262306a36Sopenharmony_ci	.byte		ashrsi3_12-ashrsi3_table
8362306a36Sopenharmony_ci	.byte		ashrsi3_13-ashrsi3_table
8462306a36Sopenharmony_ci	.byte		ashrsi3_14-ashrsi3_table
8562306a36Sopenharmony_ci	.byte		ashrsi3_15-ashrsi3_table
8662306a36Sopenharmony_ci	.byte		ashrsi3_16-ashrsi3_table
8762306a36Sopenharmony_ci	.byte		ashrsi3_17-ashrsi3_table
8862306a36Sopenharmony_ci	.byte		ashrsi3_18-ashrsi3_table
8962306a36Sopenharmony_ci	.byte		ashrsi3_19-ashrsi3_table
9062306a36Sopenharmony_ci	.byte		ashrsi3_20-ashrsi3_table
9162306a36Sopenharmony_ci	.byte		ashrsi3_21-ashrsi3_table
9262306a36Sopenharmony_ci	.byte		ashrsi3_22-ashrsi3_table
9362306a36Sopenharmony_ci	.byte		ashrsi3_23-ashrsi3_table
9462306a36Sopenharmony_ci	.byte		ashrsi3_24-ashrsi3_table
9562306a36Sopenharmony_ci	.byte		ashrsi3_25-ashrsi3_table
9662306a36Sopenharmony_ci	.byte		ashrsi3_26-ashrsi3_table
9762306a36Sopenharmony_ci	.byte		ashrsi3_27-ashrsi3_table
9862306a36Sopenharmony_ci	.byte		ashrsi3_28-ashrsi3_table
9962306a36Sopenharmony_ci	.byte		ashrsi3_29-ashrsi3_table
10062306a36Sopenharmony_ci	.byte		ashrsi3_30-ashrsi3_table
10162306a36Sopenharmony_ci	.byte		ashrsi3_31-ashrsi3_table
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_ciashrsi3_31:
10462306a36Sopenharmony_ci	rotcl	r0
10562306a36Sopenharmony_ci	rts
10662306a36Sopenharmony_ci	subc	r0,r0
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ciashrsi3_30:
10962306a36Sopenharmony_ci	shar	r0
11062306a36Sopenharmony_ciashrsi3_29:
11162306a36Sopenharmony_ci	shar	r0
11262306a36Sopenharmony_ciashrsi3_28:
11362306a36Sopenharmony_ci	shar	r0
11462306a36Sopenharmony_ciashrsi3_27:
11562306a36Sopenharmony_ci	shar	r0
11662306a36Sopenharmony_ciashrsi3_26:
11762306a36Sopenharmony_ci	shar	r0
11862306a36Sopenharmony_ciashrsi3_25:
11962306a36Sopenharmony_ci	shar	r0
12062306a36Sopenharmony_ciashrsi3_24:
12162306a36Sopenharmony_ci	shlr16	r0
12262306a36Sopenharmony_ci	shlr8	r0
12362306a36Sopenharmony_ci	rts
12462306a36Sopenharmony_ci	exts.b	r0,r0
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ciashrsi3_23:
12762306a36Sopenharmony_ci	shar	r0
12862306a36Sopenharmony_ciashrsi3_22:
12962306a36Sopenharmony_ci	shar	r0
13062306a36Sopenharmony_ciashrsi3_21:
13162306a36Sopenharmony_ci	shar	r0
13262306a36Sopenharmony_ciashrsi3_20:
13362306a36Sopenharmony_ci	shar	r0
13462306a36Sopenharmony_ciashrsi3_19:
13562306a36Sopenharmony_ci	shar	r0
13662306a36Sopenharmony_ciashrsi3_18:
13762306a36Sopenharmony_ci	shar	r0
13862306a36Sopenharmony_ciashrsi3_17:
13962306a36Sopenharmony_ci	shar	r0
14062306a36Sopenharmony_ciashrsi3_16:
14162306a36Sopenharmony_ci	shlr16	r0
14262306a36Sopenharmony_ci	rts
14362306a36Sopenharmony_ci	exts.w	r0,r0
14462306a36Sopenharmony_ci
14562306a36Sopenharmony_ciashrsi3_15:
14662306a36Sopenharmony_ci	shar	r0
14762306a36Sopenharmony_ciashrsi3_14:
14862306a36Sopenharmony_ci	shar	r0
14962306a36Sopenharmony_ciashrsi3_13:
15062306a36Sopenharmony_ci	shar	r0
15162306a36Sopenharmony_ciashrsi3_12:
15262306a36Sopenharmony_ci	shar	r0
15362306a36Sopenharmony_ciashrsi3_11:
15462306a36Sopenharmony_ci	shar	r0
15562306a36Sopenharmony_ciashrsi3_10:
15662306a36Sopenharmony_ci	shar	r0
15762306a36Sopenharmony_ciashrsi3_9:
15862306a36Sopenharmony_ci	shar	r0
15962306a36Sopenharmony_ciashrsi3_8:
16062306a36Sopenharmony_ci	shar	r0
16162306a36Sopenharmony_ciashrsi3_7:
16262306a36Sopenharmony_ci	shar	r0
16362306a36Sopenharmony_ciashrsi3_6:
16462306a36Sopenharmony_ci	shar	r0
16562306a36Sopenharmony_ciashrsi3_5:
16662306a36Sopenharmony_ci	shar	r0
16762306a36Sopenharmony_ciashrsi3_4:
16862306a36Sopenharmony_ci	shar	r0
16962306a36Sopenharmony_ciashrsi3_3:
17062306a36Sopenharmony_ci	shar	r0
17162306a36Sopenharmony_ciashrsi3_2:
17262306a36Sopenharmony_ci	shar	r0
17362306a36Sopenharmony_ciashrsi3_1:
17462306a36Sopenharmony_ci	rts
17562306a36Sopenharmony_ci	shar	r0
17662306a36Sopenharmony_ci
17762306a36Sopenharmony_ciashrsi3_0:
17862306a36Sopenharmony_ci	rts
17962306a36Sopenharmony_ci	nop
180