1 //===----------------------Hexagon builtin routine ------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 .macro FUNCTION_BEGIN name
14 .type \name, @function
18 .macro FUNCTION_END name
19 .size \name, . - \name
30 #define Q6_ALIAS(TAG) .global __qdsp_##TAG ; .set __qdsp_##TAG, __hexagon_##TAG
31 #define FAST_ALIAS(TAG) .global __hexagon_fast_##TAG ; .set __hexagon_fast_##TAG, __hexagon_##TAG
32 #define FAST2_ALIAS(TAG) .global __hexagon_fast2_##TAG ; .set __hexagon_fast2_##TAG, __hexagon_##TAG
34 FUNCTION_BEGIN __hexagon_sqrtf
36 E,p0 = sfinvsqrta(RIN)
38 HALF = ##0x3f000000 // 0.5
39 r1:0 = combine(#0,#0) // clear S/H
42 S += sfmpy(E,R):lib // S0
43 H += sfmpy(E,HALF):lib // H0
48 D -= sfmpy(S,H):lib // d0
49 p1 = sfclass(R,#1) // is zero?
50 //E -= sfmpy(S,S):lib // e0
53 S += sfmpy(S,D):lib // S1
54 H += sfmpy(H,D):lib // H1
59 D -= sfmpy(S,H):lib // d0
60 E -= sfmpy(S,S):lib // e0
63 S += sfmpy(H,E):lib // S2
64 H += sfmpy(H,D):lib // H2
69 //D -= sfmpy(S,H):lib // d2
70 E -= sfmpy(S,S):lib // e2
71 if (p1) r0 = or(r0,R) // sqrt(-0.0) = -0.0
74 S += sfmpy(H,E,p0):scale // S3
78 FUNCTION_END __hexagon_sqrtf