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