Linux 5.7.6
[linux/fpc-iii.git] / arch / c6x / lib / divremi.S
blob575fc57a8a7673e23eb9232c6940cb2d873bf6db
1 ;; SPDX-License-Identifier: GPL-2.0-or-later
2 ;;  Copyright 2010  Free Software Foundation, Inc.
3 ;;  Contributed by Bernd Schmidt <bernds@codesourcery.com>.
4 ;;
6 #include <linux/linkage.h>
8         .text
9 ENTRY(__c6xabi_divremi)
10         stw     .d2t2   B3, *B15--[2]
11 ||      cmpgt   .l1     0, A4, A1
12 ||      cmpgt   .l2     0, B4, B2
13 ||      mv      .s1     A4, A5
14 ||      call    .s2     __c6xabi_divu
16    [A1] neg     .l1     A4, A4
17 || [B2] neg     .l2     B4, B4
18 ||      xor     .s2x    B2, A1, B0
19 ||      mv      .d2     B4, B2
21    [B0] addkpc  .s2     _divu_ret_1, B3, 1
22   [!B0] addkpc  .s2     _divu_ret_2, B3, 1
23         nop     2
24 _divu_ret_1:
25         neg     .l1     A4, A4
26 _divu_ret_2:
27         ldw     .d2t2   *++B15[2], B3
29         mpy32   .m1x    A4, B2, A6
30         nop             3
31         ret     .s2     B3
32         sub     .l1     A5, A6, A5
33         nop     4
34 ENDPROC(__c6xabi_divremi)