for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
if (wf->execMask(lane)) {
+ int exp;
+ std::frexp(src[lane],&exp);
if (std::isnan(src[lane])) {
vdst[lane] = 0;
+ } else if (std::isinf(src[lane]) || exp > 30) {
+ if (std::signbit(src[lane])) {
+ vdst[lane] = INT_MIN;
+ } else {
+ vdst[lane] = INT_MAX;
+ }
} else {
vdst[lane] = (VecElemI32)src[lane];
}
for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
if (wf->execMask(lane)) {
+ int exp;
+ std::frexp(src[lane],&exp);
if (std::isnan(src[lane])) {
vdst[lane] = 0;
+ } else if (std::isinf(src[lane])) {
+ if (std::signbit(src[lane])) {
+ vdst[lane] = 0;
+ } else {
+ vdst[lane] = UINT_MAX;
+ }
+ } else if (exp > 31) {
+ vdst[lane] = UINT_MAX;
} else {
vdst[lane] = (VecElemU32)src[lane];
}
for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
if (wf->execMask(lane)) {
+ int exp;
+ std::frexp(src[lane],&exp);
if (std::isnan(src[lane])) {
vdst[lane] = 0;
+ } else if (std::isinf(src[lane]) || exp > 30) {
+ if (std::signbit(src[lane])) {
+ vdst[lane] = INT_MIN;
+ } else {
+ vdst[lane] = INT_MAX;
+ }
} else {
vdst[lane] = (VecElemI32)src[lane];
}
for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
if (wf->execMask(lane)) {
+ int exp;
+ std::frexp(src[lane],&exp);
if (std::isnan(src[lane])) {
vdst[lane] = 0;
+ } else if (std::isinf(src[lane])) {
+ if (std::signbit(src[lane])) {
+ vdst[lane] = 0;
+ } else {
+ vdst[lane] = UINT_MAX;
+ }
+ } else if (exp > 31) {
+ vdst[lane] = UINT_MAX;
} else {
vdst[lane] = (VecElemU32)src[lane];
}
for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
if (wf->execMask(lane)) {
+ int exp;
+ std::frexp(src[lane],&exp);
if (std::isnan(src[lane])) {
vdst[lane] = 0;
+ } else if (std::isinf(src[lane]) || exp > 30) {
+ if (std::signbit(src[lane])) {
+ vdst[lane] = INT_MIN;
+ } else {
+ vdst[lane] = INT_MAX;
+ }
} else {
vdst[lane] = (VecElemI32)src[lane];
}
for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
if (wf->execMask(lane)) {
+ int exp;
+ std::frexp(src[lane],&exp);
if (std::isnan(src[lane])) {
vdst[lane] = 0;
+ } else if (std::isinf(src[lane])) {
+ if (std::signbit(src[lane])) {
+ vdst[lane] = 0;
+ } else {
+ vdst[lane] = UINT_MAX;
+ }
+ } else if (exp > 31) {
+ vdst[lane] = UINT_MAX;
} else {
vdst[lane] = (VecElemU32)src[lane];
}
for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
if (wf->execMask(lane)) {
+ int exp;
+ std::frexp(src[lane],&exp);
if (std::isnan(src[lane])) {
vdst[lane] = 0;
+ } else if (std::isinf(src[lane]) || exp > 30) {
+ if (std::signbit(src[lane])) {
+ vdst[lane] = INT_MIN;
+ } else {
+ vdst[lane] = INT_MAX;
+ }
} else {
vdst[lane] = (VecElemI32)src[lane];
}
for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
if (wf->execMask(lane)) {
- vdst[lane] = (VecElemU32)src[lane];
+ int exp;
+ std::frexp(src[lane],&exp);
+ if (std::isnan(src[lane])) {
+ vdst[lane] = 0;
+ } else if (std::isinf(src[lane])) {
+ if (std::signbit(src[lane])) {
+ vdst[lane] = 0;
+ } else {
+ vdst[lane] = UINT_MAX;
+ }
+ } else if (exp > 31) {
+ vdst[lane] = UINT_MAX;
+ } else {
+ vdst[lane] = (VecElemU32)src[lane];
+ }
}
}