1336817Sdim//===----------------------Hexagon builtin routine ------------------------===// 2336817Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6336817Sdim// 7336817Sdim//===----------------------------------------------------------------------===// 8336817Sdim 9336817Sdim 10336817Sdim .macro FUNCTION_BEGIN name 11336817Sdim .text 12336817Sdim .p2align 5 13336817Sdim .globl \name 14336817Sdim .type \name, @function 15336817Sdim\name: 16336817Sdim .endm 17336817Sdim 18336817Sdim .macro FUNCTION_END name 19336817Sdim .size \name, . - \name 20336817Sdim .endm 21336817Sdim 22336817Sdim 23336817SdimFUNCTION_BEGIN __hexagon_udivmodsi4 24336817Sdim { 25336817Sdim r2 = cl0(r0) 26336817Sdim r3 = cl0(r1) 27336817Sdim r5:4 = combine(#1,#0) 28336817Sdim p0 = cmp.gtu(r1,r0) 29336817Sdim } 30336817Sdim { 31336817Sdim r6 = sub(r3,r2) 32336817Sdim r4 = r1 33336817Sdim r1:0 = combine(r0,r4) 34336817Sdim if (p0) jumpr r31 35336817Sdim } 36336817Sdim { 37336817Sdim r3:2 = vlslw(r5:4,r6) 38336817Sdim loop0(1f,r6) 39336817Sdim p0 = cmp.eq(r6,#0) 40336817Sdim if (p0.new) r4 = #0 41336817Sdim } 42336817Sdim .falign 43336817Sdim1: 44336817Sdim { 45336817Sdim p0 = cmp.gtu(r2,r1) 46336817Sdim if (!p0.new) r1 = sub(r1,r2) 47336817Sdim if (!p0.new) r0 = add(r0,r3) 48336817Sdim r3:2 = vlsrw(r3:2,#1) 49336817Sdim }:endloop0 50336817Sdim { 51336817Sdim p0 = cmp.gtu(r2,r1) 52336817Sdim if (!p0.new) r1 = sub(r1,r4) 53336817Sdim if (!p0.new) r0 = add(r0,r3) 54336817Sdim jumpr r31 55336817Sdim } 56336817SdimFUNCTION_END __hexagon_udivmodsi4 57336817Sdim 58336817Sdim .globl __qdsp_udivmodsi4 59336817Sdim .set __qdsp_udivmodsi4, __hexagon_udivmodsi4 60