From: jeffdbREMOVETHIS AT netzone DOT com (Mikey) Subject: Size of Arguments 18 Sep 1997 17:27:34 -0700 Message-ID: <3422bc48.67947748.cygnus.gnu-win32@smtp.netzone.com> Reply-To: jeffdbREMOVETHIS AT netzone DOT com Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit To: gnu-win32 AT cygnus DOT com Sorry, longs are 4 bytes just like ints (except on alpha ;^), my point was that calling parameters are DWORD aligned on the stack here is the actual code first the C, then the assembler. Double, and Long Double are NOT the same. #include #include #include #include #include int main(){ unsigned char one = CHAR_MAX; unsigned short two = SHRT_MAX; unsigned int three = INT_MAX; unsigned long four = LONG_MAX; unsigned long long int five = LONG_LONG_MAX; float six = FLT_MAX; double seven = DBL_MAX; long double eight = LDBL_MAX; char *nine; nine = &one; printf("char %d, short %d, int %d, long %d, long long %d, float %d, double %d lo ng double %d char_ptr %d\n", one, two, three, four, five, six, seven, eight, nin e); movb $127,-1(%ebp) u_char ..stabn 68,0,12,.LM3-_main ..LM3: movw $32767,-4(%ebp) u_short ..stabn 68,0,13,.LM4-_main ..LM4: movl $2147483647,-8(%ebp) u_int ..stabn 68,0,14,.LM5-_main ..LM5: movl $2147483647,-12(%ebp) u_long ..stabn 68,0,15,.LM6-_main ..LM6: movl $-1,-20(%ebp) movl $2147483647,-16(%ebp) u_long_long (int64) ..stabn 68,0,16,.LM7-_main ..LM7: movl $2139095039,-24(%ebp) float ..stabn 68,0,17,.LM8-_main ..LM8: movl $-1,-32(%ebp) movl $2146435071,-28(%ebp) double ..stabn 68,0,18,.LM9-_main ..LM9: movl $-2132,-44(%ebp) movl $-1,-40(%ebp) movl $17406,-36(%ebp) long double ..stabn 68,0,20,.LM10-_main ..LM10: leal -1(%ebp),%edx movl %edx,-48(%ebp) pointer_to_char ..stabn 68,0,22,.LM11-_main ..LM11: movl -48(%ebp),%eax pushl %eax <<<<<< pointer above 4 pushl -36(%ebp) pushl -40(%ebp) pushl -44(%ebp) <<<<<< long double above 12 pushl -28(%ebp) pushl -32(%ebp) <<<<<< double above 8 flds -24(%ebp) subl $8,%esp fstpl (%esp) <<<<<< float above passed in 387 reg 8 on stack pushl -16(%ebp) pushl -20(%ebp) <<<<<< long long above 8 movl -12(%ebp),%eax pushl %eax <<<<<< long above 4 movl -8(%ebp),%eax pushl %eax <<<<<< int above 4 movzwl -4(%ebp),%eax pushl %eax <<<<<< short above 4 movzbl -1(%ebp),%eax pushl %eax <<<<<< char above 4 pushl $LC0 call _printf addl $60,%esp (jeffdbREMOVETHIS AT netzone DOT com) delete REMOVETHIS from the above to reply Mikey - For help on using this list (especially unsubscribing), send a message to "gnu-win32-request AT cygnus DOT com" with one line of text: "help".