194 {
195
196
197
198 if (representation == kUnboxedDouble) {
199 switch (token_kind) {
200 case Token::kABS:
201 return fabs(value);
202 case Token::kNEGATE:
204 case Token::kSQRT:
206 case Token::kSQUARE:
208 case Token::kTRUNCATE:
210 case Token::kFLOOR:
212 case Token::kCEILING:
214 default:
216 }
217 } else {
218 ASSERT(representation == kUnboxedFloat);
219 switch (token_kind) {
220 case Token::kABS:
221 return fabsf(static_cast<float>(value));
222 case Token::kNEGATE:
223 return -
static_cast<float>(
value);
224 case Token::kRECIPROCAL:
225 return 1.0f /
static_cast<float>(
value);
226 case Token::kRECIPROCAL_SQRT:
227 return sqrtf(1.0f / static_cast<float>(value));
228 case Token::kSQRT:
229 return sqrtf(static_cast<float>(value));
230 case Token::kSQUARE:
231 return static_cast<float>(
value) *
static_cast<float>(value);
232 default:
234 }
235 }
236}
SIN Vec< N, float > trunc(const Vec< N, float > &x)
SIN Vec< N, float > sqrt(const Vec< N, float > &x)
SIN Vec< N, float > floor(const Vec< N, float > &x)
SIN Vec< N, float > ceil(const Vec< N, float > &x)