delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/1997/09/18/17:27:34

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
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 <ctype.h>
#include <limits.h>
#include <math.h>
#include <float.h>
#include <stdio.h>
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".

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019