FreeCalypso > hg > gsm-codec-lib
annotate libgsmhr1/mathdp31.c @ 585:3c6bf0d26ee7 default tip
TW-TS-005 reader: fix maximum line length bug
TW-TS-005 section 4.1 states:
The maximum allowed length of each line is 80 characters, not
including the OS-specific newline encoding.
The implementation of this line length limit in the TW-TS-005 hex file
reader function in the present suite was wrong, such that lines of
the full maximum length could not be read. Fix it.
Note that this bug affects comment lines too, not just actual RTP
payloads. Neither Annex A nor Annex B features an RTP payload format
that goes to the maximum of 40 bytes, but if a comment line goes to
the maximum allowed length of 80 characters not including the
terminating newline, the bug will be triggered, necessitating
the present fix.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 25 Feb 2025 07:49:28 +0000 |
parents | 024615de06fe |
children |
rev | line source |
---|---|
503
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /*************************************************************************** |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * File Name: mathdp31.c |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * Purpose: Contains functions increased-precision arithmetic operations. |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 * Below is a listing of all the functions in this file. There |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 * is no interdependence among the functions. |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 * L_mpy_ls() |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 * L_mpy_ll() |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 * isLwLimit() |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 * isSwLimit() |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 ***************************************************************************/ |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 /*_________________________________________________________________________ |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 | | |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 | Include Files | |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 |_________________________________________________________________________| |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 */ |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 |
504
024615de06fe
libgsmhr1: compile mathdp31.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
503
diff
changeset
|
22 #include "typedefs.h" |
024615de06fe
libgsmhr1: compile mathdp31.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
503
diff
changeset
|
23 #include "namespace.h" |
503
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 #include "mathhalf.h" |
504
024615de06fe
libgsmhr1: compile mathdp31.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
503
diff
changeset
|
25 #include "mathdp31.h" |
503
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 /**************************************************************************** |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 * FUNCTION NAME: isLwLimit |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 * PURPOSE: |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 * Check to see if the input Longword is at the |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 * upper or lower limit of its range. i.e. |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 * 0x7fff ffff or -0x8000 0000 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 * Ostensibly this is a check for an overflow. |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 * This does not truly mean an overflow occurred, |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 * it means the value reached is the |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 * maximum/minimum value representable. It may |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 * have come about due to an overflow. |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 * INPUTS: |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 * L_In A Longword input variable |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 * OUTPUTS: none |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 * RETURN VALUE: 1 if input == 0x7fff ffff or -0x8000 0000 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 * 0 otherwise |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 * KEYWORDS: saturation, limit |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 ***************************************************************************/ |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 short isLwLimit(Longword L_In) |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 { |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 Longword L_ls; |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 short siOut; |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 if (L_In != 0) |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 { |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 L_ls = L_shl(L_In, 1); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 if (L_sub(L_In, L_ls) == 0) |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 siOut = 1; |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 else |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 siOut = 0; |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 } |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 else |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 { |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 siOut = 0; |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 } |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 return (siOut); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 } |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 /**************************************************************************** |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 * FUNCTION NAME: isSwLimit |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 * PURPOSE: |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 * Check to see if the input Shortword is at the |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 * upper or lower limit of its range. i.e. |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 * 0x7fff or -0x8000 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 * Ostensibly this is a check for an overflow. |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 * This does not truly mean an overflow occurred, |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 * it means the value reached is the |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 * maximum/minimum value representable. It may |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 * have come about due to an overflow. |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 * INPUTS: |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 * swIn A Shortword input variable |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 * OUTPUTS: none |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 * RETURN VALUE: 1 if input == 0x7fff or -0x8000 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 * 0 otherwise |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 * KEYWORDS: saturation, limit |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 ***************************************************************************/ |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 short isSwLimit(Shortword swIn) |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 { |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 Shortword swls; |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 short siOut; |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 if (swIn != 0) |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 { |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 swls = shl(swIn, 1); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 if (sub(swIn, swls) == 0) /* logical compare outputs 1/0 */ |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 siOut = 1; |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 else |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 siOut = 0; |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 } |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 else |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 { |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 siOut = 0; |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 } |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 return (siOut); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 } |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 /**************************************************************************** |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 * FUNCTION NAME: L_mpy_ll |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 * PURPOSE: Multiply a 32 bit number (L_var1) and a 32 bit number |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 * (L_var2), and return a 32 bit result. |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 * INPUTS: |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 * L_var1 A Longword input variable |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 * L_var2 A Longword input variable |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 * OUTPUTS: none |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 * IMPLEMENTATION: |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 * Performs a 31x31 bit multiply, Complexity=24 Ops. |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 * Let x1x0, or y1y0, be the two constituent halves |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 * of a 32 bit number. This function performs the |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 * following: |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 * low = ((x0 >> 1)*(y0 >> 1)) >> 16 (low * low) |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 * mid1 = [(x1 * (y0 >> 1)) >> 1 ] (high * low) |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 * mid2 = [(y1 * (x0 >> 1)) >> 1] (high * low) |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 * mid = (mid1 + low + mid2) >> 14 (sum so far) |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 * output = (y1*x1) + mid (high * high) |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 * RETURN VALUE: A Longword value |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 * KEYWORDS: mult,mpy,multiplication |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 ***************************************************************************/ |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 Longword L_mpy_ll(Longword L_var1, Longword L_var2) |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 { |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 Shortword swLow1, |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 swLow2, |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 swHigh1, |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 swHigh2; |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 Longword L_varOut, |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 L_low, |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 L_mid1, |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 L_mid2, |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 L_mid; |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 swLow1 = shr(extract_l(L_var1), 1); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 swLow1 = SW_MAX & swLow1; |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 swLow2 = shr(extract_l(L_var2), 1); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 swLow2 = SW_MAX & swLow2; |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 swHigh1 = extract_h(L_var1); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 swHigh2 = extract_h(L_var2); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 L_low = L_mult(swLow1, swLow2); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 L_low = L_shr(L_low, 16); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 L_mid1 = L_mult(swHigh1, swLow2); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 L_mid1 = L_shr(L_mid1, 1); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 L_mid = L_add(L_mid1, L_low); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 L_mid2 = L_mult(swHigh2, swLow1); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 L_mid2 = L_shr(L_mid2, 1); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 L_mid = L_add(L_mid, L_mid2); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 L_mid = L_shr(L_mid, 14); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 L_varOut = L_mac(L_mid, swHigh1, swHigh2); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 return (L_varOut); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 } |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 /**************************************************************************** |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 * FUNCTION NAME: L_mpy_ls |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 * PURPOSE: Multiply a 32 bit number (L_var2) and a 16 bit |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 * number (var1) returning a 32 bit result. L_var2 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 * is truncated to 31 bits prior to executing the |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 * multiply. |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 * INPUTS: |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 * L_var2 A Longword input variable |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 * var1 A Shortword input variable |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 * OUTPUTS: none |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 * RETURN VALUE: A Longword value |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 * KEYWORDS: mult,mpy,multiplication |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 * |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 ***************************************************************************/ |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227 Longword L_mpy_ls(Longword L_var2, Shortword var1) |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 { |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 Longword L_varOut; |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 Shortword swtemp; |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 swtemp = shr(extract_l(L_var2), 1); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 swtemp = (short) 32767 & (short) swtemp; |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 L_varOut = L_mult(var1, swtemp); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 L_varOut = L_shr(L_varOut, 15); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 L_varOut = L_mac(L_varOut, var1, extract_h(L_var2)); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238 return (L_varOut); |
3654df24451f
libgsmhr1/mathdp31.[ch]: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 } |