Changeset 840
- Timestamp:
- 01/03/11 06:23:20 (14 years ago)
- Files:
-
- branches/dmd-1.x/src/backend/cod3.c (modified) (1 diff)
- branches/dmd-1.x/src/linux.mak (modified) (2 diffs)
- trunk/src/backend/cod3.c (modified) (1 diff)
- trunk/src/linux.mak (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/dmd-1.x/src/backend/cod3.c
r828 r840 267 268 } 268 269 #endif 269 270 } 270 271 271 272 /******************************** 272 273 * Fix global variables for I64. 273 274 */ 274 275 275 276 void cod3_set64() 276 277 { 277 278 inssize[0xA0] = T|5; // MOV AL,mem 278 279 inssize[0xA1] = T|5; // MOV RAX,mem 279 280 inssize[0xA2] = T|5; // MOV mem,AL 280 281 inssize[0xA3] = T|5; // MOV mem,RAX 281 282 BPRM = 5; // [RBP] addressing mode 282 283 fregsaved = mBP | mBX | mR12 | mR13 | mR14 | mR15 | mES; // saved across function calls 283 284 FLOATREGS = FLOATREGS_64; 284 285 FLOATREGS2 = FLOATREGS2_64; 285 286 DOUBLEREGS = DOUBLEREGS_64; 286 287 STACKALIGN = 16; 288 289 #if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS 290 ALLREGS = mAX|mBX|mCX|mDX|mSI|mDI| mR8|mR9|mR10|mR11|mR12|mR13|mR14|mR15; 291 BYTEREGS = ALLREGS; 292 #endif 287 293 288 294 for (unsigned i = 0x80; i < 0x90; i++) 289 295 inssize2[i] = W|T|6; 290 296 } 291 297 292 298 /********************************* 293 299 * Word or dword align start of function. 294 300 */ 295 301 296 302 void cod3_align() 297 303 { 298 304 static char nops[7] = { 0x90,0x90,0x90,0x90,0x90,0x90,0x90 }; 299 305 unsigned nbytes; 300 306 #if OMFOBJ 301 307 if (config.flags4 & CFG4speed) // if optimized for speed 302 308 { 303 309 // Pick alignment based on CPU target 304 310 if (config.target_cpu == TARGET_80486 || 305 311 config.target_cpu >= TARGET_PentiumPro) 306 312 { // 486 does reads on 16 byte boundaries, so if we are near branches/dmd-1.x/src/linux.mak
r717 r840 77 77 $C/type.c $C/melf.h $C/mach.h $C/bcomplex.h \ 78 78 $C/cdeflnx.h $C/outbuf.h $C/token.h $C/tassert.h \ 79 79 $C/elfobj.c $C/cv4.h $C/dwarf2.h $C/cpp.h $C/exh.h $C/go.h \ 80 80 $C/dwarf.c $C/dwarf.h $C/aa.h $C/aa.c $C/tinfo.h $C/ti_achar.c \ 81 81 $C/machobj.c \ 82 82 $(TK)/filespec.h $(TK)/mem.h $(TK)/list.h $(TK)/vec.h \ 83 83 $(TK)/filespec.c $(TK)/mem.c $(TK)/vec.c $(TK)/list.c \ 84 84 $(ROOT)/dchar.h $(ROOT)/dchar.c $(ROOT)/lstring.h \ 85 85 $(ROOT)/lstring.c $(ROOT)/root.h $(ROOT)/root.c $(ROOT)/array.c \ 86 86 $(ROOT)/rmem.h $(ROOT)/rmem.c $(ROOT)/port.h $(ROOT)/port.c \ 87 87 $(ROOT)/gnuc.h $(ROOT)/gnuc.c $(ROOT)/man.c \ 88 88 $(ROOT)/stringtable.h $(ROOT)/stringtable.c \ 89 89 $(ROOT)/response.c $(ROOT)/async.h $(ROOT)/async.c \ 90 90 $(ROOT)/aav.h $(ROOT)/aav.c \ 91 91 $(ROOT)/speller.h $(ROOT)/speller.c 92 92 93 93 94 94 all: dmd 95 95 96 96 dmd: $(DMD_OBJS) 97 gcc $(MODEL) -lstdc++ -lpthread $(COV) $(DMD_OBJS) -o dmd97 $(CC) -lstdc++ -lpthread $(COV) $(DMD_OBJS) -o dmd 98 98 99 99 clean: 100 100 rm -f $(DMD_OBJS) dmd optab.o id.o impcnvgen idgen id.c id.h \ 101 101 impcnvtab.c optabgen debtab.c optab.c cdxxx.c elxxx.c fltables.c \ 102 102 tytab.c core \ 103 103 *.cov *.gcda *.gcno 104 104 105 105 ######## optabgen generates some source 106 106 107 107 optabgen: $C/optabgen.c $C/cc.h $C/oper.h 108 108 $(CC) $(MFLAGS) $< -o optabgen 109 109 ./optabgen 110 110 111 111 optabgen_output = debtab.c optab.c cdxxx.c elxxx.c fltables.c tytab.c 112 112 $(optabgen_output) : optabgen 113 113 114 114 ######## idgen generates some source 115 115 116 116 idgen_output = id.h id.c 117 117 $(idgen_output) : idgen … … 450 450 451 451 s2ir.o : $C/rtlsym.h statement.h s2ir.c 452 452 $(CC) -c -I$(ROOT) $(MFLAGS) s2ir.c 453 453 454 454 scope.o: scope.c 455 455 $(CC) -c $(CFLAGS) $< 456 456 457 457 speller.o: $(ROOT)/speller.c 458 458 $(CC) -c $(GFLAGS) -I$(ROOT) $< 459 459 460 460 statement.o: statement.c 461 461 $(CC) -c $(CFLAGS) $< 462 462 463 463 staticassert.o: staticassert.h staticassert.c 464 464 $(CC) -c $(CFLAGS) staticassert.c 465 465 466 466 stringtable.o: $(ROOT)/stringtable.c 467 467 $(CC) -c $(GFLAGS) -I$(ROOT) $< 468 468 469 469 strtold.o: $C/strtold.c 470 gcc $(MODEL) -c $C/strtold.c470 $(CC) -c $C/strtold.c 471 471 472 472 struct.o: struct.c 473 473 $(CC) -c $(CFLAGS) $< 474 474 475 475 template.o: template.c 476 476 $(CC) -c $(CFLAGS) $< 477 477 478 478 ti_achar.o: $C/tinfo.h $C/ti_achar.c 479 479 $(CC) -c $(MFLAGS) -I. $C/ti_achar.c 480 480 481 481 tk.o: tk.c 482 482 $(CC) -c $(MFLAGS) tk.c 483 483 484 484 tocsym.o: $(CH) $(TOTALH) mars.h module.h tocsym.c 485 485 $(CC) -c $(MFLAGS) -I$(ROOT) tocsym.c 486 486 487 487 toctype.o: $(CH) $(TOTALH) $C/rtlsym.h mars.h module.h toctype.c 488 488 $(CC) -c $(MFLAGS) -I$(ROOT) toctype.c 489 489 490 490 todt.o : mtype.h expression.h $C/dt.h todt.c trunk/src/backend/cod3.c
r828 r840 267 268 } 268 269 #endif 269 270 } 270 271 271 272 /******************************** 272 273 * Fix global variables for I64. 273 274 */ 274 275 275 276 void cod3_set64() 276 277 { 277 278 inssize[0xA0] = T|5; // MOV AL,mem 278 279 inssize[0xA1] = T|5; // MOV RAX,mem 279 280 inssize[0xA2] = T|5; // MOV mem,AL 280 281 inssize[0xA3] = T|5; // MOV mem,RAX 281 282 BPRM = 5; // [RBP] addressing mode 282 283 fregsaved = mBP | mBX | mR12 | mR13 | mR14 | mR15 | mES; // saved across function calls 283 284 FLOATREGS = FLOATREGS_64; 284 285 FLOATREGS2 = FLOATREGS2_64; 285 286 DOUBLEREGS = DOUBLEREGS_64; 286 287 STACKALIGN = 16; 288 289 #if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS 290 ALLREGS = mAX|mBX|mCX|mDX|mSI|mDI| mR8|mR9|mR10|mR11|mR12|mR13|mR14|mR15; 291 BYTEREGS = ALLREGS; 292 #endif 287 293 288 294 for (unsigned i = 0x80; i < 0x90; i++) 289 295 inssize2[i] = W|T|6; 290 296 } 291 297 292 298 /********************************* 293 299 * Word or dword align start of function. 294 300 */ 295 301 296 302 void cod3_align() 297 303 { 298 304 static char nops[7] = { 0x90,0x90,0x90,0x90,0x90,0x90,0x90 }; 299 305 unsigned nbytes; 300 306 #if OMFOBJ 301 307 if (config.flags4 & CFG4speed) // if optimized for speed 302 308 { 303 309 // Pick alignment based on CPU target 304 310 if (config.target_cpu == TARGET_80486 || 305 311 config.target_cpu >= TARGET_PentiumPro) 306 312 { // 486 does reads on 16 byte boundaries, so if we are near trunk/src/linux.mak
r769 r840 77 77 $C/type.c $C/melf.h $C/mach.h $C/bcomplex.h \ 78 78 $C/cdeflnx.h $C/outbuf.h $C/token.h $C/tassert.h \ 79 79 $C/elfobj.c $C/cv4.h $C/dwarf2.h $C/cpp.h $C/exh.h $C/go.h \ 80 80 $C/dwarf.c $C/dwarf.h $C/aa.h $C/aa.c $C/tinfo.h $C/ti_achar.c \ 81 81 $C/machobj.c \ 82 82 $(TK)/filespec.h $(TK)/mem.h $(TK)/list.h $(TK)/vec.h \ 83 83 $(TK)/filespec.c $(TK)/mem.c $(TK)/vec.c $(TK)/list.c \ 84 84 $(ROOT)/dchar.h $(ROOT)/dchar.c $(ROOT)/lstring.h \ 85 85 $(ROOT)/lstring.c $(ROOT)/root.h $(ROOT)/root.c $(ROOT)/array.c \ 86 86 $(ROOT)/rmem.h $(ROOT)/rmem.c $(ROOT)/port.h $(ROOT)/port.c \ 87 87 $(ROOT)/gnuc.h $(ROOT)/gnuc.c $(ROOT)/man.c \ 88 88 $(ROOT)/stringtable.h $(ROOT)/stringtable.c \ 89 89 $(ROOT)/response.c $(ROOT)/async.h $(ROOT)/async.c \ 90 90 $(ROOT)/aav.h $(ROOT)/aav.c \ 91 91 $(ROOT)/speller.h $(ROOT)/speller.c 92 92 93 93 94 94 all: dmd 95 95 96 96 dmd: $(DMD_OBJS) 97 gcc $(MODEL) -lstdc++ -lpthread $(COV) $(DMD_OBJS) -o dmd97 $(CC) -lstdc++ -lpthread $(COV) $(DMD_OBJS) -o dmd 98 98 99 99 clean: 100 100 rm -f $(DMD_OBJS) dmd optab.o id.o impcnvgen idgen id.c id.h \ 101 101 impcnvtab.c optabgen debtab.c optab.c cdxxx.c elxxx.c fltables.c \ 102 102 tytab.c core \ 103 103 *.cov *.gcda *.gcno 104 104 105 105 ######## optabgen generates some source 106 106 107 107 optabgen: $C/optabgen.c $C/cc.h $C/oper.h 108 108 $(CC) $(MFLAGS) $< -o optabgen 109 109 ./optabgen 110 110 111 111 optabgen_output = debtab.c optab.c cdxxx.c elxxx.c fltables.c tytab.c 112 112 $(optabgen_output) : optabgen 113 113 114 114 ######## idgen generates some source 115 115 116 116 idgen_output = id.h id.c 117 117 $(idgen_output) : idgen … … 450 450 451 451 s2ir.o : $C/rtlsym.h statement.h s2ir.c 452 452 $(CC) -c -I$(ROOT) $(MFLAGS) s2ir.c 453 453 454 454 scope.o: scope.c 455 455 $(CC) -c $(CFLAGS) $< 456 456 457 457 speller.o: $(ROOT)/speller.c 458 458 $(CC) -c $(GFLAGS) -I$(ROOT) $< 459 459 460 460 statement.o: statement.c 461 461 $(CC) -c $(CFLAGS) $< 462 462 463 463 staticassert.o: staticassert.h staticassert.c 464 464 $(CC) -c $(CFLAGS) staticassert.c 465 465 466 466 stringtable.o: $(ROOT)/stringtable.c 467 467 $(CC) -c $(GFLAGS) -I$(ROOT) $< 468 468 469 469 strtold.o: $C/strtold.c 470 gcc $(MODEL) -c $C/strtold.c470 $(CC) -c $C/strtold.c 471 471 472 472 struct.o: struct.c 473 473 $(CC) -c $(CFLAGS) $< 474 474 475 475 template.o: template.c 476 476 $(CC) -c $(CFLAGS) $< 477 477 478 478 ti_achar.o: $C/tinfo.h $C/ti_achar.c 479 479 $(CC) -c $(MFLAGS) -I. $C/ti_achar.c 480 480 481 481 tk.o: tk.c 482 482 $(CC) -c $(MFLAGS) tk.c 483 483 484 484 tocsym.o: $(CH) $(TOTALH) mars.h module.h tocsym.c 485 485 $(CC) -c $(MFLAGS) -I$(ROOT) tocsym.c 486 486 487 487 toctype.o: $(CH) $(TOTALH) $C/rtlsym.h mars.h module.h toctype.c 488 488 $(CC) -c $(MFLAGS) -I$(ROOT) toctype.c 489 489 490 490 todt.o : mtype.h expression.h $C/dt.h todt.c
