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 11336817Sdim .macro FUNCTION_BEGIN name 12336817Sdim .text 13336817Sdim .p2align 5 14336817Sdim .globl \name 15336817Sdim .type \name, @function 16336817Sdim\name: 17336817Sdim .endm 18336817Sdim 19336817Sdim .macro FUNCTION_END name 20336817Sdim .size \name, . - \name 21336817Sdim .endm 22336817Sdim 23336817Sdim 24336817SdimFUNCTION_BEGIN __hexagon_divsi3 25336817Sdim { 26336817Sdim p0 = cmp.ge(r0,#0) 27336817Sdim p1 = cmp.ge(r1,#0) 28336817Sdim r1 = abs(r0) 29336817Sdim r2 = abs(r1) 30336817Sdim } 31336817Sdim { 32336817Sdim r3 = cl0(r1) 33336817Sdim r4 = cl0(r2) 34336817Sdim r5 = sub(r1,r2) 35336817Sdim p2 = cmp.gtu(r2,r1) 36336817Sdim } 37336817Sdim#if (__HEXAGON_ARCH__ == 60) 38336817Sdim { 39336817Sdim r0 = #0 40336817Sdim p1 = xor(p0,p1) 41336817Sdim p0 = cmp.gtu(r2,r5) 42336817Sdim } 43336817Sdim if (p2) jumpr r31 44336817Sdim#else 45336817Sdim { 46336817Sdim r0 = #0 47336817Sdim p1 = xor(p0,p1) 48336817Sdim p0 = cmp.gtu(r2,r5) 49336817Sdim if (p2) jumpr r31 50336817Sdim } 51336817Sdim#endif 52336817Sdim { 53336817Sdim r0 = mux(p1,#-1,#1) 54336817Sdim if (p0) jumpr r31 55336817Sdim r4 = sub(r4,r3) 56336817Sdim r3 = #1 57336817Sdim } 58336817Sdim { 59336817Sdim r0 = #0 60336817Sdim r3:2 = vlslw(r3:2,r4) 61336817Sdim loop0(1f,r4) 62336817Sdim } 63336817Sdim .falign 64336817Sdim1: 65336817Sdim { 66336817Sdim p0 = cmp.gtu(r2,r1) 67336817Sdim if (!p0.new) r1 = sub(r1,r2) 68336817Sdim if (!p0.new) r0 = add(r0,r3) 69336817Sdim r3:2 = vlsrw(r3:2,#1) 70336817Sdim }:endloop0 71336817Sdim { 72336817Sdim p0 = cmp.gtu(r2,r1) 73336817Sdim if (!p0.new) r0 = add(r0,r3) 74336817Sdim if (!p1) jumpr r31 75336817Sdim } 76336817Sdim { 77336817Sdim r0 = neg(r0) 78336817Sdim jumpr r31 79336817Sdim } 80336817SdimFUNCTION_END __hexagon_divsi3 81336817Sdim 82336817Sdim .globl __qdsp_divsi3 83336817Sdim .set __qdsp_divsi3, __hexagon_divsi3 84