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 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 .balign 4 1362306a36Sopenharmony_ci .global __udivsi3 1462306a36Sopenharmony_ci .type __udivsi3, @function 1562306a36Sopenharmony_cidiv8: 1662306a36Sopenharmony_ci div1 r5,r4 1762306a36Sopenharmony_cidiv7: 1862306a36Sopenharmony_ci div1 r5,r4; div1 r5,r4; div1 r5,r4 1962306a36Sopenharmony_ci div1 r5,r4; div1 r5,r4; div1 r5,r4; rts; div1 r5,r4 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_cidivx4: 2262306a36Sopenharmony_ci div1 r5,r4; rotcl r0 2362306a36Sopenharmony_ci div1 r5,r4; rotcl r0 2462306a36Sopenharmony_ci div1 r5,r4; rotcl r0 2562306a36Sopenharmony_ci rts; div1 r5,r4 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci__udivsi3: 2862306a36Sopenharmony_ci sts.l pr,@-r15 2962306a36Sopenharmony_ci extu.w r5,r0 3062306a36Sopenharmony_ci cmp/eq r5,r0 3162306a36Sopenharmony_ci bf/s large_divisor 3262306a36Sopenharmony_ci div0u 3362306a36Sopenharmony_ci swap.w r4,r0 3462306a36Sopenharmony_ci shlr16 r4 3562306a36Sopenharmony_ci bsr div8 3662306a36Sopenharmony_ci shll16 r5 3762306a36Sopenharmony_ci bsr div7 3862306a36Sopenharmony_ci div1 r5,r4 3962306a36Sopenharmony_ci xtrct r4,r0 4062306a36Sopenharmony_ci xtrct r0,r4 4162306a36Sopenharmony_ci bsr div8 4262306a36Sopenharmony_ci swap.w r4,r4 4362306a36Sopenharmony_ci bsr div7 4462306a36Sopenharmony_ci div1 r5,r4 4562306a36Sopenharmony_ci lds.l @r15+,pr 4662306a36Sopenharmony_ci xtrct r4,r0 4762306a36Sopenharmony_ci swap.w r0,r0 4862306a36Sopenharmony_ci rotcl r0 4962306a36Sopenharmony_ci rts 5062306a36Sopenharmony_ci shlr16 r5 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_cilarge_divisor: 5362306a36Sopenharmony_ci mov #0,r0 5462306a36Sopenharmony_ci xtrct r4,r0 5562306a36Sopenharmony_ci xtrct r0,r4 5662306a36Sopenharmony_ci bsr divx4 5762306a36Sopenharmony_ci rotcl r0 5862306a36Sopenharmony_ci bsr divx4 5962306a36Sopenharmony_ci rotcl r0 6062306a36Sopenharmony_ci bsr divx4 6162306a36Sopenharmony_ci rotcl r0 6262306a36Sopenharmony_ci bsr divx4 6362306a36Sopenharmony_ci rotcl r0 6462306a36Sopenharmony_ci lds.l @r15+,pr 6562306a36Sopenharmony_ci rts 6662306a36Sopenharmony_ci rotcl r0 67