#include <stdio.h>
#include <stdlib.h>


float ptr1[1000];
float buffs[4];
//float *ptr2=ptr1;

//float out1=1, out2=2, out3=3, out4=4, out5, out6, out7;
//float out[7];


int main(){
	//float ptr1[7];
	//ptr1 = malloc(sizeof(float)*32);
	//float *ptr2;
	//int num1;
	int num1;
	for(num1=0; num1<1000; num1++){
		ptr1[num1]=num1;
	}

	for(num1=0; num1<1000; num1+=4){
		buffs[0]=ptr1[num1];
		buffs[1]=ptr1[num1+1];
		buffs[2]=ptr1[num1+2];
		buffs[3]=ptr1[num1+3];	
	}




//float foo, bar;
//printf("%f %f\n", out1, out2);
//ptr1[0]+=ptr1[5];
//printf("%f %f\n", out1, out2);

/*
__asm__(
	"mov $6, %ecx\n"
	//"mov $0, %ebx\n"
	
//	"LOOP1:\n"
  //      	"movss   ptr1(%rip), %xmm1\n"
    //    	"movss   ptr1+8(%rip), %xmm0\n"
      //  	"addss   %xmm1, %xmm0\n"
        //	"movss   %xmm0, ptr1(%rip)\n"
		//"add $4, %ebx\n"
	//"dec ecx\n"
	//"jnz LOOP1\n"


        //"movss   out1(%rip), %xmm1\n"
        //"movss   out2(%rip), %xmm0\n"
        //"addss   %xmm1, %xmm0\n"
        //"movss   %xmm0, out1(%rip)\n"



	//:"=a"(out1)
	//:"a"(out1), "b"(out2)
);



printf("%f %f\n", out1, out2);




		__asm__(
			"mov %%ebx, %%edx\n"
			"add $24, %%edx\n"
			//"LOOP1:\n"
			//	"mov (%%ebx), %%ecx\n"
			//	"add $4, %%ebx\n"
				//"lea -48(%%ebx), %%ecx\n"
				//leal (%1,%1,4), %0
			//	"mov %%ecx, %%eax\n"
			//"cmp %%edx, %%ebx\n"
			//"jne LOOP1\n"

			:"=a"(out1), "=b"(out2), "=c"(out3), "=d"(out4)
			:"a"(out1), "b"(ptr2), "c"(out2), "d"(out3)
			);
		printf("%f %f %f %f\n", out1, out2, out3, out4);
		__asm__(
			"add $4, %%ebx\n"
			"add $4, %%ebx\n"
			"mov (%%ebx), %%ecx\n"
			"add $4, %%ebx\n"
			"mov %%ecx, %%eax\n"
			:"=a"(out1)
			:"a"(out1), "b"(ptr2), "c"(out2), "d"(out3)
			);
		printf("%f\n", out1);









		//ptr2++;
	//}


	ptr2 = &ptr1[0];
printf("fptr: %lu\n", sizeof(float *) );
printf("f: %lu\n", sizeof(float) );

printf("address %p\n", ptr1);
printf("address %p\n", &ptr1[0]);

ptr2++;
printf("address %p\n", ptr2); //ptr[1]
printf("value ptr2++ %f\n", *(float *)ptr2);

printf("address %p\n", &ptr1[1]);
printf("value ptr1[1] %f\n", ptr1[1]);

printf("address %p\n", &ptr1[2]);
printf("address %p\n", &ptr1[3]);
printf("address %p\n", &ptr1[4]);
printf("address %p\n", &ptr1[5]);


	for(num1=0; num1<32; num1++){
		ptr1[num1]=num1;
	}


	ptr2 = ptr1;

	for(num1=0; num1<32; num1++){
		printf("%lf\n", *(float *)ptr2);
		ptr2++;
	}
*/
//	printf("%lf\n", *(float *)ptr2);
//	ptr2++;
//	printf("%lf\n", *(float *)ptr2);
	



return 0;
}
