162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (c) 2021, The Linux Foundation. All rights reserved. 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#include <linux/linkage.h> 762306a36Sopenharmony_ci 862306a36Sopenharmony_ciSYM_FUNC_START(__hexagon_divsi3) 962306a36Sopenharmony_ci { 1062306a36Sopenharmony_ci p0 = cmp.gt(r0,#-1) 1162306a36Sopenharmony_ci p1 = cmp.gt(r1,#-1) 1262306a36Sopenharmony_ci r3:2 = vabsw(r1:0) 1362306a36Sopenharmony_ci } 1462306a36Sopenharmony_ci { 1562306a36Sopenharmony_ci p3 = xor(p0,p1) 1662306a36Sopenharmony_ci r4 = sub(r2,r3) 1762306a36Sopenharmony_ci r6 = cl0(r2) 1862306a36Sopenharmony_ci p0 = cmp.gtu(r3,r2) 1962306a36Sopenharmony_ci } 2062306a36Sopenharmony_ci { 2162306a36Sopenharmony_ci r0 = mux(p3,#-1,#1) 2262306a36Sopenharmony_ci r7 = cl0(r3) 2362306a36Sopenharmony_ci p1 = cmp.gtu(r3,r4) 2462306a36Sopenharmony_ci } 2562306a36Sopenharmony_ci { 2662306a36Sopenharmony_ci r0 = mux(p0,#0,r0) 2762306a36Sopenharmony_ci p0 = or(p0,p1) 2862306a36Sopenharmony_ci if (p0.new) jumpr:nt r31 2962306a36Sopenharmony_ci r6 = sub(r7,r6) 3062306a36Sopenharmony_ci } 3162306a36Sopenharmony_ci { 3262306a36Sopenharmony_ci r7 = r6 3362306a36Sopenharmony_ci r5:4 = combine(#1,r3) 3462306a36Sopenharmony_ci r6 = add(#1,lsr(r6,#1)) 3562306a36Sopenharmony_ci p0 = cmp.gtu(r6,#4) 3662306a36Sopenharmony_ci } 3762306a36Sopenharmony_ci { 3862306a36Sopenharmony_ci r5:4 = vaslw(r5:4,r7) 3962306a36Sopenharmony_ci if (!p0) r6 = #3 4062306a36Sopenharmony_ci } 4162306a36Sopenharmony_ci { 4262306a36Sopenharmony_ci loop0(1f,r6) 4362306a36Sopenharmony_ci r7:6 = vlsrw(r5:4,#1) 4462306a36Sopenharmony_ci r1:0 = #0 4562306a36Sopenharmony_ci } 4662306a36Sopenharmony_ci .falign 4762306a36Sopenharmony_ci1: 4862306a36Sopenharmony_ci { 4962306a36Sopenharmony_ci r5:4 = vlsrw(r5:4,#2) 5062306a36Sopenharmony_ci if (!p0.new) r0 = add(r0,r5) 5162306a36Sopenharmony_ci if (!p0.new) r2 = sub(r2,r4) 5262306a36Sopenharmony_ci p0 = cmp.gtu(r4,r2) 5362306a36Sopenharmony_ci } 5462306a36Sopenharmony_ci { 5562306a36Sopenharmony_ci r7:6 = vlsrw(r7:6,#2) 5662306a36Sopenharmony_ci if (!p0.new) r0 = add(r0,r7) 5762306a36Sopenharmony_ci if (!p0.new) r2 = sub(r2,r6) 5862306a36Sopenharmony_ci p0 = cmp.gtu(r6,r2) 5962306a36Sopenharmony_ci }:endloop0 6062306a36Sopenharmony_ci { 6162306a36Sopenharmony_ci if (!p0) r0 = add(r0,r7) 6262306a36Sopenharmony_ci } 6362306a36Sopenharmony_ci { 6462306a36Sopenharmony_ci if (p3) r0 = sub(r1,r0) 6562306a36Sopenharmony_ci jumpr r31 6662306a36Sopenharmony_ci } 6762306a36Sopenharmony_ciSYM_FUNC_END(__hexagon_divsi3) 68