4 |
/* */ |
/* */ |
5 |
/* FreeType trigonometric functions (body). */ |
/* FreeType trigonometric functions (body). */ |
6 |
/* */ |
/* */ |
7 |
/* Copyright 2001, 2002, 2003, 2004 by */ |
/* Copyright 2001, 2002, 2003, 2004, 2005 by */ |
8 |
/* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
/* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
9 |
/* */ |
/* */ |
10 |
/* This file is part of the FreeType project, and may only be used, */ |
/* This file is part of the FreeType project, and may only be used, */ |
110 |
shift = 0; |
shift = 0; |
111 |
|
|
112 |
#if 1 |
#if 1 |
113 |
/* determine msb bit index in 'shift' */ |
|
114 |
if ( z >= (1L << 16 ) ) |
/* determine msb bit index in `shift' */ |
115 |
|
if ( z >= ( 1L << 16 ) ) |
116 |
{ |
{ |
117 |
z >>= 16; |
z >>= 16; |
118 |
shift += 16; |
shift += 16; |
119 |
} |
} |
120 |
if ( z >= (1L << 8) ) |
if ( z >= ( 1L << 8 ) ) |
121 |
{ |
{ |
122 |
z >>= 8; |
z >>= 8; |
123 |
shift += 8; |
shift += 8; |
124 |
} |
} |
125 |
if ( z >= (1L << 4) ) |
if ( z >= ( 1L << 4 ) ) |
126 |
{ |
{ |
127 |
z >>= 4; |
z >>= 4; |
128 |
shift += 4; |
shift += 4; |
129 |
} |
} |
130 |
if ( z >= (1L << 2) ) |
if ( z >= ( 1L << 2 ) ) |
131 |
{ |
{ |
132 |
z >>= 2; |
z >>= 2; |
133 |
shift += 2; |
shift += 2; |
137 |
|
|
138 |
if ( shift < 28 ) |
if ( shift < 28 ) |
139 |
{ |
{ |
140 |
shift = 28-shift; |
shift = 28 - shift; |
|
|
|
141 |
vec->x = x << shift; |
vec->x = x << shift; |
142 |
vec->y = y << shift; |
vec->y = y << shift; |
143 |
} |
} |
148 |
vec->y = y >> shift; |
vec->y = y >> shift; |
149 |
shift = -shift; |
shift = -shift; |
150 |
} |
} |
151 |
#else |
|
152 |
|
#else /* 0 */ |
153 |
|
|
154 |
if ( z < ( 1L << 27 ) ) |
if ( z < ( 1L << 27 ) ) |
155 |
{ |
{ |
156 |
do |
do |
173 |
vec->y = y >> shift; |
vec->y = y >> shift; |
174 |
shift = -shift; |
shift = -shift; |
175 |
} |
} |
176 |
#endif |
|
177 |
|
#endif /* 0 */ |
178 |
|
|
179 |
return shift; |
return shift; |
180 |
} |
} |
181 |
|
|