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