linux/arch/hexagon/lib/divsi3.S
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 * Copyright (c) 2021, The Linux Foundation. All rights reserved.
   4 */
   5
   6#include <linux/linkage.h>
   7
   8SYM_FUNC_START(__hexagon_divsi3)
   9        {
  10                p0 = cmp.gt(r0,#-1)
  11                p1 = cmp.gt(r1,#-1)
  12                r3:2 = vabsw(r1:0)
  13        }
  14        {
  15                p3 = xor(p0,p1)
  16                r4 = sub(r2,r3)
  17                r6 = cl0(r2)
  18                p0 = cmp.gtu(r3,r2)
  19        }
  20        {
  21                r0 = mux(p3,#-1,#1)
  22                r7 = cl0(r3)
  23                p1 = cmp.gtu(r3,r4)
  24        }
  25        {
  26                r0 = mux(p0,#0,r0)
  27                p0 = or(p0,p1)
  28                if (p0.new) jumpr:nt r31
  29                r6 = sub(r7,r6)
  30        }
  31        {
  32                r7 = r6
  33                r5:4 = combine(#1,r3)
  34                r6 = add(#1,lsr(r6,#1))
  35                p0 = cmp.gtu(r6,#4)
  36        }
  37        {
  38                r5:4 = vaslw(r5:4,r7)
  39                if (!p0) r6 = #3
  40        }
  41        {
  42                loop0(1f,r6)
  43                r7:6 = vlsrw(r5:4,#1)
  44                r1:0 = #0
  45        }
  46        .falign
  471:
  48        {
  49                r5:4 = vlsrw(r5:4,#2)
  50                if (!p0.new) r0 = add(r0,r5)
  51                if (!p0.new) r2 = sub(r2,r4)
  52                p0 = cmp.gtu(r4,r2)
  53        }
  54        {
  55                r7:6 = vlsrw(r7:6,#2)
  56                if (!p0.new) r0 = add(r0,r7)
  57                if (!p0.new) r2 = sub(r2,r6)
  58                p0 = cmp.gtu(r6,r2)
  59        }:endloop0
  60        {
  61                if (!p0) r0 = add(r0,r7)
  62        }
  63        {
  64                if (p3) r0 = sub(r1,r0)
  65                jumpr r31
  66        }
  67SYM_FUNC_END(__hexagon_divsi3)
  68