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) |	sasin.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) |	Description: The entry point sAsin computes the inverse sine of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) |		an input argument; sAsind 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 arcsin(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 sASIN takes approximately 310 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) |	ASIN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) |	1. If |X| >= 1, 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| < 1) Calculate asin(X) by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) |		z := sqrt( [1-X][1+X] )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) |		asin(X) = atan( x / 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| > 1, go to 5.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) |	4. (|X| = 1) sgn := sign(X), return asin(X) := sgn * Pi/2. Exit.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) |	5. (|X| > 1) Generate an invalid operation by 0 * infinity.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) |		Exit.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) |		Copyright (C) Motorola, Inc. 1990
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) |			All Rights Reserved
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) |       For details on the license for this file, please see the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) |       file, README, in this same directory.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) |SASIN	idnt	2,1 | Motorola 040 Floating Point Software Package
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	|section	8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) PIBY2:	.long 0x3FFF0000,0xC90FDAA2,0x2168C235,0x00000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 	|xref	t_operr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 	|xref	t_frcinx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 	|xref	t_extdnrm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 	|xref	satan
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	.global	sasind
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) sasind:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) |--ASIN(X) = X FOR DENORMALIZED X
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 	bra		t_extdnrm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	.global	sasin
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) sasin:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	fmovex		(%a0),%fp0	| ...LOAD INPUT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	movel		(%a0),%d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	movew		4(%a0),%d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	andil		#0x7FFFFFFF,%d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	cmpil		#0x3FFF8000,%d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	bges		asinbig
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) |--THIS IS THE USUAL CASE, |X| < 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) |--ASIN(X) = ATAN( X / SQRT( (1-X)(1+X) ) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	fmoves		#0x3F800000,%fp1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	fsubx		%fp0,%fp1		| ...1-X
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	fmovemx	%fp2-%fp2,-(%a7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	fmoves		#0x3F800000,%fp2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	faddx		%fp0,%fp2		| ...1+X
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	fmulx		%fp2,%fp1		| ...(1+X)(1-X)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	fmovemx	(%a7)+,%fp2-%fp2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	fsqrtx		%fp1		| ...SQRT([1-X][1+X])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	fdivx		%fp1,%fp0		| ...X/SQRT([1-X][1+X])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	fmovemx	%fp0-%fp0,(%a0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	bsr		satan
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	bra		t_frcinx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) asinbig:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	fabsx		%fp0	 | ...|X|
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	fcmps		#0x3F800000,%fp0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 	fbgt		t_operr		|cause an operr exception
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) |--|X| = 1, ASIN(X) = +- PI/2.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	fmovex		PIBY2,%fp0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	movel		(%a0),%d0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	andil		#0x80000000,%d0	| ...SIGN BIT OF X
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	oril		#0x3F800000,%d0	| ...+-1 IN SGL FORMAT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	movel		%d0,-(%sp)	| ...push SIGN(X) IN SGL-FMT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	fmovel		%d1,%FPCR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	fmuls		(%sp)+,%fp0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	bra		t_frcinx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	|end