Quote Originally Posted by ninja9578 View Post
Does anyone see the bus error? I hate writing 32-bit assembly on a 64-bit machine:

Code:
inline void Assembly(){
    __asm__ __volatile__(
	    "  movl $1000000, %%ecx		  ;\n"	   //put the size of the table in here, don't reference it
	    "  myloop:				  ;\n"	   //beginning of my loop
	    "	  movb 12(%0), %%ah	  ;\n"	   //char 4
	    "	  movb 8(%0), %%al	  ;\n"	   //char 3
	    "	  shl $16, %%eax	  ;\n"	   //can't access high bits directly, so shift these there for now
	    "	  movb 4(%0), %%ah	  ;\n"	   //char 2
	    "	  movb (%0), %%al	  ;\n"	   //char 1
	    "	  movl %%eax, (%1)	  ;\n"	   //push it out to the destination
	    "	  add $4, %1		  ;\n"	   //move the dst ptr by 4 because we did 4 ata  time
	    "	  add $16, %0		  ;\n"	   //move the src ptr by 16
	    "  loop myloop			  ;\n"	   //loop until ecx is zero
	    :							   //No output
	    :  "r" (src),					   //Let CGG decide what registers to assign these to
		  "r" (dst)					   //Let GCC decide what registers to assign these to
	    :  "eax", "ecx"					   //these two get explicitly clobbred
	    );
}
It runs fine for small arrays, but once I try doing one over 1000, it starts throwing bus errors.
Oh god, I hate GCCs representation of inline asm, and AT&T syntax in general. I'm not even sure what that does.