18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright (c) 2021, The Linux Foundation. All rights reserved.
48c2ecf20Sopenharmony_ci */
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#include <linux/linkage.h>
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ciSYM_FUNC_START(__hexagon_divsi3)
98c2ecf20Sopenharmony_ci        {
108c2ecf20Sopenharmony_ci                p0 = cmp.gt(r0,#-1)
118c2ecf20Sopenharmony_ci                p1 = cmp.gt(r1,#-1)
128c2ecf20Sopenharmony_ci                r3:2 = vabsw(r1:0)
138c2ecf20Sopenharmony_ci        }
148c2ecf20Sopenharmony_ci        {
158c2ecf20Sopenharmony_ci                p3 = xor(p0,p1)
168c2ecf20Sopenharmony_ci                r4 = sub(r2,r3)
178c2ecf20Sopenharmony_ci                r6 = cl0(r2)
188c2ecf20Sopenharmony_ci                p0 = cmp.gtu(r3,r2)
198c2ecf20Sopenharmony_ci        }
208c2ecf20Sopenharmony_ci        {
218c2ecf20Sopenharmony_ci                r0 = mux(p3,#-1,#1)
228c2ecf20Sopenharmony_ci                r7 = cl0(r3)
238c2ecf20Sopenharmony_ci                p1 = cmp.gtu(r3,r4)
248c2ecf20Sopenharmony_ci        }
258c2ecf20Sopenharmony_ci        {
268c2ecf20Sopenharmony_ci                r0 = mux(p0,#0,r0)
278c2ecf20Sopenharmony_ci                p0 = or(p0,p1)
288c2ecf20Sopenharmony_ci                if (p0.new) jumpr:nt r31
298c2ecf20Sopenharmony_ci                r6 = sub(r7,r6)
308c2ecf20Sopenharmony_ci        }
318c2ecf20Sopenharmony_ci        {
328c2ecf20Sopenharmony_ci                r7 = r6
338c2ecf20Sopenharmony_ci                r5:4 = combine(#1,r3)
348c2ecf20Sopenharmony_ci                r6 = add(#1,lsr(r6,#1))
358c2ecf20Sopenharmony_ci                p0 = cmp.gtu(r6,#4)
368c2ecf20Sopenharmony_ci        }
378c2ecf20Sopenharmony_ci        {
388c2ecf20Sopenharmony_ci                r5:4 = vaslw(r5:4,r7)
398c2ecf20Sopenharmony_ci                if (!p0) r6 = #3
408c2ecf20Sopenharmony_ci        }
418c2ecf20Sopenharmony_ci        {
428c2ecf20Sopenharmony_ci                loop0(1f,r6)
438c2ecf20Sopenharmony_ci                r7:6 = vlsrw(r5:4,#1)
448c2ecf20Sopenharmony_ci                r1:0 = #0
458c2ecf20Sopenharmony_ci        }
468c2ecf20Sopenharmony_ci        .falign
478c2ecf20Sopenharmony_ci1:
488c2ecf20Sopenharmony_ci        {
498c2ecf20Sopenharmony_ci                r5:4 = vlsrw(r5:4,#2)
508c2ecf20Sopenharmony_ci                if (!p0.new) r0 = add(r0,r5)
518c2ecf20Sopenharmony_ci                if (!p0.new) r2 = sub(r2,r4)
528c2ecf20Sopenharmony_ci                p0 = cmp.gtu(r4,r2)
538c2ecf20Sopenharmony_ci        }
548c2ecf20Sopenharmony_ci        {
558c2ecf20Sopenharmony_ci                r7:6 = vlsrw(r7:6,#2)
568c2ecf20Sopenharmony_ci                if (!p0.new) r0 = add(r0,r7)
578c2ecf20Sopenharmony_ci                if (!p0.new) r2 = sub(r2,r6)
588c2ecf20Sopenharmony_ci                p0 = cmp.gtu(r6,r2)
598c2ecf20Sopenharmony_ci        }:endloop0
608c2ecf20Sopenharmony_ci        {
618c2ecf20Sopenharmony_ci                if (!p0) r0 = add(r0,r7)
628c2ecf20Sopenharmony_ci        }
638c2ecf20Sopenharmony_ci        {
648c2ecf20Sopenharmony_ci                if (p3) r0 = sub(r1,r0)
658c2ecf20Sopenharmony_ci                jumpr r31
668c2ecf20Sopenharmony_ci        }
678c2ecf20Sopenharmony_ciSYM_FUNC_END(__hexagon_divsi3)
68