delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1998/09/08/19:16:50

From: Endlisnis <s257m AT unb DOT ca>
Newsgroups: comp.os.msdos.djgpp
Subject: Re: Bug in GCC?
Date: Tue, 08 Sep 1998 19:32:27 -0300
Organization: NBTel Internet
Lines: 431
Message-ID: <35F5B07A.8E37D184@unb.ca>
References: <Pine DOT SUN DOT 3 DOT 91 DOT 980908101052 DOT 26824C-100000 AT is>
NNTP-Posting-Host: fctnts09c02.nbnet.nb.ca
Mime-Version: 1.0
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

Eli Zaretskii wrote:
> 
> On Mon, 7 Sep 1998, Endlisnis wrote:
> 
> > > * Post the complete asm produced.
> >       I don't know how to do that.
> 
> Add -S to the compilation switches.

OK, Here is the input file, which seems to compile differently when giving asm
output, but it still isn't right!  And included is the complete asm output, I
marked the place where it screws up, in the add function.  Is there something
I'm doing wrong?

#include <iostream.h>

int add(int a, int b)
{
 int Ret;
 asm ("addl %1, %0"  //this line compiles to "addl ecx,ecx".
 : "=&r" (Ret)
 : "0" (a), "r" (b)
 );
 return Ret;
 }


int main()
{
 int a=2,b=4;
 cout << add(a,b);
 return 0;
 }
	.file	"t2.cc"
gcc2_compiled.:
___gnu_compiled_cplusplus:
.text
	.def	__G_int8_t;	.scl	13;	.type	02;	.endef
	.def	__G_uint8_t;	.scl	13;	.type	014;	.endef
	.def	__G_int16_t;	.scl	13;	.type	03;	.endef
	.def	__G_uint16_t;	.scl	13;	.type	015;	.endef
	.def	__G_int32_t;	.scl	13;	.type	04;	.endef
	.def	__G_uint32_t;	.scl	13;	.type	016;	.endef
	.def	__G_int64_t;	.scl	13;	.type	05;	.endef
	.def	__G_uint64_t;	.scl	13;	.type	017;	.endef
	.def	__G_llong;	.scl	13;	.type	05;	.endef
	.def	__G_ullong;	.scl	13;	.type	017;	.endef
	.def	__G_clock_t;	.scl	13;	.type	04;	.endef
	.def	__G_dev_t;	.scl	13;	.type	04;	.endef
	.def	__G_fpos_t;	.scl	13;	.type	017;	.endef
	.def	__G_gid_t;	.scl	13;	.type	04;	.endef
	.def	__G_ino_t;	.scl	13;	.type	04;	.endef
	.def	__G_mode_t;	.scl	13;	.type	04;	.endef
	.def	__G_nlink_t;	.scl	13;	.type	04;	.endef
	.def	__G_off_t;	.scl	13;	.type	04;	.endef
	.def	__G_pid_t;	.scl	13;	.type	04;	.endef
	.def	__G_ptrdiff_t;	.scl	13;	.type	05;	.endef
	.def	__G_sigset_t;	.scl	13;	.type	04;	.endef
	.def	__G_size_t;	.scl	13;	.type	017;	.endef
	.def	__G_time_t;	.scl	13;	.type	016;	.endef
	.def	__G_uid_t;	.scl	13;	.type	04;	.endef
	.def	__G_wchar_t;	.scl	13;	.type	04;	.endef
	.def	__G_ssize_t;	.scl	13;	.type	04;	.endef
	.def	__G_wint_t;	.scl	13;	.type	04;	.endef
	.def	__G_va_list;	.scl	13;	.type	021;	.endef
	.def	_ptrdiff_t;	.scl	13;	.type	04;	.endef
	.def	_size_t;	.scl	13;	.type	017;	.endef
	.def	_wchar_t;	.scl	13;	.type	04;	.endef
	.def	__IO_lock_t;	.scl	13;	.type	01;	.endef
	.def	__IO_marker;	.scl	10;	.type	010;	.size	12;	.endef
	.def	__next;	.val	0;	.scl	8;	.tag	__IO_marker;	.size	12;	.type	030;	.endef
	.def	__sbuf;	.val	4;	.scl	8;	.type	030;	.endef
	.def	__pos;	.val	8;	.scl	8;	.type	04;	.endef
	.def	.eos;	.val	12;	.scl	102;	.tag	__IO_marker;	.size	12;	.endef
	.def	__IO_marker;	.scl	13;	.tag	__IO_marker;	.size	12;	.type	010;	.endef
	.def	__IO_FILE;	.scl	10;	.type	010;	.size	72;	.endef
	.def	__flags;	.val	0;	.scl	8;	.type	04;	.endef
	.def	__IO_read_ptr;	.val	4;	.scl	8;	.type	022;	.endef
	.def	__IO_read_end;	.val	8;	.scl	8;	.type	022;	.endef
	.def	__IO_read_base;	.val	12;	.scl	8;	.type	022;	.endef
	.def	__IO_write_base;	.val	16;	.scl	8;	.type	022;	.endef
	.def	__IO_write_ptr;	.val	20;	.scl	8;	.type	022;	.endef
	.def	__IO_write_end;	.val	24;	.scl	8;	.type	022;	.endef
	.def	__IO_buf_base;	.val	28;	.scl	8;	.type	022;	.endef
	.def	__IO_buf_end;	.val	32;	.scl	8;	.type	022;	.endef
	.def	__IO_save_base;	.val	36;	.scl	8;	.type	022;	.endef
	.def	__IO_backup_base;	.val	40;	.scl	8;	.type	022;	.endef
	.def	__IO_save_end;	.val	44;	.scl	8;	.type	022;	.endef
	.def	__markers;	.val	48;	.scl	8;	.tag	__IO_marker;	.size	12;	.type	030;
