/* newlib libgcc routines of Andes NDS32 cpu for GNU compiler Copyright (C) 2012-2023 Free Software Foundation, Inc. Contributed by Andes Technology Corporation. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Under Section 7 of GPL version 3, you are granted additional permissions described in the GCC Runtime Library Exception, version 3.1, as published by the Free Software Foundation. You should have received a copy of the GNU General Public License and a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ .section .mdebug.abi_nds32 .previous #ifdef L_divsi3 .text .align 2 .globl __divsi3 .type __divsi3, @function __divsi3: movi $r5, 0 ! res = 0 xor $r4, $r0, $r1 ! neg bltz $r0, .L1 bltz $r1, .L2 .L3: movi $r2, 1 ! bit = 1 slt $r3, $r1, $r0 ! test if dividend is smaller than or equal to divisor beqz $r3, .L5 bltz $r1, .L5 .L4: slli $r2, $r2, 1 beqz $r2, .L6 slli $r1, $r1, 1 slt $r3, $r1, $r0 beqz $r3, .L5 bgez $r1, .L4 .L5: slt $r3, $r0, $r1 bnez $r3, .L8 sub $r0, $r0, $r1 or $r5, $r5, $r2 .L8: srli $r1, $r1, 1 srli $r2, $r2, 1 bnez $r2, .L5 .L6: bgez $r4, .L7 subri $r5, $r5, 0 ! negate if $r4 < 0 .L7: move $r0, $r5 ret .L1: subri $r0, $r0, 0 ! change neg to pos bgez $r1, .L3 .L2: subri $r1, $r1, 0 ! change neg to pos j .L3 .size __divsi3, .-__divsi3 #endif /* L_divsi3 */ #ifdef L_modsi3 .text .align 2 .globl __modsi3 .type __modsi3, @function __modsi3: movi $r5, 0 ! res = 0 move $r4, $r0 ! neg bltz $r0, .L1 bltz $r1, .L2 .L3: movi $r2, 1 ! bit = 1 slt $r3, $r1, $r0 ! test if dividend is smaller than or equal to divisor beqz $r3, .L5 bltz $r1, .L5 .L4: slli $r2, $r2, 1 beqz $r2, .L6 slli $r1, $r1, 1 slt $r3, $r1, $r0 beqz $r3, .L5 bgez $r1, .L4 .L5: slt $r3, $r0, $r1 bnez $r3, .L8 sub $r0, $r0, $r1 or $r5, $r5, $r2 .L8: srli $r1, $r1, 1 srli $r2, $r2, 1 bnez $r2, .L5 .L6: bgez $r4, .L7 subri $r0, $r0, 0 ! negate if $r4 < 0 .L7: ret .L1: subri $r0, $r0, 0 ! change neg to pos bgez $r1, .L3 .L2: subri $r1, $r1, 0 ! change neg to pos j .L3 .size __modsi3, .-__modsi3 #endif /* L_modsi3 */ #ifdef L_udivsi3 .text .align 2 .globl __udivsi3 .type __udivsi3, @function __udivsi3: movi $r5, 0 ! res = 0 movi $r2, 1 ! bit = 1 slt $r3, $r1, $r0 ! test if dividend is smaller than or equal to divisor beqz $r3, .L5 bltz $r1, .L5 .L4: slli $r2, $r2, 1 beqz $r2, .L6 slli $r1, $r1, 1 slt $r3, $r1, $r0 beqz $r3, .L5 bgez $r1, .L4 .L5: slt $r3, $r0, $r1 bnez $r3, .L8 sub $r0, $r0, $r1 or $r5, $r5, $r2 .L8: srli $r1, $r1, 1 srli $r2, $r2, 1 bnez $r2, .L5 .L6: move $r0, $r5 ret .size __udivsi3, .-__udivsi3 #endif /* L_udivsi3 */ #ifdef L_umodsi3 .text .align 2 .globl __umodsi3 .type __umodsi3, @function __umodsi3: movi $r5, 0 ! res = 0 movi $r2, 1 ! bit = 1 slt $r3, $r1, $r0 ! test if dividend is smaller than or equal to divisor beqz $r3, .L5 bltz $r1, .L5 .L4: slli $r2, $r2, 1 beqz $r2, .L6 slli $r1, $r1, 1 slt $r3, $r1, $r0 beqz $r3, .L5 bgez $r1, .L4 .L5: slt $r3, $r0, $r1 bnez $r3, .L8 sub $r0, $r0, $r1 or $r5, $r5, $r2 .L8: srli $r1, $r1, 1 srli $r2, $r2, 1 bnez $r2, .L5 .L6: ret .size __umodsi3, .-__umodsi3 #endif /* L_umodsi3 */ /* ----------------------------------------------------------- */