66 lines · plain
1//===----------------------Hexagon builtin routine ------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9 .macro FUNCTION_BEGIN name10 .text11 .p2align 512 .globl \name13 .type \name, @function14\name:15 .endm16 17 .macro FUNCTION_END name18 .size \name, . - \name19 .endm20 21#define Q6_ALIAS(TAG) .global __qdsp_##TAG ; .set __qdsp_##TAG, __hexagon_##TAG22#define FAST_ALIAS(TAG) .global __hexagon_fast_##TAG ; .set __hexagon_fast_##TAG, __hexagon_##TAG23#define FAST2_ALIAS(TAG) .global __hexagon_fast2_##TAG ; .set __hexagon_fast2_##TAG, __hexagon_##TAG24 25FUNCTION_BEGIN __hexagon_divsf326 {27 r2,p0 = sfrecipa(r0,r1)28 r4 = sffixupd(r0,r1)29 r3 = ##0x3f800000 // 1.030 }31 {32 r5 = sffixupn(r0,r1)33 r3 -= sfmpy(r4,r2):lib // 1-(den/recip) yields error?34 r6 = ##0x8000000035 r7 = r336 }37 {38 r2 += sfmpy(r3,r2):lib39 r3 = r740 r6 = r541 r0 = and(r6,r5)42 }43 {44 r3 -= sfmpy(r4,r2):lib45 r0 += sfmpy(r5,r2):lib46 }47 {48 r2 += sfmpy(r3,r2):lib49 r6 -= sfmpy(r0,r4):lib50 }51 {52 r0 += sfmpy(r6,r2):lib53 }54 {55 r5 -= sfmpy(r0,r4):lib56 }57 {58 r0 += sfmpy(r5,r2,p0):scale59 jumpr r3160 }61FUNCTION_END __hexagon_divsf362 63Q6_ALIAS(divsf3)64FAST_ALIAS(divsf3)65FAST2_ALIAS(divsf3)66