.endef
	.def	__chain;	.val	52;	.scl	8;	.tag	__IO_FILE;	.size	72;	.type	030;	.endef
	.def	__fileno;	.val	56;	.scl	8;	.type	04;	.endef
	.def	__blksize;	.val	60;	.scl	8;	.type	04;	.endef
	.def	__offset;	.val	64;	.scl	8;	.type	04;	.endef
	.def	__cur_column;	.val	68;	.scl	8;	.type	015;	.endef
	.def	__unused;	.val	70;	.scl	8;	.type	02;	.endef
	.def	__shortbuf;	.val	71;	.scl	8;	.dim	1;	.size	1;	.type	062;	.endef
	.def	.eos;	.val	72;	.scl	102;	.tag	__IO_FILE;	.size	72;	.endef
	.def	__IO_FILE;	.scl	13;	.tag	__IO_FILE;	.size	72;	.type	010;	.endef
	.def	_$_0;	.scl	10;	.type	010;	.size	16;	.endef
	.def	_read;	.val	0;	.scl	8;	.type	0224;	.endef
	.def	_write;	.val	4;	.scl	8;	.type	0224;	.endef
	.def	_seek;	.val	8;	.scl	8;	.type	0237;	.endef
	.def	_close;	.val	12;	.scl	8;	.type	0224;	.endef
	.def	.eos;	.val	16;	.scl	102;	.tag	_$_0;	.size	16;	.endef
	.def	__IO_cookie_io_functions_t;	.scl	13;	.tag	_$_0;	.size	16;	.type	010;
.endef
	.def	__IO_cookie_file;	.scl	10;	.type	010;	.size	96;	.endef
	.def	_file;	.val	0;	.scl	8;	.tag	__IO_FILE;	.size	72;	.type	010;	.endef
	.def	_vtable;	.val	72;	.scl	8;	.type	021;	.endef
	.def	_cookie;	.val	76;	.scl	8;	.type	021;	.endef
	.def	_io_functions;	.val	80;	.scl	8;	.tag	_$_0;	.size	16;	.type	010;	.endef
	.def	.eos;	.val	96;	.scl	102;	.tag	__IO_cookie_file;	.size	96;	.endef
	.def	__IO_cookie_file;	.scl	13;	.tag	__IO_cookie_file;	.size	96;	.type	010;
