brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · 532df9a Raw
82 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 RIN r022#define S r023#define H r124#define D r225#define E r326#define HALF r427#define R r528 29#define Q6_ALIAS(TAG) .global __qdsp_##TAG ; .set __qdsp_##TAG, __hexagon_##TAG30#define FAST_ALIAS(TAG) .global __hexagon_fast_##TAG ; .set __hexagon_fast_##TAG, __hexagon_##TAG31#define FAST2_ALIAS(TAG) .global __hexagon_fast2_##TAG ; .set __hexagon_fast2_##TAG, __hexagon_##TAG32 33FUNCTION_BEGIN __hexagon_sqrtf34  {35    E,p0 = sfinvsqrta(RIN)36    R = sffixupr(RIN)37    HALF = ##0x3f000000   // 0.538    r1:0 = combine(#0,#0)   // clear S/H39  }40  {41    S += sfmpy(E,R):lib   // S042    H += sfmpy(E,HALF):lib    // H043    D = HALF44    E = R45  }46  {47    D -= sfmpy(S,H):lib   // d048    p1 = sfclass(R,#1)    // is zero?49    //E -= sfmpy(S,S):lib   // e050  }51  {52    S += sfmpy(S,D):lib   // S153    H += sfmpy(H,D):lib   // H154    D = HALF55    E = R56  }57  {58    D -= sfmpy(S,H):lib   // d059    E -= sfmpy(S,S):lib   // e060  }61  {62    S += sfmpy(H,E):lib   // S263    H += sfmpy(H,D):lib   // H264    D = HALF65    E = R66  }67  {68    //D -= sfmpy(S,H):lib   // d269    E -= sfmpy(S,S):lib   // e270    if (p1) r0 = or(r0,R)     // sqrt(-0.0) = -0.071  }72  {73    S += sfmpy(H,E,p0):scale  // S374    jumpr r3175  }76 77FUNCTION_END __hexagon_sqrtf78 79Q6_ALIAS(sqrtf)80FAST_ALIAS(sqrtf)81FAST2_ALIAS(sqrtf)82