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 .macro FUNCTION_BEGIN name 10336817Sdim .text 11336817Sdim .p2align 5 12336817Sdim .globl \name 13336817Sdim .type \name, @function 14336817Sdim\name: 15336817Sdim .endm 16336817Sdim 17336817Sdim .macro FUNCTION_END name 18336817Sdim .size \name, . - \name 19336817Sdim .endm 20336817Sdim 21336817Sdim#define Q6_ALIAS(TAG) .global __qdsp_##TAG ; .set __qdsp_##TAG, __hexagon_##TAG 22336817Sdim#define FAST_ALIAS(TAG) .global __hexagon_fast_##TAG ; .set __hexagon_fast_##TAG, __hexagon_##TAG 23336817Sdim#define FAST2_ALIAS(TAG) .global __hexagon_fast2_##TAG ; .set __hexagon_fast2_##TAG, __hexagon_##TAG 24336817Sdim 25336817SdimFUNCTION_BEGIN __hexagon_divsf3 26336817Sdim { 27336817Sdim r2,p0 = sfrecipa(r0,r1) 28336817Sdim r4 = sffixupd(r0,r1) 29336817Sdim r3 = ##0x3f800000 // 1.0 30336817Sdim } 31336817Sdim { 32336817Sdim r5 = sffixupn(r0,r1) 33336817Sdim r3 -= sfmpy(r4,r2):lib // 1-(den/recip) yields error? 34336817Sdim r6 = ##0x80000000 35336817Sdim r7 = r3 36336817Sdim } 37336817Sdim { 38336817Sdim r2 += sfmpy(r3,r2):lib 39336817Sdim r3 = r7 40336817Sdim r6 = r5 41336817Sdim r0 = and(r6,r5) 42336817Sdim } 43336817Sdim { 44336817Sdim r3 -= sfmpy(r4,r2):lib 45336817Sdim r0 += sfmpy(r5,r2):lib 46336817Sdim } 47336817Sdim { 48336817Sdim r2 += sfmpy(r3,r2):lib 49336817Sdim r6 -= sfmpy(r0,r4):lib 50336817Sdim } 51336817Sdim { 52336817Sdim r0 += sfmpy(r6,r2):lib 53336817Sdim } 54336817Sdim { 55336817Sdim r5 -= sfmpy(r0,r4):lib 56336817Sdim } 57336817Sdim { 58336817Sdim r0 += sfmpy(r5,r2,p0):scale 59336817Sdim jumpr r31 60336817Sdim } 61336817SdimFUNCTION_END __hexagon_divsf3 62336817Sdim 63336817SdimQ6_ALIAS(divsf3) 64336817SdimFAST_ALIAS(divsf3) 65336817SdimFAST2_ALIAS(divsf3) 66