.endef
	.def	_streamoff;	.scl	13;	.type	04;	.endef
	.def	_streampos;	.scl	13;	.type	017;	.endef
	.def	_streamsize;	.scl	13;	.type	04;	.endef
	.def	___fmtflags;	.scl	13;	.type	017;	.endef
	.def	___iostate;	.scl	13;	.type	014;	.endef
	.def	__ios_fields;	.scl	10;	.type	010;	.size	28;	.endef
	.def	__strbuf;	.val	0;	.scl	8;	.type	030;	.endef
	.def	__tie;	.val	4;	.scl	8;	.type	030;	.endef
	.def	__width;	.val	8;	.scl	8;	.type	04;	.endef
	.def	__flags;	.val	12;	.scl	8;	.type	017;	.endef
	.def	__fill;	.val	16;	.scl	8;	.type	03;	.endef
	.def	__state;	.val	18;	.scl	8;	.type	014;	.endef
	.def	__exceptions;	.val	19;	.scl	8;	.type	014;	.endef
	.def	__precision;	.val	20;	.scl	8;	.type	04;	.endef
	.def	__arrays;	.val	24;	.scl	8;	.type	021;	.endef
	.def	.eos;	.val	28;	.scl	102;	.tag	__ios_fields;	.size	28;	.endef
	.def	__ios_fields;	.scl	13;	.tag	__ios_fields;	.size	28;	.type	010;	.endef
	.def	_io_state;	.scl	15;	.type	012;	.size	4;	.endef
	.def	_goodbit;	.val	0;	.scl	16;	.type	013;	.endef
	.def	_eofbit;	.val	1;	.scl	16;	.type	013;	.endef
	.def	_failbit;	.val	2;	.scl	16;	.type	013;	.endef
	.def	_badbit;	.val	4;	.scl	16;	.type	013;	.endef
	.def	.eos;	.val	4;	.scl	102;	.tag	_io_state;	.size	4;	.endef
	.def	_io_state;	.scl	13;	.tag	_io_state;	.size	4;	.type	012;	.endef
	.def	_open_mode;	.scl	15;	.type	012;	.size	4;	.endef
	.def	_in;	.val	1;	.scl	16;	.type	013;	.endef
	.def	_out;	.val	2;	.scl	16;	.type	013;	.endef
	.def	_ate;	.val	4;	.scl	16;	.type	013;	.endef
	.def	_app;	.val	8;	.scl	16;	.type	013;	.endef
	.def	_trunc;	.val	16;	.scl	16;	.type	013;	.endef
	.def	_nocreate;	.val	32;	.scl	16;	.type	013;	.endef
	.def	_noreplace;	.val	64;	.scl	16;	.type	013;	.endef
	.def	_bin;	.val	128;	.scl	16;	.type	013;	.endef
	.def	_binary;	.val	128;	.scl	16;	.type	013;	.endef
	.def	.eos;	.val	4;	.scl	102;	.tag	_open_mode;	.size	4;	.endef
	.def	_open_mode;	.scl	13;	.tag	_open_mode;	.size	4;	.type	012;	.endef
	.def	_seek_dir;	.scl	15;	.type	012;	.size	4;	.endef
	.def	_beg;	.val	0;	.scl	16;	.type	013;	.endef
	.def	_cur;	.val	1;	.scl	16;	.type	013;	.endef
	.def	_end;	.val	2;	.scl	16;	.type	013;	.endef
	.def	.eos;	.val	4;	.scl	102;	.tag	_seek_dir;	.size	4;	.endef
	.def	_seek_dir;	.scl	13;	.tag	_seek_dir;	.size	4;	.type	012;	.endef
	.def	_$_1;	.scl	15;	.type	012;	.size	4;	.endef
	.def	_skipws;	.val	1;	.scl	16;	.type	013;	.endef
	.def	_left;	.val	2;	.scl	16;	.type	013;	.endef
	.def	_right;	.val	4;	.scl	16;	.type	013;	.endef
	.def	_internal;	.val	8;	.scl	16;	.type	013;	.endef
	.def	_dec;	.val	16;	.scl	16;	.type	013;	.endef
	.def	_oct;	.val	32;	.scl	16;	.type	013;	.endef
	.def	_hex;	.val	64;	.scl	16;	.type	013;	.endef
	.def	_showbase;	.val	128;	.scl	16;	.type	013;	.endef
	.def	_showpoint;	.val	256;	.scl	16;	.type	013;	.endef
	.def	_uppercase;	.val	512;	.scl	16;	.type	013;	.endef
	.def	_showpos;	.val	1024;	.scl	16;	.type	013;	.endef
	.def	_scientific;	.val	2048;	.scl	16;	.type	013;	.endef
	.def	_fixed;	.val	4096;	.scl	16;	.type	013;	.endef
	.def	_unitbuf;	.val	8192;	.scl	16;	.type	013;	.endef
	.def	_stdio;	.val	16384;	.scl	16;	.type	013;	.endef
	.def	.eos;	.val	4;	.scl	102;	.tag	_$_1;	.size	4;	.endef
	.def	_$_2;	.scl	15;	.type	012;	.size	4;	.endef
	.def	_basefield;	.val	112;	.scl	16;	.type	013;	.endef
	.def	_floatfield;	.val	6144;	.scl	16;	.type	013;	.endef
	.def	_adjustfield;	.val	14;	.scl	16;	.type	013;	.endef
	.def	.eos;	.val	4;	.scl	102;	.tag	_$_2;	.size	4;	.endef
	.def	_Init;	.scl	10;	.type	010;	.size	1;	.endef
	.def	.eos;	.val	1;	.scl	102;	.tag	_Init;	.size	1;	.endef
	.def	_Init;	.scl	13;	.tag	_Init;	.size	1;	.type	010;	.endef
	.def	_ios;	.scl	10;	.type	010;	.size	32;	.endef
	.def	__ios_fields;	.val	0;	.scl	8;	.tag	__ios_fields;	.size	28;	.type	010;
