Не удается получить доступ к памяти как тип SSE на x86, но отлично работает на x64

У меня есть код, написанный с использованием встроенных функций MSVC SSE.

            __m128 zero = _mm_setzero_ps();
            __m128 center = _mm_load_ps(&sphere.origin.x);
            __m128 boxmin = _mm_load_ps(&rhs.BottomLeftClosest.x);
            __m128 boxmax = _mm_load_ps(&rhs.TopRightFurthest.x);

            __m128 e = _mm_add_ps(_mm_max_ps(_mm_sub_ps(boxmin, center), zero), _mm_max_ps(_mm_sub_ps(center, boxmax), zero));
            e = _mm_mul_ps(e, e);

            __declspec(align(16)) float arr[4];
            _mm_store_ps(arr, e);
            float r = sphere.radius;
            return (arr[0] + arr[1] + arr[2] <= r * r);

Тип Math::Vector(, который является типом sphere.origin, rhs.BottomLeftClosestи rhs.TopRightFurthest), фактически является массивом из 3 чисел с плавающей запятой. Я выровнял их по 16 байтам, и этот код отлично работает на x64. Но на x86 я получаю нарушение прав доступа при чтении нулевого указателя. Любые советы о том, откуда это?

6
задан Puppy 7 May 2012 в 15:42
поделиться