1*4882a593Smuzhiyun/* SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-2.0 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 4*4882a593Smuzhiyun 2004, 2005, 2006 5*4882a593Smuzhiyun Free Software Foundation, Inc. 6*4882a593Smuzhiyun*/ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun!! libgcc routines for the Renesas / SuperH SH CPUs. 9*4882a593Smuzhiyun!! Contributed by Steve Chamberlain. 10*4882a593Smuzhiyun!! sac@cygnus.com 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun!! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines 13*4882a593Smuzhiyun!! recoded in assembly by Toshiyasu Morita 14*4882a593Smuzhiyun!! tm@netcom.com 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun/* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and 17*4882a593Smuzhiyun ELF local label prefixes by J"orn Rennecke 18*4882a593Smuzhiyun amylaar@cygnus.com */ 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun /* r0: rn r1: qn */ /* r0: n1 r4: n0 r5: d r6: d1 */ /* r2: __m */ 21*4882a593Smuzhiyun /* n1 < d, but n1 might be larger than d1. */ 22*4882a593Smuzhiyun .global __udiv_qrnnd_16 23*4882a593Smuzhiyun .balign 8 24*4882a593Smuzhiyun__udiv_qrnnd_16: 25*4882a593Smuzhiyun div0u 26*4882a593Smuzhiyun cmp/hi r6,r0 27*4882a593Smuzhiyun bt .Lots 28*4882a593Smuzhiyun .rept 16 29*4882a593Smuzhiyun div1 r6,r0 30*4882a593Smuzhiyun .endr 31*4882a593Smuzhiyun extu.w r0,r1 32*4882a593Smuzhiyun bt 0f 33*4882a593Smuzhiyun add r6,r0 34*4882a593Smuzhiyun0: rotcl r1 35*4882a593Smuzhiyun mulu.w r1,r5 36*4882a593Smuzhiyun xtrct r4,r0 37*4882a593Smuzhiyun swap.w r0,r0 38*4882a593Smuzhiyun sts macl,r2 39*4882a593Smuzhiyun cmp/hs r2,r0 40*4882a593Smuzhiyun sub r2,r0 41*4882a593Smuzhiyun bt 0f 42*4882a593Smuzhiyun addc r5,r0 43*4882a593Smuzhiyun add #-1,r1 44*4882a593Smuzhiyun bt 0f 45*4882a593Smuzhiyun1: add #-1,r1 46*4882a593Smuzhiyun rts 47*4882a593Smuzhiyun add r5,r0 48*4882a593Smuzhiyun .balign 8 49*4882a593Smuzhiyun.Lots: 50*4882a593Smuzhiyun sub r5,r0 51*4882a593Smuzhiyun swap.w r4,r1 52*4882a593Smuzhiyun xtrct r0,r1 53*4882a593Smuzhiyun clrt 54*4882a593Smuzhiyun mov r1,r0 55*4882a593Smuzhiyun addc r5,r0 56*4882a593Smuzhiyun mov #-1,r1 57*4882a593Smuzhiyun bf/s 1b 58*4882a593Smuzhiyun shlr16 r1 59*4882a593Smuzhiyun0: rts 60*4882a593Smuzhiyun nop 61