.endef
	.def	_$vf;	.val	28;	.scl	8;	.dim	2;	.size	4;	.type	0330;	.endef
	.def	.eos;	.val	32;	.scl	102;	.tag	_ios;	.size	32;	.endef
	.def	_ios;	.scl	13;	.tag	_ios;	.size	32;	.type	010;	.endef
	.def	__seek_dir;	.scl	13;	.tag	_seek_dir;	.size	4;	.type	012;	.endef
	.def	_streammarker;	.scl	10;	.type	010;	.size	12;	.endef
	.def	__IO_marker;	.val	0;	.scl	8;	.tag	__IO_marker;	.size	12;	.type	010;
.endef
	.def	.eos;	.val	12;	.scl	102;	.tag	_streammarker;	.size	12;	.endef
	.def	_streammarker;	.scl	13;	.tag	_streammarker;	.size	12;	.type	010;	.endef
	.def	__IO_marker;	.scl	13;	.tag	__IO_marker;	.size	12;	.type	010;	.endef
	.def	__IO_FILE;	.scl	13;	.tag	__IO_FILE;	.size	72;	.type	010;	.endef
	.def	_streambuf;	.scl	10;	.type	010;	.size	76;	.endef
	.def	__IO_FILE;	.val	0;	.scl	8;	.tag	__IO_FILE;	.size	72;	.type	010;	.endef
	.def	_$vf;	.val	72;	.scl	8;	.dim	18;	.size	4;	.type	0330;	.endef
	.def	.eos;	.val	76;	.scl	102;	.tag	_streambuf;	.size	76;	.endef
	.def	_streambuf;	.scl	13;	.tag	_streambuf;	.size	76;	.type	010;	.endef
	.def	_filebuf;	.scl	10;	.type	010;	.size	76;	.endef
	.def	_streambuf;	.val	0;	.scl	8;	.tag	_streambuf;	.size	76;	.type	010;	.endef
	.def	.eos;	.val	76;	.scl	102;	.tag	_filebuf;	.size	76;	.endef
	.def	_filebuf;	.scl	13;	.tag	_filebuf;	.size	76;	.type	010;	.endef
	.def	___manip;	.scl	13;	.tag	_ios;	.size	32;	.type	0630;	.endef
	.def	___imanip;	.scl	13;	.type	0630;	.endef
	.def	___omanip;	.scl	13;	.type	0630;	.endef
	.def	_ostream;	.scl	10;	.type	010;	.size	36;	.endef
	.def	_ios;	.val	0;	.scl	8;	.tag	_ios;	.size	32;	.type	010;	.endef
	.def	_$vb;	.val	0;	.scl	8;	.tag	_ios;	.size	32;	.type	030;	.endef
	.def	.eos;	.val	36;	.scl	102;	.tag	_ostream;	.size	36;	.endef
	.def	_ostream;	.scl	13;	.tag	_ostream;	.size	36;	.type	010;	.endef
	.def	_istream;	.scl	10;	.type	010;	.size	40;	.endef
	.def	_ios;	.val	0;	.scl	8;	.tag	_ios;	.size	32;	.type	010;	.endef
	.def	_$vb;	.val	0;	.scl	8;	.tag	_ios;	.size	32;	.type	030;	.endef
	.def	__gcount;	.val	4;	.scl	8;	.type	017;	.endef
	.def	.eos;	.val	40;	.scl	102;	.tag	_istream;	.size	40;	.endef
	.def	_istream;	.scl	13;	.tag	_istream;	.size	40;	.type	010;	.endef
	.def	_iostream;	.scl	10;	.type	010;	.size	44;	.endef
	.def	_istream;	.val	0;	.scl	8;	.tag	_istream;	.size	40;	.type	010;	.endef
	.def	_ostream;	.val	8;	.scl	8;	.tag	_ostream;	.size	36;	.type	010;	.endef
	.def	.eos;	.val	44;	.scl	102;	.tag	_iostream;	.size	44;	.endef
	.def	_iostream;	.scl	13;	.tag	_iostream;	.size	44;	.type	010;	.endef
	.def	__IO_istream_withassign;	.scl	10;	.type	010;	.size	40;	.endef
	.def	_istream;	.val	0;	.scl	8;	.tag	_istream;	.size	40;	.type	010;	.endef
	.def	.eos;	.val	40;	.scl	102;	.tag	__IO_istream_withassign;	.size	40;	.endef
	.def	__IO_istream_withassign;	.scl	13;	.tag	__IO_istream_withassign;	.size
