From: shaman AT nlc DOT net DOT au Newsgroups: comp.os.msdos.djgpp Subject: Is djgpp better? Yes! Date: Thu, 05 Dec 1996 07:35:45 +1100 Organization: NHJ NORTHLINK COMMUNICATIONS Lines: 156 Distribution: inet Message-ID: <32A5E0A1.916@nlc.net.au> Reply-To: shaman AT nlc DOT net DOT au NNTP-Posting-Host: dialine21.nlc.net.au 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 I'm one of the many coders out there who are wondering wether DJGPP really is better. Well, now there is proof, thanks to a guy who wrote a fractal zoomer thingie. Just one question: Could I use DJGPP to cross compile to an totally new OS? Ie: could I modify the startup libs and replace the PC libraries and be able to created executables for other Intel compatible operating systems?? Anyway, just check this out: --------------------------------------------------------------------- > This is only for MS-DOG users < (read this carefully) This is port of my Unix program xaos for MS-DOG called Chappy. It was done in djgpp and is licensed by GPL. Original was done on Linux. Please read following article if you don't know, what this mean. FOR USERS OF BORLAND OR MICROSOFT COMPILERS: This program was developed under djgpp-gnu c compiler for dos. This is *FREE* compiler (you can get it from simtel) that is *MUCH* better than all commercial compilers I know (BC++, VC++, Watcom). It is completely 32 bit C compiler with its own dos extender. It also has a borland like user interface, lots of libraries, debugger, profiler, documentation, Pascal compiler and other stuff available. Main purpose for porting this program was to show power of this compiler. Xaos wass done in about 10000 lines in C. >NO ASSEMBLY< It is possible in such speed on other compilers? For example following program main() {int i,a=1,b=0; for(i=0;i<9999;i++) a=a+b,b=2*a; printf("%i\n",a); } Compiles into: (AT&T Assembly syntax differs a bit from intel/masm syntax but I hope it is still readable for you) .file "example.c" gcc2_compiled.: ___gnu_compiled_c: .text LC0: .ascii "%i\12\0" .align 2 .globl _main _main: call ___main #small and fast inicialisation movl $1,%eax #All variables in registers xorl %ecx,%ecx movl $9998,%edx #Cycle goes from 9998 to zero instead 0 to 9999 .align 2,0x90 #body is aligned to fit better in caches... L11: addl %ecx,%eax #whole body is in just two instructions leal (%eax,%eax),%ecx #do you know this "trick"? I seen it first here decl %edx #test of cycle is at the end, because compiler jns L11 #was sure that it will turn more than once pushl %eax #typical calling of printf..new versions pushl $LC0 #experimentally supports passing in registers.. call _printf #no libraries available for now.. addl $8,%esp #shorter and faster than pops... ret The following is output generated by borland compiler with optimizations enabled: ; ; main() ; assume cs:_TEXT _main proc near enter 2,0 #not required at all push si #why are these pushed? main is first function! push di ; ; {int i,a=1,b=0; ; mov si,1 #just some registers are in memory mov word ptr [bp-2],0 ; ; for(i=0;i<9999;i++) ; xor di,di jmp short @1 AT 98 #unnecesary jump to test... @1 AT 50: ; ; a=a+b,b=2*a; ; mov ax,si #5 instructions instead of two. add ax,word ptr [bp-2]#slow memory access required... mov si,ax shl ax,1 mov word ptr [bp-2],ax inc di #cycle is in normal order...more complicated @1 AT 98: #comparing required..(one cmp instruction +) cmp di,9999 jl short @1 AT 50 ; ; printf("%i\n",a); ; push si #calling of printf push offset DGROUP:s@ call near ptr _printf pop cx #another unrequired instruction.. pop cx ; ; } ; pop di #unnecesarry pop si leave #up to now.. ret For more informations read http://www.delorie.com! If you want use this compiler carefully read its license. AUTHOR: I am Jan Hubicka. You may browse my homepage at http://www.paru.cas.cz/~hubicka for more informations and software. One of main purposes for making this program was to get some money to buy new computer(my 486 is too slow for XaoS) but then I decided to release this program freely. But PLEASE if you want to help me develop more such software send small amount of money to my address Jan Hubicka Dukeslkych bojovniky 1944 Tabor 390 03 Czech Republic You may also contact me at email hubicka AT paru DOT cas DOT cz -- . . . the Lord Shaman ------------------------------------------------------------------ Pentiums melt in your PC, not in your hand. http://www.nlc.net.au/~shaman or mailto:shaman AT nlc DOT net DOT au ------------------------------------------------------------------