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) |	satanh.sa 3.3 12/19/90
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) |	The entry point satanh computes the inverse
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) |	hyperbolic tangent of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) |	an input argument; satanhd does the same except for denormalized
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) |	input.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) |	Input: Double-extended number X in location pointed to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) |		by address register a0.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) |	Output: The value arctanh(X) returned in floating-point register Fp0.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) |	Accuracy and Monotonicity: The returned result is within 3 ulps in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) |		64 significant bit, i.e. within 0.5001 ulp to 53 bits if the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) |		result is subsequently rounded to double precision. The
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) |		result is provably monotonic in double precision.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) |	Speed: The program satanh takes approximately 270 cycles.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) |	Algorithm:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) |	ATANH
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) |	1. If |X| >= 1, go to 3.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) |	2. (|X| < 1) Calculate atanh(X) by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) |		sgn := sign(X)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) |		y := |X|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) |		z := 2y/(1-y)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) |		atanh(X) := sgn * (1/2) * logp1(z)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) |		Exit.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) |	3. If |X| > 1, go to 5.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) |	4. (|X| = 1) Generate infinity with an appropriate sign and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) |		divide-by-zero by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) |		sgn := sign(X)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) |		atan(X) := sgn / (+0).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) |		Exit.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) |	5. (|X| > 1) Generate an invalid operation by 0 * infinity.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) |		Exit.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) |		Copyright (C) Motorola, Inc. 1990
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) |			All Rights Reserved
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) |       For details on the license for this file, please see the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) |       file, README, in this same directory.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) |satanh	idnt	2,1 | Motorola 040 Floating Point Software Package
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 	|section	8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	|xref	t_dz
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	|xref	t_operr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	|xref	t_frcinx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 	|xref	t_extdnrm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 	|xref	slognp1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	.global	satanhd
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) satanhd:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) |--ATANH(X) = X FOR DENORMALIZED X
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	bra		t_extdnrm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	.global	satanh
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) satanh:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	movel		(%a0),%d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	movew		4(%a0),%d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 	andil		#0x7FFFFFFF,%d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	cmpil		#0x3FFF8000,%d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	bges		ATANHBIG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) |--THIS IS THE USUAL CASE, |X| < 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) |--Y = |X|, Z = 2Y/(1-Y), ATANH(X) = SIGN(X) * (1/2) * LOG1P(Z).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	fabsx		(%a0),%fp0	| ...Y = |X|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	fmovex		%fp0,%fp1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	fnegx		%fp1		| ...-Y
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	faddx		%fp0,%fp0		| ...2Y
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	fadds		#0x3F800000,%fp1	| ...1-Y
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	fdivx		%fp1,%fp0		| ...2Y/(1-Y)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	movel		(%a0),%d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	andil		#0x80000000,%d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	oril		#0x3F000000,%d0	| ...SIGN(X)*HALF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	movel		%d0,-(%sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	fmovemx	%fp0-%fp0,(%a0)	| ...overwrite input
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 	movel		%d1,-(%sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	clrl		%d1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 	bsr		slognp1		| ...LOG1P(Z)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 	fmovel		(%sp)+,%fpcr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	fmuls		(%sp)+,%fp0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	bra		t_frcinx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) ATANHBIG:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	fabsx		(%a0),%fp0	| ...|X|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	fcmps		#0x3F800000,%fp0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	fbgt		t_operr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	bra		t_dz
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	|end