40;	.type	010;	.endef
	.def	__IO_ostream_withassign;	.scl	10;	.type	010;	.size	36;	.endef
	.def	_ostream;	.val	0;	.scl	8;	.tag	_ostream;	.size	36;	.type	010;	.endef
	.def	.eos;	.val	36;	.scl	102;	.tag	__IO_ostream_withassign;	.size	36;	.endef
	.def	__IO_ostream_withassign;	.scl	13;	.tag	__IO_ostream_withassign;	.size
36;	.type	010;	.endef
	.def	_Iostream_init;	.scl	10;	.type	010;	.size	1;	.endef
	.def	.eos;	.val	1;	.scl	102;	.tag	_Iostream_init;	.size	1;	.endef
	.def	_Iostream_init;	.scl	13;	.tag	_Iostream_init;	.size	1;	.type	010;	.endef
	.p2align 2
	.def	_add__Fii;	.val	_add__Fii;	.scl	2;	.type	044;	.endef
.globl _add__Fii
_add__Fii:
LFB1:
	.def	.bf;	.val	.;	.scl	101;	.line	4;	.endef
	.def	_a;	.val	8;	.scl	9;	.type	04;	.endef
	.def	_b;	.val	12;	.scl	9;	.type	04;	.endef
	pushl %ebp
LCFI0:
	movl %esp,%ebp
LCFI1:
	subl $4,%esp
LCFI2:
	pushl %ebx
LCFI3:
	.def	_Ret;	.val	-4;	.scl	1;	.type	04;	.endef
	.ln	6
	movl 8(%ebp),%ecx     //gets first parameter into ecx
	movl 12(%ebp),%ebx    //gets second into ebx
/APP
	addl %ecx, %ecx       //doubles ecx, instead of adding ebx to ecx!
