%!PS-Adobe-2.0 %%Version: 0.1 %%DocumentFonts: (atend) %%Pages: (atend) %%EndComments % % Version 3.3.2 prologue for troff files. % /#copies 1 store /aspectratio 1 def /formsperpage 1 def /landscape false def /linewidth .3 def /magnification 1 def /margin 0 def /orientation 0 def /resolution 720 def /rotation 1 def /xoffset 0 def /yoffset 0 def /roundpage true def /useclippath true def /pagebbox [0 0 612 792] def /R /Times-Roman def /I /Times-Italic def /B /Times-Bold def /BI /Times-BoldItalic def /H /Helvetica def /HI /Helvetica-Oblique def /HB /Helvetica-Bold def /HX /Helvetica-BoldOblique def /CW /Courier def /CO /Courier def /CI /Courier-Oblique def /CB /Courier-Bold def /CX /Courier-BoldOblique def /PA /Palatino-Roman def /PI /Palatino-Italic def /PB /Palatino-Bold def /PX /Palatino-BoldItalic def /Hr /Helvetica-Narrow def /Hi /Helvetica-Narrow-Oblique def /Hb /Helvetica-Narrow-Bold def /Hx /Helvetica-Narrow-BoldOblique def /KR /Bookman-Light def /KI /Bookman-LightItalic def /KB /Bookman-Demi def /KX /Bookman-DemiItalic def /AR /AvantGarde-Book def /AI /AvantGarde-BookOblique def /AB /AvantGarde-Demi def /AX /AvantGarde-DemiOblique def /NR /NewCenturySchlbk-Roman def /NI /NewCenturySchlbk-Italic def /NB /NewCenturySchlbk-Bold def /NX /NewCenturySchlbk-BoldItalic def /ZD /ZapfDingbats def /ZI /ZapfChancery-MediumItalic def /S /S def /S1 /S1 def /GR /Symbol def /inch {72 mul} bind def /min {2 copy gt {exch} if pop} bind def /setup { counttomark 2 idiv {def} repeat pop landscape {/orientation 90 orientation add def} if /scaling 72 resolution div def linewidth setlinewidth 1 setlinecap pagedimensions xcenter ycenter translate orientation rotation mul rotate width 2 div neg height 2 div translate xoffset inch yoffset inch neg translate margin 2 div dup neg translate magnification dup aspectratio mul scale scaling scaling scale addmetrics 0 0 moveto } def /pagedimensions { useclippath userdict /gotpagebbox known not and { /pagebbox [clippath pathbbox newpath] def roundpage currentdict /roundpagebbox known and {roundpagebbox} if } if pagebbox aload pop 4 -1 roll exch 4 1 roll 4 copy landscape {4 2 roll} if sub /width exch def sub /height exch def add 2 div /xcenter exch def add 2 div /ycenter exch def userdict /gotpagebbox true put } def /addmetrics { /Symbol /S null Sdefs cf /Times-Roman /S1 StandardEncoding dup length array copy S1defs cf } def /pagesetup { /page exch def currentdict /pagedict known currentdict page known and { page load pagedict exch get cvx exec } if } def /decodingdefs [ {counttomark 2 idiv {y moveto show} repeat} {neg /y exch def counttomark 2 idiv {y moveto show} repeat} {neg moveto {2 index stringwidth pop sub exch div 0 32 4 -1 roll widthshow} repeat} {neg moveto {spacewidth sub 0.0 32 4 -1 roll widthshow} repeat} {counttomark 2 idiv {y moveto show} repeat} {neg setfunnytext} ] def /setdecoding {/t decodingdefs 3 -1 roll get bind def} bind def /w {neg moveto show} bind def /m {neg dup /y exch def moveto} bind def /done {/lastpage where {pop lastpage} if} def /f { dup /font exch def findfont exch dup /ptsize exch def scaling div dup /size exch def scalefont setfont linewidth ptsize mul scaling 10 mul div setlinewidth /spacewidth ( ) stringwidth pop def } bind def /changefont { /fontheight exch def /fontslant exch def currentfont [ 1 0 fontheight ptsize div fontslant sin mul fontslant cos div fontheight ptsize div 0 0 ] makefont setfont } bind def /sf {f} bind def /cf { dup length 2 idiv /entries exch def /chtab exch def /newencoding exch def /newfont exch def findfont dup length 1 add dict /newdict exch def {1 index /FID ne {newdict 3 1 roll put}{pop pop} ifelse} forall newencoding type /arraytype eq {newdict /Encoding newencoding put} if newdict /Metrics entries dict put newdict /Metrics get begin chtab aload pop 1 1 entries {pop def} for newfont newdict definefont pop end } bind def % % A few arrays used to adjust reference points and character widths in some % of the printer resident fonts. If square roots are too high try changing % the lines describing /radical and /radicalex to, % % /radical [0 -75 550 0] % /radicalex [-50 -75 500 0] % % Move braceleftbt a bit - default PostScript character is off a bit. % /Sdefs [ /bracketlefttp [201 500] /bracketleftbt [201 500] /bracketrighttp [-81 380] /bracketrightbt [-83 380] /braceleftbt [203 490] /bracketrightex [220 -125 500 0] /radical [0 0 550 0] /radicalex [-50 0 500 0] /parenleftex [-20 -170 0 0] /integral [100 -50 500 0] /infinity [10 -75 730 0] ] def /S1defs [ /underscore [0 80 500 0] /endash [7 90 650 0] ] def % % Tries to round clipping path dimensions, as stored in array pagebbox, so they % match one of the known sizes in the papersizes array. Lower left coordinates % are always set to 0. % /roundpagebbox { 7 dict begin /papersizes [8.5 inch 11 inch 14 inch 17 inch] def /mappapersize { /val exch def /slop .5 inch def /diff slop def /j 0 def 0 1 papersizes length 1 sub { /i exch def papersizes i get val sub abs dup diff le {/diff exch def /j i def} {pop} ifelse } for diff slop lt {papersizes j get} {val} ifelse } def pagebbox 0 0 put pagebbox 1 0 put pagebbox dup 2 get mappapersize 2 exch put pagebbox dup 3 get mappapersize 3 exch put end } bind def %%EndProlog %%BeginSetup mark % % Encoding vector and redefinition of findfont for the ISO Latin1 standard. % The 18 characters missing from ROM based fonts on older printers are noted % below. % /ISOLatin1Encoding [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /minus /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent /dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron /space /exclamdown /cent /sterling /currency /yen /brokenbar % missing /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree % missing /plusminus % missing /twosuperior % missing /threesuperior % missing /acute /mu % missing /paragraph /periodcentered /cedilla /onesuperior % missing /ordmasculine /guillemotright /onequarter % missing /onehalf % missing /threequarters % missing /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth % missing /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply % missing /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute % missing /Thorn % missing /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth % missing /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide % missing /oslash /ugrave /uacute /ucircumflex /udieresis /yacute % missing /thorn % missing /ydieresis ] def /NewFontDirectory FontDirectory maxlength dict def % % Apparently no guarantee findfont is defined in systemdict so the obvious % % systemdict /findfont get exec % % can generate an error. So far the only exception is a VT600 (version 48.0). % userdict /@RealFindfont known not { userdict begin /@RealFindfont systemdict begin /findfont load end def end } if /findfont { dup NewFontDirectory exch known not { dup %dup systemdict /findfont get exec % not always in systemdict dup userdict /@RealFindfont get exec dup /Encoding get StandardEncoding eq { dup length dict begin {1 index /FID ne {def}{pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end /DummyFontName exch definefont } if NewFontDirectory 3 1 roll put } if NewFontDirectory exch get } bind def %%Patch from lp %%EndPatch from lp setup %%EndSetup %%Page: 1 1 /saveobj save def mark 1 pagesetup 11 /Palatino-Bold f (Plan) 2348 1320 w (9) 2601 1320 w (C) 2684 1320 w (Compilers) 2791 1320 w 11 /LucidaSansUnicode20 f ( ) 3343 1320 w 9 /Palatino-Italic f (Ken) 2602 1512 w (Thompson) 2770 1512 w (ken@plan9.bell\255labs.com) 2436 1662 w 9 /Palatino-Roman f (ABSTRACT) 2641 1937 w (This) 1080 2170 w (paper) 1275 2170 w (describes) 1531 2170 w (the) 1924 2170 w (overall) 2074 2170 w (structure) 2376 2170 w (and) 2762 2170 w (function) 2939 2170 w (of) 3298 2170 w (the) 3403 2170 w (Plan) 3553 2170 w (9) 3755 2170 w (C) 3825 2170 w (compilers.) 3914 2170 w (A) 4377 2170 w (more) 4472 2170 w (detailed) 1080 2280 w (implementation) 1426 2280 w (document) 2084 2280 w (for) 2510 2280 w (any) 2649 2280 w (one) 2819 2280 w (of) 2987 2280 w (the) 3090 2280 w (compilers) 3238 2280 w (is) 3653 2280 w (yet) 3740 2280 w (to) 3886 2280 w (be) 3989 2280 w (written.) 4105 2280 w 9 /Palatino-Bold f (1.) 720 2555 w (Introduction) 834 2555 w 9 /Palatino-Roman f (There) 720 2719 w (are) 987 2719 w (many) 1149 2719 w (compilers) 1413 2719 w (in) 1843 2719 w (the) 1959 2719 w (series.) 2122 2719 w (Eight) 2430 2719 w (of) 2682 2719 w (the) 2801 2719 w (compilers) 2965 2719 w (\(MIPS) 3396 2719 w (3000,) 3684 2719 w (SPARC,) 3926 2719 w (Intel) 4284 2719 w (386,) 4505 2719 w (AMD64,) 4702 2719 w (Power) 720 2829 w (PC,) 1009 2829 w (ARM,) 1181 2829 w (DEC) 1451 2829 w (Alpha,) 1670 2829 w (and) 1971 2829 w (Motorola) 2154 2829 w (68020\)) 2558 2829 w (are) 2844 2829 w (considered) 2999 2829 w (active) 3468 2829 w (and) 3734 2829 w (are) 3917 2829 w (used) 4071 2829 w (to) 4291 2829 w (compile) 4401 2829 w (current) 4749 2829 w (versions) 720 2939 w (of) 1079 2939 w (Plan) 1184 2939 w (9) 1387 2939 w (or) 1458 2939 w (Inferno.) 1570 2939 w (Several) 1936 2939 w (others) 2254 2939 w (\(Motorola) 2529 2939 w (68000,) 2958 2939 w (Intel) 3232 2939 w (960,) 3440 2939 w (AMD) 3624 2939 w (29000\)) 3875 2939 w (have) 4156 2939 w (had) 4373 2939 w (only) 4551 2939 w (limited) 4755 2939 w (use,) 720 3049 w (such) 901 3049 w (as) 1108 3049 w (to) 1214 3049 w (program) 1317 3049 w (peripherals) 1690 3049 w (or) 2166 3049 w (experimental) 2275 3049 w (devices.) 2822 3049 w 9 /Palatino-Bold f (2.) 720 3324 w (Structure) 834 3324 w 9 /Palatino-Roman f (The) 720 3488 w (compiler) 896 3488 w (is) 1276 3488 w (a) 1366 3488 w (single) 1437 3488 w (program) 1698 3488 w (that) 2074 3488 w (produces) 2257 3488 w (an) 2653 3488 w (object) 2776 3488 w (file.) 3036 3488 w (Combined) 3233 3488 w (in) 3678 3488 w (the) 3783 3488 w (compiler) 3935 3488 w (are) 4316 3488 w (the) 4467 3488 w (traditional) 4619 3488 w (roles) 720 3598 w (of) 945 3598 w (preprocessor,) 1057 3598 w (lexical) 1630 3598 w (analyzer,) 1915 3598 w (parser,) 2312 3598 w (code) 2619 3598 w (generator,) 2839 3598 w (local) 3279 3598 w (optimizer,) 3498 3598 w (and) 3942 3598 w (first) 4125 3598 w (half) 4316 3598 w (of) 4500 3598 w (the) 4611 3598 w (assem\255) 4767 3598 w (bler.) 720 3708 w (The) 950 3708 w (object) 1129 3708 w (files) 1392 3708 w (are) 1584 3708 w (binary) 1737 3708 w (forms) 2025 3708 w (of) 2287 3708 w (assembly) 2396 3708 w (language,) 2794 3708 w (similar) 3211 3708 w (to) 3516 3708 w (what) 3625 3708 w (might) 3856 3708 w (be) 4123 3708 w (passed) 4246 3708 w (between) 4549 3708 w (the) 4915 3708 w (first) 720 3818 w (and) 903 3818 w (second) 1078 3818 w (passes) 1379 3818 w (of) 1658 3818 w (an) 1761 3818 w (assembler.) 1881 3818 w (Object) 720 3982 w (files) 1005 3982 w (and) 1198 3982 w (libraries) 1380 3982 w (are) 1736 3982 w (combined) 1890 3982 w (by) 2315 3982 w (a) 2445 3982 w (loader) 2520 3982 w (program) 2805 3982 w (to) 3186 3982 w (produce) 3297 3982 w (the) 3660 3982 w (executable) 3816 3982 w (binary.) 4268 3982 w (The) 4604 3982 w (loader) 4785 3982 w (combines) 720 4092 w (the) 1125 4092 w (roles) 1277 4092 w (of) 1497 4092 w (second) 1604 4092 w (half) 1909 4092 w (of) 2089 4092 w (the) 2196 4092 w (assembler,) 2348 4092 w (global) 2796 4092 w (optimizer,) 3070 4092 w (and) 3509 4092 w (loader.) 3688 4092 w (The) 4016 4092 w (names) 4193 4092 w (of) 4477 4092 w (the) 4584 4092 w (compli\255) 4735 4092 w (ers,) 720 4202 w (loaders,) 883 4202 w (and) 1222 4202 w (assemblers) 1397 4202 w (are) 1856 4202 w (as) 2003 4202 w (follows:) 2109 4202 w (SPARC) 970 4402 w 9 /Courier f (kc) 2050 4402 w (kl) 2204 4402 w (ka) 2358 4402 w 9 /Palatino-Roman f (PowerPC) 970 4512 w 9 /Courier f (qc) 2050 4512 w (ql) 2204 4512 w (qa) 2358 4512 w 9 /Palatino-Roman f (MIPS) 970 4622 w 9 /Courier f (vc) 2050 4622 w (vl) 2204 4622 w (va) 2358 4622 w 9 /Palatino-Roman f (Motorola 68000) 970 4732 w 9 /Courier f (1c) 2050 4732 w (1l) 2204 4732 w (1a) 2358 4732 w 9 /Palatino-Roman f (Motorola 68020) 970 4842 w 9 /Courier f (2c) 2050 4842 w (2l) 2204 4842 w (2a) 2358 4842 w 9 /Palatino-Roman f (ARM) 970 4952 w 9 /Courier f (5c) 2050 4952 w (5l) 2204 4952 w (5a) 2358 4952 w 9 /Palatino-Roman f (AMD64) 970 5062 w 9 /Courier f (6c) 2050 5062 w (6l) 2204 5062 w (6a) 2358 5062 w 9 /Palatino-Roman f (DEC Alpha) 970 5172 w 9 /Courier f (7c) 2050 5172 w (7l) 2204 5172 w (7a) 2358 5172 w 9 /Palatino-Roman f (Intel 386) 970 5282 w 9 /Courier f (8c) 2050 5282 w (8l) 2204 5282 w (8a) 2358 5282 w 9 /Palatino-Roman f (AMD 29000) 970 5392 w 9 /Courier f (9c) 2050 5392 w (9l) 2204 5392 w (9a) 2358 5392 w 9 /Palatino-Roman f (There) 720 5592 w (is) 978 5592 w (a) 1071 5592 w (further) 1145 5592 w (breakdown) 1455 5592 w (in) 1940 5592 w (the) 2047 5592 w (source) 2202 5592 w (of) 2493 5592 w (the) 2603 5592 w (compilers) 2758 5592 w (into) 3180 5592 w (object\255independent) 3368 5592 w (and) 4167 5592 w (object\255dependent) 4349 5592 w (parts.) 720 5702 w (All) 1054 5702 w (of) 1261 5702 w (the) 1426 5702 w (object\255independent) 1636 5702 w (parts) 2490 5702 w (are) 2778 5702 w (combined) 2987 5702 w (into) 3467 5702 w (source) 3710 5702 w (files) 4056 5702 w (in) 4303 5702 w (the) 4465 5702 w (directory) 4674 5702 w 9 /Courier f (/sys/src/cmd/cc) 720 5812 w 9 /Palatino-Roman f (.) 1530 5812 w (The) 1601 5812 w (object\255dependent) 1776 5812 w (parts) 2492 5812 w (are) 2720 5812 w (collected) 2869 5812 w (in) 3247 5812 w (a) 3350 5812 w (separate) 3421 5812 w (directory) 3781 5812 w (for) 4173 5812 w (each) 4315 5812 w (compiler,) 4521 5812 w (for) 4924 5812 w (example) 720 5922 w 9 /Courier f (/sys/src/cmd/vc) 1088 5922 w 9 /Palatino-Roman f (.) 1898 5922 w (All) 1975 5922 w (of) 2128 5922 w (the) 2239 5922 w (code,) 2395 5922 w (both) 2637 5922 w (object\255independent) 2850 5922 w (and) 3650 5922 w (object\255dependent,) 3833 5922 w (is) 4578 5922 w (machine\255) 4673 5922 w (independent) 720 6032 w (and) 1248 6032 w (may) 1423 6032 w (be) 1620 6032 w (cross\255compiled) 1736 6032 w (and) 2364 6032 w (executed) 2539 6032 w (on) 2917 6032 w (any) 3042 6032 w (of) 3212 6032 w (the) 3315 6032 w (architectures.) 3463 6032 w 9 /Palatino-Bold f (3.) 720 6307 w (The) 834 6307 w (Language) 1017 6307 w 9 /Palatino-Roman f (The) 720 6471 w (compiler) 896 6471 w (implements) 1276 6471 w (ANSI) 1772 6471 w (C) 2023 6471 w (with) 2114 6471 w (some) 2324 6471 w (restrictions) 2561 6471 w (and) 3033 6471 w (extensions) 3212 6471 w ([ANSI90].) 3658 6471 w (Most) 4105 6471 w (of) 4336 6471 w (the) 4443 6471 w (restrictions) 4595 6471 w (are) 720 6581 w (due) 873 6581 w (to) 1054 6581 w (personal) 1163 6581 w (preference,) 1536 6581 w (while) 2008 6581 w (most) 2259 6581 w (of) 2485 6581 w (the) 2594 6581 w (extensions) 2748 6581 w (were) 3196 6581 w (to) 3422 6581 w (help) 3531 6581 w (in) 3735 6581 w (the) 3842 6581 w (implementation) 3996 6581 w (of) 4659 6581 w (Plan) 4767 6581 w (9.) 4972 6581 w (There) 720 6691 w (are) 975 6691 w (other) 1125 6691 w (departures) 1362 6691 w (from) 1822 6691 w (the) 2043 6691 w (standard,) 2194 6691 w (particularly) 2599 6691 w (in) 3093 6691 w (the) 3197 6691 w (libraries,) 3348 6691 w (that) 3723 6691 w (are) 3906 6691 w (beyond) 4056 6691 w (the) 4383 6691 w (scope) 4535 6691 w (of) 4787 6691 w (this) 4894 6691 w (paper.) 720 6801 w 7 /S1 f (_) 720 6931 w (____________________) 740 6931 w 7 /LucidaSansUnicode20 f ( ) 720 7021 w 7 /Palatino-Roman f (Originally) 782 7021 w (appeared,) 1117 7021 w (in) 1446 7021 w (a) 1525 7021 w (different) 1578 7021 w (form,) 1865 7021 w (in) 2053 7021 w 7 /Palatino-Italic f (Proceedings) 2132 7021 w (of) 2491 7021 w (the) 2561 7021 w (Summer) 2665 7021 w (1990) 2926 7021 w (UKUUG) 3085 7021 w (Conference,) 3366 7021 w 7 /Palatino-Roman f (pp.) 3716 7021 w (41\25551,) 3837 7021 w (London,) 4037 7021 w (1990.) 4320 7021 w (This) 4515 7021 w (version) 4667 7021 w (first) 4917 7021 w (appeared) 720 7111 w (in) 1032 7111 w 7 /Palatino-Italic f (Plan) 1112 7111 w (9) 1264 7111 w (Programmer's) 1318 7111 w (Manual,) 1742 7111 w (Volume) 2005 7111 w (2) 2246 7111 w (\(Second) 2300 7111 w (Edition\)) 2542 7111 w 7 /Palatino-Roman f (.) 2781 7111 w (The) 2836 7111 w (Plan) 2973 7111 w (9) 3130 7111 w (compiler) 3184 7111 w (suite) 3479 7111 w (forms) 3646 7111 w (the) 3846 7111 w (basis) 3963 7111 w (for) 4134 7111 w (the) 4243 7111 w (portable) 4359 7111 w (Inferno) 4637 7111 w (com\255) 4885 7111 w (piler) 720 7201 w (suite,) 882 7201 w (making) 1066 7201 w (this) 1320 7201 w (paper) 1451 7201 w (still) 1650 7201 w (relevant.) 1780 7201 w cleartomark showpage saveobj restore %%EndPage: 1 1 %%Page: 2 2 /saveobj save def mark 2 pagesetup 9 /Palatino-Roman f (\255 2 \255) 2804 470 w 9 /Palatino-Bold f (3.1.) 720 830 w (Register,) 902 830 w (volatile,) 1288 830 w (const) 1644 830 w 9 /Palatino-Roman f (The) 720 976 w (keyword) 895 976 w 9 /Courier f (register) 1279 976 w 9 /Palatino-Roman f (is) 1736 976 w (recognized) 1825 976 w (syntactically) 2290 976 w (but) 2813 976 w (is) 2972 976 w (semantically) 3061 976 w (ignored.) 3586 976 w (Thus) 3969 976 w (taking) 4194 976 w (the) 4473 976 w (address) 4624 976 w (of) 4960 976 w (a) 720 1086 w 9 /Courier f (register) 801 1086 w 9 /Palatino-Roman f (variable) 1269 1086 w (is) 1627 1086 w (not) 1727 1086 w (diagnosed.) 1895 1086 w (The) 2391 1086 w (keyword) 2577 1086 w 9 /Courier f (volatile) 2971 1086 w 9 /Palatino-Roman f (disables) 3438 1086 w (all) 3794 1086 w (optimizations,) 3926 1086 w (in) 4535 1086 w (particular) 4648 1086 w (registerization,) 720 1196 w (of) 1356 1196 w (the) 1473 1196 w (corresponding) 1635 1196 w (variable.) 2254 1196 w (The) 2659 1196 w (keyword) 2846 1196 w 9 /Courier f (const) 3242 1196 w 9 /Palatino-Roman f (generates) 3550 1196 w (warnings) 3968 1196 w (\(if) 4380 1196 w (warnings) 4504 1196 w (are) 4916 1196 w (enabled) 720 1306 w (by) 1063 1306 w (the) 1192 1306 w (compiler's) 1346 1306 w 9 /Courier f (\255w) 1792 1306 w 9 /Palatino-Roman f (option\)) 1929 1306 w (of) 2250 1306 w (non\255constant) 2359 1306 w (use) 2909 1306 w (of) 3073 1306 w (the) 3182 1306 w (variable,) 3335 1306 w (but) 3708 1306 w (does) 3870 1306 w (not) 4084 1306 w (affect) 4244 1306 w (the) 4490 1306 w (generated) 4643 1306 w (code.) 720 1416 w 9 /Palatino-Bold f (3.2.) 720 1636 w (The) 902 1636 w (preprocessor) 1085 1636 w 9 /Palatino-Roman f (The) 720 1782 w (C) 893 1782 w (preprocessor) 980 1782 w (is) 1521 1782 w (probably) 1608 1782 w (the) 1992 1782 w (biggest) 2140 1782 w (departure) 2450 1782 w (from) 2869 1782 w (the) 3087 1782 w (ANSI) 3235 1782 w (standard.) 3482 1782 w (The) 720 1928 w (preprocessor) 893 1928 w (built) 1434 1928 w (into) 1643 1928 w (the) 1824 1928 w (Plan) 1972 1928 w (9) 2172 1928 w (compilers) 2240 1928 w (does) 2655 1928 w (not) 2865 1928 w (support) 3021 1928 w 9 /Courier f (#if) 3361 1928 w 9 /Palatino-Roman f (,) 3523 1928 w (although) 3570 1928 w (it) 3953 1928 w (does) 4033 1928 w (handle) 4243 1928 w 9 /Courier f (#ifdef) 4540 1928 w 9 /Palatino-Roman f (and) 4888 1928 w 9 /Courier f (#include) 720 2038 w 9 /Palatino-Roman f (.) 1152 2038 w (If) 1222 2038 w (it) 1307 2038 w (is) 1387 2038 w (necessary) 1475 2038 w (to) 1883 2038 w (be) 1986 2038 w (more) 2102 2038 w (standard,) 2333 2038 w (the) 2735 2038 w (source) 2883 2038 w (text) 3167 2038 w (can) 3340 2038 w (first) 3500 2038 w (be) 3683 2038 w (run) 3799 2038 w (through) 3964 2038 w (the) 4311 2038 w (separate) 4459 2038 w (ANSI) 4816 2038 w (C) 720 2148 w (preprocessor,) 807 2148 w 9 /Courier f (cpp) 1371 2148 w 9 /Palatino-Roman f (.) 1533 2148 w 9 /Palatino-Bold f (3.3.) 720 2368 w (Unnamed) 902 2368 w (substructures) 1330 2368 w 9 /Palatino-Roman f (The) 720 2514 w (most) 896 2514 w (important) 1119 2514 w (and) 1547 2514 w (most) 1725 2514 w (heavily) 1948 2514 w (used) 2267 2514 w (of) 2483 2514 w (the) 2589 2514 w (extensions) 2740 2514 w (is) 3185 2514 w (the) 3275 2514 w (declaration) 3426 2514 w (of) 3900 2514 w (an) 4006 2514 w (unnamed) 4130 2514 w (substructure) 4537 2514 w (or) 720 2624 w (subunion.) 829 2624 w (For) 1274 2624 w (example:) 1433 2624 w 9 /Courier f (typedef) 1042 2794 w (struct) 1042 2904 w (lock) 1402 2904 w ({) 1042 3014 w (int) 1402 3124 w (locked;) 1780 3124 w (} Lock;) 1042 3234 w (typedef) 1042 3454 w (struct) 1042 3564 w (node) 1402 3564 w ({) 1042 3674 w (int) 1402 3784 w (type;) 1762 3784 w (union) 1402 3894 w ({) 1402 4004 w (double dval;) 1762 4114 w (float) 1762 4224 w (fval;) 2140 4224 w (long) 1762 4334 w (lval;) 2140 4334 w (};) 1402 4444 w (Lock;) 1402 4554 w (} Node;) 1042 4664 w (Lock*) 1042 4884 w (lock;) 1402 4884 w (Node*) 1042 4994 w (node;) 1402 4994 w 9 /Palatino-Roman f (The) 720 5164 w (declaration) 893 5164 w (of) 1364 5164 w 9 /Courier f (Node) 1468 5164 w 9 /Palatino-Roman f (has) 1708 5164 w (an) 1867 5164 w (unnamed) 1988 5164 w (substructure) 2392 5164 w (of) 2919 5164 w (type) 3023 5164 w 9 /Courier f (Lock) 3224 5164 w 9 /Palatino-Roman f (and) 3464 5164 w (an) 3640 5164 w (unnamed) 3761 5164 w (subunion.) 4165 5164 w (One) 4611 5164 w (use) 4801 5164 w (of) 4960 5164 w (this) 720 5274 w (feature) 891 5274 w (allows) 1197 5274 w (references) 1482 5274 w (to) 1911 5274 w (elements) 2015 5274 w (of) 2393 5274 w (the) 2497 5274 w (subunit) 2646 5274 w (to) 2974 5274 w (be) 3078 5274 w (accessed) 3195 5274 w (as) 3561 5274 w (if) 3668 5274 w (they) 3748 5274 w (were) 3947 5274 w (in) 4168 5274 w (the) 4270 5274 w (outer) 4419 5274 w (structure.) 4656 5274 w (Thus) 720 5384 w 9 /Courier f (node\255>dval) 942 5384 w 9 /Palatino-Roman f (and) 1505 5384 w 9 /Courier f (node\255>locked) 1680 5384 w 9 /Palatino-Roman f (are) 2351 5384 w (legitimate) 2498 5384 w (references.) 2919 5384 w (When) 720 5530 w (an) 987 5530 w (outer) 1114 5530 w (structure) 1358 5530 w (is) 1750 5530 w (used) 1845 5530 w (in) 2066 5530 w (a) 2175 5530 w (context) 2251 5530 w (that) 2574 5530 w (is) 2762 5530 w (only) 2857 5530 w (legal) 3066 5530 w (for) 3287 5530 w (an) 3434 5530 w (unnamed) 3562 5530 w (substructure,) 3973 5530 w (the) 4530 5530 w (compiler) 4686 5530 w (promotes) 720 5640 w (the) 1130 5640 w (reference) 1285 5640 w (to) 1681 5640 w (the) 1791 5640 w (unnamed) 1945 5640 w (substructure.) 2354 5640 w (This) 2932 5640 w (is) 3132 5640 w (true) 3225 5640 w (for) 3417 5640 w (references) 3562 5640 w (to) 3995 5640 w (structures) 4104 5640 w (and) 4532 5640 w (to) 4713 5640 w (refer\255) 4822 5640 w (ences) 720 5750 w (to) 960 5750 w (pointers) 1064 5750 w (to) 1417 5750 w (structures.) 1521 5750 w (This) 1990 5750 w (happens) 2185 5750 w (in) 2547 5750 w (assignment) 2649 5750 w (statements) 3126 5750 w (and) 3578 5750 w (in) 3754 5750 w (argument) 3856 5750 w (passing) 4269 5750 w (where) 4596 5750 w (pro\255) 4870 5750 w (totypes) 720 5860 w (have) 1038 5860 w (been) 1252 5860 w (declared.) 1463 5860 w (Thus,) 1875 5860 w (continuing) 2120 5860 w (with) 2575 5860 w (the) 2781 5860 w (example,) 2929 5860 w 9 /Courier f (lock = node;) 1042 6030 w 9 /Palatino-Roman f (would) 720 6200 w (assign) 1003 6200 w (a) 1275 6200 w (pointer) 1343 6200 w (to) 1657 6200 w (the) 1760 6200 w (unnamed) 1908 6200 w 9 /Courier f (Lock) 2311 6200 w 9 /Palatino-Roman f (in) 2550 6200 w (the) 2651 6200 w 9 /Courier f (Node) 2799 6200 w 9 /Palatino-Roman f (to) 3038 6200 w (the) 3141 6200 w (variable) 3289 6200 w 9 /Courier f (lock) 3634 6200 w 9 /Palatino-Roman f (.) 3850 6200 w (Another) 3919 6200 w (example,) 4275 6200 w 9 /Courier f (extern void lock\(Lock*\);) 1042 6370 w (func\(...\)) 1042 6480 w ({) 1042 6590 w (...) 1402 6700 w (lock\(node\);) 1402 6810 w (...) 1402 6920 w (}) 1042 7030 w 9 /Palatino-Roman f (will) 720 7200 w (pass) 896 7200 w (a) 1094 7200 w (pointer) 1162 7200 w (to) 1476 7200 w (the) 1579 7200 w 9 /Courier f (Lock) 1727 7200 w 9 /Palatino-Roman f (substructure.) 1966 7200 w cleartomark showpage saveobj restore %%EndPage: 2 2 %%Page: 3 3 /saveobj save def mark 3 pagesetup 9 /Palatino-Roman f (\255 3 \255) 2804 470 w (Finally,) 720 830 w (in) 1041 830 w (places) 1142 830 w (where) 1411 830 w (context) 1683 830 w (is) 1998 830 w (insufficient) 2085 830 w (to) 2555 830 w (identify) 2658 830 w (the) 2993 830 w (unnamed) 3141 830 w (structure,) 3544 830 w (the) 3951 830 w (type) 4099 830 w (name) 4300 830 w (\(it) 4543 830 w (must) 4653 830 w (be) 4878 830 w (a) 4995 830 w 9 /Courier f (typedef) 720 940 w 9 /Palatino-Roman f (\)) 1098 940 w (of) 1156 940 w (the) 1264 940 w (unnamed) 1417 940 w (structure) 1825 940 w (can) 2214 940 w (be) 2379 940 w (used) 2500 940 w (as) 2718 940 w (an) 2829 940 w (identifier.) 2954 940 w (In) 3395 940 w (our) 3505 940 w (example,) 3672 940 w 9 /Courier f (&node\255>Lock) 4059 940 w 9 /Palatino-Roman f (gives) 4680 940 w (the) 4915 940 w (address) 720 1050 w (of) 1053 1050 w (the) 1156 1050 w (anonymous) 1304 1050 w 9 /Courier f (Lock) 1797 1050 w 9 /Palatino-Roman f (structure.) 2036 1050 w 9 /Palatino-Bold f (3.4.) 720 1300 w (Structure) 902 1300 w (displays) 1305 1300 w 9 /Palatino-Roman f (A) 720 1456 w (structure) 821 1456 w (cast) 1213 1456 w (followed) 1397 1456 w (by) 1783 1456 w (a) 1914 1456 w (list) 1990 1456 w (of) 2142 1456 w (expressions) 2254 1456 w (in) 2751 1456 w (braces) 2861 1456 w (is) 3145 1456 w (an) 3241 1456 w (expression) 3370 1456 w (with) 3829 1456 w (the) 4044 1456 w (type) 4201 1456 w (of) 4410 1456 w (the) 4522 1456 w (structure) 4679 1456 w (and) 720 1566 w (elements) 898 1566 w (assigned) 1278 1566 w (from) 1651 1566 w (the) 1872 1566 w (corresponding) 2023 1566 w (list.) 2631 1566 w (Structures) 2823 1566 w (are) 3258 1566 w (now) 3408 1566 w (almost) 3611 1566 w (first\255class) 3905 1566 w (citizens) 4307 1566 w (of) 4632 1566 w (the) 4737 1566 w (lan\255) 4887 1566 w (guage.) 720 1676 w (It) 1031 1676 w (is) 1115 1676 w (common) 1202 1676 w (to) 1575 1676 w (see) 1678 1676 w (code) 1825 1676 w (like) 2036 1676 w (this:) 2204 1676 w 9 /Courier f (r = \(Rectangle\){point1, \(Point\){x,y+2}};) 1042 1862 w 9 /Palatino-Bold f (3.5.) 720 2112 w (Initialization) 902 2112 w (indexes) 1465 2112 w 9 /Palatino-Roman f (In) 720 2268 w (initializers) 834 2268 w (of) 1284 2268 w (arrays,) 1395 2268 w (one) 1699 2268 w (may) 1875 2268 w (place) 2080 2268 w (a) 2320 2268 w (constant) 2397 2268 w (expression) 2766 2268 w (in) 3225 2268 w (square) 3335 2268 w (brackets) 3633 2268 w (before) 3997 2268 w (an) 4281 2268 w (initializer.) 4410 2268 w (This) 4869 2268 w (causes) 720 2378 w (the) 1001 2378 w (next) 1149 2378 w (initializer) 1344 2378 w (to) 1748 2378 w (assign) 1851 2378 w (the) 2123 2378 w (indicated) 2271 2378 w (element.) 2666 2378 w (For) 3051 2378 w (example:) 3210 2378 w 9 /Courier f (enum) 1042 2564 w (errors) 1402 2564 w ({) 1042 2674 w (Etoobig,) 1402 2784 w (Ealarm,) 1402 2894 w (Egreg) 1402 3004 w (};) 1042 3114 w (char* errstrings[] =) 1042 3224 w ({) 1042 3334 w ([Ealarm]) 1402 3444 w ("Alarm call",) 2122 3444 w ([Egreg]) 1402 3554 w ("Panic: out of mbufs",) 2122 3554 w ([Etoobig]) 1402 3664 w ("Arg list too long",) 2122 3664 w (};) 1042 3774 w 9 /Palatino-Roman f (In) 720 3960 w (the) 829 3960 w (same) 980 3960 w (way,) 1211 3960 w (individual) 1430 3960 w (structures) 1872 3960 w (members) 2297 3960 w (may) 2691 3960 w (be) 2891 3960 w (initialized) 3010 3960 w (in) 3436 3960 w (any) 3540 3960 w (order) 3713 3960 w (by) 3959 3960 w (preceding) 4085 3960 w (the) 4511 3960 w (initializa\255) 4663 3960 w (tion) 720 4070 w (with) 905 4070 w 9 /Courier f (.tagname) 1114 4070 w 9 /Palatino-Roman f (.) 1546 4070 w (Both) 1618 4070 w (forms) 1831 4070 w (allow) 2090 4070 w (an) 2338 4070 w (optional) 2461 4070 w 9 /Courier f (=) 2820 4070 w 9 /Palatino-Roman f (,) 2874 4070 w (to) 2923 4070 w (be) 3029 4070 w (compatible) 3148 4070 w (with) 3617 4070 w (a) 3826 4070 w (proposed) 3897 4070 w (extension) 4303 4070 w (to) 4710 4070 w (ANSI) 4816 4070 w (C.) 720 4180 w 9 /Palatino-Bold f (3.6.) 720 4430 w (External) 902 4430 w (register) 1265 4430 w 9 /Palatino-Roman f (The) 720 4586 w (declaration) 901 4586 w 9 /Courier f (extern) 1380 4586 w (register) 1735 4586 w 9 /Palatino-Roman f (will) 2198 4586 w (dedicate) 2382 4586 w (a) 2750 4586 w (register) 2826 4586 w (to) 3159 4586 w (a) 3270 4586 w (variable) 3346 4586 w (on) 3699 4586 w (a) 3832 4586 w (global) 3909 4586 w (basis.) 4188 4586 w (It) 4463 4586 w (can) 4556 4586 w (be) 4725 4586 w (used) 4850 4586 w (only) 720 4696 w (under) 933 4696 w (special) 1208 4696 w (circumstances.) 1515 4696 w (External) 2157 4696 w (register) 2526 4696 w (variables) 2863 4696 w (must) 3258 4696 w (be) 3494 4696 w (identically) 3622 4696 w (declared) 4075 4696 w (in) 4452 4696 w (all) 4564 4696 w (modules) 4695 4696 w (and) 720 4806 w (libraries.) 896 4806 w (The) 1292 4806 w (feature) 1466 4806 w (is) 1771 4806 w (not) 1859 4806 w (intended) 2015 4806 w (for) 2395 4806 w (efficiency,) 2536 4806 w (although) 2964 4806 w (it) 3348 4806 w (can) 3429 4806 w (produce) 3591 4806 w (efficient) 3948 4806 w (code;) 4293 4806 w (rather) 4529 4806 w (it) 4796 4806 w (rep\255) 4877 4806 w (resents) 720 4916 w (a) 1042 4916 w (unique) 1129 4916 w (storage) 1450 4916 w (class) 1784 4916 w (that) 2013 4916 w (would) 2212 4916 w (be) 2514 4916 w (hard) 2649 4916 w (to) 2879 4916 w (get) 3001 4916 w (any) 3166 4916 w (other) 3355 4916 w (way.) 3608 4916 w (On) 3866 4916 w (a) 4031 4916 w (shared\255memory) 4118 4916 w (multi\255) 4795 4916 w (processor,) 720 5026 w (an) 1158 5026 w (external) 1285 5026 w (register) 1637 5026 w (is) 1970 5026 w (one\255per\255processor) 2065 5026 w (and) 2819 5026 w (neither) 3002 5026 w (one\255per\255procedure) 3315 5026 w (\(automatic\)) 4095 5026 w (or) 4585 5026 w (one\255per\255) 4702 5026 w (system) 720 5136 w (\(external\).) 1028 5136 w (It) 1486 5136 w (is) 1577 5136 w (used) 1671 5136 w (for) 1891 5136 w (two) 2037 5136 w (variables) 2221 5136 w (in) 2610 5136 w (the) 2717 5136 w (Plan) 2871 5136 w (9) 3077 5136 w (kernel,) 3151 5136 w 9 /Courier f (u) 3453 5136 w 9 /Palatino-Roman f (and) 3536 5136 w 9 /Courier f (m) 3717 5136 w 9 /Palatino-Roman f (.) 3771 5136 w 9 /Courier f (U) 3846 5136 w 9 /Palatino-Roman f (is) 3929 5136 w (a) 4022 5136 w (pointer) 4096 5136 w (to) 4416 5136 w (the) 4525 5136 w (structure) 4679 5136 w (representing) 720 5246 w (the) 1246 5246 w (currently) 1394 5246 w (running) 1784 5246 w (process) 2129 5246 w (and) 2451 5246 w 9 /Courier f (m) 2626 5246 w 9 /Palatino-Roman f (is) 2703 5246 w (a) 2790 5246 w (pointer) 2858 5246 w (to) 3172 5246 w (the) 3275 5246 w (per\255machine) 3423 5246 w (data) 3946 5246 w (structure.) 4144 5246 w 9 /Palatino-Bold f (3.7.) 720 5496 w (Long) 902 5496 w (long) 1135 5496 w 9 /Palatino-Roman f (The) 720 5652 w (compilers) 896 5652 w (accept) 1314 5652 w 9 /Courier f (long) 1592 5652 w (long) 1834 5652 w 9 /Palatino-Roman f (as) 2076 5652 w (a) 2185 5652 w (basic) 2256 5652 w (type) 2481 5652 w (meaning) 2684 5652 w (64\255bit) 3058 5652 w (integer.) 3311 5652 w (On) 3664 5652 w (all) 3814 5652 w (of) 3938 5652 w (the) 4045 5652 w (machines) 4197 5652 w (this) 4599 5652 w (type) 4772 5652 w (is) 4976 5652 w (synthesized) 720 5762 w (from) 1215 5762 w (32\255bit) 1433 5762 w (instructions.) 1682 5762 w 9 /Palatino-Bold f (3.8.) 720 6012 w (Pragma) 902 6012 w 9 /Palatino-Roman f (The) 720 6168 w (compilers) 902 6168 w (accept) 1326 6168 w 9 /Courier f (#pragma) 1610 6168 w (lib) 2020 6168 w 9 /Palatino-Italic f (libname) 2214 6168 w 9 /Palatino-Roman f (and) 2539 6168 w (pass) 2723 6168 w (the) 2930 6168 w (library) 3087 6168 w (name) 3388 6168 w (string) 3639 6168 w (uninterpreted) 3904 6168 w (to) 4491 6168 w (the) 4604 6168 w (loader.) 4762 6168 w (The) 720 6278 w (loader) 901 6278 w (uses) 1187 6278 w (the) 1391 6278 w (library) 1547 6278 w (name) 1847 6278 w (to) 2097 6278 w (find) 2208 6278 w (libraries) 2402 6278 w (to) 2759 6278 w (load.) 2870 6278 w (If) 3123 6278 w (the) 3215 6278 w (name) 3371 6278 w (contains) 3621 6278 w 9 /Courier f ($O) 3985 6278 w 9 /Palatino-Roman f (,) 4093 6278 w (it) 4147 6278 w (is) 4234 6278 w (replaced) 4329 6278 w (with) 4702 6278 w (the) 4915 6278 w (single) 720 6388 w (character) 988 6388 w (object) 1388 6388 w (type) 1655 6388 w (of) 1865 6388 w (the) 1978 6388 w (compiler) 2136 6388 w (\(e.g.,) 2523 6388 w 9 /Courier f (v) 2748 6388 w 9 /Palatino-Roman f (for) 2835 6388 w (the) 2984 6388 w (MIPS\).) 3142 6388 w (If) 3471 6388 w (the) 3566 6388 w (name) 3725 6388 w (contains) 3978 6388 w 9 /Courier f ($M) 4345 6388 w 9 /Palatino-Roman f (,) 4453 6388 w (it) 4510 6388 w (is) 4600 6388 w (replaced) 4698 6388 w (with) 720 6498 w (the) 929 6498 w (architecture) 1080 6498 w (type) 1581 6498 w (for) 1784 6498 w (the) 1926 6498 w (compiler) 2077 6498 w (\(e.g.,) 2457 6498 w 9 /Courier f (mips) 2674 6498 w 9 /Palatino-Roman f (for) 2915 6498 w (the) 3056 6498 w (MIPS\).) 3206 6498 w (If) 3526 6498 w (the) 3612 6498 w (name) 3762 6498 w (starts) 4006 6498 w (with) 4248 6498 w 9 /Courier f (/) 4456 6498 w 9 /Palatino-Roman f (it) 4535 6498 w (is) 4616 6498 w (an) 4705 6498 w (abso\255) 4827 6498 w (lute) 720 6608 w (pathname;) 907 6608 w (if) 1364 6608 w (it) 1454 6608 w (starts) 1545 6608 w (with) 1797 6608 w 9 /Courier f (.) 2015 6608 w 9 /Palatino-Roman f (then) 2104 6608 w (it) 2316 6608 w (is) 2407 6608 w (searched) 2506 6608 w (for) 2893 6608 w (in) 3044 6608 w (the) 3157 6608 w (loader's) 3317 6608 w (current) 3670 6608 w (directory.) 3996 6608 w (Otherwise,) 4443 6608 w (the) 4915 6608 w (name) 720 6718 w (is) 982 6718 w (searched) 1089 6718 w (from) 1484 6718 w 9 /Courier f (/$M/lib) 1722 6718 w 9 /Palatino-Roman f (.) 2100 6718 w (Such) 2189 6718 w 9 /Courier f (#pragma) 2426 6718 w 9 /Palatino-Roman f (statements) 2847 6718 w (in) 3318 6718 w (header) 3438 6718 w (files) 3754 6718 w (guarantee) 3959 6718 w (that) 4399 6718 w (the) 4598 6718 w (correct) 4765 6718 w (libraries) 720 6828 w (are) 1069 6828 w (always) 1216 6828 w (linked) 1518 6828 w (with) 1793 6828 w (a) 1999 6828 w (program) 2067 6828 w (without) 2440 6828 w (the) 2780 6828 w (need) 2928 6828 w (to) 3144 6828 w (specify) 3247 6828 w (them) 3551 6828 w (explicitly) 3778 6828 w (at) 4169 6828 w (link) 4267 6828 w (time.) 4444 6828 w (They) 720 6984 w (also) 952 6984 w (accept) 1143 6984 w 9 /Courier f (#pragma) 1427 6984 w (packed) 1837 6984 w (on) 2193 6984 w 9 /Palatino-Roman f (\(or) 2333 6984 w 9 /Courier f (yes) 2481 6984 w 9 /Palatino-Roman f (or) 2675 6984 w 9 /Courier f (1) 2793 6984 w 9 /Palatino-Roman f (\)) 2847 6984 w (to) 2909 6984 w (cause) 3021 6984 w (subsequently) 3273 6984 w (declared) 3834 6984 w (data,) 4210 6984 w (until) 4441 6984 w 9 /Courier f (#pragma) 4662 6984 w (packed) 720 7094 w (off) 1080 7094 w 9 /Palatino-Roman f (\(or) 1278 7094 w 9 /Courier f (no) 1429 7094 w 9 /Palatino-Roman f (or) 1572 7094 w 9 /Courier f (0) 1693 7094 w 9 /Palatino-Roman f (\),) 1747 7094 w (to) 1835 7094 w (be) 1950 7094 w (laid) 2078 7094 w (out) 2265 7094 w (in) 2434 7094 w (memory) 2547 7094 w (tightly) 2919 7094 w (packed) 3218 7094 w (in) 3540 7094 w (successive) 3653 7094 w (bytes,) 4099 7094 w (disregarding) 4368 7094 w (the) 4915 7094 w (usual) 720 7204 w (alignment) 960 7204 w (rules.) 1386 7204 w (Accessing) 1652 7204 w (such) 2072 7204 w (data) 2279 7204 w (can) 2477 7204 w (cause) 2637 7204 w (faults.) 2880 7204 w cleartomark showpage saveobj restore %%EndPage: 3 3 %%Page: 4 4 /saveobj save def mark 4 pagesetup 9 /Palatino-Roman f (\255 4 \255) 2804 470 w (Similarly,) 720 830 w 9 /Courier f (#pragma) 1146 830 w (profile) 1565 830 w (off) 1984 830 w 9 /Palatino-Roman f (\(or) 2187 830 w 9 /Courier f (no) 2344 830 w 9 /Palatino-Roman f (or) 2493 830 w 9 /Courier f (0) 2620 830 w 9 /Palatino-Roman f (\)) 2674 830 w (causes) 2745 830 w (subsequently) 3044 830 w (declared) 3613 830 w (functions,) 3997 830 w (until) 4433 830 w 9 /Courier f (#pragma) 4662 830 w (profile) 720 940 w (on) 1126 940 w 9 /Palatino-Roman f (\(or) 1262 940 w 9 /Courier f (yes) 1406 940 w 9 /Palatino-Roman f (or) 1596 940 w 9 /Courier f (1) 1710 940 w 9 /Palatino-Roman f (\),) 1764 940 w (to) 1844 940 w (be) 1951 940 w (marked) 2071 940 w (as) 2406 940 w (unprofiled.) 2516 940 w (Such) 3015 940 w (functions) 3236 940 w (will) 3635 940 w (not) 3815 940 w (be) 3974 940 w (profiled) 4094 940 w (when) 4441 940 w (profiling) 4690 940 w (is) 720 1050 w (enabled) 807 1050 w (for) 1144 1050 w (the) 1283 1050 w (rest) 1431 1050 w (of) 1601 1050 w (the) 1704 1050 w (program.) 1852 1050 w (Two) 720 1203 w 9 /Courier f (#pragma) 923 1203 w 9 /Palatino-Roman f (statements) 1324 1203 w (allow) 1775 1203 w (type\255checking) 2020 1203 w (of) 2603 1203 w 9 /Courier f (print) 2706 1203 w 9 /Palatino-Roman f (\255like) 2976 1203 w (functions.) 3174 1203 w (The) 3615 1203 w (first,) 3788 1203 w (of) 3994 1203 w (the) 4097 1203 w (form) 4245 1203 w 8 /Courier f (#pragma varargck argpos error 2) 1008 1375 w 9 /Palatino-Roman f (tells) 720 1557 w (the) 925 1557 w (compiler) 1092 1557 w (that) 1488 1557 w (the) 1687 1557 w (second) 1854 1557 w (argument) 2175 1557 w (to) 2607 1557 w 9 /Courier f (error) 2730 1557 w 9 /Palatino-Roman f (is) 3043 1557 w (a) 3150 1557 w 9 /Courier f (print) 3238 1557 w 9 /Palatino-Roman f (format) 3551 1557 w (string) 3864 1557 w (\(see) 4139 1557 w (the) 4336 1557 w (manual) 4504 1557 w (page) 4848 1557 w 9 /Palatino-Italic f (print) 720 1667 w 9 /Palatino-Roman f (\(2\)\)) 912 1667 w (that) 1070 1667 w (specifies) 1250 1667 w (how) 1611 1667 w (to) 1811 1667 w (format) 1914 1667 w 9 /Courier f (error) 2207 1667 w 9 /Palatino-Roman f ('s) 2477 1667 w (subsequent) 2563 1667 w (arguments.) 3038 1667 w (The) 3534 1667 w (second,) 3707 1667 w (of) 4031 1667 w (the) 4134 1667 w (form) 4282 1667 w 8 /Courier f (#pragma varargck type "s" char*) 1008 1839 w 9 /Palatino-Roman f (says) 720 2021 w (that) 925 2021 w (the) 1116 2021 w 9 /Courier f (print) 1275 2021 w 9 /Palatino-Roman f (format) 1579 2021 w (verb) 1883 2021 w 9 /Courier f (s) 2097 2021 w 9 /Palatino-Roman f (processes) 2185 2021 w (an) 2599 2021 w (argument) 2730 2021 w (of) 3153 2021 w (type) 3267 2021 w 9 /Courier f (char*) 3478 2021 w 9 /Palatino-Roman f (.) 3748 2021 w (If) 3828 2021 w (the) 3924 2021 w (compiler's) 4084 2021 w 9 /Courier f (\255F) 4536 2021 w 9 /Palatino-Roman f (option) 4679 2021 w (is) 4976 2021 w (enabled,) 720 2131 w (the) 1082 2131 w (compiler) 1232 2131 w (will) 1611 2131 w (use) 1789 2131 w (this) 1949 2131 w (information) 2120 2131 w (to) 2621 2131 w (report) 2726 2131 w (type) 3000 2131 w (violations) 3202 2131 w (in) 3621 2131 w (the) 3724 2131 w (arguments) 3874 2131 w (to) 4326 2131 w 9 /Courier f (print) 4430 2131 w 9 /Palatino-Roman f (,) 4700 2131 w 9 /Courier f (error) 4747 2131 w 9 /Palatino-Roman f (,) 5017 2131 w (and) 720 2241 w (similar) 895 2241 w (routines.) 1194 2241 w 9 /Palatino-Bold f (4.) 720 2482 w (Object) 834 2482 w (module) 1132 2482 w (conventions) 1470 2482 w 9 /Palatino-Roman f (The) 720 2635 w (overall) 904 2635 w (conventions) 1215 2635 w (of) 1733 2635 w (the) 1848 2635 w (runtime) 2008 2635 w (environment) 2363 2635 w (are) 2912 2635 w (important) 3071 2635 w (to) 3508 2635 w (runtime) 3623 2635 w (efficiency.) 3978 2635 w (In) 4439 2635 w (this) 4557 2635 w (section,) 4738 2635 w (several) 720 2745 w (of) 1025 2745 w (these) 1128 2745 w (conventions) 1357 2745 w (are) 1864 2745 w (discussed.) 2011 2745 w 9 /Palatino-Bold f (4.1.) 720 2986 w (Register) 902 2986 w (saving) 1265 2986 w 9 /Palatino-Roman f (In) 720 3139 w (the) 830 3139 w (Plan) 982 3139 w (9) 1186 3139 w (compilers,) 1258 3139 w (the) 1701 3139 w (caller) 1854 3139 w (of) 2098 3139 w (a) 2206 3139 w (procedure) 2279 3139 w (saves) 2718 3139 w (the) 2961 3139 w (registers.) 3114 3139 w (With) 3528 3139 w (caller\255saves,) 3754 3139 w (the) 4266 3139 w (leaf) 4419 3139 w (procedures) 4591 3139 w (can) 720 3249 w (use) 883 3249 w (all) 1044 3249 w (the) 1167 3249 w (registers) 1318 3249 w (and) 1684 3249 w (never) 1862 3249 w (save) 2112 3249 w (them.) 2314 3249 w (If) 2589 3249 w (you) 2675 3249 w (spend) 2854 3249 w (a) 3121 3249 w (lot) 3191 3249 w (of) 3322 3249 w (time) 3427 3249 w (at) 3630 3249 w (the) 3730 3249 w (leaves,) 3880 3249 w (this) 4174 3249 w (seems) 4345 3249 w (preferable.) 4611 3249 w (With) 720 3359 w (callee\255saves,) 942 3359 w (the) 1457 3359 w (saving) 1606 3359 w (of) 1892 3359 w (the) 1996 3359 w (registers) 2145 3359 w (is) 2509 3359 w (done) 2597 3359 w (in) 2821 3359 w (the) 2923 3359 w (single) 3072 3359 w (point) 3332 3359 w (of) 3569 3359 w (entry) 3674 3359 w (and) 3910 3359 w (return.) 4087 3359 w (If) 4409 3359 w (you) 4495 3359 w (are) 4674 3359 w (inter\255) 4823 3359 w (ested) 720 3469 w (in) 957 3469 w (space,) 1063 3469 w (this) 1334 3469 w (seems) 1508 3469 w (preferable.) 1777 3469 w (In) 2257 3469 w (both,) 2368 3469 w (there) 2601 3469 w (is) 2833 3469 w (a) 2925 3469 w (degree) 2998 3469 w (of) 3296 3469 w (uncertainty) 3403 3469 w (about) 3888 3469 w (what) 4144 3469 w (registers) 4373 3469 w (need) 4740 3469 w (to) 4960 3469 w (be) 720 3579 w (saved.) 844 3579 w (Callee\255saved) 1153 3579 w (registers) 1693 3579 w (make) 2064 3579 w (it) 2312 3579 w (difficult) 2399 3579 w (to) 2747 3579 w (find) 2858 3579 w (variables) 3052 3579 w (in) 3443 3579 w (registers) 3552 3579 w (in) 3924 3579 w (debuggers.) 4034 3579 w (Callee\255saved) 4531 3579 w (registers) 720 3689 w (also) 1099 3689 w (complicate) 1297 3689 w (the) 1768 3689 w (implementation) 1931 3689 w (of) 2604 3689 w 9 /Courier f (longjmp) 2722 3689 w 9 /Palatino-Roman f (.) 3100 3689 w (The) 3184 3689 w (convincing) 3372 3689 w (argument) 3849 3689 w (is) 4276 3689 w (that) 4378 3689 w (with) 4573 3689 w (caller\255) 4794 3689 w (saves,) 720 3799 w (the) 983 3799 w (decision) 1133 3799 w (to) 1488 3799 w (registerize) 1593 3799 w (a) 2034 3799 w (variable) 2104 3799 w (can) 2451 3799 w (include) 2613 3799 w (the) 2934 3799 w (cost) 3084 3799 w (of) 3267 3799 w (saving) 3372 3799 w (the) 3659 3799 w (register) 3809 3799 w (across) 4137 3799 w (calls.) 4410 3799 w (For) 4657 3799 w (a) 4819 3799 w (fur\255) 4890 3799 w (ther) 720 3909 w (discussion) 904 3909 w (of) 1344 3909 w (caller\255) 1447 3909 w (vs.) 1716 3909 w (callee\255saves,) 1851 3909 w (see) 2365 3909 w (the) 2512 3909 w (paper) 2660 3909 w (by) 2915 3909 w (Davidson) 3038 3909 w (and) 3447 3909 w (Whalley) 3622 3909 w ([Dav91].) 3977 3909 w (In) 720 4062 w (the) 831 4062 w (Plan) 984 4062 w (9) 1189 4062 w (operating) 1262 4062 w (system,) 1676 4062 w (calls) 2005 4062 w (to) 2208 4062 w (the) 2316 4062 w (kernel) 2469 4062 w (look) 2747 4062 w (like) 2952 4062 w (normal) 3126 4062 w (procedure) 3443 4062 w (calls,) 3883 4062 w (which) 4110 4062 w (means) 4384 4062 w (the) 4670 4062 w (caller) 4824 4062 w (has) 720 4172 w (saved) 882 4172 w (the) 1141 4172 w (registers) 1293 4172 w (and) 1660 4172 w (the) 1839 4172 w (system) 1991 4172 w (entry) 2296 4172 w (does) 2534 4172 w (not) 2747 4172 w (have) 2906 4172 w (to.) 3123 4172 w (This) 3275 4172 w (makes) 3472 4172 w (system) 3753 4172 w (calls) 4057 4172 w (considerably) 4258 4172 w (faster.) 4795 4172 w (Since) 720 4282 w (this) 954 4282 w (is) 1125 4282 w (a) 1214 4282 w (potential) 1284 4282 w (security) 1666 4282 w (hole,) 2009 4282 w (and) 2229 4282 w (can) 2407 4282 w (lead) 2570 4282 w (to) 2765 4282 w (non\255determinism,) 2871 4282 w (the) 3611 4282 w (system) 3762 4282 w (may) 4066 4282 w (eventually) 4266 4282 w (save) 4712 4282 w (the) 4915 4282 w (registers) 720 4392 w (on) 1083 4392 w (entry,) 1208 4392 w (or) 1465 4392 w (more) 1574 4392 w (likely) 1805 4392 w (clear) 2049 4392 w (the) 2262 4392 w (registers) 2410 4392 w (on) 2773 4392 w (return.) 2898 4392 w 9 /Palatino-Bold f (4.2.) 720 4633 w (Calling) 902 4633 w (convention) 1230 4633 w 9 /Palatino-Roman f (Older) 720 4786 w (C) 986 4786 w (compilers) 1085 4786 w (maintain) 1512 4786 w (a) 1902 4786 w (frame) 1982 4786 w (pointer,) 2250 4786 w (which) 2600 4786 w (is) 2881 4786 w (at) 2981 4786 w (a) 3092 4786 w (known) 3173 4786 w (constant) 3488 4786 w (offset) 3861 4786 w (from) 4118 4786 w (the) 4349 4786 w (stack) 4510 4786 w (pointer) 4749 4786 w (within) 720 4896 w (each) 1022 4896 w (function.) 1243 4896 w (For) 1664 4896 w (machines) 1841 4896 w (where) 2257 4896 w (the) 2547 4896 w (stack) 2713 4896 w (grows) 2956 4896 w (towards) 3245 4896 w (zero,) 3614 4896 w (the) 3851 4896 w (argument) 4016 4896 w (pointer) 4445 4896 w (is) 4776 4896 w (at) 4880 4896 w (a) 4995 4896 w (known) 720 5006 w (constant) 1027 5006 w (offset) 1392 5006 w (from) 1641 5006 w (the) 1864 5006 w (frame) 2017 5006 w (pointer.) 2278 5006 w (Since) 2643 5006 w (the) 2880 5006 w (stack) 3033 5006 w (grows) 3265 5006 w (down) 3543 5006 w (in) 3804 5006 w (Plan) 3911 5006 w (9,) 4117 5006 w (the) 4214 5006 w (Plan) 4368 5006 w (9) 4574 5006 w (compilers) 4648 5006 w (keep) 720 5116 w (neither) 935 5116 w (an) 1242 5116 w (explicit) 1364 5116 w (frame) 1681 5116 w (pointer) 1939 5116 w (nor) 2255 5116 w (an) 2418 5116 w (explicit) 2540 5116 w (argument) 2857 5116 w (pointer;) 3271 5116 w (instead) 3610 5116 w (they) 3924 5116 w (generate) 4124 5116 w (addresses) 4490 5116 w (rel\255) 4905 5116 w (ative) 720 5226 w (to) 938 5226 w (the) 1041 5226 w (stack) 1189 5226 w (pointer.) 1415 5226 w (On) 720 5379 w (some) 866 5379 w (architectures,) 1099 5379 w (the) 1658 5379 w (first) 1806 5379 w (argument) 1989 5379 w (to) 2401 5379 w (a) 2504 5379 w (subroutine) 2572 5379 w (is) 3028 5379 w (passed) 3115 5379 w (in) 3411 5379 w (a) 3512 5379 w (register.) 3580 5379 w 9 /Palatino-Bold f (4.3.) 720 5620 w (Functions) 902 5620 w (returning) 1330 5620 w (structures) 1743 5620 w 9 /Palatino-Roman f (Structures) 720 5773 w (longer) 1158 5773 w (than) 1444 5773 w (one) 1652 5773 w (word) 1826 5773 w (are) 2072 5773 w (awkward) 2226 5773 w (to) 2637 5773 w (implement) 2747 5773 w (since) 3209 5773 w (they) 3438 5773 w (do) 3643 5773 w (not) 3778 5773 w (fit) 3940 5773 w (in) 4056 5773 w (registers) 4164 5773 w (and) 4534 5773 w (must) 4716 5773 w (be) 4947 5773 w (passed) 720 5883 w (around) 1022 5883 w (in) 1343 5883 w (memory.) 1450 5883 w (Functions) 1862 5883 w (that) 2283 5883 w (return) 2469 5883 w (structures) 2749 5883 w (are) 3177 5883 w (particularly) 3330 5883 w (clumsy.) 3827 5883 w (The) 4189 5883 w (Plan) 4368 5883 w (9) 4574 5883 w (compilers) 4648 5883 w (pass) 720 5993 w (the) 924 5993 w (return) 1078 5993 w (address) 1358 5993 w (of) 1697 5993 w (a) 1807 5993 w (structure) 1882 5993 w (as) 2273 5993 w (the) 2386 5993 w (first) 2541 5993 w (argument) 2731 5993 w (of) 3150 5993 w (a) 3260 5993 w (function) 3335 5993 w (that) 3699 5993 w (has) 3886 5993 w (a) 4051 5993 w (structure) 4126 5993 w (return) 4517 5993 w (value.) 4798 5993 w (Thus) 720 6103 w 9 /Courier f (x = f\(...\)) 1042 6285 w 9 /Palatino-Roman f (is) 720 6467 w (rewritten) 807 6467 w (as) 1201 6467 w 9 /Courier f (f\(&x, ...\)) 1042 6649 w 9 /Palatino-Roman f (.) 1582 6649 w (This) 720 6831 w (saves) 915 6831 w (a) 1154 6831 w (copy) 1223 6831 w (and) 1441 6831 w (makes) 1617 6831 w (the) 1896 6831 w (compilation) 2045 6831 w (much) 2547 6831 w (less) 2796 6831 w (clumsy.) 2965 6831 w (A) 3322 6831 w (disadvantage) 3416 6831 w (is) 3975 6831 w (that) 4063 6831 w (if) 4244 6831 w (you) 4324 6831 w (call) 4502 6831 w (this) 4663 6831 w (func\255) 4834 6831 w (tion) 720 6941 w (without) 901 6941 w (an) 1241 6941 w (assignment,) 1361 6941 w (a) 1860 6941 w (dummy) 1928 6941 w (location) 2268 6941 w (must) 2610 6941 w (be) 2834 6941 w (invented.) 2950 6941 w (There) 720 7094 w (is) 974 7094 w (also) 1063 7094 w (a) 1247 7094 w (danger) 1317 7094 w (of) 1623 7094 w (calling) 1728 7094 w (a) 2018 7094 w (function) 2088 7094 w (that) 2447 7094 w (returns) 2630 7094 w (a) 2945 7094 w (structure) 3016 7094 w (without) 3403 7094 w (declaring) 3746 7094 w (it) 4145 7094 w (as) 4227 7094 w (such.) 4336 7094 w (With) 4592 7094 w (ANSI) 4816 7094 w (C) 720 7204 w (function) 807 7204 w (prototypes,) 1164 7204 w (this) 1645 7204 w (error) 1814 7204 w (need) 2038 7204 w (never) 2254 7204 w (occur.) 2502 7204 w cleartomark showpage saveobj restore %%EndPage: 4 4 %%Page: 5 5 /saveobj save def mark 5 pagesetup 9 /Palatino-Roman f (\255 5 \255) 2804 470 w 9 /Palatino-Bold f (5.) 720 830 w (Implementation) 834 830 w 9 /Palatino-Roman f (The) 720 976 w (compiler) 900 976 w (is) 1284 976 w (divided) 1378 976 w (internally) 1719 976 w (into) 2135 976 w (four) 2323 976 w (machine\255independent) 2523 976 w (passes,) 3425 976 w (four) 3735 976 w (machine\255dependent) 3936 976 w (passes,) 4761 976 w (and) 720 1086 w (an) 895 1086 w (output) 1015 1086 w (pass.) 1310 1086 w (The) 1554 1086 w (next) 1727 1086 w (nine) 1922 1086 w (sections) 2118 1086 w (describe) 2458 1086 w (each) 2812 1086 w (pass) 3015 1086 w (in) 3213 1086 w (order.) 3314 1086 w 9 /Palatino-Bold f (5.1.) 720 1307 w (Parsing) 902 1307 w 9 /Palatino-Roman f (The) 720 1453 w (first) 900 1453 w (pass) 1090 1453 w (is) 1295 1453 w (a) 1389 1453 w (YACC\255based) 1465 1453 w (parser) 2015 1453 w ([Joh79].) 2298 1453 w (Declarations) 2657 1453 w (are) 3188 1453 w (interpreted) 3343 1453 w (immediately,) 3822 1453 w (building) 4378 1453 w (a) 4748 1453 w (block) 4824 1453 w (structured) 720 1563 w (symbol) 1166 1563 w (table.) 1488 1563 w (Executable) 1757 1563 w (statements) 2219 1563 w (are) 2676 1563 w (put) 2829 1563 w (into) 2996 1563 w (a) 3183 1563 w (parse) 3257 1563 w (tree) 3502 1563 w (and) 3683 1563 w (collected,) 3864 1563 w (without) 4269 1563 w (interpreta\255) 4615 1563 w (tion.) 720 1673 w (At) 955 1673 w (the) 1086 1673 w (end) 1242 1673 w (of) 1423 1673 w (each) 1534 1673 w (procedure,) 1745 1673 w (the) 2210 1673 w (parse) 2366 1673 w (tree) 2613 1673 w (for) 2796 1673 w (the) 2943 1673 w (function) 3099 1673 w (is) 3465 1673 w (examined) 3561 1673 w (by) 3983 1673 w (the) 4115 1673 w (other) 4272 1673 w (passes) 4515 1673 w (of) 4803 1673 w (the) 4915 1673 w (compiler.) 720 1783 w (The) 720 1929 w (input) 893 1929 w (stream) 1132 1929 w (of) 1426 1929 w (the) 1530 1929 w (parser) 1679 1929 w (is) 1955 1929 w (a) 2043 1929 w (pushdown) 2112 1929 w (list) 2566 1929 w (of) 2710 1929 w (input) 2814 1929 w (activations.) 3054 1929 w (The) 3557 1929 w (preprocessor) 3731 1929 w (expansions) 4273 1929 w (of) 4742 1929 w (mac\255) 4846 1929 w (ros) 720 2039 w (and) 867 2039 w 9 /Courier f (#include) 1042 2039 w 9 /Palatino-Roman f (are) 1497 2039 w (implemented) 1644 2039 w (as) 2197 2039 w (pushdowns.) 2303 2039 w (Thus) 2840 2039 w (there) 3062 2039 w (is) 3289 2039 w (no) 3376 2039 w (separate) 3501 2039 w (pass) 3858 2039 w (for) 4056 2039 w (preprocessing.) 4195 2039 w 9 /Palatino-Bold f (5.2.) 720 2260 w (Typing) 902 2260 w 9 /Palatino-Roman f (The) 720 2406 w (next) 900 2406 w (pass) 1102 2406 w (distributes) 1307 2406 w (typing) 1763 2406 w (information) 2055 2406 w (to) 2561 2406 w (every) 2671 2406 w (node) 2924 2406 w (of) 3154 2406 w (the) 3264 2406 w (tree.) 3419 2406 w (Implicit) 3647 2406 w (operations) 3989 2406 w (on) 4444 2406 w (the) 4577 2406 w (tree) 4733 2406 w (are) 4916 2406 w (added,) 720 2516 w (such) 1019 2516 w (as) 1226 2516 w (type) 1332 2516 w (promotions) 1532 2516 w (and) 2020 2516 w (taking) 2195 2516 w (the) 2471 2516 w (address) 2619 2516 w (of) 2952 2516 w (arrays) 3055 2516 w (and) 3328 2516 w (functions.) 3503 2516 w 9 /Palatino-Bold f (5.3.) 720 2737 w (Machine\255independent) 902 2737 w (optimization) 1840 2737 w 9 /Palatino-Roman f (The) 720 2883 w (next) 895 2883 w (pass) 1092 2883 w (performs) 1292 2883 w (optimizations) 1683 2883 w (and) 2259 2883 w (transformations) 2436 2883 w (of) 3098 2883 w (the) 3203 2883 w (tree,) 3353 2883 w (such) 3553 2883 w (as) 3763 2883 w (converting) 3872 2883 w 9 /Courier f (&*x) 4328 2883 w 9 /Palatino-Roman f (and) 4516 2883 w 9 /Courier f (*&x) 4694 2883 w 9 /Palatino-Roman f (into) 4882 2883 w 9 /Courier f (x) 720 2993 w 9 /Palatino-Roman f (.) 774 2993 w (Constant) 843 2993 w (expressions) 1227 2993 w (are) 1715 2993 w (converted) 1862 2993 w (to) 2285 2993 w (constants) 2388 2993 w (in) 2786 2993 w (this) 2887 2993 w (pass.) 3056 2993 w 9 /Palatino-Bold f (5.4.) 720 3214 w (Arithmetic) 902 3214 w (rewrites) 1370 3214 w 9 /Palatino-Roman f (This) 720 3360 w (is) 920 3360 w (another) 1013 3360 w (machine\255independent) 1350 3360 w (optimization.) 2251 3360 w (Subtrees) 2839 3360 w (of) 3210 3360 w (add,) 3319 3360 w (subtract,) 3526 3360 w (and) 3901 3360 w (multiply) 4083 3360 w (of) 4458 3360 w (integers) 4568 3360 w (are) 4916 3360 w (rewritten) 720 3470 w (for) 1115 3470 w (easier) 1255 3470 w (compilation.) 1510 3470 w (The) 2058 3470 w (major) 2232 3470 w (transformation) 2487 3470 w (is) 3110 3470 w (factoring:) 3198 3470 w 9 /Courier f (4+8*a+16*b+5) 3604 3470 w 9 /Palatino-Roman f (is) 4276 3470 w (transformed) 4364 3470 w (into) 4882 3470 w 9 /Courier f (9+8*\(a+2*b\)) 720 3580 w 9 /Palatino-Roman f (.) 1314 3580 w (Such) 1383 3580 w (expressions) 1600 3580 w (arise) 2088 3580 w (from) 2299 3580 w (address) 2517 3580 w (manipulation) 2850 3580 w (and) 3412 3580 w (array) 3587 3580 w (indexing.) 3822 3580 w 9 /Palatino-Bold f (5.5.) 720 3801 w (Addressability) 902 3801 w 9 /Palatino-Roman f (This) 720 3947 w (is) 919 3947 w (the) 1011 3947 w (first) 1164 3947 w (of) 1352 3947 w (the) 1460 3947 w (machine\255dependent) 1613 3947 w (passes.) 2435 3947 w (The) 2765 3947 w (addressability) 2943 3947 w (of) 3534 3947 w (a) 3642 3947 w (processor) 3715 3947 w (is) 4128 3947 w (defined) 4221 3947 w (as) 4554 3947 w (the) 4666 3947 w (set) 4820 3947 w (of) 4960 3947 w (expressions) 720 4057 w (that) 1211 4057 w (is) 1393 4057 w (legal) 1482 4057 w (in) 1697 4057 w (the) 1800 4057 w (address) 1950 4057 w (field) 2285 4057 w (of) 2490 4057 w (a) 2595 4057 w (machine) 2665 4057 w (language) 3027 4057 w (instruction.) 3417 4057 w (The) 3922 4057 w (addressability) 4097 4057 w (of) 4685 4057 w (differ\255) 4790 4057 w (ent) 720 4167 w (processors) 875 4167 w (varies) 1328 4167 w (widely.) 1597 4167 w (At) 1948 4167 w (one) 2078 4167 w (end) 2253 4167 w (of) 2433 4167 w (the) 2543 4167 w (spectrum) 2698 4167 w (are) 3102 4167 w (the) 3256 4167 w (68020) 3411 4167 w (and) 3666 4167 w (VAX,) 3848 4167 w (which) 4096 4167 w (allow) 4372 4167 w (a) 4625 4167 w (complex) 4701 4167 w (mix) 720 4277 w (of) 899 4277 w (incrementing,) 1006 4277 w (decrementing,) 1584 4277 w (indexing,) 2182 4277 w (and) 2582 4277 w (relative) 2760 4277 w (addressing.) 3086 4277 w (At) 3596 4277 w (the) 3722 4277 w (other) 3873 4277 w (end) 4110 4277 w (is) 4286 4277 w (the) 4376 4277 w (MIPS,) 4527 4277 w (which) 4795 4277 w (allows) 720 4387 w (only) 1003 4387 w (registers) 1204 4387 w (and) 1567 4387 w (constant) 1742 4387 w (offsets) 2102 4387 w (from) 2384 4387 w (the) 2603 4387 w (contents) 2752 4387 w (of) 3111 4387 w (a) 3215 4387 w (register.) 3284 4387 w (The) 3656 4387 w (addressability) 3830 4387 w (can) 4417 4387 w (be) 4578 4387 w (different) 4695 4387 w (for) 720 4497 w (different) 859 4497 w (instructions) 1227 4497 w (within) 1722 4497 w (the) 2006 4497 w (same) 2154 4497 w (processor.) 2382 4497 w (It) 720 4643 w (is) 814 4643 w (important) 911 4643 w (to) 1347 4643 w (the) 1461 4643 w (code) 1620 4643 w (generator) 1842 4643 w (to) 2261 4643 w (know) 2375 4643 w (when) 2636 4643 w (a) 2892 4643 w (subtree) 2971 4643 w (represents) 3299 4643 w (an) 3746 4643 w (address) 3877 4643 w (of) 4221 4643 w (a) 4335 4643 w (particular) 4414 4643 w (type.) 4840 4643 w (This) 720 4753 w (is) 927 4753 w (done) 1027 4753 w (with) 1263 4753 w (a) 1482 4753 w (bottom\255up) 1563 4753 w (walk) 2026 4753 w (of) 2258 4753 w (the) 2374 4753 w (tree.) 2535 4753 w (In) 2769 4753 w (this) 2888 4753 w (pass,) 3070 4753 w (the) 3304 4753 w (leaves) 3465 4753 w (are) 3747 4753 w (labeled) 3907 4753 w (with) 4231 4753 w (small) 4450 4753 w (integers.) 4699 4753 w (When) 720 4863 w (an) 988 4863 w (internal) 1116 4863 w (node) 1457 4863 w (is) 1688 4863 w (encountered,) 1783 4863 w (it) 2335 4863 w (is) 2422 4863 w (labeled) 2517 4863 w (by) 2836 4863 w (consulting) 2967 4863 w (a) 3416 4863 w (table) 3492 4863 w (indexed) 3718 4863 w (by) 4071 4863 w (the) 4203 4863 w (labels) 4360 4863 w (on) 4620 4863 w (the) 4754 4863 w (left) 4911 4863 w (and) 720 4973 w (right) 904 4973 w (subtrees.) 1130 4973 w (For) 1540 4973 w (example,) 1708 4973 w (on) 2100 4973 w (the) 2234 4973 w (68020) 2391 4973 w (processor,) 2648 4973 w (it) 3088 4973 w (is) 3176 4973 w (possible) 3272 4973 w (to) 3629 4973 w (address) 3741 4973 w (an) 4083 4973 w (offset) 4212 4973 w (from) 4464 4973 w (a) 4690 4973 w (named) 4766 4973 w (location.) 720 5083 w (In) 1111 5083 w (C,) 1220 5083 w (this) 1333 5083 w (is) 1505 5083 w (represented) 1595 5083 w (by) 2094 5083 w (the) 2220 5083 w (expression) 2371 5083 w 9 /Courier f (*\(&name+constant\)) 2824 5083 w 9 /Palatino-Roman f (.) 3742 5083 w (This) 3815 5083 w (is) 4013 5083 w (marked) 4104 5083 w (addressable) 4439 5083 w (by) 4940 5083 w (the) 720 5193 w (following) 871 5193 w (table.) 1282 5193 w (In) 1548 5193 w (the) 1657 5193 w (table,) 1808 5193 w (a) 2051 5193 w (node) 2122 5193 w (represented) 2348 5193 w (by) 2846 5193 w (the) 2971 5193 w (left) 3121 5193 w (column) 3275 5193 w (is) 3601 5193 w (marked) 3690 5193 w (with) 4023 5193 w (a) 4231 5193 w (small) 4301 5193 w (integer) 4540 5193 w (from) 4845 5193 w (the) 720 5303 w (right) 868 5303 w (column.) 1085 5303 w (Marks) 1455 5303 w (of) 1733 5303 w (the) 1836 5303 w (form) 1984 5303 w 9 /Courier f (A) 2202 5303 w 7 /Courier f (i) 2256 5338 w 9 /Palatino-Roman f (are) 2321 5303 w (addressable) 2468 5303 w (while) 2965 5303 w (marks) 3210 5303 w (of) 3481 5303 w (the) 3584 5303 w (form) 3732 5303 w 9 /Courier f (N) 3950 5303 w 7 /Courier f (i) 4004 5338 w 9 /Palatino-Roman f (are) 4069 5303 w (not) 4216 5303 w (addressable.) 4371 5303 w 9 /Palatino-Bold f (Node) 1042 5474 w (Marked) 1762 5474 w 9 /Courier f (name) 1042 5584 w (A) 1762 5584 w 7 /Courier f (1) 1816 5619 w 9 /Courier f (const) 1042 5694 w (A) 1762 5694 w 7 /Courier f (2) 1816 5729 w 9 /Courier f (&A) 1042 5804 w 7 /Courier f (1) 1150 5839 w 9 /Courier f (A) 1762 5804 w 7 /Courier f (3) 1816 5839 w 9 /Courier f (A) 1042 5914 w 7 /Courier f (3) 1096 5949 w 9 /Courier f (+A) 1138 5914 w 7 /Courier f (1) 1246 5949 w 9 /Courier f (N) 1762 5914 w 7 /Courier f (1) 1816 5949 w 9 /Palatino-Roman f (\(note) 1912 5914 w (that) 2140 5914 w (this) 2320 5914 w (is) 2489 5914 w (not) 2576 5914 w (addressable\)) 2731 5914 w 9 /Courier f (*N) 1042 6024 w 7 /Courier f (1) 1150 6059 w 9 /Courier f (A) 1762 6024 w 7 /Courier f (4) 1816 6059 w 9 /Palatino-Roman f (Here) 720 6195 w (there) 945 6195 w (is) 1177 6195 w (a) 1269 6195 w (distinction) 1342 6195 w (between) 1795 6195 w (a) 2159 6195 w (node) 2232 6195 w (marked) 2460 6195 w 9 /Courier f (A) 2796 6195 w 7 /Courier f (1) 2850 6230 w 9 /Palatino-Roman f (and) 2920 6195 w (a) 3100 6195 w (node) 3173 6195 w (marked) 3401 6195 w 9 /Courier f (A) 3737 6195 w 7 /Courier f (4) 3791 6230 w 9 /Palatino-Roman f (because) 3861 6195 w (the) 4203 6195 w (address) 4357 6195 w (operator) 4696 6195 w (of) 720 6305 w (an) 823 6305 w 9 /Courier f (A) 943 6305 w 7 /Courier f (4) 997 6340 w 9 /Palatino-Roman f (node) 1062 6305 w (is) 1285 6305 w (not) 1372 6305 w (addressable.) 1527 6305 w (So) 2070 6305 w (to) 2191 6305 w (extend) 2294 6305 w (the) 2587 6305 w (table:) 2735 6305 w 9 /Palatino-Bold f (Node) 1042 6476 w (Marked) 1762 6476 w 9 /Courier f (&A) 1042 6586 w 7 /Courier f (4) 1150 6621 w 9 /Courier f (N) 1762 6586 w 7 /Courier f (2) 1816 6621 w 9 /Courier f (N) 1042 6696 w 7 /Courier f (2) 1096 6731 w 9 /Courier f (+N) 1138 6696 w 7 /Courier f (1) 1246 6731 w 9 /Courier f (N) 1762 6696 w 7 /Courier f (1) 1816 6731 w 9 /Palatino-Roman f (The) 720 6867 w (full) 896 6867 w (addressability) 1058 6867 w (of) 1647 6867 w (the) 1753 6867 w (68020) 1904 6867 w (is) 2155 6867 w (expressed) 2245 6867 w (in) 2668 6867 w (18) 2772 6867 w (rules) 2888 6867 w (like) 3112 6867 w (this,) 3284 6867 w (while) 3480 6867 w (the) 3729 6867 w (addressability) 3881 6867 w (of) 4471 6867 w (the) 4578 6867 w (MIPS) 4730 6867 w (is) 4976 6867 w (expressed) 720 6977 w (in) 1141 6977 w (11) 1243 6977 w (rules.) 1357 6977 w (When) 1624 6977 w (one) 1885 6977 w (ports) 2054 6977 w (the) 2285 6977 w (compiler,) 2433 6977 w (this) 2833 6977 w (table) 3002 6977 w (is) 3219 6977 w (usually) 3306 6977 w (initialized) 3622 6977 w (so) 4045 6977 w (that) 4156 6977 w (leaves) 4336 6977 w (are) 4605 6977 w (labeled) 4752 6977 w (as) 720 7087 w (addressable) 827 7087 w (and) 1325 7087 w (nothing) 1501 7087 w (else.) 1837 7087 w (The) 2057 7087 w (code) 2231 7087 w (produced) 2443 7087 w (is) 2854 7087 w (poor,) 2942 7087 w (but) 3180 7087 w (porting) 3339 7087 w (is) 3662 7087 w (easy.) 3751 7087 w (The) 3998 7087 w (table) 4173 7087 w (can) 4392 7087 w (be) 4554 7087 w (extended) 4672 7087 w (later.) 720 7197 w cleartomark showpage saveobj restore %%EndPage: 5 5 %%Page: 6 6 /saveobj save def mark 6 pagesetup 9 /Palatino-Roman f (\255 6 \255) 2804 470 w (This) 720 830 w (pass) 916 830 w (also) 1116 830 w (rewrites) 1300 830 w (some) 1653 830 w (complex) 1889 830 w (operators) 2254 830 w (into) 2662 830 w (procedure) 2846 830 w (calls.) 3283 830 w (Examples) 3530 830 w (include) 3943 830 w (64\255bit) 4265 830 w (multiply) 4517 830 w (and) 4888 830 w (divide.) 720 940 w (In) 720 1088 w (the) 830 1088 w (same) 982 1088 w (bottom\255up) 1214 1088 w (pass) 1668 1088 w (of) 1870 1088 w (the) 1977 1088 w (tree,) 2129 1088 w (the) 2331 1088 w (nodes) 2483 1088 w (are) 2748 1088 w (labeled) 2899 1088 w (with) 3214 1088 w (a) 3424 1088 w (Sethi\255Ullman) 3496 1088 w (complexity) 4051 1088 w ([Set70].) 4524 1088 w (This) 4869 1088 w (number) 720 1198 w (is) 1064 1198 w (roughly) 1158 1198 w (the) 1506 1198 w (number) 1661 1198 w (of) 2005 1198 w (registers) 2115 1198 w (required) 2485 1198 w (to) 2858 1198 w (compile) 2968 1198 w (the) 3316 1198 w (tree) 3471 1198 w (on) 3653 1198 w (an) 3785 1198 w (ideal) 3912 1198 w (machine.) 4137 1198 w (An) 4549 1198 w (address\255) 4700 1198 w (able) 720 1308 w (node) 908 1308 w (is) 1132 1308 w (marked) 1220 1308 w (0.) 1552 1308 w (A) 1667 1308 w (function) 1761 1308 w (call) 2119 1308 w (is) 2280 1308 w (marked) 2368 1308 w (infinite.) 2700 1308 w (A) 3055 1308 w (unary) 3149 1308 w (operator) 3410 1308 w (is) 3778 1308 w (marked) 3866 1308 w (as) 4198 1308 w (the) 4306 1308 w (maximum) 4456 1308 w (of) 4890 1308 w (1) 4995 1308 w (and) 720 1418 w (the) 903 1418 w (mark) 1059 1418 w (of) 1300 1418 w (its) 1411 1418 w (subtree.) 1536 1418 w (A) 1906 1418 w (binary) 2006 1418 w (operator) 2295 1418 w (with) 2669 1418 w (equal) 2882 1418 w (marks) 3130 1418 w (on) 3408 1418 w (its) 3540 1418 w (subtrees) 3664 1418 w (is) 4026 1418 w (marked) 4120 1418 w (with) 4458 1418 w (a) 4671 1418 w (subtree) 4746 1418 w (mark) 720 1528 w (plus) 958 1528 w (1.) 1158 1528 w (A) 1277 1528 w (binary) 1375 1528 w (operator) 1662 1528 w (with) 2034 1528 w (unequal) 2245 1528 w (marks) 2597 1528 w (on) 2873 1528 w (its) 3003 1528 w (subtrees) 3126 1528 w (is) 3487 1528 w (marked) 3580 1528 w (with) 3917 1528 w (the) 4129 1528 w (maximum) 4283 1528 w (mark) 4721 1528 w (of) 4960 1528 w (its) 720 1638 w (subtrees.) 839 1638 w (The) 1242 1638 w (actual) 1417 1638 w (values) 1682 1638 w (of) 1964 1638 w (the) 2069 1638 w (marks) 2218 1638 w (are) 2490 1638 w (not) 2638 1638 w (too) 2794 1638 w (important,) 2948 1638 w (but) 3397 1638 w (the) 3555 1638 w (relative) 3704 1638 w (values) 4028 1638 w (are.) 4309 1638 w (The) 4503 1638 w (goal) 4677 1638 w (is) 4872 1638 w (to) 4960 1638 w (compile) 720 1748 w (the) 1061 1748 w (harder) 1209 1748 w (\(larger) 1499 1748 w (mark\)) 1788 1748 w (subtree) 2051 1748 w (first.) 2368 1748 w 9 /Palatino-Bold f (5.6.) 720 1973 w (Code) 902 1973 w (generation) 1140 1973 w 9 /Palatino-Roman f (Code) 720 2121 w (is) 967 2121 w (generated) 1066 2121 w (by) 1498 2121 w (recursive) 1633 2121 w (descent.) 2035 2121 w (The) 2418 2121 w (Sethi\255Ullman) 2604 2121 w (complexity) 3167 2121 w (completely) 3648 2121 w (guides) 4125 2121 w (the) 4427 2121 w (order.) 4588 2121 w (The) 4890 2121 w (addressability) 720 2231 w (defines) 1314 2231 w (the) 1632 2231 w (leaves.) 1788 2231 w (The) 2110 2231 w (only) 2290 2231 w (difficult) 2498 2231 w (part) 2845 2231 w (is) 3040 2231 w (compiling) 3134 2231 w (a) 3567 2231 w (tree) 3642 2231 w (that) 3824 2231 w (has) 4011 2231 w (two) 4176 2231 w (infinite) 4361 2231 w (\(function) 4676 2231 w (call\)) 720 2341 w (subtrees.) 922 2341 w (In) 1335 2341 w (this) 1453 2341 w (case,) 1634 2341 w (one) 1858 2341 w (subtree) 2038 2341 w (is) 2367 2341 w (compiled) 2466 2341 w (into) 2874 2341 w (the) 3067 2341 w (return) 3227 2341 w (register) 3513 2341 w (\(usually) 3850 2341 w (the) 4208 2341 w (most) 4368 2341 w (convenient) 4601 2341 w (place) 720 2451 w (for) 953 2451 w (a) 1094 2451 w (function) 1164 2451 w (call\)) 1523 2451 w (and) 1715 2451 w (then) 1892 2451 w (stored) 2094 2451 w (on) 2371 2451 w (the) 2498 2451 w (stack.) 2647 2451 w (The) 2920 2451 w (other) 3094 2451 w (subtree) 3329 2451 w (is) 3647 2451 w (compiled) 3735 2451 w (into) 4132 2451 w (the) 4314 2451 w (return) 4463 2451 w (register) 4738 2451 w (and) 720 2561 w (then) 895 2561 w (the) 1095 2561 w (operation) 1243 2561 w (is) 1652 2561 w (compiled) 1739 2561 w (with) 2135 2561 w (operands) 2341 2561 w (from) 2737 2561 w (the) 2955 2561 w (stack) 3103 2561 w (and) 3329 2561 w (the) 3504 2561 w (return) 3652 2561 w (register.) 3926 2561 w (There) 720 2709 w (is) 984 2709 w (a) 1083 2709 w (separate) 1163 2709 w (boolean) 1532 2709 w (code) 1883 2709 w (generator) 2106 2709 w (that) 2526 2709 w (compiles) 2719 2709 w (conditional) 3111 2709 w (expressions.) 3599 2709 w (This) 4146 2709 w (is) 4353 2709 w (fundamentally) 4453 2709 w (different) 720 2819 w (from) 1093 2819 w (compiling) 1316 2819 w (an) 1747 2819 w (arithmetic) 1872 2819 w (expression.) 2307 2819 w (The) 2808 2819 w (result) 2986 2819 w (of) 3241 2819 w (the) 3349 2819 w (boolean) 3501 2819 w (code) 3844 2819 w (generator) 4059 2819 w (is) 4471 2819 w (the) 4562 2819 w (position) 4714 2819 w (of) 720 2929 w (the) 838 2929 w (program) 1001 2929 w (counter) 1389 2929 w (and) 1732 2929 w (not) 1922 2929 w (an) 2092 2929 w (expression.) 2227 2929 w (The) 2738 2929 w (boolean) 2926 2929 w (code) 3280 2929 w (generator) 3506 2929 w (makes) 3929 2929 w (extensive) 4223 2929 w (use) 4635 2929 w (of) 4809 2929 w (De) 4928 2929 w (Morgan's) 720 3039 w (rule.) 1133 3039 w (The) 1369 3039 w (boolean) 1550 3039 w (code) 1897 3039 w (generator) 2116 3039 w (is) 2532 3039 w (an) 2627 3039 w (expanded) 2755 3039 w (version) 3180 3039 w (of) 3507 3039 w (that) 3618 3039 w (described) 3806 3039 w (in) 4222 3039 w (chapter) 4330 3039 w (8) 4660 3039 w (of) 4735 3039 w (Aho,) 4845 3039 w (Sethi,) 720 3149 w (and) 965 3149 w (Ullman) 1140 3149 w ([Aho87].) 1461 3149 w (There) 720 3297 w (is) 985 3297 w (a) 1085 3297 w (considerable) 1166 3297 w (amount) 1706 3297 w (of) 2052 3297 w (talk) 2168 3297 w (in) 2355 3297 w (the) 2469 3297 w (literature) 2630 3297 w (about) 3036 3297 w (automating) 3302 3297 w (this) 3800 3297 w (part) 3983 3297 w (of) 4185 3297 w (a) 4302 3297 w (compiler) 4384 3297 w (with) 4775 3297 w (a) 4995 3297 w (machine) 720 3407 w (description.) 1095 3407 w (Since) 1629 3407 w (this) 1876 3407 w (code) 2060 3407 w (generator) 2286 3407 w (is) 2709 3407 w (so) 2811 3407 w (small) 2937 3407 w (\(less) 3188 3407 w (than) 3400 3407 w (500) 3616 3407 w (lines) 3788 3407 w (of) 4010 3407 w (C\)) 4127 3407 w (and) 4258 3407 w (easy,) 4447 3407 w (it) 4683 3407 w (hardly) 4776 3407 w (seems) 720 3517 w (worth) 984 3517 w (the) 1250 3517 w (effort.) 1398 3517 w 9 /Palatino-Bold f (5.7.) 720 3742 w (Registerization) 902 3742 w 9 /Palatino-Roman f (Up) 720 3890 w (to) 868 3890 w (now,) 972 3890 w (the) 1196 3890 w (compiler) 1345 3890 w (has) 1723 3890 w (operated) 1882 3890 w (on) 2262 3890 w (syntax) 2389 3890 w (trees) 2676 3890 w (that) 2891 3890 w (are) 3073 3890 w (roughly) 3222 3890 w (equivalent) 3565 3890 w (to) 4010 3890 w (the) 4115 3890 w (original) 4265 3890 w (source) 4601 3890 w (lan\255) 4887 3890 w (guage.) 720 4000 w (The) 1032 4000 w (previous) 1206 4000 w (pass) 1582 4000 w (has) 1781 4000 w (produced) 1940 4000 w (machine) 2351 4000 w (language) 2712 4000 w (in) 3101 4000 w (an) 3203 4000 w (internal) 3324 4000 w (format.) 3658 4000 w (The) 3998 4000 w (next) 4172 4000 w (two) 4368 4000 w (passes) 4547 4000 w (oper\255) 4827 4000 w (ate) 720 4110 w (on) 862 4110 w (the) 988 4110 w (internal) 1137 4110 w (machine) 1472 4110 w (language) 1834 4110 w (structures.) 2224 4110 w (The) 2694 4110 w (purpose) 2869 4110 w (of) 3223 4110 w (the) 3328 4110 w (next) 3478 4110 w (pass) 3675 4110 w (is) 3875 4110 w (to) 3964 4110 w (reintroduce) 4069 4110 w (registers) 4559 4110 w (for) 4924 4110 w (heavily) 720 4220 w (used) 1036 4220 w (variables.) 1249 4220 w (All) 720 4368 w (of) 872 4368 w (the) 982 4368 w (variables) 1137 4368 w (that) 1528 4368 w (can) 1716 4368 w (be) 1884 4368 w (potentially) 2008 4368 w (registerized) 2471 4368 w (within) 2973 4368 w (a) 3265 4368 w (procedure) 3341 4368 w (are) 3783 4368 w (placed) 3938 4368 w (in) 4232 4368 w (a) 4341 4368 w (table.) 4417 4368 w (\(Suitable) 4688 4368 w (variables) 720 4478 w (are) 1110 4478 w (any) 1264 4478 w (automatic) 1441 4478 w (or) 1870 4478 w (external) 1986 4478 w (scalars) 2338 4478 w (that) 2635 4478 w (do) 2821 4478 w (not) 2955 4478 w (have) 3116 4478 w (their) 3336 4478 w (addresses) 3552 4478 w (extracted.) 3972 4478 w (Some) 4416 4478 w (constants) 4665 4478 w (that) 720 4588 w (are) 911 4588 w (hard) 1070 4588 w (to) 1293 4588 w (reference) 1408 4588 w (are) 1809 4588 w (also) 1968 4588 w (considered) 2162 4588 w (for) 2635 4588 w (registerization.\)) 2786 4588 w (Four) 3473 4588 w (separate) 3698 4588 w (data) 4067 4588 w (flow) 4277 4588 w (equations) 4493 4588 w (are) 4916 4588 w (evaluated) 720 4698 w (over) 1138 4698 w (the) 1344 4698 w (procedure) 1495 4698 w (on) 1932 4698 w (all) 2060 4698 w (of) 2183 4698 w (these) 2289 4698 w (variables.) 2521 4698 w (Two) 2953 4698 w (of) 3159 4698 w (the) 3265 4698 w (equations) 3416 4698 w (are) 3830 4698 w (the) 3980 4698 w (normal) 4131 4698 w (set\255behind) 4444 4698 w (and) 4888 4698 w (used\255ahead) 720 4808 w (bits) 1210 4808 w (that) 1384 4808 w (define) 1571 4808 w (the) 1850 4808 w (life) 2005 4808 w (of) 2160 4808 w (a) 2270 4808 w (variable.) 2346 4808 w (The) 2745 4808 w (two) 2926 4808 w (new) 3112 4808 w (bits) 3313 4808 w (tell) 3488 4808 w (if) 3644 4808 w (a) 3731 4808 w (variable) 3807 4808 w (life) 4160 4808 w (crosses) 4316 4808 w (a) 4630 4808 w (function) 4706 4808 w (call) 720 4918 w (ahead) 886 4918 w (or) 1155 4918 w (behind.) 1270 4918 w (By) 1623 4918 w (examining) 1757 4918 w (a) 2206 4918 w (variable) 2280 4918 w (over) 2631 4918 w (its) 2840 4918 w (lifetime,) 2963 4918 w (it) 3318 4918 w (is) 3403 4918 w (possible) 3496 4918 w (to) 3850 4918 w (get) 3959 4918 w (a) 4111 4918 w (cost) 4185 4918 w (for) 4372 4918 w (registerizing.) 4516 4918 w (Loops) 720 5028 w (are) 998 5028 w (detected) 1153 5028 w (and) 1523 5028 w (the) 1706 5028 w (costs) 1862 5028 w (are) 2089 5028 w (multiplied) 2244 5028 w (by) 2695 5028 w (three) 2827 5028 w (for) 3063 5028 w (every) 3211 5028 w (level) 3466 5028 w (of) 3687 5028 w (loop) 3799 5028 w (nesting.) 4011 5028 w (Costs) 4380 5028 w (are) 4632 5028 w (sorted) 4788 5028 w (and) 720 5138 w (the) 895 5138 w (variables) 1043 5138 w (are) 1426 5138 w (replaced) 1573 5138 w (by) 1938 5138 w (available) 2061 5138 w (registers) 2441 5138 w (on) 2804 5138 w (a) 2929 5138 w (greedy) 2997 5138 w (basis.) 3297 5138 w (The) 720 5286 w (68020) 905 5286 w (has) 1165 5286 w (two) 1335 5286 w (different) 1525 5286 w (types) 1905 5286 w (of) 2155 5286 w (registers.) 2270 5286 w (For) 2691 5286 w (the) 2862 5286 w (68020,) 3022 5286 w (two) 3305 5286 w (different) 3495 5286 w (costs) 3876 5286 w (are) 4108 5286 w (calculated) 4268 5286 w (for) 4708 5286 w (each) 4860 5286 w (variable) 720 5396 w (life) 1069 5396 w (and) 1221 5396 w (the) 1400 5396 w (register) 1552 5396 w (type) 1881 5396 w (that) 2085 5396 w (affords) 2268 5396 w (the) 2578 5396 w (better) 2729 5396 w (cost) 2987 5396 w (is) 3171 5396 w (used.) 3261 5396 w (Ties) 3523 5396 w (are) 3711 5396 w (broken) 3861 5396 w (by) 4168 5396 w (counting) 4294 5396 w (the) 4674 5396 w (num\255) 4825 5396 w (ber) 720 5506 w (of) 872 5506 w (available) 975 5506 w (registers) 1355 5506 w (of) 1718 5506 w (each) 1821 5506 w (type.) 2024 5506 w (Note) 720 5654 w (that) 943 5654 w (externals) 1125 5654 w (are) 1510 5654 w (registerized) 1659 5654 w (together) 2156 5654 w (with) 2516 5654 w (automatics.) 2725 5654 w (This) 3234 5654 w (is) 3431 5654 w (done) 3521 5654 w (by) 3747 5654 w (evaluating) 3873 5654 w (the) 4321 5654 w (semantics) 4472 5654 w (of) 4889 5654 w (a) 4995 5654 w (``call'') 720 5764 w (instruction) 981 5764 w (differently) 1439 5764 w (for) 1884 5764 w (externals) 2024 5764 w (and) 2408 5764 w (automatics.) 2584 5764 w (Since) 3091 5764 w (a) 3324 5764 w (call) 3393 5764 w (goes) 3554 5764 w (outside) 3759 5764 w (the) 4079 5764 w (local) 4228 5764 w (procedure,) 4439 5764 w (it) 4897 5764 w (is) 4976 5764 w (assumed) 720 5874 w (that) 1106 5874 w (a) 1297 5874 w (call) 1376 5874 w (references) 1548 5874 w (all) 1987 5874 w (externals.) 2119 5874 w (Similarly,) 2560 5874 w (externals) 2980 5874 w (are) 3375 5874 w (assumed) 3534 5874 w (to) 3921 5874 w (be) 4036 5874 w (set) 4164 5874 w (before) 4310 5874 w (an) 4597 5874 w (``entry'') 4729 5874 w (instruction) 720 5984 w (and) 1180 5984 w (assumed) 1358 5984 w (to) 1736 5984 w (be) 1842 5984 w (referenced) 1961 5984 w (after) 2408 5984 w (a) 2618 5984 w (``return'') 2689 5984 w (instruction.) 3066 5984 w (This) 3572 5984 w (makes) 3769 5984 w (sure) 4050 5984 w (that) 4246 5984 w (externals) 4428 5984 w (are) 4813 5984 w (in) 4962 5984 w (memory) 720 6094 w (across) 1080 6094 w (calls.) 1350 6094 w (The) 720 6242 w (overall) 916 6242 w (results) 1239 6242 w (are) 1550 6242 w (satisfactory.) 1720 6242 w (It) 2270 6242 w (would) 2377 6242 w (be) 2684 6242 w (nice) 2824 6242 w (to) 3032 6242 w (be) 3159 6242 w (able) 3299 6242 w (to) 3510 6242 w (do) 3637 6242 w (this) 3789 6242 w (processing) 3982 6242 w (in) 4456 6242 w (a) 4581 6242 w (machine\255) 4673 6242 w (independent) 720 6352 w (way,) 1254 6352 w (but) 1475 6352 w (it) 1637 6352 w (is) 1721 6352 w (impossible) 1813 6352 w (to) 2271 6352 w (get) 2379 6352 w (all) 2530 6352 w (of) 2655 6352 w (the) 2763 6352 w (costs) 2916 6352 w (and) 3140 6352 w (side) 3320 6352 w (effects) 3510 6352 w (of) 3792 6352 w (different) 3900 6352 w (choices) 4273 6352 w (by) 4590 6352 w (examin\255) 4718 6352 w (ing) 720 6462 w (the) 871 6462 w (parse) 1019 6462 w (tree.) 1258 6462 w (Most) 720 6610 w (of) 953 6610 w (the) 1062 6610 w (code) 1216 6610 w (in) 1433 6610 w (the) 1540 6610 w (registerization) 1694 6610 w (pass) 2299 6610 w (is) 2503 6610 w (machine\255independent.) 2596 6610 w (The) 3543 6610 w (major) 3723 6610 w (machine\255dependency) 3984 6610 w (is) 4868 6610 w (in) 4962 6610 w (examining) 720 6720 w (a) 1163 6720 w (machine) 1231 6720 w (instruction) 1591 6720 w (to) 2048 6720 w (ask) 2151 6720 w (if) 2307 6720 w (it) 2386 6720 w (sets) 2465 6720 w (or) 2637 6720 w (references) 2746 6720 w (a) 3173 6720 w (variable.) 3241 6720 w 9 /Palatino-Bold f (5.8.) 720 6945 w (Machine) 902 6945 w (code) 1285 6945 w (optimization) 1498 6945 w 9 /Palatino-Roman f (The) 720 7093 w (next) 894 7093 w (pass) 1090 7093 w (walks) 1289 7093 w (the) 1547 7093 w (machine) 1696 7093 w (code) 2057 7093 w (for) 2269 7093 w (opportunistic) 2409 7093 w (optimizations.) 2973 7093 w (For) 3594 7093 w (the) 3754 7093 w (most) 3903 7093 w (part,) 4124 7093 w (this) 4336 7093 w (is) 4506 7093 w (highly) 4594 7093 w (spe\255) 4875 7093 w (cific) 720 7203 w (to) 908 7203 w (a) 1014 7203 w (particular) 1085 7203 w (processor.) 1503 7203 w (One) 1960 7203 w (optimization) 2152 7203 w (that) 2691 7203 w (is) 2874 7203 w (performed) 2963 7203 w (on) 3414 7203 w (all) 3541 7203 w (of) 3663 7203 w (the) 3768 7203 w (processors) 3918 7203 w (is) 4366 7203 w (the) 4455 7203 w (removal) 4605 7203 w (of) 4960 7203 w cleartomark showpage saveobj restore %%EndPage: 6 6 %%Page: 7 7 /saveobj save def mark 7 pagesetup 9 /Palatino-Roman f (\255 7 \255) 2804 470 w (unnecessary) 720 830 w (``move'') 1236 830 w (instructions.) 1584 830 w (Ironically,) 2127 830 w (most) 2557 830 w (of) 2779 830 w (these) 2885 830 w (instructions) 3117 830 w (were) 3615 830 w (inserted) 3838 830 w (by) 4187 830 w (the) 4313 830 w (previous) 4464 830 w (pass.) 4842 830 w (There) 720 940 w (are) 982 940 w (two) 1139 940 w (patterns) 1327 940 w (that) 1688 940 w (are) 1878 940 w (repetitively) 2035 940 w (matched) 2526 940 w (and) 2903 940 w (replaced) 3088 940 w (until) 3462 940 w (no) 3682 940 w (more) 3816 940 w (matches) 4056 940 w (are) 4415 940 w (found.) 4571 940 w (The) 4890 940 w (first) 720 1050 w (tries) 903 1050 w (to) 1099 1050 w (remove) 1202 1050 w (``move'') 1527 1050 w (instructions) 1873 1050 w (by) 2368 1050 w (relabeling) 2491 1050 w (variables.) 2911 1050 w (When) 720 1205 w (a) 981 1205 w (``move'') 1050 1205 w (instruction) 1397 1205 w (is) 1855 1205 w (encountered,) 1943 1205 w (if) 2488 1205 w (the) 2568 1205 w (destination) 2717 1205 w (variable) 3188 1205 w (is) 3534 1205 w (set) 3622 1205 w (before) 3757 1205 w (the) 4033 1205 w (source) 4182 1205 w (variable) 4467 1205 w (is) 4813 1205 w (ref\255) 4901 1205 w (erenced,) 720 1315 w (then) 1082 1315 w (all) 1286 1315 w (of) 1410 1315 w (the) 1517 1315 w (references) 1669 1315 w (to) 2100 1315 w (the) 2207 1315 w (destination) 2359 1315 w (variable) 2833 1315 w (can) 3182 1315 w (be) 3346 1315 w (renamed) 3465 1315 w (to) 3844 1315 w (the) 3950 1315 w (source) 4101 1315 w (and) 4388 1315 w (the) 4566 1315 w (``move'') 4717 1315 w (can) 720 1425 w (be) 880 1425 w (deleted.) 996 1425 w (This) 1360 1425 w (transformation) 1554 1425 w (uses) 2176 1425 w (the) 2372 1425 w (reverse) 2520 1425 w (data) 2833 1425 w (flow) 3031 1425 w (set) 3235 1425 w (up) 3369 1425 w (in) 3500 1425 w (the) 3601 1425 w (previous) 3749 1425 w (pass.) 4124 1425 w (An) 720 1580 w (example) 878 1580 w (of) 1251 1580 w (this) 1367 1580 w (pattern) 1549 1580 w (is) 1875 1580 w (depicted) 1975 1580 w (in) 2357 1580 w (the) 2471 1580 w (following) 2632 1580 w (table.) 3053 1580 w (The) 3330 1580 w (pattern) 3517 1580 w (is) 3844 1580 w (in) 3945 1580 w (the) 4060 1580 w (left) 4222 1580 w (column) 4388 1580 w (and) 4726 1580 w (the) 4915 1580 w (replacement) 720 1690 w (action) 1234 1690 w (is) 1500 1690 w (in) 1587 1690 w (the) 1688 1690 w (right) 1836 1690 w (column.) 2053 1690 w 9 /Courier f (MOVE) 1042 1875 w (a\255>b) 1402 1875 w 9 /Palatino-Roman f (\(remove\)) 2482 1875 w (\(sequence) 1042 1985 w (with) 1458 1985 w (no) 1664 1985 w (mention) 1789 1985 w (of) 2144 1985 w 9 /Courier f (a) 2247 1985 w 9 /Palatino-Roman f (\)) 2301 1985 w 9 /Courier f (USE) 1042 2095 w (b) 1402 2095 w (USE) 2482 2095 w (a) 2842 2095 w 9 /Palatino-Roman f (\(sequence) 1042 2205 w (with) 1458 2205 w (no) 1664 2205 w (mention) 1789 2205 w (of) 2144 2205 w 9 /Courier f (a) 2247 2205 w 9 /Palatino-Roman f (\)) 2301 2205 w 9 /Courier f (SET) 1042 2315 w (b) 1402 2315 w (SET) 2482 2315 w (b) 2842 2315 w 9 /Palatino-Roman f (Experiments) 720 2500 w (have) 1254 2500 w (shown) 1476 2500 w (that) 1774 2500 w (it) 1962 2500 w (is) 2049 2500 w (marginally) 2144 2500 w (worthwhile) 2611 2500 w (to) 3108 2500 w (rename) 3220 2500 w (uses) 3550 2500 w (of) 3755 2500 w (the) 3867 2500 w (destination) 4024 2500 w (variable) 4503 2500 w (with) 4857 2500 w (uses) 720 2610 w (of) 916 2610 w (the) 1019 2610 w (source) 1167 2610 w (variable) 1451 2610 w (up) 1796 2610 w (to) 1927 2610 w (the) 2030 2610 w (first) 2178 2610 w (use) 2361 2610 w (of) 2519 2610 w (the) 2622 2610 w (source) 2770 2610 w (variable.) 3054 2610 w (The) 720 2765 w (second) 914 2765 w (transform) 1236 2765 w (will) 1676 2765 w (do) 1873 2765 w (relabeling) 2022 2765 w (without) 2463 2765 w (deleting) 2824 2765 w (instructions.) 3194 2765 w (When) 3757 2765 w (a) 4039 2765 w (``move'') 4129 2765 w (instruction) 4497 2765 w (is) 4976 2765 w (encountered,) 720 2875 w (if) 1265 2875 w (the) 1345 2875 w (source) 1494 2875 w (variable) 1779 2875 w (has) 2125 2875 w (been) 2284 2875 w (set) 2496 2875 w (prior) 2630 2875 w (to) 2855 2875 w (the) 2958 2875 w (use) 3106 2875 w (of) 3264 2875 w (the) 3367 2875 w (destination) 3515 2875 w (variable) 3985 2875 w (then) 4330 2875 w (all) 4530 2875 w (of) 4650 2875 w (the) 4753 2875 w (ref\255) 4901 2875 w (erences) 720 2985 w (to) 1047 2985 w (the) 1159 2985 w (source) 1316 2985 w (variable) 1609 2985 w (are) 1963 2985 w (replaced) 2119 2985 w (by) 2493 2985 w (the) 2625 2985 w (destination) 2782 2985 w (and) 3261 2985 w (the) 3445 2985 w (``move'') 3602 2985 w (is) 3957 2985 w (inverted.) 4053 2985 w (Typically,) 4467 2985 w (this) 4894 2985 w (transformation) 720 3095 w (will) 1359 3095 w (alter) 1552 3095 w (two) 1772 3095 w (``move'') 1967 3095 w (instructions) 2330 3095 w (and) 2842 3095 w (allow) 3034 3095 w (the) 3296 3095 w (first) 3461 3095 w (transformation) 3661 3095 w (another) 4300 3095 w (chance) 4648 3095 w (to) 4960 3095 w (remove) 720 3205 w (code.) 1045 3205 w (This) 1302 3205 w (transformation) 1496 3205 w (uses) 2118 3205 w (the) 2314 3205 w (forward) 2462 3205 w (data) 2812 3205 w (flow) 3010 3205 w (set) 3214 3205 w (up) 3348 3205 w (in) 3479 3205 w (the) 3580 3205 w (previous) 3728 3205 w (pass.) 4103 3205 w (Again,) 720 3360 w (the) 1020 3360 w (following) 1179 3360 w (is) 1598 3360 w (a) 1696 3360 w (depiction) 1775 3360 w (of) 2185 3360 w (the) 2299 3360 w (transformation) 2458 3360 w (where) 3091 3360 w (the) 3374 3360 w (pattern) 3533 3360 w (is) 3857 3360 w (in) 3955 3360 w (the) 4068 3360 w (left) 4228 3360 w (column) 4392 3360 w (and) 4728 3360 w (the) 4915 3360 w (rewrite) 720 3470 w (is) 1032 3470 w (in) 1119 3470 w (the) 1220 3470 w (right) 1368 3470 w (column.) 1585 3470 w 9 /Courier f (SET) 1042 3655 w (a) 1402 3655 w (SET) 2482 3655 w (b) 2842 3655 w 9 /Palatino-Roman f (\(sequence) 1042 3765 w (with) 1458 3765 w (no) 1664 3765 w (use) 1789 3765 w (of) 1947 3765 w 9 /Courier f (b) 2050 3765 w 9 /Palatino-Roman f (\)) 2104 3765 w 9 /Courier f (USE) 1042 3875 w (a) 1402 3875 w (USE) 2482 3875 w (b) 2842 3875 w 9 /Palatino-Roman f (\(sequence) 1042 3985 w (with) 1458 3985 w (no) 1664 3985 w (use) 1789 3985 w (of) 1947 3985 w 9 /Courier f (b) 2050 3985 w 9 /Palatino-Roman f (\)) 2104 3985 w 9 /Courier f (MOVE) 1042 4095 w (a\255>b) 1402 4095 w (MOVE) 2482 4095 w (b\255>a) 2842 4095 w 9 /Palatino-Roman f (Iterating) 720 4280 w (these) 1086 4280 w (transformations) 1315 4280 w (will) 1975 4280 w (usually) 2151 4280 w (get) 2467 4280 w (rid) 2613 4280 w (of) 2753 4280 w (all) 2856 4280 w (redundant) 2976 4280 w (``move'') 3421 4280 w (instructions.) 3767 4280 w (A) 720 4435 w (problem) 823 4435 w (with) 1195 4435 w (this) 1412 4435 w (organization) 1592 4435 w (is) 2133 4435 w (that) 2231 4435 w (the) 2422 4435 w (costs) 2581 4435 w (of) 2811 4435 w (registerization) 2925 4435 w (calculated) 3535 4435 w (in) 3973 4435 w (the) 4085 4435 w (previous) 4244 4435 w (pass) 4630 4435 w (must) 4839 4435 w (depend) 720 4545 w (on) 1055 4545 w (how) 1190 4545 w (well) 1400 4545 w (this) 1603 4545 w (pass) 1782 4545 w (can) 1990 4545 w (detect) 2160 4545 w (and) 2434 4545 w (remove) 2619 4545 w (redundant) 2954 4545 w (instructions.) 3409 4545 w (Often,) 3960 4545 w (a) 4241 4545 w (fine) 4318 4545 w (candidate) 4501 4545 w (for) 4924 4545 w (registerization) 720 4655 w (is) 1319 4655 w (rejected) 1406 4655 w (because) 1740 4655 w (of) 2076 4655 w (the) 2179 4655 w (cost) 2327 4655 w (of) 2508 4655 w (instructions) 2611 4655 w (that) 3106 4655 w (are) 3286 4655 w (later) 3433 4655 w (removed.) 3636 4655 w 9 /Palatino-Bold f (5.9.) 720 4903 w (Writing) 902 4903 w (the) 1245 4903 w (object) 1398 4903 w (file) 1671 4903 w 9 /Palatino-Roman f (The) 720 5058 w (last) 900 5058 w (pass) 1069 5058 w (walks) 1274 5058 w (the) 1538 5058 w (internal) 1693 5058 w (assembly) 2033 5058 w (language) 2432 5058 w (and) 2827 5058 w (writes) 3009 5058 w (the) 3287 5058 w (object) 3442 5058 w (file.) 3706 5058 w (The) 3908 5058 w (object) 4089 5058 w (file) 4354 5058 w (is) 4510 5058 w (reduced) 4605 5058 w (in) 4962 5058 w (size) 720 5168 w (by) 897 5168 w (about) 1022 5168 w (a) 1276 5168 w (factor) 1346 5168 w (of) 1601 5168 w (three) 1705 5168 w (with) 1933 5168 w (simple) 2140 5168 w (compression) 2430 5168 w (techniques.) 2960 5168 w (The) 3458 5168 w (most) 3632 5168 w (important) 3853 5168 w (aspect) 4279 5168 w (of) 4553 5168 w (the) 4657 5168 w (object) 4806 5168 w (file) 720 5278 w (format) 869 5278 w (is) 1163 5278 w (that) 1251 5278 w (it) 1432 5278 w (is) 1512 5278 w (independent) 1600 5278 w (of) 2129 5278 w (the) 2233 5278 w (compiling) 2382 5278 w (machine.) 2809 5278 w (All) 3216 5278 w (integer) 3362 5278 w (and) 3666 5278 w (floating) 3842 5278 w (numbers) 4176 5278 w (in) 4553 5278 w (the) 4656 5278 w (object) 4806 5278 w (code) 720 5388 w (are) 931 5388 w (converted) 1078 5388 w (to) 1501 5388 w (known) 1604 5388 w (formats) 1906 5388 w (and) 2237 5388 w (byte) 2412 5388 w (orders.) 2608 5388 w 9 /Palatino-Bold f (6.) 720 5636 w (The) 834 5636 w (loader) 1017 5636 w 9 /Palatino-Roman f (The) 720 5791 w (loader) 910 5791 w (is) 1205 5791 w (a) 1310 5791 w (multiple) 1396 5791 w (pass) 1775 5791 w (program) 1991 5791 w (that) 2382 5791 w (reads) 2580 5791 w (object) 2838 5791 w (files) 3113 5791 w (and) 3317 5791 w (libraries) 3510 5791 w (and) 3877 5791 w (produces) 4070 5791 w (an) 4481 5791 w (executable) 4619 5791 w (binary.) 720 5901 w (The) 1051 5901 w (loader) 1227 5901 w (also) 1508 5901 w (does) 1693 5901 w (some) 1905 5901 w (minimal) 2141 5901 w (optimizations) 2500 5901 w (and) 3077 5901 w (code) 3255 5901 w (rewriting.) 3469 5901 w (Many) 3915 5901 w (of) 4173 5901 w (the) 4278 5901 w (operations) 4428 5901 w (per\255) 4877 5901 w (formed) 720 6011 w (by) 1036 6011 w (the) 1159 6011 w (loader) 1307 6011 w (are) 1585 6011 w (machine\255dependent.) 1732 6011 w (The) 720 6166 w (first) 902 6166 w (pass) 1094 6166 w (of) 1301 6166 w (the) 1413 6166 w (loader) 1570 6166 w (reads) 1857 6166 w (the) 2106 6166 w (object) 2263 6166 w (modules) 2529 6166 w (into) 2906 6166 w (an) 3096 6166 w (internal) 3225 6166 w (data) 3567 6166 w (structure) 3774 6166 w (that) 4167 6166 w (looks) 4356 6166 w (like) 4603 6166 w (binary) 4781 6166 w (assembly) 720 6276 w (language.) 1114 6276 w (As) 1550 6276 w (the) 1683 6276 w (instructions) 1832 6276 w (are) 2328 6276 w (read,) 2476 6276 w (code) 2702 6276 w (is) 2914 6276 w (reordered) 3002 6276 w (to) 3423 6276 w (remove) 3527 6276 w (unconditional) 3853 6276 w (branch) 4435 6276 w (instruc\255) 4734 6276 w (tions.) 720 6386 w (Conditional) 988 6386 w (branch) 1490 6386 w (instructions) 1791 6386 w (are) 2289 6386 w (inverted) 2439 6386 w (to) 2801 6386 w (prevent) 2907 6386 w (the) 3242 6386 w (insertion) 3393 6386 w (of) 3772 6386 w (unconditional) 3878 6386 w (branches.) 4462 6386 w (The) 4890 6386 w (loader) 720 6496 w (will) 998 6496 w (also) 1174 6496 w (make) 1356 6496 w (a) 1596 6496 w (copy) 1664 6496 w (of) 1881 6496 w (a) 1984 6496 w (few) 2052 6496 w (instructions) 2223 6496 w (to) 2718 6496 w (remove) 2821 6496 w (an) 3146 6496 w (unconditional) 3266 6496 w (branch.) 3847 6496 w (The) 720 6651 w (next) 899 6651 w (pass) 1100 6651 w (allocates) 1304 6651 w (addresses) 1676 6651 w (for) 2096 6651 w (all) 2241 6651 w (external) 2367 6651 w (data.) 2719 6651 w (Typical) 2970 6651 w (of) 3296 6651 w (processors) 3406 6651 w (is) 3859 6651 w (the) 3953 6651 w (MIPS,) 4108 6651 w (which) 4380 6651 w (can) 4655 6651 w (refer\255) 4822 6651 w (ence) 720 6761 w (\26132K) 938 6761 w (bytes) 1189 6761 w (from) 1440 6761 w (a) 1675 6761 w (register.) 1760 6761 w (The) 2148 6761 w (loader) 2338 6761 w (allocates) 2633 6761 w (the) 3016 6761 w (register) 3180 6761 w 9 /Courier f (R30) 3521 6761 w 9 /Palatino-Roman f (as) 3722 6761 w (the) 3844 6761 w (static) 4008 6761 w (pointer.) 4256 6761 w (The) 4632 6761 w (value) 4821 6761 w (placed) 720 6871 w (in) 1008 6871 w 9 /Courier f (R30) 1111 6871 w 9 /Palatino-Roman f (is) 1298 6871 w (the) 1387 6871 w (base) 1537 6871 w (of) 1738 6871 w (the) 1843 6871 w (data) 1993 6871 w (segment) 2194 6871 w (plus) 2555 6871 w (32K.) 2753 6871 w (It) 2981 6871 w (is) 3068 6871 w (then) 3158 6871 w (cheap) 3361 6871 w (to) 3621 6871 w (reference) 3727 6871 w (all) 4119 6871 w (data) 4242 6871 w (in) 4443 6871 w (the) 4547 6871 w (first) 4698 6871 w (64K) 4884 6871 w (of) 720 6981 w (the) 831 6981 w (data) 987 6981 w (segment.) 1193 6981 w (External) 1605 6981 w (variables) 1970 6981 w (are) 2361 6981 w (allocated) 2516 6981 w (to) 2907 6981 w (the) 3018 6981 w (data) 3174 6981 w (segment) 3380 6981 w (with) 3746 6981 w (the) 3960 6981 w (smallest) 4116 6981 w (variables) 4472 6981 w (allo\255) 4863 6981 w (cated) 720 7091 w (first.) 961 7091 w (If) 1195 7091 w (all) 1284 7091 w (of) 1409 7091 w (the) 1517 7091 w (data) 1670 7091 w (cannot) 1873 7091 w (fit) 2170 7091 w (into) 2285 7091 w (the) 2472 7091 w (first) 2626 7091 w (64K) 2815 7091 w (of) 3000 7091 w (the) 3109 7091 w (data) 3263 7091 w (segment,) 3467 7091 w (then) 3854 7091 w (usually) 4060 7091 w (only) 4382 7091 w (a) 4589 7091 w (few) 4663 7091 w (large) 4840 7091 w (arrays) 720 7201 w (need) 993 7201 w (more) 1209 7201 w (expensive) 1440 7201 w (addressing) 1860 7201 w (modes.) 2321 7201 w cleartomark showpage saveobj restore %%EndPage: 7 7 %%Page: 8 8 /saveobj save def mark 8 pagesetup 9 /Palatino-Roman f (\255 8 \255) 2804 470 w (For) 720 830 w (the) 881 830 w (MIPS) 1032 830 w (processor,) 1277 830 w (the) 1711 830 w (loader) 1862 830 w (makes) 2143 830 w (a) 2424 830 w (pass) 2495 830 w (over) 2696 830 w (the) 2902 830 w (internal) 3053 830 w (structures,) 3389 830 w (exchanging) 3837 830 w (instructions) 4320 830 w (to) 4818 830 w (try) 4924 830 w (to) 720 940 w (fill) 828 940 w (``delay) 964 940 w (slots'') 1261 940 w (with) 1521 940 w (useful) 1732 940 w (work.) 2005 940 w (If) 2290 940 w (a) 2379 940 w (useful) 2452 940 w (instruction) 2725 940 w (cannot) 3187 940 w (be) 3484 940 w (found) 3605 940 w (to) 3874 940 w (fill) 3982 940 w (a) 4118 940 w (delay) 4191 940 w (slot,) 4438 940 w (the) 4633 940 w (loader) 4785 940 w (will) 720 1050 w (insert) 901 1050 w (``noop'') 1154 1050 w (instructions.) 1488 1050 w (This) 2034 1050 w (pass) 2233 1050 w (is) 2436 1050 w (very) 2528 1050 w (expensive) 2736 1050 w (and) 3161 1050 w (does) 3342 1050 w (not) 3557 1050 w (do) 3718 1050 w (a) 3852 1050 w (good) 3926 1050 w (job.) 4160 1050 w (About) 4356 1050 w (40%) 4639 1050 w (of) 4834 1050 w (all) 4943 1050 w (instructions) 720 1160 w (are) 1234 1160 w (in) 1400 1160 w (delay) 1520 1160 w (slots.) 1781 1160 w (About) 2051 1160 w (65%) 2347 1160 w (of) 2555 1160 w (these) 2677 1160 w (are) 2925 1160 w (useful) 3091 1160 w (instructions) 3378 1160 w (and) 3892 1160 w (35%) 4086 1160 w (are) 4294 1160 w (``noops.'') 4459 1160 w (The) 4890 1160 w (vendor\255supplied) 720 1270 w (assembler) 1419 1270 w (does) 1850 1270 w (this) 2069 1270 w (job) 2248 1270 w (more) 2402 1270 w (effectively,) 2643 1270 w (filling) 3111 1270 w (about) 3380 1270 w (80%) 3642 1270 w (of) 3841 1270 w (the) 3954 1270 w (delay) 4112 1270 w (slots) 4364 1270 w (with) 4579 1270 w (useful) 4795 1270 w (instructions.) 720 1380 w (On) 720 1531 w (the) 868 1531 w (68020) 1018 1531 w (processor,) 1269 1531 w (branch) 1703 1531 w (instructions) 2004 1531 w (come) 2502 1531 w (in) 2740 1531 w (a) 2844 1531 w (variety) 2915 1531 w (of) 3222 1531 w (sizes) 3328 1531 w (depending) 3544 1531 w (on) 4000 1531 w (the) 4128 1531 w (relative) 4279 1531 w (distance) 4605 1531 w (of) 4960 1531 w (the) 720 1641 w (branch.) 879 1641 w (Thus) 1234 1641 w (the) 1467 1641 w (size) 1626 1641 w (of) 1812 1641 w (branch) 1926 1641 w (instructions) 2235 1641 w (can) 2741 1641 w (be) 2912 1641 w (mutually) 3039 1641 w (dependent.) 3437 1641 w (The) 3944 1641 w (loader) 4128 1641 w (uses) 4417 1641 w (a) 4624 1641 w (multiple) 4702 1641 w (pass) 720 1751 w (algorithm) 929 1751 w (to) 1357 1751 w (resolve) 1471 1751 w (the) 1792 1751 w (branch) 1951 1751 w (lengths) 2260 1751 w ([Szy78].) 2585 1751 w (Initially,) 2958 1751 w (all) 3327 1751 w (branches) 3459 1751 w (are) 3850 1751 w (assumed) 4009 1751 w (minimal) 4396 1751 w (length.) 4764 1751 w (On) 720 1861 w (each) 876 1861 w (subsequent) 1089 1861 w (pass,) 1574 1861 w (the) 1805 1861 w (branches) 1963 1861 w (are) 2352 1861 w (reassessed) 2509 1861 w (and) 2959 1861 w (expanded) 3144 1861 w (if) 3571 1861 w (necessary.) 3660 1861 w (When) 4124 1861 w (no) 4394 1861 w (more) 4529 1861 w (expan\255) 4769 1861 w (sions) 720 1971 w (occur,) 947 1971 w (the) 1213 1971 w (locations) 1361 1971 w (of) 1741 1971 w (the) 1844 1971 w (instructions) 1992 1971 w (in) 2487 1971 w (the) 2588 1971 w (text) 2736 1971 w (segment) 2909 1971 w (are) 3267 1971 w (known.) 3414 1971 w (On) 720 2122 w (the) 870 2122 w (MIPS) 1022 2122 w (processor,) 1268 2122 w (all) 1703 2122 w (instructions) 1827 2122 w (are) 2326 2122 w (one) 2477 2122 w (size.) 2649 2122 w (A) 2874 2122 w (single) 2972 2122 w (pass) 3235 2122 w (over) 3438 2122 w (the) 3646 2122 w (instructions) 3799 2122 w (will) 4299 2122 w (determine) 4480 2122 w (the) 4915 2122 w (locations) 720 2232 w (of) 1100 2232 w (all) 1203 2232 w (addresses) 1323 2232 w (in) 1737 2232 w (the) 1838 2232 w (text) 1986 2232 w (segment.) 2159 2232 w (The) 720 2383 w (last) 894 2383 w (pass) 1057 2383 w (of) 1256 2383 w (the) 1360 2383 w (loader) 1509 2383 w (produces) 1788 2383 w (the) 2182 2383 w (executable) 2331 2383 w (binary.) 2776 2383 w (A) 3105 2383 w (symbol) 3199 2383 w (table) 3516 2383 w (and) 3734 2383 w (other) 3910 2383 w (tables) 4145 2383 w (are) 4401 2383 w (produced) 4549 2383 w (to) 4960 2383 w (help) 720 2493 w (the) 918 2493 w (debugger) 1066 2493 w (to) 1470 2493 w (interpret) 1573 2493 w (the) 1946 2493 w (binary) 2094 2493 w (symbolically.) 2376 2493 w (The) 720 2644 w (loader) 895 2644 w (places) 1175 2644 w (absolute) 1446 2644 w (source) 1808 2644 w (line) 2095 2644 w (numbers) 2268 2644 w (in) 2646 2644 w (the) 2750 2644 w (symbol) 2901 2644 w (table.) 3220 2644 w (The) 3486 2644 w (name) 3662 2644 w (and) 3907 2644 w (absolute) 4085 2644 w (line) 4447 2644 w (number) 4620 2644 w (of) 4960 2644 w (all) 720 2754 w 9 /Courier f (#include) 855 2754 w 9 /Palatino-Roman f (files) 1325 2754 w (is) 1526 2754 w (also) 1627 2754 w (placed) 1823 2754 w (in) 2123 2754 w (the) 2238 2754 w (symbol) 2400 2754 w (table) 2730 2754 w (so) 2961 2754 w (that) 3086 2754 w (the) 3280 2754 w (debuggers) 3442 2754 w (can) 3898 2754 w (associate) 4072 2754 w (object) 4464 2754 w (code) 4735 2754 w (to) 4960 2754 w (source) 720 2864 w (files.) 1004 2864 w 9 /Palatino-Bold f (7.) 720 3100 w (Performance) 834 3100 w 9 /Palatino-Roman f (The) 720 3251 w (following) 893 3251 w (is) 1301 3251 w (a) 1388 3251 w (table) 1456 3251 w (of) 1673 3251 w (the) 1776 3251 w (source) 1924 3251 w (size) 2208 3251 w (of) 2383 3251 w (the) 2486 3251 w (MIPS) 2634 3251 w (compiler.) 2876 3251 w (lines) 1042 3430 w (module) 1402 3430 w (509) 1087 3540 w (machine\255independent) 1402 3540 w (headers) 2297 3540 w (1070) 1042 3650 w (machine\255independent) 1402 3650 w (YACC) 2297 3650 w (source) 2578 3650 w (6090) 1042 3760 w (machine\255independent) 1402 3760 w (C) 2297 3760 w (source) 2384 3760 w (545) 1087 3980 w (machine\255dependent) 1402 3980 w (headers) 2219 3980 w (6532) 1042 4090 w (machine\255dependent) 1402 4090 w (C) 2219 4090 w (source) 2306 4090 w (298) 1087 4310 w (loader) 1402 4310 w (headers) 1680 4310 w (5215) 1042 4420 w (loader) 1402 4420 w (C) 1680 4420 w (source) 1767 4420 w (The) 720 4599 w (following) 895 4599 w (table) 1305 4599 w (shows) 1524 4599 w (timing) 1802 4599 w (of) 2090 4599 w (a) 2195 4599 w (test) 2265 4599 w (program) 2431 4599 w (that) 2806 4599 w (plays) 2989 4599 w (checkers,) 3228 4599 w (running) 3619 4599 w (on) 3967 4599 w (a) 4095 4599 w (MIPS) 4166 4599 w (R4000.) 4411 4599 w (The) 4723 4599 w (test) 4899 4599 w (program) 720 4709 w (is) 1103 4709 w (26) 1200 4709 w (files) 1323 4709 w (totaling) 1519 4709 w (12600) 1861 4709 w (lines) 2118 4709 w (of) 2335 4709 w (C.) 2447 4709 w (The) 2589 4709 w (execution) 2771 4709 w (time) 3188 4709 w (does) 3398 4709 w (not) 3616 4709 w (significantly) 3780 4709 w (depend) 4303 4709 w (on) 4637 4709 w (library) 4771 4709 w (implementation.) 720 4819 w (Since) 1427 4819 w (no) 1662 4819 w (other) 1790 4819 w (compiler) 2027 4819 w (runs) 2407 4819 w (on) 2613 4819 w (Plan) 2741 4819 w (9,) 2944 4819 w (the) 3038 4819 w (Plan) 3189 4819 w (9) 3392 4819 w (tests) 3463 4819 w (were) 3668 4819 w (done) 3891 4819 w (with) 4117 4819 w (the) 4326 4819 w (Plan) 4477 4819 w (9) 4680 4819 w (operat\255) 4752 4819 w (ing) 720 4929 w (system;) 872 4929 w (the) 1197 4929 w (other) 1346 4929 w (tests) 1580 4929 w (were) 1782 4929 w (done) 2002 4929 w (on) 2225 4929 w (the) 2350 4929 w (vendor's) 2498 4929 w (operating) 2871 4929 w (system.) 3280 4929 w (The) 3627 4929 w (hardware) 3800 4929 w (was) 4210 4929 w (identical) 4391 4929 w (in) 4757 4929 w (both) 4858 4929 w (cases.) 720 5039 w (The) 993 5039 w (optimizer) 1166 5039 w (in) 1578 5039 w (the) 1679 5039 w (vendor's) 1827 5039 w (compiler) 2200 5039 w (is) 2577 5039 w (reputed) 2664 5039 w (to) 3002 5039 w (be) 3105 5039 w (extremely) 3221 5039 w (good.) 3641 5039 w (4.49s) 1132 5218 w (Plan) 1618 5218 w (9) 1818 5218 w 9 /Courier f (vc) 1886 5218 w (\255N) 2017 5218 w 9 /Palatino-Roman f (compile) 2148 5218 w (time) 2489 5218 w (\(opposite) 2690 5218 w (of) 3088 5218 w 9 /Courier f (\255O) 3191 5218 w 9 /Palatino-Roman f (\)) 3299 5218 w (1.72s) 1132 5328 w (Plan) 1618 5328 w (9) 1818 5328 w 9 /Courier f (vc) 1886 5328 w (\255N) 2017 5328 w 9 /Palatino-Roman f (load) 2148 5328 w (time) 2347 5328 w (148.69s) 1042 5438 w (Plan) 1618 5438 w (9) 1818 5438 w 9 /Courier f (vc) 1886 5438 w (\255N) 2017 5438 w 9 /Palatino-Roman f (run) 2148 5438 w (time) 2313 5438 w (15.07s) 1087 5658 w (Plan) 1618 5658 w (9) 1818 5658 w 9 /Courier f (vc) 1886 5658 w 9 /Palatino-Roman f (compile) 2017 5658 w (time) 2358 5658 w (\() 2559 5658 w 9 /Courier f (\255O) 2589 5658 w 9 /Palatino-Roman f (implicit\)) 2720 5658 w (1.66s) 1132 5768 w (Plan) 1618 5768 w (9) 1818 5768 w 9 /Courier f (vc) 1886 5768 w 9 /Palatino-Roman f (load) 2017 5768 w (time) 2216 5768 w (89.96s) 1087 5878 w (Plan) 1618 5878 w (9) 1818 5878 w 9 /Courier f (vc) 1886 5878 w 9 /Palatino-Roman f (run) 2017 5878 w (time) 2182 5878 w (14.83s) 1087 6098 w (vendor) 1618 6098 w 9 /Courier f (cc) 1928 6098 w 9 /Palatino-Roman f (compile) 2059 6098 w (time) 2400 6098 w (0.38s) 1132 6208 w (vendor) 1618 6208 w 9 /Courier f (cc) 1928 6208 w 9 /Palatino-Roman f (load) 2059 6208 w (time) 2258 6208 w (104.75s) 1042 6318 w (vendor) 1618 6318 w 9 /Courier f (cc) 1928 6318 w 9 /Palatino-Roman f (run) 2059 6318 w (time) 2224 6318 w (43.59s) 1087 6538 w (vendor) 1618 6538 w 9 /Courier f (cc) 1928 6538 w (\255O) 2059 6538 w 9 /Palatino-Roman f (compile) 2190 6538 w (time) 2531 6538 w (0.38s) 1132 6648 w (vendor) 1618 6648 w 9 /Courier f (cc) 1928 6648 w (\255O) 2059 6648 w 9 /Palatino-Roman f (load) 2190 6648 w (time) 2389 6648 w (76.19s) 1087 6758 w (vendor) 1618 6758 w 9 /Courier f (cc) 1928 6758 w (\255O) 2059 6758 w 9 /Palatino-Roman f (run) 2190 6758 w (time) 2355 6758 w (8.19s) 1132 6978 w (vendor) 1618 6978 w 9 /Courier f (cc) 1928 6978 w (\255O3) 2059 6978 w 9 /Palatino-Roman f (compile) 2244 6978 w (time) 2585 6978 w (35.97s) 1087 7088 w (vendor) 1618 7088 w 9 /Courier f (cc) 1928 7088 w (\255O3) 2059 7088 w 9 /Palatino-Roman f (load) 2244 7088 w (time) 2443 7088 w (71.16s) 1087 7198 w (vendor) 1618 7198 w 9 /Courier f (cc) 1928 7198 w (\255O3) 2059 7198 w 9 /Palatino-Roman f (run) 2244 7198 w (time) 2409 7198 w cleartomark showpage saveobj restore %%EndPage: 8 8 %%Page: 9 9 /saveobj save def mark 9 pagesetup 9 /Palatino-Roman f (\255 9 \255) 2804 470 w (To) 720 830 w (compare) 855 830 w (the) 1232 830 w (Intel) 1387 830 w (compiler,) 1599 830 w (a) 2006 830 w (program) 2081 830 w (that) 2461 830 w (is) 2648 830 w (about) 2742 830 w (40%) 3001 830 w (bit) 3198 830 w (manipulation) 3335 830 w (and) 3905 830 w (about) 4088 830 w (60%) 4348 830 w (single) 4545 830 w (preci\255) 4811 830 w (sion) 720 940 w (floating) 910 940 w (point) 1243 940 w (was) 1479 940 w (run) 1661 940 w (on) 1827 940 w (the) 1953 940 w (same) 2102 940 w (33) 2331 940 w (MHz) 2444 940 w (486,) 2673 940 w (once) 2854 940 w (under) 3062 940 w (Windows) 3325 940 w (compiled) 3734 940 w (with) 4130 940 w (the) 4336 940 w (Watcom) 4484 940 w (com\255) 4841 940 w (piler,) 720 1050 w (version) 955 1050 w (10.0,) 1278 1050 w (in) 1486 1050 w (16\255bit) 1591 1050 w (mode) 1844 1050 w (and) 2098 1050 w (once) 2277 1050 w (under) 2489 1050 w (Plan) 2756 1050 w (9) 2960 1050 w (in) 3032 1050 w (32\255bit) 3137 1050 w (mode.) 3390 1050 w (The) 3690 1050 w (Plan) 3867 1050 w (9) 4072 1050 w (execution) 4145 1050 w (time) 4558 1050 w (was) 4764 1050 w (27) 4950 1050 w (sec) 720 1160 w (while) 864 1160 w (the) 1109 1160 w (Windows) 1257 1160 w (execution) 1666 1160 w (time) 2074 1160 w (was) 2275 1160 w (31) 2456 1160 w (sec.) 2569 1160 w 9 /Palatino-Bold f (8.) 720 1380 w (Conclusions) 834 1380 w 9 /Palatino-Roman f (The) 720 1526 w (new) 898 1526 w (compilers) 1096 1526 w (compile) 1516 1526 w (quickly,) 1862 1526 w (load) 2209 1526 w (slowly,) 2413 1526 w (and) 2729 1526 w (produce) 2909 1526 w (medium) 3269 1526 w (quality) 3633 1526 w (object) 3943 1526 w (code.) 4206 1526 w (The) 4469 1526 w (compilers) 4648 1526 w (are) 720 1636 w (relatively) 878 1636 w (portable,) 1288 1636 w (requiring) 1678 1636 w (but) 2084 1636 w (a) 2251 1636 w (couple) 2329 1636 w (of) 2629 1636 w (weeks') 2742 1636 w (work) 3049 1636 w (to) 3293 1636 w (produce) 3406 1636 w (a) 3771 1636 w (compiler) 3849 1636 w (for) 4236 1636 w (a) 4385 1636 w (different) 4463 1636 w (com\255) 4841 1636 w (puter.) 720 1746 w (For) 1017 1746 w (Plan) 1187 1746 w (9,) 1398 1746 w (where) 1500 1746 w (we) 1783 1746 w (needed) 1935 1746 w (several) 2260 1746 w (compilers) 2576 1746 w (with) 3003 1746 w (specialized) 3221 1746 w (features) 3697 1746 w (and) 4051 1746 w (our) 4238 1746 w (own) 4413 1746 w (object) 4625 1746 w (for\255) 4894 1746 w (mats,) 720 1856 w (this) 963 1856 w (project) 1137 1856 w (was) 1439 1856 w (indispensable.) 1625 1856 w (It) 2247 1856 w (is) 2335 1856 w (also) 2426 1856 w (necessary) 2612 1856 w (for) 3024 1856 w (us) 3167 1856 w (to) 3286 1856 w (be) 3393 1856 w (able) 3513 1856 w (to) 3704 1856 w (freely) 3811 1856 w (distribute) 4066 1856 w (our) 4481 1856 w (compilers) 4648 1856 w (with) 720 1966 w (the) 926 1966 w (Plan) 1074 1966 w (9) 1274 1966 w (distribution.) 1342 1966 w (Two) 720 2112 w (problems) 927 2112 w (have) 1330 2112 w (come) 1548 2112 w (up) 1787 2112 w (in) 1922 2112 w (retrospect.) 2027 2112 w (The) 2500 2112 w (first) 2677 2112 w (has) 2864 2112 w (to) 3026 2112 w (do) 3133 2112 w (with) 3265 2112 w (the) 3475 2112 w (division) 3627 2112 w (of) 3979 2112 w (labor) 4087 2112 w (between) 4322 2112 w (compiler) 4686 2112 w (and) 720 2222 w (loader.) 901 2222 w (Plan) 1231 2222 w (9) 1437 2222 w (runs) 1511 2222 w (on) 1720 2222 w (multi\255processors) 1851 2222 w (and) 2547 2222 w (as) 2727 2222 w (such) 2838 2222 w (compilations) 3050 2222 w (are) 3594 2222 w (often) 3746 2222 w (done) 3979 2222 w (in) 4207 2222 w (parallel.) 4313 2222 w (Unfortu\255) 4688 2222 w (nately,) 720 2332 w (all) 1014 2332 w (compilations) 1136 2332 w (must) 1677 2332 w (be) 1903 2332 w (complete) 2021 2332 w (before) 2411 2332 w (loading) 2689 2332 w (can) 3019 2332 w (begin.) 3182 2332 w (The) 3475 2332 w (load) 3651 2332 w (is) 3853 2332 w (then) 3943 2332 w (single\255threaded.) 4146 2332 w (With) 4842 2332 w (this) 720 2442 w (model,) 892 2442 w (any) 1194 2442 w (shift) 1367 2442 w (of) 1569 2442 w (work) 1675 2442 w (from) 1912 2442 w (compile) 2133 2442 w (to) 2477 2442 w (load) 2583 2442 w (results) 2785 2442 w (in) 3076 2442 w (a) 3180 2442 w (significant) 3251 2442 w (increase) 3692 2442 w (in) 4041 2442 w (real) 4145 2442 w (time.) 4321 2442 w (The) 4571 2442 w (same) 4746 2442 w (is) 4976 2442 w (true) 720 2552 w (of) 911 2552 w (libraries) 1019 2552 w (that) 1373 2552 w (are) 1558 2552 w (compiled) 1710 2552 w (infrequently) 2111 2552 w (and) 2631 2552 w (loaded) 2811 2552 w (often.) 3113 2552 w (In) 3392 2552 w (the) 3503 2552 w (future,) 3656 2552 w (we) 3954 2552 w (may) 4100 2552 w (try) 4302 2552 w (to) 4446 2552 w (put) 4554 2552 w (some) 4721 2552 w (of) 4960 2552 w (the) 720 2662 w (loader) 868 2662 w (work) 1146 2662 w (back) 1380 2662 w (into) 1588 2662 w (the) 1769 2662 w (compiler.) 1917 2662 w (The) 720 2808 w (second) 895 2808 w (problem) 1198 2808 w (comes) 1561 2808 w (from) 1836 2808 w (the) 2056 2808 w (various) 2206 2808 w (optimizations) 2532 2808 w (performed) 3109 2808 w (over) 3561 2808 w (several) 3767 2808 w (passes.) 4075 2808 w (Often) 4403 2808 w (optimiza\255) 4655 2808 w (tions) 720 2918 w (in) 949 2918 w (different) 1060 2918 w (passes) 1437 2918 w (depend) 1725 2918 w (on) 2059 2918 w (each) 2193 2918 w (other.) 2405 2918 w (Iterating) 2694 2918 w (the) 3069 2918 w (passes) 3226 2918 w (could) 3514 2918 w (compromise) 3771 2918 w (efficiency,) 4298 2918 w (or) 4733 2918 w (even) 4851 2918 w (loop.) 720 3028 w (We) 969 3028 w (see) 1125 3028 w (no) 1272 3028 w (real) 1397 3028 w (solution) 1570 3028 w (to) 1919 3028 w (this) 2022 3028 w (problem.) 2191 3028 w 9 /Palatino-Bold f (9.) 720 3248 w (References) 834 3248 w 9 /Palatino-Roman f ([Aho87]) 720 3394 w (A.) 1068 3394 w (V.) 1187 3394 w (Aho,) 1301 3394 w (R.) 1522 3394 w (Sethi,) 1631 3394 w (and) 1879 3394 w (J.) 2057 3394 w (D.) 2136 3394 w (Ullman,) 2255 3394 w 9 /Palatino-Italic f (Compilers) 2603 3394 w 9 /LucidaSansUnicode20 f (\023) 3000 3394 w 9 /Palatino-Italic f (Principles,) 3072 3394 w (Techniques,) 3489 3394 w (and) 3947 3394 w (Tools,) 4109 3394 w 9 /Palatino-Roman f (Addison) 4354 3394 w (Wesley,) 4727 3394 w (Reading,) 720 3504 w (MA,) 1097 3504 w (1987.) 1299 3504 w ([ANSI90]) 720 3650 w 9 /Palatino-Italic f (American) 1124 3650 w (National) 1511 3650 w (Standard) 1861 3650 w (for) 2226 3650 w (Information) 2356 3650 w (Systems) 2821 3650 w 9 /LucidaSansUnicode20 f (\023) 3152 3650 w 9 /Palatino-Italic f (Programming) 3228 3650 w (Language) 3769 3650 w (C) 4155 3650 w 9 /Palatino-Roman f (,) 4215 3650 w (American) 4269 3650 w (National) 4691 3650 w (Standards) 720 3760 w (Institute,) 1147 3760 w (Inc.,) 1527 3760 w (New) 1719 3760 w (York,) 1935 3760 w (1990.) 2177 3760 w ([Dav91]) 720 3906 w (J.) 1058 3906 w (W.) 1134 3906 w (Davidson) 1270 3906 w (and) 1679 3906 w (D.) 1854 3906 w (B.) 1969 3906 w (Whalley,) 2070 3906 w (``Methods) 2449 3906 w (for) 2877 3906 w (Saving) 3017 3906 w (and) 3313 3906 w (Restoring) 3489 3906 w (Register) 3898 3906 w (Values) 4248 3906 w (across) 4543 3906 w (Func\255) 4814 3906 w (tion) 720 4016 w (Calls'',) 901 4016 w 9 /Palatino-Italic f (Software) 1196 4016 w 9 /LucidaSansUnicode20 f (\023) 1516 4016 w 9 /Palatino-Italic f (Practice) 1561 4016 w (and) 1878 4016 w (Experience,) 2036 4016 w 9 /Palatino-Roman f (Vol) 2479 4016 w (21\(2\),) 2643 4016 w (pp.) 2884 4016 w (149\255165,) 3038 4016 w (February) 3384 4016 w (1991.) 3771 4016 w ([Joh79]) 720 4162 w (S.) 1029 4162 w (C.) 1127 4162 w (Johnson,) 1241 4162 w (``YACC) 1615 4162 w 9 /LucidaSansUnicode20 f (\023) 1950 4162 w 9 /Palatino-Roman f (Yet) 2022 4162 w (Another) 2182 4162 w (Compiler) 2542 4162 w (Compiler'',) 2947 4162 w 9 /Palatino-Italic f (UNIX) 3425 4162 w (Programmer's) 3687 4162 w (Manual,) 4235 4162 w (Seventh) 4576 4162 w (Ed.,) 4894 4162 w (Vol.) 720 4272 w (2A,) 896 4272 w 9 /Palatino-Roman f (AT&T) 1052 4272 w (Bell) 1325 4272 w (Laboratories,) 1498 4272 w (Murray) 2048 4272 w (Hill,) 2378 4272 w (NJ,) 2577 4272 w (1979.) 2728 4272 w ([Set70]) 720 4418 w (R.) 1019 4418 w (Sethi) 1130 4418 w (and) 1357 4418 w (J.) 1537 4418 w (D.) 1618 4418 w (Ullman,) 1738 4418 w (``The) 2087 4418 w (Generation) 2315 4418 w (of) 2788 4418 w (Optimal) 2896 4418 w (Code) 3255 4418 w (for) 3495 4418 w (Arithmetic) 3639 4418 w (Expressions'',) 4099 4418 w 9 /Palatino-Italic f (Journal) 4677 4418 w (of) 4975 4418 w (the) 720 4528 w (ACM,) 853 4528 w 9 /Palatino-Roman f (Vol) 1109 4528 w (17\(4\),) 1273 4528 w (pp.) 1514 4528 w (715\255728,) 1668 4528 w (1970.) 2014 4528 w ([Szy78]) 720 4674 w (T.) 1041 4674 w (G.) 1147 4674 w (Szymanski,) 1266 4674 w (``Assembling) 1750 4674 w (Code) 2300 4674 w (for) 2540 4674 w (Machines) 2684 4674 w (with) 3094 4674 w (Span\255dependent) 3305 4674 w (Instructions'',) 3989 4674 w 9 /Palatino-Italic f (Communica\255) 4568 4674 w (tions) 720 4784 w (of) 923 4784 w (the) 1011 4784 w (ACM,) 1144 4784 w 9 /Palatino-Roman f (Vol) 1400 4784 w (21\(4\),) 1564 4784 w (pp.) 1805 4784 w (300\255308,) 1959 4784 w (1978.) 2305 4784 w cleartomark showpage saveobj restore %%EndPage: 9 9 %%Trailer done %%DocumentFonts: LucidaSansUnicode20 Courier S1 Palatino-Roman Palatino-Bold Palatino-Italic %%Pages: 9