Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) |	ssinh.sa 3.1 12/10/90
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) |       The entry point sSinh computes the hyperbolic sine of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) |       an input argument; sSinhd does the same except for denormalized
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) |       input.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) |       Input: Double-extended number X in location pointed to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) |		by address register a0.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) |       Output: The value sinh(X) returned in floating-point register Fp0.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) |       Accuracy and Monotonicity: The returned result is within 3 ulps in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) |               64 significant bit, i.e. within 0.5001 ulp to 53 bits if the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) |               result is subsequently rounded to double precision. The
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) |               result is provably monotonic in double precision.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) |       Speed: The program sSINH takes approximately 280 cycles.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) |       Algorithm:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) |       SINH
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) |       1. If |X| > 16380 log2, go to 3.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) |       2. (|X| <= 16380 log2) Sinh(X) is obtained by the formulae
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) |               y = |X|, sgn = sign(X), and z = expm1(Y),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) |               sinh(X) = sgn*(1/2)*( z + z/(1+z) ).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) |          Exit.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) |       3. If |X| > 16480 log2, go to 5.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) |       4. (16380 log2 < |X| <= 16480 log2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) |               sinh(X) = sign(X) * exp(|X|)/2.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) |          However, invoking exp(|X|) may cause premature overflow.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) |          Thus, we calculate sinh(X) as follows:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) |             Y       := |X|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) |             sgn     := sign(X)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) |             sgnFact := sgn * 2**(16380)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) |             Y'      := Y - 16381 log2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) |             sinh(X) := sgnFact * exp(Y').
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) |          Exit.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) |       5. (|X| > 16480 log2) sinh(X) must overflow. Return
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) |          sign(X)*Huge*Huge to generate overflow and an infinity with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) |          the appropriate sign. Huge is the largest finite number in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) |          extended format. Exit.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) |		Copyright (C) Motorola, Inc. 1990
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) |			All Rights Reserved
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) |       For details on the license for this file, please see the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) |       file, README, in this same directory.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) |SSINH	idnt	2,1 | Motorola 040 Floating Point Software Package
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	|section	8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) T1:	.long 0x40C62D38,0xD3D64634 | ... 16381 LOG2 LEAD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) T2:	.long 0x3D6F90AE,0xB1E75CC7 | ... 16381 LOG2 TRAIL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	|xref	t_frcinx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	|xref	t_ovfl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 	|xref	t_extdnrm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	|xref	setox
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	|xref	setoxm1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	.global	ssinhd
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) ssinhd:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) |--SINH(X) = X FOR DENORMALIZED X
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	bra	t_extdnrm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	.global	ssinh
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) ssinh:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	fmovex	(%a0),%fp0	| ...LOAD INPUT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	movel	(%a0),%d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	movew	4(%a0),%d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	movel	%d0,%a1		| save a copy of original (compacted) operand
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	andl	#0x7FFFFFFF,%d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	cmpl	#0x400CB167,%d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	bgts	SINHBIG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) |--THIS IS THE USUAL CASE, |X| < 16380 LOG2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) |--Y = |X|, Z = EXPM1(Y), SINH(X) = SIGN(X)*(1/2)*( Z + Z/(1+Z) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	fabsx	%fp0		| ...Y = |X|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 	moveml	%a1/%d1,-(%sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	fmovemx %fp0-%fp0,(%a0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 	clrl	%d1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 	bsr	setoxm1		| ...FP0 IS Z = EXPM1(Y)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	fmovel	#0,%fpcr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	moveml	(%sp)+,%a1/%d1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	fmovex	%fp0,%fp1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	fadds	#0x3F800000,%fp1	| ...1+Z
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	fmovex	%fp0,-(%sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	fdivx	%fp1,%fp0		| ...Z/(1+Z)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	movel	%a1,%d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	andl	#0x80000000,%d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	orl	#0x3F000000,%d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	faddx	(%sp)+,%fp0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	movel	%d0,-(%sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	fmovel	%d1,%fpcr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	fmuls	(%sp)+,%fp0	|last fp inst - possible exceptions set
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	bra	t_frcinx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) SINHBIG:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	cmpl	#0x400CB2B3,%d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	bgt	t_ovfl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	fabsx	%fp0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	fsubd	T1(%pc),%fp0	| ...(|X|-16381LOG2_LEAD)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 	movel	#0,-(%sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 	movel	#0x80000000,-(%sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	movel	%a1,%d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	andl	#0x80000000,%d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 	orl	#0x7FFB0000,%d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 	movel	%d0,-(%sp)	| ...EXTENDED FMT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	fsubd	T2(%pc),%fp0	| ...|X| - 16381 LOG2, ACCURATE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	movel	%d1,-(%sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	clrl	%d1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 	fmovemx %fp0-%fp0,(%a0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 	bsr	setox
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 	fmovel	(%sp)+,%fpcr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 	fmulx	(%sp)+,%fp0	|possible exception
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 	bra	t_frcinx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 	|end