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 /* r0: rn r1: qn */ /* r0: n1 r4: n0 r5: d r6: d1 */ /* r2: __m */ 2162306a36Sopenharmony_ci /* n1 < d, but n1 might be larger than d1. */ 2262306a36Sopenharmony_ci .global __udiv_qrnnd_16 2362306a36Sopenharmony_ci .balign 8 2462306a36Sopenharmony_ci__udiv_qrnnd_16: 2562306a36Sopenharmony_ci div0u 2662306a36Sopenharmony_ci cmp/hi r6,r0 2762306a36Sopenharmony_ci bt .Lots 2862306a36Sopenharmony_ci .rept 16 2962306a36Sopenharmony_ci div1 r6,r0 3062306a36Sopenharmony_ci .endr 3162306a36Sopenharmony_ci extu.w r0,r1 3262306a36Sopenharmony_ci bt 0f 3362306a36Sopenharmony_ci add r6,r0 3462306a36Sopenharmony_ci0: rotcl r1 3562306a36Sopenharmony_ci mulu.w r1,r5 3662306a36Sopenharmony_ci xtrct r4,r0 3762306a36Sopenharmony_ci swap.w r0,r0 3862306a36Sopenharmony_ci sts macl,r2 3962306a36Sopenharmony_ci cmp/hs r2,r0 4062306a36Sopenharmony_ci sub r2,r0 4162306a36Sopenharmony_ci bt 0f 4262306a36Sopenharmony_ci addc r5,r0 4362306a36Sopenharmony_ci add #-1,r1 4462306a36Sopenharmony_ci bt 0f 4562306a36Sopenharmony_ci1: add #-1,r1 4662306a36Sopenharmony_ci rts 4762306a36Sopenharmony_ci add r5,r0 4862306a36Sopenharmony_ci .balign 8 4962306a36Sopenharmony_ci.Lots: 5062306a36Sopenharmony_ci sub r5,r0 5162306a36Sopenharmony_ci swap.w r4,r1 5262306a36Sopenharmony_ci xtrct r0,r1 5362306a36Sopenharmony_ci clrt 5462306a36Sopenharmony_ci mov r1,r0 5562306a36Sopenharmony_ci addc r5,r0 5662306a36Sopenharmony_ci mov #-1,r1 5762306a36Sopenharmony_ci bf/s 1b 5862306a36Sopenharmony_ci shlr16 r1 5962306a36Sopenharmony_ci0: rts 6062306a36Sopenharmony_ci nop 61