From: Endlisnis 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: NNTP-Posting-Host: fctnts09c02.nbnet.nb.ca Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Precedence: bulk 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 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