/NO_APP
	movl %ecx,-4(%ebp)
	.ln	7
	movl -4(%ebp),%edx
	movl %edx,%eax
	jmp L291
	.align 2,0x90
	.ln	8
L291:
	movl -8(%ebp),%ebx
	leave
	ret
	.def	.ef;	.val	.;	.scl	101;	.line	8;	.endef
	.def	_add__Fii;	.val	.;	.scl	-1;	.endef
LFE1:
	.p2align 2
	.def	_main;	.val	_main;	.scl	2;	.type	044;	.endef
.globl _main
_main:
LFB2:
	.def	.bf;	.val	.;	.scl	101;	.line	15;	.endef
	pushl %ebp
LCFI4:
	movl %esp,%ebp
LCFI5:
	subl $8,%esp
LCFI6:
	.def	_a;	.val	-4;	.scl	1;	.type	04;	.endef
	.def	_b;	.val	-8;	.scl	1;	.type	04;	.endef
	.ln	2
	movl $2,-4(%ebp)
	movl $4,-8(%ebp)
	.ln	3
	movl -8(%ebp),%eax
	pushl %eax
LCFI7:
	movl -4(%ebp),%eax
	pushl %eax
LCFI8:
	call _add__Fii
	addl $8,%esp
LCFI9:
	movl %eax,%eax
	pushl %eax
LCFI10:
	pushl $_cout
LCFI11:
	call ___ls__7ostreami
	addl $8,%esp
LCFI12:
	movl %eax,%eax
	.ln	4
	xorl %eax,%eax
	jmp L292
	.align 2,0x90
	xorl %eax,%eax
	jmp L292
	.align 2,0x90
	.ln	5
L292:
	leave
	ret
	.def	.ef;	.val	.;	.scl	101;	.line	5;	.endef
	.def	_main;	.val	.;	.scl	-1;	.endef
LFE2:

	.section .eh_frame
___FRAME_BEGIN__:
	.long LECIE1-LSCIE1

LSCIE1:
	.long 0

		.byte	0x1
		.byte	0x0
		.byte	0x1
		.byte	0x7c
		.byte	0x8
		.byte	0xc
		.byte	0x5
		.byte	0x4
		.byte	0x88
		.byte	0x1
	.p2align 2
LECIE1:
	.long LEFDE1-LSFDE1

LSFDE1:
	.long LSFDE1-___FRAME_BEGIN__

	.long LFB1

	.long LFE1-LFB1

		.byte	0x4
	.long LCFI0-LFB1

		.byte	0xe
		.byte	0x8
		.byte	0x84
		.byte	0x2
		.byte	0x4
	.long LCFI1-LCFI0

		.byte	0xd
		.byte	0x4
		.byte	0x4
	.long LCFI3-LCFI1

		.byte	0x83
		.byte	0x4
	.p2align 2
LEFDE1:
	.long LEFDE3-LSFDE3

LSFDE3:
	.long LSFDE3-___FRAME_BEGIN__

	.long LFB2

	.long LFE2-LFB2

		.byte	0x4
	.long LCFI4-LFB2

		.byte	0xe
		.byte	0x8
		.byte	0x84
		.byte	0x2
		.byte	0x4
	.long LCFI5-LCFI4

		.byte	0xd
		.byte	0x4
		.byte	0x4
	.long LCFI7-LCFI5

		.byte	0x2e
		.byte	0x4
		.byte	0x4
	.long LCFI8-LCFI7

		.byte	0x2e
		.byte	0x8
		.byte	0x4
	.long LCFI9-LCFI8

		.byte	0x2e
		.byte	0x0
		.byte	0x4
	.long LCFI10-LCFI9

		.byte	0x2e
		.byte	0x4
		.byte	0x4
	.long LCFI11-LCFI10

		.byte	0x2e
		.byte	0x8
		.byte	0x4
	.long LCFI12-LCFI11

		.byte	0x2e
		.byte	0x0
	.p2align 2
LEFDE3:-- 
     (\/) Endlisnis (\/)
          s257m AT unb DOT ca
          Endlisnis AT GeoCities DOT com
          Endlis AT nbnet DOT nb DOT ca


- Raw text -


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