/* This file is part of the Vc library. Copyright (C) 2010-2011 Matthias Kretz Vc is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Vc is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with Vc. If not, see . */ namespace ROOT { namespace Vc { namespace AVX { template Vc_ALWAYS_INLINE Vector &WriteMaskedVector::operator++() { vec->data() = VectorHelper::add(vec->data(), VectorHelper::notMaskedToZero(VectorHelper::one(), mask.data()) ); return *vec; } template Vc_ALWAYS_INLINE Vector &WriteMaskedVector::operator--() { vec->data() = VectorHelper::sub(vec->data(), VectorHelper::notMaskedToZero(VectorHelper::one(), mask.data()) ); return *vec; } template Vc_ALWAYS_INLINE Vector WriteMaskedVector::operator++(int) { Vector ret(*vec); vec->data() = VectorHelper::add(vec->data(), VectorHelper::notMaskedToZero(VectorHelper::one(), mask.data()) ); return ret; } template Vc_ALWAYS_INLINE Vector WriteMaskedVector::operator--(int) { Vector ret(*vec); vec->data() = VectorHelper::sub(vec->data(), VectorHelper::notMaskedToZero(VectorHelper::one(), mask.data()) ); return ret; } template Vc_ALWAYS_INLINE Vector &WriteMaskedVector::operator+=(const Vector &x) { vec->data() = VectorHelper::add(vec->data(), VectorHelper::notMaskedToZero(x.data(), mask.data())); return *vec; } template Vc_ALWAYS_INLINE Vector &WriteMaskedVector::operator-=(const Vector &x) { vec->data() = VectorHelper::sub(vec->data(), VectorHelper::notMaskedToZero(x.data(), mask.data())); return *vec; } template Vc_ALWAYS_INLINE Vector &WriteMaskedVector::operator*=(const Vector &x) { vec->assign(VectorHelper::mul(vec->data(), x.data()), mask); return *vec; } template Vc_ALWAYS_INLINE Vector &WriteMaskedVector::operator/=(const Vector &x) { vec->assign(*vec / x, mask); return *vec; } template Vc_ALWAYS_INLINE Vector &WriteMaskedVector::operator=(const Vector &x) { vec->assign(x, mask); return *vec; } } // namespace AVX } // namespace Vc } // namespace ROOT