Hi.
I have the code:
float *mu_x_ptr;
__m128 *tmp;
__m128 *mm_mu_x;
mu_x_ptr = _aligned_malloc(4*sizeof(float), 16);
mm_mu_x = (__m128*) mu_x_ptr;
for(row = 0; row < ker_size; row++) {
tmp = (__m128*) &original[row*width + col];
*mm_mu_x = _mm_add_ps(*tmp, *mm_mu_x);
}
From this I get:
First-chance exception at 0x00ad192e in SSIM.exe: 0xC0000005: Access violation reading location 0x00000000.
Unhandled exception at 0x00ad192e in SSIM.exe: 0xC0000005: Access violation reading location 0x00000000.
The program '[4452] SSIM.exe: Native' has exited with code -1073741819 (0xc0000005)
when running the program, the error occurs at the _mm_add_ps line.
original is allocated using _aligned_malloc(..., 16); as well and passed to the function, so it shouldn't, as far as my understanding of sse goes, be that it's not alligned.
I'm wondering if anyone can see why this crashes, since I can't see why.
EDIT: Width and col is always multiples of 4. Col is 0 or 4, while width is always a multiple of 4.
EDIT2: Looks like my original array is not aligned. Wouldn't:
function(float *original);
.
.
.
orignal = _aligned_malloc(width*height*sizeof(float), 16);
function(original);
_aligned_free(original);
}
Make sure that original is alligned inside of function?
Edit3: This is actually really weird. When I do:
float *orig;
orig = _aligned_malloc(width*height*sizeof(float), 16);
assert(isAligned(orig));
The assert fails with
#define isAligned(p) (((unsigned long)(p)) & 15 == 0)