#ifdef __GNUC__ template static Vc_ALWAYS_INLINE void forceToRegisters(const Vector &x1) { __asm__ __volatile__(""::"x"(x1.data())); } template static Vc_ALWAYS_INLINE void forceToRegistersDirty(Vector &x1) { __asm__ __volatile__("":"+x"(x1.data())); } template static Vc_ALWAYS_INLINE void forceToRegisters(const Vector &x2, const Vector &x1) { __asm__ __volatile__(""::"x"(x2.data()), "x"(x1.data())); } template static Vc_ALWAYS_INLINE void forceToRegistersDirty(Vector &x2, Vector &x1) { __asm__ __volatile__("":"+x"(x2.data()), "+x"(x1.data())); } template static Vc_ALWAYS_INLINE void forceToRegisters(const Vector &x3, const Vector &x2, const Vector &x1) { __asm__ __volatile__(""::"x"(x3.data()), "x"(x2.data()), "x"(x1.data())); } template static Vc_ALWAYS_INLINE void forceToRegistersDirty(Vector &x3, Vector &x2, Vector &x1) { __asm__ __volatile__("":"+x"(x3.data()), "+x"(x2.data()), "+x"(x1.data())); } template static Vc_ALWAYS_INLINE void forceToRegisters(const Vector &x4, const Vector &x3, const Vector &x2, const Vector &x1) { __asm__ __volatile__(""::"x"(x4.data()), "x"(x3.data()), "x"(x2.data()), "x"(x1.data())); } template static Vc_ALWAYS_INLINE void forceToRegistersDirty(Vector &x4, Vector &x3, Vector &x2, Vector &x1) { __asm__ __volatile__("":"+x"(x4.data()), "+x"(x3.data()), "+x"(x2.data()), "+x"(x1.data())); } template static Vc_ALWAYS_INLINE void forceToRegisters(const Vector &x5, const Vector &x4, const Vector &x3, const Vector &x2, const Vector &x1) { __asm__ __volatile__(""::"x"(x5.data()), "x"(x4.data()), "x"(x3.data()), "x"(x2.data()), "x"(x1.data())); } template static Vc_ALWAYS_INLINE void forceToRegistersDirty(Vector &x5, Vector &x4, Vector &x3, Vector &x2, Vector &x1) { __asm__ __volatile__("":"+x"(x5.data()), "+x"(x4.data()), "+x"(x3.data()), "+x"(x2.data()), "+x"(x1.data())); } template static Vc_ALWAYS_INLINE void forceToRegisters(const Vector &x6, const Vector &x5, const Vector &x4, const Vector &x3, const Vector &x2, const Vector &x1) { __asm__ __volatile__(""::"x"(x6.data()), "x"(x5.data()), "x"(x4.data()), "x"(x3.data()), "x"(x2.data()), "x"(x1.data())); } template static Vc_ALWAYS_INLINE void forceToRegistersDirty(Vector &x6, Vector &x5, Vector &x4, Vector &x3, Vector &x2, Vector &x1) { __asm__ __volatile__("":"+x"(x6.data()), "+x"(x5.data()), "+x"(x4.data()), "+x"(x3.data()), "+x"(x2.data()), "+x"(x1.data())); } template static Vc_ALWAYS_INLINE void forceToRegisters(const Vector &x7, const Vector &x6, const Vector &x5, const Vector &x4, const Vector &x3, const Vector &x2, const Vector &x1) { __asm__ __volatile__(""::"x"(x7.data()), "x"(x6.data()), "x"(x5.data()), "x"(x4.data()), "x"(x3.data()), "x"(x2.data()), "x"(x1.data())); } template static Vc_ALWAYS_INLINE void forceToRegistersDirty(Vector &x7, Vector &x6, Vector &x5, Vector &x4, Vector &x3, Vector &x2, Vector &x1) { __asm__ __volatile__("":"+x"(x7.data()), "+x"(x6.data()), "+x"(x5.data()), "+x"(x4.data()), "+x"(x3.data()), "+x"(x2.data()), "+x"(x1.data())); } template static Vc_ALWAYS_INLINE void forceToRegisters(const Vector &x8, const Vector &x7, const Vector &x6, const Vector &x5, const Vector &x4, const Vector &x3, const Vector &x2, const Vector &x1) { __asm__ __volatile__(""::"x"(x8.data()), "x"(x7.data()), "x"(x6.data()), "x"(x5.data()), "x"(x4.data()), "x"(x3.data()), "x"(x2.data()), "x"(x1.data())); } template static Vc_ALWAYS_INLINE void forceToRegistersDirty(Vector &x8, Vector &x7, Vector &x6, Vector &x5, Vector &x4, Vector &x3, Vector &x2, Vector &x1) { __asm__ __volatile__("":"+x"(x8.data()), "+x"(x7.data()), "+x"(x6.data()), "+x"(x5.data()), "+x"(x4.data()), "+x"(x3.data()), "+x"(x2.data()), "+x"(x1.data())); } #elif defined(VC_MSVC) #pragma optimize("g", off) template static Vc_ALWAYS_INLINE void forceToRegisters(const Vector &/*x1*/) { } #pragma optimize("g", off) template static Vc_ALWAYS_INLINE void forceToRegistersDirty(Vector &/*x1*/) { } #pragma optimize("g", on) #pragma optimize("g", off) template static Vc_ALWAYS_INLINE void forceToRegisters(const Vector &/*x2*/, const Vector &/*x1*/) { } #pragma optimize("g", off) template static Vc_ALWAYS_INLINE void forceToRegistersDirty(Vector &/*x2*/, Vector &/*x1*/) { } #pragma optimize("g", on) #pragma optimize("g", off) template static Vc_ALWAYS_INLINE void forceToRegisters(const Vector &/*x3*/, const Vector &/*x2*/, const Vector &/*x1*/) { } #pragma optimize("g", off) template static Vc_ALWAYS_INLINE void forceToRegistersDirty(Vector &/*x3*/, Vector &/*x2*/, Vector &/*x1*/) { } #pragma optimize("g", on) #pragma optimize("g", off) template static Vc_ALWAYS_INLINE void forceToRegisters(const Vector &/*x4*/, const Vector &/*x3*/, const Vector &/*x2*/, const Vector &/*x1*/) { } #pragma optimize("g", off) template static Vc_ALWAYS_INLINE void forceToRegistersDirty(Vector &/*x4*/, Vector &/*x3*/, Vector &/*x2*/, Vector &/*x1*/) { } #pragma optimize("g", on) #pragma optimize("g", off) template static Vc_ALWAYS_INLINE void forceToRegisters(const Vector &/*x5*/, const Vector &/*x4*/, const Vector &/*x3*/, const Vector &/*x2*/, const Vector &/*x1*/) { } #pragma optimize("g", off) template static Vc_ALWAYS_INLINE void forceToRegistersDirty(Vector &/*x5*/, Vector &/*x4*/, Vector &/*x3*/, Vector &/*x2*/, Vector &/*x1*/) { } #pragma optimize("g", on) #pragma optimize("g", off) template static Vc_ALWAYS_INLINE void forceToRegisters(const Vector &/*x6*/, const Vector &/*x5*/, const Vector &/*x4*/, const Vector &/*x3*/, const Vector &/*x2*/, const Vector &/*x1*/) { } #pragma optimize("g", off) template static Vc_ALWAYS_INLINE void forceToRegistersDirty(Vector &/*x6*/, Vector &/*x5*/, Vector &/*x4*/, Vector &/*x3*/, Vector &/*x2*/, Vector &/*x1*/) { } #pragma optimize("g", on) #pragma optimize("g", off) template static Vc_ALWAYS_INLINE void forceToRegisters(const Vector &/*x7*/, const Vector &/*x6*/, const Vector &/*x5*/, const Vector &/*x4*/, const Vector &/*x3*/, const Vector &/*x2*/, const Vector &/*x1*/) { } #pragma optimize("g", off) template static Vc_ALWAYS_INLINE void forceToRegistersDirty(Vector &/*x7*/, Vector &/*x6*/, Vector &/*x5*/, Vector &/*x4*/, Vector &/*x3*/, Vector &/*x2*/, Vector &/*x1*/) { } #pragma optimize("g", on) #pragma optimize("g", off) template static Vc_ALWAYS_INLINE void forceToRegisters(const Vector &/*x8*/, const Vector &/*x7*/, const Vector &/*x6*/, const Vector &/*x5*/, const Vector &/*x4*/, const Vector &/*x3*/, const Vector &/*x2*/, const Vector &/*x1*/) { } #pragma optimize("g", off) template static Vc_ALWAYS_INLINE void forceToRegistersDirty(Vector &/*x8*/, Vector &/*x7*/, Vector &/*x6*/, Vector &/*x5*/, Vector &/*x4*/, Vector &/*x3*/, Vector &/*x2*/, Vector &/*x1*/) { } #pragma optimize("g", on) #else #error "forceToRegisters unsupported on this compiler" #endif