1
/* -*- Mode: Asm -*- */
3
log.S is part of FPlib V 0.3.0 ported to avr-as
4
for copyright and details see readme.fplib
6
*----------------------------------------------------------------------------------------
10
* log( x ) = exponent(x)*ln(2) + log(matissae(x))
14
* z = (x*sqrt(2)-1)/(x*sqrt(2)+1) = (x - 1/sqrt(2)/(x+1/sqrt(2))
15
* log( x ) = ((F2 * z*z + F1)*z*z + F0)*z - ln(sqrt(2))
16
* P0 + x (P1 + x * (P2 + x * (P3 + x * (P4 + x * P5))))
17
* = -----------------------------------------------------
18
* Q0 + x (Q1 + x * (Q2 + x * (Q3 + x * (Q4 + x * Q5))))
19
* P0 = -3.42819 [C0 5B 67 82]
20
* P1 = -7.05769 [C0 E1 D8 A1]
21
* P2 = -20.5693 [C1 A4 8D D9]
22
* P3 = 9.48417 [41 17 BF 24]
23
* P4 = 6.09923 [40 C3 2C E2]
24
* P5 = 15.4718 [41 77 8C 4F]
25
* Q0 = 1 [3F 80 00 00]
26
* Q1 = 7.07107 [40 E2 46 30]
27
* Q2 = 20 [41 A0 00 00]
28
* Q3 = 28.2843 [41 E2 46 32]
29
* Q4 = 20 [41 A0 00 01]
30
* Q5 = 5.65685 [40 B5 04 F4]
42
RJMP _U(__fp_nanEDOM) ; A < 0 argument range error
47
RJMP _U(__fp_nanEDOM) ; A == 0 argument range error
55
LDI rA3,0x3F ; load 0x7E as exponent =>
56
ANDI rA2,0x7F ; 2^-1 * 1.m = [0.5..1.0[
59
LDI ZH,HIGH(table_log)
60
RCALL _U(fp_powerseries)
90
/* these constants are *no* IEEE float values: exponent unpacked allready
91
* first byte : exponent
92
* 2nd byte : msb of mantissa with sign as bit 7
93
* 3rd & 4th byte : mantissa
97
DCB 5 ; no of table entries - 1 (preload value)
98
DCB 0x81,0x35,0x04,0xF4 /* Q5 = 5.65685 */
99
DCB 0x83,0x20,0x00,0x01 /* Q4 = 20 */
100
DCB 0x83,0x62,0x46,0x32 /* Q3 = 28.2843 */
101
DCB 0x83,0x20,0x00,0x00 /* Q2 = 20 */
102
DCB 0x81,0x62,0x46,0x30 /* Q1 = 7.07107 */
103
DCB 0x7F,0x00,0x00,0x00 /* Q0 = 1 */
105
DCB 0x82,0x77,0x8C,0x4F /* P5 = 15.4718 */
106
DCB 0x81,0x43,0x2C,0xE2 /* P4 = 6.09923 */
107
DCB 0x82,0x17,0xBF,0x24 /* P3 = 9.48417 */
108
DCB 0x83,0xA4,0x8D,0xD9 /* P2 = -20.5693 */
109
DCB 0x81,0xE1,0xD8,0xA1 /* P1 = -7.05769 */
110
DCB 0x80,0xDB,0x67,0x82 /* P0 = -3.42819 */